Sie haben in Claude Code gearbeitet, als plötzlich dieser Fehler auftauchte und die Sitzung komplett aufhörte zu reagieren?

API Error: 400 messages.3.content.40: `thinking` or
`redacted_thinking` blocks in the latest assistant message
cannot be modified. These blocks must remain as they were
in the original response.

Schlägt die Prüfung der signature eines zurückgesendeten thinking-Blocks fehl, erscheint stattdessen möglicherweise der Fehler unten. Beide haben denselben Ursprung: Der thinking-Block entspricht nicht mehr der ursprünglichen Antwort:

API Error: 400 messages.1.content.0:
invalid `signature` in `thinking` block

Das Üble daran: sobald er auftaucht, löst jede weitere Eingabe denselben Fehler aus. Sie tippen, drücken Enter, derselbe 400. Die Sitzung gerät in einen "festgefahrenen" Zustand. Es handelt sich um einen bekannten Bug mit mehreren offenen Issues im offiziellen Repository von Anthropic (#10199, #12225, #13012, #22278, #63147 und weitere).

Gleich vorweg: die Ursache ist "die Beschädigung der Extended-Thinking-Blöcke beim erneuten Senden des Gesprächsverlaufs". Thinking-Blöcke tragen eine kryptografische signature, und die API prüft, ob die zurückgesendeten Thinking-Blöcke unverändert der ursprünglichen Antwort entsprechen. Wenn ein Bug beim Neuaufbau des Verlaufs in Claude Code einen Block vom Original abweichen lässt, weist die API die Anfrage ab. Der schnellste Ausweg ist "zweimal Esc drücken und mit /rewind zu einem Checkpoint zurückkehren", oder eine neue Sitzung zu starten. Dieser Artikel behandelt den Mechanismus, die 5 Grundursachen, 3 Lösungen auf Nutzerseite, Gegenmaßnahmen für Entwickler und die Vorbeugung von Wiederholungen.

CLAUDE CODE · 400-FEHLER

Das Gesamtbild des Thinking-Block-Fehlers

— Wenn die "signature" nicht passt, weist die API das gesamte Gespräch ab

SYMPTOM
Sitzung festgefahren
Jede Eingabe wiederholt denselben 400
URSACHE
Signatur stimmt nicht
Zurückgesendetes Thinking weicht vom Original ab
SCHNELLSTER AUSWEG
Esc×2 → /rewind
Zurückrollen vor die Beschädigung

Ein bekannter Bug mit mehreren Issues im offiziellen Repo von Anthropic.
Der Kern: die strenge Regel der API, dass "Thinking-Blöcke exakt so bleiben müssen wie in der ursprünglichen Antwort".

1. Was diese Fehlermeldung wirklich sagt

Im Klartext sagt die Meldung: "Die thinking- oder redacted_thinking-Blöcke in der letzten Assistant-Nachricht können nicht verändert werden. Diese Blöcke müssen so bleiben, wie sie in der ursprünglichen Antwort waren."

Anders gesagt teilt Ihnen die API mit: "Der 'Thinking-Block' im Gesprächsverlauf, den Sie (der Client) mir geschickt haben, unterscheidet sich von dem, was ich letztes Mal zurückgegeben habe. Er wurde verändert. Deshalb akzeptiere ich ihn nicht." Die Claude-API geht davon aus, dass Sie in mehrstufigen Gesprächen "die vorherige Antwort in den Verlauf aufnehmen und unverändert zurücksenden" — und gerade der Thinking-Block unterliegt der strengen Auflage, "kein einziges Zeichen zu ändern". messages.3.content.40 ist eine Positionsangabe: "der 41. Inhaltsblock der 4. Nachricht" ist die Stelle des Problems.

Der wichtige Punkt: in den meisten Fällen ist dies KEIN Fehler in Ihrem Code oder Prompt. Die Hauptursache ist ein Bug in der Art, wie Claude Code den Gesprächsverlauf (das Session-JSONL) neu aufbaut und dabei die Thinking-Blöcke beschädigt. Sie müssen sich also nicht den Kopf zerbrechen, ob "ich es falsch benutze" — es ist ein bekannter Bug mit Workarounds.

2. Hintergrund: Extended Thinking und der "Signatur"-Mechanismus

Warum ist allein der Thinking-Block so streng? Der Grund liegt in der Funktionsweise von Extended Thinking.

Wenn Claude mit aktiviertem Extended Thinking antwortet, erzeugt es vor der Antwort einen "Thinking-Block". Das ist Claudes Zwischenüberlegung — das interne "Wie es gedacht hat", das die Qualität der finalen Antwort steigert. Diesem Block wird eine kryptografische signature zugewiesen — eine Art digitale Unterschrift, die garantiert, dass "dieser Denkinhalt tatsächlich von Claude erzeugt und nicht verändert wurde".

In mehrstufigen Gesprächen und Tool-Use-Schleifen wird jedes Mal der gesamte vorherige Austausch an die API zurückgesendet, und die Thinking-Blöcke müssen mitgeschickt werden. Laut offizieller Dokumentation enthält die signature eine verschlüsselte Kopie des vollständigen Denkprozesses: Die API prüft damit, ob ein zurückgesendeter Thinking-Block wirklich von Claude erzeugt wurde, und der Server entschlüsselt sie, um den ursprünglichen Denkprozess wiederherzustellen. Der sichtbare Thinking-Text ist nur eine Zusammenfassung, und bei neueren Modellen bleibt er in der Standardeinstellung (display: "omitted") leer. Der Wert der signature ist bei jeder display-Einstellung derselbe, und Text, den Sie in das thinking-Feld eines omitted-Blocks schreiben, wird ignoriert. Deshalb verlangt die Dokumentation, Thinking-Blöcke genau so zurückzugeben, wie sie empfangen wurden, ohne Änderungen. Fehlt die signature, ist sie beschädigt oder passt der Block nicht mehr zur ursprünglichen Antwort, weist die API diesen Thinking-Block zurück. Das ist der Kern des 400-Fehlers.

Warum es die signature gibt

Das Verhindern der Veränderung von Thinking-Blöcken blockiert prompt injection und das Fälschen von Gedanken. Es ist ein Sicherheitsmechanismus, der die Tatsache schützt, dass "Claude dies wirklich gedacht hat" — die Strenge hat einen Grund.

3. Warum es passiert — 5 Grundursachen

Die konkreten Szenarien für eine nicht passende signature lassen sich in fünf einteilen — synthetisiert aus den offiziellen Issues von Anthropic und Berichten aus der Community.

5 GRUNDURSACHEN

Fünf Grundursachen für eine nicht passende signature

URSACHE 1 · Bug bei Wiederaufnahme / Neuaufbau des Verlaufs
Wird eine Sitzung wiederaufgenommen oder ihr Verlauf neu aufgebaut, stimmen die zurückgesendeten Thinking-Blöcke nicht mehr mit der ursprünglichen Antwort überein. Der Verfasser von Issue #63147 vermutete die gespeicherte Form "leerer Text + signature" als Ursache, doch das ist bei neueren Modellen die reguläre Form (Abschnitt 5), und im Thread wird das bestritten. Eine offizielle Ursachenanalyse gibt es nicht.
URSACHE 2 · Verschachtelung beim Streaming
In langen Sitzungen verschachteln sich parallele oder schnell aufeinanderfolgende API-Antworten im JSONL. Fragmente verschiedener Nachrichten vermischen sich und die Blockreihenfolge bricht zusammen.
URSACHE 3 · Reparaturlogik läuft Amok
Der interne Verlaufsreparatur-Prozess von Claude Code ordnet Thinking-Blöcke um oder verändert sie. Eine gut gemeinte Reparatur zerstört am Ende die signature.
URSACHE 4 · Drittanbieter-Proxy/SDK
Relay-Proxys (CLIProxyAPI usw.) serialisieren Nachrichten neu und verändern das thinking. Die Hauptursache für "Invalid signature"-Fehler.
URSACHE 5 · Verlaufsänderung in der eigenen App
In Apps, die die API/SDK selbst aufrufen, das Löschen, Zusammenfassen oder Umformatieren von Thinking-Blöcken mitten in einer Tool-Use-Schleife vor dem Zurücksenden. Der häufigste Fehler bei Eigenimplementierungen.

Der rote Faden: weicht ein Thinking-Block auch nur um ein Byte vom Original ab, gibt es immer einen 400.
Die Ursachen 1 bis 4 sind Bugs von Claude Code / des Proxys; Ursache 5 ist ein Problem der Eigenimplementierung.

4. Drei Soforthilfen (für Claude-Code-Nutzer)

Wenn Ihre Sitzung festgefahren ist, probieren Sie drei Methoden in der Reihenfolge der Wiederherstellungsgeschwindigkeit.

3 LÖSUNGEN

Drei Lösungen nach Wiederherstellungsgeschwindigkeit

LÖSUNG 1 · /rewind (höchste Priorität)
Drücken Sie zweimal Esc, oder führen Sie /rewind aus. Gehen Sie zurück zum Checkpoint vor dem beschädigten Zug. Der beste Zug — stellt wieder her und bewahrt dabei den Kontext.
LÖSUNG 2 · Neue Sitzung
/clear oder starten Sie eine frische Sitzung. Am zuverlässigsten, verliert aber den Kontext. Notieren/committen Sie zuvor wichtige Arbeit.
LÖSUNG 3 · JSONL-Reparatur
Entfernen Sie alle Thinking-Blöcke aus dem Session-JSONL. Ein Community-Tool (siehe unten) entfernt nur das thinking und behält den Gesprächsverlauf. Ein fortgeschrittener Zug, der den Kontext bewahrt.

Probieren Sie zuerst LÖSUNG 1 (Esc×2 / rewind). Schlägt sie fehl, LÖSUNG 2. Müssen Sie den Kontext behalten, LÖSUNG 3.
Und aktualisieren Sie Claude Code stets auf die neueste Version (Anthropic behebt dies schrittweise).

Hinweis zu LÖSUNG 3: die Community hat ein "Claude Code thinking blocks fix"-Tool veröffentlicht (z. B. miteshashar/claude-code-thinking-blocks-fix auf GitHub). Es entfernt alle Thinking-Inhaltsblöcke aus dem Session-JSONL und beseitigt so das Signaturproblem, während der Gesprächsverlauf erhalten bleibt. Es lohnt sich, wenn Sie häufig darauf stoßen oder lange Sitzungen intensiv nutzen. Aber es ist ein inoffizielles Tool, also auf eigene Gefahr verwenden — sichern Sie das JSONL, bevor Sie es ausführen.

Die wichtigste dauerhafte Behebung ist, "Claude Code auf der neuesten Version zu halten". Führen Sie claude update aus oder folgen Sie den offiziellen Update-Schritten. Das Changelog von Claude Code verzeichnet in dieser Familie einen Fix nach dem anderen: vermischtes Streaming bei parallelen Agenten (2.1.47), vorbeugendes Entfernen veralteter signatures nach einem Modell- oder Login-Wechsel (2.1.152), veränderte Thinking-Blöcke mit Opus 4.8 (2.1.156) sowie das Verwerfen der Thinking-Blöcke mit einem einmaligen Neuversuch nach einem redacted_thinking-Fehler (2.1.282). Trotzdem soll #63147 laut Berichten auch unter 2.1.157 noch auftreten; der Issue ist mit Stand 4. Oktober 2026 offen. Älteren Versionen fehlen mehr dieser Fixes.

5. Für Entwickler: das Problem in der eigenen App vermeiden (API/SDK)

Wenn Sie selbst eine App bauen, die die Claude-API/SDK aufruft (Extended Thinking + Tool Use), stoßen Sie in Ihrer eigenen Implementierung auf denselben Fehler. Die offizielle Dokumentation fasst die Vorbeugung in einer Regel zusammen: jede Assistant-Antwort genau so zurückschicken, wie die API sie geliefert hat – samt thinking-Blöcken –, und neue Nachrichten nur am Ende anhängen.

// BAD 1: rebuilding the assistant message from picked block types
const rebuilt = {
  role: 'assistant',
  content: [
    ...response.content.filter(b => b.type === 'thinking'), // drops redacted_thinking
    ...response.content.filter(b => b.type === 'tool_use'),
  ],
};

// BAD 2: deleting thinking blocks that have empty text and only a signature
// On newer models this is the normal shape (display defaults to "omitted")

// GOOD: push the assistant message from the API untouched, then append
messages.push({ role: 'assistant', content: response.content }); // thinking, redacted_thinking and signatures included
messages.push({ role: 'user', content: [toolResult] });          // new messages go at the end only

① Ein thinking-Block mit leerem Text und nur einer signature ist normal. Bei neueren Modellen ist display standardmäßig "omitted": Das vollständige Denken steckt verschlüsselt in signature, das Feld thinking kommt leer zurück. Schicken Sie den Block unverändert zurück, ohne ihn aufzufüllen oder zu entfernen (Text, den Sie in das thinking-Feld eines omitted-Blocks schreiben, wird ignoriert).

② Kürzen Sie das thinking früherer Züge nicht selbst. Wenn Sie alle Blöcke zurückgeben, behält die API, was das jeweilige Modell braucht, entfernt den Rest automatisch und berechnet als Eingabe nur die Blöcke, die Claude tatsächlich gezeigt werden. Außerhalb von Tool Use ist es erlaubt, das thinking früherer Züge wegzulassen, doch bei neueren Modellen bleibt ein thinking-Block nur gültig, solange der system-Prompt, die tools und die vorherigen Nachrichten unverändert sind: Wer einen mittleren Zug bearbeitet oder nur einige Blöcke entfernt, macht alle späteren thinking-Blöcke ungültig und erhält einen 400er (Invalid signature in thinking block; gilt etwa für Konten, die ab dem 31. August 2026 angelegt wurden). Zum Verschlanken des Verlaufs überlassen Sie das dem serverseitigen Context Editing (Löschen von thinking-Blöcken) oder der Compaction.

③ Behandeln Sie redacted_thinking-Blöcke genauso. Ein Filter, der nur type === 'thinking' behält oder entfernt, verliert redacted_thinking stillschweigend. Der offizielle Troubleshooting-Leitfaden nennt als häufigste Ursachen dieses Fehlers, Blöcke nach Typ zu filtern und dabei redacted_thinking zu verlieren, sowie die Assistant-Nachricht neu aufzubauen, statt sie unverändert zurückzugeben (Thinking, Thinking troubleshooting, Stand: 4. Oktober 2026).

Die eiserne Regel für Tool-Use-Schleifen

In Extended-Thinking- + Tool-Use-Schleifen (tool_use → tool_result) verändern Sie niemals den Thinking-Block der "letzten" Assistant-Nachricht. Die nächste Anfrage, die tool_result zurückgibt, muss das vorangehende thinking + tool_use exakt unverändert enthalten. Wenn Sie das Claude Agent SDK oder das Vercel AI SDK verwenden, prüfen Sie, ob die Bibliothek dies korrekt handhabt.

6. Abgrenzung von ähnlichen Fehlern

Es gibt mehrere thinking-bezogene 400-Fehler, die leicht zu verwechseln sind. Grenzen wir die drei wichtigsten ab.

FehlermeldungBedeutungHauptlösung
thinking blocks ... cannot be modifiedDas Thema dieses Artikels. Signatur und Inhalt stimmen nicht überein/rewind, neue Sitzung, Update auf die neueste Version
Invalid signature in thinking blockPrüfung der signature fehlgeschlagen: Der thinking-Block wurde nach der ursprünglichen Antwort verändert oder beschädigt (beim Rekonstruieren des Verlaufs oder durch einen Proxy, der den Inhalt umschreibt)/rewind, neue Sitzung, auf die neueste Version aktualisieren; bei einem Proxy auch dessen Konfiguration prüfen
The final block in an assistant message cannot be thinkingDie Assistant-Nachricht endet mit thinking (am Ende braucht es text oder tool_use)Nachrichtenstruktur korrigieren, SDK aktualisieren

Die gemeinsame Grundursache ist, dass "Extended-Thinking-Blöcke nicht korrekt gehandhabt werden". Für Claude-Code-Nutzer lösen sich die meisten Fälle mit /rewind + Update auf die neueste Version. Bei Eigen-Apps müssen Sie die Nachrichtenstruktur und die Bibliotheksimplementierung überprüfen. Wenn Sie über einen Proxy gehen (CLIProxyAPI, diverse Gateways), verdächtigen Sie zuerst, dass der Proxy das thinking verändert.

7. Checkliste zur Vorbeugung von Wiederholungen

Eine praktische Checkliste, um häufige Wiederholungen zu vermeiden.

Claude-Code-Nutzer: ① Halten Sie es mit claude update auf der neuesten Version (die größte Vorbeugung). ② Setzen Sie sehr lange Sitzungen regelmäßig mit /clear zurück (verringert das Verschachtelungsrisiko). ③ Committen Sie häufig in git für wichtige Arbeit (auch im festgefahrenen Zustand wiederherstellbar). ④ Erwägen Sie ein JSONL-Reparatur-Tool, wenn es häufig wiederkehrt. ⑤ Melden Sie Reproduktionen in den offiziellen Issues von Anthropic (beschleunigt die Behebung).

API/SDK-Entwickler: ① Fügen Sie Assistant-Nachrichten ohne Veränderung der API-Antwort in den Verlauf ein (samt thinking, redacted_thinking und signature). ② Führen Sie den Verlauf nur anhängend: keine mittleren Züge bearbeiten und nicht nur einzelne Blöcke entfernen (Kürzen dem serverseitigen Context Editing oder der Compaction überlassen). ③ Entfernen Sie keine thinking-Blöcke mit leerem Text und signature (die Standardform bei neueren Modellen). ④ Verwenden Sie das neueste offizielle SDK und minimieren Sie eigenes Umformen von Nachrichten. ⑤ Wenn Sie hinter einem Proxy sind, prüfen Sie die Thinking-Transparenz.

Fazit

Der 400-Fehler "thinking blocks ... cannot be modified" von Claude Code tritt auf, wenn Extended-Thinking-Blöcke beim erneuten Senden des Verlaufs beschädigt werden und nicht mehr mit der ursprünglichen Antwort übereinstimmen. Es ist ein bekannter Bug mit mehreren Issues im offiziellen Repo von Anthropic, und in den meisten Fällen ist es nicht Ihre Schuld. Die fünf Ursachen: Bug bei Wiederaufnahme / Neuaufbau des Verlaufs, Verschachtelung beim Streaming, Amok laufende Reparaturlogik, Drittanbieter-Proxys und Verlaufsänderung in der eigenen App.

Für Claude-Code-Nutzer ist die schnellste Wiederherstellung ① Esc×2 / /rewind zurück zu einem Checkpoint; schlägt das fehl, ② eine neue Sitzung (/clear); zum Bewahren des Kontexts ③ ein JSONL-Reparatur-Tool. Die wichtigste dauerhafte Behebung ist, "Claude Code auf die neueste Version zu aktualisieren" — das Changelog verzeichnet einen Fix nach dem anderen für diese Familie. API/SDK-Entwickler sollten jede Assistant-Antwort samt thinking-Blöcken unverändert zurückschicken / den Verlauf nur anhängend führen / Blöcke mit leerem Text und signature nicht entfernen.

Ebenfalls lesenswert: Was ist das Claude Agent SDK, vollständiger Leitfaden zum Vercel AI SDK, Was ist Cursor, Deploy-Workflow mit Claude Code/Cursor.

FAQ

Q. Ist dieser Fehler ein Fehler in meinem Prompt oder Code?
A. In den meisten Fällen nein. Wenn er während der Nutzung von Claude Code auftaucht, ist es fast sicher ein bekannter Bug auf der Claude-Code-Seite (ein Defekt beim Neuaufbau des Sitzungsverlaufs). Mehrere Issues sind im offiziellen Repo von Anthropic offen und Korrekturen sind in Arbeit. Sie müssen sich keine Vorwürfe machen. Nur bei Eigen-Apps (die die API direkt aufrufen) müssen Sie Ihre Implementierung überprüfen.

Q. /rewind behebt es nicht. Was nun?
A. Eine neue Sitzung starten (/clear) ist am zuverlässigsten. Sie verlieren den Kontext, entkommen aber sicher dem festgefahrenen Zustand. Legen Sie wichtige Arbeit zuvor per git commit oder Notizen beiseite. Kehrt es wieder, aktualisieren Sie Claude Code auf die neueste Version; bleibt es bestehen, erwägen Sie ein JSONL-Reparatur-Tool.

Q. Kann ich es vermeiden, indem ich Extended Thinking abschalte?
A. Technisch ja, aber Extended Thinking verbessert die Genauigkeit bei komplexen Aufgaben erheblich, daher ist das Abschalten nicht zu empfehlen. Gehen Sie das Problem zuerst mit Update auf die neueste Version + /rewind an und erwägen Sie dies nur als letzten Ausweg in besonderen Umgebungen (etwa hinter einem Proxy), in denen es weiterhin wiederkehrt.

Q. Ist das JSONL-Reparatur-Tool sicher?
A. Es ist inoffiziell, also auf eigene Gefahr verwenden. Sichern Sie immer das Session-JSONL, bevor Sie es nutzen. Der Mechanismus lautet "alle Thinking-Inhaltsblöcke entfernen und den Gesprächsverlauf behalten", was im Prinzip sicher ist — aber die offizielle Behebung (Update auf die neueste Version) bleibt die eigentliche Lösung.

Q. In meiner eigenen App löst die Kombination aus Tool Use und thinking diesen Fehler aus.
A. Die Ursache ist, dass "Sie den Thinking-Block der letzten Assistant-Nachricht verändern". Die nächste Anfrage, die tool_result zurückgibt, muss die vorangehenden thinking- + tool_use-Blöcke exakt so enthalten, wie die API sie zurückgegeben hat (mit signature). Das thinking früherer Züge müssen Sie nicht selbst kürzen; bei neueren Modellen macht das Entfernen aus nur einigen Zügen die späteren thinking-Blöcke ungültig. Ein Block mit leerem Text und nur einer signature ist bei diesen Modellen die normale Form – schicken Sie ihn unverändert zurück. Das neueste offizielle SDK übernimmt den Großteil davon automatisch.

Verwandte Claude-Code-Fehler: Claude-Code-Fehlerreferenz, „court“/invoke-Tags, "Prompt is too long".

Verwandter Artikel: Adaptives Denken bei Claude.