diff --git a/personal/plans/balda-remote-agent.md b/personal/plans/balda-remote-agent.md index 48a17cdf..df93de64 100644 --- a/personal/plans/balda-remote-agent.md +++ b/personal/plans/balda-remote-agent.md @@ -1,6 +1,8 @@ # Balda — удалённый агент по SSH Обновлено: **2026-10-18**. +Отдельный проект доступа к папкам: [[personal/plans/workspace-gateway|Workspace Gateway]], `/Users/admin/Developer/workspace-gateway`, начальный коммит `2bc6743`. +Дополнительная проверка SSH и Seatbelt: [[personal/projects/balda/ssh-seatbelt-2026-10-18]]. Исходная задача: Balda работает с оригинальными Prism/Beads по подключённым проектам и запускает штатного агента в другой среде; подключение нового репозитория требует подтверждения владельца. Проверка: [[personal/projects/balda/ssh-acp-verification-2026-10-18]]. Рабочая установка: [[personal/projects/balda/setup]]. @@ -32,13 +34,22 @@ macOS-окружения предоставляет Virfield через его M ## Следующие конкретные действия -1. Я настрою для выбранной среды SSH-профиль с отдельной identity, закреплённым host key и ограниченным пользователем. -2. Я предоставлю среде только подтверждённый проект и проверю фактический доступ к его файлам и исходному состоянию Beads; отдельно проверю отказ доступа к соседнему проекту и секретам хоста. -3. Я приведу пути workspace к совместимому виду и настрою достижимые из среды адреса выбранных MCP; проверю чтение статуса через `bd` и вызов MCP. -4. Я подготовлю в среде штатный ACP-агент, его собственную авторизацию и оригинальные skills/tools, затем добавлю в Balda отдельный `generic_acp` provider с командой SSH. -5. Я настрою запросы разрешений у агента и штатный `ask` в Balda, затем проверю реальный рабочий цикл Prism, отказ, отмену и продолжение той же сессии. +1. Я реализую и приму Workspace Gateway в отдельном проекте: листинг папок без файлов, подключение после подтверждения владельца, отключение и временный лизинг; сетевая файловая система обеспечит одни и те же исходные файлы Balda и агентам без перезапуска Balda при каждой выдаче. +2. Я настрою авторизованный SSH из контейнера в реальные среды, проверку host key, ограниченные credentials и штатный `generic_acp` с командой SSH; доступность порта и проверка протокола уже подтверждены, рабочая авторизация ещё не принята. +3. Я настрою запуск агентов и обычных команд на Mac под Seatbelt, начиная со штатных sandbox и готового `anthropics/sandbox-runtime`, и проверю запрет доступа к соседним проектам, секретам и обхода через другой SSH command. +4. Я настрою согласованные пути workspace, достижимые MCP, оригинальные skills/tools и единое состояние Beads для Balda и одновременных агентов, затем включу запросы разрешений у агентов и штатный `ask` Balda. +5. Я проведу реальную приёмку выбранных Codex/Claude/OpenCode и оригинального Prism: статус проекта, подтверждение и отказ, выполнение, отмена, продолжение сессии и прекращение доступа после отзыва или истечения лизинга. Это оставшаяся работа, а не уже выполненный deployment. +SSH/Seatbelt/ACP и настройка Beads не расширяют четыре функции Workspace Gateway. + +## Что подтверждено дополнительно + +- Docker работает через Colima, а не Docker Desktop. +- Из основного контейнера получены SSH banners Mac и внешнего GitHub на TCP/22; логин и команды при этом не выполнялись. +- Seatbelt на Mac 26.7.1 реально заблокировал чтение и запись в контрольную папку, в том числе дочерним shell; это не готовый production профиль. +- Документация Beads описывает Dolt server mode для нескольких одновременных записывающих агентов: [первичный источник](https://github.com/gastownhall/beads/blob/main/docs/architecture/index.md). +- Политика файлов и сети для реальных агентов, native approvals и полная работа Prism остаются открытыми. ## Права и репозитории @@ -54,8 +65,8 @@ macOS-окружения предоставляет Virfield через его M В рабочем конфиге остаётся `permissions.mode: allow_all`; SSH-проверка production-конфиг, историю и авторизацию не меняла. Полный Prism lifecycle с моделью и реальные удалённые Claude/Codex этой проверкой не приняты. -Новая ветка: `broker-rebuild`, worktree `/Users/admin/.codex/worktrees/broker-rebuild/execution-broker`. -Она начата с пустого дерева коммитом `1fd7f57`; сейчас есть только незакоммиченный README, реализации нового брокера нет. +Новый сервис создаётся в отдельном проекте `workspace-gateway`; его объём ограничен четырьмя функциями доступа к папкам. +Прежняя ветка `broker-rebuild` в `/Users/admin/.codex/worktrees/broker-rebuild/execution-broker` — оставшийся каркас предыдущего обсуждения, а не место реализации Workspace Gateway. Старые `execution-broker`, `execution-prism` и plugin остаются в действующей Balda; очистка новой ветки не удаляла их из deployment. Историческая приёмка прежнего брокера: [[personal/plans/balda-callee-prism-plan]]. diff --git a/personal/plans/workspace-gateway.md b/personal/plans/workspace-gateway.md new file mode 100644 index 00000000..5729a8c9 --- /dev/null +++ b/personal/plans/workspace-gateway.md @@ -0,0 +1,53 @@ +# Workspace Gateway — план + +Обновлено: **2026-10-18**. +Проект: `/Users/admin/Developer/workspace-gateway`. +Git: `main`, начальный коммит `2bc6743`; создан каркас README/AGENTS/.gitignore, реализации сервиса пока нет. +Общий setup Balda: [[personal/plans/balda-remote-agent]]. + +## Назначение и четыре функции + +Сервис выдаёт Balda и удалённым агентам доступ к исходным папкам через сетевую файловую систему. +Balda и агенты видят одни и те же файлы; копирование Git-репозитория не считается реализацией общего доступа. + +1. **Папки:** листинг папок хоста, включая навигацию по дереву, без выдачи списка файлов и их содержимого. +2. **Подключение:** выбранная папка появляется в work dir после подтверждения владельцем точного пути, получателя, режима доступа и срока. +3. **Отключение:** фактический отзыв ранее выданного доступа. +4. **Лизинг:** статус и срок действия, автоматический отзыв после истечения срока, продление с подтверждением владельца. + +Четыре пользовательские функции — согласованный объём проекта. +Обработка ответа владельца, журнал выданных разрешений и таймеры обслуживают эти функции, а не расширяют API прикладными сценариями. + +## Границы + +SSH-запуск, ACP-транспорт, исполнение команд на хосте и Seatbelt относятся к настройке Balda и среды, а не к Workspace Gateway. +Prism, Callee, Beads, управление задачами и сессиями используются штатно. +Сервис не реализует собственные Story workflows, собственный Prism и дублирующий scheduler. + +Общий каталог Developer и домашний каталог не выдаются агентам. +Листинг папок даёт возможность запросить конкретный путь, а не право читать его файлы. +Ответ от модели или аргумент `approved=true` не является подтверждением владельца. +Отзыв и истечение срока должны прекращать реальный доступ, включая существующие соединения и открытые файловые дескрипторы. + +## Конкретные шаги + +1. Я проверю готовую сетевую файловую систему на текущем Docker/Colima и целевых средах: исходные файлы видны обоим клиентам, добавление разрешённой папки обходится без перезапуска Balda, соседняя папка недоступна, отзыв закрывает уже выданный доступ. +2. Я подключу постоянную точку сетевой файловой системы в work dir; это разовая настройка deployment, последующие выдачи и отзывы происходят в рантайме. +3. Я реализую листинг папок и запрос подключения, связав подтверждение владельца с точным путём, получателем, правами и сроком; сначала проверю пригодность штатных взаимодействий Balda. +4. Я реализую отключение и временный лизинг, сохранение состояния разрешений и обработку истечения срока после перезапуска сервиса; неполученное подтверждение оставляет доступ закрытым. +5. Я проведу приёмку с двумя клиентами: общие файлы, RO/RW, запрет соседних путей и обхода через ссылки, отказ владельца, отзыв, истечение, продление и повторный запуск сервиса. + +NFS/SMB или другой backend ещё не выбран: поддержка протокола сама по себе не подтверждает нужные свойства прав и отзыва. +До выбора backend сохраняется ровно этот объём; общая копия всех репозиториев и ослабление изоляции не являются заменой выдаче доступа. + +## Что уже проверено и что остаётся + +- [x] Создан отдельный Git-проект с зафиксированной границей четырёх функций. +- [x] Проверена независимая возможность штатного ACP Balda поверх SSH: [[personal/projects/balda/ssh-acp-verification-2026-10-18]]. +- [ ] Выбрана и испытана сетевая файловая система. +- [ ] Реализованы четыре функции, подтверждения и фактическое ограничение доступа. +- [ ] Настроено общее состояние Beads и принята работа реальных агентов через полученный workspace. + +Доступ к исходникам и доступ к состоянию Beads — связанные, но отдельные пункты общей установки. +Для одновременной работы Balda и нескольких агентов Beads описывает server mode Dolt: [официальная архитектура](https://github.com/gastownhall/beads/blob/main/docs/architecture/index.md). +Сетевой mount сам по себе не считается приёмкой конкурентной работы БД. diff --git a/personal/projects/balda/balda.md b/personal/projects/balda/balda.md index a58d26f8..a8d27b42 100755 --- a/personal/projects/balda/balda.md +++ b/personal/projects/balda/balda.md @@ -4,6 +4,8 @@ ## Источники текущего состояния +- [[personal/plans/workspace-gateway|Workspace Gateway — отдельный проект и четыре функции доступа]] +- [[personal/projects/balda/ssh-seatbelt-2026-10-18|Проверка исходящего SSH и Seatbelt; оставшиеся пункты setup]] - [[personal/plans/balda-remote-agent|Актуальный план удалённого агента по SSH]] - [[personal/projects/balda/ssh-acp-verification-2026-10-18|Проверка штатного ACP, разрешений и восстановления сессии]] - [[personal/projects/balda/setup|Работающий контейнер, конфигурация, MCP и перезапуск]] @@ -21,7 +23,7 @@ Upstream: [baldaworks/balda](https://github.com/baldaworks/balda). Fork: [mallex Действующий конфиг: `/Users/admin/Docker/balda-mm-mac/config/config.yaml`; выбран `balda.provider: pool`. Dev-конфиг в `~/Developer/balda` — отдельный файл. Obsidian MCP — `type: http`, `http://host.docker.internal:3101/mcp`. -Balda сохраняет штатную оркестрацию, сессии, MCP, skills и подтверждения. Связь с агентом в другой среде — через SSH и штатный ACP; базовый путь уже проверен без нового ACP-брокера. Окружение получает выбранный workspace и ограниченные права; macOS предоставляет Virfield. Исторические функции прежнего Broker и его подключённые MCP описаны отдельно и не задают объём нового брокера. +Balda сохраняет штатную оркестрацию, сессии, MCP, skills и подтверждения. Связь с агентом в другой среде — через SSH и штатный ACP; базовый путь уже проверен без нового ACP-брокера. Доступ к исходным папкам выделен в отдельный проект Workspace Gateway; macOS предоставляет Virfield. Рабочая SSH-авторизация, профили Seatbelt, native ask, достижимость MCP и общее состояние Beads ещё требуют настройки и приёмки. Исторические функции прежнего Broker и его подключённые MCP описаны отдельно и не задают объём нового брокера. Документация кода: [README](https://github.com/baldaworks/balda/blob/main/README.md), [configuration](https://github.com/baldaworks/balda/blob/main/docs/reference/configuration.md), [plugins](https://github.com/baldaworks/balda/blob/main/docs/reference/plugins.md). diff --git a/personal/projects/balda/setup.md b/personal/projects/balda/setup.md index 536e7e47..8f8ad2a3 100755 --- a/personal/projects/balda/setup.md +++ b/personal/projects/balda/setup.md @@ -2,6 +2,9 @@ ## Актуальное обновление — 2026-10-18 +Новый сервис подключения папок: [[personal/plans/workspace-gateway|Workspace Gateway]], `/Users/admin/Developer/workspace-gateway`; создан каркас, реализации пока нет. +Проверка исходящего SSH и Seatbelt: [[personal/projects/balda/ssh-seatbelt-2026-10-18]]; сетевой SSH из контейнера доступен, production логин и sandbox launch ещё не приняты. + План удалённого исполнения: [[personal/plans/balda-remote-agent]]. Проверка штатного ACP поверх SSH: [[personal/projects/balda/ssh-acp-verification-2026-10-18]]. diff --git a/personal/projects/balda/ssh-seatbelt-2026-10-18.md b/personal/projects/balda/ssh-seatbelt-2026-10-18.md new file mode 100644 index 00000000..b50c7c31 --- /dev/null +++ b/personal/projects/balda/ssh-seatbelt-2026-10-18.md @@ -0,0 +1,60 @@ +# Balda — SSH и Seatbelt: проверка 2026-10-18 + +Общий план: [[personal/plans/balda-remote-agent]]. +Workspace Gateway: [[personal/plans/workspace-gateway]]. + +## Факты текущей установки + +- Docker context: `colima`; Docker daemon сообщает `Ubuntu 24.04.4 LTS`. +- На Mac `26.7.1` присутствует `/usr/bin/sandbox-exec`. +- Из основного контейнера `balda-mm-mac` открывается SSH TCP/22 до `host.docker.internal`, получен banner `SSH-2.0-OpenSSH_10.3`. +- Из того же контейнера доступен внешний `github.com:22`, получен SSH banner. +- Эти сетевые пробы не передавали ключи и не выполняли удалённых команд: рабочая авторизация, host key pinning и права пользователя ими не приняты. +- В production по-прежнему `permissions.mode: allow_all`; профиль Seatbelt для рабочего запуска из Balda этим тестом не устанавливался. + +## Проверка Seatbelt + +На синтетических файлах выполнены чтение разрешённого пути, запрещённое чтение другого пути и запрещённая запись через дочерний `/bin/sh`. +Оба запрещённых действия завершились `Operation not permitted`, исходный файл сохранился. +Это проверка работы правила и наследования ограничения, а не готовая политика изоляции агента: тестовый профиль разрешал остальные операции и запрещал только контрольную папку. + +```json +{ + "macos": "26.7.1", + "allowed_read": { + "exit_code": 0, + "stdout": "allowed", + "stderr": "" + }, + "blocked_read": { + "exit_code": 1, + "stdout": "", + "stderr": "cat: /private/tmp/workspace-gateway-seatbelt-nh3ciwhu/blocked/probe: Operation not permitted" + }, + "blocked_child_write": { + "exit_code": 1, + "stdout": "", + "stderr": "fixture: /private/tmp/workspace-gateway-seatbelt-nh3ciwhu/blocked/probe: Operation not permitted" + }, + "blocked_file_unchanged": true, + "scope": "Synthetic deny-rule/inheritance probe, not an approved production agent profile" +} +``` + +## Готовые средства + +[anthropics/sandbox-runtime](https://github.com/anthropics/sandbox-runtime) уже предоставляет запуск произвольного процесса с ограничениями файлов и сети, на macOS используя Seatbelt. +Изучена документация; пакет не устанавливался и рабочие профили этого проекта не принимались. +Сначала проверяется готовое средство и штатная sandbox конкретного агента, затем определяется, нужен ли какой-либо дополнительный launcher. + +[Beads](https://github.com/gastownhall/beads/blob/main/docs/architecture/index.md) рекомендует Dolt server mode для одновременных записывающих клиентов. +Настройка общего серверного доступа из Balda и удалённых сред ещё не выполнена. + +## Открытые проверки + +- Авторизованный SSH из контейнера в реальные среды с проверкой host key и ограниченными credentials. +- Запуск настоящих ACP-агентов и обычных команд на Mac внутри принятой sandbox. +- Запрет обхода sandbox через альтернативную SSH-команду, дочерний процесс или доступ к секретам. +- Права на файлы и сеть, совместимость native sandbox агента с внешней оболочкой. +- Запросы разрешений у агента и штатный `ask` Balda. +- MCP, общая БД Beads и полный цикл оригинального Prism на реальном подключении.