skills/standard/debug/SKILL.md
Bug investigation and fix workflow. Triggers: 'debug', 'fix bug', 'investigate issue', 'something is broken', or /debug. Hotfix track for quick fixes, thorough track for root cause analysis. Do NOT use for feature development or refactoring. Do NOT escalate to /ideate unless the fix requires architectural redesign.
npx skillsauth add lvlup-sw/exarchos debugInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Investigation-first workflow for debugging and regression fixes. Provides two tracks based on urgency: hotfix (fast, minimal ceremony) and thorough (rigorous, full RCA documentation).
Activate this skill when:
debug commandDisambiguation: If the user says "fix" or "clean up" — use debug when something is broken (error, crash, wrong behavior). Use refactor when the code works but needs structural improvement.
debug
│
┌────┴────┐
│ Triage │
└────┬────┘
│
┌─────────────────┼─────────────────┐
│ │ │
--hotfix (default) --escalate
│ │ │
▼ ▼ ▼
┌────────────────┐ ┌─────────────┐ ┌──────────┐
│ Hotfix Track │ │ Thorough │ │ ideate │
│ │ │ Track │ │ handoff │
└────────────────┘ └─────────────┘ └──────────┘
# Default: thorough track
debug "Description of the bug"
# Fast path: hotfix track
debug --hotfix "Production is down - users can't login"
# Escalate to feature workflow
debug --escalate "This needs architectural changes"
# Switch from hotfix to thorough (during investigation)
debug --switch-thorough
# Escalate to ideate (manual handoff)
debug --escalate "Reason for escalation"
# Resume after context compaction
rehydrate <featureId>
| Aspect | Hotfix | Thorough | |--------|--------|----------| | Urgency | P0 (production down) | P1/P2 (normal priority) | | Investigation | 15 min time-boxed | No time limit | | RCA Document | No (minimal in state) | Yes (full docs/rca/) | | Worktree | No (in-place fix) | Yes (isolated) | | Review | Smoke test only | Spec review | | Human Checkpoints | 1 (merge) | 1 (merge) |
For track-selection criteria at the triage phase, query the decision runbook:
exarchos_orchestrate({ action: "runbook", id: "triage-decision" })
For investigation escalation criteria, query:
exarchos_orchestrate({ action: "runbook", id: "investigation-decision" })
These runbooks encode the structured decision trees for track selection. The agent reads the decision tree and follows the guidance — the platform does not execute branches.
| Signal | Use debug | Use refactor | |--------|-----------|--------------| | Something is broken or wrong | Yes | No | | Code works but is messy/complex | No | Yes | | Users report a bug or regression | Yes | No | | Performance degradation | Start with debug (investigate) | Escalate to refactor if structural | | "This should be reorganized" | No | Yes | | Error in production logs | Yes | No |
Rule of thumb: if there is a symptom (something that should work but doesn't), use debug. If there is dissatisfaction with working code (hard to read, violates SOLID, duplicated logic), use refactor.
Fix production issues ASAP. Speed over ceremony.
HSM phases: triage → investigate (15 min max) → hotfix-implement (no worktree) → hotfix-validate → completed
See references/triage-questions.md for triage guidance.
investigation.startedAt in stateinvestigation.timeout event, pause for user confirmation
For detailed phase instructions, see references/hotfix-track.md.
Fix bugs with proper rigor. Full RCA documentation.
HSM phases: triage → investigate → rca → design → debug-implement (worktree + TDD) → debug-validate → debug-review → synthesize → completed
For detailed phase instructions, see references/thorough-track.md. For systematic investigation methodology, see references/investigation-checklist.md.
The rca and design phases are the thorough track's design-time surfaces. At these phases — before committing to a fix approach — surface a Constraints section anchored to the architectural invariants relevant to the fix. This is the debug design-time equivalent of /ideate's Phase 0 and uses the same single shared source of truth for the selection rules and devCatalog gating: see @skills/ideate/references/constraint-anchoring.md. Load .exarchos/invariants.md (cost-of-load: always-load entries) and emit the Constraints section. devCatalog-gated: when .exarchos.yml: invariants.devCatalog: enabled is unset or disabled, surface no Constraints section and proceed directly. The hotfix track skips this step (speed over ceremony).
Before fixing a bug in the thorough track, capture the buggy behavior as a characterization test:
This is not required for the hotfix track — hotfixes prioritize speed over documentation.
ideate.For detailed switching logic, see references/thorough-track.md.
Both tracks have ONE human checkpoint before completion.
Hotfix auto-chain:
triage → investigate → hotfix-implement → [HUMAN: hotfix-validate] → completed
(auto) (auto)
Thorough auto-chain:
triage → investigate → rca → design → debug-implement → debug-validate → debug-review → [HUMAN: synthesize] → completed
(auto) (auto) (auto) (auto) (auto) (auto)
Initialize debug workflow:
action: "init", featureId: "debug-<issue-slug>", workflowType: "debug"
See @skills/debug/references/state-schema.md for full schema.
Every phase transition has a guard that must be satisfied. Before transitioning, consult @skills/checkpoint/references/phase-transitions.md for the exact prerequisite for each guard.
Use exarchos_workflow({ action: "describe", actions: ["update", "init"] }) for
parameter schemas and exarchos_workflow({ action: "describe", playbook: "debug" })
for phase transitions, guards, and playbook guidance.
Debug workflows resume like feature workflows:
rehydrate <featureId>
Extended to support:
workflowType: "debug" fieldrehydrate <featureId> (the rehydration document's next_actions envelope determines the next verb on resume)rehydrate <featureId> at session start (no implicit hook)Completion guard shapes — set these via exarchos_workflow update before transitioning to completed:
| Exit path | Guard | Required state |
|-----------|-------|----------------|
| Direct push (no PR) | fix-verified-directly | resolution: { directPush: true, commitSha: "<sha>" } |
| Validation passed | validation-passed | validation: { passed: true } |
| Via PR | Through synthesize → completed | prUrl must exist |
references/rca-template.md)Completion guard shapes — the thorough track exits through synthesize → completed (guard: pr-url-exists, requires prUrl in state).
| Don't | Do Instead | |-------|------------| | Start coding before understanding bug | Investigate first, always | | Skip RCA on thorough track | Document for future learning | | Exceed 15 min on hotfix investigation | Switch to thorough track | | Add features during bug fix | Scope creep - only fix the bug | | Skip tests because "it's just a fix" | Fixes need tests to prevent regression |
See references/troubleshooting.md for MCP tool failures, state desync, investigation timeouts, and track switching issues.
testing
Create pull request from completed feature branch using GitHub-native stacked PRs. Use when the user says 'create PR', 'submit for review', 'synthesize', or runs /synthesize. Validates branch readiness, creates PR with structured description, and manages merge queue. Do NOT use before review phase completes. Not for draft PRs.
testing
Shepherd PRs through CI and reviews to merge readiness. Operates as an iteration loop within the synthesize phase (not a separate HSM phase). Uses assess_stack to check PR health, fix failures, and request approval. Triggers: 'shepherd', 'tend PRs', 'check CI', or /shepherd.
development
Single adversarial review pass over the integrated branch diff — spec-compliance, code quality, and test adequacy judged together by one fresh-context reviewer. Triggers: /review, 'review the changes', or after delegation completes. Emits one verdict (reviews.review.status). Do NOT use for plan-review (that is its own dispatched gate) or for debugging.
testing
Restore and read workflow state after a context break — re-inject workflow phase, task progress, and behavioral guidance into the current session, reconcile state against git reality, and verify whether a workflow exists. Use when the user says 'resume', 'rehydrate', 'where were we', or runs /rehydrate, or when the agent has drifted after context compaction. Do NOT use for saving or mutating state (that is /checkpoint).