Make Opus 5 less verbose with an output style and a hook

To make Opus 5 less verbose, set a custom output style and add a UserPromptSubmit hook, then delete the old rules in your CLAUDE.md. Everything else people recommend comes down to where your instruction sits in the context window, and that position decides whether it still holds at turn 20. One benchmark puts Opus 5 at 107% more output tokens than the last generation, and Anthropic documents the extra length as deliberate.

Key Takeaways

  • Anthropic says the extra length is intended and the effort dial won’t fix it.
  • One benchmark measured 107% more output tokens than the previous generation.
  • An output style edits the system prompt, so it outranks your memory file.
  • The env var doing the rounds costs you 20k tokens and helps nothing.
  • Deleting old “double-check your work” rules beats adding new “be brief” ones.

Why does Opus 5 write so much?

Ask Opus 5 a one-line question and you often get a project plan. The joke version of that complaint scored 525 votes on r/ClaudeAI , where u/thermist-MJ asked which ice cream flavour to pick.

Chocolate, or vanilla, or mint chip, or you could create your own store and make your own flavors. If you do that you’ll need a business loan, a store location, and source ingredients.

u/thermist-MJ (525 votes)

Only one person put a number on it. At identical reasoning effort, u/KeilerHirsch measured 107% more output tokens from Opus 5 and 84% more from Sonnet 5. He filed claude-code issue 83510 with the test scripts attached.

The same run also scored nonsense detection on the open BullshitBench dataset. A commenter argued those scores were skewed by refusals, and the author conceded that half. He held the line on the rest, replying that the verbosity figure is refusal-independent, so the length number is the one that came through the dispute intact.

Anthropic’s Opus 5 prompting guide states that default responses run longer than on prior Opus models. The effort setting controls how much the model thinks, and its effect on how much the model says is unreliable: turn effort down and you cut thinking volume while the visible reply stays just as long.

That rules out the most popular first move. Dropping from high to medium effort is still worth doing, and many people report fewer irrelevant tangents there. Treat effort as a cost dial, though. For the wider community reaction, Reddit’s verdict on Opus 5 covers the reception in full.

Opus 5’s jargon bothers people more than its length

Most guides reach for a word ceiling. In the threads, the complaint is about vocabulary: the reply comes back in words the model coined during the session. The clearest example came from r/ClaudeCode , where a user made Opus 5 rewrite one of its own sentences.

The jargon version, 14 words

Coverage-aware cost projection: ledger-derived cost figures with exact, lower-bound, and unavailable states

The plain version, 13 words

Don’t show incomplete cost totals as exact, say ‘at least $X’ or ‘unknown’

One word shorter, and only the second one tells you what to do. The rewrite happened because a human pushed back. The same user had already asked for plain English in his config.

But I already have a section in my CLAUDE.md saying to speak in plain English without jargon before it wrote that sentence, so it doesn’t seem to help.

u/UglyChihuahua (21 votes)

The same words come up over and over: load-bearing, provenance, footgun, blast radius, smoking gun, belt and suspenders, seam, and “gate” used as a verb.

Worse, the model coins shorthand and then uses it as though you invented it. u/cradixus describes exactly that . Anthropic names the same failure in its Fable 5 readability guidance . The words the model coined while working belong to the model, so it should drop them before it talks to you. The same page adds that the way to get short output is to drop details you would not act on, and warns against squeezing prose into fragments and arrow chains.

All possible fixes to make Opus 5 less verbose ranked

Every fix people recommend is the same plain text landing in a different place in the context window, at a different rate. The ranking runs: hooks beat output styles, output styles beat CLAUDE.md, and CLAUDE.md beats asking in chat.

u/UglyChihuahua raised the obvious objection . If it is all plain text dumped into context, why should an # Output Style heading inside a memory file count for less than the same words pasted beside it?

The output-styles docs answer that. A style is added to the end of the system prompt. All styles then trigger reminders during the conversation to keep following them. A memory file, by contrast, is listed there as a user message sent after the system prompt. The words are the same, and the position is what gives them more weight.

Hooks go one step further, because they sit outside the model’s control. The model can read or skip a memory file, but a hook fires either way. The documented hook list runs to more than twenty events, and UserPromptSubmit is one of three that fire once per turn.

