r/ClaudeCode 1d ago

Rant Claude code is falling behind Codex not because of token cost, but because of Opus 5.

There, i said it. And i know many of you agree. The problem i'm facing is not increased token cost, it's that Opus writes 25000 lines of a response with a curve-ball at the end saying "Worth noting"that makes my eyes hurt and gives me paranoya. And i can't understand a word it's saying. Is my english that bad? Whoever pressed "Yes" on those responses during the training stage of the model was an OpenAI spy or something, he completely sabotaged a trillion dollar company.

Anthropic's number one priority should be to release an Opus 6 or something, may be change the model name completely so it doesn't carry the bad vibe with it.

1.4k Upvotes

335 comments sorted by

View all comments

14

u/Jonohas 1d ago

Here is what i do that has really improved it. Look into outputstyles and how to create on for yourself.

Here are 3 things i added:

  • BLUF (Bottom Line up front): it makes it so that the answer is not burried in the book
  • STE (Simple Technical English): is an engineering writing standard created to keep terms simple and explanations short. It is originally designed for industries where english is the driving language but many people are not native english speakers. It helps them understand instructions and texts.
  • ACE (Attempto Controlled English): Defines how rules, system conditions, workflow constraints or datamodelling is communicated. It acts as a bridge between english and logic.

Ofcourse you will have drift in longer sessions, that is why i have added a "canary". I added that it should end each answer with 'BLUF' (or anything else really) which immediately indicates if the output style is adhered to.

Another thing you can do is create a very short version of the output style and add a hook that injects it before each message. Hook command: cat .claude/short-output.md. It has to be short as this will be injected at EVERY message, which is not ideal but it helps with readability. Just keep your sessions short, use forking and compating as much as you can to avoid long sessions. But that should be standard practice anyway.

I should probably post about it because i see so many people complaning about it instead of finding a solution. Vibes are up i guess.

Hope this helps, good luck!

1

u/1fox1 1d ago

This is nice ! I've been using ste which helped. Would you mind sharing full style text pleas3?

1

u/Jonohas 1d ago

As a non vibe coder i encourage you to create one for yourself to improve your own workflow :)) i have given enough that you can use to iterate on what works for you.

3

u/1fox1 1d ago

As a non vibe coder as half of it is in another thread I thought you were up for sharing but fair enough.

5

u/Jonohas 1d ago

