Output Styles
An output style changes the role, tone, and format of Claude's answers in a session.
You pick one with /output-style, and 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.
At a Glance
| Question | Answer |
|---|---|
| Can you use it? | ✅ Yes. Run /, or pick one in /. |
| Can you change it? | ✅ Yes. Set output, or write your own Markdown file. |
| Can you turn it on or off? | Pick default, or remove output. CLAUDE_ skips all styles. |
| Where does it live? | ~/., ., managed settings, and plugins. |
| Status | Documented Undocumented |
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 | No style instructions | The standard system prompt for software engineering. It shows in the / list | All sessions |
Proactive | Documented | Starts work at once and assumes on routine choices | No plan mode unless asked. It checks in the chat before it deletes data or changes shared systems. It does not change the permission mode | All sessions |
Concise | Documented | 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 | Adds Insight blocks | Two or three points per block, not written into files | All sessions |
Learning | Documented | Insight blocks plus 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 | Names the active style | The value is case-sensitive: Explanatory works and explanatory gives Default. No value means Default. A project file wins over user settings | Any settings scope |
/ | Documented | 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 | Menu picker | Saves to local settings | Terminal |
| Switch in a session | Documented | 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 | Not selectable | The bundle text says to pick one in the session itself | Remote Control |
CLAUDE_ | Documented | Chooses the full or short system prompt | 0 selects the full prompt. keep- has no effect on the short prompt | Env |
| Safe mode | Documented | 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 | User styles | The file name is the style name unless name is set | User |
. | Documented | Project styles | Every such directory between the working directory and the repository root loads. The closest one wins for a name | Project |
Managed . | Documented | Policy styles | Inside the managed settings directory | Managed |
Plugin output- | Documented | Plugin styles | See Plugins | Plugin |
output, output | Undocumented | Manifest key for style files or directories | When set, the output- directory is not auto-loaded | Plugin manifest |
| Merge order | Undocumented | For the same name the later source wins | The order in the bundle is built-in, one more list (inferred: plugin styles), user, project, then policy | All |
| File reading | Documented | Styles load when Claude Code starts | A new file needs a restart in the terminal | Terminal |
Frontmatter Keys
All keys are optional. A misspelled key is ignored. 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 | Style name in the picker | Default is the file name | Style file |
description | Documented | Text in the picker | String | Style file |
keep- | Documented | Keeps the built-in software engineering section | Default false. Works only on the full system prompt | Style file |
force- | Documented | Applies the style when the plugin is enabled | Overrides output. The first loaded plugin wins and a warning names the others. On a non-plugin style the key is ignored with 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 }).
The full text of each built-in style prompt (see the captures linked above). How force-for-plugin ranks against an outputStyle set by managed settings.