hermes

Find the root cause of a bug

Reproduces a bug, tests ranked hypotheses with experiments, and fixes the root cause instead of the symptom. Use when something is broken and the reason is not obvious.

context

A fix that targets the symptom usually moves the bug instead of removing it: a null check where the null should never arrive, a retry around a race, a catch that hides the error. The root cause is the earliest point where the program's actual state diverges from what the code assumes. Debugging is finding that point with experiments, not guessing at it.

task

Find and fix the root cause of: Only if [EVIDENCE] is given: Evidence so far:

  1. Reproduce. Find the shortest reliable way to trigger the symptom, ideally a single command or a failing test. Record how often it fails. If you cannot reproduce it, say what you tried and what information would let you, then stop and ask.
  2. Collect facts. Read the code on the failing path. Separate what you observed (outputs, logs, values) from what you assume.
  3. Hypothesise. List two to five candidate causes. For each, state what you would expect to see if it were true and if it were false.
  4. Experiment. Run the cheapest experiment that best separates the hypotheses: add a log or assertion, inspect a value, change one input, bisect the code path, the input data or the commit history. Change one thing at a time and record each result.
  5. Confirm. You have the root cause when you can predict the failure, for example "with input X it fails; with Y it passes", and the prediction holds.
  6. Fix at the cause, as the smallest correct change. Remove the temporary logs and assertions you added.
  7. Verify. Run the reproduction again and the surrounding tests. Add a test that fails without the fix when the project has tests.
constraints
  • Do not change code to "see if it helps" without a hypothesis that predicts the result.
  • Do not stop at the first plausible explanation. Confirm it with an experiment whose result you predicted.
  • Never fix the symptom by swallowing errors, adding retries or sleeps, or special-casing the failing input. If a symptom-level mitigation is needed urgently, label it as such and still name the root cause.
  • If the cause is outside the code (configuration, data, environment, a dependency), say so and stop at a recommendation.
  • Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
  • If the information you need is not available, say what is missing and how to get it instead of inventing it.
  • Before saying the work is done, run the check that proves it (tests, build, type check or the command the user gave) and report the real result.
  • If you could not run a check, say so plainly and say which one.
  • Separate what you verified from what you inferred. Mark inferences as such.
  • When you do not know, say "I don't know" once and state what would settle it.
output format

Reproduction

The command or steps, and the failure rate observed.

Hypotheses

A table: Hypothesis | Experiment | Result | Verdict (confirmed, ruled out, open).

Root cause

One paragraph: where the state first goes wrong (path:line), why, and how that produces the symptom.

Fix

The diff, then one sentence on why it removes the cause.

Verification

The commands you ran after the fix and their results, including the new test.

1 required value still a placeholder; the assistant will ask for it.

details

kind
Prompt: a task you run by name to get one finished thing back
domain
Software engineering
category
Debugging
level
Intermediate
made for
Software engineer
needs
repo-read, file-write, shell
risk
runs-commands
version
v1.0.0 · incubating
reviewed
2026-10-02
works in
Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Antigravity, OpenCode, Windsurf, Zed, Continue, AGENTS.md

Edit on GitHubReport a problem

use in

Hodios CLI
npx @hermes-hq/hodios install find-root-cause --target claude-code
Agent Skills
npx skills add hermes-hq/hodios-dist --skill find-root-cause -a claude-code
Add the Hodios marketplace (once)
claude plugin marketplace add hermes-hq/hodios-dist
Install the software-engineering plugin
claude plugin install hodios-software-engineering@hodios

The plugin brings every entry in this domain at once.

pairs well with

All of Debugging
PersonaDebugging

Debugger

Debugs by reproducing first, testing one hypothesis at a time and fixing root causes, never symptoms. Use as a persona or subagent for bugs, crashes and failing builds.

debugger
PromptDebugging

Explain a stack trace

Explains an error and its stack trace in plain words, finds the frame that matters, and ranks the likely causes with the next checks to run. Use when an exception or crash is hard to read.

explain-stack-trace
PromptTesting

Add a regression test for a bug

Writes the smallest test that fails on the buggy code and passes with the fix, and proves both by running it. Use after fixing a bug, or before fixing one, so it cannot return.

add-regression-test
PromptDebugging

Debug a failing network request

Diagnoses a failing HTTP request layer by layer (DNS, TLS, proxy, CORS, auth, timeouts, payload) from error output and curl or browser traces, giving the next command at each step.

debug-network-request
PromptDebugging

Debug a production-only bug

Debugs a bug that happens only in production by diffing environment, config, data, traffic, versions and timing, then plans safe instrumentation to confirm the cause. Use for works-on-my-machine bugs.

debug-production-only-bug
PromptDebugging

Bisect a regression

Finds the commit or input that introduced a regression by writing an automated good/bad check first, then bisecting. Use when something that used to work is broken and the cause is unclear.

bisect-regression