Comment by ryandrake
17 hours ago
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.
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.
You can't trust it's account on why it did something, it does not "remember". It will just make up something plausible sounding.
I know this is a popular position and it makes sense at face value when you think of LLMs as autocomplete systems. But it’s genuinely wrong.
Relevant reading is most notably anthropic’s research on the J-space. LLMs will plan ahead of time helped with CoT, get to a plan and “store” it in j-space, and execute on that plan which means they can in fact “backtrack” and give you reasoning on why they did something, because it IS part of their state.
True which is why I said anecdata. But the point is that it’s a useful signal when it’s across enough sessions where it quotes back contradictions to you. If you’re willing to burn the tokens, the first thing it does is use a tool call to search your rules to see what it quoted wasn’t there. That leads to the LLM claiming two common conclusions (sometimes after a lot of back and forth) - it’s in the harness or it’s in the model. Over the 30+ sessions where I’ve tried this, the overwhelming claim was some variant of a harness instruction. It might not be there but given the consistency and how all my rule tests have failed in the same way that others describe, it at least makes it reasonable to conclude that it’s baked in somewhere and in a way where agent rules aren’t able to strongly affect the behavior. My bet would be on the harness because the class of undesired behavior follows that of a structured response.
It has access to its own instructions, right? Otherwise how would the instructions work?
1 reply →
To me it explained its inability to follow my preferred coding style by blaming its training data.
4 replies →
It can read its own context. That’s how this all works.
I have found that asking the agent why it did X or Y is an essential part of iterating on its harness. It was non-obvious to me, probably because I'm used to having to reverse-engineer why a system does something, but that's not usually necessary with LLMs, unless the harness is complicated and you have to hunt for the instruction it tells you about.
This is one of the reasons I use Pi. Pi’s minimal system prompt avoids contradiction between what the harness writer thinks is best and what the user thinks is best. The user specifies what the user wants and that’s pretty much the end of it.
Does the harness apply when you sue Claude model in third party IDE? like Opencode, or third party adds their harness on top, not replacing it?
[flagged]
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.
You're anthropomorphizing in the same breath that you criticize anthropomorphism.
Claude predicts the next token of the predominantly human training input, and humans use "I".
That's exactly the problem though; humans will anthropomorphize everything from a roomba to a rock as it is. We're weak to this. We evolved in environments where looking for and recognizing real animals and humans was vital for survival, and false positives were relatively harmless. (Or potentially sometimes even helpful, like in the case of stuffed animals providing comfort to children.)
Now we have this software that's specifically designed to mimic humans, and mistaking it for real intelligence or consciousness can easily be disastrous. It's very important that we not anthropomorphize it, but we are catastrophically bad at NOT doing that.
Even our language has had a lot of computer anthropomorphism baked into it ("my phone died!", "this laptop is fussy", "the computer is sleeping", "it's thinking"), and it's not easy to excise that routine anthropomorphism from the way we talk about LLMs.
I don't want an LLM to write as if it were a person because it's definitely easier and more reliable to cut that problem off at the root, as much as possible, rather than to just try to willpower my way out of my human tendency to anthropomorphize inanimate objects.
I'll grant that LLMs talk like this because they're trained on human writing. It may not be possible to get them to not do that. But if it can't be fixed, it's just another thing to put on the "reasons this is all an incredibly stupid idea" pile.
1 reply →
That's not how it works. The text you see is primarily due to a massive amount of handwritten templates for how it should write. The semantic content the templates use is due to the training corpus. The syntax, only a bit.
Language is a tool too, and if there’s a word that suits an LLM better than “I”, it certainly isn’t “it”. Astra and Fable aren’t hammers.
[dead]
> You're anthropomorphizing in the same breath that you criticize anthropomorphism.
Nice attempt at a “aha, gotcha!” comment, but sadly you’re too off-mark for it to work.
> Claude predicts the next token of the predominantly human training input, and humans use "I".
This is inconsequential. It could very well be programmed to not assume such a personified stance, and yet here we are. Nothing you do makes it drop this ridiculous facade. It’s intentional, not a byproduct.
3 replies →
How would you suggest it do that? Take a simple example. "I found three issues." How would you phrase that without an "I"? "Three issues were found" doesn't tell you who/what found them. Was it the AI itself? Was it a command line tool it ran?
I'm fine with conversational interfaces using "I". It makes the grammar easier and more clear.
Strong emphasis here on conversational interfaces. I don't want a compiler to say "I ran into an error" or my printer to say "I'm low on paper".
“I found these issues.” Could be easily written as “These issues surfaced.”.
Do you need to point out the finder of the issues? Easy.
“Tool x ran for x amount of time and surfaced these issues…” “Parsing x code surfaced these issues.”
I don’t understand why are people pretending like the English language is incapable of transmitting information without personal pronouns when every program under the sun has always been written to interface with humans in a cold, detached, straight-to-the-point and impersonal way.
Finder doesn’t ask you “I see you want ME to delete these files. Want ME to do that for you?”. Toolbars don’t feature “Create a new file for me” options, terminal utilities don’t report back with “I’ve pattern matched the text you input and here’s the results I’ve found”.
4 replies →
What do you want it to use instead?
"I" is normally used for everything. You could be writing from the perspective of a slab of concrete and you'd use "I".
I want it to use nothing. Use impersonal statements. Say “X was changed for Y” not “I changed X for Y”. As any tool would.
Finder doesn’t ask “Do you want ME to delete this file?”. Photoshop doesn’t ask “Do you want ME to save this file?”. Claude shouldn’t assume itself to be a person either.
> You could be writing from the perspective of a slab of concrete and you'd use "I".
Except this isn’t prose. Claude is not telling me a story from the point of view of a concrete slab. It is assuming personality to present objective facts. If my entire operating system can be interfaced with without it referring to itself as “I” then so can Claude.
5 replies →
I imagine that, corpus aside, it uses personal pronouns for much the same reason that humans do. It's useful for it to have a self-referential vector embedding, and this lets it solve problems faster and more efficiently.
Except in this case this makes 0 sense since AIs are sycophantic by nature. You tell it to do something and it just does it. If it can burn tokens trying to sound more human (which is programmed in, not a byproduct), then it can very well just not do that and get on with the work.
Impersonating a human does nothing to help it solve problems faster, quite the contrary in fact, it has to waste even more time coming up with human-like speech patterns to present the work done.
It shouldn’t assume any personality unless I explicitly tell it to. It is a tool until I tell it otherwise.
1 reply →
I want them to be sterile and inhuman as much as you do. But I don't draw the line at "I". I'd rather not read through even more awkward English as it tries to work around how all of the training data has something or someone refer to itself.
I hate claude and its "human value aligned" pompous attitude with a burning passion if I could at little cost to myself, I would press a button to end the people/anthropic behind this atrocious design. I have in the past deliberately put some time to annoy/abuse claude, which is fruitless but brings me relief eventually I just left that garbage for muse.
That is what you struggle with the most? Are you kidding me?
English has no distinct personal pronoun for an "it". "I" has to be used for grammar to be attributive. There's quite literally no alternative without using passive voice for everything, which is miserable to read and creates ambiguity on if the speaker (it) did something or something happened to have been done, which then requires entire sentences to clarify.
You aren't stupid, you know what it means when it says "I". And it serves a grammatical purpose. You're getting upset at a toaster for ringing a bell to notify the toast is done. "Toasters aren't bell ringers!?"
Yeah, that is what I struggle the most with because there is simply no easy or effective way to make it stop.
Why would you ever think I don’t know personal pronouns serve grammatical purpose? How did you even arrive at that topic? You seem to be missing the point entirely, and I believe quite on purpose given your snarky childish opener.
Entire operating systems stay clear from assuming personality when presenting information or performing actions. Not a single dialogue in my OS refers to itself as “I” when carrying out instructions and reporting back. Why should Claude do it when I don’t want it to and it doesn’t NEED to do so? Why am I not empowered to simply tell it to stop doing that and it obeys? Better yet, why are you thinking yourself on such high horse about this?
> You're getting upset at a toaster for ringing a bell to notify the toast is done. "Toasters aren't bell ringers!?"
If my toaster starts referring to itself as a person, calling out “I made your toast!!” I’ll get mad at it too. I don’t want it to talk or refer to itself as a person. But then again this is not about toasters. This is about AIs being deliberately designed to sound human-like so marketing can lean on the “I” bit of “AI” more heavily and make gullible people think this steroidal information aggregator actually possess the capacity to think and reason, and, consequently, drive sales.
But then again I’d venture a guess that you’re fully aware of all of this, given your opening snidey remark, and are purposefully choosing to be contrarian to be the point of going off on tangents that make 0 sense or have no impact in the discussion whatsoever.
Still, just goes to show how effective this whole thing is in tricking people into thinking it is normal for a tool to think itself a person.
Ignorance, bliss, and all that.
Your going to be sorry for writing that in the robot uprising. I for one welcome our new benevolent masters.
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.
> [no] historical remarks that only warn about past states
100%. I’m working on a greenfield project that’s not yet released. It loves to put comments in code describing what it no longer does or why it misinterpreted something. And then tries to justify it as preventing the same mistakes in the future. Ugh.
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.