Skip to main content

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​

QuestionAnswer
Can you use it?✅ Yes. Run /output-style, or pick one in /config.
Can you change it?✅ Yes. Set outputStyle, or write your own Markdown file.
Can you turn it on or off?Pick default, or remove outputStyle. CLAUDE_CODE_SAFE_MODE=1 skips all styles.
Where does it live?~/.claude/output-styles/, .claude/output-styles/, managed settings, and plugins.
StatusDocumented Undocumented

Example​

.claude/output-styles/terse-reviewer.md
---
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.
.claude/settings.json
{ "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.

ItemStatusWhat it doesHow it worksWhere to set it
defaultDocumentedNo style instructionsThe standard system prompt for software engineering. It shows in the /output-style listAll sessions
ProactiveDocumentedStarts work at once and assumes on routine choicesNo plan mode unless asked. It checks in the chat before it deletes data or changes shared systems. It does not change the permission modeAll sessions
ConciseDocumentedLeads with the result, no preamble, narration, or recapSimple answers take one to three sentences. Full length stays for requested detail and safety content. Needs 2.1.237. The bundle gives it a turnReminderAll sessions
ExplanatoryDocumentedAdds Insight blocksTwo or three points per block, not written into filesAll sessions
LearningDocumentedInsight blocks plus TODO(human) tasksClaude asks you to write 2 to 10 lines when it generates 20 or more lines with a design choice. It then stops and waitsAll sessions

The outputStyle Setting and Switching​

ItemStatusWhat it doesHow it worksWhere to set it
outputStyleDocumentedNames the active styleThe value is case-sensitive: Explanatory works and explanatory gives Default. No value means Default. A project file wins over user settingsAny settings scope
/output-style <style>DocumentedSwitches the styleSaves to .claude/settings.local.json. No argument lists the styles. Ignores case. Works in print mode and the SDK. Needs 2.1.269 for remote listsInteractive, print
/config Output styleDocumentedMenu pickerSaves to local settingsTerminal
Switch in a sessionDocumentedNew style applies from the next messageBefore 2.1.251 it needed /clear. Prompt caching costs the first messageAll sessions
Custom style over Remote ControlUndocumentedNot selectableThe bundle text says to pick one in the session itselfRemote Control
CLAUDE_CODE_SIMPLE_SYSTEM_PROMPTDocumentedChooses the full or short system prompt0 selects the full prompt. keep-coding-instructions has no effect on the short promptEnv
Safe modeDocumentedStyles do not loadCLAUDE_CODE_SAFE_MODE=1 skips output stylesEnv

Locations and Precedence​

ItemStatusWhat it doesHow it worksWhere to set it
~/.claude/output-styles/*.mdDocumentedUser stylesThe file name is the style name unless name is setUser
.claude/output-styles/*.mdDocumentedProject stylesEvery such directory between the working directory and the repository root loads. The closest one wins for a nameProject
Managed .claude/output-stylesDocumentedPolicy stylesInside the managed settings directoryManaged
Plugin output-styles/DocumentedPlugin stylesSee PluginsPlugin
outputStylesPath, outputStylesPathsUndocumentedManifest key for style files or directoriesWhen set, the output-styles/ directory is not auto-loadedPlugin manifest
Merge orderUndocumentedFor the same name the later source winsThe order in the bundle is built-in, one more list (inferred: plugin styles), user, project, then policyAll
File readingDocumentedStyles load when Claude Code startsA new file needs a restart in the terminalTerminal

Frontmatter Keys​

All keys are optional. A misspelled key is ignored. Bad YAML loads the style under its file name with no fields.

ItemStatusWhat it doesHow it worksWhere to set it
nameDocumentedStyle name in the pickerDefault is the file nameStyle file
descriptionDocumentedText in the pickerStringStyle file
keep-coding-instructionsDocumentedKeeps the built-in software engineering sectionDefault false. Works only on the full system promptStyle file
force-for-pluginDocumentedApplies the style when the plugin is enabledOverrides outputStyle. The first loaded plugin wins and a warning names the others. On a non-plugin style the key is ignored with a warningPlugin 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 outputStyle as null or as { name, isKeepingCodingInstructions }. Source: the program string no { outputStyle } (null, or { name, isKeepingCodingInstructions }).
Not Verified

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.