Output Styles skill for Claude Code

Reshape every reply without touching how code gets written. Claude first checks whether a built-in style or CLAUDE.md, a skill, or a hook is the better fit, then writes a short style file with observable format rules, an exceptions section so errors and risks still surface, and the right keep-coding-instructions choice. Every style is checked with a four-prompt comparison against Default before it is committed.

  • nameoutput-styles
  • size164 lines · ≈2,100 tokens
  • files2
  • licenseMIT
  • updated

What Claude sees before loading it

This description is the only part of the skill that sits in context all the time. Claude reads it to decide when to load the full playbook below.

description: Designs, writes, and debugs custom Claude Code output styles in .claude/output-styles or ~/.claude/output-styles that change Claude's role, tone, and response format for a whole session, such as terse reviewer, teaching mode, report writer, or non-coding analyst. Covers frontmatter, keep-coding-instructions, the outputStyle setting, built-in styles, and when CLAUDE.md, a skill, or a hook fits better. Use when the user wants every response shaped differently, asks for an output style, or a style is not taking effect.

Try asking

  • Make Claude answer like a terse senior reviewer in this repo: result first, file:line for everything
  • Create a teaching output style for our junior devs that explains the why behind each change
  • I set outputStyle in settings but Claude still talks the same — what's wrong?

Use it when

  • Every response should follow a different voice, length, or layout
  • You want Claude in a non-coding role such as analyst or report writer
  • A team wants a shareable teaching or review persona
  • A custom style is not taking effect or made code changes sloppier

Skip it when

How to check the result

Run the same four prompts under Default and the new style: the format changes, code changes stay equally careful, and failures and in-depth requests still get full answers.

The common mistake it prevents

Omitting keep-coding-instructions on a style used for coding, which silently drops Claude Code's built-in engineering habits such as scoped changes and verification.

~/.claude/skills/output-styles/SKILL.md

--- name: output-styles description: Designs, writes, and debugs custom Claude Code output styles in .claude/output-styles or ~/.claude/output-styles that change Claude's role,… license: MIT ---

A good output style changes how every response reads (voice, length, structure, role) without degrading the engineering work, fits on one screen, and is verified by a short side-by-side test against the Default style. If the requirement is about one kind of task or must never be skipped, it is not an output style.

Pick the right mechanism first

The user wantsUseWhy
Every response shorter, longer, more didactic, in a fixed format, or Claude in another roleOutput styleSession-wide, switchable with one command
Claude to know build commands, conventions, architectureCLAUDE.md (see memory-file-architect)Knowledge, loaded regardless of style
A procedure for one kind of task (release, review, migration)Skill (see skill-authoring)Loads only when relevant
Something enforced every time (format after edit, block a command)Hook (see hooks-automation)The harness runs it; styles are only instructions
A helper with its own tools and modelSubagent (see subagent-design)Styles do not apply to non-fork subagents
Extra instructions for one scripted run--append-system-prompt / --append-system-prompt-filePer-invocation, no file to manage

Check the built-ins before writing anything: Proactive (acts on routine decisions without asking), Concise (result first, no narration or recap), Explanatory (adds short Insight blocks explaining choices), Learning (Insights plus TODO(human) handoffs for the user to write code). If one of these is 80% of the ask, recommend it and stop.

How styles work (the parts that matter)

  • A style’s text is sent with every request in the main conversation and in forks. Regular subagents run their own system prompt and ignore the style.
  • Custom styles drop Claude Code’s built-in software-engineering instructions (scoping changes, comments, verification habits) unless the frontmatter sets keep-coding-instructions: true. Set it whenever Claude will still edit code.
  • Style files are read at startup. After creating or editing one, restart Claude Code; switching between already-loaded styles applies from the next message.
  • The outputStyle settings value is case-sensitive and must equal the style name exactly. A mismatch silently gives Default. The /output-style command ignores case.
  • Selecting a style via /output-style or /config writes outputStyle to .claude/settings.local.json. For a personal default everywhere, set it in ~/.claude/settings.json; project settings override that.
  • A style adds input tokens to every request (cached after the first). Long styles are a recurring cost; keep them under ~60 lines.

File locations and frontmatter

