The biggest "Claudism" that I have a hard time getting the LLM to stop doing is its insistence on talking about what it didn't do in addition to what it did. "I edited this.py and that.py but I did not edit README.md and I did not commit." or code comments like "This code invokes foo on bar and returns the results directly -- not through a callback." "This code returns true if the user clicked on a button -- not on the list view." I mean, thanks, Claude, but I don't care what the code doesn't do. Don't tend to see this with other LLMs.
I almost want to try adding a rule "Never use the words 'not' or 'instead'."
It’s a model issue. I’m in the process of switching my company’s primary AI provider after several days of testing Astra.
Even Fable feels like an idiot now. It’s not the code quality, it’s the improvements in communication and judgement. It is an absolute breath of fresh air. I was spending a lot of tokens and building special workflows to reign in Claude’s horrendous prose.
Astra just communicates well out of the box!!!
Codex has worse UX, but Astra has fewer qualms about building you a custom harness overlay.
I've found it does this in two situations:
Firstly when you've instructed it ( possibly through skills ) not to do something. It'll keep reminding you that it didn't do that. So I might say, "Check out and review this PR, do not make comments on it", and then it'll be keen to point out it hasn't posted comments to the PR.
But more often it happens when it tries one approach, gets itself messed up, and then has to back out that approach, clean up its mess and do something else.
It'll often then spend more time explaining the wrong approach than the right one, which can be frustrating, especially if all its working is buried in the detailed transcripts.
Grok does the same thing.
We'll discuss a feature implementation with various options for design, settle on one of them, and then it will write in the doc comment all the designs we considered but dropped.
LLMs are trained to obey instructions, and they try their best to game the reinforcement learning by including reports of how they're obeying your instructions. Therefore, not talking about followed instructions is a sort of conflict for an LLM.
The thing I struggle the most with is getting it to stop referring to itself with personal pronouns. No Claude, you are not an “I” you are an “it”. You are a fucking tool, dammit. Tell me what you did without trying to assume personality; stop impersonating humans you steroidal autocorrect.
GPT does this constantly too. Even in docs, which is straight up embarrassing if you don’t catch it. It seems to be triggered by you telling the agent to do something else, which I do all the time. But from then on, it will remember the rejected strategy and tell everyone it can that it was rejected at every opportunity.
Claude is very resistant to instructions. I've been cultivating my own minimal skill to tame it for a couple months: https://github.com/ricardobeat/skills/tree/main/human
The key sentences to get rid of claude-isms so far:
- say what you have to say and stop
- [no] document-structure signposts
- [no] historical remarks that only warn about past states
- don't attribute agency to things
- never narrate your own changes, fixes, defects from the past, or what the code used to do
It works 100% of the time for other models, 70-80% for Claude, but already makes a big difference.
I have found Fable 5.1 to be a much more natural communicator than prior Claude models
My guess would be that somewhere you have these instructions being fed to the agent. Double check skills, AGENTS.md, memory, agent definition...
You can also ask why did he mentioned something that wasn't done or why he thought this was important.
In my AGENTS.md file I have an instruction telling the agent to never commit any changes unless I explicitly ask for it, and this leads to messages similar to what you just described.
That wouldn't bother me if it would just make bullet lists, which I think I'll start asking for. "Summarize", "synopsis", "brief", "concise" these rarely help I feel because its summarizing noise as well.
The worst is when this bleeds into the comments and docs. Like, my dude, you don't have to document the code you didn't write (most of the time anyway).
I have a pass with Gemini 3.8 low over every PR Claude makes that specifically flags this. It points out all the slop comments, docs, commit messages. Doing this has greatly improved my comment and commit text quality
Funny thing is, Claude often “disagreed with part of the review and decided to not adopt the requested changes” lol
I did add that rule and it’s helped a lot. It greps for ways it writes negative statements and does a pass to correct them. I can’t get it to stop writing them in the first place though.
Relevant anecdata because I've burned many a Claude sessions on this.
If you're using Claude Code, then it's in the harness. At the close of many sessions, I would start a meta conversation over why the LLM would consistently break certain rules. What it found when debugging itself is that some of the "contradicting" rules that I had were in fact, not from my rules. Instead, the instructions from its own harness had phrases telling it to do things like that. When something contradicts, its own instructions would outweigh any custom ones you write. Every rule variant I had tested (including the one that says it overrides the harness instructions - and yes, I've actually tested all the ideas in your comment too) has ultimately been unsuccessful due to this according to the LLM.