systematic-debugging
Skill0 starsChanged 6 months agoMITView on GitHub
Applies structured debugging through investigation, hypotheses, testing, and validation.
190 other projects use a version of this, 121 of them edited.
Adopted by
Most recently taken up by
- DemonDamon/AgenticXedited, first seen Nov 9, 2026
- chrysogonus/power-agentsedited, first seen Nov 8, 2026
- willy92wins/DayZ-Modding-Knowledge-Packedited, first seen Nov 8, 2026
- roundpilot/superpowers-antigravityedited, first seen Nov 8, 2026
- REPOZY/superpowers-optimizedtheir own version, first seen Nov 8, 2026
- lingyired/status-trioedited, first seen Nov 8, 2026
Used with
Projects with it also use chinese-code-review, chinese-commit-conventions and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Leodorareluctant259Skillchinese-code-review
中文代码审查规范——在保持专业严谨的同时,用符合国内团队文化的方式给出有效反馈
Also in 8 projects that use this
Leodorareluctant259Skillchinese-commit-conventions
中文 Git 提交规范 — 适配国内团队的 commit message 规范和 changelog 自动化
Also in 8 projects that use this
obraSkilldiagnosing-superpowers
Use when a superpowers session went wrong and your human partner wants to know why — repeated work, ignored plans, stumbles, poor results, a skill that didn't fire, "it took too long", "why is it so expensive", "what is it doing" — or wants to build a bug report for the superpowers maintainers, for the current session or a past one identified by id or path, on any harness.
Also in 20 projects that use this
mjunaidcaSkillbuilding-chatgpt-apps
Guides creation of ChatGPT Apps with interactive widgets using OpenAI Apps SDK and MCP servers. Use when building ChatGPT custom apps with visual UI components, embedded widgets, or rich interactive experiences. Covers widget architecture, MCP server setup with FastMCP, response metadata, and Developer Mode configuration. NOT when building standard MCP servers without widgets (use building-mcp-servers skill instead).
Also in 4 projects that use this
mjunaidcaSkillbuilding-chat-interfaces
Build AI chat interfaces with custom backends, authentication, and context injection. Use when integrating chat UI with AI agents, adding auth to chat, injecting user/page context, or implementing httpOnly cookie proxies. Covers ChatKitServer, useChatKit, and MCP auth patterns. NOT when building simple chatbots without persistence or custom agent integration.
Also in 4 projects that use this
- +2 more from Leodorareluctant259
- +5 more from mjunaidca
Other versions190 projects use a version of this.
Word for word · 0
None found.
Edited · 121
- obra/superpowers★ 314k90% same
- NousResearch/hermes-agent★ 262k38% same
- openai/plugins★ 7.8k91% same
- farm-fe/farm★ 5.6k91% same
- microsoft/FluidFramework★ 4.9k89% same
- heyitsnoah/claudesidian★ 2.6k63% same
- UniClipboard/UniClipboard★ 2k91% same
- lingyired/status-trio★ 1.8k90% same
- pcvelz/superpowers★ 1.3k91% same
- math-inc/OpenGauss★ 1.3k56% same
111 more not listed
Wrote their own version · 69
- open-metadata/OpenMetadata★ 16ksame name
- jnMetaCode/superpowers-zh★ 8.4ksame name
- vudovn/ag-kit★ 8.2ksame name
- vudovn/antigravity-kit★ 8.2ksame name
- ChrisWiles/claude-code-showcase★ 6.1ksame name
- compozy/compozy★ 2.9ksame name
- GanyuanRan/Aegis★ 1.4ksame name
- SethGammon/Citadel★ 927same name
- KbWen/agentic-os★ 229same name
- linxuan-sys/opencode-skills-chinese★ 200same name
59 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository10 other files it gives its agents.
- .claude/skills/react-patterns/AGENTS.mdAGENTS.md
- accessibilitySkill
- clarify-requirementsSkill
- code-review-processSkill
- component-architectureSkill
- frontend-patternsSkill
- frontend-performanceSkill
- react-patternsSkill
- responsive-designSkill
- typescriptSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
30 rules. 8 are common, 21 are distinctive, and 1 is very specific to this project.
8
Common
Most of the 177 edited versions we read keep these.
21
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Common: line 29
Core principle: ALWAYS find root cause before attempting fixes.
- Common: line 39
If you haven't completed Phase 1, you cannot propose fixes.
- Distinctive: line 43
Use for ANY technical issue:
- Very specific: line 63
If the user wants an issue-ready fix plan after debugging, package the findings using the behavior-level template in …
- Distinctive: line 84
When orchestrating multi-agent debugging:
- Common: line 101
Don't skip past errors or warnings
- Common: line 103
Read stack traces completely
- Common: line 110
If not reproducible → gather more data, don't guess
- Common: line 163
Keep tracing up until you find the source
- Distinctive: line 168
When the failure surface is large, cut it in half repeatedly:
- Distinctive: line 190
Check filesystem differences: paths, permissions, case sensitivity
- Distinctive: line 191
Check network: DNS resolution, firewall rules, proxy settings
- Distinctive: line 192
Check resource limits: memory, CPU, file descriptors, disk space
- Distinctive: line 205
If implementing pattern, read reference implementation COMPLETELY
- Distinctive: line 206
Don't skim - read every line
- Distinctive: line 212
Don't assume "that can't matter"
- Distinctive: line 231
Don't fix multiple things at once
- Distinctive: line 236
DON'T add more fixes on top
- Distinctive: line 240
Don't pretend to know
- Distinctive: line 252
MUST have before fixing
- Distinctive: line 253
Write a proper failing test that reproduces the bug
- Distinctive: line 263
No other tests broken?
- Common: line 269
If < 3: Return to Phase 1, re-analyze with new information
- Distinctive: line 271
DON'T attempt Fix #4 without architectural discussion
- Distinctive: line 283
Should we refactor architecture vs.
- Common: line 291
If you catch yourself thinking:
- Distinctive: line 317
When you see these: STOP. Return to Phase 1.
- Distinctive: line 343
If systematic investigation reveals issue is truly environmental, timing-dependent, or external:
- Distinctive: line 346
Document what you investigated
- Distinctive: line 348
Add monitoring/logging for future investigation
“Common” is measured: kept by at least 6 in 10 of the 177 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Systematic Debugging
Contents
- The Iron Law
- When to Use
- The Four Phases
- Phase 1: Root Cause Investigation
- Phase 2: Pattern Analysis
- Phase 3: Hypothesis and Testing
- Phase 4: Implementation
- Red Flags - STOP and Follow Process
- User Signals You're Doing It Wrong
- Common Rationalizations
- Quick Reference
- When Process Reveals "No Root Cause"
- Supporting Techniques
- Real-World Impact
Random fixes waste time and create new bugs. Quick patches mask underlying issues.
Core principle: ALWAYS find root cause before attempting fixes. Symptom fixes are failure.
Violating the letter of this process is violating the spirit of debugging.
The Iron Law
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRSTIf you haven't completed Phase 1, you cannot propose fixes.
When to Use
Use for ANY technical issue:
- Test failures
- Bugs in production
- Unexpected behavior
- Performance problems
- Build failures
- Integration issues
Use this ESPECIALLY when:
- Under time pressure (emergencies make guessing tempting)
- "Just one quick fix" seems obvious
- You've already tried multiple fixes
- Previous fix didn't work
- You don't fully understand the issue
Don't skip when:
- Issue seems simple (simple bugs have root causes too)
- You're in a hurry (rushing guarantees rework)
- Manager wants it fixed NOW (systematic is faster than thrashing)
If the user wants an issue-ready fix plan after debugging, package the findings
using the behavior-level template in references/issue-triage.md.
Model Selection for Debugging
Match model to bug complexity. Escalate models alongside abstraction levels.
| Bug Type | Model | Why |
| Typos, missing imports, syntax errors | Haiku | Obvious fixes, cheap verification |
| Stack traces, logic bugs, test failures | Sonnet | Best coding model, traces data flow |
| Race conditions, architectural bugs, subtle concurrency | Opus | Deep reasoning across multiple files |
Map to the 3-strike escalation:
Strike 1-2 (Implementation): Sonnet — fix at code level
Strike 3 (Design/Requirements): Escalate to Opus — rethink the approach
Post-fix (Validation): Haiku — run tests, confirm greenWhen orchestrating multi-agent debugging:
Sonnet debugger → fix attempt → Haiku validator (run tests)
├── passes → done
└── fails 3x → Opus for root cause analysis → back to SonnetThe Four Phases
complete each phase before proceeding to the next.
Phase 1: Root Cause Investigation
BEFORE attempting ANY fix:
- Read Error Messages Carefully
- Don't skip past errors or warnings
- They often contain the exact solution
- Read stack traces completely
- Note line numbers, file paths, error codes
- Reproduce Consistently
- Can you trigger it reliably?
- What are the exact steps?
- Does it happen every time?
- If not reproducible → gather more data, don't guess
- Check Recent Changes
- What changed that could cause this?
- Git diff, recent commits
- New dependencies, config changes
- Environmental differences
Gather Evidence in Multi-Component Systems
WHEN system has multiple components (CI → build → signing, API → service → database):
BEFORE proposing fixes, add diagnostic instrumentation:
For EACH component boundary: - Log what data enters component - Log what data exits component - Verify environment/config propagation - Check state at each layer Run once to gather evidence showing WHERE it breaks THEN analyze evidence to identify failing component THEN investigate that specific componentExample (multi-layer system):
# Layer 1: Workflow echo "=== Secrets available in workflow: ===" echo "IDENTITY: ${IDENTITY:+SET}${IDENTITY:-UNSET}" # Layer 2: Build environment xcodebuild -showBuildSettings | rg "CODE_SIGN|PROVISIONING" # Layer 3: Built artifact codesign --display --verbose=4 "$APP" || true security find-identity -p codesigning -v # Layer 4: Actual signing codesign --sign "$IDENTITY" --verbose=4 "$APP"This reveals: Which layer fails (secrets → workflow ✓, workflow → build ✗)
Trace Data Flow
WHEN error is deep in call stack:
See
root-cause-tracing.mdin this directory for the complete backward tracing technique.Quick version:
- Where does bad value originate?
- What called this with bad value?
- Keep tracing up until you find the source
- Fix at source, not at symptom
Bisect to Narrow Scope
When the failure surface is large, cut it in half repeatedly:
- Git bisect — find the commit that introduced the bug:
git bisect start git bisect bad # current commit is broken git bisect good <known-good-sha> # Git checks out midpoint — test and mark good/bad — repeat - Code path bisect — add logging at the midpoint of a call chain. If data is correct there, bug is downstream. If wrong, bug is upstream. Repeat.
- Test pollution bisect — use
find-polluter.shin this directory to find which test creates unwanted state:./find-polluter.sh '.git' 'src/**/*.test.ts'
- Git bisect — find the commit that introduced the bug:
Diff Environments
WHEN it works locally but fails in CI/staging/prod:
- Compare Node/Python/runtime versions
- Compare env vars:
env | sorton both, diff the output - Compare installed dependencies: lockfile differences, native module versions
- Check filesystem differences: paths, permissions, case sensitivity
- Check network: DNS resolution, firewall rules, proxy settings
- Check resource limits: memory, CPU, file descriptors, disk space
Don't assume environments are identical. Explicitly verify each layer.
Phase 2: Pattern Analysis
Find the pattern before fixing:
- Find Working Examples
- Locate similar working code in same codebase
- What works that's similar to what's broken?
- Compare Against References
- If implementing pattern, read reference implementation COMPLETELY
- Don't skim - read every line
- Understand the pattern fully before applying
- Identify Differences
- What's different between working and broken?
- List every difference, however small
- Don't assume "that can't matter"
- Understand Dependencies
- What other components does this need?
- What settings, config, environment?
- What assumptions does it make?
Phase 3: Hypothesis and Testing
Scientific method:
- Form Single Hypothesis
- State clearly: "I think X is the root cause because Y"
- Write it down
- Be specific, not vague
- Test Minimally
- Make the SMALLEST possible change to test hypothesis
- One variable at a time
- Don't fix multiple things at once
- Verify Before Continuing
- Did it work? Yes → Phase 4
- Didn't work? Form NEW hypothesis
- DON'T add more fixes on top
- When You Don't Know
- Say "I don't understand X"
- Don't pretend to know
- Ask for help
- Research more
Phase 4: Implementation
Fix the root cause, not the symptom:
- Create Failing Test Case
- Simplest possible reproduction
- Automated test if possible
- One-off test script if no framework
- MUST have before fixing
- Write a proper failing test that reproduces the bug
- Implement Single Fix
- Address the root cause identified
- ONE change at a time
- No "while I'm here" improvements
- No bundled refactoring
- Verify Fix
- Test passes now?
- No other tests broken?
- Issue actually resolved?
- If Fix Doesn't Work
- STOP
- Count: How many fixes have you tried?
- If < 3: Return to Phase 1, re-analyze with new information
- If ≥ 3: STOP and question the architecture (step 5 below)
- DON'T attempt Fix #4 without architectural discussion
If 3+ Fixes Failed: Question Architecture
Pattern indicating architectural problem:
- Each fix reveals new shared state/coupling/problem in different place
- Fixes require "massive refactoring" to implement
- Each fix creates new symptoms elsewhere
STOP and question fundamentals:
- Is this pattern fundamentally sound?
- Are we "sticking with it through sheer inertia"?
- Should we refactor architecture vs. continue fixing symptoms?
Discuss with your human partner before attempting more fixes
This is NOT a failed hypothesis - this is a wrong architecture.
Red Flags - STOP and Follow Process
If you catch yourself thinking:
- "Quick fix for now, investigate later"
- "Just try changing X and see if it works"
- "Add multiple changes, run tests"
- "Skip the test, I'll manually verify"
- "It's probably X, let me fix that"
- "I don't fully understand but this might work"
- "Pattern says X but I'll adapt it differently"
- "Here are the main problems: [lists fixes without investigation]"
- Proposing solutions before tracing data flow
- "One more fix attempt" (when already tried 2+)
- Each fix reveals new problem in different place
ALL of these mean: STOP. Return to Phase 1.
If 3+ fixes failed: Question the architecture (see Phase 4.5)
User Signals You're Doing It Wrong
Watch for these redirections:
- "Is that not happening?" — you assumed without verifying
- "Will it show us...?" — have added evidence gathering
- "Stop guessing" — you're proposing fixes without understanding
- "Ultrathink this" — question fundamentals, not just symptoms
- "We're stuck?" (frustrated) — your approach isn't working
When you see these: STOP. Return to Phase 1.
Common Rationalizations
| Excuse | Reality |
| "Issue is simple, don't need process" | Simple issues have root causes too. Process is fast for simple bugs. |
| "Emergency, no time for process" | Systematic debugging is FASTER than guess-and-check thrashing. |
| "Just try this first, then investigate" | First fix sets the pattern. Do it right from the start. |
| "I'll write test after confirming fix works" | Untested fixes don't stick. Test first proves it. |
| "Multiple fixes at once saves time" | Can't isolate what worked. Causes new bugs. |
| "Reference too long, I'll adapt the pattern" | Partial understanding guarantees bugs. Read it completely. |
| "I see the problem, let me fix it" | Seeing symptoms ≠ understanding root cause. |
| "One more fix attempt" (after 2+ failures) | 3+ failures = architectural problem. Question pattern, don't fix again. |
Quick Reference
| Phase | Key Activities | Success Criteria |
| 1. Root Cause | Read errors, reproduce, check changes, gather evidence | Understand WHAT and WHY |
| 2. Pattern | Find working examples, compare | Identify differences |
| 3. Hypothesis | Form theory, test minimally | Confirmed or new hypothesis |
| 4. Implementation | Create test, fix, verify | Bug resolved, tests pass |
When Process Reveals "No Root Cause"
If systematic investigation reveals issue is truly environmental, timing-dependent, or external:
- You've completed the process
- Document what you investigated
- Implement appropriate handling (retry, timeout, error message)
- Add monitoring/logging for future investigation
But: 95% of "no root cause" cases are incomplete investigation.
Supporting Techniques
These techniques are part of systematic debugging and available in this directory:
root-cause-tracing.md— Trace bugs backward through call stack to find original triggerdefense-in-depth.md— Add validation at multiple layers after finding root causecondition-based-waiting.md— Replace arbitrary timeouts with condition pollingfind-polluter.sh— Bisection script to find which test creates unwanted files/statethree-strike-escalation.md— When 3 fix attempts fail, escalate to the next abstraction level
Real-World Impact
From debugging sessions:
- Systematic approach: 15-30 minutes to fix
- Random fixes approach: 2-3 hours of thrashing
- First-time fix rate: 95% vs 40%
- New bugs introduced: Near zero vs common
Reference Files
| File | Path |
| Creation Log | references/CREATION-LOG.md |
| Test Academic | references/test-academic.md |
| Test Pressure 1 | references/test-pressure-1.md |
| Test Pressure 2 | references/test-pressure-2.md |
| Test Pressure 3 | references/test-pressure-3.md |
- Condition Based Waiting Example
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

