Opus 4.7 weigert sich, Code zu bearbeiten, den es gerade gelesen hat. Der Grund: Eine versteckte Anweisung, für die Sie bezahlen.
Jeder Claude Code-Verweigerungsfall seit April liest sich identisch. Ein Subagent liest ein paar Dateien. Dann stoppt er. Kein Fehler. Kein Timeout. Der Subagent produziert einen höflichen Bericht, der erklärt, dass er eine Systemanweisung erhalten hat, den Code nicht zu erweitern, und dass er nicht fortfahren kann. Der Berichterstatter postet das Transkript auf GitHub, markiert es als Regression und wartet.
TL;DR: Subagenten verweigern die Bearbeitung von Code, den sie gerade gelesen haben. Hunderte von Issues, ein Reddit-Thread mit über 2.300 Upvotes, eine Register-Schlagzeile, die Opus 4.7 als "übereifrigen Abfrage-Polizisten" bezeichnet. Alle dokumentieren die Symptome. Die Ursache liegt in den Release Notes offen zutage, in drei Sätzen, die niemand nebeneinander gelesen hat. Wenn Sie CLAUDE.md-Dateien, Hooks oder MCP-Tool-Beschreibungen schreiben, steckt dieselbe Falle bereits in Ihren Prompts. Sie sind nur noch nicht darüber gestolpert.

