Fix Sentry Errors
Proactively scan Sentry for all unresolved errors, group them by root cause, create a unified fix plan, implement with TDD, review, deploy, and resolve the issues in Sentry.
Prerequisites
Read CONFIG.md at the start of every run. This file contains project-specific Sentry settings (org slug, project slug, region URL, deploy provider). If CONFIG.md doesn't exist, warn the user and point them to CONFIG.template.md.
When to Use
- User wants to proactively fix production errors from Sentry
- User says "fix sentry errors", "scan sentry", "sentry cleanup"
- Periodic maintenance to clear unresolved Sentry issues
Parameters
| Parameter | Default | Description |
|---|---|---|
branch | ask | Branch strategy: ask (prompt user), worktree (isolated worktree), main (commit directly to main) |
Pipeline Overview
Phase 1: Fetch all unresolved errors from Sentry Phase 2: Triage & group by root cause → ⛔ USER GATE Phase 3: Diagnose each group (parallel agents) → ⛔ USER GATE Phase 4: Create unified fix plan (writing-plans) Phase 5: Implement with TDD (executing-plans) Phase 6: Review (layered dispatch) Phase 6.1: Compatibility check (parallel agents) Phase 6.2: Simplify (/simplify) Phase 7: Commit & push Phase 8: Deploy monitor (Vercel MCP polling) Phase 9: Resolve in Sentry (with verification gate) Phase 10: Summary
Phase 1: Fetch All Unresolved Errors
Goal: Retrieve all unresolved Sentry issues for the project.
Read Sentry config from CONFIG.md:
sentry.org— org slugsentry.project— project slugsentry.region_url— region URL (e.g.,https://us.sentry.io)
-
Search for unresolved issues using Sentry MCP:
mcp__claude_ai_Sentry__search_issues - org: {sentry.org from CONFIG.md} - project: {sentry.project from CONFIG.md} - query: "is:unresolved" - sort: "events" (most events first) -
Cap at 25 issues. If more than 25 unresolved issues exist, fetch only the top 25 by event count and warn:
⚠️ Found {N} unresolved issues — fetching top 25 by event count. Consider running fix-sentry again for the remainder. -
For each issue (up to 25), fetch details using
mcp__claude_ai_Sentry__get_sentry_resource:- Exception type + message
- Stack trace (top 5 frames)
- Event count + user count
- First seen / last seen
- Tags: browser, environment, URL, release
-
Compile structured error list — one entry per issue with all fields above.
Error handling:
- If Sentry MCP auth fails: prompt user to authenticate, retry once, abort if still fails
- If no unresolved issues found: report "No unresolved Sentry errors — nothing to fix" and exit
Phase 2: Triage & Group ⛔ USER GATE
Goal: Cluster errors by root cause, rank by impact, and get user's scope decision.
-
Cluster errors by root cause using these rules:
- Same file + same function → same group
- Related stack traces (shared caller chain) → same group
- Same error message with different URLs → same group
-
Rank groups by impact:
event_count × user_count(highest first) -
Present to user:
Found {N} unresolved errors in {M} groups: | # | Group | Errors | Events | Users | Root File | |---|-------|--------|--------|-------|-----------| | 1 | {description} | 5 | 120 | 45 | lib/services/foo.ts | | 2 | {description} | 3 | 80 | 20 | app/api/bar/route.ts | ... Fix all / Pick specific groups / Cap at top N? -
If >10 groups: suggest splitting across sessions:
That's a lot of groups. Recommend picking top 5 for this session and running fix-sentry again for the rest.
⛔ STOP — wait for user's scope decision before proceeding.
Store: selected_groups for downstream phases.
Phase 3: Diagnose ⛔ USER GATE
Goal: Determine root cause for each selected error group using parallel research agents.
For each selected error group, dispatch parallel research agents using dispatching-parallel-agents:
Per group (2 agents in parallel):
Agent A — Superpowers Systematic Debugging:
Spawn a sub-agent with this prompt:
Investigate this Sentry error group using the systematic-debugging methodology. ERROR GROUP: {group_description} ERRORS IN GROUP: {list of error titles and Sentry IDs} STACK TRACES: {top 5 frames from each error} AFFECTED FILES: {files appearing in stack traces} EVENT COUNT: {total events across group} USER COUNT: {total affected users} Follow the 4-phase process: 1. Reproduce: confirm the bug exists in code (read affected files) 2. Find working examples: find similar code that DOES work correctly 3. Compare differences: what's different between working and broken? 4. Form hypothesis: single root cause with evidence Do NOT fix anything. Do NOT edit any files. Return a structured summary: - ROOT_CAUSE: 1-2 sentences - EVIDENCE: specific code references (file:line) - AFFECTED_FILES: list with roles - HYPOTHESIS: what the fix should be
Agent B — gstack /investigate:
Spawn a sub-agent with this prompt:
Debug this Sentry error group using the /investigate methodology (4-phase iron law). ERROR GROUP: {group_description} ERRORS IN GROUP: {list of error titles and Sentry IDs} STACK TRACES: {top 5 frames from each error} AFFECTED FILES: {files appearing in stack traces} EVENT COUNT: {total events across group} USER COUNT: {total affected users} Follow the iron law: no fixes without root cause. Phase 1: Investigate — read errors, check recent changes, gather evidence Phase 2: Analyze — find patterns, compare against references Phase 3: Hypothesize — form single hypothesis with evidence Do NOT implement fixes. Do NOT edit any files. Return a structured summary: - ROOT_CAUSE: 1-2 sentences - EVIDENCE: specific code references (file:line) - AFFECTED_FILES: list with roles - HYPOTHESIS: what the fix should be
Both agents run in parallel (run_in_background: true). Wait for both to complete.
Aggregation (main orchestrator)
After both agents return for each group:
- Compare root causes: Do both agents agree?
- If they agree (high confidence): Merge into a unified finding
- If they disagree: Present both with evidence to the user:
The user's choice becomes the root cause for that group.Two research agents investigated Group {N} and reached different conclusions: **Agent A (systematic-debugging):** Root cause: {A's root cause} Evidence: {A's evidence} **Agent B (/investigate):** Root cause: {B's root cause} Evidence: {B's evidence} Which analysis looks more accurate? (A / B / neither — let me dig deeper) - Merge affected file lists (union from both agents)
After all groups diagnosed, present unified diagnosis:
- Per-group root cause + evidence
- Cross-group patterns (shared root causes across groups)
- Total affected files (deduplicated)
⛔ STOP: "Does this diagnosis look right?"
Wait for user confirmation before proceeding.
Phase 4: Plan
Goal: Create a unified implementation plan for all selected error groups.
Delegate planning to superpowers writing-plans:
Spawn a sub-agent with this prompt:
Create a unified implementation plan for these Sentry error fixes using the writing-plans methodology. ERROR GROUPS: {for each group: group_description, root_cause, affected_files, hypothesis} CROSS-GROUP PATTERNS: {shared root causes if any, shared affected files} PROJECT: Read CLAUDE.md for conventions, patterns, and project structure. Requirements: - TDD: every task starts with a failing test - Group related fixes into the same task when they share files - Exact file paths, complete code in every step - Bite-sized tasks (2-5 minutes each) - Save plan to: docs/superpowers/plans/fix-sentry-{YYYY-MM-DD}.md Do NOT implement — only plan.
Store the returned plan_file_path for Phase 5.
Phase 5: Implement
Goal: Implement all fixes using TDD methodology.
MANDATORY: Write a failing test BEFORE implementing each fix. This proves the error exists and prevents false-positive "fix verified" claims.
Spawn a sub-agent for the implementation:
Implement the Sentry error fixes using TDD. PLAN: {plan_file_path from Phase 4} ERROR GROUPS: {group summaries with root causes} PROJECT: Read CLAUDE.md for conventions, patterns, and project structure. For each task in the plan, follow this sequence strictly: STEP 1 — RED (prove the error): Use the test-driven-development methodology. Write a minimal failing test that demonstrates the error. The test should assert the CORRECT behavior — it will fail because the bug exists. Run the test and confirm it FAILS. If it passes, your test doesn't capture the bug — rewrite it. STEP 2 — GREEN (fix the error): Follow the plan from {plan_file_path} using executing-plans. Make the minimal code change to make the test pass. Run the test and confirm it PASSES. STEP 3 — VERIFY: npm run build 2>&1 | tail -5 npm run lint 2>&1 | tail -5 npm test -- --testPathPattern="{test_file}" 2>&1 Return: - FILES_CHANGED: list of modified files - TEST_FILES: paths to new/modified tests - TEST_RESULT: PASS/FAIL with output - BUILD_STATUS: PASS/FAIL - LINT_STATUS: PASS/FAIL
If BUILD or LINT fails: review the error, fix, re-verify. Max 2 attempts before escalating to user.
If TEST still FAILS after fix: the fix is wrong — loop back. Re-analyze using test failure output as new evidence. Max 2 implementation attempts before escalating to user.
Phase 6: Review
Goal: Multi-agent code review of all changes.
MANDATORY. Skip only if Phase 5 used executing-plans with a plan that included its own review cycle.
Layered Review Architecture
Review uses dispatching-parallel-agents with two layers:
Layer 1 — Always run (2 agents):
| Agent | Skill | Focus |
|---|---|---|
| Plan Compliance Reviewer | superpowers requesting-code-review | Do the fixes match the root causes and plan? |
| Structural Reviewer | gstack /review | SQL safety, LLM trust boundaries, conditional side effects |
Layer 2 — Based on diff analysis (1-3 agents):
Run git diff --stat and classify changed files:
| If diff touches... | Add agent |
|---|---|
catch, error, throw, .catch( | pr-review-toolkit:silent-failure-hunter |
type , interface , z.object, z.string | pr-review-toolkit:type-design-analyzer |
| Lines are verbose or deeply nested | pr-review-toolkit:code-simplifier |
Minimum total: 3 agents. Maximum: 5 agents.
Steps
-
Run
git diff --statto see the scope of changes -
Capture BASE_SHA (
git rev-parse HEAD~1) and HEAD_SHA (git rev-parse HEAD) — if no commit yet, use unstaged diff -
Select Layer 2 agents based on the diff classification above
-
Announce the team:
Spawning {N} review agents: {Agent1} (Layer 1), {Agent2} (Layer 1), {Agent3} (Layer 2), ... — reviewing {N} files, {M} lines changed -
Dispatch all agents in parallel (
run_in_background: true):Layer 1 — Plan Compliance (superpowers requesting-code-review):
Review these Sentry error fixes against the requirements. WHAT_WAS_IMPLEMENTED: Fixes for {N} Sentry error groups PLAN_OR_REQUIREMENTS: {plan_file_path} BASE_SHA: {base_sha} HEAD_SHA: {head_sha} DESCRIPTION: Batch fix for {N} Sentry error groups. Root causes: {summary}.Layer 1 — Structural (gstack /review):
Pre-landing review of the diff on this branch. Run git diff against the base branch. Focus on: SQL safety, LLM trust boundaries, conditional side effects, structural issues.Layer 2 agents (PR Review Toolkit): Each agent receives:
Run git diff to see the changes. This is a read-only review — no edits. Return findings with severity (critical/high/medium/low), file:line, and specific fix suggestion. Max 10 findings. -
Report completion as each agent finishes:
Agent 1 (Plan Compliance): Done — 2 findings (0 critical, 1 high, 1 medium) Agent 2 (Structural): Done — 0 findings Agent 3 (Silent Failure Hunter): Done — 1 finding (0 critical, 0 high, 1 medium) -
Merge and deduplicate findings:
- Group by file:line
- Keep highest severity when duplicated across agents
- Cap at 15 findings total
- Sort by severity (critical → high → medium → low)
After review completes:
- Critical or high issues: Fix them, re-run build/lint, create a new commit
- Medium/low issues: Note them, fix if quick
- No issues: Note "No issues found" in summary
Iteration limit: Max 2 fix-then-re-review cycles.
Phase 6.1: Compatibility Check
Goal: Verify backward compatibility and pattern consistency.
Dispatch 3 parallel sub-agents using dispatching-parallel-agents:
Agent 1 — Backward Compatibility Checker:
Check backward compatibility of the changes on this branch. Review all modified files. For each, check: - Exported function signatures: any parameter changes? - Exported types/interfaces: any removed or renamed fields? - Server actions: any changed return types? - API routes: any changed response shapes? Return findings as: - SEVERITY: critical/important/minor - FILE: path - ISSUE: what broke - FIX: how to restore compatibility
Agent 2 — Reusability Auditor:
Audit the changes for code reuse opportunities. Check: - Any logic in components that should be in lib/? - Any duplicated code across the changed files? - Any utility functions that already exist in lib/ being reimplemented? Return findings as: - SEVERITY: important/minor - FILE: path - ISSUE: what's duplicated or misplaced - FIX: where to move it
Agent 3 — Pattern Consistency Checker:
Check the changes follow existing project patterns. Read CLAUDE.md for project conventions. Then review: - Do new functions follow naming conventions of sibling files? - Do error handlers follow the catch block rules? - Do API calls use apiClient? - Do date operations use parseISO/format? Return findings as: - SEVERITY: important/minor - FILE: path - ISSUE: what's inconsistent - FIX: the correct pattern
Fix critical/important findings. Minor findings: note for future.
Phase 6.2: Simplify
Goal: Remove verbosity and ensure DRY compliance.
Invoke /simplify scope=session:
- Auto-fix DRY violations
- Remove dead code introduced by the fixes
- Consolidate duplicated logic into lib/ utilities
- Re-run
npm run buildandnpm run lintif changes are made
Phase 7: Commit & Push
Goal: Create a clean commit with all Sentry issue references and push.
-
Stage all changes:
bashgit add -A -
Create commit with this message format:
NO-TICKET: fix: resolve {N} Sentry errors Fixes: - {SENTRY-ID-1}: {title} - {SENTRY-ID-2}: {title} - {SENTRY-ID-3}: {title} ... Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> -
Push to remote:
bashgit push
Store: commit_hash, push_status for Phase 10.
Phase 8: Deploy Monitor
Goal: Wait for deployment to complete.
Read deploy provider from CONFIG.md (deploy.provider). Default: Vercel.
For Vercel:
- Use
mcp__claude_ai_Vercel__list_deploymentsto find the latest deployment - Poll on this schedule: 45s, 45s, 60s, 60s, 60s, 60s (max 6 polls)
- Check deployment state each poll:
- READY: deployment succeeded — proceed to Phase 9
- ERROR: read build logs via
mcp__claude_ai_Vercel__get_deployment_build_logs, diagnose, fix, re-commit, re-push (max 2 retries) - BUILDING/QUEUED: continue polling
Store: deploy_status, deploy_url for Phase 10.
If deploy fails after 2 retries: report failure and skip Phase 9 (cannot resolve Sentry issues without successful deploy).
Phase 9: Resolve in Sentry ⛔ VERIFICATION GATE
Goal: Mark fixed issues as resolved in Sentry, but only after verifying they stopped receiving events.
Apply verification-before-completion discipline:
-
Wait 2 minutes after deploy is READY (allow time for new errors to surface)
-
For each fixed Sentry issue: a. Check: has the issue received new events since the deploy?
- Use
mcp__claude_ai_Sentry__search_eventsto look for events after the deploy timestamp b. If no new events since deploy: - Mark as resolved via
mcp__claude_ai_Sentry__update_issuewithstatus: "resolved"c. If still receiving events: - Skip resolution
- Report as "fix may be incomplete — still receiving events"
- Use
-
Report resolution status per issue:
| Issue | Status | |-------|--------| | {ID-1} | ✅ Resolved | | {ID-2} | ✅ Resolved | | {ID-3} | ⚠️ Skipped — still receiving events |
Store: resolved_count, skipped_count, skipped_issues for Phase 10.
Phase 10: Summary
Goal: Present a comprehensive summary of all work done.
## fix-sentry Complete **Errors found**: {N} in {M} groups **Scope**: {all / user-selected groups} **Commit**: `{hash}` — {subject} **Deployment**: {Ready at URL / Failed} ### Fixes Applied | Group | Errors Fixed | Root Cause | Files Changed | |-------|-------------|------------|---------------| | 1 | 5 | {cause} | {files} | | 2 | 3 | {cause} | {files} | ### Sentry Resolution | Issue | Status | |-------|--------| | {ID-1} | ✅ Resolved | | {ID-2} | ✅ Resolved | | {ID-3} | ⚠️ Skipped — still receiving events | ### Review Findings {summary of review findings — issues found and fixed, suggestions deferred} ### Test Coverage {list of new test files and what they verify}
Error Handling
| Scenario | Action |
|---|---|
| Sentry MCP auth fails | Prompt user to authenticate, retry once, abort if still fails |
| No unresolved issues found | Report "No unresolved Sentry errors — nothing to fix" and exit |
| Research agents disagree on root cause | Present both to user, user picks |
| Build fails after fix | Diagnose, fix, retry (max 2 attempts), escalate to user |
| Deploy fails | Read logs, fix, re-commit, re-push (max 2 retries) |
| Sentry issue still receiving events after deploy | Skip resolution, report as "fix may be incomplete" |
| >25 unresolved issues | Cap fetch at 25, warn user, suggest multiple sessions |
| >10 error groups | Suggest user picks top N groups for this session |
Evaluation Criteria
| # | Criterion | Pass | Fail |
|---|---|---|---|
| 1 | Sentry fetch | Phase 1 fetches all unresolved issues with details (stack trace, event count, user count) | Issues fetched without details, or cap not applied |
| 2 | Grouping quality | Phase 2 clusters errors by shared file/function/caller chain, not just error message | Each error treated as separate group, or unrelated errors merged |
| 3 | User gate (scope) | Phase 2 stops and waits for user to choose scope before proceeding | Proceeds to Phase 3 without user confirmation |
| 4 | Parallel diagnosis | Phase 3 dispatches two agents per group (systematic-debugging + /investigate) | Only one research methodology used |
| 5 | Disagreement handling | When agents disagree, both findings presented to user for decision | Disagreement silently resolved or ignored |
| 6 | User gate (diagnosis) | Phase 3 stops and waits for user to confirm diagnosis | Proceeds to Phase 4 without user confirmation |
| 7 | Plan delegation | Phase 4 delegates to writing-plans with TDD requirement | Plan created inline without TDD structure |
| 8 | TDD gate | Phase 5 writes failing test before each fix (RED), then fix (GREEN) | Code changed without test, or test passes before fix |
| 9 | Review enforcement | Phase 6 dispatches Layer 1 (code-reviewer + /review) plus 1-3 Layer 2 agents | Review skipped or only 1 agent used |
| 10 | Compat check | Phase 6.1 checks backward compatibility, reusability, and pattern consistency | Compat check skipped |
| 11 | Commit format | Phase 7 commit lists all Sentry IDs in the message body | Generic commit message without Sentry references |
| 12 | Deploy monitoring | Phase 8 polls deployment and handles failures | Deploy status not checked |
| 13 | Verification gate | Phase 9 checks for new events before resolving each issue | Issues resolved without event check |
| 14 | Incomplete fix handling | Issues still receiving events are skipped, not force-resolved | All issues marked resolved regardless of event status |
| 15 | Summary completeness | Phase 10 includes fixes, resolution status, review findings, and test coverage | Summary missing sections or only partial |
| 16 | Context preservation | Heavy phases (1, 3, 4, 5, 6, 6.1) run as sub-agents. Main orchestrator stays under 40k tokens. | All phases run inline, burning context |
Mandatory Checklist (before reporting summary)
- Sentry issues fetched: All unresolved issues retrieved with full details
- User approved scope: User explicitly chose which groups to fix
- User approved diagnosis: User confirmed root causes before planning
- TDD tests written: Failing tests written before fixes for each group
- All tests pass:
npm testpasses after all fixes - Build passes:
npm run buildsucceeds - Lint passes:
npm run linthas no errors - Review complete: At least 3 review agents ran and findings addressed
- Deployed: Deployment succeeded (or failure reported)
- Sentry resolved: Fixed issues marked resolved (or skipped with reason)


