L2 sieht auf Claude Code keine Tool-Calls: .claude/settings.json verdrahtet nur UserPromptSubmit #82

Open
opened 2026-09-09 14:29:09 +00:00 by torben · 0 comments
Owner

Befund

Der primaere Harness dieser Instanz ist Claude Code (ENVIRONMENT.md § Harness). Genau dort liefert die Telemetrie keine Tool-Calls in die Trace.

  • .claude/settings.json haengt genau einen Hook ein: UserPromptSubmit → prompt.submitted. Kein PreToolUse, kein PostToolUse. settings.local.json enthaelt nur Permissions, keine Hooks.
  • Verdrahtet ist das nur bei den Nebenharnesses: Copilot CLI ueber .github/hooks/wiki-trace.json (preToolUse/postToolUse) und Mistral Vibe ueber .vibe/hooks.toml (pre_tool/post_tool).
  • Die Aufnahmeseite ist fertig und getestet: tools/trace_ingest.py:90-110 normalisiert tool_name, tool_input, tool_output, file_path; trace_ingest.py:176-179 legt tool_input als JSON-String ab. Belegt in tools/chemenu/tests/test_trace_ingest.py:83-86, 106-107.
  • EVALS.md:113 und EVALS.md:428 nennen Claude Code selbst "partial" - der Zustand ist also dokumentiert, aber nicht als Absicht begruendet.

Ergebnis: die Sitzungen, die auf dem Hauptharness laufen, produzieren Traces ohne den groessten Teil dessen, was in ihnen passiert ist. Die fuenf L2-Trajectory-Regeln lesen ohnehin nur wikitool.call, gate.*, publish.commit und prompt.submitted (tools/chemenu/evals/trajectory.py:96-99, 128-134, 173-181, 217-230, 249-252), fallen also heute nicht darueber - aber jede kuenftige Regel ueber Agentenverhalten waere auf dem Hauptharness blind.

Warum das nicht schon entschieden ist

EVALS.md:124-131 traegt eine Begruendung gegen PreToolUse - sie betrifft aber ausdruecklich nur den Entscheidungs-Hook (permissionDecision schlaegt permissions.allow nicht durch). Ein rein beobachtender Hook ist davon nicht erfasst und im Repo durch nichts ausgeschlossen. Ob die Auslassung Absicht oder Luecke ist, geht aus dem Text nicht hervor; das ist der erste Teil der Arbeit.

Zwei kleinere Nebenfunde am selben Ort

  • instructions.loaded steht im Event-Vokabular (tools/chemenu/telemetry/schema.py:53) und im Mapping (tools/trace_ingest.py:50, InstructionsLoaded), wird aber nirgends verdrahtet. Das waere der einzige Kanal, der ueber harness-internes Laden (SKILL.md-Body, @-Importe aus CLAUDE.md) etwas sagen koennte. Ob Claude Code so einen Hook heute ueberhaupt liefert, ist im Repo nur behauptet (EVALS.md:106) und nicht belegt.
  • page.written steht ebenfalls im Vokabular (telemetry/schema.py:56) und wird nirgends emittiert.

Was zu tun ist

  1. Klaeren und in EVALS.md festhalten, ob der beobachtende Tool-Hook auf Claude Code gewollt ist oder bisher nur fehlte - die bestehende PreToolUse-Notiz auf den Entscheidungs-Hook eingrenzen, damit sie nicht weiter als Begruendung fuer beides gelesen wird.
  2. Falls gewollt: die Hooks in .claude/settings.json verdrahten, analog zu .github/hooks/wiki-trace.json. Geschaetzt ~15 Zeilen JSON, kein neuer Code.
  3. Den Zustand der beiden ungenutzten Events (instructions.loaded, page.written) entscheiden: verdrahten oder aus dem Vokabular nehmen. Ein Event, das nie emittiert wird, ist ein Versprechen, das kein Scorer einloesen kann.

Ausdruecklich nicht Teil dieses Issues: eine neue Trajectory-Regel ueber Read-Vollstaendigkeit. tools/chemenu/evals/trajectory.py:9-14 und EVALS.md:324-328 verlangen, dass eine reale Trace einen realen Fehlschlag zeigt, bevor eine Regel entsteht. Hier geht es nur darum, dass die Trace ueberhaupt etwas zu zeigen haette.

Akzeptanzkriterien

  • EVALS.md sagt, ob ein beobachtender Tool-Hook auf Claude Code gewollt ist, und die vorhandene PreToolUse-Notiz ist erkennbar auf den Entscheidungs-Hook eingegrenzt.
  • Falls verdrahtet: eine Sitzung auf Claude Code erzeugt eine Trace, die mindestens einen tool.pre- und einen tool.post-Event mit tool_name und tool_input enthaelt - nachgewiesen an einer echten Trace, nicht am Konfigurationsdiff.
  • Falls nicht verdrahtet: die Begruendung steht in EVALS.md, und EVALS.md:113/:428 nennen "partial" nicht mehr ohne Erklaerung.
  • Fuer instructions.loaded und page.written ist je entschieden: verdrahtet oder aus telemetry/schema.py entfernt.
  • pytest, docs verify, instructions verify laufen ohne neue Findings.

Herkunft

Nebenfund aus #72, Sitzung 2026-09-09. Dort war die Frage, ob sich Anthropics "one level deep"-Mechanik im Eval-Aufbau messen laesst; die Antwort war nein, und einer der Gruende war dieser hier - unabhaengig von der Referenztiefen-Frage, die in #72 ohne Messung entschieden wurde.

