Debugging Difficult Bugs
mastra-ai/mastra
Use early when debugging a medium or hard bug, especially when tests alone may not reveal the real runtime failure.
Finds the root cause of failing or slow behavior with a hypothesis-driven loop, then fixes it test-first if you choose, or hands back a diagnosis only.
$ npx skills add EveryInc/compound-engineering-plugin --skill ce-debug -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install EveryInc/compound-engineering-plugin ce-debug --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/EveryInc/compound-engineering-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ce-debug .claude/skills/ce-debug && 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 "ce-debug" agent skill from https://github.com/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debug into .claude/skills/ce-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ce-debug", 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/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debugType 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 EveryInc/compound-engineering-plugin --skill ce-debug -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install EveryInc/compound-engineering-plugin ce-debug --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EveryInc/compound-engineering-plugin.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ce-debug .agents/skills/ce-debug && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ce-debug" agent skill from https://github.com/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debug into .agents/skills/ce-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ce-debug", 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 EveryInc/compound-engineering-plugin --skill ce-debug -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install EveryInc/compound-engineering-plugin ce-debug --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EveryInc/compound-engineering-plugin.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ce-debug .cursor/skills/ce-debug && 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 "ce-debug" agent skill from https://github.com/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debug into .cursor/skills/ce-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ce-debug", 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/EveryInc/compound-engineering-plugin.git --path skills/ce-debug--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 EveryInc/compound-engineering-plugin --skill ce-debug -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install EveryInc/compound-engineering-plugin ce-debug --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EveryInc/compound-engineering-plugin.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ce-debug .gemini/skills/ce-debug && 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 "ce-debug" agent skill from https://github.com/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debug into .gemini/skills/ce-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ce-debug", 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 EveryInc/compound-engineering-plugin ce-debugInstalls 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 EveryInc/compound-engineering-plugin --skill ce-debug -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/EveryInc/compound-engineering-plugin.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ce-debug .github/skills/ce-debug && 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 "ce-debug" agent skill from https://github.com/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debug into .github/skills/ce-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ce-debug", 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 EveryInc/compound-engineering-plugin --skill ce-debug -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install EveryInc/compound-engineering-plugin ce-debug --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EveryInc/compound-engineering-plugin.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ce-debug .opencode/skills/ce-debug && 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 "ce-debug" agent skill from https://github.com/EveryInc/compound-engineering-plugin/tree/main/skills/ce-debug into .opencode/skills/ce-debug/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ce-debug", 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.
ce-debugFinds the root cause of failing or slow behavior with a hypothesis-driven loop, then fixes it test-first if you choose, or hands back a diagnosis only.
The skill treats a bug as done only when the causal chain from trigger to symptom is stated without gaps and backed by file and line evidence, followed by either a verified fix handed off as a PR, commit or your chosen stopping point, or a diagnosis-only summary. It works one hypothesis and one change at a time, and escalates instead of persisting: after two or three unconfirmed hypotheses or three failed fix attempts, the agent investigates why rather than trying again. The input can be a failure description or an issue reference such as an issue URL.
Three modes exist. The default is interactive, with an investigation, a fix-choice gate and a handoff. In pipeline mode, set by orchestrating skills such as ce-babysit-pr or lfg, it runs without questions, fixes bugs that converge and defers ones that diverge, and returns a structured status such as fixed-and-pushed, diagnosed-no-fix or needs-human. Return-to-caller mode also runs non-interactively, commits the fix on a feature branch without pushing, and leaves what follows to the caller. Reference files cover investigation techniques, anti-patterns, defense in depth, fixes and handoffs.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cef001f. 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:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, 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.
Compound Engineering Debug loads about 4.2k tokens when it runs, and up to ~24k if it reads all its reference files. Until then it costs about 28 tokens; SKILL.md has 2,523 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 EveryInc/compound-engineering-plugin at commit cef001f, republished under its MIT licence (© EveryInc). 2,523 words, ~4,204 tokens.
.claude/skills/ce-debug/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Find the root cause of a failure, then — when the user chooses to — fix it with test-first discipline.
Done when: the causal chain from trigger to symptom is stated with no gaps and file:line evidence, and either a verified fix has been handed off (PR, commit, or the user's chosen stop) or a diagnosis-only summary has been delivered. Escalate rather than persist: 2-3 hypotheses exhausted without confirmation, or 3 failed fix attempts, means diagnose why instead of trying again — that is the smart escalation references/investigate.md describes. One hypothesis, one change at a time; changing several to see what helps is shotgun debugging.
<bug_description> is whatever this skill was invoked with — a failure description, a mode: token, or an issue reference (#123, org/repo#123, an issue URL) — from the user or from a calling skill (ce-babysit-pr / lfg in mode:pipeline pass the failing jobs and log tails; lfg's defect route passes mode:return-to-caller and the user's own reference). Blank if nothing was provided.
Default is interactive: investigate, run the Phase 2 fix-choice gate, then the Phase 4 handoff.
mode:pipeline (set by an orchestrator such as ce-babysit-pr or lfg): run fully non-interactively and never call the blocking-question tool. Strip the token from <bug_description>, then read references/pipeline-mode.md and follow it — it overrides every "ask the user" point with a conservative default, replaces the Phase 2 fix-gate with "fix convergent bugs, defer divergent ones", and replaces the Phase 4 handoff with a structured return whose status is exactly one of fixed-and-pushed | fixed-not-pushed | diagnosed-no-fix | flaky-infra | needs-human. The caller branches on those exact spellings, so never rename, abbreviate, or add to them.
mode:return-to-caller (set by lfg on its defect route): run non-interactively, but the caller owns everything after the fix. Strip the token, then read references/return-to-caller.md and follow it — it keeps Phases 0-3 and the convergent-or-defer fix boundary, applies the Phase 3 branch rule so the fix lands on a feature branch, commits the fix-owned files without pushing, skips the post-fix polish and review steps, and returns a structured result whose status is exactly one of fixed | diagnosed-no-fix | needs-human | blocked. The same spelling rule applies.
Wherever this skill asks the user something, use the host's blocking question tool already in the current tool list (match by capability, not by a host-specific name). Presence in the current tool list is proof the tool exists; never call a user-facing question tool to discover whether it exists. If a matching tool is listed but unloaded, use the host's tool-discovery primitive to load that capability — do not search for another host's tool name. Fall back to numbered options on the host's chat surface only when no such tool is in the list or a real question call errors. Never silently skip the question, and never end a phase without a response.
Debugging surfaces raw output constantly — command results, captured payloads, log excerpts — and the harness may render a command's output the moment it runs, so check secrets when you construct the command, not afterward. Keep credentials in env vars rather than on the command line; when a command's output may carry a secret (verbose HTTP traces, dumped headers, config or environment prints), capture it to a file and surface only sanitized excerpts, writing <REDACTED> in place of each secret. No secret (credential, token, auth header, connection string) appears in anything shown, written, or committed. If sanitizing removes what the diagnosis needs, say so and ask the user rather than un-redacting.
Resolve <root> only when you first compose a <root>/ path — a run that composes none skips this entirely.
<!-- ce-docs-root:start -->
Resolve the CE artifact root <root> before composing any artifact path.
docs_root from <repo-root>/.compound-engineering/config.yaml only (<repo-root> = git rev-parse --show-toplevel). Do not read it from config.local.yaml. Unset -> <root> is docs, exactly as before..git/. Otherwise stop with an error naming docs_root and the value -- never fall back to docs.<root> as the sole artifact location: create it if absent, compose each path as <root>/<subdir> with this skill's own subdirectory, and never also read docs.<!-- ce-docs-root:end -->
Five phases in order: 0 Triage -> 1 Investigate -> 2 Root Cause -> 3 Fix -> 4 Handoff. Beyond Phase 0's trivial-bug fast-path there is no skipping and no complexity tiers. A hard bug spends longer in each phase; it does not enter fewer.
Read references/investigate.md now and follow it for Phases 0-2 — issue fetching, reproduction, environment sanity and the dirty-tree stash experiment, backward tracing, the tracker/PR-history search, hypothesis grounding, and the escalation table. Only the gates below are stated here.
The issue of record. If the user handed you a ticket or issue, that is where this bug already lives, whichever system it is in; a Sentry issue counts as much as a Linear ticket. Carry its identifier and URL through to Phase 4. If the input is only a stack trace, test path, or description, this run has no issue of record. That is an ordinary state, not a gap to fill: ship the fix without one, never open a ticket to manufacture a record, and never ask the user whether to. Phase 1's tracker search reads prior work and never establishes a new home for the bug. An existing ticket for this bug is one to link in Phase 4, never one to create.
The trivial-bug fast-path (cause readable from the input, one-line fix, no deep tracing) still runs Phase 2's fix-choice gate before editing: it saves investigation ceremony, not the user's choice over whether to apply a fix.
Choosing the regression test. The regression test for a confirmed defect belongs wherever existing coverage already owns that behavior: start from the tests that exist rather than from a new file. Read references/fix.md for the homes and the naming rule before writing Phase 2's recommendation, not only before Phase 3's edits. A test that fails because the change deliberately reverses the behavior it asserts does not have a wrong expectation — that is the divergent case below, deferred rather than updated.
Causal chain gate: do not proceed to Phase 3 until you can explain the full chain — trigger through every step to the observed symptom — with no gaps. "Somehow X leads to Y" is a gap. Only the user can authorize proceeding on a best-available hypothesis when investigation is stuck.
Once the root cause is confirmed, write the findings as a user-visible block: the causal chain with file:line references; the proposed fix and the files it changes; which tests to use, add, modify, or strengthen, and whether existing tests should have caught this; and any related ticket or PR and how it shapes the recommendation — if an open PR already fixes this, lead with that link instead of a fresh fix.
Same-turn presentation before the gate: do not open the fix-choice question until that findings block has been written in full — in this turn or the immediately preceding assistant message. The blocking question tool renders only its own stem on modal harnesses, so a question fired on "root cause confirmed" alone leaves the user choosing with none of the causal chain in front of them. Naming the options is not presenting the findings, and a promise to explain after the choice is too late.
When the request has not already authorized the next action, ask (per Blocking questions) which path to take, offering these three options. An explicit fix request is Phase 3. An explicit diagnosis-only request skips to Phase 4. mode:pipeline and mode:return-to-caller never ask. The test recommendations are part of the diagnosis either way.
ce-brainstorm) — only when the bug cannot be fixed within the current design: the root cause is a wrong responsibility or interface rather than wrong logic, the requirements themselves are wrong, or every candidate fix is a workaround around an assumption that no longer holds. Size alone is not a design problem.mode:pipeline and mode:return-to-caller: do not ask. Proceed to Phase 3 and apply a convergent fix; a divergent fix — one that would reverse a deliberate contract/behavior/product decision, including a "failing" test that asserts intended behavior — is deferred, not applied, per references/pipeline-mode.md or references/return-to-caller.md. Never route to ce-brainstorm here; a design problem becomes a needs-human residual.
If the user chose "Diagnosis only," skip to Phase 4's summary. If they chose "Rethink the design," control has transferred to ce-brainstorm and this skill ends.
Read references/fix.md before editing any file — the test-first sequence, the failed-fix rule, and the defense-in-depth and post-mortem triggers. Two rules decide whether the fix may start at all, so they stay here:
git status; if the user has unstaged work in files that need modification, confirm before editing. If the current branch is the default branch, create a feature branch without asking — derive a name from the bug, git checkout -b <name>, and say which branch you moved to. Detect the default by comparing against main, master, or git rev-parse --abbrev-ref origin/HEAD with its origin/ prefix stripped — the raw output is origin/<name>, so an unstripped comparison never matches.HEAD, whether git status --short is clean, and any pre-existing changed files. Then keep a list of fix-owned files (the tests and implementation changed for this bug) as you work. Phase 4 answers both of its questions from this record and cannot reconstruct it afterwards.mode:pipeline — skip this entire interactive handoff. No polish or review steps, no residual questions, no preview, no learning-capture offer. Commit and push the convergent fix per references/pipeline-mode.md, then emit that reference's structured return. Divergent / needs-human items are deferred there (open thread or the caller's run-report comment — never a PR-body section). mode:return-to-caller — skip it too: commit the fix-owned files on the feature branch, push nothing, and emit the structured return references/return-to-caller.md defines. In both modes the return is the last thing this skill writes. It ends this skill, not the turn. The caller runs in this same session, and its next step follows the return; do not announce a handoff to it. The rest of this section is the interactive path only.
Structured summary — always write this first:
## Debug Summary
**Problem**: [What was broken]
**Root Cause**: [Full causal chain, with file:line references]
**Recommended Tests**: [Tests to add/modify to prevent recurrence, with specific file and assertion guidance]
**Fix**: [What was changed — or "diagnosis only" if Phase 3 was skipped]
**Prevention**: [Test coverage added; structural fix or defense-in-depth if applicable, or the structural fix left as follow-up]
**Confidence**: [High/Medium/Low]If Phase 3 was skipped, stop after the summary — the user already said they were taking it from here. Do not prompt.
If Phase 3 ran, read references/post-fix-handoff.md now and follow it before routing below. It defines the quality steps after a fix: the contextual-override checks, the skip rule for mechanical fixes, the scoping that keeps ce-simplify-code and ce-code-review off unrelated branch work, what to do with leftover findings, the ## Post-Fix Quality block, and the criteria for offering to capture a learning. None of that appears in this body. The routing below names which action runs, never the scope rules that make it safe, so it cannot be improvised from. Skipping the read ships an unreviewed fix, lets review reach into unrelated branch work, and strands accepted findings in the session.
Land the fix without carrying along anything the user did not offer up — not into a commit, not into a push, not into a PR. Do not ask whether to open a PR; permission is not the gate. Two questions decide the handoff. Answer them from the pre-fix scope Phase 3 recorded, not from how the branch came to exist. Fire the action itself via the platform's skill-invocation primitive — never merely tell the user to type a command.
1. What may go into the commit — the fix-owned files and nothing else. This is a constraint on whichever skill commits in question 2, never an action of its own. It holds on every route, remote or not. Do not commit here.
ce-commit groups at file level and never splits a file. Ask (per Blocking questions) before anything commits whether to commit that file including their edits, leave the fix uncommitted, or stop. Only the first answer continues. The other two end the handoff, so question 2 never runs and nothing commits; say what was left and why. Every option loses something the agent cannot choose on the user's behalf, which is why this question survives. Phase 3's confirmation covered editing the file, never committing the user's edits with the fix.2. Who commits, and whether it ships. Exactly one of these runs.
Ships when all three hold: the pre-fix tree was clean, nothing on the branch is work the user has not already offered, and origin is PR-capable: somewhere gh can actually open a PR. Establish those however fits the repo in front of you. Two facts make it less obvious than it looks.
ce-commit-push-pr pushes the whole branch, and its PR spans every commit on it, not just your fix. So the question is about the branch, not your diff. It also pushes before creating the PR, so a remote gh cannot open a PR against leaves the branch published with no PR.If you cannot establish all three, take the local route instead; that is the safe direction, and the preview is not a substitute for it. Otherwise preview what will be committed, on what branch, and whether a PR opens or updates, then invoke the ce-commit-push-pr skill with branding:on. It commits under question 1's scope, so do not commit first. The preview is a statement, not a question. Surface the resulting PR URL.
Stays local when any of those three fails. Invoke the ce-commit skill under question 1's scope and push nothing. Say in one line what stayed local and why, and that you will push and open the PR on request. Do not ask first; a local commit is reversible.
Not a git repo: nothing commits. Stop after the summary and the quality block.
Contextual override ("don't open PRs from skills", "commit only", "stop after the fix") — follow what the user said, and Stop here without committing when that is what they asked for. A vague tonal cue is not an override.
After a PR is open — apply the reference's learning-capture criteria. Only when that gate qualifies the fix, offer capture; if the user accepts, invoke the ce-compound skill, then commit and push only the artifacts it actually wrote or updated so the open PR picks them up. If it writes nothing, end without a documentation commit.
© EveryInc, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (references) in skills/ce-debug of EveryInc/compound-engineering-plugin.
Open the folder on GitHubat commit cef001f
Compound Engineering Debug 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 |
|---|---|---|---|---|---|---|
| Compound Engineering Debug this skillEveryInc/compound-engineering-plugin | 25k | — | ~4.2k | Automated safety check: Pass | MIT | |
| Debugging Difficult Bugsmastra-ai/mastra | 29k | — | ~1.9k | Automated safety check: Pass | Custom licence | |
| Golang Troubleshootingsamber/cc-skills-golang | 3.4k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Systematic Debuggingtmdgusya/engineering-discipline | 125 | — | ~2k | Automated safety check: Pass | None | |
| Triage Issuesoftspark/ai-toolkit | 179 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 | |
| Nw BugfixnWave-ai/nWave | 617 | — | ~1.5k | Automated safety check: Pass | MIT |
mastra-ai/mastra
Use early when debugging a medium or hard bug, especially when tests alone may not reveal the real runtime failure.
samber/cc-skills-golang
Troubleshoot Golang programs systematically - find and fix the root cause.
tmdgusya/engineering-discipline
A skill your agent uses when encountering any bug, test failure, or unexpected behavior.
softspark/ai-toolkit
Bug triage: explores codebase for root cause, files GitHub issue with TDD fix plan.
nWave-ai/nWave
Bug fix workflow: root cause analysis → user review → regression test + fix via TDD
VisionForge-OU/foreman
Headless root-cause debugging loop for a Foreman worker whose tests, build, or acceptance check are failing — especially on a retry.
EveryInc/compound-engineering-plugin
Records one solved and verified problem as a durable learning in the repository, but only when the reasoning is not already clear from the final code, tests or docs.
EveryInc/compound-engineering-plugin
Audits a repo's stored learnings against the current codebase, fixes stale, overlapping or superseded docs and reports on every document.
EveryInc/compound-engineering-plugin
Builds a throwaway prototype at just the fidelity needed to settle a specific how-it-should-work-or-feel question, before committing to an approach other work will treat as fixed.
EveryInc/compound-engineering-plugin
Checks Compound Engineering plugin health and repo-local config, or scaffolds a Compound Pack when you ask for one by id.
EveryInc/compound-engineering-plugin
Watches an open GitHub pull request over time, routing review comments and CI failures to other skills until the PR is ready to merge.
EveryInc/compound-engineering-plugin
Turns a vague or ambitious feature idea into a requirements-only plan through dialogue with you, sized to the work, before any code is written.
Categories
Finds the root cause of failing or slow behavior with a hypothesis-driven loop, then fixes it test-first if you choose, or hands back a diagnosis only. The skill treats a bug as done only when the causal chain from trigger to symptom is stated without gaps and backed by file and line evidence, followed by either a verified fix handed off as a PR, commit or your chosen stopping point, or a diagnosis-only summary. It works one hypothesis and one change at a time, and escalates instead of persisting: after two or three unconfirmed hypotheses or three failed fix attempts, the agent investigates why rather than trying again.
Compound Engineering Debug fits situations like: debugging a failing test, error or slow behavior to find its root cause; fixing a bug with a failing test first; getting a diagnosis without changes when you only need the cause; running as a non-interactive step inside a larger orchestration.
Run `npx skills add EveryInc/compound-engineering-plugin --skill ce-debug -a claude-code`. Or copy the skill folder (skills/ce-debug in EveryInc/compound-engineering-plugin) into .claude/skills/ce-debug in your project. Claude Code loads it when a task matches its description.
Run `npx skills add EveryInc/compound-engineering-plugin --skill ce-debug -a codex`. Or copy the skill folder (skills/ce-debug in EveryInc/compound-engineering-plugin) into .agents/skills/ce-debug 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 EveryInc/compound-engineering-plugin --skill ce-debug -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ce-debug, .gemini/skills/ce-debug, .github/skills/ce-debug and .opencode/skills/ce-debug in your project.
Going by SKILL.md and its folder, Compound Engineering Debug needs the command-line tools its instructions call (git).
SKILL.md contains no URLs. Its commands use git, 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.
Compound Engineering Debug is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 20k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Compound Engineering Debug: Debugging Difficult Bugs (mastra-ai/mastra, 29k stars), Golang Troubleshooting (samber/cc-skills-golang, 3.4k stars), Systematic Debugging (tmdgusya/engineering-discipline, 125 stars) and Triage Issue (softspark/ai-toolkit, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
EveryInc (a GitHub organization) maintains it in EveryInc/compound-engineering-plugin, which has 25,412 GitHub stars. The repository holds 37 skills in this directory. The repository was last updated on October 7, 2026.
Source: EveryInc/compound-engineering-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.