Systematic Debugging
ChrisWiles/claude-code-showcase
Applies a four-phase debugging routine that finds the root cause of a bug or failing test before any fix is written.
ALWAYS use before attempting any fix. An agent skill from heyitsnoah/claudesidian.
$ npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install heyitsnoah/claudesidian systematic-debugging --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/heyitsnoah/claudesidian.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/systematic-debugging .claude/skills/systematic-debugging && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "systematic-debugging" agent skill from https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debugging into .claude/skills/systematic-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "systematic-debugging", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debuggingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install heyitsnoah/claudesidian systematic-debugging --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/heyitsnoah/claudesidian.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/systematic-debugging .agents/skills/systematic-debugging && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "systematic-debugging" agent skill from https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debugging into .agents/skills/systematic-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "systematic-debugging", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install heyitsnoah/claudesidian systematic-debugging --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/heyitsnoah/claudesidian.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/systematic-debugging .cursor/skills/systematic-debugging && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "systematic-debugging" agent skill from https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debugging into .cursor/skills/systematic-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "systematic-debugging", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/heyitsnoah/claudesidian.git --path .agents/skills/systematic-debugging--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install heyitsnoah/claudesidian systematic-debugging --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/heyitsnoah/claudesidian.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/systematic-debugging .gemini/skills/systematic-debugging && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "systematic-debugging" agent skill from https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debugging into .gemini/skills/systematic-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "systematic-debugging", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install heyitsnoah/claudesidian systematic-debuggingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/heyitsnoah/claudesidian.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/systematic-debugging .github/skills/systematic-debugging && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "systematic-debugging" agent skill from https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debugging into .github/skills/systematic-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "systematic-debugging", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install heyitsnoah/claudesidian systematic-debugging --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/heyitsnoah/claudesidian.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/systematic-debugging .opencode/skills/systematic-debugging && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "systematic-debugging" agent skill from https://github.com/heyitsnoah/claudesidian/tree/main/.agents/skills/systematic-debugging into .opencode/skills/systematic-debugging/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "systematic-debugging", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
systematic-debuggingALWAYS use before attempting any fix. An agent skill from heyitsnoah/claudesidian.
Systematic Debugging is an agent skill from heyitsnoah/claudesidian. ALWAYS use before attempting any fix. Never jump to solutions - investigate root cause first. Use when encountering any technical issue, bug, test failure, or unexpected behavior.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Debugging, Root cause analysis and Failing and flaky tests. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6c56f35. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Systematic Debugging loads about 3.3k tokens when it runs. Until then it costs about 50 tokens; SKILL.md has 1,286 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from heyitsnoah/claudesidian at commit 6c56f35, republished under its MIT licence (© heyitsnoah). 1,286 words, ~3,291 tokens.
.claude/skills/systematic-debugging/SKILL.md (or your agent's skills folder).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.
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRSTIf you haven't completed Phase 1, you cannot propose fixes.
Use for ANY technical issue:
Use this ESPECIALLY when:
Don't skip when:
You MUST complete each phase before proceeding to the next.
BEFORE attempting ANY fix:
Read Error Messages Carefully
Reproduce Consistently
Check Recent Changes
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 script
echo "=== Env vars in build script: ==="
env | grep IDENTITY || echo "IDENTITY not in environment"
# Layer 3: Signing script
echo "=== Keychain state: ==="
security list-keychains
security find-identity -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:
Quick version:
Find the pattern before fixing:
Find Working Examples
Compare Against References
Identify Differences
Understand Dependencies
Scientific method:
Form Single Hypothesis
Test Minimally
Verify Before Continuing
When You Don't Know
Fix the root cause, not the symptom:
Create Failing Test Case
Implement Single Fix
Verify Fix
If Fix Doesn't Work
If 3+ Fixes Failed: Question Architecture
Pattern indicating architectural problem:
STOP and question fundamentals:
Discuss with the user before attempting more fixes
This is NOT a failed hypothesis - this is a wrong architecture.
If you catch yourself thinking:
ALL of these mean: STOP. Return to Phase 1.
If 3+ fixes failed: Question the architecture (see Phase 4.5)
| 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. |
| 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 bugs manifest deep in the call stack, trace backward to find the original trigger.
Observe the Symptom
Error: git init failed in /Users/jesse/project/packages/coreFind Immediate Cause - What code directly causes this?
await execFileAsync('git', ['init'], { cwd: projectDir })Ask: What Called This?
WorktreeManager.createSessionWorktree(projectDir, sessionId)
→ called by Session.initializeWorkspace()
→ called by Session.create()
→ called by test at Project.create()Keep Tracing Up - What value was passed?
projectDir = '' (empty string!)cwd resolves to process.cwd()Find Original Trigger - Where did empty string come from?
const context = setupCoreTest() // Returns { tempDir: '' }
Project.create('name', context.tempDir) // Accessed before beforeEach!When you can't trace manually, add instrumentation:
async function gitInit(directory: string) {
const stack = new Error().stack
console.error('DEBUG git init:', {
directory,
cwd: process.cwd(),
nodeEnv: process.env.NODE_ENV,
stack,
})
await execFileAsync('git', ['init'], { cwd: directory })
}Tips:
console.error() in tests (logger may be suppressed)new Error().stack shows complete call chainIf something appears during tests but you don't know which test, use bisection:
# Run tests one-by-one, stop at first polluter
for f in src/**/*.test.ts; do
npm test "$f" && [ -d .git ] && echo "POLLUTER: $f" && break
doneNEVER fix just where the error appears. Trace back to find the original trigger.
After finding root cause, validate at EVERY layer data passes through. Make the bug structurally impossible.
Different layers catch different cases:
Layer 1: Entry Point Validation - Reject invalid input at API boundary
function createProject(name: string, workingDirectory: string) {
if (!workingDirectory || workingDirectory.trim() === '') {
throw new Error('workingDirectory cannot be empty')
}
if (!existsSync(workingDirectory)) {
throw new Error(`workingDirectory does not exist: ${workingDirectory}`)
}
}Layer 2: Business Logic Validation - Ensure data makes sense for operation
function initializeWorkspace(projectDir: string, sessionId: string) {
if (!projectDir) {
throw new Error('projectDir required for workspace initialization')
}
}Layer 3: Environment Guards - Prevent dangerous operations in specific contexts
async function gitInit(directory: string) {
if (process.env.NODE_ENV === 'test') {
const normalized = normalize(resolve(directory))
const tmpDir = normalize(resolve(tmpdir()))
if (!normalized.startsWith(tmpDir)) {
throw new Error(`Refusing git init outside temp dir during tests`)
}
}
}Layer 4: Debug Instrumentation - Capture context for forensics
async function gitInit(directory: string) {
logger.debug('About to git init', {
directory,
cwd: process.cwd(),
stack: new Error().stack,
})
}When you find a bug:
Don't stop at one validation point. Add checks at every layer.
From debugging sessions:
© heyitsnoah, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/systematic-debugging of heyitsnoah/claudesidian.
Open the folder on GitHubat commit 6c56f35
Systematic Debugging next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Systematic Debugging this skillheyitsnoah/claudesidian | 2.6k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Systematic DebuggingChrisWiles/claude-code-showcase | 6.1k | 3 repos | ~1.2k | Automated safety check: Pass | None | |
| Debugging and Error Recoveryaddyosmani/agent-skills | 103k | 1 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Systematic Debugginged3dai/ed3d-plugins | 250 | 3 repos | ~2.4k | Automated safety check: Pass | None | |
| Debugging And Error Recoveryabashev/vfs-s3 | 106 | 6 repos | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Veomni DebugByteDance-Seed/VeOmni | 2.2k | — | ~2.8k | Automated safety check: Pass | Apache-2.0 |
ChrisWiles/claude-code-showcase
Applies a four-phase debugging routine that finds the root cause of a bug or failing test before any fix is written.
addyosmani/agent-skills
Applies a stop-the-line rule and a step-by-step triage when tests fail, builds break or something stops working, aiming at the root cause instead of guesses.
ed3dai/ed3d-plugins
A skill your agent uses when encountering any bug, test failure, or unexpected behavior, before proposing fixes - four-phase framework (root cause investigation, pattern analysis, hypothesis…
abashev/vfs-s3
Guides systematic root-cause debugging. An agent skill from abashev/vfs-s3.
ByteDance-Seed/VeOmni
A skill your agent uses for ANY bug, error, crash, wrong output, loss divergence, gradient explosion, test failure, CUDA error, distributed training hang, checkpoint load failure, or unexpected…
jsmastery-pro/skills
Runs a reproduce, localize, hypothesize, test, fix and verify loop to find a bug's root cause, applies the minimal fix and hands off a regression test.
heyitsnoah/claudesidian
Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections.
heyitsnoah/claudesidian
Add or update YAML frontmatter properties to enhance Obsidian note organization.
heyitsnoah/claudesidian
Remove AI-generated jargon and restore human voice to text. An agent skill from heyitsnoah/claudesidian.
heyitsnoah/claudesidian
Download files from URLs to the Obsidian attachments folder and organize them with descriptive names.
heyitsnoah/claudesidian
Work with git worktrees for isolated parallel development. An agent skill from heyitsnoah/claudesidian.
heyitsnoah/claudesidian
Install claudesidian shell command to launch Claude Code from anywhere.
Categories
ALWAYS use before attempting any fix. An agent skill from heyitsnoah/claudesidian. Systematic Debugging is an agent skill from heyitsnoah/claudesidian. ALWAYS use before attempting any fix.
Systematic Debugging fits situations like: encountering any technical issue; unexpected behavior.
Run `npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a claude-code`. Or copy the skill folder (.agents/skills/systematic-debugging in heyitsnoah/claudesidian) into .claude/skills/systematic-debugging in your project. Claude Code loads it when a task matches its description.
Run `npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a codex`. Or copy the skill folder (.agents/skills/systematic-debugging in heyitsnoah/claudesidian) into .agents/skills/systematic-debugging in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add heyitsnoah/claudesidian --skill systematic-debugging -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/systematic-debugging, .gemini/skills/systematic-debugging, .github/skills/systematic-debugging and .opencode/skills/systematic-debugging in your project.
Going by SKILL.md and its folder, Systematic Debugging needs the command-line tools its instructions call (npm).
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Systematic Debugging is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Systematic Debugging: Systematic Debugging (ChrisWiles/claude-code-showcase, 6.1k stars), Debugging and Error Recovery (addyosmani/agent-skills, 103k stars), Systematic Debugging (ed3dai/ed3d-plugins, 250 stars) and Debugging And Error Recovery (abashev/vfs-s3, 106 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
heyitsnoah (a GitHub user) maintains it in heyitsnoah/claudesidian, which has 2,597 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on April 11, 2026.
Source: heyitsnoah/claudesidian on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.