Skip to content
Neuronavt
Go back

Agent Inbox: надёжная передача задач между человеком и агентом

Туториал8/10

Коротко

Автор показывает, как конкурентная работа нескольких процессов выявила проблемы в простой очереди вопросов на SQLite. Решение строится на конечном автомате, атомарных операциях и раздельном учёте ответа человека и его обработки агентом — это помогает не терять и не перезаписывать данные.

Контекст

Автор разработал Agent Inbox — систему, где агент передаёт человеку вопросы, а затем забирает ответы. Начальная версия была таблицей SQLite с вопросом, ответом и статусом; проблемы обнаружились при запуске двух CLI-процессов и взаимодействии через несколько каналов.

Главное

Как сделано

Автор моделирует передачу управления как конечный автомат с явным владельцем строки и разрешёнными переходами. Состояние ответа человека, его доставка агенту и подтверждение обработки представлены отдельно: это позволяет восстановиться после сбоя и повторно забрать необработанный ответ.

Конкурирующие каналы записи защищены асимметричным правилом приоритета. Запись из Inbox может заменить прежний ответ; запись из чата допускается одним условным UPDATE, только если ответа ещё нет или он уже был забран. Проверку и изменение не разделяют на SELECT и UPDATE, чтобы избежать окна гонки.

Для перехода доски используется board_advance с expected_revision и board_version; несоответствие требует перечитать состояние. Контекст можно кэшировать на уровне процесса, но full:true загружает актуальные данные из базы. SQLite работает с WAL и busy_timeout=5000, а тесты проверяют как операции хранилища, так и реальное взаимодействие через MCP stdio.

Результаты

Модель и тесты позволяют выявлять устаревшие переходы, не перезаписывать непрочитанный ответ из Inbox ответом из чата и находить ответы, которые человек отправил, но агент не обработал. Автор сообщает, что WAL с тайм-аутом сглаживает большинство кратковременных всплесков конкуренции, однако количественных показателей производительности или надёжности не приводит. Исправлены также пропуск аннотаций в pending() (issue #37) и невозможность корректировать ответы из чата — через тип clarify (issues #34 и #69).

Ограничения

Удалённый режим с общей базой, сетевым слоем и аутентификацией не реализован; не решено и возобновление локальной сессии агента после удалённого ответа. WAL не устраняет логические гонки и не гарантирует отсутствия SQLITE_BUSY или SQLITE_BUSY_SNAPSHOT: вызывающий код должен уметь обрабатывать такие ошибки. Автор не приводит количественных тестов нагрузки. Сценарий с удалённым режимом на демонстрационном скриншоте синтетический и пока не поддерживается.

Что взять себе

Читать оригинал, если…

Откройте репозиторий github.com/shariqh/agent-inbox, если нужны точные контракты операций, реализация в src/store.ts и подробности тестов в test/store.test.ts и test/mcp.integration.test.ts.