Безопасность и правоHabr AI→ оригинал

Утилита baton переносит сессию между 5 консольными ИИ-агентами без потери контекста

Автор утилиты baton на Go научил консольных агентов Claude Code, Codex, Antigravity CLI, Pi и Hermes подхватывать сессии друг друга, когда у одного кончается пятичасовая квота. Инструмент читает журналы на диске, а не просит модель пересказать историю, поэтому не жжёт дорогие выходные токены и сохраняет номера строк и отвергнутые гипотезы. Новый агент получает сводку от последнего /compact, а полный дамп лежит во временной папке. • Зашифрованный слепок для другого ПК: AES-256-GCM, ключ не уходит на сервер • Навык SKILL.md вместо MCP-сервера: в контексте лишь одна строка описания • Код на стандартной библиотеке Go, лицензия MIT, сборка в три команды

AI-обработка оригинала Habr AI; редакция Hamidun News
Утилита baton переносит сессию между 5 консольными ИИ-агентами без потери контекста
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Зашифрованный слепок для другого ПКAES-256-GCM, ключ не уходит на сервер
Навык SKILL.md вместо MCP-серверав контексте лишь одна строка описания
Ключевой факт #3Код на стандартной библиотеке Go, лицензия MIT, сборка в три команды

Пятичасовые квоты на тарифах за $20 обычно заканчиваются посреди отладки, а штатного моста между Claude Code, Codex, Antigravity CLI (agy), Pi и Hermes нет. Автор утилиты baton написал на Go консольный инструмент, который забирает сессию из локальных журналов одного агента и отдаёт другому — на той же машине или через сеть на другой компьютер. Исходники лежат на GitHub под лицензией MIT.

Почему HANDOFF.md не спасает

Стандартный совет — попросить агента перед уходом записать состояние задачи, шаги и план в файл HANDOFF.md. Автор называет три проблемы. Первая: когда лимит исчерпан, агент перестаёт отвечать, и записать итоги уже некому. Вторая: даже если поймать момент заранее, модель пересказывает собственную историю по памяти. Контекстное окно вмещает от 200 тысяч до миллиона токенов, а длина одного ответа ограничена несколькими десятками тысяч, поэтому пересказ неизбежно сжатый. Пропадают точные аргументы команд, номера строк, отвергнутые гипотезы и мелкие правки. Третья: выходные токены у провайдеров примерно в пять раз дороже входных и быстрее сжигают остаток квоты.

Для Claude Code с несколькими аккаунтами есть ключ --resume, но при смене учётной записи серверный кеш промптов сбрасывается, и повторная прокачка длинной истории съедает заметную часть новой квоты. Пересесть на агента другого вендора этим ключом нельзя.

Как baton собирает сводку из журналов

Каждый агент и так пишет подробный журнал на диск. Claude Code хранит JSONL в ~/.claude/projects, Codex — rollout-файлы в ~/.codex/sessions, agy — transcript.jsonl и Protobuf-снимки в ~/.gemini/antigravity-cli, Pi — древовидный JSONL v3 с полями id и parentId, Hermes — SQLite-базу state.db. Команда /compact ничего не стирает: журналы работают на дозапись, а в поток добавляется запись со сводкой предыдущего разговора.

baton проходит журнал с первой записи (в Pi — по активной ветке дерева, в Hermes — по цепочке parent_session_id), собирает список изменённых файлов и выполненных команд, а на маркере сжатия сбрасывает буфер старых реплик. В оперативную сводку попадают текст последнего сжатия и все последующие сообщения целиком. Полная история и длинные выводы команд уходят в /tmp/baton-handoff/<id-сессии>/ (на Windows — в %TEMP%); папки старше суток удаляются, а рабочее дерево остаётся чистым для git status. В чат выводятся метаданные, состояние репозитория, затронутые файлы, последние команды и пути к дампам. Нужную деталь агент достаёт из full_dialogue.md или командой baton turn.

Работа строится вокруг пары save и load. Сессию называют штатной командой агента или через baton save, затем в другом агенте пишут «Продолжи сессию auth-refactor» или «Подхвати последнюю сессию». Если имя не задали, baton list покажет пронумерованных кандидатов с рабочей папкой, временем изменения и первым запросом.

Автор сознательно отказался от MCP-сервера. Такой сервер стартует с каждым сеансом, висит в памяти, а описания его функций попадают в системный промпт и тратят входные токены, даже когда сессии неделями не переносят. Навык SKILL.md держит в контексте одну строку, а утилита запускается разово и сразу завершается. Все пять агентов умеют подгружать навыки по требованию.

Перенос на другой ноутбук без коммитов

