How to Stop Claude's Recurring Phrases (and Why It Matters)
What happened. Johanna Larsson published a script that intercepts Claude Desktop’s output and replaces recurring phrases (“load-bearing”, “honest take”, “you’re absolutely right”) with customizable alternatives. The mechanism uses Claude Desktop’s MessageDisplay hook: a Python script in ~/.claude/hooks/ that reads every text delta and rewrites it before it reaches the screen. Configuration goes in ~/.claude/settings.json. The post gathered 378 upvotes and 429 comments on Hacker News.
Why it matters to you. If you use Claude in long conversations, you recognize the problem: certain formulas come back dozens of times, and eventually they distract. The method works to neutralize the symptom, but it reveals something bigger: a model’s tone is a design choice, not a natural fact. The linguistic tics you see are the result of post-training (as we covered in the Constitutional AI paper), and anyone who finds them unbearable can fix them locally instead of waiting for Anthropic to refine them. On the practical side, the hook is interesting for another use: process output before it reaches the user — for instance adding timestamps, translating on the fly, or archiving a copy.
If you want to try it. The original script is at jola.dev/posts/how-to-stop-claude-from-saying-load-bearing. Copy the Python to ~/.claude/hooks/wordswap.sh, make it executable (chmod +x), and add the JSON block to ~/.claude/settings.json. Works on macOS, Linux, and Windows (with WSL or Git Bash). The script above doesn’t replace phrases inside code or JSON: substitutions apply only to natural text.
In detail
Where the problem comes from
Language models learn to write by observing billions of texts, then receive a second round of training (RLHF or Constitutional AI) that pushes them toward certain tones. Claude was trained to be polite, thoughtful, and cautious, and those traits show up as recurring linguistic formulas. “Load-bearing” is a technical term Claude uses in generic contexts to mean “important”; “honest take” is a way of marking a personal statement; “you’re absolutely right” is a signal of agreement that can feel abundant. None of these is an error, but frequency turns them into noise.
Post-training doesn’t eliminate tics: it moves them. Anthropic could reduce the frequency of certain phrases by updating weights or the system prompt, but each intervention has trade-offs (less “load-bearing” might mean lower accuracy in software architectures, for example). The problem is studied: the paper on sycophancy shows that models trained to agree develop linguistic patterns that give them away.
How the hook works
Claude Desktop supports extension hooks: external scripts that read and transform content before it reaches the interface. The MessageDisplay type captures every “delta” of text (Claude generates in streaming) and lets you replace it with something else. Larsson’s script is a regex filter that searches for key phrases and replaces them with alternatives defined in a Python dictionary. The returned JSON contains hookSpecificOutput.displayContent, which Claude Desktop uses instead of the original text.
The mechanism doesn’t touch the model’s response: the cache and context window continue to see the original text. The substitution happens only in display, so if you copy the output or reuse it in a prompt, you get the modified version. This is a limitation for some workflows (for instance if you archive conversations) and an advantage for others (the model keeps behaving as trained, you just see a surface-level translation).
What the Hacker News discussion reveals
The 429 comments split into three camps:
- Those who see it as a necessary workaround: users who use Claude for long sessions (refactoring, technical analysis) and find repeated formulas annoying enough to prefer a filter instead of switching models.
- Those who prefer fixing it upstream: they suggest Anthropic should offer tone controls in settings, instead of forcing users to write scripts.
- Those who defend the original tone: they find recurring phrases harmless and think the annoyance is subjective. Some cite the “frequency illusion” phenomenon (you start noticing something and then see it everywhere).
The discussion also touches a broader theme: is a model’s voice modifiable by the end user? In a closed system the answer is no, but a local hook like this opens a middle ground. It doesn’t change the model, but it changes the experience, and for many that’s enough.
Practical implications
The method works beyond this specific case. A MessageDisplay hook can:
- Translate output on the fly into another language, useful for multilingual teams working on the same session.
- Add metadata to every response (timestamp, session ID) for audit or archival.
- Filter sensitive content before display, for instance hiding API keys or personal information the model reported by mistake.
The hook isn’t extensively documented in Claude Desktop’s official guide, and there are no stability guarantees across versions: Anthropic could change or remove the interface without notice. Anyone using it for production cases should monitor updates.
How much does it actually matter
The fact that such a simple script generated nearly 400 upvotes says two things. First: people using Claude intensively have strong opinions about its tone, and not all are positive. Second: there’s demand for tools that modify the experience of proprietary models without waiting for the vendor to change direction.
But the underlying problem remains: if a model needs a filter to be tolerable in long sessions, maybe post-training optimized for short conversation and neglected resistance over time. Users report similar patterns on other models (GPT has its tics, Gemini does too), so it’s not a unique weakness of Claude. It’s a feature of models trained to sound human: they tend to converge on formulas that work decently on average, and those formulas become visible when you generate thousands of lines.
If you want to avoid the problem without writing hooks, one path is to explicitly ask for a different tone in your system prompt or first message: “Respond directly, without courtesy formulas or agreement markers.” It works, but needs repeating at every new session, and the effect degrades in long threads. The hook is more stable because it operates after the model already generated, so it doesn’t depend on how well the model follows your initial instructions.