Skip to main content

Избранное

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_choose routing’ует таски 30/30/20/20 между провайдерами (high-stakes → Claude, scaffolding → Llama, тесты/доки → Codex, low/medium-склейка → DeepSeek). План можно перераскладывать на лету через MCP-tool plan_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_choose role-aware, а не только model-aware.
  • Verifier не опционален, и одного уровня мало. «Доверять выводу модели» — это та самая ошибка, которая на следующий день оправдывает verifier. «Доверять unit-тестам» — оправдывает tier 2 и tier 3 неделей позже.
  • Память должна жить снаружи runtime. Вшивать memory engine в оркестратор было очевидной ошибкой. Память как side-channel поверх MCP позволила BrainCore и total-agent-memory развиваться независимо — и дала AISWARM возможность дойти до прода, не превратившись в research-проект.