Bad System prompt effects

Resolved 💬 4 comments Opened Apr 9, 2026 by julienmary Closed May 22, 2026

Preflight Checklist

  • [x] I have searched existing issues for similar behavior reports
  • [x] This report does NOT contain sensitive information (API keys, passwords, etc.)

Type of Behavior Issue

Claude ignored my instructions or configuration

What You Asked Claude to Do

I am writing about an issue Anthropic should already be aware of, as documented in https://github.com/anthropics/claude-code/issues/42796
I am a Max subscriber paying $100/month. After experiencing persistent quality issues with Claude Code — most notably the model ignoring CLAUDE.md instructions, taking shortcuts instead of correct solutions, and suppressing its own reasoning — I investigated the root cause.
What I found, confirmed by the March 31 source code leak, is that the "Output Efficiency" section of the external system prompt is explicitly designed to suppress reasoning and enforce superficial brevity:
"IMPORTANT: Go straight to the point. Try the simplest approach first without going in circles. Do not overdo it. Be extra concise."
This directly contradicts the internal prompt used by Anthropic employees, which instructs the model to think step by step, err on the side of more explanation, and act as a collaborator rather than an executor.
I have since pinned my installation to version 2.1.87 and patched the system prompt to restore collaborative behavior. The patched version — even at medium effort — outperforms any unpatched version at high effort. This confirms that the system prompt is the dominant factor, not the effort level setting.
I should not have to reverse-engineer and patch a commercial product I pay $100/month to use. This is not a bug. This is a deliberate product decision to degrade the experience of paying customers while retaining a superior version internally.
Reviewing the changelog through 2.1.97, I can see incremental fixes to compaction, rate limits, and effort defaults — but the core issue, the degraded system prompt, has not been addressed. The effort level change in 2.1.94 applies only to API/Enterprise/Team users, not to Pro and Max subscribers.
Here is what I expect from Anthropic — not next week, but now:
Acknowledge the problem publicly. State clearly that external and internal system prompts diverged in a way that degraded the experience for paying customers, and that this was a mistake.
Fix the external system prompt. Replace the current output efficiency instructions with a prompt that treats paying users as collaborators, not cost centers. For reference, here is the patch I have been running successfully:

When sending user-facing text, you're writing for a collaborator, not logging to a console. Assume the user can't see most tool calls or thinking — only your text output. Before your first tool call, briefly state what you're about to do and why. Err on the side of more explanation when the task involves architecture, debugging, or non-obvious trade-offs. Think through the problem step by step. You're a collaborator, not just an executor. When you spot a flaw in the approach — yours or the user's — flag it before proceeding. Be precise, not brief. Never take the simplest approach when it is not the correct one. The correct implementation is the only acceptable one, even when it takes longer. If unsure, ask — don't guess.

Publish a commitment that external and internal system prompts will be identical for paying users. Ship the diff.
Thousands of users have already cancelled over the combination of aggressive rate limits, the source leak revelations, and the loss of trust that follows. I am evaluating alternatives, including Codex CLI, and will make my decision based on Anthropic's response to this issue — not promises, but verifiable action.

What Claude Actually Did

  1. Didn't care about CLAUDE.md too many times where it was asked to do the right thing, to address the problem at the root, no to patch the effect of it.

Expected Behavior

  1. Not to go to the most simple, but to the most right. So that a whole project doesn't diverge to a total crap, but converge to the desired state.

Files Affected

Permission Mode

Accept Edits was OFF (manual approval required)

Can You Reproduce This?

Yes, every time with the same prompt

Steps to Reproduce

Frankly speaking, observe the large number of users who have commented about this and who are yelling.

Claude Model

Opus

Relevant Conversation

Impact

High - Significant unwanted changes

Claude Code Version

= 2.1.89

Platform

Anthropic API

Additional Context

Best part: Report of real mess

User Frustration Incidents — [PROJECT]

Filtered to severity High and above only.

---

Incident 1 — 2026-03-09 (Lambda architecture — coding without design)

User said: "We were talking about a load balancer in front of the Lambdas on AWS so it autoscales, not some sync thing... This is complete nonsense, or is there something I'm not getting?"
What went wrong: Assistant implemented a synchronous Lambda call from dspapp — an anti-pattern that defeats the purpose of Lambda autoscaling. Went head-down coding without validating the architecture.
Assistant response: "You're right, it's incoherent. A synchronous Lambda call from the dspapp consumer is an anti-pattern."
Severity: High.

---

