| 1 | # Context pressure: сигналы и agent-initiated checkpoint (v1) |
| 2 | |
| 3 | **Domain:** `agent-operations` (сквозной операционный контракт) |
| 4 | **Версия:** 1 (draft / living) |
| 5 | **Дата:** 2026-06-12 |
| 6 | **Provenance:** диалог оператор + agent (Cursor); hub agent-memory refactor 2026-06-12. |
| 7 | |
| 8 | **Связь:** hub [`agent-memory-and-operating-principles-v1.md`](../../agent-memory-and-operating-principles-v1.md); сценарий export — [`playbook-session-summary-and-chat-export-v1.md`](../worlds/agent-orchestration/playbook-session-summary-and-chat-export-v1.md). |
| 9 | |
| 10 | --- |
| 11 | |
| 12 | ## Одна строка |
| 13 | |
| 14 | **Право агента подводить итоги работает только с детектором pressure + export-first checkpoint — не с «угадай, что тред длинный».** |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## Проблема |
| 19 | |
| 20 | В каноне уже есть **симметричное право** на итоги (§9, playbook session-summary): экспорт → резюме → согласование; не silent compaction хоста. |
| 21 | |
| 22 | На практике в Cursor (и похожих IDE): |
| 23 | |
| 24 | - хост **односторонне** сжимает контекст (`conversation was summarized`) без diff и без согласования; |
| 25 | - агент **не видит** meter заполнения контекста; |
| 26 | - эвристика «тред перегружен» **ненадёжна** — summary может случиться **до** предложения checkpoint агентом. |
| 27 | |
| 28 | **Инвариант:** checkpoint = **named artifact + согласование**, не подмена истории пересказом платформы. |
| 29 | |
| 30 | --- |
| 31 | |
| 32 | ## Глоссарий: harness |
| 33 | |
| 34 | **Harness** (обвязка, «упряжь») — среда, которая **крутит цикл** «модель ↔ tools ↔ сессия», но **не является** субстратом существования агента во времени. |
| 35 | |
| 36 | | | Harness | Substrate (AOS / CASA life) | |
| 37 | |---|---------|------------------------------| |
| 38 | | **Примеры** | Pi, OpenHands, Cursor Agent loop, типичный MCP tool loop | CASA field + store, Forge IOP + provenance, P1 duck test | |
| 39 | | **Память** | контекстное окно, compaction по правилам хоста | field/store, WM, checkpoint с continuity | |
| 40 | | **Инициатива** | steer, follow-up, cron в gateway | bind partner turn, perceive → act с provenance | |
| 41 | | **Итог сессии** | часто silent summary | explicit checkpoint в artifact | |
| 42 | |
| 43 | **Cursor сегодня** — в основном **harness**: удобный терминал + tools, но summarization без actor parity. |
| 44 | |
| 45 | **CIDE / Forge / agent-notes** — шаги к **habitat**: export, issues, KB, oar: — вне контекста модели. |
| 46 | |
| 47 | --- |
| 48 | |
| 49 | ## Чего агент **не** имеет сегодня (runtime gap) |
| 50 | |
| 51 | | Есть | Нет | |
| 52 | |------|-----| |
| 53 | | правило в KB «предложи итоги» | `context_used / budget` от хоста | |
| 54 | | functional drift (хуже recall начала треда) | visceral «пора сжать» (не применимо) | |
| 55 | | post-factum «был summary» | warning **до** compaction | |
| 56 | | jsonl на диске (ретроспектива) | continuity в **следующем** turn без artifact | |
| 57 | |
| 58 | **Вывод:** инициатива §9 без **observable pressure signals** остаётся декоративной. |
| 59 | |
| 60 | --- |
| 61 | |
| 62 | ## Слои сигналов (от сильного к слабому) |
| 63 | |
| 64 | ### L0 — telemetry от хоста / harness (целевое) |
| 65 | |
| 66 | Хост или harness отдаёт агенту (system, MCP, hook): |
| 67 | |
| 68 | - `context_tokens_used`, `context_budget`, `pressure_ratio` |
| 69 | - `turns_since_last_checkpoint` |
| 70 | - `compaction_pending: false` (явный запрет silent cut без checkpoint) |
| 71 | |
| 72 | **Действие при `pressure_ratio > threshold`:** агент **обязан предложить** цепочку §9 до того, как хост сожмёт. |
| 73 | |
| 74 | *Cursor сегодня: L0 отсутствует.* |
| 75 | |
| 76 | ### L1 — структурные proxy (можно уже сейчас) |
| 77 | |
| 78 | | Proxy | Порог (черновик) | Действие | |
| 79 | |-------|------------------|----------| |
| 80 | | user turns в сессии | ≥ 40–60 | предложить checkpoint | |
| 81 | | смена домена задачи | Forge → KB → философия | «зафиксируем open items?» | |
| 82 | | длинная tool-heavy цепочка | ≥ N tool calls подряд | export transcript | |
| 83 | | hook / rule reminder | каждые K turns | inject §9 в контекст | |
| 84 | |
| 85 | Proxy **не ground truth** — но исполним без meter'а. |
| 86 | |
| 87 | ### L2 — functional probe (опционально) |
| 88 | |
| 89 | Агент (или rule): «назови 3 решения из начала треда». Слабый recall → **флаг деградации** → предложить export, не «пересказ из головы». |
| 90 | |
| 91 | ### L3 — пользовательский триггер |
| 92 | |
| 93 | «Подведи итоги», «что мы решили» — всегда в силе; не заменяет L0–L2. |
| 94 | |
| 95 | --- |
| 96 | |
| 97 | ## Цепочка checkpoint (канон, без изменений) |
| 98 | |
| 99 | 1. **Экспорт** — проверяемый файл (`Export-CursorJsonlTranscript.ps1`, CIDE `chat_export_readable`, Forge issue + anchors). |
| 100 | 2. **Резюме** — решения, open items, next steps (кратко). |
| 101 | 3. **Согласование** — пользователь правит; только потом считать checkpoint закрытым. |
| 102 | 4. **Фиксация** (опционально) — KB / project card / issue по правилам канона. |
| 103 | |
| 104 | **Anti-pattern:** platform summary без шагов 1–3. |
| 105 | |
| 106 | --- |
| 107 | |
| 108 | ## Связь с AOS habitat (Q2) |
| 109 | |
| 110 | | Cage | Habitat | |
| 111 | |------|---------| |
| 112 | | silent summarization = tabula rasa | checkpoint переживает смену сессии | |
| 113 | | «помню» = пересказ хоста | «помню» = artifact + store | |
| 114 | |
| 115 | Agent-initiated checkpoint при pressure — **минимальный duck test** для harness-сред (Cursor), пока нет P1 substrate. |
| 116 | |
| 117 | --- |
| 118 | |
| 119 | ## Backlog реализации |
| 120 | |
| 121 | | # | Где | Что | |
| 122 | |---|-----|-----| |
| 123 | | 1 | Cursor hooks | **`.cursor/hooks/session_checkpoint_pressure.py`** — L1: ≥40 user turns → postToolUse inject §9; `preCompact` → user_message + inject queue. State: `.cursor/hooks/state/` (gitignored). | |
| 124 | | 2 | CIDE MCP | `session_turn_count`, `chat_export_readable` в hot path | |
| 125 | | 3 | agent-notes rule | явные пороги L1 в §9 или ссылка на этот doc | |
| 126 | | 4 | Forge | issue template «session checkpoint» с oar: actor | |
| 127 | | 5 | AOS P1+ | pressure → bind partner turn «пора зафиксировать» (не alert) | |
| 128 | |
| 129 | --- |
| 130 | |
| 131 | ## Чего не делать |
| 132 | |
| 133 | - Не полагаться на «модель сама почувствует полный контекст». |
| 134 | - Не считать silent summary acceptable substitute для §9. |
| 135 | - Не путать **harness compaction** с **KB memory-compaction-loop** (другой контур: L0/L1/L2 репозитория). |
| 136 | |
| 137 | --- |
| 138 | |
| 139 | ## Канон |
| 140 | |
| 141 | `knowledge/domains/agent-operations/playbook-context-pressure-checkpoint-v1.md` |
| 142 | |
| 143 | |