Второй сценарий — уйти от домашнего ПК и продолжить на ноутбуке, не заливая сырой код в общую ветку. Команда baton push упаковывает в tar.gz историю сессии, изменённые и новые неотслеживаемые файлы (по истории записи агента и статусу Git, Fossil или SVN), локальные файлы правил — CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules, .agents/rules/ — и копию глобальных инструкций.

Архив шифруется на клиенте алгоритмом AES-256-GCM со случайным 256-битным ключом и уходит в paste.rs (до 10 МиБ), при сбое — в dpaste.org, затем на termbin.com:9999. Есть и вариант с локальной папкой синхронизации: Dropbox, Nextcloud, Syncthing. Ключ — хвост токена после символа # — на сервер обменника не попадает, без него пакет выглядит как случайный шум.

На втором компьютере достаточно вставить выданный промпт в любого агента: он прочитает INSTALL.md, соберёт утилиту и развернёт сессию. Если локальный файл отличается от перезаписываемого, рядом создаётся копия с расширением .baton.bak. Глобальные правила распаковываются во временный каталог и системные конфиги второй машины не трогают.

Установка, обновление и ограничения

Сборка укладывается в три команды: git clone, go build -ldflags="-s -w" и baton install. Внешних зависимостей нет, только стандартная библиотека Go. baton install копирует SKILL.md в каталоги навыков всех пяти агентов и добавляет слэш-команду /baton. Автор советует собирать из исходников, а не брать готовые релизы. Проверка обновлений идёт фоновым процессом не чаще раза в сутки; baton update пересобирает утилиту через go install со сверкой по sum.golang.org либо скачивает бинарник из GitHub Releases и проверяет SHA-256.

Ограничения тоже есть. Публичные пастебины остаются чужой инфраструктурой, а токен переноса фактически секрет, потому что содержит ключ расшифровки. Форматы журналов внутренние и могут измениться при обновлении любого из агентов. Скорость «за долю секунды» — оценка автора, независимых замеров нет. Сам он признаёт, что похожий инструмент можно собрать за день, и предлагает считать главной ценностью разобранные форматы хранения сессий.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: почему HANDOFF.md не спасает?

Стандартный совет — попросить агента перед уходом записать состояние задачи, шаги и план в файл HANDOFF.md. Автор называет три проблемы. Первая: когда лимит исчерпан, агент перестаёт отвечать, и записать итоги уже некому. Вторая: даже если поймать момент заранее, модель пересказывает собственную историю по памяти. Контекстное окно вмещает от 200 тысяч до миллиона токенов, а длина одного ответа ограничена несколькими десятками тысяч, поэтому пересказ неизбежно сжатый. Пропадают точные аргументы команд, номера строк, отвергнутые гипотезы и мелкие правки. Третья: выходные токе

Что известно по теме: как baton собирает сводку из журналов?

Каждый агент и так пишет подробный журнал на диск. Claude Code хранит JSONL в ~/.claude/projects, Codex — rollout-файлы в ~/.codex/sessions, agy — transcript.jsonl и Protobuf-снимки в ~/.gemini/antigravity-cli, Pi — древовидный JSONL v3 с полями id и parentId, Hermes — SQLite-базу state.db. Команда /compact ничего не стирает: журналы работают на дозапись, а в поток добавляется запись со сводкой предыдущего разговора. baton проходит журнал с первой записи (в Pi — по активной ветке дерева, в Hermes — по цепочке parent_session_id), собирает список изменённых файлов и выполненн

Что известно по теме: перенос на другой ноутбук без коммитов?

Второй сценарий — уйти от домашнего ПК и продолжить на ноутбуке, не заливая сырой код в общую ветку. Команда baton push упаковывает в tar.gz историю сессии, изменённые и новые неотслеживаемые файлы (по истории записи агента и статусу Git, Fossil или SVN), локальные файлы правил — CLAUDE.md, AGENTS.md, GEMINI.md, .cursorrules, .agents/rules/ — и копию глобальных инструкций. Архив шифруется на клиенте алгоритмом AES-256-GCM со случайным 256-битным ключом и уходит в paste.rs (до 10 МиБ), при сбое — в dpaste.org, затем на termbin.com:9999. Есть и вариант с локальной папкой синх

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Практика · Hamidun Academy

Соберите рабочего ИИ-агента или сервис своими руками без ручного кода

В Академии Жемала Хамидуна (academy.hamidun.com) открыт бесплатный 72-часовой тест-драйв: интерактивные скетч-уроки по Claude Code и Cursor, живой Tech Radar и готовые шаблоны агентов.

Открыть 72ч бесплатный доступ →Интенсив по Вайб-кодингу
Что вы думаете?
Загружаем комментарии…