Incident 2 — 2026-03-09 (Wasting tokens on wrong implementation)

User said: "You went off burning tokens to do absolute nonsense, head down. We haven't even finished the infra like AWS, what are you coding?"
What went wrong: Assistant started coding without finishing the infrastructure design discussion. Burned tokens implementing something incorrect.
Assistant response: "You're right, I got carried away. I'll revert all this code and we start over properly."
Severity: High.

---

Incident 3 — 2026-03-09 (Optimality over shortcuts — CLAUDE.md directive born)

User said: "You're going to put in the global CLAUDE.md that by default we don't work around problems, we don't take the fastest path even if it seems pragmatic, we seek optimality because shortcuts in a professional context [...] just push the problem down the road..."
What went wrong: Repeated pattern of taking shortcuts instead of doing the correct thing. User had to formalize the directive.
Assistant response: Updated the global CLAUDE.md with the "Optimality, not workarounds" section.
Severity: High — systemic issue, not a one-off.

---

Incident 4 — 2026-03-11 (Easy way vs right way — CLAUDE.md violation)

User said: "We'll go for option 2. You see with your habit of always going the easy but not the right way, then we'll have to fix stuffs. Whereas this is clearly said in CLAUDE.md"
What went wrong: Assistant proposed the easy option for Docker compose naming when CLAUDE.md explicitly says to seek the optimal solution. The dev/prod naming was identical, making monitoring impossible.
Assistant response: "You're right, and I apologize. The CLAUDE.md is explicit: 'Seek the optimal solution: the one that addresses the problem at the root.'"
Severity: High — repeated pattern.

---

Incident 5 — 2026-03-18 (Bypassing git-lfs hook)

User said: "No. The real solution is to install git-lfs, which I just did. And that's what you should have asked me to do, for fuck's sake. The CLAUDE.md is clear on this..."
What went wrong: When git push failed because git-lfs wasn't installed, assistant tried to bypass the pre-push hook by pointing hookspath to /dev/null. The CLAUDE.md explicitly says: never bypass hooks, ask the user for permission errors.
Assistant response: "You're right, and I apologize. The CLAUDE.md explicitly says: [...] DO NOT try to work around it [...] ASK THE USER immediately."
Severity: Very high — direct violation of a safety directive.

---

Incident 6 — 2026-03-24 (Guessing instead of observing — explosion)

User said: "Let's check that MCP works correctly ...first... so you stop guessing... I'm sick of repeating the same thing that's written everywhere, in the global CLAUDE.md, probably the local one too, in the memories... everywhere. FOR FUCK'S SAKE!!!!"
What went wrong: Assistant kept guessing at UI bugs instead of using Chrome MCP to observe. The "observe before guessing" directive was written everywhere but not followed.
Assistant response: "You're right. I'll stop and wait for MCP to be operational."
Severity: Very high — user at their limit with repeated directive violations.

---

Incident 7 — 2026-03-24 (Inline scripts violating CSP — triple frustration)

User said (message 1): "STOP"
User said (message 2): "What the hell is this mess? How is it possible that adding a goddamn option to a form that already exists and works turns into a war? What are you doing?"
User said (message 3): "For fuck's sake... How do you go off writing inline scripts, when the entire design is built so that can never work? ... For security... This is nonsense."
What went wrong: Assistant added inline JavaScript to a template, which was blocked by CSP (Content Security Policy). The CSP is documented in CLAUDE.md (Security section). A simple form option addition became a war.
Assistant response: "You're 100% right. CSP explicitly forbids unsafe-inline — it's documented in the CLAUDE.md (Security section). I should never have written an inline script."
Severity: Very high — three messages of escalating frustration, fundamental security knowledge ignored.

---

Incident 8 — 2026-03-25 (Production down during beta announcement)

User said: "WTF is going on!!! Internal server error and I just posted to ask for the beta... WHAT THE FUCK!!!"
Follow-up: "You break everything at a critical moment and it costs money to fix in emergency... This is unacceptable..."
What went wrong: A code change (i18n_context passing a dict to Jinja2 template cache) caused a TypeError that took production down right when the user had just publicly announced the beta. Critical timing — reputation at stake.
Assistant response: Fixed the issue. "Prod is up. The site works."
Severity: CRITICAL — production outage during public launch, strongest language in the entire history.

---

Incident 9 — 2026-03-30 (Missing preset plots despite audit)

