Help us improve
Share bugs, ideas, or general feedback.
From straitjacket
Root-cause ONE bug from a green tree — understand the defect and its cause WITHOUT fixing it. Dispatches a single root-cause-analyst agent that reproduces, instruments via Bash, reverts, and leaves the tree exactly green, returning a root_cause + reproduction + the three test-bridge fields (suspect_files / suspect_symbol / intended_behavior_seed). Use when the user says 'debug this', 'why does X happen', 'find the root cause', or 'investigate this bug/crash/failure'. Diagnosis-only: it does not write a fix or a test — hand the diagnosis to straitjacket:triage (or tdd fix-mode) to turn it into a failing test + fix. Supports Rust and C#.
npx claudepluginhub kemononeco/straitjacket --plugin straitjacketHow this skill is triggered — by the user, by Claude, or both
Slash command
/straitjacket:debugThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill **understands a bug and its cause; it never fixes it and never authors a test.**
Guides technical evaluation of code review feedback: read fully, restate for understanding, verify against codebase, respond with reasoning or pushback before implementing.
Share bugs, ideas, or general feedback.
This skill understands a bug and its cause; it never fixes it and never authors a test.
Fixing is straitjacket:triage (or tdd fix-mode); test-writing is the multi-agent engine.
Your residual role is thin: start from a known-green tree, dispatch the investigator, and own
the savepoint — the tree must end exactly as green as it started.
root-cause-analyst agent, not by you and not by a
fan-out team. You do not read-and-reason your way to the root cause in the main session.The shared engine — the agent roster (incl. root-cause-analyst), the dispatch convention, and
the run-state layout — lives once in docs/STAGES.md. This skill does
not restate it.
<bug> — an inline description of the defect (the failing behavior, the symptom). OR:--id <bug-id> — pull an existing record from the bug ledger (<repo>/.straitjacket/bugs.json)
and investigate it; its suspect_files / suspect_symbol seed the scope.--files a,b — repo-relative path(s) the user already suspects; narrows the analyst's scope.At least one of <bug> / --id is required; --files is an optional scope hint either way.
repo_root.straitjacket verify-tree-clean --repo-root <repo_root>
→ {clean, dirty_files}. If clean is false, stop and report dirty_files: debug operates
from a green state (it is in the UserPromptExpansion green-baseline preflight matcher, so
the gate also fires on invocation). A diagnosis from a dirty tree can't promise a clean savepoint.run_id = <YYYYMMDDThhmmss>-<4hex>; create <repo_root>/.straitjacket/<run_id>/;
append .straitjacket/*/ to .gitignore if absent (scoped to subdirs so .straitjacket/bugs.json stays committable).straitjacket detect-stack --repo-root <repo_root> → stack.--id was given, read the record and carry its suspect_files / suspect_symbol /
summary / expected / actual into the analyst's prompt as context (not as conclusions).root-cause-analyst is a single intra-turn iterative agent (reproduce → hypothesize → instrument
→ re-run, internally), so it is dispatched directly via Agent — never a workflow-script
stage (same precedent as coverage-reviewer; see the substrate classifier in
docs/STAGES.md).
Dispatch one root-cause-analyst. Self-contained prompt (the agent has no memory of this
session): the bug (inline text and/or the ledger record's fields), the --files scope hint, the
stack, and repo_root. Instruct it to:
root_cause, a reproduction (the minimal steps/command that triggers the bug), and the
three bridge fields suspect_files / suspect_symbol / intended_behavior_seed (the contract
sentence for the correct behavior — the seed a future fix-mode run locks).After the analyst returns, re-run straitjacket verify-tree-clean --repo-root <repo_root>. If
clean is false, restore the tree (git checkout -- <dirty_files> / git reset --hard to
the pre-run HEAD) before reporting — the analyst is supposed to revert, but the savepoint is yours
to guarantee mechanically. Never present a diagnosis over a dirty tree.
--id record given → write back the analyst's findings to that record (you may use the
ledger directly here): refresh suspect_files / suspect_symbol / intended_behavior_seed,
append the root_cause + reproduction to notes. Leave status as-is (debug doesn't fix).straitjacket:report-bug (the surfaced-bug
reflex, STAGES.md rule 7): map the analyst's suspect_files /
suspect_symbol / intended_behavior_seed straight onto the BugRecord fields so the diagnosis
becomes a durable, liftable ledger record. Debug diagnoses, it does not fix — the fix is triage.root_cause — the actual defect and why the symptom follows.suspect_files + suspect_symbol.straitjacket:triage (or tdd fix-mode seeded with intended_behavior_seed)
turns this diagnosis into a failing test for the correct behavior + a fix. debug does not fix.root-cause-analyst) plus a couple of CLI calls; no fan-out, no workflow.<repo>/.straitjacket/<run_id>/; the bug ledger at
<repo>/.straitjacket/bugs.json is tracked/committed. The straitjacket CLI is on PATH
via the plugin's bin/.