compact-guardlisted
Install: claude install-skill VibeEngineering-LLC/agent-ops-doctrine
# compact-guard — не терять состояние при сжатии контекста
Сжатие контекста (`/compact` вручную или автоматическое при переполнении окна) выбрасывает
большую часть диалога. Автоматическое приходит **без предупреждения**: только что шла работа —
и вот агент уже не помнит, что правил, о чём договорились и зачем запускал фоновую задачу.
Дальше он достраивает пробел по догадке и уверенно врёт оператору.
Скилл закрывает это двумя механическими хуками (они работают сами, без участия модели) плюс
дисциплиной, которую соблюдает агент.
## Как устроен механизм (уже установлен и проверен 2026-08-15)
| Слой | Что | Когда срабатывает |
|---|---|---|
| **PreCompact-хук** | `scripts/precompact_snapshot.py` | ПЕРЕД сжатием, и авто, и ручным |
| **SessionStart-хук** (matcher `compact`) | `scripts/postcompact_restore.py` | СРАЗУ ПОСЛЕ сжатия |
| **UserPromptSubmit-хук** (уже был) | `~/.claude/hooks/context_guard.py` | на 80% и 90% заполнения, когда оператор пишет промпт |
Оба новых хука зарегистрированы в `~/.claude/settings.json` (бэкап перед правкой:
`settings.json.bak-precompact-20260815`).
### Что пишет PreCompact-хук
Снапшот в `C:\Users\<you>\.claude\compact-snapshots\snap_<дата>-<время>_<сессия>.md` плюс указатель
`latest.json`. Внутри — **только механически проверяемое**, без интерпретации:
- последние указания оператора **дословно** (основной источник — user-записи со СТРОКОВЫМ
content, они пишутся сразу при отправке; `last-prompt` — запасной, он пишется с лагом в один
ход