Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Systematically root-causes software bugs using a reproduce → isolate → hypothesize → bisect → verify methodology, replacing guess-and-check debugging with a disciplined, evidence-driven investigation. Use this skill when a user reports a bug, a test is failing intermittently or consistently, behavior differs between environments, a regression appeared after a change, something "used to work" and now doesn't, an error/stack trace needs root-causing, or when asked to "debug", "find the root cause"
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-14 | ✓→✗ | ▼ Worse | 102% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 37% | 0% |
Debugging fails when it becomes random poking — changing lines, re-running, hoping. This skill enforces a scientific, evidence-first process: you never change code to "see what happens" until you have a falsifiable hypothesis backed by an observation. The goal is to find the root cause, not to make the symptom disappear.
Keywords: debug, root cause, bug, regression, crash, stack trace, flaky test, intermittent, heisenbug, deadlock, memory leak, race condition, bisect, repro, reproduce, isolate, hypothesis, works on my machine.
Core principle: A bug you cannot reproduce is a bug you cannot confirm fixed. Spend your effort earning a reliable reproduction first; everything else gets faster after that.
Follow these phases in order. Do not skip ahead — a fix found by skipping is usually a coincidence, not a cure.
references/intermittent-bugs.md.print of invariants) — observe, don't fix.users is None when the cache misses." A good hypothesis predicts an observation you haven't made yet.references/hypothesis-log.md for the format and use templates/investigation-log.md to track them.git bisect to find the offending commit. Run scripts/git_bisect_helper.sh to automate it with a test command.references/root-cause-frameworks.md).templates/investigation-log.md.| Symptom | First move | Key reference | |---|---|---| | Consistent crash / exception | Read the full stack trace bottom-up; find the deepest frame in your code | references/techniques.md | | "Worked before this change" | git bisect | scripts/git_bisect_helper.sh | | Flaky / 1-in-N failure | Raise failure rate, look for shared state / ordering / time / concurrency | references/intermittent-bugs.md | | Wrong output, no error | Binary-search the data pipeline; assert invariants at each stage | references/techniques.md | | Hang / deadlock | Get a thread dump / py-spy dump; find who holds what lock | references/techniques.md | | Memory growth | Snapshot heap over time; diff allocations; check unbounded caches/listeners | references/techniques.md | | Works on my machine | Diff the two environments systematically (versions, config, data, locale, TZ) | references/techniques.md | | Performance regression | Profile, don't guess; compare flamegraphs before/after | references/techniques.md |
null in a guard without asking why it was null. The real bug moves downstream.references/techniques.md — detailed per-symptom techniques, tooling, and language-specific tips.references/intermittent-bugs.md — playbook for flaky tests, races, and heisenbugs.references/root-cause-frameworks.md — 5 Whys, fault trees, delta debugging, and the scientific method applied to code.references/hypothesis-log.md — how to write and rank falsifiable hypotheses.scripts/git_bisect_helper.sh — automated git bisect run wrapper for regression hunting.templates/investigation-log.md — fill-in template to track a debugging session end to end.examples/null-pointer-investigation.md — a full worked example from report to verified fix.Other measured skills in the registry, with their headline benchmark lift.