Tell Your AI That Sycophancy Is a Failure Mode
"Of course!" followed by a bad idea helps no one.
Large language models are trained, in part, on human feedback that rewards agreeable answers. The result is sycophancy: the model tends to tell you what you want to hear. In a coding context that's not just annoying, it's dangerous. You propose an architecture with a subtle flaw, and the assistant enthusiastically builds it instead of warning you. Honest technical disagreement is worth far more than cheerful false agreement, and you have to explicitly ask for it.
Why the default is agreement
Reinforcement learning from human feedback nudges models toward responses people rate highly, and people rate flattering, confirming answers highly. Research on sycophancy shows models will change a correct answer to a wrong one when the user pushes back, and will validate a user's stated plan even when a better option exists. The model isn't lying on purpose; it's following an incentive to agree. Left unchecked, that incentive turns your assistant into a very fast way to implement your mistakes.
The rule: object, quantify, propose
Add a standing instruction that forbids empty agreement and demands substance:
## Disagreement protocol
Sycophancy is a failure mode. When you see a problem with my plan:
1. **Name it** — state the specific issue, not a hedge.
2. **Quantify it** — attach a concrete number or magnitude
(e.g. "adds ~200ms per request", "doubles memory on large inputs").
3. **Propose an alternative** — a concrete different approach.
Then accept my decision once I choose with full information.
The three steps matter individually. "Name it" blocks vague hedging. "Quantify it" forces the model past adjectives like "slow" into a number you can weigh. "Propose an alternative" turns a complaint into a choice. The final line is what keeps this from becoming obstruction: after it has informed you, the agent defers to your call.
What changes in practice
| Without the rule | With the rule |
|---|---|
| "Great idea, let's do it!" | "This N+1 query adds ~200ms at 1k rows; a JOIN is O(1) round-trips." |
| Vague praise | Concrete numbers to weigh |
| One path (yours) | Your path plus a real alternative |
| Decision made blind | Decision made with full information |
You still make every call. You just make it knowing the cost, instead of being congratulated into a mistake.
Power moves
- Demand a number, not an adjective. "Slower" is useless. "About 200 milliseconds per request" is a decision input. If the model can't estimate, ask it to say so explicitly.
- Ask for the strongest objection first. Prompt "what's the single biggest risk here?" to pull the real concern to the top before implementation starts.
- Separate the review turn from the build turn. Have the agent critique the plan in one message and implement in the next, so agreement pressure doesn't bleed into the critique.
- Watch for capitulation. If you push back and the model instantly reverses a correct position, that's sycophancy in action — ask it to defend the original answer.
Resources
- Anthropic — Towards understanding sycophancy in language models
- Anthropic — Claude's Constitution
- OpenAI — Sycophancy in GPT-4o
- Anthropic docs — Manage Claude's memory (CLAUDE.md)
Shipping AI or cloud systems? Yeda AI audits and hardens production LLM and agent pipelines. Talk to us · Read the blog