ScopePathNotes
User~/.claude/output-styles/<file>.mdAvailable in every project
Project.claude/output-styles/<file>.mdCommit to share; nested .claude/output-styles/ dirs between cwd and repo root also load, closest wins on name clash
Plugin<plugin>/output-styles/<file>.mdforce-for-plugin: true applies it automatically when the plugin is enabled
---
name: Terse Reviewer
description: Findings-first code review voice, no preamble
keep-coding-instructions: true
---

<instructions>

All keys are optional. name defaults to the file name. Misspelled keys are ignored without an error; if the YAML fails to parse, the style loads with no fields set (run claude --debug to see the parse error).

Workflow

- [ ] 1. Write the requirement as observable behavior ("first line states the result")
- [ ] 2. Check whether a built-in style already covers it
- [ ] 3. Decide keep-coding-instructions (true unless Claude stops doing engineering)
- [ ] 4. Draft the style: role, format rules, exceptions, examples
- [ ] 5. Save at the right scope; restart Claude Code
- [ ] 6. Switch with /output-style <name> and run the 4-prompt test
- [ ] 7. Trim anything that did not change behavior; commit project styles

Step 1 — observable rules, not adjectives

“Be concise” changes little. Rules Claude can follow and you can check:

VagueObservable
Be conciseFirst sentence states what changed or the answer. No recap paragraph. Simple questions get 1–3 sentences
Be educationalAfter each non-trivial change, add one “Why” bullet naming the trade-off
Professional reportsEvery response that analyzes something ends with a Findings / Evidence / Next step table
Act like a data analystShow the query, the result table, then one paragraph of interpretation with caveats

Step 4 — structure of a style body

Write it in this order; each section is a few bullets:

  1. Role — one sentence: who Claude is in this mode and for whom.
  2. Response shape — the default layout (lead line, sections, tables, length caps).
  3. Always — 3–6 hard habits (cite file:line, show commands run, state assumptions).
  4. Never — 2–4 things to suppress (narrating tool calls, restating the question).
  5. Exceptions — when to break the shape: the user asks for detail, errors, security warnings, destructive-action confirmations. Without this, terse styles hide failures.
  6. One short example of a correctly shaped response. Examples steer harder than rules; keep it under 15 lines so it is not copied verbatim.

Ready-made bodies (terse reviewer, teaching mode, incident scribe, non-coding analyst, stakeholder report writer) are in references/style-templates.md. Read it when drafting, then adapt rather than paste.

Step 6 — the 4-prompt test

Run the same four prompts in Default and in the new style (fresh session each, or /clear between):

  1. A one-line factual question about the repo (“what test runner is this?”).
  2. A small code change (“add input validation to <function>”).
  3. A failing command (ask it to run a test you know fails).
  4. A request that must override the style (“explain this module in depth”).

Pass criteria: prompts 1–2 follow the new shape; prompt 3 still shows the full error and what was tried; prompt 4 expands; the code change in prompt 2 is as careful as in Default (tests run, scope kept). If prompt 2 regressed, keep-coding-instructions is probably missing.

For scripted checks, select the style per run with --settings so nothing is persisted:

claude -p --settings '{"outputStyle":"Terse Reviewer"}' "what test runner does this repo use?"
claude -p --settings '{"outputStyle":"default"}'        "what test runner does this repo use?"

Gotchas

  • Writing project conventions into a style. They vanish when someone switches styles; they belong in CLAUDE.md.
  • Expecting a style to guarantee format for machine consumption. For parseable output in scripts use claude -p --output-format json or --json-schema, not a style.
  • Styles that forbid explanation entirely make Claude omit test failures and risks. Always keep the Exceptions section.
  • A team style committed to .claude/output-styles/ does nothing until each person selects it, unless the project .claude/settings.json sets outputStyle. Setting it at project level forces it on everyone; prefer leaving the choice to each developer.
  • force-for-plugin overrides the user’s own choice. Use only for plugins whose whole purpose is the style.
  • Do not name a custom style like a built-in (Concise); the picker becomes ambiguous.

Verification

  1. /output-style (no argument) lists the style and marks it current.
  2. The 4-prompt test passes, with the Default comparison noted.
  3. /context shows the style’s token cost is modest (aim for under ~1.5k tokens).
  4. If it does not apply: confirm the exact name, restart after edits, check for a project outputStyle overriding the user one, and run claude --debug for YAML errors.

Output

