verify-bug
Skill5 starsChanged 45 days agoMITView on GitHub
Turn claimed bugs into verdicts you can act on. A claim is a lead, not a fact: code that looks wrong is often protected by validation in another file, a framework guarantee, a lock, a type, or configuration. And real bugs described vaguely get dismissed. This skill gives every claim a fair hearing with an advocate on each side, then records the verdict with its evidence. - Never modify the user's working tree. Reads happen anywhere; repro tests happen only…
In this repository15 other files it gives its agents.
- AGENTS.mdAGENTS.md
- development/AGENTS.mdAGENTS.md
- cli-designSkill
- codebase-landing-copySkill
- context-file-tuneupSkill
- course-notesSkill
- decision-recordsSkill
- feature-mapSkill
- github-pr-fixupSkill
- github-self-hosted-runnerSkill
- oss-marketingSkill
- oss-repo-readinessSkill
- session-log-auditSkill
- technical-manualSkill
- whiteboardSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 7 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
No verdict without receipts: Every argument must point at code (path:line or path:Symbol).
- Very specific: line 43
Cap: verify the top 10 by default.
- Very specific: line 62
If a claim has no concrete scenario ("this might be racy"), ask the Prover to construct one as its first job.
- Distinctive: line 80
Run three roles per claim.
- Distinctive: line 97
Run hearings for different claims in parallel when possible.
- Very specific: line 114
Prefer unclear over a forced call.
- Very specific: line 125
Create an isolated worktree on a scratch branch inside the excluded .verify/ directory: git worktree add -b verify-bug/<id> …
- Distinctive: line 128
Write the smallest test that should fail if the bug is real, and run only that test with the repo's own test command, from inside the …
- Very specific: line 132
Remove the worktree and branch: git worktree remove --force .verify/worktrees/<id> && git branch -D verify-bug/<id>
- Distinctive: line 145
Every run writes a local report, plus in-place verdicts for map sources.
- Distinctive: line 162
GitHub sources: after the summary, offer to draft a reply for each verified issue or comment.
- Distinctive: line 169
Keep it short: counts by verdict, then one line per confirmed bug (claim, severity, reproduced or static, patch link), then refuted and …
- Distinctive: line 173
Don't restate the report.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Verify bug
Turn claimed bugs into verdicts you can act on. A claim is a lead, not a fact: code that looks wrong is often protected by validation in another file, a framework guarantee, a lock, a type, or configuration. And real bugs described vaguely get dismissed. This skill gives every claim a fair hearing with an advocate on each side, then records the verdict with its evidence.
Hard rules
- Never modify the user's working tree. Reads happen anywhere; repro tests
happen only in a throwaway
git worktree(see "Reproduction"). - Never fix bugs, open issues, or post comments on your own. Posting a verdict back to GitHub requires the user's explicit confirmation for that specific post.
- No verdict without receipts. Every argument must point at code
(
path:lineorpath:Symbol). Arguments without receipts are discounted.
Workflow
- Collect claims from the source the user gave (see "Sources").
- Normalize each into a claim record (below).
- Dedupe: merge claims that point at the same code path with the same trigger. Agents often report one root cause several ways; keep the clearest scenario and list the merged sources.
- Rank by severity if true: data loss or corruption, security, silent wrong results, crashes or outages, degraded behavior, cosmetic. Don't try to judge likelihood here; that's what the hearing is for.
- Cap: verify the top 10 by default. If more remain, say how many and let
the user pick or raise the cap. Unverified claims keep an
unverifiedverdict; nothing is silently dropped. - Hear each claim (see "The hearing").
- Record verdicts (see "Output") and summarize in chat.
Claim record
- id: <short slug>
- source: <map path | issue URL | review comment URL | pasted>
- claim: <one-line statement of what goes wrong>
- scenario: <the concrete trigger: input, interleaving, config, or sequence>
- receipt: <path:line or path:Symbol where it supposedly goes wrong>
- severity-if-true: <data | security | silent-wrong | crash | degraded |
cosmetic>
- verdict: unverifiedIf a claim has no concrete scenario ("this might be racy"), ask the Prover to
construct one as its first job. If it can't, the verdict is
unclear: no concrete trigger.
Sources
| Source | How to read it | Where the verdict goes |
docs/map/*.md friction lists | suspected-bug entries in "Open questions & friction" | In place, replacing verdict: unverified |
| GitHub issue or PR comment | gh issue view, gh pr view --comments, or the API | Report file; draft reply on request |
| Pasted list or review output | The conversation | Report file |
For map entries, keep the entry's wording and replace only the verdict slot. Preserve any existing verdict unless the code at its receipt has changed since it was recorded.
The hearing
Run three roles per claim. When the harness supports subagents, run each role in
its own isolated context, because an agent that has read the claim's framing, or
another role's reasoning, anchors on it. Pass only what each role needs. Role
briefs, including exact output formats, are in references/roles.md; read it
before the first hearing.
- Prover — gets the claim record and repo access. Builds the strongest case that the bug is reachable: the entry point, the path through the code, the state at the failure point, and the observable effect. May attempt a repro (see "Reproduction").
- Skeptic — gets the claim record and repo access, not the Prover's output. Hunts for anything that prevents the bug: upstream validation, framework or language guarantees, locks and ordering, types, config defaults, dead code paths, or the claim simply misreading the code.
- Referee — gets the claim record, both structured outputs, and repo access. Checks each receipt, weighs the arguments, and rules.
Run hearings for different claims in parallel when possible; the three roles for one claim run Prover and Skeptic in parallel, then Referee.
Without subagents, run the roles sequentially yourself: write the Prover case, then deliberately set it aside and write the Skeptic case from the claim alone, then referee. Tell the Referee step to discount any argument without a receipt, since sequential roles bleed into each other.
Verdicts
| Verdict | Meaning |
confirmed (reproduced) | A failing test in an isolated worktree demonstrates it |
confirmed (static) | A complete trigger path with receipts, and no valid prevention found |
refuted: <why> | Something concrete prevents it, with a receipt |
unclear: <what's missing> | Neither side made its case; say what would settle it |
Prefer unclear over a forced call. A wrong refuted buries a real bug, and a
wrong confirmed wastes someone's afternoon; unclear with a precise "what's
missing" is useful.
Reproduction
A failing test is the strongest evidence and the start of a fix, so the Prover should attempt one when it's cheap: the repo has a working test command, the trigger can be expressed as a unit or integration test, and no external services are needed.
- Create an isolated worktree on a scratch branch inside the excluded
.verify/directory:git worktree add -b verify-bug/<id> .verify/worktrees/<id> HEAD - Write the smallest test that should fail if the bug is real, and run only that test with the repo's own test command, from inside the worktree.
- Save the test as a patch. New files are untracked, so stage first:
git -C .verify/worktrees/<id> add -A && git -C .verify/worktrees/<id> diff --cached > .verify/patches/<id>.patch - Remove the worktree and branch:
git worktree remove --force .verify/worktrees/<id> && git branch -D verify-bug/<id>
A test that fails for an unrelated reason (compile error, missing fixture) proves nothing; fix the test or fall back to a static argument.
Ask the user once before installing dependencies, starting services or containers, making network calls, or running anything other than the repo's own test command. Concurrency bugs, external-service bugs, and UI bugs are usually not cheap to reproduce; don't force it.
Output
Every run writes a local report, plus in-place verdicts for map sources.
- Report:
.verify/<YYYY-MM-DD>-<slug>.md, with patches in.verify/patches/. On first run, before creating any worktree, add.verify/to.git/info/excludeso nothing lands in the repo's tracked files. The report lists every claim (including capped, unverified ones) with its verdict, the Prover's trigger path, the Skeptic's prevention argument, the Referee's reasoning, and any patch link. Use the template inreferences/roles.md. Map sources: replace
verdict: unverifiedwith the verdict and a one-line reason, plus a link to the report. For example:verdict: refuted: Sync holds mu across the check (sync/engine.go:88); see .verify/2026-09-24-sync.mdThe report path is local, so keep the one-line reason self-sufficient.
- GitHub sources: after the summary, offer to draft a reply for each verified issue or comment. Show the draft; post only after the user confirms that post. Keep replies factual: verdict, trigger path or prevention, and the repro test inline if one exists.
Chat summary
Keep it short: counts by verdict, then one line per confirmed bug (claim, severity, reproduced or static, patch link), then refuted and unclear claims in a compact list. Mention how many claims were capped. When confirmed bugs exist, say they're ready to fix and that the repro patch is the first half of the fix. Don't restate the report.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