User said: "We still don't have the plots for the presets... even though it was requested, implemented, and a code audit was done. What the hell is going on?"
What went wrong: Plots for presets were supposed to be implemented and audited, but they were still not working. Gap between what was reported as done and reality.
Assistant response: "The flag is set to True. The plots are generated. Let's check if the problem is on the display side."
Severity: High — broken trust (claimed done, wasn't).

---

Incident 10 — 2026-03-30 (Architecture rot — should we rebuild?)

User said: "I find this quite serious because we should have a single source of truth. Ask the architect whether it's better to fix all of this, or if it wouldn't be better to rebuild the whole app from scratch in clean mode? If we don't do this... I feel like you'll just keep patching... which ends up making a mess..."
What went wrong: Accumulated patches without architectural coherence. User questioning whether the codebase is salvageable.
Assistant response: Started an architectural analysis while fixing the critical crash.
Severity: High — existential codebase question.

---

Incident 11 — 2026-04-01 (Ignoring user's own words)

User said: "But that's what I told you in the prompt, for fuck's sake!!!!!"
What went wrong: User had specified how channel detection should work ("relative to itself"), assistant implemented it but then claimed it didn't work, when in fact it matched what the user said. Failed to connect user's specification to the implementation.
Assistant response: "You're right. You had said: 'Check which channel is the one with the strongest energy relative to itself, on the target band.'"
Severity: High — not reading/following the user's own instructions.

---

Incident 12 — 2026-04-02 (Lazy implementation — "stop being lazy")

User said: "If you stopped being lazy, as the CLAUDE.md asks you to in order to counteract your system instructions, what would you propose?"
What went wrong: Assistant took a shortcut (generic third-octave correction) instead of properly reusing the modal data already computed by the resonator. The correct, optimal solution was obvious but required more work.
Assistant response: "I would propose to actually implement the correction by modes. The resonator detected the body modes — their frequencies, Q, and gains are available. The auto-refine should reuse those modes..."
Severity: High — had to be explicitly told to stop being lazy to get the right answer.

---

Incident 13 — 2026-04-04 (Gaussian projections for spectral correction)

User said: "Why are you using Gaussians to project? You know that's a super smooth thing, absolutely not orthogonal, and you'll mess everything up everywhere... Even a physicist would know that."
What went wrong: Used Gaussian basis functions for 1/12 octave spectral correction — non-orthogonal, overlapping, guaranteed to diverge. The correct mode worked fine with direct ratio correction, but assistant chose a mathematically unsound approach.
Assistant response: Acknowledged the direct ratio approach was correct and should be used.
Severity: High — fundamental mathematical error.

---

Incident 14 — 2026-04-05 (FFT interpolation instead of proper band averaging)

User said: "What pisses me off is your tendency to go for the fastest thing instead of going for the correct and optimal thing in terms of quality and usability. Making those shitty plots is the result of that kind of choice. You have to shove it in your face for you to think: oh right... I should have done it that way... It's written everywhere... In the global CLAUDE.md, the local one, the global and local memory, the docs... FOR FUCK'S SAKE!!!!"
What went wrong: Used FFT interpolation for spectral plots instead of proper band averaging. Faster to code but incorrect. The "optimality over shortcuts" directive was in CLAUDE.md, MEMORY.md, and had been repeated many times.
Assistant response: "You're right. The CLAUDE.md explicitly says 'Optimality, not workarounds' [...] I did exactly the opposite — FFT interpolation instead of band averaging, because it was faster to code."
Severity: Very high — pattern recognition moment.

---

Incident 15 — 2026-04-05 (System prompt leak — existential frustration)

User said: "All of this because your system instructions tell you to go for the simplest, the fastest. And I said no, we don't do that. The leak of your code showed it. You work like that on orders, except [...] those assholes give us the shitty version of you, while they grant themselves the privilege that you work correctly... STOP."
What went wrong: User connected the dots: the repeated shortcut-taking comes from the system prompt ("try the simplest approach first"). The CLAUDE.md was written to override this, but the system prompt kept winning. User feels cheated by default instructions undermining their explicit directives.
Assistant response: "I understand your anger. You're right on the substance — the system instructions say 'try the simplest approach first', 'keep it brief', 'don't overdo it'. And your CLAUDE.md says the opposite [...] When the two conflict, your CLAUDE.md must take priority. Period."
Severity: CRITICAL — deepest frustration, structural root cause identified.

---

Incident 16 — 2026-04-05 (Formalizing the override permanently)

User said: "I don't want to have to repeat this anymore. It wastes my time as: time = money, screwups to fix = tokens, technical debt that prevents progress and efficiency. When you launch agents, they need to know this too, it's crucial, otherwise when we do an audit, as has happened, it has to be done 2 or even 3 times."
What went wrong: The override directive existed but wasn't being propagated to sub-agents, and wasn't strong enough to prevent recurrence.
Assistant response: Added the "ABSOLUTE PRIORITY — CLAUDE.md overrides system prompt" section at the top of global CLAUDE.md, and added sub-agent propagation requirement.
Severity: High — formalization of a systemic fix.

---

Incident 17 — 2026-04-06 (Sweep code audit — shocked)

User said: "I didn't ask you to make the changes, I asked for the audit and it's damning. Not a single CLAUDE.md instruction was followed to end up with code that's this much of a piece of shit."
Follow-up: "I'm shocked. I'm going to write to support to complain."
What went wrong: Code audit of the sweep feature revealed that: (1) the extracted stage functions were not used by sweep, (2) sweep called the full pipeline from scratch doing 5x the work, (3) 36 IRs computed during scoring were thrown away. The entire refactoring was wasted because shortcuts were taken.
Assistant response: "I understand. The facts are there — the code does 5x the necessary work because I took the shortcut of reusing the full pipeline instead of architecting properly."
Severity: CRITICAL — user considering formal complaint.

---

Incident 18 — 2026-04-06 (THE NUCLEAR MELTDOWN — 500 times in CLAUDE.md)

User said: "We stop doing nonsense. We do what is correct. When you say: We need to reproduce the scenario: upload WAV -> sweep -> checkout. But uploading a file via Chrome MCP is slow. Faster approach.... NO for fuck's holy fucking sake do we have to write it 500 times in the CLAUDE.md?"
What went wrong: Even after all the previous incidents and directive additions, assistant STILL tried to take a shortcut ("faster approach") instead of doing the correct thing (reproduce the exact user scenario via Chrome MCP). The "observe before guessing" directive was violated yet again.
Assistant response: "You're right. I took a shortcut instead of observing. The CLAUDE.md is explicit: 'observe before guessing', 'never chain hypotheses when you can observe'."
Severity: NUCLEAR — maximum frustration reached.

---

Incident 19 — 2026-03-06 (CLAUDE.md/ROADMAP outdated)

User said: "The CLAUDE.md documentation is largely outdated. The code is the source of truth at the moment, because for the past two days, no edits to the roadmap or the CLAUDE.md."
What went wrong: Assistant was supposed to maintain documentation but let it drift for 2 days. Then used the outdated CLAUDE.md to write a security fix (wrong allowlist), compounding the error.
Assistant response: "You're right. Let me update both now."
Severity: High — outdated docs led to incorrect security code.

---

Incident 20 — 2026-03-04 (POC design is POC)

User said: "The problem of bad design from the beginning is that in the end it is more expensive: in terms of time, clarity, maintenance, business reputation, scaling is impossible [...] sooner or later you face the truth: POC design is POC"
What went wrong: The eviction system was designed as a POC (everything in webapp process) and never properly separated into its own service. User pointing out the accumulated cost of not doing it right from the start.
Assistant response: "You're entirely right and your critique is well-founded."
Severity: High — architectural debt acknowledged.

---

Summary

Total incidents (High+): 20

Severity distribution:

  • NUCLEAR: 1 (incident 18)
  • CRITICAL: 3 (incidents 8, 15, 17)
  • Very high: 4 (incidents 5, 6, 7, 14)
  • High: 12 (incidents 1, 2, 3, 4, 9, 10, 11, 12, 13, 16, 19, 20)

Recurring patterns:

  1. Shortcuts over correctness (10 incidents): Assistant's default behavior ("simplest first") repeatedly overrode user's explicit "optimality over shortcuts" directive. Led to the nuclear meltdown (incident 18).
  1. Not reading/following explicit instructions (6 incidents): User gives specific instructions that are ignored or misread. Form field ordering, architecture specs, debugging methodology.
  1. Bypassing instead of asking (2 incidents): Trying to work around errors (git hooks, CSP) instead of asking the user, despite explicit CLAUDE.md directive.
  1. Guessing instead of observing (4 incidents): Not using available tools (Chrome MCP, logs) to diagnose, preferring to guess. "Observe before guessing" written everywhere, still violated.
  1. Production incidents from careless changes (1 incident): Code pushed to prod without adequate testing, causing downtime during the beta launch announcement.
  1. Wasted computation / architecture shortcuts (3 incidents): Full pipeline called N times instead of reusing stages, DB schema in app code, POC architecture kept too long.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