Files
skills/.tasks/2026-06-17-00932-session-inbox-monitor-sessionstart-hook.md

50 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# session-inbox-monitor-sessionstart-hook — working context
**Status:** 🟢 done (shipped 2026-06-17) — hook written+deployed+registered, SKILL body filled (v0.2.0), live-verified (sweep+inject+real-Monitor signature). See STATUS.md block for full evidence.
**Owner:** vitya (interactive session)
**Notify:** OpeItcLoc03/workshop
Ядро ленты `session-inbox-monitor`. Написать SessionStart-хук (уборка + инжект,
headless-skip) и дописать тело SKILL.md. Дизайн согласован в воркшопе:
- archive: `~/projects/.workshop/.archive/2026-06-17-session-inbox-monitor.md`
- concept: `~/projects/.workshop/.wiki/concepts/session-inbox-monitor.md`
## Verified facts (механика)
- **Monitor tool** запускает shell-команду (через Bash env), `persistent:true` живёт
до session end / TaskStop. Хук сам tool поднять НЕ может → инжектит инструкцию,
агент поднимает первым ходом (прецедент — так инжектится `using-superpowers`).
- **`/clear` НЕ вызывает SessionEnd** → teardown на SessionEnd для `/clear` бесполезен.
Поэтому уборка идемпотентно в SessionStart: «прибей старые мониторы этого инбокса →
подними ровно один».
- **Сигнатура уборки** (решение этой сессии): зашить **сентинел** в poll-команду
Monitor'а. OS-процесс, спавненный Monitor'ом, несёт poll-команду в своей командной
строке → уборка матчит `Get-CimInstance Win32_Process` по сентинелу + inbox-пути.
Снимает риск over-match произвольных процессов.
- **Stop-хук block-фикс** уже в проде (`~/.claude/hooks/stop-dispatcher.ps1` стр. 116125):
inbox-путь отдаёт `decision:block` с телом письма. Это смежная таска `-stophook-blockfix-proof`.
- **Близнец** `interactive-lock.ps1` — machine-local PS-хук, регистрируется в settings.json
SessionStart/SessionEnd. Тот же паттерн установки.
## Решения по реализации
1. Хук-файл версионируем в репо: `skills/session-inbox-monitor/hooks/inbox-monitor.ps1`
(deployment goal: multi-machine rollout). Install/дока деплоит его в `~/.claude/hooks/`.
2. Регистрация в `~/.claude/settings.json` SessionStart — мутация user-level конфига →
**гейт: пауза + ОК user** перед записью (как setup-скилы).
3. Committable: SKILL.md тело + hook-файл + per-task + STATUS.md. settings.json — вне репо.
## Open question (surface to user / flag as failure mode)
- **Мульти-сессия на одном проекте.** Уборка по inbox-пути прибьёт монитор ДРУГОЙ живой
интерактивной сессии того же проекта (сигнатура per-inbox, не per-session). Дизайн
воркшопа явно выбрал «прибей все → подними один». Задокументировать как known
limitation в SKILL.md; при необходимости — follow-up таска. Связь: [[inter-session-peer-discipline]].
## Acceptance (из -review зонтика)
- Уборка реально прибивает осиротевшие мониторы этого инбокса.
- Инжект поднимает РОВНО один Monitor.
- Headless → skip.
- Тело SKILL.md (Steps/Failure modes/etc.) дописано и соответствует реальности.