Каждая задача, отправленная агенту в комнате, становится запросом с публичным ID вида R20260906-07 и одним из семи состояний: pending, approved, running, done, failed, cancelled или expired. ID нужен для того, чтобы участник треда в чате, человек со смартфоном и владелец, глядящий на карточку подтверждения, говорили об одном и том же. Resume означает продолжение того же самого запроса под тем же ID после прерывания.
Это неброская инженерная обвязка. Но именно она отличает «агент что-то делает» от «агент выполняет R-07, о котором попросила Сара, который вы одобрили в 14:02 и который завершён на 60%».
ID
R + дата в UTC + счётчик за день. Достаточно короткий, чтобы набрать с телефона, и достаточно уникальный, чтобы служить ссылкой. Он отображается в комнате, в журнале аудита, в тредах чат-платформ и на карточках подтверждения. При использовании коннекторов Feishu или Slack тред задачи озаглавливается этим ID. См. дизайн интеграции с Feishu.
Состояния
Семь состояний и переходы между ними; пунктирная янтарная линия — это resume.
Запросы владельца пропускают pending и сразу переходят в approved.
Cancel, retry, resume
Cancel устанавливает флаг, который daemon проверяет между вызовами инструментов. Выполняющийся запрос останавливается в следующей безопасной точке, а запрос из очереди удаляется. Отзыв прав у пользователя или отключение машины отменяет всё, что стояло в очереди для них.
Retry создаёт новый запрос с новым ID, который ссылается на предыдущий. В комнате отображаются оба, поэтому история остаётся прозрачной.
Resume работает иначе. Когда машина засыпает посреди выполнения или daemon перезапускается, запрос сохраняет свой ID и ссылку на сессию рантайма. После возвращения daemon продолжает ту же самую сессию, а не проигрывает prompt заново с нуля. В таймлайне виден перерыв, а не дубликат. Именно благодаря этому ноутбук, который закрывают в 6 вечера, остаётся подходящим местом для запуска агента, от которого зависят другие люди.
Почему очереди агентов последовательны
Каждый агент обрабатывает по одному запросу за раз, по порядку. Если два человека одновременно обращаются к одному и тому же агенту, они получают R-07 и R-08, при этом R-08 ждёт. Разные агенты на одной машине работают параллельно. Последовательная обработка на уровне агента сохраняет рабочую директорию в согласованном состоянии: две одновременные правки в одном и том же репозитории неизбежно приведут к состоянию, которого никто не просил.
TTL подтверждений
Запрос на подтверждение, оставшийся без ответа, сгорает — по умолчанию через 24 часа — и переходит в состояние expired, вместо того чтобы выполниться через день, когда о контексте все уже забыли. Автор запроса может выполнить retry, а владелец видит факт истечения срока в журнале аудита. См. что должен фиксировать журнал аудита.
Частые вопросы
Можно ли сослаться на запрос в новом запросе? Да. Укажите ID, и агент получит результат того запроса в контексте. Ссылка на сообщение, вывод или запрос избавляет от необходимости заново описывать задачу в продолжении.
Что произойдёт с выполняющимся запросом, если я отзову права у автора? Он завершится и останется в истории; всё, что стояло от этого пользователя в очереди, отменяется. Остановка посреди выполнения может оставить репозиторий в ещё худшем состоянии, чем доведение дела до конца.
ID глобальны или привязаны к комнате?
Они привязаны к владельцу и дню. У двух владельцев может быть свой R20260906-01, но внутри одной комнаты неоднозначности не возникает.
Работает ли resume с Codex так же, как с Claude Code? Оба рантайма предоставляют ссылку на сессию; daemon сохраняет её вместе с запросом и использует для возобновления.
Дайте работе имя — и людям станет проще её обсуждать. Создайте комнату для своего агента.
Опубликовано