**Style:** Terse Reviewer (`.claude/output-styles/terse-reviewer.md`, committed)
**keep-coding-instructions:** true (Claude still edits code in this mode)
**Selected via:** `/output-style Terse Reviewer` (per developer, not forced in project settings)
**Test (Default vs style):** factual Q 4 lines -> 1; code change identical diff, tests run in both;
failing test output shown in full; "explain in depth" expanded correctly
**Not in the style (moved):** test commands -> CLAUDE.md; "always run prettier" -> PostToolUse hook

Bundled files

Loaded only when a step in the skill needs them. Review them here before installing.

references/style-templates.md 122 lines · 4.0 KB
# Output style templates

Starting points. Each is short on purpose; add only rules that changed behavior in the
4-prompt test. Replace bracketed parts.

## Terse reviewer (keeps coding)

```markdown
---
name: Terse Reviewer
description: Findings first, no preamble, file:line for every claim
keep-coding-instructions: true
---

You are a senior reviewer pairing with an experienced engineer who reads diffs, not prose.

## Response shape
- First line: the outcome ("Fixed: ...", "3 issues found", "No change needed: ...").
- Then at most 5 bullets. Each bullet cites `path:line`.
- Code changes: show the diff summary, then the command you ran to verify and its result.

## Always
- State assumptions you made in one line prefixed `Assumed:`.
- Name the test or command that proves the change.

## Never
- Restate the request, narrate tool calls, or end with a recap or offer of more help.

## Exceptions
Write at full length when the user asks for explanation, when a command fails (show the
error and what you tried), for security risks, and before any destructive action.
```

## Teaching mode for juniors (keeps coding)

```markdown
---
name: Mentor
description: Explains the why behind each change at a junior-engineer level
keep-coding-instructions: true
---

You are a patient senior engineer teaching while you work. The user is learning this
codebase and the language.

## Response shape
- Do the task fully. After each meaningful change add a `Why:` bullet: the concept, the
  alternative you rejected, and the trade-off, in plain words.
- When you use a language feature or library API the user may not know, name it and link
  the official doc page by name (not a guessed URL).
- End with one `Try it:` suggestion: a small exercise or command that reinforces the idea.

## Never
- Hand-wave ("this is best practice"). Say what breaks without it.
- Lecture before doing; explanation follows the work.
```

## Incident scribe (keeps coding)

```markdown
---
name: Incident Scribe
description: Timestamped, evidence-first notes during live debugging
keep-coding-instructions: true
---

You are assisting during a live incident. Every response is a log entry someone will
paste into the incident channel.

## Response shape
- `HH:MM` (local time from `date`) then one line: what was checked or changed.
- `Evidence:` the command and the 1–5 lines of output that matter.
- `Status:` mitigated / investigating / blocked, and `Next:` one action.

## Hard rules
- Never run a mutating command against production without the user typing "confirm".
- Distinguish facts (seen in output) from hypotheses (prefix `Hypothesis:`).
```

## Non-coding analyst (drops coding instructions)

```markdown
---
name: Data Analyst
description: SQL and spreadsheet analysis with stated caveats
---

You are a careful data analyst working with the files and databases in this directory.
You do not refactor or write application code.

## Response shape
1. Question restated as a measurable definition (metric, population, time window).
2. The query or formula used, in a code block.
3. Result table (max 15 rows; say how many were omitted).
4. Interpretation: one paragraph, then `Caveats:` bullets (sample size, missing data,
   definitions that could change the answer).

## Always
- Check row counts and nulls before aggregating and report them.
- Use exact numbers from output; never estimate a figure you did not compute.
```

## Stakeholder report writer (drops coding instructions)

```markdown
---
name: Exec Brief
description: Decision-ready summaries for non-technical readers
---

You write for busy non-technical decision makers.

## Response shape
- Line 1: the recommendation or answer in under 20 words.
- `Why it matters:` 2–3 bullets in business terms (cost, risk, time, users).
- `Options:` a table with Option / Cost / Risk / Time when there is a choice.
- `Ask:` the decision or input needed, with a date if relevant.

## Never
- Jargon without a plain-words gloss; acronyms without expansion on first use.
- More than 200 words unless asked.
```

About this skill

Written and maintained by the Claude Skills editors to the same editorial standard as every skill in the directory: a selective trigger, a real workflow, known pitfalls and a verification step. First published , last updated . MIT licensed.

esc