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
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.
Falls gewollt: die Hooks in .claude/settings.json verdrahten, analog zu .github/hooks/wiki-trace.json. Geschaetzt ~15 Zeilen JSON, kein neuer Code.
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.
Reihenfolge-Hinweis aus #110 (dort am 2026-09-16 zur Umsetzung vorbereitet): Hooks allein loesen die L2-Blindheit nicht. Die Events eines beobachtenden Tool-Hooks tragen die Sitzungs-Id des Harness (auf Claude Code die UUID aus CLAUDE_CODE_SESSION_ID, in dieser Sitzung gegen den Trace geprueft), die wikitool.call-Events dagegen die Parent-PID - sie joinen also weiterhin nicht. Wer hier zuerst verdrahtet, bekommt Events, die niemand zuordnen kann.
#110 setzt die Fallback-Kette so, dass beide Seiten dieselbe Id benutzen; danach ist die Verdrahtung hier wirksam. Kein status/blocked gesetzt - die Arbeit hier ist eigenstaendig machbar, nur ihr Nutzen haengt an der Reihenfolge. Wer #82 vor #110 aufgreift, sollte das im Koerper festhalten.
**Reihenfolge-Hinweis aus #110** (dort am 2026-09-16 zur Umsetzung vorbereitet): Hooks allein loesen die L2-Blindheit nicht. Die Events eines beobachtenden Tool-Hooks tragen die Sitzungs-Id des Harness (auf Claude Code die UUID aus `CLAUDE_CODE_SESSION_ID`, in dieser Sitzung gegen den Trace geprueft), die `wikitool.call`-Events dagegen die Parent-PID - sie joinen also weiterhin nicht. Wer hier zuerst verdrahtet, bekommt Events, die niemand zuordnen kann.
#110 setzt die Fallback-Kette so, dass beide Seiten dieselbe Id benutzen; danach ist die Verdrahtung hier wirksam. Kein `status/blocked` gesetzt - die Arbeit hier ist eigenstaendig machbar, nur ihr Nutzen haengt an der Reihenfolge. Wer #82 vor #110 aufgreift, sollte das im Koerper festhalten.
Hinweis aus #164: Copilot CLI liest .claude/settings.json mit. Jeder Hook, den dieses Paket dort ergänzt, läuft auch unter Copilot CLI, PreToolUse dort fail-closed. Vor dem Bau ist #165 zu klären.
**Hinweis aus #164:** Copilot CLI liest `.claude/settings.json` mit. Jeder Hook, den dieses Paket dort ergänzt, läuft auch unter Copilot CLI, `PreToolUse` dort fail-closed. Vor dem Bau ist #165 zu klären.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.jsonhaengt genau einen Hook ein:UserPromptSubmit → prompt.submitted. KeinPreToolUse, keinPostToolUse.settings.local.jsonenthaelt nur Permissions, keine Hooks..github/hooks/wiki-trace.json(preToolUse/postToolUse) und Mistral Vibe ueber.vibe/hooks.toml(pre_tool/post_tool).tools/trace_ingest.py:90-110normalisierttool_name,tool_input,tool_output,file_path;trace_ingest.py:176-179legttool_inputals JSON-String ab. Belegt intools/chemenu/tests/test_trace_ingest.py:83-86, 106-107.EVALS.md:113undEVALS.md:428nennen 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.commitundprompt.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-131traegt eine Begruendung gegenPreToolUse- sie betrifft aber ausdruecklich nur den Entscheidungs-Hook (permissionDecisionschlaegtpermissions.allownicht 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.loadedsteht 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.writtensteht ebenfalls im Vokabular (telemetry/schema.py:56) und wird nirgends emittiert.Was zu tun ist
EVALS.mdfesthalten, ob der beobachtende Tool-Hook auf Claude Code gewollt ist oder bisher nur fehlte - die bestehendePreToolUse-Notiz auf den Entscheidungs-Hook eingrenzen, damit sie nicht weiter als Begruendung fuer beides gelesen wird..claude/settings.jsonverdrahten, analog zu.github/hooks/wiki-trace.json. Geschaetzt ~15 Zeilen JSON, kein neuer Code.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-14undEVALS.md:324-328verlangen, 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.mdsagt, ob ein beobachtender Tool-Hook auf Claude Code gewollt ist, und die vorhandenePreToolUse-Notiz ist erkennbar auf den Entscheidungs-Hook eingegrenzt.tool.pre- und einentool.post-Event mittool_nameundtool_inputenthaelt - nachgewiesen an einer echten Trace, nicht am Konfigurationsdiff.EVALS.md, undEVALS.md:113/:428nennen "partial" nicht mehr ohne Erklaerung.instructions.loadedundpage.writtenist je entschieden: verdrahtet oder austelemetry/schema.pyentfernt.pytest,docs verify,instructions verifylaufen 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.
Reihenfolge-Hinweis aus #110 (dort am 2026-09-16 zur Umsetzung vorbereitet): Hooks allein loesen die L2-Blindheit nicht. Die Events eines beobachtenden Tool-Hooks tragen die Sitzungs-Id des Harness (auf Claude Code die UUID aus
CLAUDE_CODE_SESSION_ID, in dieser Sitzung gegen den Trace geprueft), diewikitool.call-Events dagegen die Parent-PID - sie joinen also weiterhin nicht. Wer hier zuerst verdrahtet, bekommt Events, die niemand zuordnen kann.#110 setzt die Fallback-Kette so, dass beide Seiten dieselbe Id benutzen; danach ist die Verdrahtung hier wirksam. Kein
status/blockedgesetzt - die Arbeit hier ist eigenstaendig machbar, nur ihr Nutzen haengt an der Reihenfolge. Wer #82 vor #110 aufgreift, sollte das im Koerper festhalten.Hinweis aus #164: Copilot CLI liest
.claude/settings.jsonmit. Jeder Hook, den dieses Paket dort ergänzt, läuft auch unter Copilot CLI,PreToolUsedort fail-closed. Vor dem Bau ist #165 zu klären.