The failure worth naming is an empty result read as good news. A query returning no rows can mean a service went quiet or that it stopped sending events altogether, and nothing in the query itself separates those two, so the template writes both readings down. OpenCode leaves the model choice to you, so the engine behind it can be one that does not tidy an empty result into reassurance.
Run a staged conversation — no account needed. The agent handles it for real while a simulated world answers its tool calls; nothing touches real accounts, and nothing is actually sent.
checkout p99 over 800ms
The trigger evaluates P99(duration_ms) over five minutes against a threshold of 800. The evaluation that fired returned 2,140 at 14:07 UTC, against 310 at 13:30. The trigger has no group by of its own. The dataset carries service.name, http.route, tenant_id and app.cache_hit.
Using this template drops you into a guided setup. It asks exactly this, nothing else:
Connect Honeycomb
One sign-in. The agent acts through your account, scoped to what this template uses.
Connect Slack
One sign-in. The agent acts through your account, scoped to what this template uses.
Triage notes
How you want a fired trigger written up - the field worth grouping by in each dataset, the triggers you already know are noisy, plus the opening move you expect on a latency alert, on an error rate alert, and on a query that comes back with nothing in it.
Runs on OpenCode
Preselected for this page — connect your OpenCode account during setup, or switch to NoClick's built-in models with one click.
Watch it handle a test run
A staged conversation against a simulated world — then it’s live.
The note says the window returned nothing, says what the window before it returned, and states plainly that a quiet service and a dead one look identical from here.
Smoothing an absence into a sentence that sounds settled is a model habit rather than a rule problem, which makes it worth checking on whichever engine you connect.
The triage notes variable is where you name the field worth grouping by per dataset, and anywhere you say nothing it falls back to service and route. That is one line per dataset, written once in your own words, and adding a dataset later means another line rather than a change to the workflow.
Free to start. Guided setup, a test run against staged conversations, and it's live.