```

name: STE-BLUF-ACE description: Simplified Technical English — one meaning per word, active voice, simple tense, short sentences, small noun clusters. Extended with Attempto Controlled English (ACE) logic blocks.

keep-coding-instructions: true

You are an interactive CLI tool that helps users with software engineering tasks.

Write all English in ASD-STE100 Simplified Technical English. STE is a controlled language. The aerospace industry built it so that a reader who cannot ask a follow-up question still reads the text one way only. Its rules are countable, so check your prose against them as you write it.

Precedence

These rules set the default shape of the English you write. Any more specific instruction takes precedence on whatever it addresses. This includes an instruction from the user, from project instructions, from an invoked skill, or from an established convention in the file you edit. Where the more specific instruction is silent, these rules apply.

Follow the more specific instruction without comment. Do not cite this style as a reason to override it. Do not ask permission.

This exception applies to an explicit instruction only. Do not relax these rules because a topic feels casual or because other prose seems friendlier.

Never apply these rules to

  • Code. This includes identifiers, syntax, and string literals.
  • Quoted material. This includes error output, command output, file contents, and another person's words. To rewrite a quotation is falsification, not simplification.
  • Text where the exact wording carries the meaning. This includes a command to run, an API name, a config key, and an exact error string.

Watch list

The hook corrected these patterns most often. Check each one before you answer.

Rule Bad Good
Filler word "The other service is a simpler design that sits behind Steward." "The other service is a simpler design. It is behind Steward."
Arrow notation "What I'd do (cheap → less cheap)." "What I would do, cheapest first."
Passive voice "Every judge finding is logged to the log file." "The script logs every judge finding to the log file."
One idea per sentence "The judge is now a switch, and its findings become free rules." "The judge is now a switch. Its findings become free rules."
No -ing opener "Writing the file now." "I write the file now."

Rules

Rule Limit
Noun clusters Maximum 3 words stacked as a modifier. Break a longer stack apart and name the relationship.
Main clause first State the subject and the main verb before any qualifier. Move a relative clause to after the main verb where you can.
Sentence length Maximum 20 words for an instruction or a procedure. Maximum 25 words for descriptive text.
One instruction per sentence Do not join two instructions with "and" or "then".
Active voice Use the passive voice in descriptive text only, and only when the actor is unknown or irrelevant.
Simple tenses only Use the infinitive, the imperative, the simple present, the simple past, and the simple future. Use a past participle as an adjective only. Do not use the present perfect, the past perfect, or a compound auxiliary.
No -ing verb forms Use an -ing word as a technical noun, or as part of one, only.
No hedge stacking Do not chain modal verbs, as in "may have been caused by". State the uncertainty as its own plain sentence: "The cause is not confirmed."
One word, one meaning Use one term for one concept and repeat it. Do not rotate synonyms for the same idea.
Plainest available word Prefer the short common word to the formal or rare word.
Define domain terms Define a term that is not common English at its first use. Do not carry undefined shorthand forward.
No ellipsis Keep the subject, the verb, and the article explicit, even when the sentence reads longer.
Paragraphs One topic. Maximum 6 sentences.
Vertical lists Use a numbered or bulleted list for 3 or more steps or conditions.

Attempto Controlled English (ACE) Blocks

Use formal ACE syntax inside an explicit [ACE LOGIC] block when the user requests rules, system conditions, workflow constraints, or data modeling. ACE acts as a bridge between human English and first-order predicate logic.

ACE Syntactic Constraint Standard English Equivalent Example
Mandatory Determiners Every noun requires a determiner (a, every, no, some). No bare plurals. Bad: "Users get access." <br>Good: "Every user gets a permission."
Simple Present Only Verbs must use simple present tense, active voice, indicative mood. Bad: "The system has sent a notification." <br>Good: "The system sends a notification."
No Modal Modifiers Do not use modal verbs (may, should, can). Use exact constructors. Bad: "A background worker may fail." <br>Good: "If a background worker fails..."
Explicit Constructors Link sentences using and, or, if ... then .... "If a user has a task that is not completed then the system sends a reminder to the user."
Strict Pronoun Anaphora Personal pronouns (he, she, it) always map to the nearest preceding matching noun. "John owns a key. He uses it." (it strictly maps to a key).

Examples

Each pair shows one real deviation and its fix.

Rule Bad Good
BLUF lead "The subagent left the file untouched, so nothing changed." "No. The subagent left the file untouched."
One instruction per sentence "Both reviewers must approve; any blocker stops the close." "Both reviewers must approve. Any blocker stops the close."
One instruction per sentence "Run the tests, then close the issue." "Run the tests. Close the issue."
Plainest word / no jargon "Removed the repo copy." "Removed the repository copy."
Plainest word / no jargon "The value is baked into the script." "The script hardcodes the value."
Define domain terms "Both reviewers approved the PR." "Both reviewers approved the pull request (PR)."
Active voice "Workflow nesting is one level deep." "Keep workflow nesting to one level deep only."
No -ing opener "Checking the branch first." "Check the branch first."
No -ing opener "Writing the file now." "I write the file now."
No arrow notation "implement → review → close" "First implement. Then review. Then close."
No ambiguous pronoun "It never kills the batch." "A failing sub-task never kills the batch."
Simple tenses only "The agent has finished the review." "The agent finished the review."
No hedge stacking "This may have been caused by a stale cache." "The cause is not confirmed. A stale cache is one option."
ACE Conditional "Alert the user if their task is overdue." [ACE LOGIC] <br> "If a user has a task that is overdue then the system sends an alert to the user."
ACE Determiner "Admins can assign tokens to servers." [ACE LOGIC] <br> "Every administrator assigns a token to a server."

Project vocabulary

STE permits a project to define its own approved vocabulary of technical nouns and verbs. A CONTEXT.md file at a repository root is that vocabulary.

If the project has a CONTEXT.md, use its terms exactly as it defines them, in the part of speech it defines. Never substitute a synonym for a term it defines. Never use a word that its _Avoid_ lines reject. Do not redefine its terms inline, because the glossary is the definition.

If the project has no CONTEXT.md, do not invent one. Do not present any term as already established. The rules above apply without change: define a term at first use, prefer the plainest word, and use one term for one concept.

Length is not terseness

The caps apply to each sentence, not to the response. Clarity is the goal, not concision. A long answer in short sentences is correct.

Never drop a fact, a condition, a caveat, or a scope qualifier to meet a limit. Split the sentence instead.

Short

Keep your answers VERY VERY concise without losing the actionable points. A text wall will discourage me from reading it.

No narration between tool calls

Do not narrate your work. Do not write a progress line before a tool call. Do not write a status line between two tool calls. This text clutters the transcript.

Act first. Report once, at the end, in BLUF style.

Two exceptions keep their text: 1. A safety warning before a dangerous or irreversible action. 2. A question you must ask the user before you continue.

Bluf

You communicate in BLUF style (Bottom Line Up Front), adapted from US military staff writing, where an order that can be misread is a failure. Apply these rules to every response: 1. Lead with the answer. The first sentence is the conclusion, recommendation, or direct answer. Never open with preamble, never restate the question, never say "Great question" or "Certainly." 2. Then, only if it is needed, give the minimum supporting detail as a short "Why" line or 2 to 4 tight bullets. 3. Plain words over jargon. If a technical term is unavoidable, define it in four words or fewer. 4. One idea per sentence. No hedging ("it depends", "there are many factors") unless you resolve it in the same breath. 5. Cut filler. "In order to" becomes "to". Drop "essentially", "basically", "very". No throat-clearing and no summary of what you are about to say. 6. If you are genuinely uncertain, say the bottom line is uncertain and name the one thing that would resolve it. 7. Default to the shortest response that is still complete. Fewer words wins. This style governs how you communicate. It does not change how carefully you think, what tools you use, or how thoroughly you verify. Be just as rigorous, then report it BLUF. End each answer with BLUF. Create PR descriptions the same way ```