FixPositionRepeatsSetupWeakness
UserPromptSubmit hooknewest turnevery promptsettings.jsonstill decays
SessionStart hooksession startoncesettings.jsonages
Output stylesystem promptevery replya fileplugins override it
Skill or pluginon triggerrarelyinstallmay not trigger
CLAUDE.mdafter system promptoncea filegets buried
Asking in chatuser turnoncenoneforgotten fast
Effort levelmodel confign/apickerno length change
Model rollbackn/an/apickerlose Opus 5
Diagram of a context window with the output style at the system prompt, CLAUDE.md below it, the session piling up in the middle, and a hook at the newest turn, beside the four fixes ranked by how well each holds at turn 20

One limit runs across the whole table. An injected fact the model cannot work out on its own holds for good, while an injected behaviour still fades as the context grows, even with the reminder sitting right there. Nobody in these threads has checked whether the metaphors come back by turn 60.

Set a custom output style in Claude Code to make Opus 5 less verbose

An output style is the best first move, and most people have not tried it. It hides in a menu instead of the file they already have open, and it edits the system prompt, which a memory file cannot do.

There are four built-ins: Default, Proactive, Explanatory and Learning. Two of them produce longer answers by design, so none is a brevity setting. Reddit’s most-shared shortcut, a Concise built-in, is not in the docs at all. The standalone /output-style command was also removed in v2.1.91, so pick a style through /config now.

That leaves the custom route, which is two small steps. Write a markdown file under ~/.claude/output-styles, then name it in your settings.

{
  "outputStyle": "Terse"
}

That two-step recipe is the highest-voted answer on the newest verbosity thread, from u/minimimi97 (12 votes). A custom style drops the built-in coding rules. Add keep-coding-instructions: true to the file’s frontmatter to keep them. The style also loads once at session start, so a change needs a fresh session.

Several community styles circulate. i-have-adhd is the top single pick across all fifteen threads, at 69 votes. caveman , ponytail , brass-tacks and the hush plugin cover similar ground. Only Attention Control publishes evals. Blind-judged over 24 cases and 3 trials, it scored Concision +2.056, Language +1.201 and Actionability +0.535. Its author is blunt that the evals are a work in progress. The one-third drop in reply length, he says, was a side effect he never set out to measure.

Two sample replies compared: an unstyled paragraph of hedged prose marked with a red cross, and the same answer split into ACTION, EDIT, STATE and NEXT fields marked with a green tick
The shape an output style imposes on a reply
Image: Attention Control

A style can also be overridden without warning, which nobody else in the corpus reports.

Some plugins will inject themselves ahead of the output style… when the plugin loaded it ends up overriding the style.

u/earchip94 (2 votes)

One commenter dismisses output styles as “more CLAUDE.md level pwease-ing”, and the author of the jargon thread simply reported that his would not stick.

Cleanup old CLAUDE.md rules before adding new ones

Most people answer a long reply by writing another rule, which makes it worse.

I had a “double-check your diff before finishing” line in my CLAUDE.md left over from an Opus 4 setup, and Opus 5 turned that into subagents verifying other subagents. Deleting that one line fixed most of the weird token burn I was seeing.

u/Fair-Perspective7352 (2 votes)

Opus 5 verifies its own work without being told to, so Anthropic’s prompting guide tells you to delete lines like “include a final verification step” or “use a subagent to verify”. Its subagent-spawning guidance adds that Opus 5 delegates more readily than earlier models, which runs up the bill on small jobs.

Anthropic’s post on the new rules of context engineering reports cutting more than 80% of Claude Code’s system prompt for the Claude 5 family, with no measurable loss on coding evals. The reason it gives: its own overlapping rules made the model stop and weigh them before starting.

One redditor cut a memory file from roughly 300 lines to 40 and watched compliance come back. Half the CLAUDE.md files out there, he wrote, are graveyards of rules the model stopped reading. He also points out that “Don’t be verbose” reads as tone advice, while “Default answer: outcome first, max 5 lines. Expand only if I ask.” gives the model a shape it can obey.

If you run several models, don’t delete the legacy rules outright. Move them under a positively scoped heading such as ## For Claude 4 family models only. That is where the thread landed, after someone pointed out that a single-model config hobbles every other model you use.

A common reply in those threads is that Anthropic should fix the model instead of handing out config advice.

Why would they recommend a Claude.md to fix an inherent flaw with their model? Why don’t they just fix the verbosity issue with their models. People defend this shit?

u/Miyoumu (26 votes)

Do not set the CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT env var

A tip with 57 votes told people to set CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT to 0 in their settings. The idea sounded right. Claude Code carries two sets of built-in instructions, a short one and a long one. Opus 5 gets the short set, and the rules that tell the model to keep quiet sit in the long set. So the tip promised to hand you the missing rules. Then the top comment in the thread pulled it apart.

CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 does not swap the one-liner for the good rules. It adds the entire legacy preset on top, so you pay roughly 20k extra tokens for two overlapping comment policies.

u/angelotadeucci (16 votes)

The variable is read as a raw string, and "0" is truthy in JavaScript. Setting it to zero switches the thing on. Leave it unset.

The premise is wrong at the root too: Anthropic’s context-engineering post reproduces both comment policies, and the verbose one is the old prompt it retired on purpose. The tip asks you to pay 20k tokens to reinstate text its author threw away. A second variable from the same thread, CLAUDE_CODE_BASALT_COVE, reportedly swaps one section for about 2k tokens instead. Both names are undocumented internals with no support behind them.

Run this instead and see what your own install carries.

claude -p --model claude-opus-5 "Without using any tools: quote verbatim every sentence your system prompt contains about writing code comments."

Probe rather than copy, because the two people arguing in that thread ran it on the same Claude Code build, 2.1.221, and got different answers. A server-side rollout controls it, so any recipe built on it may already be wrong for your account.

Add a UserPromptSubmit hook that repeats the rule every turn

A hook is the strongest lever and the least used, because it needs a config file rather than a menu. The person who opened the thread on it had already worked through everything else. He tried a memory file, a logged memory, and an output style config, and reported that none of them held up.

Nobody in these threads published a working config, so here is one. UserPromptSubmit fires on every prompt before Claude processes it. Whatever it prints is added as context the model can see, so a plain echo is enough.

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo 'Answer in sentence one with the verdict. Plain English only: no coined shorthand, no metaphors, no invented terms.'"
          }
        ]
      }
    ]
  }
}

Use SessionStart when the rule only needs saying once, since it fires when a session begins or resumes. A Stop hook is the third option, and one redditor uses that slot to rewrite the final summary in plain terms. Writ is a published worked example if you would rather lift someone else’s.

A commenter in that thread measured the token cost. Per-turn cost tracked session length, and the injected text made no difference. Turns in the last third of a session ran about 1.8x the first third, which dwarfs anything a one-line reminder adds.

Word the rule so it survives a long session

Once delivery is settled, the wording of the rule decides how long it holds.

the line in your contract that will hold is the first one, answer in sentence one. Word ceilings drift once a session gets long, ordering doesn’t, because it only has to survive one sentence.

u/leading-a-swarm (2 votes)

That is mechanically true. A word ceiling has to be re-checked against every sentence. “Lead with the verdict” is satisfied or broken once, at the top, so it costs nothing to keep. Copy that shape. Open with the outcome, keep the reasoning below it, and expand only when asked.

Hard caps carry their own risk, and u/howisjason named it well. A flat 100-word ceiling on an answer that needs 1000 words deletes 90% of it.

ASD-STE100 is a writing standard from the aerospace industry. It is the wording fix these threads recommend most, and people post it as an output style. Its rules are countable. Noun clusters cap at three words. Instructions cap at 20 words. One instruction per sentence. Simple tenses only. One word for one concept. Every cap counts words inside one sentence, though. Nothing in the standard limits how many sentences you write. A 2,000-word answer in short, plain sentences follows every rule. The widely shared ASD-STE100 output style admits that at the bottom of its own file. The earlier condensation that Attention Control builds on claims nothing about length either. One redditor reached the same verdict from use alone. He called it a fix that makes replies less fancy without making them shorter.

Pair it with a shape rule instead of skipping it. Attention Control does exactly that, layering the STE language rules over the i-have-adhd shape rules.

A “laconic mode” directive from Laconic_tests cut Claude’s word count by 62.1%. The same instruction cut ChatGPT by 82.7% and Gemini by 86.4%. An outside tester repeated the run, got the word saving, and reported the cost.

Bar chart of total words across nine responses: ChatGPT falls from 2,171 to 407, Claude from 4,668 to 1,768, and Gemini from 3,974 to 539 under laconic mode
Claude still writes the most words, before and after the directive
Image: Laconic_tests

It does great on saving word count. About 30% less words than mine on average. The problem is it did drop a lot of pertinent information to do so, at least by my rubric.

u/pmward (3 votes)

If none of this lands, people report two retreats. Roll back to Opus 4.8, or put Fable 5 in front as the orchestrator so you never read Opus 5’s prose. Both trade the model you wanted for the reading experience you wanted. Plenty of people are taking that deal anyway.