Files
obsidian-vault/personal/projects/balda/setup.md
T

11 KiB
Executable File
Raw Blame History

Balda — актуальный локальный запуск

Проверено: 2026-10-15 по обоим работающим контейнерам, Compose, конфигурации и реальным MCP-вызовам.

Обзор: personal/projects/balda/balda. Broker, готовность кандидата и оставшаяся работа: personal/projects/balda/execution-broker.

Что работает сейчас

Параметр Фактическое значение
Хост / контейнер Mac / balda-mm-mac
Канал Mattermost
Provider codex, type codex_acp, reasoning effort medium
Образ обоих инстансов balda-balda:channel-context-046cc9c9, image ID sha256:59acd17a994526d5122a115da57ab5829f5ff16f4ecfc10ee0a69ba0ee9be469
Balda source 046cc9c90960d57e2964110710192d7b97a6692c: upstream d13035ab + закоммиченное исправление контекста канала; Linux ARM64 binary SHA256 4636dccfcc2d32a8bae8d693af42f5638a7bc775e4062f04323a9e52d4f08e75
Compose /Users/admin/Docker/balda-mm-mac/docker-compose.yml
Активный конфиг /Users/admin/Docker/balda-mm-mac/config/config.yaml
State / plugins /Users/admin/Docker/balda-mm-mac/state
Workspace /Users/admin/Docker/balda-mm-mac/work
Home volume balda_balda-home, mounted в /home/node

Config bind-mounted в /workspace/.config/balda read-only для контейнера; state и work доступны ему на запись. Файл ~/Developer/balda/.config/balda/config.yaml относится к отдельному dev checkout и не управляет этим контейнером.

Eagle и общие инструменты

Eagle работает на том же Mac в balda-mm-eagle; Compose, config, state и work находятся в /Users/admin/Docker/balda-mm-eagle/, service — eagle, отдельный home volume — balda_eagle-home. Образы обоих инстансов одинаковы. Авторизации Codex раздельные; при обновлении home volumes сохранены. Серверная проверка: models endpoint отвечает HTTP 200 у обоих. У @balda реальная генерация в отдельной ephemeral read-only сессии завершилась ответом AUTH_OK и turn.completed; исходный аккаунт сохранён. После перечитывания credentials Mattermost websocket подключён, существующие беседы не сбрасывались. Не копировать auth между разными аккаунтами.

У обоих включены одинаковые Obsidian, Execution Broker и Prism MCP, одинаковые права runtime и managed plugin execution-broker rc.32. Проверены реальные initialize/tools-list: Obsidian — 15, Broker — 26, Prism — 5 инструментов; списки совпадают. Eagle дополнительно имеет asana-readonly, URL http://asana-readonly:3100/mcp в приватной Docker-сети. Отдельный контейнер balda-eagle-asana-readonly не публикует порт на хост. Реальное чтение Asana прошло; все пять операций изменения и запись заметок в файл отклоняются сервером.

В обоих конфигурациях provider codex_acp, reasoning medium, явный model отсутствует. Последние записи Codex подтверждают gpt-6.1-sol у обоих. При выравнивании инструментов настройки основной модели не менялись. balda.nats.max_store у обоих — 16gb.

Продолжение задач

Тип канала берётся из канонической привязки сессии. Для Mattermost он остаётся mattermost, включая native waits и возврат результата; human.delivery_channel=telegram меняет только доставку одобрения. SQLite/PostgreSQL migration исправляет прежний сгенерированный Telegram-заголовок в сохранённых ACP instructions без /reset, сохраняя provider thread, capability snapshot и историю. На основном инстансе исправлены семь Mattermost-контекстов, все 1943 прежних события сохранены; у Eagle сохранённых сессий не было. Linux SQLite snapshots обоих инстансов прошли integrity/foreign-key checks. Backup и отчёты: state/balda-channel-context-20261015/.

В этой версии generic webhooks выполняют изолированные задания. Они не продолжают исходную сессию. Старые routes.*.path, envelope.target, key_from_body, mode и fallback_to удалены из конфигурации; listener задаётся через balda.http. Сейчас он слушает loopback 127.0.0.1:8095.

Плагин rc32 использует balda.state и штатный balda.session.wait: наблюдатель вооружается до Start/retry и возвращается в исходную сессию. Managed lifecycle и restart-контракт проверены; conversational acceptance с реальной моделью ещё открыт. Старые callbacks Broker на :8090 приостановлены, недоставленные cursors сохранены. Native wait acceptance не является подтверждением доставки сообщения провайдером.

Оба инстанса имеют также одинаковые пять глобальных Codex skills и одинаковую Codex tool policy; различий не найдено. Обновление плагина выполнено штатной переустановкой из нового operator source с сохранением plugin-data/execution-broker, старых revisions/catalog snapshots и содержимого прежнего marketplace. Существующие сессии не сбрасывались.

Изменения и перезапуск

Изменение Действие
Только host config/config.yaml docker restart balda-mm-mac: процесс перечитывает конфигурацию при старте
.env, environment, mounts, service definition Из каталога Compose: docker-compose up -d balda
Новый image Сначала получить или собрать выбранный образ, затем docker-compose up -d balda; в действующем Compose нет build-секции
Код в checkout Сам по себе не обновляет образ; нужен отдельный build и применение выбранного image
Изменение catalog / skills существующей беседы Обычный /reset для выбора текущего capability snapshot

docker restart не применяет изменения Compose или .env. --force-recreate для изменения только config.yaml не требуется. До смены image сохраняют согласованный state backup и прежний image/config для отката.

Plugins, skills и инструкции

Managed plugin revisions неизменяемые; вручную редактировать их содержимое в state нельзя. Документация проекта описывает управление пакетами через Backoffice → Operations → Plugins: Installed/Marketplaces, review exact revision, install/upgrade/enable/disable/rollback/remove. Проверять доступность поверхности на используемой версии, а не переносить команды из архивных runbooks: plugins reference.

Management не сбрасывает существующие сессии. Новая сессия выбирает текущий catalog; существующая принимает capabilities через обычный /reset. Standalone skills также редактируются отдельно от уже закреплённого session snapshot.

personal/projects/balda/soul содержит сверенный снимок balda.global_instruction. personal/projects/balda/workspace-context описывает runtime.providers.codex.system_instructions; сейчас отдельное значение не настроено. Редактирование заметки не меняет работающий конфиг.

Codex ACP

Reasoning effort в активном конфиге — medium. Авторизация CLI хранится в home volume. Для восстановления существующего @balda: docker exec -it balda-mm-mac codex login --device-auth, завершить вход в исходный аккаунт и проверить реальный запрос к провайдеру. codex login status подтверждает только наличие локальной авторизации и сам по себе не доказывает действительность токена на сервере. При необходимости перезапустить Balda для перечитывания auth; /reset не требуется. Для отдельного headless-входа используется команда из каталога Compose:

docker-compose run --rm --entrypoint codex balda login --device-auth

Obsidian MCP

Проверенный блок активной конфигурации находится в runtime.mcp_servers:

runtime:
  mcp_servers:
    obsidian:
      type: http
      url: http://host.docker.internal:3101/mcp

Используется Streamable HTTP. Для Codex ACP SSE-конфигурацию из старых заметок не переносить. После изменения этого блока нужен перезапуск Balda.

Диагностика

docker ps --filter name=balda-mm-mac
docker logs --tail 120 balda-mm-mac

Проверять успешный startup provider и подключение Mattermost. Не копировать токены, cookie или login URLs из логов в заметки.

Архив старых схем и шаблонов: personal/projects/archive/balda-reference-before-2026-10-14.