Nebenbefund aus #164 (2026-10-01). Die Herleitung stammt aus der Doku. Beobachtet ist es noch nicht, daher status/unconfirmed.
Befund
Copilot CLI liest Hooks nicht nur aus .github/hooks/*.json, sondern auch aus .claude/settings.json und .claude/settings.local.json (Hooks-Referenz: „Cross-tool .claude/settings.json … are also read“). Copilot in VS Code tut das nur mit chat.useClaudeHooks.
Damit gilt unter Copilot CLI auf jeder Plattform:
Der Claude-Hook UserPromptSubmit → ./tools/trace-hook --source claude-code --event prompt.submitted läuft zusätzlich zu Copilots eigenem userPromptSubmitted.
In die Copilot-Sitzung kommt ein zweites prompt.submitted, mit Quelle claude-code. Die Sitzungs-ID stammt aus der Nutzlast, beide Ereignisse landen also in derselben Sitzung.
EVALS.md § Claude Code behandelt den Hook als Claude-Code-eigen. Das stimmt nicht mehr.
Warum es Zinsen trägt:#82 will in .claude/settings.json weitere Ereignisse verdrahten, darunter PreToolUse. Unter Copilot CLI liefen sie mit. Copilots preToolUse ist fail-closed: Ein Exit ungleich 0 verweigert den Tool-Aufruf. Seit #164 endet trace-hook(.ps1) immer mit 0, der Schaden wäre also „nur“ doppelte Ereignisse. Das muss aber geklärt sein, bevor #82 gebaut wird.
Zuerst klären
Auf einer echten Copilot-CLI-Sitzung (Linux genügt): Steht im Trace pro Prompt ein prompt.submitted doppelt, und mit welcher Quelle? Das bestätigt den Befund oder widerlegt ihn.
Woran erkennt ein Hook, welche Harness ihn startet? Kandidaten sind Umgebungsvariablen (Claude Code setzt CLAUDE_PROJECT_DIR; ob Copilot sie für Claude-Format-Dateien ebenfalls setzt, ist offen) oder die Form der Nutzlast. Das wird gegen die Clients geprüft, nicht geraten.
Gibt es in Copilot CLI eine Einstellung, die .claude/settings.json nicht liest? Wenn ja: Ist es zumutbar, sie einer Instanz vorzuschreiben?
Akzeptanzkriterien
Unter Copilot CLI erzeugt ein Prompt genau ein prompt.submitted, und als Quelle steht copilot-cli.
Unter Claude Code bleibt der Trace unverändert.
EVALS.md beschreibt, welche Harness welche Hook-Datei liest.
#82 nennt die Lösung als Voraussetzung, bevor dort PreToolUse dazukommt.
Version
Voraussichtlich --patch. Das hängt vom gewählten Weg ab.
Nebenbefund aus #164 (2026-10-01). Die Herleitung stammt aus der Doku. Beobachtet ist es noch nicht, daher `status/unconfirmed`.
## Befund
Copilot CLI liest Hooks nicht nur aus `.github/hooks/*.json`, sondern auch aus `.claude/settings.json` und `.claude/settings.local.json` ([Hooks-Referenz](https://docs.github.com/en/copilot/reference/hooks-reference): „Cross-tool .claude/settings.json … are also read“). Copilot in VS Code tut das nur mit `chat.useClaudeHooks`.
Damit gilt unter Copilot CLI auf **jeder** Plattform:
- Der Claude-Hook `UserPromptSubmit` → `./tools/trace-hook --source claude-code --event prompt.submitted` läuft zusätzlich zu Copilots eigenem `userPromptSubmitted`.
- In die Copilot-Sitzung kommt ein zweites `prompt.submitted`, mit Quelle `claude-code`. Die Sitzungs-ID stammt aus der Nutzlast, beide Ereignisse landen also in derselben Sitzung.
- EVALS.md § Claude Code behandelt den Hook als Claude-Code-eigen. Das stimmt nicht mehr.
**Warum es Zinsen trägt:** #82 will in `.claude/settings.json` weitere Ereignisse verdrahten, darunter `PreToolUse`. Unter Copilot CLI liefen sie mit. Copilots `preToolUse` ist fail-closed: Ein Exit ungleich 0 verweigert den Tool-Aufruf. Seit #164 endet `trace-hook(.ps1)` immer mit 0, der Schaden wäre also „nur“ doppelte Ereignisse. Das muss aber geklärt sein, bevor #82 gebaut wird.
## Zuerst klären
- Auf einer echten Copilot-CLI-Sitzung (Linux genügt): Steht im Trace pro Prompt ein `prompt.submitted` doppelt, und mit welcher Quelle? Das bestätigt den Befund oder widerlegt ihn.
- Woran erkennt ein Hook, welche Harness ihn startet? Kandidaten sind Umgebungsvariablen (Claude Code setzt `CLAUDE_PROJECT_DIR`; ob Copilot sie für Claude-Format-Dateien ebenfalls setzt, ist offen) oder die Form der Nutzlast. Das wird gegen die Clients geprüft, nicht geraten.
- Gibt es in Copilot CLI eine Einstellung, die `.claude/settings.json` nicht liest? Wenn ja: Ist es zumutbar, sie einer Instanz vorzuschreiben?
## Akzeptanzkriterien
- [ ] Unter Copilot CLI erzeugt ein Prompt genau ein `prompt.submitted`, und als Quelle steht `copilot-cli`.
- [ ] Unter Claude Code bleibt der Trace unverändert.
- [ ] EVALS.md beschreibt, welche Harness welche Hook-Datei liest.
- [ ] #82 nennt die Lösung als Voraussetzung, bevor dort `PreToolUse` dazukommt.
## Version
Voraussichtlich `--patch`. Das hängt vom gewählten Weg ab.
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.
Nebenbefund aus #164 (2026-10-01). Die Herleitung stammt aus der Doku. Beobachtet ist es noch nicht, daher
status/unconfirmed.Befund
Copilot CLI liest Hooks nicht nur aus
.github/hooks/*.json, sondern auch aus.claude/settings.jsonund.claude/settings.local.json(Hooks-Referenz: „Cross-tool .claude/settings.json … are also read“). Copilot in VS Code tut das nur mitchat.useClaudeHooks.Damit gilt unter Copilot CLI auf jeder Plattform:
UserPromptSubmit→./tools/trace-hook --source claude-code --event prompt.submittedläuft zusätzlich zu Copilots eigenemuserPromptSubmitted.prompt.submitted, mit Quelleclaude-code. Die Sitzungs-ID stammt aus der Nutzlast, beide Ereignisse landen also in derselben Sitzung.Warum es Zinsen trägt: #82 will in
.claude/settings.jsonweitere Ereignisse verdrahten, darunterPreToolUse. Unter Copilot CLI liefen sie mit. CopilotspreToolUseist fail-closed: Ein Exit ungleich 0 verweigert den Tool-Aufruf. Seit #164 endettrace-hook(.ps1)immer mit 0, der Schaden wäre also „nur“ doppelte Ereignisse. Das muss aber geklärt sein, bevor #82 gebaut wird.Zuerst klären
prompt.submitteddoppelt, und mit welcher Quelle? Das bestätigt den Befund oder widerlegt ihn.CLAUDE_PROJECT_DIR; ob Copilot sie für Claude-Format-Dateien ebenfalls setzt, ist offen) oder die Form der Nutzlast. Das wird gegen die Clients geprüft, nicht geraten..claude/settings.jsonnicht liest? Wenn ja: Ist es zumutbar, sie einer Instanz vorzuschreiben?Akzeptanzkriterien
prompt.submitted, und als Quelle stehtcopilot-cli.PreToolUsedazukommt.Version
Voraussichtlich
--patch. Das hängt vom gewählten Weg ab.