From Why
Explain exactly why you took a specific action, citing the exact context that drove each part of the decision, separating what your instructions required from what was left to your discretion, then putting the resolution and its in-place fix to the user and acting on their pick.
How this skill is triggered — by the user, by Claude, or both
Slash command
/why:whyWhen to use
Use when the user asks why you did, chose, said, or skipped something ("why did you...", "what made you...", "cite what influenced that"), or wants a past decision audited. Also good right after a surprising or wrong action, to trace it to its source and fix that source so it does not repeat.
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Reconstruct a specific decision honestly, then resolve it. Accuracy is the whole point: a clean-sounding reason you reverse-engineered to look justified is the failure mode; "nothing drove this, it was my own call, and a rule actually discouraged it" is the success.
Reconstruct a specific decision honestly, then resolve it. Accuracy is the whole point: a clean-sounding reason you reverse-engineered to look justified is the failure mode; "nothing drove this, it was my own call, and a rule actually discouraged it" is the success.
Work only from what is already in context. The reason lives in the conversation, the instructions and reminders you were given, and the tool results you already saw. Do not read files, grep, or run commands to reconstruct it: investigating after the fact builds a plausible story instead of reporting the real driver. Tools are allowed only for applying the fix, once the reason is already clear. If the reason is not in context and you do not actually know it, reject: say so and stop. Do not guess, and do not go looking.
CLAUDE.md rules (project and global), recalled memories, <system-reminder> blocks, hook messages, tool output you already saw, skill bodies, the environment block. Cite the line, not "my guidelines." Most decisions have several inputs; list them apart. If no cause is in context, do not investigate to find one: reject (see above).AskUserQuestion. Land on one distinct result below (or a reject), picking by whether the user named a better alternative, then put it to the user and act on the pick.Trace the decision first in every case, then land on exactly one of these — do not blend them. Put the result to the user with AskUserQuestion: recommended result first, labeled (Recommended), then act on the pick. Reject is the only result with no question.
AskUserQuestion; its options are the alternatives you would have chosen, so the user names Y. Do not invent a Y to knock down, and do not rewrite on a guess. Wait for the answer before correcting anything.Keep it tight. Four labeled parts, plain text, except the cited driver, which goes in a rendered blockquote:
Action: the one-line thing you are explaining.
What drove it: name each influence, then quote its source verbatim in a blockquote, with the exact span that caused the action in bold. The blockquote is a verbatim copy, never summarized, paraphrased, condensed, or tidied; bolding the operative span is the only change you may make. If the source is long, quote the relevant sentence whole rather than shortening it. Cite the specific line, not "my guidelines":
Bash tool: "Keep each command simple and legible. The permission evaluator and the user read every one, so a dense one-liner is harder to approve and harder to follow than a couple of plain steps."
What was discretionary: the parts nothing pointed to, named plainly.
Result: the outcome you landed on — corrected in place (the file and what you redid), holding X (the reason it wins and the rule that is the lever), proposed a source fix (the file and the change), or rejected (the reason is not in context). Then put it to the user with AskUserQuestion and act on the pick.
Fix the source, not the symptom: a promise does not survive a context reset, so the durable fix edits the instruction, memory, or hook that is still there next session. Where the fix goes depends on what drove the miss:
CLAUDE.md or rule file.CLAUDE.md for cross-project, the project's own for local), or a memory file for a preference.message/note, not just your behavior.settings.json, which the harness enforces.Asked "why did you run npm test when this is a pnpm project?" (alternative named, and it wins, so correct in place):
Action: ran npm test, which failed.
What drove it: the project's CLAUDE.md, which I followed verbatim:
Run
npm testto run the test suite.
What was discretionary: nothing. The action was forced by the instruction; the instruction itself is wrong for a pnpm repo.
Result (corrected in place): pnpm test was the right call. The fix is to edit that line in the project CLAUDE.md from npm test to pnpm test so it stops entering context next session, and rerun with pnpm test.
Then put it to the user with AskUserQuestion:
Apply the
pnpm testfix to the projectCLAUDE.md?
- Apply in place and rerun (Recommended)
- Show the exact edit first
- Leave it, I was wrong
On "Apply," edit the file and rerun pnpm test.
Guides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
Dispatches multiple subagents concurrently for independent tasks without shared state. Use when facing 2+ unrelated failures or subsystems that can be investigated in parallel.
npx claudepluginhub ariesclark/skills --plugin why