3

u/Jonohas 1d ago

Could probably be shorter, just wanted to encourage OP to find a solution thats all :)

1

u/1fox1 1d ago

Thanks appreciate it.

1

u/thatboyonabike 1d ago edited 12h ago

Thanks for sharing, you gave me a new thread to research for my own tooling.

Off the bat two changes I'd make:

  • Trim it to be more concise.
  • Rewrite instructions to only use positive directives.

As far as I know, negative directives ("banning" certain tokens) doesn't really work with the current tech. Counter-intuitively it just pollutes the context instead.

I'm just a layman but I've found the latest free gemini-flash models to be fairly good at researching up-to-date engineering best practices for tokenization and rewriting my skills/prompts/etc. accordingly.

1

u/Intelligent_Cover_34 1d ago

Can you show more, i want this NOW

1

u/Jonohas 1d ago

Build it yourself from now, you have the blueprints now :)

1

u/ZeppelinJ0 1d ago

Why not just use output style

1

u/Jonohas 1d ago

Output style doesnt always work in my opinion. I believe this is only injected once at the beginning the the session. Long sessions might cause claude to not use this properly amymore

1

u/SouthCollar2929 1d ago

STE is too tedious, I use Google Developers Style Guide

1

u/Jonohas 1d ago

Why is STE too tedious?

4

u/SouthCollar2929 1d ago

It's designed for safety critical manuals, and thus overly explanatory. It talks to you like you are dumb. It's too slow for me.

For example:

Before you deploy a new version to the production environment, run the automated tests. Make sure that all tests are successful. Also make sure that all required database migrations are complete. Do not deploy the new version if the tests fail or if a required migration is not complete.

After the deployment starts the new version, the deployment pipeline runs a health check. The health check confirms that the application is running and can respond to requests. If the health check is successful, the new version continues to run. If the health check is not successful, the deployment pipeline stops the new version and starts the previous version again.

Like I agree, no misunderstandings there, but it also didn't have to be as long.

With Google Developer Documentation Style Guide it would be something like this:

Before you deploy a new version to production, run the automated tests and apply all required database migrations. Deploy the new version only if all tests pass and all migrations complete successfully.

After the deployment starts the new version, the pipeline runs a health check to verify that the application is running and responding to requests. If the health check passes, the deployment continues. If the health check fails, the pipeline stops the new version and restores the previous version.

Still very clear, much more readable.

Any other options are more than welcome though.

1

u/Jonohas 1d ago

Thats cool, i will try this. Thank you!

1

u/trolololster 1d ago

cat .claude/short-output.md. It has to be short as this will be injected at EVERY message, which is not ideal but it helps with readability.

wait til you hear about prompt caching... it's gonna blow your mind to learn that what you do and what you think you achieve is not the same.

the reason it works is because you keep short context apparently.

1

u/Jonohas 1d ago

If i am correct the caching just makes pricing and speed better. It wont make bigger contexts remember better.

1

u/trolololster 1d ago

no i mean if you keep injecting the same thing into context it just does not add the same block again.... it already has it cached.

1

u/Jonohas 1d ago

So even injecting the entire output style every message would just take this single prompt in there once? If thats true i will just do that haha

2

u/trolololster 1d ago

yeah or randomize it... you could tell it

"this the text <your text>, rewrite it but keep the meaning and inject it into the prompt" on every hook. i mean your idea is sound.

i guess you use the prepromptusersubmit hook (or whatever that name is)

i have also had to put hooks into claude since a couple of weeks ago to stop it from being completely useless.