All loops
OpsMedium 14 min· claude-sonnet-4-5

Sentry → AI bug triage

Group new errors by suspected cause, link likely-related deploy.

NOT DEPLOYEDNOT DEPLOYED
0149ms
Trigger
cron(0 7 * * *) fired · every day · 07:00
02809ms
Agent
claude-sonnet-4-5 · in 909 tok · out 231 tok
03199ms
Tools
github-mcp/github:issues.createComment → 429 backoff · 229ms
0439ms
Verify
schema check · pydantic v2 passed
0569ms
Output
pagerduty ack · incident summary posted
0629ms
Notify
audit log written · runbook link attached
SUCCESS
0%
0 runs
P50
0ms
median
P95
0ms
tail
AVG COST
per run
LAST OK
never
LAST FAIL
never
none
Latency · last 30 runs0 samples
no runs yet
Latest output · what your users see
PagerDutywarning

p95 latency on /api/checkout crossed 1200ms for 6 min. Correlated deploy: web@d41f2a. Suggested rollback command attached.

deduped ×8·runbook: runbooks/checkout-latency.md#rollback
// press Test to run once · Watch live to keep streaming · Deploy to make it real
The problem

Sentry shows 200 new errors after a deploy. You can't tell which are real and which are downstream noise.

The outcome

Three groups in Slack: 'Caused by deploy X' (collapse one bug, fixes 180 errors), 'Pre-existing', 'Unknown — please look'.

Ingredients & skills

Secrets
  • ANTHROPIC_API_KEY
  • SENTRY_WEBHOOK_SECRET
  • GITHUB_TOKEN
  • SLACK_WEBHOOK_URL
Providers
  • Anthropic
  • Sentry
  • GitHub
  • Slack
MCP servers
  • github-mcp
#ops#sentry#incident

How it works

Sentry webhook on `event.created`. Claude clusters new errors by suspected root cause and posts a digest grouped by likely-broken deploy.

Step 1

1 — Receive and verify

Sentry signs with HMAC SHA-256. Verify before parsing.

Step 2

2 — Cluster

Pass last hour of events to Claude with the last 5 deploy SHAs.

Step 3

3 — Post the digest

One Slack post per cluster, threaded.

One-line deploy

The button above runs the same command with your saved config. This is the raw CLI form.

bash
locker deploy sentry-triage --trigger sentry-webhook

Related loops