92 lines
10 KiB
Markdown
Executable File
92 lines
10 KiB
Markdown
Executable File
# 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-ee312646-b1`, image ID `sha256:2f2294dd0ae3061f5e1f74f15d002f10a3c4075aaf57d6bcf97b57c9f6b95a4f` |
|
||
| Balda source | `ee3126460a8f6e2667e9941f4ef68c5f5872b216`; Linux ARM64 binary SHA256 `945763163b29cd6190d21775c4ee46c7c54d1a98cea59f7109c30dbe5b6f460c` |
|
||
| 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`.
|
||
|
||
## Продолжение задач
|
||
|
||
В этой версии 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](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]].
|