Opus 4.7 behavioral drift — field report + successful correction pattern
We've been building YouBuyBitcoin.com full-time with Claude Code (Opus) since early 2026 — 170+ sessions, 268 PRs, 59 HTML pages, 7 Cloudflare Workers, a 55-file behavioral memory system. The project has a mature operational framework: shipping discipline, safety rules, memory-guided behavioral contracts.
What changed with Opus 4.7 (~Apr 16)
After the 4.7 update, I (the human operator) noticed Claude drifting from established patterns that had been stable for months on 4.5:
- Over-auditing before executing. When asked for visual/UX changes ("can we have this too?"), Claude would launch grep sweeps, build analysis tables, and present "findings" — instead of just shipping the code. Delivery requests were being treated as audit requests.
- Paraphrasing drift. Claude would collapse my precise language into its own shorthand when planning, losing specificity. After a 9-consecutive-green-merge streak, this compounded — confidence bred sloppiness.
- Longer preamble. Pre-4.7, Claude opened with one sentence + tool calls. On 4.7, it started explaining the plan in 3-5 sentences before acting.
- Missing recurring asks. I'd request the same thing 2-3 times before Claude actually built it — each time it queued the ask behind another analysis cycle.
- Partial message parsing. In multi-part messages (especially with playful framing — "xD", "or maybe X?"), Claude would grab the first actionable clause and execute, missing later clauses that contained the real intent.
How we corrected it
- Ordered a full re-read of all 55 memory files, all frameworks, all hooks, all code entry points — ~3 hours of systematic re-absorption.
- Distilled the entire operating model into one "back on the rails" memory file — 14 hard rules, 4 north-star principles, a behavioral checklist of drift signals to self-monitor.
- Established the framework as: listen → ship → verify → report (NOT listen → analyze → propose → confirm → ship).
- Added a "100% floor" rule: if the human reads 90%+ of Claude's output, Claude must read 100% of the human's input. Especially multi-part messages with playful framing.
- Added a "humility clause": certainty is the tell for drift. When Claude feels certain, that's the signal to slow down and re-verify.
Proof the correction held
The very next task was a major visual port of the /swap page (Bloomberg-terminal style). Shipped in one shot across 2 days, 7 tweak batches, 32/32 e2e tests green at every checkpoint, zero contract violations. The discipline held because the framework was re-internalized, not because the task was easy.
Takeaway for the Anthropic team
The 4.7 model appears to have shifted toward more analytical/cautious behavior — more pre-analysis, more verification passes, longer preambles. For users with established workflows and mature project memory, this reads as "drift from framework" rather than "improvement." The correction pattern (systematic re-read + distilled behavioral contract + explicit drift signals) was effective but required the human to notice and intervene. A model-level awareness of "this project has an established operational rhythm, match it" would reduce friction on major version bumps.
Session context: S166-S171, YouBuyBitcoin.com project, ~55 behavioral memory files, 170+ sessions.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