[FEATURE] Please don't remove Output-Styles!

Resolved 💬 28 comments Opened Oct 31, 2025 by kylesnowschwartz Closed Nov 2, 2025
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

## Feature Request: Retain Output Styles Alongside Plugin System

### Summary
Deprecating output styles in favor of plugins is a significant regression in UX. The plugin-based approach introduces unnecessary complexity and friction for a feature that currently works well.

### Why Output Styles Should Stay

Simplicity & Usability:

  • Easy swapping: Output styles allow instant persona switching without difficult configuration
  • Zero setup: Work out of the box, no hooks to configure or debug
  • Easily shareable: Simple text files anyone can use immediately
  • Easy shut off: Easy to use the default - hooks by comparison require changing your configuration JSON files

Technical Superiority:

Plugin System Problems:

  • Difficult to swap: Changing hooks requires more steps than changing a setting
  • High configuration overhead: Unnecessary complexity for simple persona changes
  • Buggy implementation: Exit code 2 broken for plugin hooks (see #10412)
  • Poor documentation: Users struggling to understand hook system is common for complex use cases

Proposed Solution

Proposal

Keep output styles as first-class citizens. Plugins are fine for extending functionality, but they're overkill for simple persona/style preferences. Don't force users into a complex system for something that currently just works.

The fun factor matters too - people enjoy customizing their Claude's personality. Making that harder serves no one. Certainly not me!

Thanks for your time.

Alternative Solutions

_No response_

Priority

High - Significant impact on productivity

Feature Category

Configuration and settings

Use Case Example

_No response_

Additional Context

_No response_

View original on GitHub ↗

28 Comments

septrcode · 8 months ago

literally this i just made my own issue about this it is a good feature they didnt need to "fix"

karashiiro · 8 months ago

Output styles are also trivially portable, unlike hooks (#10675)

kylesnowschwartz · 8 months ago

Rather than the session start hook that Anthropic is suggesting we use, an alternative could be some kind of --append-system-prompt tool that loads the configured output style? I would hate to replace a good, working feature with a janky 3rd-party add-on though. I also don't like the idea of having 'conflicting' styles within the system prompt. Which one wins?!

kylesnowschwartz · 8 months ago

I have an output style that instructs Claud to output in structured HTML using details from the HTML specification. It's amazing. You can basically _stream_ html responses. This also works for YAML, HTML, etc. Output styles are NOT just funny little instructions for claude to pretend to be a pirate.

On the left is the result of a question asked about kitty terminal with the output style on. On the right is what the output looks like if I use the --append-system-prompt cli flag, e.g. claude --append-system-prompt "$(command cat ~/.claude/output-styles/html-structured.md)"

The difference is plain. Save output-styles.

<img width="1920" height="1056" alt="Image" src="https://github.com/user-attachments/assets/cd8e76aa-b03f-4ac1-846d-8fba6bdf6fa2" />

Nek-12 · 8 months ago

I'm using output styles to replace system prompt about coding with some other tasks (business-related). They are crucial to my workflow. I was able to achieve a lot because of the changed system prompts. If you do not undeprecate output styles or add any ability to replace claude's system prompt completely for the main agent, I'm leaving immediately as soon as my business, DevOps and sysadmin styles stop working.

Based on the documentation, plugins do not replace the system prompt, they append to the user prompt. And I cannot possibly use subagents every single time I submit my prompt, it's ridiculous. I used output styles because they REMOVED instruction about coding from the system prompt. What anthropic did with hooks is NOT the same as output styles.

Remove plugins instead - they are gimmicks.

kylesnowschwartz · 8 months ago

I've performed more testing using https://github.com/badlogic/cchistory to trace how the system prompt changes with and without output styles, and also how the --system-prompt and --system-prompt-file flags (both pretty much undocumented, but real) change the prompt.

The truth is - output-styles is a minimal change to the overall prompt. Some prompting about tone is removed, and your output style is just added in. It should be easy to make a tool to replace output-styles if they remove the feature.

To be continued.

Nek-12 · 8 months ago

@kylesnowschwartz Can you provide more info on the differences please, maybe post raww diffs/files?

I want to know which workaround to choose for my workflows now. Would be grateful to you for that

kylesnowschwartz · 8 months ago

@Nek-12 As a workaround for now the easiest thing to do is start claude like so: claude --system-prompt-file <path_to_output_style.md>

milobird · 8 months ago

I agree with the above: a session start hook is a clunky alternative to output styles, and adherence won't be as good.

ww2283 · 8 months ago

they already dropped support for output-style from their end: in 2.0.28 my output-style is no longer effective as of Oct31, 2025. They said in their official doc that the drop will be on Nov 5th.

milobird · 8 months ago

@ww2283 I'm not seeing the same, my output style is still working in 2.0.30 (there's a prominent notice about the deprecation when starting the session, but the output style is being loaded, for now).

ww2283 · 8 months ago

@milobird good to know; perhaps they are gradually rolling out. my custom style is very "stylish" so the non-effectiveness is instant and very obvious during daily use.

arathald · 8 months ago

This is a substantial breaking change. If nothing else, the removal timeline should be extended to give developers and teams time to find alternatives.

We make heavy use of output styles for certain workflows. This gives us an important level of instruction: more specific than CLAUDE.md, but not as task specific as slash commands. For example, we use prompt-engineer and technical-pm styles across a number of different commands.

  • SessionStart hooks don't replace this easily because we use multiple styles in the same package, often in the same session.
  • CLAUDE.md has the same problem that its instructions always apply, so it's not suitable for changing Claude's behavior across different task types.
  • Subagents don't replace output styles becuase they're not interactive (we can't use them to iterate on prompts, for example).
  • Slash commands might be able to replace our use of output styles, but would require us to replicate a lot of the same content across slash commands.
  • Skills might be able to replace out use of output styles, but these are less directly controllable.

Overall, there might be some viable alternatives for us, but I'm really not excited about having less than a week to change our workflows. This feels like a wholly unnecessary scramble.

skyphyr · 8 months ago

Just another upvote for maintaining output-styles. The alternatives don't seem to properly capture the capabilities, let alone user friendliness.

neonplants · 8 months ago

There is no token-efficient way to replace this on a per-agent basis. DO NOT remove output styles, please! Save output styles! I use these with every project, it is fundamental to my method of working!

rxreyn3 · 8 months ago

Learning output style has been the best across the variations of Gemini and ChatGPT, I came back to Claude almost exclusively because of this and how much the vs code extension has improved my experience.

WesleyMFrederick · 8 months ago

Agree. Don't remove

bcherny collaborator · 8 months ago

👋 Boris from the Claude Code team here.

Output styles are now more powerful, and easier to customize. You can add the same instructions you previously put in your output style to your CLAUDE.md, or use hooks to inject them at each turn, or use --system-prompt, --append-system-prompt, or --append-system-prompt-file to append to or fully swap out the system prompt.

Roughly, in order from weakest prompting to strongest prompting:

  1. Append instructions to the system prompt with --append-system-prompt or --append-system-prompt-file
  2. Add instructions to your CLAUDE.md
  3. Inject instructions with a SessionStart hook
  4. Swap out the system prompt with --system-prompt
  5. Inject instructions before every turn with a UserPromptSubmit hook, or after every turn with a Stop hook

For most use cases 1 or 2 are sufficient, but if you want really strong adherence, 3-5 will give even better results.

For people that previously used the Learning output style, run:

/plugin marketplace add anthropics/claude-code
/plugin install learning-output-style@anthropics/claude-code

And for Explanatory output style, run:

/plugin marketplace add anthropics/claude-code
/plugin install explanatory-output-style@anthropics/claude-code

We want to keep Claude Code simple, and are always thinking about how we can generalize features to make them both simpler and more extensible for people using Claude Code.

Please keep the feedback coming!

kylesnowschwartz · 8 months ago

@bcherny I thank you sincerely for your direct response. As you noted, adherence is the real issue. My testing found much better adherence using the existing output-style feature compared with --append-system-prompt.

Using the --system-prompt-file to replace the system prompt entirely works far better. My concern there is that we lose some additional instructions that your team includes in the system prompt that help make Claude-Code go.

Currently, my theoretical work-around is to inject my output style in a facsimile of the current system-prompt, similar to how output styles work now. But, your system prompts are not open-sourced, leading me to have to get it sneakily through 3rd-party tooling.

Consider publishing a document that shows Claude-Code's current system prompt - including the dynamically injected environment and datetime sections - for users to tweak more easily.

Thanks again for creating my favorite engineering tool.

bcherny collaborator · 8 months ago

I'm hearing two things from folks:

  1. It's not obvious which mechanism to use (CLAUDE.md, hooks, etc.) to match the performance of output styles
  2. It's useful to toggle styles mid-session, which isn't easy to do with hooks etc.

Going to brainstorm with the team and get back to this thread with how we can make these even better than before.

milobird · 8 months ago

@bcherny I’m using an output style to give assistant-specific instructions which are needed for the whole multi-agent system we’ve built to function smoothly, eg. instructions for creating dialogue files and how to use them to engage with sub-agents and even other instances of Claude Code. The output style is configured in project settings, so it functions as default behavior for all developers using the repo.

Moving the instructions to CLAUDE.md isn’t viable because CLAUDE.md is also loaded into the context window of sub-agents, and the instructions contain details about using sub-agents and interacting with the developer directly which are not relevant to sub-agents.

—system-prompt or —append-system-prompt would probably do the job, but I don’t want I have to tell everyone on my team that they have to launch Claude Code with this special argument or else our setup will be broken! We have designers using CC with our repo too and it was hard enough to get them to use the terminal even just to type claude…!

We’re already using the session start hook to drop some structured environment data into the session, I could put the instructions into a field there but it seems like they’d be rather “buried” in comparison to appearing in the system prompt, and it feels like I’m working around an odd gap in the system. Adherence is unlikely to be as good — if only because the instructions will appear much later in the context window (after the tool descriptions, which are quite heavy).

All this said, I have no objections to the killing of output styles as long as there’s some other way to modify or replace the assistant’s system prompt via project settings (not only CLI arguments) — though I understand others feeling differently if they want to be able to switch between styles on the fly.

ww2283 · 8 months ago
I'm hearing two things from folks: 1. It's not obvious which mechanism to use (CLAUDE.md, hooks, etc.) to match the performance of output styles 2. It's useful to toggle styles mid-session, which isn't easy to do with hooks etc. Going to brainstorm with the team and get back to this thread with how we can make these even better than before.

@bcherny I would like to elaborate around point 1 here. The accurate description should be "there currently is a not a way (CLAUDE.md, hooks, etc.) to match the performance of output styles".

Output styles carries two properties that are invaluable: it is persistent across sessions, and is easily triggered with instant effect. The five candidate substituents you mentioned either is not as persistent, or is not as easily triggerable. It's not a direct append nor a direct complete swap, but rather a "masked" plugged-in method to existing system prompt, if my understanding is correct.

In short, if a new method has to substitute the current output-style, then please fulfill the current two aspects it now currently carries.

On a side note: from the current system prompt posted elsewhere, it seems that it relies heavily on examples and counter-example pairs. My observation when I build agents or skills with CC is that I believe this pattern is true and a default behavior by CC, that it wants to write examples and counter-example pairs. The result is very bloated body for agents, skills, commands etc that the bloats in effect will hamper the performance of these tools in use. Removing these example/counter-example pairs will dramatically increase the performance of the tools. I suggest re-consider the system prompt on this aspect.

dicksontsai collaborator · 8 months ago

Hi all, thank you for your input. I was the one responsible for executing both the initial launch and the deprecation of output styles. I recognize that the deprecation process has landed poorly. I apologize for the churn that this has caused.

After reviewing the suggestions that we had initially proposed against your feedback, the CC team has decided to keep output styles working indefinitely (previously announced as removed on 2025/11/05 or later), at least until we are confident that we can offer you strictly better alternatives. We do believe that with the proliferation of prompting options like CLI/SDK flags (--system-prompt-file, --append-system-prompt, --system-prompt); CLAUDE.md; and hooks (SessionStart, UserPromptSubmit, Stop), there must some path toward simplifying the extension points we offer.

I want to highlight the following about output styles:

  • We have not actually changed anything about output styles this week -- we have only changed the in-app copy and removed /output-styles:new.
  • Output styles not only edit the system prompt, they also trigger reminders for Claude to adhere to the output style described in the prompt. A UserPromptSubmit hook to remind Claude about instructions can achieve something similar.

We will update the docs and in-app copy to reflect this decision.

neonplants · 8 months ago

Thanks so much for listening! If you do go down the path of offering "strictly better alternatives," please engage with the userbase so we have a chance to be heard, and so everyone can be certain that those alternatives _do_ work better for all users and use cases. Thanks for the great product and the work you're all doing at Anthropic.

kylesnowschwartz · 8 months ago

Thanks team for listening to feedback and @dicksontsai's latest update. Agreed that there is certainly a path forward towards simplification of the extension points on offer. I have many opinions on that - but I don't need to offer them here ;)

Closing this issue as resolved.

acidtech · 8 months ago
I've performed more testing using https://github.com/badlogic/cchistory to trace how the system prompt changes with and without output styles, and also how the --system-prompt and --system-prompt-file flags (both pretty much undocumented, but real) change the prompt. The truth is - output-styles is a minimal change to the overall prompt. Some prompting about tone is removed, and your output style is just added in. It should be easy to make a tool to replace output-styles if they remove the feature. To be continued.

You didn't do a very good job of comparing them then. Output styles removes about 3/4s of the original system prompt. Use cctrace to FULL trace of the system prompt. It is NOT trivial IN THE LEAST.

noamtamim · 8 months ago

Hi @dicksontsai - thank you. For what it's worth, I think the issue with Output Styles is the feature's name. It's a library of System Prompts, so the name should make it clear.
System Presets? Personalities?

The Claude Agent SDK has two very similar concepts - SystemPromptPreset and AgentDefinition.

Maybe borrow the terminology from there.

github-actions[bot] · 8 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.