Output Styles
An output style changes the role, tone, and format of Claude's answers in a session.
You pick one with /output-style. It applies from the next message.
An output style is an instruction, so nothing enforces it.
For project facts, use Memory and Rules. For actions that must always happen, use hooks.
Example
---
name: Terse Reviewer
description: Short code review notes
keep-coding-instructions: true
---
Review the change. List problems as short bullets, worst first.
Skip praise and recaps.
{ "outputStyle": "Terse Reviewer" }
Restart claude so it finds the new file. Then Claude answers as a terse reviewer and still keeps its coding instructions.
Built-In Styles
Each non-default style keeps the standard coding instructions and adds its own.
Source: the program sets keepCodingInstructions: true and source: "built-in" for the four styles.
Official page: Output Styles.
The captured prompts are on these pages: Proactive, Concise, Explanatory, and Learning.
| Item | Status | What it does | How it works | Where to set it |
|---|---|---|---|---|
default | Documented: An official docs page names this item. | No style instructions | The standard system prompt for software engineering. It shows in the / list | All sessions |
Proactive | Documented: An official docs page names this item. | Starts work at once and assumes on routine choices | Claude does not use plan mode unless you ask. It checks in the chat before it deletes data or changes shared systems. It does not change the permission mode | All sessions |
Concise | Documented: An official docs page names this item. | Leads with the result, no preamble, narration, or recap | Simple answers take one to three sentences. Full length stays for requested detail and safety content. Needs 2.. The bundle gives it a turn | All sessions |
Explanatory | Documented: An official docs page names this item. | Adds Insight blocks | Each block has two or three points. Claude does not write them into files | All sessions |
Learning | Documented: An official docs page names this item. | Adds Insight blocks and TODO(human) tasks | Claude asks you to write 2 to 10 lines when it generates 20 or more lines with a design choice. It then stops and waits | All sessions |
The outputStyle Setting and Switching
| Item | Status | What it does | How it works | Where to set it |
|---|---|---|---|---|
output | Documented: An official docs page names this item. | Names the active style | The value is case-sensitive. Explanatory works. explanatory gives Default. No value means Default. A project file wins over user settings | Any settings scope |
/ | Documented: An official docs page names this item. | Switches the style | Saves to .. No argument lists the styles. Ignores case. Works in print mode and the SDK. Needs 2. for remote lists | Interactive, print |
/ Output style | Documented: An official docs page names this item. | Menu picker | Saves to local settings | Terminal |
| Switch in a session | Documented: An official docs page names this item. | New style applies from the next message | Before 2. it needed /. Prompt caching costs the first message | All sessions |
| Custom style over Remote Control | Undocumented: Only the program shows this item. It can change without notice. | You cannot select it | The bundle text tells you to pick one in the session itself | Remote Control |
CLAUDE_ | Documented: An official docs page names this item. | Chooses the full or short system prompt | 0 selects the full prompt. keep- has no effect on the short prompt | Env |
| Safe mode | Documented: An official docs page names this item. | Styles do not load | CLAUDE_ skips output styles | Env |
Locations and Precedence
| Item | Status | What it does | How it works | Where to set it |
|---|---|---|---|---|
~/. | Documented: An official docs page names this item. | User styles | The file name is the style name unless you set name | User |
. | Documented: An official docs page names this item. | Project styles | Every such directory between the working directory and the repository root loads. The closest one wins for a name | Project |
Managed . | Documented: An official docs page names this item. | Policy styles | The styles are inside the managed settings directory | Managed |
Plugin output- | Documented: An official docs page names this item. | Plugin styles | See Plugins | Plugin |
output, output | Undocumented: Only the program shows this item. It can change without notice. | Manifest key for style files or directories | When set, Claude Code does not auto-load the output- directory | Plugin manifest |
| Merge order | Undocumented: Only the program shows this item. It can change without notice. | For the same name the later source wins | The order is built-in, plugin, user, project, then policy. Plugin style names start with the plugin name and a colon, so they do not clash with the others. With safe mode on, only the built-ins load | All |
| File reading | Documented: An official docs page names this item. | Styles load when Claude Code starts | A new file needs a restart in the terminal | Terminal |
Frontmatter Keys
All keys are optional. Claude Code ignores a misspelled key. Bad YAML loads the style under its file name with no fields.
| Item | Status | What it does | How it works | Where to set it |
|---|---|---|---|---|
name | Documented: An official docs page names this item. | Style name in the picker | The default is the file name | Style file |
description | Documented: An official docs page names this item. | Text in the picker | String | Style file |
keep- | Documented: An official docs page names this item. | Keeps the built-in software engineering section | The default is false. It works only on the full system prompt | Style file |
force- | Documented: An official docs page names this item. | Applies the style when you enable the plugin | It overrides output. The first loaded plugin wins. A warning names the others. On a non-plugin style, Claude Code ignores the key and shows a warning | Plugin styles |
Captured prompts for custom styles: Custom Style, Custom Style on the Full Prompt, and Custom Style with Keep Coding Instructions.
How It Works
- The active style text goes with every request. Source: the official Output Styles page.
- A style applies to the main thread and to a fork. Other subagents use their own system prompt. Source: the same page.
- The style name shows in the status line field
output_style.name. See Status Line. - The SDK init message can report
outputStyleasnullor as{ name, isKeepingCodingInstructions }. Source: the program stringno { outputStyle } (null, or { name, isKeepingCodingInstructions }).
A probe set outputStyle in user settings and added a plugin style with force-for-plugin: true. The system prompt used the forced style and not the configured one. The init event still showed the setting's name. With several forced styles, the first wins. A warning lists all. In a user style, Claude Code ignores force-for-plugin. A managed outputStyle with its style file in the managed folder won over user, project, local, and --settings values. See Probes and Managed Folder Probe.
The captures linked above hold the full text of each built-in style prompt. We compared them with the strings in the program. The only difference is the blank lines that the capture adds after the style header and between paragraphs.
Exact Fields
The exact fields are in the output-style definition in https://clawdipedia.cc/schemas/claude-code-frontmatter.json. The program's frontmatter validators produce it.
It lists every field of this release. Build on the fields it names. Look each one up there before you rely on it.