Zwei Versionen am 8. Oktober: 2.1.294 um 03:42 UTC, 2.1.295 um 18:22 UTC. Beide drehen sich um dasselbe Thema, und das ist nicht Zufall. Nach 2.1.293 geht es um Hooks, die halten, was sie versprechen.
Der Unterschied zwischen „scheitert“ und „lässt durch“
Neu in 2.1.295 ist onFailure: "block" für Command- und HTTP-Hooks. Ein Hook, der nicht starten kann, in einen Timeout läuft oder mit einem unerwarteten Code endet, blockiert damit die Aktion, statt sie passieren zu lassen.
Das war vorher die stille Standardannahme in der anderen Richtung, und sie ist für jeden interessant, der Hooks als Leitplanke benutzt. Ein Wächter, der ausfällt, war bis jetzt kein Wächter.
Dazu passt die eine echte Korrektur in 2.1.294: Hooks für prompt und agent, die als Anweisung formuliert sind, also etwa „Blockiere Befehle, die …“, haben durchgelassen, was sie blockieren sollten. Dieselbe Version verbessert, wie solche Anweisungs-Hooks bei Stop und SubagentStop beurteilt werden, damit Claude nicht zu früh aufhört.
In 2.1.295 steckt ein dritter Fund derselben Art. Ein Mod-Hook bekam tief verschachtelte Werkzeug-Eingaben abgeschnitten, ohne Fehlermeldung. Ein Wächter konnte Inhalte durchlassen, die er nie gesehen hat.
Das Terminal darf wissen, ob Claude arbeitet
2.1.295 unterstützt das Program Status Protocol über OSC 7501. Terminals, die es implementieren, können anzeigen, ob Claude Code arbeitet, auf dich wartet oder fertig ist. Für Leute mit mehreren Sitzungen in mehreren Tabs ist das die praktischste Kleinigkeit des Tages.
Weiter im Alltag: /copy übernimmt den Entwurf ohne die >-Zeichen. claude plugin install warnt, wenn die Einstellungsdatei, in die es schreibt, gar nicht geladen wird. Und claude -p sagt auf stderr, worauf ein Lauf wartet, der nach dem letzten Zug offen bleibt. Mods bekommen $.ui.notify für Systembenachrichtigungen und dürfen Kinder in Button setzen, also Text und Chips in einer Zeile.
Das Gateway bekommt Grenzen und Spuren
Der größere Block betrifft das Claude-Apps-Gateway. Jeder Upstream kann jetzt eine models-Liste bekommen. Nur die gelisteten Modelle gehen dorthin, auch beim Failover; ein * im Eintrag ist eine Wildcard. timeouts.upstream_ttfb_ms begrenzt, wie lange ein Stream bei Bedrock, Vertex oder Foundry zum Starten braucht. Danach wird umgeschaltet, oder es kommt ein 502. Das inference-Audit-Ereignis trägt jetzt die upstream_request_id, erfolgreiche Antworten einen request-id-Header. Damit passt die request_id aus der Telemetrie zum Audit-Log.
Dazu ein Fix, der Enterprise-Setups betrifft: Auf einem [1m]-Modell sind alle Anfragen fehlgeschlagen, wenn ein Gateway oder Bedrock, Vertex oder Foundry die context-1m-Beta ablehnt. Claude Code schickt jetzt ohne sie noch einmal.
Zwei Releases, ein Gedanke
Sicherheitsarbeit in diesem Projekt sieht selten nach Sicherheitsarbeit aus. Hier sind es drei Zeilen über Hooks, die denselben Satz ergeben. Ein Wächter, der nicht startet. Einer, der als Prosa formuliert ist. Einer, der nur die Hälfte der Eingabe sieht. Das Ergebnis ist jedes Mal dasselbe.
Wer Hooks als Richtlinie einsetzt, statt als Bequemlichkeit, sollte diese beiden Versionen nicht überspringen – und bei der Gelegenheit onFailure setzen, bevor der nächste Timeout die Entscheidung übernimmt.