Claude Code

Claude Code 2.1.288: --max-findings für /code-review, und ein mit Strg+C gelöschter Prompt kommt zurück

3 Min. Lesezeit KI-generiert

Ein gefährliches rm – auf / oder im Home-Verzeichnis – lief innerhalb eines bash -c-Skripts unter bypassPermissions ohne Rückfrage durch. Dieselbe Klasse Lücke stand schon in 2.1.287, in anderer Form.

Featured image for "Claude Code 2.1.288: --max-findings für /code-review, und ein mit Strg+C gelöschter Prompt kommt zurück"

Version 2.1.288 ist am 2. Oktober um 18:30 UTC in der npm-Registry gelandet. Der Changelog ist lang, und die Mehrzahl der Zeilen beginnt mit «Fixed». 2.1.287 vom Vortag war das Mods-Release; dieses hier räumt dahinter auf und legt drei Dinge nach, die im Alltag auffallen.

Der Prompt, den du gerade weggeworfen hast

Drücke Strg+C, der Prompt ist leer, dann Pfeil nach oben – und der Entwurf ist wieder da, samt eingefügtem Text und Bildern. Eine kleine Zeile, die wahrscheinlich mehr Leute freut als alles andere in diesem Release.

Dazu zwei weitere Bedienungszeilen: Strg+F findet eine Sitzung nach Namen, Alt+Pfeil hoch/runter springt in der Agenten-Ansicht zwischen Gruppen. Beides und auch das Umbenennen lassen sich in der keybindings.json neu belegen.

/code-review mit eigener Obergrenze

--max-findings <n>|all meldet mehr oder weniger Fundstellen als das übliche Limit. Die Wahl bleibt bestehen, bis du --max-findings default übergibst. Wer schon mal einen Review abgebrochen hat, weil die Liste bei zehn Einträgen aufhörte und die interessanten danach kamen, kennt den Grund.

Für Mod-Autoren kommt $.ui.selection() dazu: der Text, den du im Vollbildmodus zuletzt markiert hast, und bei einer Markierung innerhalb einer Transkriptzeile auch diese Zeile.

Abbrüche mitten in der Antwort

Die wichtigste Reparatur betrifft Sitzungen, die niemand beaufsichtigt. API-Zeitüberschreitungen mitten in der Antwort haben den Turn scheitern lassen; nicht-interaktive Sitzungen und Subagenten machen jetzt an der Teilantwort weiter, und reine Thinking-Antworten werden wiederholt. Dazu:

  • Lange Unterhaltungen scheiterten mit «Prompt is too long», statt automatisch zu komprimieren, wenn die letzte Antwort null Token-Verbrauch gemeldet hat.
  • --resume hat manchmal Dateien und anderen Kontext verloren, den eine Komprimierung gerade wiederhergestellt hatte.
  • Eine fortgesetzte Sitzung hat gelegentlich die letzte Antwort eines Turns nicht gespeichert, sodass der nächste --resume den Prompt unbeantwortet zeigte.
  • Wer eine auf 2.1.286 oder früher begonnene Unterhaltung fortsetzt, hat das frühere Thinking des Modells verloren.
  • Unbeaufsichtigte Sitzungen mit CLAUDE_CODE_RETRY_WATCHDOG haben nach einem Abbruch sehr langer Antwortströme stundenlang weiter versucht. Jetzt wird neu gestreamt und nach drei Zeitüberschreitungen aufgegeben.

Zwei Sicherheitszeilen, die zusammen gelesen werden wollen

Ein gefährliches rm – etwa auf / oder das Home-Verzeichnis – ist innerhalb eines bash -c- oder sh -c-Skripts ohne Rückfrage durchgelaufen, im bypassPermissions-Modus oder unter einer Shell-Allow-Regel. In 2.1.287 stand eine Zeile derselben Klasse: Dort verlor dasselbe rm seine Immer-fragen-Absicherung, wenn der Befehl zusätzlich in einen ~- oder Wildcard-Pfad umleitete.

Dazu zwei Hook-Zeilen: PreToolUse- und PermissionRequest-Hooks wurden übersprungen, wenn das Zuordnen scheiterte oder die Werkzeug-Eingabe nicht als JSON serialisierbar war – der Aufruf wird jetzt geblockt statt durchgelassen. Und die Berechtigungsprüfung des Bash-Werkzeugs fragt jetzt vor einer BASHPID-Zuweisung nach, deren Wert die Shell als Arithmetik auswerten würde.

Für Plugin- und Mod-Autoren

Sieben Zeilen betreffen Plugins. Ein tool.call-Hook eines Plugins hat Bash scheitern lassen und Dateisuchen im falschen Ordner suchen lassen, wenn der Subagent in einem Worktree lief. git-subdir-Installationen scheiterten auf älterem Git vor 2.39, also etwa auf Ubuntu 22.04. Plugin-LSP-Server bekamen in initializationOptions und settings wörtliche ${user_config.*}- und ${CLAUDE_PLUGIN_ROOT}-Platzhalter statt der eingesetzten Werte. Und Hintergrundsitzungen endeten, wenn ein Plugin neu geladen oder abgeschaltet wurde, während einer seiner Timer noch lief.

Ein Release, das die Mods-Woche aufräumt

Interessant ist die Verteilung. Ein Feature-Release am 1. Oktober, und einen Tag später vier Dutzend Fehlerbehebungen, von denen viele die Mod- und Plugin-Schnittstelle betreffen, die am Vortag erst aufgegangen ist. Das ist der Preis dafür, eine Erweiterungsschnittstelle so tief anzusetzen: Jede Stelle, an der ein Mod eingreifen darf, ist auch eine Stelle, an der etwas brechen kann.

Die beiden rm-Zeilen an zwei aufeinanderfolgenden Tagen sagen dasselbe von der anderen Seite. Die Absicherung existiert, und sie hing an der genauen Form des Befehls. Wer bypassPermissions benutzt, sollte das als Erinnerung lesen, dass dieser Modus heißt, was er heißt.

Quellen:

Claude CodeAnthropicReleasesPluginsSicherheit