# Balda — актуальный локальный запуск Проверено: **2026-10-15** по обоим работающим контейнерам, Compose, конфигурации и реальным MCP-вызовам. Обзор: [[personal/projects/balda/balda|Balda]]. Broker, готовность кандидата и оставшаяся работа: [[personal/projects/balda/execution-broker|Execution Broker — текущий локальный контур]]. ## Что работает сейчас | Параметр | Фактическое значение | | --- | --- | | Хост / контейнер | Mac / `balda-mm-mac` | | Канал | Mattermost | | Provider | `codex`, type `codex_acp`, reasoning effort `medium` | | Образ обоих инстансов | `balda-balda:upstream-6621b189-channel-fix`, image ID `sha256:e68ecaed4ceed2040c4592e9d4f8cd053d0b65d8086fa67ef1c99c8d10f42db1` | | Balda source | `6238856b5189f34f6e2a244e146cb6342e948623`: upstream `6621b189` + закоммиченное исправление контекста канала; Linux ARM64 binary SHA256 `94827ac2b57456c7f30bfd7a02fecd2d3ddb4e52a51af702f3f830720b56bf8d` | | 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 и историю. Согласованные Linux SQLite snapshots обоих инстансов прошли integrity/foreign-key checks; последнее обновление сохранило все 2072 прежних события основного инстанса, locator, capability snapshots, provider threads и auth. Плагин rc32 совместим с текущей Balda и не требовал переустановки; immutable revisions сохранены. Актуальный backup и отчёты: `state/balda-upstream-hooks-20261015/`; 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 smoke с моделью, фактическим Telegram Human ответом, шестью проверенными артефактами, `cleanup=done` и единственным итоговым сообщением в исходной Mattermost-беседе прошёл; Story/Task закрыты и waits отменены. Реальная беседа прошла также HTTP 502 и restart Broker/Prism/Balda во время Human pause: тот же run/Story, provider thread и deadline восстановились, фактический Telegram approval принят, шесть артефактов проверены, `cleanup=done`. Story/Task закрыты, waits отменены, сообщение о завершении restart-приёмки подтверждено через Mattermost API. Старые 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](https://github.com/baldaworks/balda/blob/main/docs/reference/plugins.md). Management не сбрасывает существующие сессии. Новая сессия выбирает текущий catalog; существующая принимает capabilities через обычный `/reset`. Standalone skills также редактируются отдельно от уже закреплённого session snapshot. [[personal/projects/balda/soul|Global instruction]] содержит сверенный снимок `balda.global_instruction`. [[personal/projects/balda/workspace-context|Provider 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: ```bash docker-compose run --rm --entrypoint codex balda login --device-auth ``` ## Obsidian MCP Проверенный блок активной конфигурации находится в `runtime.mcp_servers`: ```yaml runtime: mcp_servers: obsidian: type: http url: http://host.docker.internal:3101/mcp ``` Используется Streamable HTTP. Для Codex ACP SSE-конфигурацию из старых заметок не переносить. После изменения этого блока нужен перезапуск Balda. ## Диагностика ```bash 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]].