Output Styles

Output Styles

Part 3 — Teaching Claude New Tricks Chapter 1 of 4
Listen to this article
Read aloud in your browser

Overview

This chapter covers:

  • The one thing output styles change that no other mechanism touches — the system prompt itself
  • The five built-in styles, including two added recently that most material misses
  • Why keep-coding-instructions is the field that actually matters, and what happens when you omit it
  • Where a style file lives, and which of the five scopes wins
  • The comparison that stops you reaching for the wrong mechanism

They change how Claude responds, not what it knows

Every mechanism so far has added context. CLAUDE.md arrives as a user message after the system prompt. Rules arrive when a file matches. Skills arrive when invoked.

An output style modifies the system prompt. That is the whole distinction, and everything else follows from it.

Reach for one when you keep re-prompting for the same voice or format every turn, or when you want Claude to act as something other than a software engineer. For facts about your project, CLAUDE.md is still the answer.

The five built-ins

StyleBehaviour
DefaultThe standard software-engineering system prompt
ProactiveExecutes immediately, makes reasonable assumptions instead of pausing on routine decisions, prefers action over planning
ConciseLeads with the result, skips preamble and narration, keeps responses short — while doing the same engineering work
ExplanatoryAdds educational “Insights” about implementation choices and codebase patterns
LearningAsks you to write strategic pieces, leaving TODO(human) markers in the code

Two are worth a sentence each.

Proactive is not auto mode. It is stronger autonomous-execution guidance than auto mode applies, and it works without changing your permission mode — so what actually runs without asking you is still Chapter 3’s business. Use it when you want Claude to stop asking clarifying questions in a mode that still prompts.

Concise (v2.1.237+) keeps the important things long. It shortens by default but preserves the full content of error reports, security warnings, and confirmations for destructive actions. And asking for detail still gets you detail.

The standalone /output-style command was deprecated in v2.1.73 and removed in v2.1.91. Older material still recommends it. Use /configOutput style, or set the outputStyle key.

/config writes your choice to .claude/settings.local.json — project-local, not user-level, which surprises people expecting a personal preference to follow them between repositories.

Writing your own

A custom style is a Markdown file: frontmatter, then the instructions to add to the system prompt.

FieldPurposeDefault
nameThe style’s nameThe file name
descriptionShown in the /config pickerNone
keep-coding-instructionsKeep the built-in software-engineering instructionsfalse
force-for-pluginPlugin styles only: apply automatically while the plugin is enabledfalse

The field that matters

keep-coding-instructions defaults to false, and that default is the single most consequential thing on this page.

Leave it out and your style replaces Claude Code’s built-in engineering instructions — how to scope a change, when to write comments, how to verify work. That is correct for a writing assistant or a data analyst. It is quietly wrong for “answer with a diagram first”, where you wanted a formatting change and instead removed the instructions that make Claude a competent engineer.

The test: is Claude still doing software engineering? Then set it to true.

Build one

Where the file goes

ScopePath
User~/.claude/output-styles/
Project.claude/output-styles/
Managed policy.claude/output-styles/ inside the managed settings directory

Project styles load from every .claude/output-styles/ between your working directory and the repository root. Two of them defining the same name is resolved by proximity: the one closest to your working directory wins. Plugins can ship styles too, in an output-styles/ directory.

When it takes effect

Output style is part of the system prompt, and Chapter 8 established what that means: Claude Code reads it once at session start. Changing it mid-session does nothing until /clear or a restart — and, for the same reason, the change is cache-safe.

Two more scope limits worth knowing:

  • Subagents ignore your output style. A subagent runs its own system prompt. The exception is a fork, which inherits the parent’s system prompt wholesale.
  • Token cost cuts both ways. The added instructions raise input tokens, largely absorbed by the cache after the first request. Output tokens are the real variable: Explanatory and Learning produce longer responses by design, Concise shorter ones.

Which mechanism, again

Five things now customise Claude’s behaviour, and the failure mode is reaching for the wrong one. Chapter 6’s router asked where an instruction belongs; this is the layer above it:

MechanismHow it worksUse when
Output styleModifies the system promptYou want a different role, tone or default format every turn
CLAUDE.mdA user message after the system promptClaude should know your conventions and codebase
--append-system-promptAppends to the system prompt, removing nothingA one-off addition for a single invocation
SubagentsA separate system prompt, model and toolsA separately scoped helper for a focused task
SkillsTask instructions loaded on invocationA reusable workflow

The row that most often gets mistaken for an output style is --append-system-prompt: it reaches the same place, but adds without removing, and must be passed every invocation. That makes it right for scripts and wrong for daily use — where a style file you select once is the same idea, persisted.

Summary

  • An output style modifies the system prompt. Every other mechanism adds context around it.
  • Five built-ins: Default, Proactive, Concise (v2.1.237+), Explanatory, Learning.
  • Proactive is stronger than auto mode’s nudge and does not change your permission mode.
  • keep-coding-instructions defaults to false, so a custom style silently drops the built-in engineering instructions unless you set it. Set it whenever Claude is still writing code.
  • /output-style was removed in v2.1.91 — use /config or the outputStyle key, which /config writes to .claude/settings.local.json.
  • Project styles resolve by proximity to the working directory, not by depth in the tree.
  • The style is read once at session start; changes need /clear. Subagents do not inherit it, forks do.
  • Full reference: output styles.

Chapter 11 is Skills — the extension point that carries the most weight in practice, and the one built entirely around not being in context until it is needed.