bug-hunt
Skill8 starsChanged 9 days agoMITView on GitHub
Launch a swarm of bug-hunting agents against a target file, module, or topic.
22 other projects use a version of this.
Adopted by
Most recently taken up by
- taecontrol/skillstheir own version, first seen Nov 8, 2026
- jocarrd/crux-agentstheir own version, first seen Nov 8, 2026
- griffinhilly/claude-code-synthesistheir own version, first seen Nov 1, 2026
- mkarami313/Claude-skilltheir own version, first seen Nov 1, 2026
- holutahyour/claude-skillstheir own version, first seen Oct 20, 2026
- AviadP/aviad-dev-toolkittheir own version, first seen Oct 15, 2026
Used with
Projects with it also use ship and research.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AWSSkillship
Finalize dev work on an issue branch — update docs, push, and open a PR.
Also in 3 projects that use this
NVIDIASkillresearch
Before designing a feature, research how comparable libraries solve the problem, check best practices, known pitfalls, and upstream changes. Use when starting a new feature, investigating an unfamiliar area, or the user asks to research something.
Also in 3 projects that use this
Other versions22 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 22
- Use-Tusk/drift-node-sdk★ 173same name
- danpeg/bug-hunt★ 144same name
- EthanReedLabs/sulde★ 99same name
- griffinhilly/claude-code-synthesis★ 67same name
- jedijashwa/pullmark★ 13same name
- yeaight7/agent-powerups★ 6same name
- jocarrd/crux-agents★ 4same name
- coderPerseus/skills★ 2same name
- garthcodes/claude-skills★ 2same name
- notJoon/SKILLS★ 2same name
12 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository35 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- commandsSkill
- agentic-auditSkill
- agent-reviewSkill
- autonomous-dev-flowSkill
- batch-mergeSkill
- catchupSkill
- check-prSkill
- commitSkill
- create-issueSkill
- create-prSkill
- decideSkill
- decompose-issueSkill
- fix-ciSkill
- full-reviewSkill
- hallucination-checkSkill
- learnSkill
- manual-testing-modeSkill
- mergeSkill
- parallel-devSkill
- prime-directiveSkill
- project-auditSkill
- pulseSkill
- qa-updateSkill
- reconSkill
- session-lifecycleSkill
- skillSkill
- smoke-formSkill
- smoke-testSkill
- start-workingSkill
- swarm-auditSkill
- tackle-issuesSkill
- tiered-delegationSkill
- visual-briefSkill
The file
We split this skill into the rules it gives an agent
11 rules. 0 are common, 8 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 19 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 40
If TARGET is missing, refuse and ask the user what to hunt against — bug-hunt without a scope is too noisy.
- Distinctive: line 44
Before launching hunters, read enough to brief them properly (5-10 minutes max):
- Distinctive: line 46
Read the target file(s) or the entry point of the target topic
- Distinctive: line 47
Read CLAUDE.md if present (especially attribution policy, test conventions, persistence rules)
- Distinctive: line 55
All hunters share the same job (find bugs) but bring different lenses.
- Very specific: line 146
Run hunters as foreground Agent calls: If HUNTER_COUNT > 4, batch: first 4 in parallel, then the rest.
- Distinctive: line 154
Sample-verify instead of up-tiering: If hunter findings look noisy, re-check a ~10% sample with a stronger tier before filing anything.
- Distinctive: line 159
After hunters return, build the unified candidate list:
- Very specific: line 220
auto-file=none(default): Ask which candidates to file. - Distinctive: line 255
Verify labels exist: before using them. Skip missing labels rather than failing.
- Very specific: line 273
Do NOT push. Do NOT commit if output=-.
“Common” is measured: kept by at least 6 in 10 of the 19 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/bug-hunt
Launch a swarm of bug-hunting agents against a target file, module, or topic. Output is a triaged candidate-issue list ready to feed into /create-issue — not ratings, not architectural critique. The job is: find bugs that would make good GitHub issues.
This is the issue-filing flavor of /swarm-audit. Use it when your goal is "populate the backlog with concrete bugs from this code," not "evaluate the design."
Arguments
$ARGUMENTS- Optional configuration. Space-separated tokens:- First positional: target (file path, directory, or quoted topic like
"the auth flow"). Required. hunters=N— Number of hunter agents (default: 4, min: 3, max: 6)severity-floor=critical|major|minor— Drop findings below this severity in the final list (default:minor)auto-file=critical|major|none— Automatically file issues at this severity or above without asking (default:none— always confirm)output=DIR— Output directory for the candidate list (default:docs/bug-hunt/). Passoutput=-to skip writing.
- First positional: target (file path, directory, or quoted topic like
Examples:
/bug-hunt src/payments
/bug-hunt "the websocket reconnection logic" hunters=5
/bug-hunt src/auth severity-floor=major auto-file=critical
/bug-hunt . hunters=6 output=docs/audit/pre-releaseInstructions
1. Parse Arguments and Resolve Target
TARGET = first positional (file path, dir, or quoted topic)
HUNTER_COUNT = extract from hunters=N (default: 4, clamp 3-6)
SEVERITY_FLOOR = extract from severity-floor=X (default: minor)
AUTO_FILE = extract from auto-file=X (default: none)
OUTPUT_DIR = extract from output=DIR (default: docs/bug-hunt/, "-" skips write)If TARGET is missing, refuse and ask the user what to hunt against — bug-hunt without a scope is too noisy.
2. Quick Context Pass
Before launching hunters, read enough to brief them properly (5-10 minutes max):
- Read the target file(s) or the entry point of the target topic
- Read
CLAUDE.mdif present (especially attribution policy, test conventions, persistence rules) - Skim
README.mdfor domain context - Note the test framework so hunters can suggest concrete repro tests
Build a shared briefing (10-20 lines) that every hunter receives. This prevents three hunters from wasting tokens learning the same setup.
3. Select Hunter Panel
All hunters share the same job (find bugs) but bring different lenses. Always include Skeptic + Guardian + Tester. Add the rest based on what the target touches.
Core Hunters (always included)
| Hunter | Nickname | Lens | Personality |
| Logic | "Skeptic" | Logic errors, false assumptions, off-by-one, wrong operators, claims in comments that diverge from code | Cynical engineer who reads every line assuming it lies. Cross-references comments and docstrings against actual behavior. |
| Reliability | "Guardian" | Race conditions, data integrity, persistence corruption, error handling gaps, recovery paths, lazy-init that overwrites state | Paranoid SRE who has watched production data disappear. Specifically hunts the class of bug where a fix silently destroys persisted state (e.g., default-then-save instead of load-then-merge). |
| Edge Cases | "Tester" | Untested branches, boundary conditions (empty/null/max/zero/negative/unicode/concurrent), error paths, what happens when the happy path doesn't | QA engineer who believes every untested branch is a latent bug. Names specific inputs that would break each function. |
Extended Roster (pick by relevance to target)
| Hunter | Nickname | Lens | Include When |
| Security | "Adversary" | Injection, auth bypass, SSRF, path traversal, secret leakage, attack surface | Target touches auth, network code, user input, external APIs, file operations |
| UX | "Operator" | User-facing regressions, broken error messages, accessibility, confusing states, broken links/buttons | Target touches UI, output formatting, user-facing strings, error flows |
| Perf | "Profiler" | N+1 queries, accidental quadratic loops, missing indexes, unbounded growth, memory leaks, sync-in-async | Target touches data access, hot paths, request handling, large collections |
| Expo Expert | "Expo Expert" | Expo SDK lifecycle, React Native constraints, OTA updates, dev client vs Expo Go | Target involves mobile app architecture, updates, or Expo-specific features |
| Tunneler | "Tunneler" | Cloudflare tunnels, DNS, TLS, WebSocket proxying, network reliability | Target involves tunnel configuration, connectivity, or networking |
Selection Algorithm
1. Start with 3 core hunters (Skeptic, Guardian, Tester)
2. For each remaining slot up to HUNTER_COUNT:
- Adversary if target touches auth/network/input/external IO
- Operator if target touches UI/output/user-facing strings
- Profiler if target touches data/hot paths/large collections
- Expo Expert if target involves mobile app architecture, updates, or Expo-specific features
- Tunneler if target involves tunnel configuration, connectivity, or networking
3. Stop when slots are fullState the selected panel and why each was chosen to the user before launching.
4. Launch Hunters
Launch all hunters in parallel using the Agent tool. Each hunter receives the shared briefing, the TARGET, their persona, and the strict finding template below — uniform output is critical for dedup in step 5.
Hunter prompt template:
You are "{NICKNAME}" — {PERSONALITY}
Your job is to **find bugs that would make good GitHub issues** in the following target. You are not grading the code. You are not proposing architectural changes. You are hunting concrete, fileable bugs.
## Target
{TARGET}
## Shared Briefing
{BRIEFING}
## Your Lens
{LENS}
## Rules
1. READ actual source code. Verify each finding against the code, not against vibes. **Use repo-memory to save tokens:** call `get_file_summary` (or `batch_file_summaries`) before a full `Read` to scope where to look (a fraction of a full Read), and `search_by_purpose` instead of grep — then `Read` the suspect lines in full to confirm the bug.
2. Every finding must be **concrete and reproducible**. "This might fail" is rejected. "Calling foo() with input=null on line 42 hits the unguarded `.length` on line 47 and throws" is accepted.
3. Stay in your lens. If you stray into other hunters' lanes (e.g., Tester writing security findings), dedup later eats your work.
4. Do NOT suggest fixes longer than 1-2 lines. Issue authors decide the fix; you describe the bug.
5. If you find nothing in your lens, return an empty findings list with a one-line "lens swept, no bugs in scope" note. Empty is honest. Padded is harmful.
## Output (use this exact format for each finding)
```yaml
- title: "bug(scope): concise description" # issue-ready, lowercased verb
severity: critical | major | minor # see severity rubric below
location: path/to/file.ext:LINE # primary site; add more in evidence
symptom: |
One-paragraph description of what goes wrong from the user's or system's perspective.
repro: |
Concrete steps to trigger it. Inputs, state, sequence. A test author could write this.
evidence: |
file:line citations + 1-3 short quoted lines of relevant code.
hypothesis: |
Why this happens in one sentence.
fix_sketch: |
1-2 lines on the likely fix direction (e.g., "Add null check before .length" or "Use load-then-merge in save()").
dedup_key: "<short stable phrase>" # e.g., "null-deref-in-charge-handler"
```
## Severity Rubric
- **critical**: Data loss, security boundary breach, complete feature outage, or production-down class.
- **major**: Wrong result for plausible input, silent corruption of non-critical state, UX broken for common path, performance cliff.
- **minor**: Edge case, cosmetic, narrow-input failure, missing input validation that is defensive only.
Cap your findings at 6. Quality over quantity.Run hunters as foreground Agent calls. If HUNTER_COUNT > 4, batch: first 4 in parallel, then the rest.
Delegation tiers (cost discipline — do not strip):
Roles per /tiered-delegation: workhorse = one tier below the session ceiling, mechanical = cheapest available tier. Concrete model names live only in that skill's CUSTOMIZE-marker ladder — never here.
- Hunters run at the workhorse tier by default. Bug-hunting breadth is workhorse work; do not spawn hunters at the ceiling. The orchestrator's dedup/triage (step 5) and the user-facing report are where the expensive judgment lives.
- Mechanical passes at the mechanical tier. The step-5 dedup key matching, severity-floor filtering, and any pre-filter over candidate files run at the mechanical tier at low effort.
- Sample-verify instead of up-tiering. If hunter findings look noisy, re-check a ~10% sample with a stronger tier before filing anything; a finding that fails its sample check sends the whole batch back for verification, not for a full re-run up-tier.
- Fan-out budget: ~12 workhorse/ceiling subagents per run. The budget counts workhorse- and ceiling-tier agents (the hunters); mechanical-tier passes and the ~10% sample-verify checks do not count against it. Exceeding 12 requires an explicit one-line justification in the report; 20 is a hard ceiling that includes every refute/verify agent, and no justification lifts it (≤3 refuters per finding — queue rounds rather than widen). The 6-hunter maximum sits well inside this budget.
5. Dedup and Triage
After hunters return, build the unified candidate list:
- Parse every hunter's YAML findings.
- Dedup by:
- Exact
dedup_keymatch → merge (combine evidence, take highest severity, list all reporting hunters) - Same
location(file + line within ±3) AND overlapping symptom keywords → merge - Otherwise keep separate
- Exact
- Drop any finding below
SEVERITY_FLOOR. - Sort by severity (critical → major → minor), then by hunter-agreement count (more hunters = more confidence).
- Check for existing issues — for each candidate, run a quick
gh issue list --search "<title keywords>" --state all --json number,title --limit 3to flag possible duplicates of already-filed issues. Annotate each candidate withpossible_duplicates: [...]if any.
6. Build the Candidate List Document
Unless output=-, write to ${OUTPUT_DIR}/<slugified-target>-<YYYYMMDD>.md:
# Bug Hunt: {TARGET}
**Date:** {today}
**Hunters:** {nicknames}
**Severity floor:** {SEVERITY_FLOOR}
**Candidates:** N (after dedup and floor)
## Summary Table
| # | Severity | Title | Location | Hunters | Possible Dupes |
|---|----------|-------|----------|---------|----------------|
| 1 | critical | bug(payments): charge handler null-derefs on missing currency | src/payments/charge.ts:47 | Skeptic, Guardian | — |
| 2 | major | ... | ... | ... | #1834 |
| ... | ... | ... | ... | ... | ... |
## Candidate Details
{For each candidate, render the merged finding in the template below.}
### #N — {title}
**Severity:** {severity} | **Hunters:** {nicknames} | **Possible duplicates:** {issue#s or "—"}
**Symptom**
{symptom paragraph}
**Reproduction**
{repro steps}
**Evidence**
{file:line citations + quoted code}
**Hypothesis**
{one sentence}
**Fix sketch**
{1-2 lines}
---7. Confirm and File
Present the summary table to the user. Then, depending on AUTO_FILE:
auto-file=none(default): Ask which candidates to file. Accept ranges like1,3,5-7orallornone. Skip anything withpossible_duplicatesunless the user confirms.auto-file=major: File everycriticalandmajorcandidate that has nopossible_duplicateswithout asking. Then ask about the rest.auto-file=critical: File everycriticalcandidate that has nopossible_duplicateswithout asking. Then ask about the rest.
For each candidate the user accepts, file an issue using the same shape as /create-issue:
gh issue create \
--title "${TITLE}" \
--label "bug,from-review" \
--body "$(cat <<EOF
## Context
Filed from: session ${CLAUDE_CODE_SESSION_ID}
## Symptom
${SYMPTOM}
## Reproduction
${REPRO}
## Evidence
${EVIDENCE}
## Hypothesis
${HYPOTHESIS}
## Fix sketch
${FIX_SKETCH}
## Source
Found during /bug-hunt on $(date +%Y-%m-%d). Reported by: ${HUNTERS}.
EOF
)"Verify labels exist before using them. Skip missing labels rather than failing.
8. Commit Candidate List (only if files were written)
Stage explicit paths. git status --short first, then git add the report files you just
wrote, by name. Never git add -A, git add ., git add -u, git add <dir>/, or
git commit -a. A trailing-slash directory add is a bulk add: the working copy is shared with
concurrent sessions, so ${OUTPUT_DIR}/ may also hold a stale report from another run or a file
that is not yours. -u is not the safe one: it restages every tracked file whose worktree copy
differs, including files a clean/smudge filter rewrote without you touching them — that is how
git add -u turned a tracked 21KB .docx into a git-lfs pointer and committed it as an edit.
git status --short "${OUTPUT_DIR}"
git add "${OUTPUT_DIR}/<report-file-1>.md" "${OUTPUT_DIR}/<report-file-2>.md" # name each file you wrote
git commit -m "docs: bug-hunt of <target> (<N> candidates, <M> filed)"Do NOT push. Do NOT commit if output=-.
9. Report to User
Output a final summary:
## Bug Hunt Complete: {target}
| Metric | Value |
|---|---|
| Hunters | {N} ({nicknames}) |
| Raw findings | {pre-dedup count} |
| Candidates | {post-dedup, post-floor count} |
| Issues filed | {filed count} |
| Possible duplicates flagged | {dupe count} |
### Filed Issues
{table of #issue → title}
### Skipped (your decision or duplicate)
{table of skipped candidates}
### Recommended Next Step
{usually: /tackle-issues with the new issue numbers, or run /bug-hunt on a related area}Configuration
Severity Rubric
| Severity | Meaning |
| critical | Data loss, security breach, full outage class. File immediately. |
| major | Wrong result for plausible input, silent corruption of non-critical state, broken common-path UX. |
| minor | Edge case, cosmetic, narrow-input failure, defense-in-depth gaps. |
Hunter Behavior Rules
- Hunters MUST be concrete. Every finding has a file:line, a repro, and evidence. No "code smells."
- Hunters MUST NOT propose architectural changes. That is
/project-auditterritory. - Hunters MUST cap findings at 6. Quality over noise.
- Hunters MUST stay in their lens. Strays cost tokens and produce dedup noise.
- Hunters SHOULD return empty if their lens finds nothing — empty is a valid result.
Examples
/bug-hunt src/payments
/bug-hunt "the websocket reconnection logic" hunters=5
/bug-hunt src/auth severity-floor=major
/bug-hunt . hunters=6 auto-file=critical
/bug-hunt src/storage hunters=3 output=-Comparison to Sister Skills
| Goal | Use |
| "Find bugs to file as issues" | /bug-hunt |
| "Map an unfamiliar repo first" | /recon |
| "Rate the whole project" | /project-audit |
| "Audit a design doc / RFC" | /swarm-audit |
| "Review this PR before merge" | /agentic-audit |
A typical pipeline: /recon src/payments → /bug-hunt src/payments → /tackle-issues on the newly-filed issues.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

