Избранное
AISWARM
в работе (тесты)
Distributed cognitive workforce runtime — Claude, Codex, DeepSeek и локальный Llama бок о бок на одном кодбейзе, под ними a2abridge (messaging) и BrainCore (память).
- Go 1.25
- tmux
- git worktree
- SQLite (modernc.org)
- MCP
- A2A 1.0
- BrainCore
- Bubble Tea
- REST API
- sandbox-exec / bwrap
Проблема
Один AI coding-агент, каким бы способным он ни был, упирается в собственный контекст, в outages своего провайдера и в собственную ценовую кривую. Честный production-паттерн — это рой: несколько специализированных агентов над одним кодбейзом, каждому даётся задача, на которой он сильнее всего, planner раздаёт работу, verifier решает когда эскалировать.
AISWARM — то, что выпало из шести месяцев такой работы и усталости от костылей. И смысл он имеет только как триада: AISWARM — runtime, a2abridge — открытый A2A 1.0 messaging mesh, BrainCore — cognitive memory plane. Каждый компонент ставится отдельно; вместе они образуют distributed cognitive workforce.
Архитектура
- Один pure-Go бинарь, четыре провайдера. Claude Code, Codex, DeepSeek и локальный Llama (LM Studio / llama.cpp) крутятся параллельно, каждый в своей tmux-сессии и своём git worktree, под единым RPC-контрактом.
- KindPlanner с 12 типизированными agent roles. План раскладывается по ролям (planner, scaffolder, refactorer, tester, reviewer, doc-writer, …); role-aware
auto_chooserouting’ует таски 30/30/20/20 между провайдерами (high-stakes → Claude, scaffolding → Llama, тесты/доки → Codex, low/medium-склейка → DeepSeek). План можно перераскладывать на лету через MCP-toolplan_expand. - CLI-shim в Anthropic-формате. Маленький адаптер нормализует любой OpenAI-совместимый бэкенд (DeepSeek, Llama через LM Studio) под Anthropic request/response — остальная система знает один протокол.
- 3-tier verifier. Каждое изменение проходит составной verifier: tier 1 запускает родную команду проекта (например
go test ./...), tier 2 проигрывает изменение поверх integration-ветки и ловит регрессии, tier 3 просит LLM judge об семантическом подтверждении. Фейлы возвращаются в очередь со структурированным фидбеком. - Peer-helper consult (
ASK_PEER). Застрявший воркер может выдать маркер, и dispatcher спавнит cross-model хелпер в новом tmux-окне — read-only, one-shot, жёсткий лимит 3 консультации на таск, polling reply-файла. Исходный воркер не закрывает сессию; хелпер пишет ответ и выходит. - Failover chain + soft pause/resume. Если провайдер 5xx’ит, упирается в rate-limit или таймаут — planner двигает таску по типизированной цепочке. Отмена таска не убивает зависимые: каскад ставится на паузу и аккуратно возобновляется, когда родительская починена.
- Decomposition подзадач через MCP. Большие задачи режутся на атомарные куски, которые воркер реально доделает за один turn.
- Cost ledger. Tokens, доллары и latency считаются по каждому провайдеру и каждой задаче; дашборд показывает, кто реально окупает себя.
Технические детали
- 33 internal-пакета, 8 бинарей — Phase 6 закрыт. Runtime прошёл черту «работает под нагрузкой»: planner, dispatcher, runner, verifier, merger, watchdog, quota, state, mcp, a2abridge client, braincore client, language autodetect, notify, consult, tui, config — все зелёные, lint silent.
- Снизу — a2abridge. Воркеры и оркестратор общаются по открытому A2A 1.0 — не по самописным пайпам — поэтому любой внешний A2A-агент подключается бесплатно.
- BrainCore (или любая MCP-память) как side-channel. AISWARM сознательно не встраивает собственный cognitive memory engine. Память — side-channel поверх MCP: направь на личный
total-agent-memoryсервер или на BrainCore — оба работают. - Воркеры в песочнице. Каждый воркер крутится в
sandbox-exec(macOS) илиbwrap(Linux), в своём git worktree с per-worktree исключениями.a2a/и.aiswarm/— coordination-файлы не попадают в коммиты. - Detach-by-default демон.
aiswarm runфоркается в фон после планирования, печатает PID и URL дашборда, возвращает shell. REST API (/api/projects,/api/projects/:id/swarms) иsignal(0)liveness probe позволяют WebUI оживить мёртвый демон кнопкой ▶. - Живой дашборд, две поверхности. Bubble Tea TUI для терминала и WebUI с вкладками A2A и Memory в браузере — обе читают из одного и того же atomic flock-protected JSON state store.
- Pure-Go, zero CGO. SQLite через
modernc.org/sqliteв~/.aiswarm/aiswarm.db. Единый static-бинарь; Docker для самого оркестратора не нужен.
Текущий статус
Phase 6 закрыт: 33 пакета зелёные, lint silent, smoke 2/2 MERGED, 8 бинарей в обороте. Репозиторий остаётся приватным пока стабилизируется wire-протокол между planner, verifier и воркерами, и пока тюнятся cost-routing heuristics под реальные нагрузки. Когда orchestration-слой дойдёт до зрелости a2abridge и BrainCore — AISWARM будет открыт под той же MIT-лицензией, что и его два пира.
Промежуточные уроки
- Рой ломается не как одиночный агент. Одиночка застревает; рой каскадирует. Половина бюджета дизайна ушла на остановку каскадов — peer-helper consult, soft pause/resume и 3-tier verifier существуют ровно по этой причине.
- Правильно выбрать воркера важнее, чем правильно выбрать модель. Провайдер на 30 % дешевле, правильный 95 % времени на своей полосе, — лучше топ-модели на всём. Поэтому
auto_chooserole-aware, а не только model-aware. - Verifier не опционален, и одного уровня мало. «Доверять выводу модели» — это та самая ошибка, которая на следующий день оправдывает verifier. «Доверять unit-тестам» — оправдывает tier 2 и tier 3 неделей позже.
- Память должна жить снаружи runtime. Вшивать memory engine в оркестратор было очевидной ошибкой. Память как side-channel поверх MCP позволила BrainCore и
total-agent-memoryразвиваться независимо — и дала AISWARM возможность дойти до прода, не превратившись в research-проект.