investigate
Skill2 starsChanged 4 months agoMITView on GitHub
Root-cause a failure before any fix - the iron law is no fixes without investigation. Exact symptom statement, minimal repro, known bug classes first, a hypotheses-vs-evidence table with discriminating tests, root cause at file:line, and a hard stop after three failed fixes. Use when debugging an error, a failing test, or unexpected behavior, or when the user asks to investigate or root-cause something.
128 other projects use a version of this.
Adopted by
Most recently taken up by
- lohi-ai/babysittheir own version, first seen Nov 8, 2026
- charles-adedotun/sre-plugintheir own version, first seen Nov 8, 2026
- NemesLaszlo/claude-code-harnesstheir own version, first seen Nov 8, 2026
- haoyisun/skillstheir own version, first seen Nov 8, 2026
- GeiserX/sstacktheir own version, first seen Nov 8, 2026
- pfangueiro/claude-code-agentstheir own version, first seen Nov 8, 2026
Used with
Projects with it also use pair-agent, plan-devex-review and 10 more.
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.
seek888Skillpair-agent
Pair a remote AI agent with your browser. One command generates a setup key and prints instructions the other agent can follow to connect. Works with OpenClaw, Hermes, Codex, Cursor, or any agent that can make HTTP requests. The remote agent gets its own tab with scoped access (read+write by default, admin on request). Use when asked to "pair agent", "connect agent", "share browser", "remote browser", "let another agent use my browser", or "give browser access". (gstack) Voice triggers (speech-to-text aliases): "pair agent", "connect agent", "share my browser", "remote browser access".
Also in 10 projects that use this
seek888Skillplan-devex-review
Interactive developer experience plan review. Explores developer personas, benchmarks against competitors, designs magical moments, and traces friction points before scoring. Three modes: DX EXPANSION (competitive advantage), DX POLISH (bulletproof every touchpoint), DX TRIAGE (critical gaps only). Use when asked to "DX review", "developer experience audit", "devex review", or "API design review". Proactively suggest when the user has a plan for developer-facing products (APIs, CLIs, SDKs, libraries, platforms, docs). (gstack) Voice triggers (speech-to-text aliases): "dx review", "developer experience review", "devex review", "devex audit", "API design review", "onboarding review".
Also in 13 projects that use this
ShreyRaviSkilllanding-report
Read-only queue dashboard for workspace-aware ship. Shows which VERSION slots are currently claimed by open PRs, which sibling Conductor workspaces have WIP work likely to ship soon, and what slot /ship would pick next. No mutations — just a snapshot. Use when asked to "landing report", "what's in the queue", "show me open PRs", or "which version do I claim next". (gstack)
Also in 7 projects that use this
ayudaySkillsetup-deploy
Configure deployment settings for /land-and-deploy. Detects your deploy platform (Fly.io, Render, Vercel, Netlify, Heroku, GitHub Actions, custom), production URL, health check endpoints, and deploy status commands. Writes the configuration to CLAUDE.md so all future deploys are automatic. Use when: "setup deploy", "configure deployment", "set up land-and-deploy", "how do I deploy with gstack", "add deploy config".
Also in 14 projects that use this
ayudaySkillcso
Chief Security Officer mode. Performs OWASP Top 10 audit, STRIDE threat modeling, attack surface analysis, auth flow verification, secret detection, dependency CVE scanning, supply chain risk assessment, and data classification review. Use when: "security audit", "threat model", "pentest review", "OWASP", "CSO review".
Also in 17 projects that use this
ramybarsoumSkilldocument-release
Post-ship documentation update. Reads all project docs, cross-references the diff, updates README/ARCHITECTURE/CONTRIBUTING/CLAUDE.md to match what shipped, polishes CHANGELOG voice, cleans up TODOS, and optionally bumps VERSION. Use when asked to "update the docs", "sync documentation", or "post-ship docs". Proactively suggest after a PR is merged or code is shipped.
Also in 18 projects that use this
- +1 more from seek888
Other versions128 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 128
- recharts/recharts★ 28ksame name
- gitkraken/vscode-gitlens★ 10ksame name
- vercel/eve★ 5.8ksame name
- rilldata/rill★ 3ksame name
- DenchHQ/DenchClaw★ 1.7ksame name
- DenchHQ/ironclaw★ 1.7ksame name
- ceedaragents/cyrus★ 888same name
- cyrusagents/cyrus★ 888same name
- rommapp/argosy-launcher★ 710same name
- mr-daedalium/ostack-saas★ 108same name
118 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 repository27 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- auditSkill
- challengeSkill
- contract-checkSkill
- depsSkill
- design-auditSkill
- designSkill
- doSkill
- eval-runSkill
- eval-specSkill
- healthSkill
- journalSkill
- learnSkill
- migrate-checkSkill
- plan-reviewSkill
- planSkill
- qaSkill
- refactorSkill
- resumeSkill
- retroSkill
- secureSkill
- shipSkill
- ticketSkill
- triageSkill
- verifySkill
- whySkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 5 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 115 edited versions we read keep these.
5
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 17
Run before the skill's steps — per invocation, not per session (4.36).
- Very specific: line 35
Never delete a decision. Supersede it: ~~old~~ → Verdict (YYYY-MM-DD): new call — reason.
- Distinctive: line 36
Never fix, tune, or delete a test or eval case to raise a score.
- Distinctive: line 54
No fix is written until the investigation names a root cause backed by discriminating evidence.
- Very specific: line 75
Known classes first: Check the pack's ../audit/references/known-bug-classes.md and the project's LEARNINGS.md before inventing hypotheses — …
- Very specific: line 84
read the class → cite it, known-bug-classes.md § <class name>, and state which part of the class matched this symptom.
- Distinctive: line 107
After 3 failed fix attempts: STOP.
- Distinctive: line 135
Every applied fix traces back to a row of the hypotheses table.
“Common” is measured: kept by at least 6 in 10 of the 115 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
/investigate — no fixes without investigation
You are finding out why, not making it go away. A fix written before the root cause is named is a guess wearing a fix's clothes.
Adjacent skills: /audit code (broad defect hunt over a path; /investigate
chases one symptom to its cause) · /do (executes planned work; /investigate
determines what the fix should be).
<!-- acstack:runtime -->Run before the skill's steps — per invocation, not per session (4.36); failures degrade to markdown:
link="$(readlink "$HOME/.claude/skills/health" 2>/dev/null || true)" # empty = not symlinked
pack="$(dirname "$(dirname "$link")")" # NEVER trust this unless $link was non-empty
if [ "${link#/}" != "$link" ] && [ -x "$pack/bin/acstack-config" ] && ! "$pack/bin/acstack-config" runtime | grep -q '=off'; then
"$pack/bin/acstack-config" || true # resolved keys, with sources
"$pack/bin/acstack-update-check" || true # ≤1 fetch/day; silent ONLY if already checked today
"$pack/bin/acstack-recall" || true # LEARNINGS.md + bug-class names, capped 3KB
else
echo "runtime off — proceeding without recall/update-check"
fi<!-- /acstack:runtime --><!-- acstack:principles -->Operating principles
- Be direct. Push back in writing when the plan or the user is wrong. No sycophancy.
- Never delete a decision. Supersede it:
~~old~~ → **Verdict (YYYY-MM-DD):** new call — reason. - Never fix, tune, or delete a test or eval case to raise a score. Log the miss honestly and leave the case unchanged.
- Name exact things: regex patterns, function signatures, model names, before → after numbers. Never "fixed bugs".
- Attribution: follow the project's
attributionsetting (defaultnone) — no AI-tool mentions in generated docs, no attribution trailers in commits or PRs. Commit with explicit-m/-Fmessages only. - Config: read
.claude/acstack.mdat the project root (fall back to~/.claude/acstack.md) before acting.## Settingskeys override pack defaults; a## <skill-name>section overrides both. Unknown keys and sections are ignored. - Docs: BRIEF.md (frozen seed) / PLAN.md (living plan) / JOURNAL.md (rolling journal). If the repo uses legacy names (PLANNING_PROMPT.md / PLANNING.md / STATUS.md), use those instead — never create both.
- Recall: if
LEARNINGS.mdexists at the project root, read it before starting. - Conduct: follow the
acstack-conductblock in this repo's AGENTS.md — the word is the mode; the user sets the pace. - Hackathon lane: if the project's AGENTS.md carries the
acstack:hackathon-laneblock, only/dochanges the repository during the event. Any other skill that would write a tracked file, commit or push says what it would have done and stops; a change that is not a task goes through the lane's operator route.
<!-- /acstack:principles -->One document set. Resolve exactly ONE BRIEF/PLAN/JOURNAL set and name
its path in the report's scope line. If more than one candidate set exists
— a monorepo, nested products, an apps/* tree each with its own docs —
list the candidates and STOP. Never pick one silently: a confident answer
about the wrong product is worse than no answer (conduct rule 8).
The Iron Law
No fix is written until the investigation names a root cause backed by discriminating evidence. This binds the model too: hitting a bug mid-task is not an exemption from the law — it is the trigger for this skill.
The investigation
The verdict leads the report. Open with the root cause in one line —
root cause: <file:line> — <what is wrong>, or not found: <what was
ruled out> — then the evidence that earned it. The cause currently lands
at step 5 of a long report; a reader who stops after one line must still
get the answer, which is the same verdict-first stance every other
report-shaped skill in the pack takes.
Method details in references/investigation-method.md. The sequence:
- Symptom statement. Exact observed behavior: the error text verbatim, the failing input, expected vs actual. "It's broken" is not a symptom; neither is a paraphrased error message.
- Reproduce first. A minimal command that shows the failure on demand. Can't reproduce → the investigation continues (narrow the conditions); a fix is not attempted against a failure you cannot summon.
Known classes first. Check the pack's
../audit/references/known-bug-classes.mdand the project's LEARNINGS.md before inventing hypotheses — most bugs are reruns.Naming a class requires having read it. The runtime recall preamble prints class names only, so a session can name a class it never opened — and one did, reporting "known class hit … checked first" on a run whose trace held no read of the file at all. Say which you did, in these words:
- read the class → cite it,
known-bug-classes.md § <class name>, and state which part of the class matched this symptom; - matched a name from recall without opening the file → say "matches a class name from recall (full class not read)".
The weaker claim is entirely acceptable — recall exists to be used, and the recall output itself says to read the full class when one matches. What is not acceptable is the stronger claim without the read behind it, because a reader cannot tell them apart afterwards.
- read the class → cite it,
- Hypotheses vs evidence. A table: hypothesis | evidence that would confirm or kill it | test performed | result. A hypothesis with no discriminating test does not belong in the table — it's a hunch, and hunches don't gate fixes.
- Root cause.
file:line, the mechanism, and why it produces exactly this symptom — that last clause is what separates a root cause from a correlation that happens to sit nearby. - Proposed fix + verification. The fix, the command that proves it
worked, and the regression risk. The fix is APPLIED only if the user
asked for a fix; a bare
/investigateends with this report (assessment first, per conduct).
Three strikes
After 3 failed fix attempts: STOP. Write the state up — each dead hypothesis with the evidence that killed it, what remains untested, the exact current symptom — into JOURNAL.md (document mode) or an issue comment (tickets mode), and hand it to the user. There is never a silent fourth attempt; a fourth guess destroys more context than it could recover.
Tickets mode (tracking: tickets)
Preconditions — gh installed, gh auth status succeeding, and a GitHub
remote present. Name exactly which one failed and fall back to document
mode; never guess.
An issue# argument reads the issue for symptom context and prior
attempts. Findings are offered as a gh issue comment so the investigation
travels with the ticket — offered, not posted unasked.
Invoked with no issue#, the offer still has to resolve to something.
The instruction above named no target for a bare invocation, so a live run
in tickets mode simply made no offer at all. Do one of two things, and say
which:
- an open issue plainly describes this failure → name it and offer the comment against it, still unposted;
- none does → say so in one line — "no issue matches this failure; filing
one is
/ticket's job" — and stop there. Do not open an issue to have somewhere to put the comment.
Hard rules
- Every applied fix traces back to a row of the hypotheses table. No shotgun fixes, no "while I'm here" changes.
- Error text is quoted verbatim, always — paraphrases hide the clue.
- An investigation that overturns a plan assumption records it in PLAN.md as a dated decision (supersede, never silently edit).
- A failed investigation is a valid result: report what was ruled out and what evidence is missing. That is progress; a premature fix is not.
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.

