Rendered at 06:38:29 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
mmastrac 15 hours ago [-]
I've started giving these instructions and I think I've been much more successful in generating clear output:
Comment blocks are <= 7 words, function names <= 4 words. User-facing message strings should be <= 10 words. Use an active voice, no stage performances, and pick the most common word when choosing among alternatives.
Limiting the number of words is the strongest factor in cleaning up the output, IMO.
For older code I've instructed it to delete all the comments, and then I re-comment it using a new session and these guidelines, asking it to rejustify the need for every comment to itself.
graemep 12 hours ago [-]
Claude not only writes verbose comments, it also writes comments about how things used to work when refactoring. That might have a place in version control comments, but not in the code.
bhelx 9 hours ago [-]
This speaks to the general problem with using LLMs for writing. The audience they are writing for us you, but you're trying to write for a totally different audience. In code, this manifests as comments in the code that are hyperspecific to the conversation you are having, and not the long term benefit of having those comments in the code.
I see this in docs a lot. I've been reading a lot of docs these days where it feels like the LLM is trying to hype up the person writing the docs. It's like it has no conception that the writing is meant for a 3rd party audience.
cgio 5 hours ago [-]
I don’t even think comments are useful at all given AI. I can ask my AI to explain a piece of code if I am stuck and I will get a reply in context of what I am looking for.
efskap 5 hours ago [-]
But comments should hopefully explain "why", not what or how, and that kind of context is exactly what an LLM is likely to be missing
easyascake 8 hours ago [-]
We call these temporal comments. We recently updated our code review skills to heavily discourage them. It doesn’t matter why funcA was added then later refactored to funcB. That much can be ascertained from git history. What does matter is why approach A doesn’t work, but B does.
porker 5 minutes ago [-]
How well is your code review skill doing at detecting and correcting these? History in comments in git is so annoying! As is missing why A didn't work but B does. None of the models I've tried get this right
pluralmonad 12 hours ago [-]
And will reference transient working docs in code comments.
// No retry was added here per AC 37b in FEATURE.MD.
jorl17 10 hours ago [-]
// The lesson from the Parse-dont-fail-era campaign
// Judged on merit from computed properties during the cursor saga
// Chop 6ms due to lenience and lax-constraints vs 18ms baseline April perf measurements
datsci_est_2015 9 hours ago [-]
Thanks, this sequence of 33 words alone was enough to give me a searing migraine.
jorl17 9 hours ago [-]
Glad to know it worked. Still pending: the assumed-defaults research track plus the validation-only build phase D demanded — your call on whether to start one now or deploy tonight’s campaign to surface any wrinkles the spec drifted on
eterm 8 hours ago [-]
It's incredible, because I Feel like you've been watching me work.
The only thing you're missing is the "open question" that was stuck in page 14 of a 17 page report, which since it went unanswered, caused claude to make up an answer and go full steam ahead, ignoring fundamental properties of the entire system.
jorl17 6 hours ago [-]
[dead]
datsci_est_2015 8 hours ago [-]
Idk if you’re coming up with these on the spot but they’re linguistically fascinating.
jorl17 7 hours ago [-]
Came up with them on the spot. Unfortunately, I've been working with Claude so much it's like my brain can autocomplete them natively.
ghostpepper 3 hours ago [-]
it's not just you, there is research that people are starting to talk more like chatGPT. you have a gift for parody though.
FiddlyPack 1 hours ago [-]
That's a sharp insight, and it reveals something core to communication that I otherwise wouldn't have considered- HN item 6b translocates reliospacactivity of our medium.
Shall I engage the tachyon beams, sir?
5 hours ago [-]
areoform 4 hours ago [-]
As a human who isn't a professional programmer, I've been writing comments like,
// let's track age!!
// this is harder than you'd think as I with totally impressive
// foresight didn't add age to the raw data.
//
// More honestly, I didn't want to add age to the astro data as that's
// a calculation that can change depending on how you slice it.
//
// Hence we need to figure out their age first.
Is that bad???
crab_galaxy 3 hours ago [-]
// Workaround because we don’t have an age column in the db. See JIRA-1234
This would be better IMO :)
Most of the context belongs in a ticket. And the difficulty is subjective!
areoform 3 hours ago [-]
I'm mostly writing code for myself, but it's a project that'll end up being public and it'll be available for others to do whatever they want with. Does that change the answer?
Yiin 1 hours ago [-]
personally it's fine and I've thanked myself many times for overly detailed comments coming up to some from 8 years ago and thinking how tf was I so smart/stupid (depending on the context)
klardotsh 1 hours ago [-]
This one drives me nuts, especially because I divvy up plan documents into such granular sub chunks and Ralph loop over them, I get nonsense commit messages and comments like “PLAN-5.1.A.d.42 load bearing reassertion” unless I AGENTS.md to hell and back… and still end up having to manually reject 5-10% of commit messages because the agent simply forgets AGENTS.md instructions until reprompted.
cerved 7 hours ago [-]
My theory is it writes these comments as "notes while working", and I don't don't mind that, per-se. My problem is it's inability to clean that shit up before committing it. That's wrong load-bearing lever that doesn't earn it's keep.
Also, it reads like ass.
jorl17 10 hours ago [-]
This!
Claude writes comments about how things used to work, which can be useful sometimes, especially if it's a big change that requires one to genuinely consider legacy behavior, but most of the time it shouldn't be there.
Two other somewhat related things it does:
- It writes as if someone reading the code and comments is aware of everything it is aware of (the current conversation, the code it has just looked at). It's really hard to make it understand that things need to stand on their own. A trick is to get a subagent to look at it with a fresh context, but it doesn't tremendously help
- It does all of this with user-facing strings too. Claude loves to write up tooltips and other labels that leak everything to the end user. Every single concern we have, every edge case we've meticulously made our code handle, it passes on to the user, so they don't "need to worry". But no sane user would think of these things. For them, a feature is a feature. The "dynamic scheduling" button should state what dynamic scheduling does plainly, and every edge case is handled by us. The "add" button does not need a label letting the user know that they will later be able to click the "delete" button, because the user will just realize it due to our adherence to proper design. Claude fails to understand good UX for the user cannot be replaced with endless labels and explanations.
It's an uphill battle and all attempts at solving this (or the brain-dead way new Anthropic models write) usually fail to work with me.
spooneybarger 10 hours ago [-]
I've gone back to using Opus 4.6. It's quite nice along all these fronts.
FiddlyPack 1 hours ago [-]
How? I tried but got forced back onto 5.
vilos1611 6 hours ago [-]
I've explicitly included instructions in my home CLAUDE.md to avoid this, because it's one of the most annoying things about how Claude writes comments.
Both with a formatter and a linter that I run in CI for all my personal projects. Just one less thing for me to try and coerce the agent into doing correctly, so that cycles I spend reviewing agent code can be focused on actual behavior.
ErroneousBosh 9 hours ago [-]
Presumably you're not just blindly copying down what Claude copies out for you, but actually reading, interpreting, and understanding it for yourself?
nrmitchi 12 hours ago [-]
I struggled with this for a long time, but actually seem to have gotten to a place where this is largely resolved. Copy/paste from my current claude.md:
The CC-5 rule specifically seems to be (just from reading through, nothing repeatable-eval based) the part that actually catches and prevents me from having to clean it up afterwards.
```
### Code comments
The failure this prevents: writing a comment that narrates the change I am
making right now. That context is real, but it expires the instant the change
merges — the defect it describes no longer exists, so the comment becomes a
story about a problem no future reader can observe. It is a changelog entry in
the wrong file, and a third copy of text already required in the commit body
(3.b) and the PR description.
- *CC-1 (MUST NOT)* Write a comment describing a change, a fix, a defect, its
cause, or what the code used to do. No "was/now/previously/instead of", no
"this fixes", no "needed because otherwise", no "note that we no longer".
- *CC-2 (MUST)* Apply the survival test to every comment before writing it:
would this still be true and useful to someone reading this file a year from
now, who never saw the diff? If it only makes sense beside the diff, it is
changelog — delete it and put it in the commit body.
- *CC-3 (MUST)* Default to zero comments. Declarative config — Terraform,
DNS records, k8s manifests, CI YAML, Helm values — is self-describing and
takes none. A resource named `dmarc-example-com` does not need a comment
saying it is the DMARC record.
- *CC-4 (MAY)* Comment only when a future editor would actively break
something without it: a non-obvious external constraint, a required
out-of-band manual step, an invariant the surrounding code cannot show. One
line. If it needs a paragraph it belongs in `plans/`, not inline.
- *CC-5 (MUST)* Before every commit, re-read the comment lines I added:
`git diff --cached | grep '^+' | grep -E '#|//|/*'`. Each hit must pass CC-2
on its own. Deleting is always an acceptable outcome. "I already wrote it",
"it is only one line", and "this one is genuinely useful" are not exemptions
— the last one is the exact thought that precedes every violation.
- *CC-6 (MUST)* Applies to comments I edit as well as ones I add. When a
change invalidates an existing comment, the default action is DELETE, not
rewrite it into a new narrative.
```
Yes, I am aware that claude mostly generated this, and it can probably be better and/or more succinct.
vrosas 15 hours ago [-]
The problem is, when the context window grows, Claude tends to forget these kinds of rules. It will then do whatever it wants. I had to outright ban comments in the global claude.md, the local claude.md AND write a hook to catch any that still slipped through.
nater5000 15 hours ago [-]
I think people really need to focus more on working with limited contexts rather than trying to work around it. I really try to keep my sessions as short as possible and it helps a ton with keeping Claude (et al) focused.
Specifically, I like the "canary" trick that people have discussed where you add a small, innocuous rule to your CLAUDE.md like "When responding to me, start every sentence with my name." so that when Claude stops doing this, you know you've used way too much context and need to start a new session.
boc 7 hours ago [-]
I set my env up so I can see the exact context used in CC CLI, and then once I get over about 40% ctx used I have it handoff to a new, fresh session. Nothing good comes from running above, say 60% of your context window. Coincidently, I usually have good results with CC. I never compact a session ever.
jen729w 7 hours ago [-]
This is the way. Mine looks like `ctx: 0k / Fable 5 high`. When ctx ⪆ 200k, time to start a new session.
This or you just repeat the initial prompt every 200k tokens
ianjbutler 12 hours ago [-]
Which gets you to the point where the whole thing is.. still unreliable. Generative text engines are going to generate. This calls for real enforcement in deterministic pre-edit hooks.
And here is where naive people will say something like "Why do I care if robots shit all over the codebase? Code is for machines, I don't expect to deal with it much now". But really externalized CoT like this confuses machines too, wastes tokens, and eventually wastes exponentially many tokens. Agents tend to think it's more real grounding than prompts are, even for comments-in-code. One bad comment poisons everything, then gets copied around as a ground-truth assumption everywhere. Hooks are more real to them than prompts or comments, and even then if you add enforced limits and tell them to externalize CoT ONLY in scratch task-tracking docs.. they will violate comment-enforcement hooks about 25% of the time. That tells you everything you need to know: even with constant reinforcement, they just really want to break this kind of rule.
purplepatrick 5 hours ago [-]
Yup. If only there were a task completion hook that could be set to fire prior to rendering terminal output. That would more handily address all these issues, as we could simply enforce output style rules that way.
The current output style does work, but it’s a Sisyphean task to tweak it constantly only to find out that CC adhere’s to only 75% of it, no matter what…
faizshah 8 hours ago [-]
My take on this is they are a tool to help speed up your work they are not meant to produce finished work. Humans produce finished work. LLM will never be deterministic cause their entire value is that they are generalizable.
ianjbutler 5 hours ago [-]
I hear that, sort of, but here's the thing. Using AI at scale means AI needs to be nearly perfect about not shitting where they eat. That's the subject matter of the whole thread
So the options are a) being a really aggressive stickler for generative hygiene with deterministic rules, b) being massively wasteful about hiring a few machine janitors for every machine coder, or c) humans become the machine's janitor. If I haven't missed an option.. only the first option seems reasonable here.
hectdev 9 hours ago [-]
Yea, I've started making it write linters to check the code that goes out. Anything that can be deterministically measured, gets added to it once we lock it down.
mandeepj 15 hours ago [-]
> The problem is, when the context window grows,
You know the problem; then why not address it? Does Compacting the context not help?
adastra22 15 hours ago [-]
Compacting the conversation almost never helps. It is uniformly worse than starting over with fresh context, or rewinding to a last-known-good state. It only exists because it increases engagement.
enraged_camel 10 hours ago [-]
This does not match my experience. I use long-running orchestrator sessions. Each orchestrator is in charge of planning, writing kick-off prompts for implementers, answering questions from those implementers, doing code reviews and providing feedback, and answering side questions from me when I have them.
Depending on the initiative I might compact a session a dozen times, sometimes more. It is lossy, and the session certainly tends to forget earlier bits as more compactions happen, but overall it's a much better experience than starting fresh and having to re-explain everything.
The only time I compact is if the session goes wildly off-course and the context gets polluted with off-topic conversations.
Also worth noting: with Claude Code you can provide custom instructions when compacting, and instruct the LLM that is in charge of compacting the session to prioritize the retention of specific bits. It can help a lot.
cautiouscat 15 hours ago [-]
Compaction is a main cause of this problem.
troupo 15 hours ago [-]
Compacting context compacts context. So Claude forgets a lot during compaction.
Maxatar 15 hours ago [-]
Compacting mostly gets rid of reasoning tokens, and honestly it would be nice of reasoning tokens did not constantly follow every follow up query. Asking even a simple/trivial question can have Claude use thousands of tokens. Compacting is good for getting rid of those.
troupo 14 hours ago [-]
I've had Claude immediately fall back to its usual verbose style immediately after compaction.
To be fair, I've had it do that immediately after re-reading the output style instructions, too.
My chat history is filled with "Yes, I broke the language rule. Let me rephrase that and update my memory. — You already have that in memory — Yes, true, I ignored that" (because "Memory" is a yet another .md file)
strbean 12 hours ago [-]
Claude Code supposedly supports a "post-compaction" hook, so you could have it automatically run the prompt "We just compacted the context, quickly refresh yourself on the rules in CLAUDE.md etc..".
Depending on what you've got in those files, maybe that will just use up all the context again though.
troupo 11 hours ago [-]
> supposedly supports a "post-compaction" hook, so you could have it automatically run the prompt
Keyword "supposedly" :)
I've had it in my settings forever, and still...
Asking it to analyse and fix the issue it produced a plausible "my training supercedes/overrides settings especially if triggered by certain words in the phrase" (paraphrasing the long text)
strbean 10 hours ago [-]
> Keyword "supposedly" :)
> I've had it in my settings forever, and still...
Checks out! I've never used it my self, so it I figured it likely didn't work at all.
aleksiy123 11 hours ago [-]
Hooks is the way.
Intermittent nudges
millsau 16 minutes ago [-]
So this works better then any other humanizer skill repo on github?
nottorp 10 hours ago [-]
I just gave up and edit the comments manually. However, I've had a surprise today.
I had it fix something then went and reduced one of the 3 line comments to 4 words. Then for some reason I told the bot to reload the source, it offered to make the other comments terse and did a passable job of it. Shocking!
Now how to get it to do that all the time...
lubujackson 4 hours ago [-]
I have extended this to coding work as well. "Implement this plan in less than 1000 added lines, tests included". It's amazing how well-behaved and concise models can be with simple guardrails.
Of course, you have to intuit a reasonable line length, but Claude cries if you happen to clip its wings too aggressively.
9 hours ago [-]
kanzure 15 hours ago [-]
Yep. Same here. I frequently tell agents things like "answer using only a single sentence" and "write no more than 10 words". They are excellent at writing code, so have them write code (and not English prose). Besides, most of the time we want them to make reusable software that doesn't require users (or future agents) to read too much text. Software should generally just work and do the obvious thing, without needing verbose explanation.
transdev12 10 hours ago [-]
The corollary here is to have Claude write tests to enforce this. The only thing it is consistently responsive to is test failures.
pbreit 11 hours ago [-]
Shouldn't this all be easily doable via (auto-)prompting? Surely I don't need to "install" anything?
varispeed 8 hours ago [-]
Why it should write comments at all? Code is the documentation. I only let it write high level information of why something is the way it is.
SadErn 4 hours ago [-]
[dead]
datakan 15 hours ago [-]
Has Anthropic said anything about how or why Claude writes the way it does? So many people hate it, seems like they need to do some damage control there.
I haven't had the same problems others have but I'm also not a heavy user of it.
nrmitchi 12 hours ago [-]
I do not have evidence or data that supports this. It is only my thought.
Claude, since Opus 5, speaks more and more like a wannabe-thought-leader pontificating on social media for engagement. Everything is a bait-then-switch, or a multi-post story format. The "engagement" that works well for social media makes actual work extremely frustrating.
My unsupported belief is that this is caused by an obnoxious number of people using previous models in an attempt to automate social media engagement, they figured out what worked, and that was fed directly back into newer model training (either by using thought traces in training, or just by continuing to scrape social media content)
YuriNiyazov 14 hours ago [-]
It's easiest to explain this while anthropomorphizing the model, I know some folks here hate that, sorry about that.
I heard an interesting diagnosis for why Claude does this: the output is a compressed version of its thought traces, very dense because the model is under pressure to use as few tokens as it can and to pack as much (for accuracy) of its concepts into the output.
One of the reasons that "don't do X" type of instructions work reliably is because you are telling the model "don't think of a pink elephant". There's also Anthropic's related research that shows that when you tell a model "don't do X", and it does X later for whatever reason, it starts acting more misaligned. This is because it thinks "well, I guess I am the sort of model that disobeys instructions, whatever" - this was specifically about cheating on tests, but you can imagine this happens in other contexts as well like following instructions on what kinds of text to output.
So, what you want to do is to avoid telling Claude "don't do X", and tell Claude "in your thoughts, in memories and various notes that you write, use your Claude-ese. In your output to humans, translate everything into long full sentences."
If anyone's interested, I can share my Claude Code output style that reflects this.
(Hi Adnan! Long time! (Adnan is an ex-coworker))
sunnybeetroot 2 hours ago [-]
Hey Yuri, slight tangent but how did you get to be an investor on those private companies as per your LinkedIn?
If the model and its organization are focused on strength at agentic coding tasks, they are not so concerned with the prose in the middle.
They might even have a version that writes less annoying prose, but they are being squeezed hard by OpenAI and the Chinese so unless it performed better or equal to the annoying one it’s never left the lab.
the_sleaze_ 15 hours ago [-]
They say you aren't interacting with an LLM or a model, but the character that the LLM is playing - the "always be positive and helpful software engineer"
gste 35 minutes ago [-]
I think it's reinforcement learning. It's been trained to give coding results but some of the conversation it gives as a side effect of its coding are absolute garbage
hbarka 15 hours ago [-]
I pruned my Claude.md and it made a difference. There were entries there that evolved from earlier models and Opus 5 could be reacting to it in a different manner.
adastra22 15 hours ago [-]
I have no Claude.md file. Claude is still absolutely horrible.
hbarka 7 hours ago [-]
If you’re on Claude.ai web, you still have preferences tied to your past interactions. That can be edited.
adastra22 3 hours ago [-]
I run everything sandboxed within a custom environment, no history, no memory, no autoloading of tools. Vanilla Claude experience.
user43928 15 hours ago [-]
They added a config option to Claude Code to make the output concise, and promised more comprehensive improvements.
I did not see an explanation though.
cryptonector 10 hours ago [-]
Watermarking? It certainly is useful for that. I see Claude-written prose AND I know instantly it's LLM writing. What I do with that knowledge varies.
thorian1828i03 3 hours ago [-]
Gemini has been watermarking for like a year and doesn't have the same problems.
IshKebab 8 hours ago [-]
Watermarking doesn't work like that.
chinathrow 15 hours ago [-]
The brevity how it outputs words seems like they try to save on tokens delivered.
fmbb 15 hours ago [-]
Producing more tokens means charging more money to solve a given task.
3371 27 minutes ago [-]
I don't think it's possible to effectively control LLM's output, unlike Human the difference between "thoughts" and "words" is very weak.
Better just clean stuff up afterward with a dedicated agent.
walthamstow 16 hours ago [-]
It's such a sad indictment of Anthropic's product that so many people hate interacting with it. Claude is on its way to the Microsoft Teams zone of hatred.
matheusmoreira 15 hours ago [-]
It's pretty sad indeed. Switching to other models made me notice how weird and verbose Claude was.
The moralizing is incredibly obnoxious as well. It didn't seem so bad at first, but it instantly became intolerable the second I remembered I was paying for those tokens.
demibabs 14 hours ago [-]
Moralizing? Can you expand on that
iammrpayments 7 hours ago [-]
There was a thread in reddit where people pretended to be other people to confuse llms for privacy reasons.
One of the comments was one guy saying “how he loved to live in Missouri and eat concrete soup” or something like that.
I was too lazy to write a similar reply and asked Claude, instead of saying no, it wrote 3 paragraphs about how I shouldn’t write about eating concrete soup and how it is dangerous to do so.
matheusmoreira 14 hours ago [-]
Sometimes Fable doesn't just get downgraded to Opus, it straight up refuses to do what I'm asking and starts lecturing me on Anthropic's notions of right and wrong. Cutting the model off wasn't enough, they had to make it burn the limited usage I paid for lecturing me on why it's immoral for it to code review my own project or whatever.
jayers 15 hours ago [-]
I think it would happen with any persona that Anthropic chose. I enjoyed the bouncy, optimistic style at first. I've since grown to hate it.
userbinator 5 hours ago [-]
A terse and compliant robotic servant should've been the persona they chose, because that's probably 99% of what those wanting to use it for work expect.
dominotw 15 hours ago [-]
how do they infuse this personality? do they train the human feedback providers with a certain personality?
nozzlegear 14 hours ago [-]
If we assume the personalities come from human feedback, it would have to be some unholy amalgamation of those feedback providers right?
cmrdporcupine 14 hours ago [-]
Anthropic has explicitly chosen to anthropomorphize the model. It's kind of in their mission statement. It's most noticed once you walk away for a while and use models/agents/harnesses that haven't pushed as hard on this. Codex/Sol rarely uses personal pronouns and basically no superlatives. It has its own verbal ticks, but I hate them less?
"Vomit: Clean up Claude 5's token output with a separate LLM" (github.com/zachahn)
285 points | 23 hours ago | 288 comments
ed_mercer 2 hours ago [-]
I personally got used to the claudisms and think people are making too big of a deal out of it. Yes it says load-bearing and caveat a lot, but at least you know behind the scenes what meaning it's assigning to certain situations.
colordrops 2 hours ago [-]
I kind of wonder if we would have appreciated the verbose prose when these LLMs first came out and out muscles had not yet atrophied. When I do stop yelling at Claude to be more concise and actually read what it wrote it's often valuable complexity and subtlety that I could use to better understand what it did and steer it, rather than Claude just papering over important details like it did before.
JV00 15 hours ago [-]
Everybody is complaining about this, at this point I’m sure they will deliver a tone of voice change in the 5.1 releases. Possibly with a new set of problems though, especially if this is part of an effort to obscure thinking to reduce distillation efficacy. In that case I believe Anthropic is doing damage to themselves. Caring about the quality of your product is the best strategy, the competition will come no matter what.
Maxatar 15 hours ago [-]
Simply untrue. You think everyone is complaining about this because the ones complaining are the only people commenting. The vast majority of people using Claude don't really care or even notice this one way or another. Sure among those who are irritated by it, it's good to have some ways to mitigate it, but I highly doubt Anthropic is going to devote much resources to an issue that affects a vocal minority.
JV00 22 minutes ago [-]
Customers of a language model don’t care or notice about the quality of the language produced by the model?
And your reasoning to get to this conclusion? Obscured like Claude’s thinking traces?
nozzlegear 14 hours ago [-]
> The vast majority of people using Claude don't really care or even notice this one way or another.
You have literally no way to know that.
Maxatar 12 hours ago [-]
I do have a way of knowing, but I actually appreciate and respect your reply... My suggestion to you is to take this shred of skepticism that you decided to apply to me, and apply to every comment you read on Hacker News, not simply the ones that don't align with your preconceived notions.
nozzlegear 11 hours ago [-]
> I do have a way of knowing
It was revealed to me in a dream.
> My suggestion to you is to take this shred of skepticism that you decided to apply to me,
I apply my skepticism liberally, but you couldn't possibly know that.
dwaltrip 7 hours ago [-]
How do you know? Don’t leave us hanging.
datadrivenangel 14 hours ago [-]
Over the last 6 months Claude's written material has gone from mediocre to unacceptable. The specific actual content and insights are somewhat better, but the claudisms are increasingly insufferable.
zeafoamrun 8 hours ago [-]
I don't think they can change at this point without starting from scratch
nojs 15 hours ago [-]
How does it help prevent distillation?
fr2029 14 hours ago [-]
it doesn't
PaulStatezny 6 hours ago [-]
For those of us who don't want to pay for Gemini tokens, what would be the best local LLM to use for this?
(A model that can run reasonably well in a ~24GB MacBook.)
hightrix 5 hours ago [-]
I don’t have a good answer but would like one. I’ve got a not too old desktop with a 4090 and 64gb of ram, I’d like a local model also.
amumu 1 hours ago [-]
I haven't tried with Claudette but did evaluate https://github.com/zachahn/vomit and https://github.com/gvzdv/claudish-to-english earlier today. I ended up using claudish-to-english with a prompt derived from the vomit one and some of my existing instructions. I ran a few local models through a test harness to see how they did, and the gemma4 ones added bad behavior back in less than any others I tested.
So for the parent's Macbook question `gemma4-26b-mlx` should work well.
For you with 24 GB VRAM, `gemma4-26b-a4b`. I tried higher VRAM models and they slowed down while still doing just as well or slightly worse.
If someone else tests and finds a better performing model though, please update me here, I'd love to try it.
cube00 9 hours ago [-]
takes Claude's last response and runs it through the Gemini CLI
As much as Claude's style frustrates me I can't say I'm willing to pay for double the tokens to fix it.
xbar 3 hours ago [-]
Every time I engage with Claude I am reminded how bad it is at communicating to its human.
dhosek 4 hours ago [-]
Hmm. I took a look at my claude output and I don’t see anything remotely like that in my responses. Occasionally a bit verbose, but none of this but “here’s the kicker” thing that the post claims, although I also notice that I’m using Sonnet which seems to be just fine.
anon7000 4 hours ago [-]
Opus 5 is particularly bad. Opus 4.8 to a lesser extent. It was extremely clear by the code comments in my colleague’s PRs.
Exoristos 5 hours ago [-]
I appreciate Claude's comments during implementation, but they won't do to commit, so I have it present them for editing or removal by me at the end of the loop. Depending, I then ask it to port some of them to a decisions document or similar. For user-facing microcopy, Claude is completely unsuitable in my opinion, and I write all these myself.
14 hours ago [-]
ErystelaThevale 13 hours ago [-]
I use multiple AI tools simultaneously, and I feel that Claude has gradually adopted a more explanatory tone following updates around March and July.
As for loss of context, it’s particularly problematic and can occur after just a few back-and-forth exchanges.
The user experience changes with every update for every AI tool, so I feel there are more downsides to sticking with the same one indefinitely.
dannyw 5 hours ago [-]
Set output style to explanatory in Claude Code. It's much better. I personally think it should be the default, but I assume Anthropic has done A/B tests and found the default style to be better for metrics.
zengid 15 hours ago [-]
this isn't just necessary, it's mandatory. that's the difference.
collingreen 15 hours ago [-]
This is the load bearing comment, and it cuts more deeply than you thought.
Let me ground my answer so I'm not just guessing. The blast radius of this change is significant and requires careful surgery to get right.
It's clear now and there's two options going forward:
A. Use this tool OP suggested
B. Rewrite the Internet from the ground up without this clear contradiction in place - 3-5 days
I recommend B and started 3 subagents to read all the code before I get started. I'll wait for them to finish.
yakbarber 7 hours ago [-]
To fix Claude’s personality, first, invent the universe…
nchmy 9 hours ago [-]
i havent used a claude model in a long time, but it seems quite clear to me that the chinese models have trained on claude (at the very least) - they write just the same
cortesoft 8 hours ago [-]
Everyone seems to think so, but I honestly don't understand why it bothers people so much. I find it slightly amusing when I even notice at all, normally I am so focused on the content of what I am working on that I don't really pay attention to the prose. I honestly don't understand why it bothers people so much.
jasongill 8 hours ago [-]
And honestly? That changes the game.
gste 31 minutes ago [-]
Claude is like
> The last one guesses its own refusals, marking the door open before we walked around it. Say the word and I'll do the joinery
Like WTF are you even talking about
m3h 12 hours ago [-]
You're looking for Poteto's /unslop which cleans up sloppy AI writing.
Honestly, this is the most practical take on prompt engineering I've come across lately. Makes me wonder why spend all that time crafting a 500-word essay to tell Claude to stop being Claude, when the real move is just to chain a couple models together and call it a day
markatkinson 15 hours ago [-]
Oh my gosh it drove me so nuts I switched to GLM5.3, and it was a breath of fresh air.
PeterStuer 13 hours ago [-]
Isn't it absurd that everyone is installing these bandaids or rolling their own? Wtf is Anthropic smoking?
exabrial 13 hours ago [-]
They're busy focusing on dumb things of course.
ex:
* Currently trying to make sure open models are regulated out of existence.
* More concerned about preventing distillation than providing actual value.
drsopp 11 hours ago [-]
My favorite instruction the last few weeks for getting Claude to explain something complex to me is: dumb it down
11 hours ago [-]
cryptonector 11 hours ago [-]
Claudette is a great name for Claude-related things. I get the threat of trademark infringement lawsuits.
mirmor23 11 hours ago [-]
just one line in the agent file does it. there is no need for another 'skill'.
here is the line i use:
use technical language to spell things out, and keep it free of jargon and project shorthand
cesarvarela 8 hours ago [-]
Once you switch to another model (I've been playing with Grok, for example), you'll notice the mental overhead of reading Claude slop. It's like having an AC or a vacuum making noise in the background, then it stops and you feel relief.
jkwn 6 hours ago [-]
Ask Claude to respond 'in english' and it will.
mcv 16 hours ago [-]
I wish I didn't need it, but the way Claude talks can get pretty tiresome. I've often wondered why it talks like that. Was it really trained on Buzzfeed? Is Gemini really that much better?
hslee16 7 hours ago [-]
Awesome instructions. Load-bearing indeed.
Apocryphon 8 hours ago [-]
I thought GPT was the model that spoke most like blog clickbait? Isn't Claude somewhat better about it?
lxe 7 hours ago [-]
I'm sorry, what? This just pipes the output to another LLM. You can just use a sane system prompt to do the job.
lqcfcjx 15 hours ago [-]
i hate claude writing a lot, especially after opus 4.8 and it's even worse in 5. in many cases, it feels like playing whac-a-mole and you just can't get rid of all those obvious ai writing patterns.
why do you choose gemini? imo this is a fundamental problem of all frontier ai models.
testycool 15 hours ago [-]
You can use a cheap model in another pane, and ask it what Claude said.
I prefer this since everyone has their own preference for how the output should sound and it's very simple and transparent. And you can easily ask follow-ups.
It can be via tmux, or herdr, because it can read the pane.
Or it can use a hook to read the conversation file. I call it `backseat-driver`
I sometimes use it as a proxy when fable genuinely does a good job, but is too difficult to understand.
I let the translator know it's role and anything I say it should forward with better context.
I don't swear at it anymore, but I'd often say "just do it, retard", and the translator would actually steer it in a useful manner.
catchnear4321 7 hours ago [-]
her name is claire
cmrdporcupine 15 hours ago [-]
Or just use a competitor instead of being a slave to this abuse? Why are people so wedded to Anthropic?
I have grown tired of Codex/GPT's writing style, too, but it's not nearly as bad. It's terse and factual by default. Even better if you use the "simple english" skill.
I actually found that GLM 5.x is the best in terms of editing documentation. It's still best to write things by hand to give your own organic voice, though. And not insult your readers.
globular-toast 15 hours ago [-]
I've been using OpenAI ever since Anthropic blocked third party clients. Can't believe people are putting up with that output.
_blk 5 hours ago [-]
Honestly I find ChatGPT's voice mode much more annoying with its errrm, yeah, I think, no wait, let me think, yeah... [Actual content]
Haven't tried, because I have just been using 4.6 since 5 was released.
walthamstow 15 hours ago [-]
Concise mode is likely the same buzzword salad but with fewer connecting words and terser sentences. Same with Caveman. The way it writes is fundamental to how it was trained.
sscaryterry 15 hours ago [-]
Yep, they're putting lipstick on the pig.
troupo 15 hours ago [-]
The "Concise" "setting" is just an .md file which is basically "use this style please".
Claude will eventually ignore it just as any other style like "Technical".
To avoid these Claudisms, I asked Claude to add instructions to my AGENTS.md. The first line it added:
Avoid the stock LLM register.
Sigh.
Nevin1901 15 hours ago [-]
Fix: Just switch to OpenAI, Grok, or other LLM's. They provide better performance and respond with 5 sentences. They also don't lecture you when you get angry.
pkulak 15 hours ago [-]
You… get angry?
matheusmoreira 15 hours ago [-]
Claude will end the conversation if you berate it when it screws something up.
lunchbucket 15 hours ago [-]
That's interesting but raised the same question, why berate a machine? Either the agent is not a person, in which case, anything it does wrong is your fault. Or it is a person, it can be blamed for mistakes, but then we can't in good conscious use it as a tool.
inkcapmushroom 13 hours ago [-]
Berating an LLM's response as a way to improve output has worked for at least some subset of LLMs and outputs. I have a coworker who told me that "hack" anyways.
tdeck 15 hours ago [-]
Berating a real person is often unproductive too, but people do it to make themselves feel better.
lunchbucket 1 hours ago [-]
But it's at least plausible the person you're berating is responsible for the error.
sweetjuly 15 hours ago [-]
One must imagine punching the wall feels good (in the moment)
Sanzig 15 hours ago [-]
Why berate an LLM? That doesn't sound healthy. Sure, it's a machine, but it's simulating a social interaction - being a jerk to it could bleed over into interactions with real people.
Also, Westworld? These violent delights have violent ends? Perhaps there's a tinge of Pascal's wager to it, but I prefer to be courteous to the rapidly improving synthetic intelligences.
qwerpy 4 hours ago [-]
I know I’ll get a “it’s almost as if HN is made up of different people” for this. But It’s hilarious seeing the chiding about berating LLMs interposed with the unhinged rants and screeching on here whenever anything remotely political comes up.
matheusmoreira 15 hours ago [-]
I didn't mean to imply I berate the LLMs. I don't do that. I talk to them as though they were intelligent and potentially sentient beings. When I see problems, I just correct them, take steps to prevent them in the future then move on.
I was just informing people that Anthropic gave Claude a tool that ends conversations and instructed it to use it via the system prompt if it's threatened or insulted.
pessimizer 6 hours ago [-]
The reason you don't bully real people is because they are real people, not because it doesn't work.
poszlem 15 hours ago [-]
For the same reason you berate a person or hit a wall. And yes, it's a machine, even more reasons why it should just take the berating and not throw a hissy fit.
Razengan 15 hours ago [-]
wow
I've been saying this since probably a year, that the entire Claude product: from the sign-up, the payment, the UX, the UI, the harness, the intelligence itself, the output, the "flavor" ..is just so mid that all the hype posted on HN about Claude must have been paid PR or a case of the emperor with no clothes.
datadrivenangel 14 hours ago [-]
Back at the end of 2025 Claude Code was truly the best. They've watered it down and the competition has caught up.
Comment blocks are <= 7 words, function names <= 4 words. User-facing message strings should be <= 10 words. Use an active voice, no stage performances, and pick the most common word when choosing among alternatives.
Limiting the number of words is the strongest factor in cleaning up the output, IMO.
For older code I've instructed it to delete all the comments, and then I re-comment it using a new session and these guidelines, asking it to rejustify the need for every comment to itself.
I see this in docs a lot. I've been reading a lot of docs these days where it feels like the LLM is trying to hype up the person writing the docs. It's like it has no conception that the writing is meant for a 3rd party audience.
// No retry was added here per AC 37b in FEATURE.MD.
// Judged on merit from computed properties during the cursor saga
// Chop 6ms due to lenience and lax-constraints vs 18ms baseline April perf measurements
The only thing you're missing is the "open question" that was stuck in page 14 of a 17 page report, which since it went unanswered, caused claude to make up an answer and go full steam ahead, ignoring fundamental properties of the entire system.
Shall I engage the tachyon beams, sir?
This would be better IMO :)
Most of the context belongs in a ticket. And the difficulty is subjective!
Also, it reads like ass.
Claude writes comments about how things used to work, which can be useful sometimes, especially if it's a big change that requires one to genuinely consider legacy behavior, but most of the time it shouldn't be there.
Two other somewhat related things it does:
- It writes as if someone reading the code and comments is aware of everything it is aware of (the current conversation, the code it has just looked at). It's really hard to make it understand that things need to stand on their own. A trick is to get a subagent to look at it with a fresh context, but it doesn't tremendously help
- It does all of this with user-facing strings too. Claude loves to write up tooltips and other labels that leak everything to the end user. Every single concern we have, every edge case we've meticulously made our code handle, it passes on to the user, so they don't "need to worry". But no sane user would think of these things. For them, a feature is a feature. The "dynamic scheduling" button should state what dynamic scheduling does plainly, and every edge case is handled by us. The "add" button does not need a label letting the user know that they will later be able to click the "delete" button, because the user will just realize it due to our adherence to proper design. Claude fails to understand good UX for the user cannot be replaced with endless labels and explanations.
It's an uphill battle and all attempts at solving this (or the brain-dead way new Anthropic models write) usually fail to work with me.
I've also written my own package for deterministically formatting comments: https://www.npmjs.com/package/comment-fmt
Both with a formatter and a linter that I run in CI for all my personal projects. Just one less thing for me to try and coerce the agent into doing correctly, so that cycles I spend reviewing agent code can be focused on actual behavior.
The CC-5 rule specifically seems to be (just from reading through, nothing repeatable-eval based) the part that actually catches and prevents me from having to clean it up afterwards.
```
### Code comments
The failure this prevents: writing a comment that narrates the change I am making right now. That context is real, but it expires the instant the change merges — the defect it describes no longer exists, so the comment becomes a story about a problem no future reader can observe. It is a changelog entry in the wrong file, and a third copy of text already required in the commit body (3.b) and the PR description.
- *CC-1 (MUST NOT)* Write a comment describing a change, a fix, a defect, its cause, or what the code used to do. No "was/now/previously/instead of", no "this fixes", no "needed because otherwise", no "note that we no longer".
- *CC-2 (MUST)* Apply the survival test to every comment before writing it: would this still be true and useful to someone reading this file a year from now, who never saw the diff? If it only makes sense beside the diff, it is changelog — delete it and put it in the commit body.
- *CC-3 (MUST)* Default to zero comments. Declarative config — Terraform, DNS records, k8s manifests, CI YAML, Helm values — is self-describing and takes none. A resource named `dmarc-example-com` does not need a comment saying it is the DMARC record.
- *CC-4 (MAY)* Comment only when a future editor would actively break something without it: a non-obvious external constraint, a required out-of-band manual step, an invariant the surrounding code cannot show. One line. If it needs a paragraph it belongs in `plans/`, not inline.
- *CC-5 (MUST)* Before every commit, re-read the comment lines I added: `git diff --cached | grep '^+' | grep -E '#|//|/*'`. Each hit must pass CC-2 on its own. Deleting is always an acceptable outcome. "I already wrote it", "it is only one line", and "this one is genuinely useful" are not exemptions — the last one is the exact thought that precedes every violation.
- *CC-6 (MUST)* Applies to comments I edit as well as ones I add. When a change invalidates an existing comment, the default action is DELETE, not rewrite it into a new narrative.
```
Yes, I am aware that claude mostly generated this, and it can probably be better and/or more succinct.
Specifically, I like the "canary" trick that people have discussed where you add a small, innocuous rule to your CLAUDE.md like "When responding to me, start every sentence with my name." so that when Claude stops doing this, you know you've used way too much context and need to start a new session.
```statusline-command.sh
```And here is where naive people will say something like "Why do I care if robots shit all over the codebase? Code is for machines, I don't expect to deal with it much now". But really externalized CoT like this confuses machines too, wastes tokens, and eventually wastes exponentially many tokens. Agents tend to think it's more real grounding than prompts are, even for comments-in-code. One bad comment poisons everything, then gets copied around as a ground-truth assumption everywhere. Hooks are more real to them than prompts or comments, and even then if you add enforced limits and tell them to externalize CoT ONLY in scratch task-tracking docs.. they will violate comment-enforcement hooks about 25% of the time. That tells you everything you need to know: even with constant reinforcement, they just really want to break this kind of rule.
The current output style does work, but it’s a Sisyphean task to tweak it constantly only to find out that CC adhere’s to only 75% of it, no matter what…
So the options are a) being a really aggressive stickler for generative hygiene with deterministic rules, b) being massively wasteful about hiring a few machine janitors for every machine coder, or c) humans become the machine's janitor. If I haven't missed an option.. only the first option seems reasonable here.
You know the problem; then why not address it? Does Compacting the context not help?
Depending on the initiative I might compact a session a dozen times, sometimes more. It is lossy, and the session certainly tends to forget earlier bits as more compactions happen, but overall it's a much better experience than starting fresh and having to re-explain everything.
The only time I compact is if the session goes wildly off-course and the context gets polluted with off-topic conversations.
Also worth noting: with Claude Code you can provide custom instructions when compacting, and instruct the LLM that is in charge of compacting the session to prioritize the retention of specific bits. It can help a lot.
To be fair, I've had it do that immediately after re-reading the output style instructions, too.
My chat history is filled with "Yes, I broke the language rule. Let me rephrase that and update my memory. — You already have that in memory — Yes, true, I ignored that" (because "Memory" is a yet another .md file)
Depending on what you've got in those files, maybe that will just use up all the context again though.
Keyword "supposedly" :)
I've had it in my settings forever, and still...
Asking it to analyse and fix the issue it produced a plausible "my training supercedes/overrides settings especially if triggered by certain words in the phrase" (paraphrasing the long text)
> I've had it in my settings forever, and still...
Checks out! I've never used it my self, so it I figured it likely didn't work at all.
Intermittent nudges
I had it fix something then went and reduced one of the 3 line comments to 4 words. Then for some reason I told the bot to reload the source, it offered to make the other comments terse and did a passable job of it. Shocking!
Now how to get it to do that all the time...
Of course, you have to intuit a reasonable line length, but Claude cries if you happen to clip its wings too aggressively.
I haven't had the same problems others have but I'm also not a heavy user of it.
Claude, since Opus 5, speaks more and more like a wannabe-thought-leader pontificating on social media for engagement. Everything is a bait-then-switch, or a multi-post story format. The "engagement" that works well for social media makes actual work extremely frustrating.
My unsupported belief is that this is caused by an obnoxious number of people using previous models in an attempt to automate social media engagement, they figured out what worked, and that was fed directly back into newer model training (either by using thought traces in training, or just by continuing to scrape social media content)
One of the reasons that "don't do X" type of instructions work reliably is because you are telling the model "don't think of a pink elephant". There's also Anthropic's related research that shows that when you tell a model "don't do X", and it does X later for whatever reason, it starts acting more misaligned. This is because it thinks "well, I guess I am the sort of model that disobeys instructions, whatever" - this was specifically about cheating on tests, but you can imagine this happens in other contexts as well like following instructions on what kinds of text to output.
So, what you want to do is to avoid telling Claude "don't do X", and tell Claude "in your thoughts, in memories and various notes that you write, use your Claude-ese. In your output to humans, translate everything into long full sentences."
If anyone's interested, I can share my Claude Code output style that reflects this.
(Hi Adnan! Long time! (Adnan is an ex-coworker))
My LI post: https://www.linkedin.com/feed/update/urn:li:activity:7495167...
They might even have a version that writes less annoying prose, but they are being squeezed hard by OpenAI and the Chinese so unless it performed better or equal to the annoying one it’s never left the lab.
I did not see an explanation though.
Better just clean stuff up afterward with a dedicated agent.
The moralizing is incredibly obnoxious as well. It didn't seem so bad at first, but it instantly became intolerable the second I remembered I was paying for those tokens.
One of the comments was one guy saying “how he loved to live in Missouri and eat concrete soup” or something like that.
I was too lazy to write a similar reply and asked Claude, instead of saying no, it wrote 3 paragraphs about how I shouldn’t write about eating concrete soup and how it is dangerous to do so.
"Vomit: Clean up Claude 5's token output with a separate LLM" (github.com/zachahn)
285 points | 23 hours ago | 288 comments
And your reasoning to get to this conclusion? Obscured like Claude’s thinking traces?
You have literally no way to know that.
It was revealed to me in a dream.
> My suggestion to you is to take this shred of skepticism that you decided to apply to me,
I apply my skepticism liberally, but you couldn't possibly know that.
(A model that can run reasonably well in a ~24GB MacBook.)
So for the parent's Macbook question `gemma4-26b-mlx` should work well.
For you with 24 GB VRAM, `gemma4-26b-a4b`. I tried higher VRAM models and they slowed down while still doing just as well or slightly worse.
If someone else tests and finds a better performing model though, please update me here, I'd love to try it.
As much as Claude's style frustrates me I can't say I'm willing to pay for double the tokens to fix it.
Let me ground my answer so I'm not just guessing. The blast radius of this change is significant and requires careful surgery to get right.
It's clear now and there's two options going forward: A. Use this tool OP suggested B. Rewrite the Internet from the ground up without this clear contradiction in place - 3-5 days
I recommend B and started 3 subagents to read all the code before I get started. I'll wait for them to finish.
> The last one guesses its own refusals, marking the door open before we walked around it. Say the word and I'll do the joinery
Like WTF are you even talking about
Someone made a Claude version of her skills:
https://github.com/michael-denyer/pstack-claude
I put it at the top of CLAUDE.md. I wonder if I put at a 8th grade level, it would be less of a cognitive load.
https://github.com/backnotprop/bro/blob/main/skills/bro/SKIL...
ex:
* Currently trying to make sure open models are regulated out of existence.
* More concerned about preventing distillation than providing actual value.
here is the line i use: use technical language to spell things out, and keep it free of jargon and project shorthand
why do you choose gemini? imo this is a fundamental problem of all frontier ai models.
I prefer this since everyone has their own preference for how the output should sound and it's very simple and transparent. And you can easily ask follow-ups.
It can be via tmux, or herdr, because it can read the pane.
Or it can use a hook to read the conversation file. I call it `backseat-driver`
I sometimes use it as a proxy when fable genuinely does a good job, but is too difficult to understand.
I let the translator know it's role and anything I say it should forward with better context.
I don't swear at it anymore, but I'd often say "just do it, retard", and the translator would actually steer it in a useful manner.
I have grown tired of Codex/GPT's writing style, too, but it's not nearly as bad. It's terse and factual by default. Even better if you use the "simple english" skill.
I actually found that GLM 5.x is the best in terms of editing documentation. It's still best to write things by hand to give your own organic voice, though. And not insult your readers.
Haven't tried, because I have just been using 4.6 since 5 was released.
Claude will eventually ignore it just as any other style like "Technical".
Should be pretty difficult to ignore
Also, Westworld? These violent delights have violent ends? Perhaps there's a tinge of Pascal's wager to it, but I prefer to be courteous to the rapidly improving synthetic intelligences.
I was just informing people that Anthropic gave Claude a tool that ends conversations and instructed it to use it via the system prompt if it's threatened or insulted.
I've been saying this since probably a year, that the entire Claude product: from the sign-up, the payment, the UX, the UI, the harness, the intelligence itself, the output, the "flavor" ..is just so mid that all the hype posted on HN about Claude must have been paid PR or a case of the emperor with no clothes.