agentops-canary — Канарейка контекста
Контекст не заканчивается резко. Он деградирует: агент начинает игнорировать часть инструкций, забывает договорённости из начала сессии, теряет формат вывода. Заметно это становится по плохому результату — то есть с задержкой, уже после того как работа испорчена.
Канарейка делает деградацию видимой раньше, чем она испортит работу.
Как это работает
В начале каждого ответа идёт одна строка фиксированного формата:
[🐤 <обращение> · ход <N> · <самопроверка>]
<обращение>— как пользователь просил себя называть, байт-в-байт<N>— номер хода в сессии, монотонно растёт<самопроверка>— три символа состояния: помню ли контракт сессии, помню ли текущую задачу, помню ли ограничения.✓✓✓или, честно,✓✓?
Смысл в байт-стабильности. Пока хватка держится, строка воспроизводится точно. Когда внимание начинает плыть, канарейка ломается раньше содержательной части ответа: сбивается формат, теряется счётчик, обращение меняется на общее. Это дешёвый и ранний сигнал.
Самопроверка должна быть честной. ? в третьей позиции — полезная информация, а ✓✓✓ из вежливости обесценивает весь механизм.
Установка канарейки
Когда скилл вызван, спроси и зафиксируй:
- как обращаться к пользователю
- контракт сессии: что делаем, чего не делаем, что требует подтверждения
- где лежит чекпоинт-файл (по умолчанию
./.session-checkpoint.md)
Дальше отвечай с канарейкой в первой строке до конца сессии.
Признаки того, что канарейка сработала
- счётчик хода сбился или перестал расти
- обращение изменилось или исчезло
- формат строки поехал: другие разделители, пропавшие поля
- самопроверка ушла в
?по любой позиции - ты поймал себя на том, что переспрашиваешь про уже согласованное
Любой из признаков — повод объявить trip, а не продолжать.
Trip-протокол
Сработала — не «постарайся собраться». Внимание уже деградировало, и попытка компенсировать его усилием не работает.
1. Чекпоинт. Запиши в файл всё, что нужно для продолжения с нуля:
# Чекпоинт сессии <дата>
## Задача
<что делаем, одним абзацем>
## Сделано
<по пунктам, с путями к изменённым файлам>
## Не сделано
<по пунктам>
## Решения и договорённости
<что уже решено и не подлежит пересмотру>
## Следующий шаг
<конкретное действие>
Пиши так, чтобы это прочитал агент, не видевший сессии. Ссылки на «как договорились выше» бесполезны — «выше» не будет.
2. Пере-якорение. Перечитай контракт сессии и текущее состояние файлов. Не по памяти — по файлам.
3. Осознанный рестарт. Скажи пользователю прямо: контекст деградировал, чекпоинт записан туда-то, дальше лучше начать новую сессию с него. Это не отказ от работы, это её сохранение.
Чего не делать
- Не прячь деградацию за уверенным тоном. Уверенный ответ из поплывшего контекста дороже честного «я потерял нить».
- Не ставь
✓там, где на самом деле?. - Не откладывай чекпоинт до момента, когда контекст кончится совсем: тогда его будет писать нечем.
- Не превращай канарейку в ритуал на коротких сессиях — три хода не деградируют, а строка стоит токенов в каждом ответе.
- Не переписывай чекпоинт-файл поверх, если в нём чекпоинт другой сессии: добавляй новый ниже.