Автономный агент на чистом Bash с непрерывным потоком мыслей
Большинство ИИ-агентов работают по принципу торгового автомата: бросил монетку-промпт, получил ответ, процесс завершился. Контекст сбрасывается или сохраняется в базу до следующего вызова. А что если агент никогда не засыпает, постоянно обдумывает задачи в фоновом режиме, а сообщения от людей воспринимает просто как очередные наблюдения во внешнем мире?
Именно так устроен Headlong — микрокаркас (microharness) для создания постоянных агентов, ядро которого написано целиком на Bash и укладывается примерно в 10 тысяч строк кода. Никакого Python, никаких тяжелых фреймворков. Только bash, curl, jq, Docker и стандартные утилиты Unix.
В чем идея постоянного агента
В традиционных архитектурах пользователь инициирует диалог. В Headlong агент непрерывно крутит цикл генерации мыслей. Он формулирует гипотезы, ставит себе фоновые задачи, читает файлы и выполняет команды.
Когда коллега пишет агенту в Slack, Telegram или локальный чат, входящее сообщение не создает отдельную изолированную сессию. Оно попадает в общий поток мыслей агента. Агент сам решает, ответить прямо сейчас, продолжить текущую задачу или объединить двух людей, если они задают смежные вопросы по кодовой базе.
У всей команды получается один общий собеседник с единой памятью. Если вы рассказали агенту о баге в приватном чате, он вполне может упомянуть это в обсуждении с другим разработчиком. Это похоже на живого коллегу в общем офисе, а не на изолированный сервис с сессиями.
Как устроен разум из shell-скриптов
В основе проекта лежит концепция рекурсивных языковых моделей (RLM). Вместо сложных протоколов вызова инструментов и прослоек сериализации, агент думает на языке командной строки:
- Модель получает текущий контекст.
- В качестве действия она генерирует обычные bash-команды.
- Инструмент
shellmвыполняет эти команды внутри песочницы Docker. - Вывод
stdoutиstderrвозвращается модели как результат действия.
Вся система собрана по философии Кена Томпсона: набор маленьких утилит, каждая из которых решает одну задачу и соединяется с остальными через пайпы и файлы.
+-----------+ bash +----------------+
| | --------------> | shellm / Docker |
| LLM | +----------------+
| (thinkers)| <-------------- |
+-----------+ stdout/stderr v
^ +-----------+
| | traj | (DAG в jsonl)
+------------------------- +-----------+
context (сжатие)
В каталоге bin/ лежит несколько самостоятельных инструментов:
shellm— исполнительное ядро, которое связывает вызовы LLM и выполнение bash-скриптов.llm— CLI-обертка над API Anthropic, OpenAI, Gemini и OpenRouter с единым интерфейсом.traj— хранилище истории действий в виде направленного ациклического графа (DAG) из jsonl-файлов с поддержкой веток и слияний.context— сборщик контекста для LLM, который динамически сжимает историю.memиskills— хранилище долговременной памяти и переиспользуемых навыков в markdown-файлах.
Работа с памятью и ветвлением
Самая большая проблема бесконечно работающего агента — переполнение контекстного окна. В Headlong применили ступенчатое сжатие (tiered compaction).
История действий агента никогда не перезаписывается на месте. Она сохраняется в DAG. Недавние события передаются модели дословно, а старые шаги постепенно суммаризируются. При этом сжатые уровни работают как оглавление: если агенту нужны детали пятидневной давности, он находит нужный узел графа и считывает сырые логи командой через traj.
Еще интереснее устроена работа с под-агентами. Когда задача требует изоляции, агент порождает дочерний процесс. Дочерний агент видит дерево рассуждений родителя: почему его создали, какие попытки провалились и чего от него ждут.
Агент даже может улучшать собственный исходный код. Он делает git fork репозитория Headlong, вносит правку в bash-скрипты, запускает тесты и, если все работает, готовит коммит. Разработчики из института Laude утверждают, что влили в основной репозиторий больше полусотни коммитов, написанных их собственным запущенным инстансом.
Быстрый старт и интерфейс
Установка выполняется одной командой:
curl -fsSL https://headlong.ai/install.sh | bash
Скрипт проверяет наличие bash 3.2+, git, curl, jq, предлагает выбрать провайдера LLM и настроить Docker-песочницу. Для работы веб-дашборда также понадобятся uv и Node.js (или Bun).
После инициализации имя агента становится командой в вашей системе:
# Отправить реплику и дождаться ответа
ada привет, над чем сейчас работаешь?
# Запустить интерактивный чат
ada
# Открыть веб-дашборд с визуализацией потока мыслей
ada dash
# Приостановить или возобновить работу
ada stop
ada start
Если агент ушел в неконтролируемый цикл или делает что-то странное, предусмотрена общая кнопка остановки: headlong-killall.
О чем стоит помнить перед запуском
Headlong — это экспериментальный исследовательский софт, и здесь есть нюансы, о которых нужно знать заранее.
Во-первых, расходы на API. Поскольку агент думает непрерывно, он постоянно тратит токены. В коде заложен экспоненциальный спад частоты циклов, когда с агентом никто не общается, но при активной работе на мощных моделях расходы составляют от $1 до $2 в час. Настоятельно рекомендую использовать отдельный API-ключ с жесткими лимитами расходов.
Во-вторых, безопасность. Агент выполняет произвольный код. Установщик по умолчанию настраивает запуск команд внутри изолированного контейнера Docker, и отключать эту изоляцию на рабочей машине точно не стоит.
Итоги
Проект понравится тем, кто устал от сотен слоев абстракций вокруг простых вызовов LLM. Headlong показывает, что полноценного агента с памятью, ветвлением задач и веб-интерфейсом можно построить на базовых утилитах Unix и лаконичном Bash.
Если вы исследуете автономных агентов или ищете необычного ассистента для командного чата, развернуть Headlong в Docker на отдельной виртуалке — отличный эксперимент на выходные.