## Befund Der primaere Harness dieser Instanz ist Claude Code (`ENVIRONMENT.md` § Harness). Genau dort liefert die Telemetrie **keine Tool-Calls** in die Trace. - `.claude/settings.json` haengt genau einen Hook ein: `UserPromptSubmit → prompt.submitted`. Kein `PreToolUse`, kein `PostToolUse`. `settings.local.json` enthaelt nur Permissions, keine Hooks. - Verdrahtet ist das nur bei den Nebenharnesses: Copilot CLI ueber `.github/hooks/wiki-trace.json` (`preToolUse`/`postToolUse`) und Mistral Vibe ueber `.vibe/hooks.toml` (`pre_tool`/`post_tool`). - Die Aufnahmeseite ist fertig und getestet: `tools/trace_ingest.py:90-110` normalisiert `tool_name`, `tool_input`, `tool_output`, `file_path`; `trace_ingest.py:176-179` legt `tool_input` als JSON-String ab. Belegt in `tools/chemenu/tests/test_trace_ingest.py:83-86, 106-107`. - `EVALS.md:113` und `EVALS.md:428` nennen Claude Code selbst **"partial"** - der Zustand ist also dokumentiert, aber nicht als Absicht begruendet. Ergebnis: die Sitzungen, die auf dem Hauptharness laufen, produzieren Traces ohne den groessten Teil dessen, was in ihnen passiert ist. Die fuenf L2-Trajectory-Regeln lesen ohnehin nur `wikitool.call`, `gate.*`, `publish.commit` und `prompt.submitted` (`tools/chemenu/evals/trajectory.py:96-99, 128-134, 173-181, 217-230, 249-252`), fallen also heute nicht darueber - aber jede kuenftige Regel ueber Agentenverhalten waere auf dem Hauptharness blind. ## Warum das nicht schon entschieden ist `EVALS.md:124-131` traegt eine Begruendung gegen `PreToolUse` - sie betrifft aber ausdruecklich nur den **Entscheidungs**-Hook (`permissionDecision` schlaegt `permissions.allow` nicht durch). Ein rein **beobachtender** Hook ist davon nicht erfasst und im Repo durch nichts ausgeschlossen. Ob die Auslassung Absicht oder Luecke ist, geht aus dem Text nicht hervor; das ist der erste Teil der Arbeit. ## Zwei kleinere Nebenfunde am selben Ort - `instructions.loaded` steht im Event-Vokabular (`tools/chemenu/telemetry/schema.py:53`) und im Mapping (`tools/trace_ingest.py:50`, `InstructionsLoaded`), wird aber **nirgends** verdrahtet. Das waere der einzige Kanal, der ueber harness-internes Laden (SKILL.md-Body, `@`-Importe aus CLAUDE.md) etwas sagen koennte. Ob Claude Code so einen Hook heute ueberhaupt liefert, ist im Repo nur behauptet (`EVALS.md:106`) und **nicht belegt**. - `page.written` steht ebenfalls im Vokabular (`telemetry/schema.py:56`) und wird nirgends emittiert. ## Was zu tun ist 1. Klaeren und in `EVALS.md` festhalten, ob der beobachtende Tool-Hook auf Claude Code gewollt ist oder bisher nur fehlte - die bestehende `PreToolUse`-Notiz auf den Entscheidungs-Hook eingrenzen, damit sie nicht weiter als Begruendung fuer beides gelesen wird. 2. Falls gewollt: die Hooks in `.claude/settings.json` verdrahten, analog zu `.github/hooks/wiki-trace.json`. Geschaetzt ~15 Zeilen JSON, kein neuer Code. 3. Den Zustand der beiden ungenutzten Events (`instructions.loaded`, `page.written`) entscheiden: verdrahten oder aus dem Vokabular nehmen. Ein Event, das nie emittiert wird, ist ein Versprechen, das kein Scorer einloesen kann. **Ausdruecklich nicht Teil dieses Issues:** eine neue Trajectory-Regel ueber Read-Vollstaendigkeit. `tools/chemenu/evals/trajectory.py:9-14` und `EVALS.md:324-328` verlangen, dass eine reale Trace einen realen Fehlschlag zeigt, bevor eine Regel entsteht. Hier geht es nur darum, dass die Trace ueberhaupt etwas zu zeigen haette. ## Akzeptanzkriterien - [ ] `EVALS.md` sagt, ob ein beobachtender Tool-Hook auf Claude Code gewollt ist, und die vorhandene `PreToolUse`-Notiz ist erkennbar auf den Entscheidungs-Hook eingegrenzt. - [ ] Falls verdrahtet: eine Sitzung auf Claude Code erzeugt eine Trace, die mindestens einen `tool.pre`- und einen `tool.post`-Event mit `tool_name` und `tool_input` enthaelt - nachgewiesen an einer echten Trace, nicht am Konfigurationsdiff. - [ ] Falls nicht verdrahtet: die Begruendung steht in `EVALS.md`, und `EVALS.md:113`/`:428` nennen "partial" nicht mehr ohne Erklaerung. - [ ] Fuer `instructions.loaded` und `page.written` ist je entschieden: verdrahtet oder aus `telemetry/schema.py` entfernt. - [ ] `pytest`, `docs verify`, `instructions verify` laufen ohne neue Findings. ## Herkunft Nebenfund aus #72, Sitzung 2026-09-09. Dort war die Frage, ob sich Anthropics "one level deep"-Mechanik im Eval-Aufbau messen laesst; die Antwort war nein, und einer der Gruende war dieser hier - unabhaengig von der Referenztiefen-Frage, die in #72 ohne Messung entschieden wurde.
torben added the prio/plannedsize/Sarea/processkind/build labels 2026-09-09 14:29:09 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#82