feat(session-inbox-monitor): SessionStart hook + fill SKILL body v0.2.0
Core content task of the session-inbox-monitor line. Two deliverables:
1. SessionStart hook `skills/session-inbox-monitor/hooks/inbox-monitor.ps1`
(versioned for multi-machine rollout; deployed to ~/.claude/hooks/ and
registered in ~/.claude/settings.json SessionStart):
- sweep: Get-CimInstance | Stop-Process orphaned monitors of THIS inbox,
matched by sentinel CLAUDE_INBOX_MONITOR + inbox path (a /clear leaves
the poll process alive -> re-raise without sweep stacks duplicates);
- inject: hookSpecificOutput.additionalContext with the exact persistent
Monitor command (Monitor tool, not background Bash);
- opt-in gate: fires only on .claude-inbox/ dir or CLAUDE.md trigger line.
ASCII-only (em-dash -> mojibake under WinPS 5.1 without BOM, fixed).
2. SKILL.md body filled (When to use / Inputs / Steps / Deployment /
Failure modes / Side effects / What NOT to do); bump 0.1.0 -> 0.2.0 MINOR.
Headless: no hook-level signal exists (verified via claude-code-guide) ->
agent-side best-effort skip, default errs toward raising (false-skip in
interactive loses the feature; false-raise in headless is a harmless no-op).
Live-verified: inject -> valid JSON; sweep -> killed a planted orphan (PASS);
real Monitor tool spawns a bash process carrying the sentinel (sweep will
find real orphans); settings.json stays valid. Sweep over-match edge and
multi-session-per-project limit documented honestly in Failure modes.
Closes [session-inbox-monitor-sessionstart-hook].
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1201,11 +1201,11 @@ Acceptance 1-6 all met by test evidence (not by inspection). Per-task detail in
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [session-inbox-monitor-sessionstart-hook] — Content-таска (ядро скила). Написать SessionStart-хук-инжектор (machine-local в ~/.claude/hooks/ + регистрация в ~/.claude/settings.json). Две функции: (a) **уборка** — Get-CimInstance | Stop-Process прибить осиротевшие inbox-мониторы ЭТОГО проекта по сигнатуре командной строки (`/clear` оставляет их жить → re-raise без уборки плодит дубли); (b) **инжект** `hookSpecificOutput.additionalContext` с инструкцией «подними persistent Monitor (Monitor tool, не background Bash) на <project>/.claude-inbox/». Headless-детект → skip (Monitor там не работает; полагаться на Stop-хук pickup + Notify). Дизайн: см. .workshop archive trace + concepts/session-inbox-monitor. Брат-близнец poller-interactive-lock-writer (хук+CLI паттерн). После написания — дописать тело каркаса SKILL.md (When to use / Steps / Failure modes / Side effects / What NOT to do).
|
||||
## 🟢 [session-inbox-monitor-sessionstart-hook] — Content-таска (ядро скила). Написать SessionStart-хук-инжектор (machine-local в ~/.claude/hooks/ + регистрация в ~/.claude/settings.json). Две функции: (a) **уборка** — Get-CimInstance | Stop-Process прибить осиротевшие inbox-мониторы ЭТОГО проекта по сигнатуре командной строки (`/clear` оставляет их жить → re-raise без уборки плодит дубли); (b) **инжект** `hookSpecificOutput.additionalContext` с инструкцией «подними persistent Monitor (Monitor tool, не background Bash) на <project>/.claude-inbox/». Headless-детект → skip (Monitor там не работает; полагаться на Stop-хук pickup + Notify). Дизайн: см. .workshop archive trace + concepts/session-inbox-monitor. Брат-близнец poller-interactive-lock-writer (хук+CLI паттерн). После написания — дописать тело каркаса SKILL.md (When to use / Steps / Failure modes / Side effects / What NOT to do).
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** Написать SessionStart PS-хук (уборка + инжект, headless-skip), зарегистрировать в settings.json (operator-флип по ОК user). Дописать тело SKILL.md глазами из archive.
|
||||
**Status:** done
|
||||
**Where I stopped:** Шипнуто 2026-06-17. (1) Хук `skills/session-inbox-monitor/hooks/inbox-monitor.ps1` — sweep (Get-CimInstance|Stop-Process по сентинелу `CLAUDE_INBOX_MONITOR`+inbox-путь) + inject (`hookSpecificOutput.additionalContext` с точной Monitor-командой) + opt-in гейт (`.claude-inbox/` или CLAUDE.md-строка). ASCII-only (пофикшен em-dash→mojibake баг под WinPS 5.1 без BOM). (2) Деплой в `~/.claude/hooks/` (hash-parity с репо) + регистрация в `~/.claude/settings.json` SessionStart (4-й элемент, без matcher; бэкап `.bak-inbox-monitor`). (3) Тело SKILL.md дописано, v0.1.0→0.2.0 MINOR. **Live-верификация:** inject→валидный JSON; sweep→убил подсадного сироту (pid 32920 PASS); реальный Monitor tool спавнит bash-процесс несущий сентинел (sweep его найдёт); settings.json валиден. **Headless-факт (claude-code-guide):** хук-уровня сигнала НЕТ — skip отдан агенту best-effort, дефолт «поднять» (ложный skip в интерактиве теряет фичу; ложный raise в headless безвреден). Острый угол sweep (любой live-процесс с сентинелом+путём гибнет; на реальном SessionStart активности агента нет → безопасно) + multi-session-лимит задокументированы в SKILL Failure modes.
|
||||
**Next action:** (none — kept until merged). Follow-up'ы по ленте: `-install` (добавить opt-in строку в CLAUDE.md + проверка активации), `-hermes-mapping`, `-test-trigger` (чистая сессия), `-stophook-blockfix-proof`, `-review` (зонтик). Возможный follow-up: per-session изоляция монитора (сейчас инвариант «один на инбокс/машину»).
|
||||
**Branch:** n/a
|
||||
**Notify:** OpeItcLoc03/workshop
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-06-17T07:16:22.572Z -->
|
||||
|
||||
Reference in New Issue
Block a user