7.3 KiB
Executable File
Balda (Валера) — AI Worker Bot
Актуальный статус — 2026-10-03. Mattermost-интеграция PR #8 уже в upstream. PR #12 по маршрутизации webhook открыт на
73e02156: 8/8 GitHub checks прошли; повторное ревью после исправления запрошенных изменений ещё ожидается. Balda запущена из чистого текущего HEAD PR73e02156, и хеш бинарника в контейнере совпадает с собранным артефактом. Ревьюер запросил изменения в PR #12 из-за 404 при временном сбое lookup session. Исправление73e02156уже отправлено: теперь ответ 503, добавлен HTTP-тест; локальные race tests и lint прошли, все 8 checks нового HEAD прошли. До повторного сквозного прогона merge/release — NO-GO. Прежний вывод о другом SHA был ошибкой:d094943bотносился к внешнему репозиторию Broker, аdeepseekfixбыл старой меткой образа. Локальных правок кода Balda в текущем бинарнике нет; новый сквозной прогон ещё нужен. Приёмочный Broker runrun-fbe2cb459fe2965554402aba1bd5fcd0прошёл; Mattermost отправил апрув и финал в исходный тред. Результат4dafb9dбыл доставлен вgo-cli-testвручную через Broker API: Balda пропустила автоматическую публикацию. Broker теперь сам проверяет commit/quality/bundle без обязательного SHA от Balda; webhook и плагин rc.19 требуют публикацию до закрытия Story. Новый end-to-end прогон ещё не проведён. Общий release — NO-GO. Детали и текущие проверки: personal/plans/balda-callee-prism-plan. Ниже сохранена историческая документация; старые статусы PR и конфигурации не являются текущими.
Аналог Hermes. Go-сервис: берёт задачи из чата (Telegram или Zulip), запускает AI CLI и отвечает.
Репо
- Upstream: https://github.com/baldaworks/balda (старое имя
normahq/balda— редирект) - Fork: https://github.com/mallexxx/balda
- Local: ~/Developer/balda
- Ветка:
feat/mattermost-channel(PR #8, OPEN, 8/8 CI, MERGEABLE)
🔴 Два репозитория — не путать
| Репо | Что там | PR |
|---|---|---|
baldaworks/balda |
сам бот, транспорты (Mattermost, Zulip) | #8 Mattermost, OPEN · #1 Zulip, merged |
normahq/runtime |
библиотека рантайма (agentfactory, hostedagent) |
#5 фикс MCP-тулинга, OPEN · CHANGES_REQUESTED (3 дефекта, план — personal/plans/runtime-pr5-toolset-dedup-review-fixes) · #4 OpenAI tool_calls, OPEN (4 дефекта закрыты, personal/plans/runtime-pr4-openai-toolcalls-fixes) |
Форки: mallexxx/balda, mallexxx/runtime — разные, клоны тоже разные.
Детали по runtime-PR → personal/projects/balda/balda-valera.
⚠️ PR из форка: CI не запускается сам. GitHub требует ручного подтверждения workflows
владельцем репо («Approve and run workflows») → mergeStateStatus: UNSTABLE при
check-runs: total_count 0. Это не поломка PR.
Архитектура
- NATS JetStream — event bus (embedded)
- SQLite — состояние (owner, sessions, tasks)
- Telegram — через polling или webhook
- Zulip — через outgoing webhook bot
- Providers: codex, opencode, copilot, gemini, claude (ACP protocol)
Zulip Integration
Полностью реализована. Webhook-based (не polling).
Тип бота: Outgoing webhook (не Generic bot).
Credentials (zulip.qentra.top)
- Bot email:
balda-bot@zulip.qentra.top - API key:
AtC9FypdIl6F0hNICW0lcOzehrVrWhPr - Server URL:
https://zulip.qentra.top - Webhook token: берётся из Settings → Bots → balda-bot → Edit → Token
Config (env vars)
BALDA_ZULIP_BOT_EMAIL=balda-bot@zulip.qentra.top
BALDA_ZULIP_API_KEY=AtC9FypdIl6F0hNICW0lcOzehrVrWhPr
BALDA_ZULIP_SERVER_URL=https://zulip.qentra.top
BALDA_ZULIP_WEBHOOK_TOKEN=<из настроек бота>
BALDA_ZULIP_WEBHOOK_ENABLED=true
Webhook setup в Zulip
- Settings → Bots → balda-bot → Edit
- Bot type: Outgoing webhook
- Endpoint URL:
http://<host>:8090/zulip/webhook - Скопировать token →
BALDA_ZULIP_WEBHOOK_TOKEN
Авторизация
После запуска написать боту в DM:
/start owner=<BALDA_AUTH_TOKEN>
Реализованные команды (Telegram parity)
| Команда | Статус |
|---|---|
/start owner=<token> |
✅ |
/start invite=<token> |
✅ |
/goal <objective> / /goal clear |
✅ |
/topic |
✅ (создаёт сессию для нового топика) |
/user add <email> |
✅ |
/user list |
✅ (с инвайтами + expiry) |
| Typing indicator | ✅ (isDM-aware: true в DM, false в стримах) |
| plan_updates / SendDraftPlain | ➖ no-op (нет аналога в Zulip) |
Upcoming: mention-based thread takeover
Когда @balda-bot упоминается в топике без активной сессии — бот автоматически берёт топик под контроль.
Механизм (аналог whale-thread-guard в Hermes):
- Webhook payload поле
trigger == "mention"→ auto-create session allowed_ownersсписок в конфиге: Zulip email без токена- После захвата топик отвечает на все сообщения (обычная сессия)
Конфиг и инструкции
balda/soul.md— soul (global_instruction) — редактировать здесь, синхронизировать в config.yamlbalda/workspace-context.md— per-provider system_instructions (рабочий проект/стек)~/Developer/balda/.config/balda/config.yaml— основной конфиг (runtime + balda)~/Developer/balda/.env— секреты (Zulip API key, webhook token)
Запуск
cd ~/Developer/balda && ~/.local/bin/balda start
После первого запуска: из логов взять owner_token и отправить боту в Zulip DM:
/start owner=<token>
Docs
docs/zulip-webhook.md— полное руководство по настройкеdocs/balda.md— техническая спецификация