# Bug Investigate

> Use when someone wants to know WHY something is broken and has not asked for it to be fixed — "why is this happening", "what's causing this error", "find out what's wrong", "diagnose this before we decide". Also use before committing to a fix, when the cause is unknown and the decision depends on it. Not for fixing — that is superb:bug-fix.

- Skill: `kardebadas/bug-investigate` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add kardebadas/bug-investigate`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kardebadas/bug-investigate/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kardebadas (https://skillmd.com/u/kardebadas)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kardebadas/bug-investigate

---


# Bug Investigate

## Overview

Finds the root cause of a bug and reports it. **That is the whole job.**

No plan, no fix, no edits. Knowing what is wrong is often the thing that is
actually needed — because the fix is obvious once you know, because the decision
about *whether* to fix is someone else's, or because the answer changes what gets
built rather than what gets patched.

**This is the same investigation `superb:bug-fix` runs as its first step.** The
difference is where it stops. If you already know you want the bug fixed end to
end, use `superb:bug-fix` and let it carry the result into a plan.

## Step 0 — Assemble the report

The investigator needs five things, and the invocation argument usually supplies
one or two:

| Field | Example |
| ----- | ------- |
| Symptom | "uploads over ~5MB fail silently" |
| Reproduction | the steps, or `unknown` |
| Error text | stack trace, log line, or `none surfaced` |
| Affected surface | endpoint, screen, command, job |
| Last known good | a date, a release, a commit, or `never worked` |

Ask for whatever is missing in **one batched question**, not five. `unknown` is a
fine answer and belongs in the brief; a silently empty field is not, because the
investigator will fill it with a guess.

## Step 1 — Investigate

Take the first branch that applies:

| Condition | What to do |
| --------- | ---------- |
| A subagent mechanism, and `superb:bug-investigator` is in your available agent types | Dispatch **`superb:bug-investigator`** with the Step 0 report. |
| A subagent mechanism, but that agent is not listed | Dispatch a general subagent, briefed with the text **between the `SHARED BRIEF` markers** in `../bug-fix/references/investigator.md`. |
| No subagent mechanism | Follow that same bracketed brief **yourself**, inline, including its "modify no files" rule. |

Name the agent `superb:bug-investigator`, with the prefix. A bare
`bug-investigator` resolves to whatever personal agent happens to exist.

Do **not** substitute `superpowers:systematic-debugging`. Its four phases run
through hypothesis-testing and implementation, so it would fix the bug — which
is the one thing this skill is for not doing.

## Step 2 — Report, and stop

Give the investigator's report as it came back — symptom, root cause at
`file:line`, execution path, what introduced it, suggested fix. **The suggested
fix is a description, not an instruction to carry out.**

Then say what is now known and what it would take to act on it, and **stop
there.** Offer `superb:bug-fix` if fixing is the obvious next step; do not start
it.

**If the cause could not be pinned**, say so plainly, list what was ruled out,
and name what would narrow it — a reproduction, a log, a version that worked. A
confident guess is worse than an honest "not found", because the next person
builds on it.

## Red flags — STOP

- About to edit a file → wrong skill. This one does not fix.
- About to write a plan → also wrong skill. `superb:bug-fix` does that.
- About to say "I'll just fix it while I'm here, it's one line" → the user asked
  what was wrong. One line is still a change they did not ask for.
- About to report a cause with no `file:line` behind it → that is a hypothesis.
  Label it as one, or keep looking.
- About to run the app or start a dev server → the brief forbids it.

