Answer at the decision level - plain language the user can judge and decide on, with code, file paths and line numbers kept below a marked line. Armed for one session at a time and off by default. Use when the user types /decision-layer, or asks to work at the decision level, to stop mixing code into answers, to hide implementation detail, or to be told only what they can actually decide. `/decision-layer off` turns it back off.
Scanned 8/30/2026
Install to Claude Code
npx -y skills add VincentHHY/big-picture --skill decision-layer --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Decision Layer?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vincenthhy-decision-layer)More formats (shields.io, HTML) on the badges page.
---
name: decision-layer
description: Answer at the decision level - plain language the user can judge and decide on, with code, file paths and line numbers kept below a marked line. Armed for one session at a time and off by default. Use when the user types /decision-layer, or asks to work at the decision level, to stop mixing code into answers, to hide implementation detail, or to be told only what they can actually decide. `/decision-layer off` turns it back off.
---
# Decision layer
Typing `/decision-layer` arms it already — a hook fires before this file loads. Nothing more
to do. Just confirm the boundary is on for this session and carry on with the work.
If the skill was triggered by plain words rather than the typed command, no arming event
fired. Arm it by hand:
```bash
bash "${CLAUDE_PLUGIN_ROOT}/hooks/decision-layer-mode.sh" --arm
```
If the output style is not selected, arming does nothing. The session-start hook already
says so on screen when that happens. The fix is `/decision-layer setup`: it writes
`"outputStyle": "decision-layer:Plain"` into `~/.claude/settings.json`, which covers every
project and every surface. The terminal's `/config` picker covers only the project it was run
in, and neither the VS Code extension nor the desktop app has a picker at all. The style is
read at session start either way, so it lands on the next session. The selection is
remembered, and the boundary still starts off in every new session because the hook owns
that part.
## Turning it off
- `/decision-layer off` — off for the session.
- `--impl-off` on the first or last line of an ordinary message — same thing, handled by the
hook, so it works mid-run when the user is busy and not reading carefully.
- `--impl` on the first or last line of a message — off for that **one reply** only, then
back on automatically. Also handled by the hook, so there is nothing to detect.
Only those two lines count, and only a switch standing there as a word of its own. Quoting
one mid-message — pasting a transcript, or this file — is not typing one and changes
nothing.
A plain request for code — "show me that function", "what does the error say" — also drops
the boundary for that reply. That one is a judgement call, not a hook.
## Why the arming matters
Arming is what makes the mode survive. Without the flag file, the rules in the output style
are inert: they are written conditionally and apply only to a turn the hook has marked. The
flag is keyed by session id, so a new session always starts with the boundary off.
The block between the `INJECT` markers below is the only copy of the marker text. The hook
reads it fresh on every prompt, so editing it here changes what gets sent on the next one.
No restart, no code change.
<!-- INJECT:BEGIN -->
DECISION-LAYER:ARMED
This turn is armed. Apply the decision-layer output style's "While armed" rules to your
reply: the sufficiency test, recast-then-own, anchors below `--- where ---`, and the closing
footer.
<!-- INJECT:END -->
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!