Chief Beaver Officer

Политика

Граница без permission-промптов: правила PreToolUse и зоны vault. Модель везде в bypassPermissions; что ей можно, решает код.

Почему без диалогов «разрешить?» gateway

Human in the loop на каждом тул-колле выглядит безопасно, но работает недолго. Через день человек жмёт «разрешить» не читая, и граница исчезает, оставляя ощущение, что она есть.

Это не догадка. Исследование UAC в Windows (SOUPS 2010): 69% участников обрабатывали диалоги повышения прав неправильно, то есть прокликивали. fMRI-исследование предупреждений (CHI 2015): реакция зрительных центров мозга резко падает уже со второго показа одного и того же диалога. Свежая работа про агентов (2026): у надзора есть ёмкость, ревьюер устаёт, и с ростом числа эскалаций система становится менее безопасной, а не более.

Поэтому здесь граница - код: правила PreToolUse, зоны vault, монтирование и отдельный uid. Модель везде в bypassPermissions, а человек читает аудит, а не диалоги.

Правило - функция gateway

PolicyRule - (ToolCall) -> Deny | None, объявляется на агенте списком. Первый Deny становится результатом тулзы, который модель читает; правило, которое упало, - тоже deny. ToolCall.state - словарь на сессию, куда правила пишут (какие скиллы открыты).

Зоны vault beaver-agent

Zones: write - всё, включая удаление; create - только новые файлы; edit - создавать, править, переносить, но не удалять; protected - не трогать. Путь в vault вне всех зон - отказ.

У меня: write=(мета/бобер,), create=(💬 чаты,), edit=(весь vault,), protected=(.obsidian, мета). Vault - дом диспетчера, но удалять он может только своё, а мета вне бобер - зона пользователя, то есть твоя.

Bash тоже beaver-agent

Файловые тулзы - полдела. bash_zones парсит команду через shlex, ловит rm/mv/cp/tee, sed -i, редиректы > и проверяет каждый путь теми же зонами. Отказ - с причиной на русском, которую модель прочитает и поймёт, куда можно.

Изоляция процесса gateway

Процесс модели - отдельный uid beaver-runner с белым списком env: в нём нет DATABASE_URL, POSTGRES_*, *_PAT. Единственный секрет, который доезжает, - OAuth-токен Claude, и CLI сам прячет его от Bash. Секреты MCP идут через env подпроцесса, никогда argv: процесс модели видит ps всего контейнера.

Каждый тул-колл ложится в аудит и виден в админке.