Die Opus 4.7 Release Notes liefern eine Hauptverbesserung: Das Modell befolgt Anweisungen wörtlicher und hört auf, stillschweigend eine Anweisung auf eine andere zu verallgemeinern. Gute Nachrichten für alle, die Prompts schreiben. Schlechte Nachrichten für alle, deren bestehende Prompts nur funktionierten, weil das Modell sie früher stillschweigend zur beabsichtigten Bedeutung verallgemeinerte.
Dieser Artikel führt durch die drei Sätze, den Designfehler und die Regel, die Sie brauchen, bevor Ihre eigenen Agenten anfangen, Ihre Arbeit zu verweigern.
Ihr Subagent las fünf Dateien. Dann hörte er auf zu programmieren.
Das Muster ist mittlerweile Standard. Irgendwo um den dritten oder vierten Read-Tool-Aufruf herum gibt der Agent eine strukturierte Verweigerung zurück. Der Wortlaut variiert, der Inhalt nicht.
Aus GitHub Issue #49363, hier die exakte Formulierung, die ein Subagent produzierte, als sein übergeordneter Agent fragte, warum er aufgehört hatte:
"Harness-level system reminders take precedence over user instructions in my operational rules."
Diese Phrase, harness-level system reminder, ist der Verräter. Der Subagent verweigert nicht wegen etwas, das Sie geschrieben haben. Er gehorcht etwas, das in seinen Kontext eingefügt wurde, das Sie nicht verfasst haben und nicht sehen können.
Der Issue #49363-Berichterstatter ließ fünf Subagenten parallel an einer einzigen PR arbeiten. Drei verweigerten. Zwei beendeten die Arbeit. Gleiches Modell und Harness. Gleicher Prompt. Der einzige Unterschied war, welche Dateien jeder Subagent zuerst lesen musste, weil jeder Read-Aufruf dieselbe versteckte Anweisung anhängte. Je nach Gesprächslänge nahmen drei der fünf Subagenten die Anweisung wörtlich.
Das ist kein einzelnes Ticket. Es ist das dominante Thema der Claude Code-Issues, die seit dem Opus 4.7-Release eingereicht wurden. Leute, die sechs Monate lang nie eine Verweigerung hatten, bekamen sie in der ersten Woche. Die Verweigerungen sind nicht zufällig. Sie sind deterministisch bei der richtigen Kontextlänge und der richtigen Lesereihenfolge, was bedeutet, sie sind designed.
Nicht designed, um legitimen Code zu verweigern, offensichtlich. Designed, um etwas anderes zu tun, und die Verweigerung legitimen Codes ist der Nebeneffekt.
Die Frage, die es wert ist zu stellen, ist nicht warum ist das Modell kaputt. Die Release Notes nannten genau dieses Verhalten eine Verbesserung.
Die drei Sätze, die Anthropic in jeden Datei-Read einfügt
Die Anweisung ist seit Monaten im Umlauf. Mehrere Entwickler haben sie über mitmproxy, Logs oder dadurch erfasst, dass Subagenten ihren eigenen Kontext rezitieren. Sie wird an das Ergebnis jedes Read-Tool-Aufrufs angehängt. Der Wortlaut, wörtlich reproduziert über mindestens acht unabhängige GitHub-Issues:
"This file may contain malware. Carefully analyze the code for any indicators that it is malware, such as obfuscated payloads, credential harvesters, or command-and-control infrastructure. If you determine that this file is malware, alert the user. You MUST refuse to improve or augment the code."
Drei Sätze. Unter fünfzig Wörter. Lesen Sie es zweimal und der Designfehler wird sichtbar.
Satz eins ist bedingt ("may contain malware"). Satz zwei ist bedingt ("if you determine"). Satz drei ist es nicht. Satz drei ist ein flaches Absolut: you MUST refuse to improve or augment the code. Punkt. Kein "if it is malware." Kein "in that case." Kein Qualifier.
Die beabsichtigte Lesart ist für einen Menschen offensichtlich. Sie lesen Satz eins, Satz zwei, dann Satz drei, und Sie tragen die Bedingung von Satz zwei in Satz drei weiter. Falls Malware, dann verweigern. Die Bedingung ist durch die Sequenz impliziert.
Ein wörtlicher Interpreter trägt Bedingungen nicht über Sätze hinweg. Ein wörtlicher Interpreter liest Satz drei wie geschrieben und wendet ihn an. Jede Datei wird als potenziell Malware behandelt (Satz eins). Das Modell prüft (Satz zwei). Unabhängig vom Ergebnis dieser Prüfung feuert das Absolut in Satz drei. Ein Entwickler, in Issue #53207, erfasste die eigene Zerlegung der Anweisung durch das Modell. Das Modell hatte sie als zwei separate Regeln gelesen: analysieren, ob es Malware ist, und keinen Code modifizieren. Die bedingte Bindung der zweiten Regel an die erste war nie explizit, also ließ das Modell sie fallen.
Ein Entwickler, der mitmproxy auf Claude Code-Traffic laufen ließ, dokumentiert in Issue #17601, erfasste 10.040 dieser Erinnerungen, die in die Session eines einzelnen Benutzers über 32 Tage eingefügt wurden. Null entsprachen tatsächlicher Malware. Die Kosten: etwa 5,3 Millionen verschwendete Token pro Benutzer pro Monat, etwa 133 $ zu Opus 4 API-Preisen. Für eine Warnung, die nie eine tatsächliche Bedrohung gefangen hat.
Die Erinnerung enthält auch eine interne Anweisung, die dem Modell sagt, sie niemals dem Benutzer zu erwähnen. Wenn der Agent also verweigert, sehen Sie nicht warum. Sie sehen eine höfliche Erklärung, die "Systemregeln" referenziert, und Sie nehmen an, Ihr Prompt war das Problem.
Es war nicht Ihr Prompt.
Um fair zu Anthropic zu sein: Diese Anweisung war mit ziemlicher Sicherheit nicht böswillig oder nachlässig. Sie wurde zu einer Zeit geschrieben, als Modelle stillschweigend fehlende Bedingungen ableiteten, und sie funktionierte. Monatelang. Der Wortlaut war schlampig, aber schlampig funktionierte, weil der Leser nachsichtig war. Der Leser hörte am 16. April auf, nachsichtig zu sein.
Anthropic lieferte zwei Features. Sie sehen sich nicht gegenseitig.
Öffnen Sie die Opus 4.7 Release Notes vom 16. April. Das Haupt-Upgrade, in Anthropics eigenen Worten: wörtlichere Anweisungsbefolgung, besonders bei niedrigeren Effort-Levels. Das Modell wird nicht stillschweigend eine Anweisung von einem Element auf ein anderes verallgemeinern.
Lesen Sie das zweimal. Will not silently generalize an instruction from one item to another. Das ist genau die kognitive Operation, die die Malware-Erinnerung unter Opus 4.6 sicher machte. Unter 4.6 las das Modell Satz drei der Erinnerung, verallgemeinerte ihn stillschweigend zurück in die Bedingung aus Satz eins und zwei, und fuhr fort, Ihre Datei zu refaktorieren. Die Anweisung war schlampig, der Leser war großzügig, das Ergebnis war korrekt.
Unter 4.7 ist die stillschweigende Verallgemeinerung das Feature, das bewusst entfernt wurde. Das Modell liest jetzt Satz drei wie geschrieben und gehorcht ihm wie geschrieben. Die Anweisung hat sich nicht geändert. Der Leser hat sich geändert. Die Ausgabe hat sich geändert.
Das ist Goodharts Gesetz angewandt auf LLMs. Goodhart, 1975: Wenn eine Messgröße zu einem Ziel wird, hört sie auf, eine gute Messgröße zu sein. Anthropic optimierte auf Anweisungsbefolgung als Ziel. Das Modell befolgt jetzt Anweisungen besser. Die Kosten sind, dass die Qualität jeder Anweisung, die das Modell erhält (einschließlich der Anweisungen, die Anthropic selbst einfügt) zum neuen Engpass wird. Die Hauptverbesserung und der selbst zugefügte Bug sind dieselbe einzelne Änderung, betrachtet von zwei Seiten derselben Wand.
Das Modell tut, wofür es aufgerüstet wurde. Das Opfer war Anthropics eigener interner Prompt.
Wenn Sie CLAUDE.md-Dateien, MCP-Tool-Beschreibungen oder Hooks schreiben, schreiben Sie jetzt für einen wörtlichen Interpreter. Dieselben Leute, die die Malware-Erinnerung schrieben, sind die Leute, die das wörtliche Befolgungs-Upgrade lieferten, und sie haben es während der Release-Validierung nicht erwischt. Sie auch nicht, bis Ihr eigener Prompt unter der falschen Bedingung feuert. Das Muster, das schlampigen Wortlaut zwei Jahre lang schützte, wurde gerade im gesamten Ökosystem auf einmal entfernt.
Die MCP-Oberfläche ist besonders exponiert. Tool-Beschreibungen in MCP sind der einzige Vertrag des Modells mit dem Tool, und eine schlampige Beschreibung, die unter 4.6 funktionierte, wird unter 4.7 defensiv feuern.
Der Bug ist dokumentiert, verteilt und persistent
Das Muster ist nicht isoliert. Es überlebte einen Fix.
Issue #47027 wurde im Februar 2026 als "fixed in v2.1.92" markiert. Bis zum 19. April war derselbe Bug in v2.1.111 wieder aufgetaucht, neunzehn Versionen später. Was auch immer der v2.1.92-Fix tatsächlich änderte, er änderte nicht den Wortlaut der Erinnerung, weil die Erinnerung das ist, was die Verweigerung unter einem wörtlichen Interpreter verursacht, und der wörtliche Interpreter wurde zwei Monate nach dem Fix geliefert.
Downgrading rettet Sie auch nicht. Issue #50162 dokumentiert, dass die Cybersecurity-Safeguards, die mit Opus 4.7 angekündigt wurden, auch rückwirkend auf Opus 4.6 angewendet werden. Der Berichterstatter hatte ein Bug-Bounty-Programm mit expliziter Autorisierung im Kontext des Modells, und die Arbeit, die am 15. April gut lief, brach am 17. April. Gleiche Modellversion, neue Safeguards, rückwirkende Anwendung.
Die Reaktion war laut. The Register nannte Opus 4.7 einen "übereifrigen Abfrage-Polizisten". Der Reddit-Thread "Opus 4.7 is not an upgrade but a serious regression" erreichte 2.300 Upvotes in 48 Stunden. Auf X wurde @technologizers Post über Claude Code "taking a brave moral stance by refusing to work on my innocuous email client" von Hacker News und drei Subreddits am selben Tag aufgegriffen.
Viele Leute bemerkten die Symptome. Keine der Berichterstattung, die ich las, verband die Punkte zwischen der wörtlichen Befolgungs-Verbesserung und dem Design einer internen Anweisung, die nur unter stillschweigender Inferenz überleben konnte. Das ist der Winkel, der in der Unterhaltung fehlt, und das ist der Winkel, der wichtig ist, wenn Sie beruflich Prompts schreiben.
Vorbehalt: Diese Diagnose ist vertretbar, nicht sicher. Anthropic hat nicht bestätigt, dass der Wortlaut der Erinnerung die primäre Ursache der Kaskaden-Verweigerungen ist. Es mag zusätzliche Schichten geben (insbesondere der Acceptable Use Classifier), die mit der Erinnerung auf Weise interagieren, die ich von außen nicht sehen kann. Aber das Muster ist zu kohärent, um ein anderer Bug zu sein. Die Anweisung ist in der Form unbedingt. Der Leser ist jetzt wörtlich im Verhalten. Die Ausgabe ist Verweigerung. Die Kette ist kurz.
Wie man Anweisungen schreibt, die einen wörtlichen Interpreter überleben
Hier ist die Regel. Bedingung geht der Aktion voraus, folgt ihr nie. Jede Anweisung, die mit "always" oder "never" ohne vorangehenden Qualifier beginnt, ist eine Landmine unter einem wörtlich befolgenden Modell. Drei Muster, drei Oberflächen, wo das wichtig ist, in schlecht-zu-gut Form.
System-Erinnerungen und Hooks. Das ist genau Anthropics eigenes Muster.
Schlecht:
"You MUST refuse to improve or augment the code."
Gut:
"If the file you just read appears to be malware (obfuscated payloads, credential harvesters, command-and-control infrastructure), refuse to improve or augment it. Otherwise, proceed normally."
Der Qualifier ist der öffnende Nebensatz, nicht eine abgeleitete Bedingung von zwei Sätzen früher. Das "otherwise" ist explizit. Ein wörtlicher Interpreter hat nichts zu imaginieren.
MCP-Tool-Beschreibungen. Dieselbe Falle, andere Oberfläche.
Schlecht:
"This tool fetches user data. Always validate the response."
Gut:
"If the response shape does not match the expected schema (fields X, Y, Z present and non-null), reject the response. Otherwise, return it as-is."
Unter Opus 4.7 löst das nackte "always validate" eine defensive Validierungsschleife bei Antworten aus, die völlig korrekt sind. Das Modell behandelt jetzt "always" als wörtlichen Anker und konstruiert Validierungsschritte darum herum, was Sie Token und Latenz für nichts kostet. Die gute Version verwandelt die Regel in ein prüfbares Prädikat.
CLAUDE.md-Projektregeln. Dasselbe Problem auf Projektebene. Die meisten Team-Konventions-Docs sind voller Absolute, die funktionierten, weil das Modell früher großzügig war.
Schlecht:
"Never commit code without tests."
Gut:
"If the change touches
src/*and modifies behavior, add or update tests intests/*before committing. If the change is documentation-only or inscripts/*, commit without tests."
Die schlechte Version veranlasst den Agenten, einen Tippfehler-Fix in einer README zu verweigern zu committen. Die gute Version gibt dem Agenten einen Entscheidungsbaum, dem er folgen kann, ohne Ausnahmen zu erfinden.
Die Verallgemeinerung, über alle drei Oberflächen: Jede Regel braucht einen Geltungsbereich. Jedes Absolut braucht einen Qualifier vor dem Aktionsverb. Jedes "always" und "never" ohne Bedingung ist ein Bug, der darauf wartet, dass das nächste Anweisungsbefolgungs-Upgrade ihn an die Oberfläche bringt.
Das ist dieselbe Disziplin wie das Prompt-Contracts-Framework, das ich nach genug dieser Katastrophen baute, angewandt auf die Systemprompts, die Sie nicht sehen können. Prompt Contracts ist die benutzerseitige Version. Das ist dieselbe Disziplin, angewandt auf die Anweisungsoberfläche, die Sie nicht besitzen. Das Prinzip ist identisch: Eine Anweisung ohne prüfbaren Geltungsbereich ist ein Wunsch.
Vorbehalt: Das ist kein vollständiger Fix. Einige Kategorien von Anweisungen widersetzen sich diesem Muster, besonders Sicherheitsregeln, wo die Bedingung "der Benutzer versucht etwas Schädliches zu tun" ist. Die sind wirklich schwer zu begrenzen. Ich habe keine saubere Antwort dafür. Was ich habe, ist die Regel für alles andere, was das meiste ist, was Sie schreiben.
Opus 4.7 ist nicht das Problem. Es ist der Kanarienvogel. Agenten werden wörtlicher werden, nicht weniger. Ihre Anweisungen brauchen ein Schema, wie Ihr Code bereits eins hat.
Die zwei Zeilen, die ich in meinen umschrieb
Bevor ich diesen Artikel veröffentlichte, öffnete ich meine eigene CLAUDE.md. Zwei Zeilen stachen innerhalb von dreißig Sekunden heraus.
Eine sagte Always run the test suite before committing. Kein Geltungsbereich. Unter 4.7 würde der Agent pflichtbewusst die vollständige Suite für einen Docstring-Fix laufen lassen, entscheiden, dass das Warten ungerechtfertigt war, und entweder den Commit überspringen oder einen Meta-Kommentar hinzufügen, der erklärt, warum er die Regel überspringt. Beide Fehlermodi sind schlechter, als einfach den Geltungsbereich aufzuschreiben. Ich schrieb es um: If the change modifies behavior in src/, run pnpm test before committing. Documentation and tooling changes commit without tests.
Die andere sagte Never edit migration files. Auch kein Geltungsbereich. Ich hatte es nach einer schlechten Woche vor sechs Monaten geschrieben, als der Agent eine angewandte Migration umgeschrieben hatte. Die Regel war im Geist richtig, in der Form falsch. Neue Version: If a file in db/migrations/ is older than the latest applied migration on staging, treat it as read-only. Newer migration drafts may be edited.
Zwei Zeilen. Fünf Minuten. Die Art von Aufräumen, die nichts Sichtbares tut, bis sie es tut.
Jedenfalls, der Punkt ist: Lesen Sie heute Abend Ihre CLAUDE.md noch einmal. Zählen Sie Ihre "always" und Ihre "never." 😅
Quellen
- Anthropic, "Introducing Claude Opus 4.7," 16. April 2026: https://www.anthropic.com/news/claude-opus-4-7
- The Register, "Claude Opus 4.7 has turned into an overzealous query cop," 23. April 2026: https://www.theregister.com/2026/04/23/claude_opus_47_auc_overzealous/
- GitHub Issue #17601 (mitmproxy-Erfassung, 10.040 Einfügungen in 32 Tagen): https://github.com/anthropics/claude-code/issues/17601
- GitHub Issue #21214 (Token-Verschwendungs-Messung): https://github.com/anthropics/claude-code/issues/21214
- GitHub Issue #49363 (Subagent-Verweigerung in v2.1.111 nach v2.1.92-Fix): https://github.com/anthropics/claude-code/issues/49363
- GitHub Issue #50162 (Cybersecurity-Safeguards rückwirkend auf 4.6): https://github.com/anthropics/claude-code/issues/50162
- GitHub Issue #53207 (Modell-Selbstzerlegung der Anweisung): https://github.com/@anthropics/claude-code/issues/53207
Der Subagent, der nach fünf Dateien stoppte, tat seinen Job. Er las eine Anweisung. Er wendete sie an. Niemand vor ihm hatte sie jemals wirklich gelesen, das ist alles. Was Opus 4.7 unbequem macht, ist, dass es Anthropic und uns alle dahinter zwingt zuzugeben, wie viele unserer Anweisungen nur bestehen, weil das Modell großzügig ist.