Права доступа
Waibee Code спрашивает подтверждение, прежде чем изменить файлы или выполнить команду. Как часто он спрашивает, зависит от режима прав. Инструменты только для чтения (Read, Grep, Glob, WebSearch, WebFetch) не требуют подтверждения ни в одном режиме. Читающие команды тоже: ls, cat, grep, git status и подобные выполняются сразу. Команда, которая пишет, спрашивает всегда, включая безобидную на вид с перенаправлением в файл; так же ведут себя команда, печатающая заданный вами токен, и find -exec, который запускает произвольную программу под видом поиска.
Четыре режима
Заголовок раздела «Четыре режима»| Режим | Правки файлов | Команды (Bash, REPL) |
|---|---|---|
default |
спрашивает | спрашивает, кроме читающих |
accept-edits |
без вопроса | спрашивает, кроме читающих |
trust |
без вопроса | без вопроса, кроме команд с высоким риском |
bypass |
без вопроса | без вопроса |
Ни один режим не отключает две вещи:
- Разрушительные команды отклоняются всегда.
rm -rf /,find / -deleteи любое другое удаление, цель которого не ограничена конкретным путём (rm -rf $D), скачивание с подачей в шелл (curl ... | sh), fork-бомба: такое агент не выполнит ни в одном режиме, и никакой списокallowэтого не изменит. - Команды с высоким риском спрашивают.
sudo,curl,wget,ssh-keygen, подача файла в шелл без скачивания (base64 -d | sh), запись в файлы автозапуска оболочки, команда с именем программы из переменной: вdefault,accept-editsиtrustна них будет вопрос, даже если режим обещает «не спрашивать». Обойти это можно только явным правилом вallow. Вbypassони выполняются без вопроса.
Удаление по конкретному пути (rm -rf /tmp/build) к высокому риску не относится: в default и accept-edits на него будет вопрос, а в trust оно выполнится без вопроса.
Опасные MCP-инструменты (помеченные как dangerous) в trust спрашивают, а в default и accept-edits отклоняются.
Переключение режима
Заголовок раздела «Переключение режима»В TUI режим переключается по кругу клавишей Shift+Tab: default → accept-edits → trust → bypass. Текущий режим виден в статус-баре и по глифу в строке ввода.
Переключение через Shift+Tab действует только на текущую сессию. Чтобы закрепить режим, задай его в settings.json (или через /settings):
{ "permissions": { "mode": "default" }}Допустимые значения: "default", "acceptEdits", "trust", "bypassPermissions". Режим trust в файле может сохраняться как "dontAsk" (это то же самое).
Списки allow и deny
Заголовок раздела «Списки allow и deny»Точечные правила задаются регулярными выражениями:
{ "permissions": { "mode": "default", "allow": ["^git ", "^cargo "], "deny": ["rm -rf", "sudo"] }}denyблокирует совпавшие команды всегда, в любом режиме, включаяbypass. Проверка идёт по каждой части составной команды отдельно, поэтомуgit status && sudo rm xне проскочит целиком.allowавтоматически одобряет совпавшие правки и команды там, где иначе был бы вопрос, включая команды с высоким риском. Одобрение не срабатывает, если в команде есть подстановки ($(...)) или другие подозрительные конструкции, а в составной команде должны совпасть все части.
Подтверждения
Заголовок раздела «Подтверждения»Когда агент спрашивает, доступны варианты: разрешить один раз, разрешить на сессию, разрешить всегда (последнее сохраняется в settings.json, в permissions.allow). Для рискованных команд предлагается только разовое одобрение.
Песочница
Заголовок раздела «Песочница»Права решают, выполнится ли команда. Песочница ограничивает то, что команда может сделать после запуска: ядро ОС не пропускает запись за пределы разрешённых мест. Это не контейнер, всё работает на твоей машине, и ограничивается только запись, а не чтение и не сеть.
Рабочий профиль один, workspace-write: команды пишут только в текущий проект, ~/.waibee, временные папки и кэши пакетных менеджеров. По умолчанию песочница выключена (off). Профили restricted и read-only пока не реализованы: агент с ними не запустится, а не подставит тихо более слабый.
/sandbox выбрать профиль/sandbox workspace-write включить сразуВыбор сохраняется в глобальный settings.json и действует для команд, запущенных с этого момента. То же настраивается вручную:
{ "sandbox": { "profile": "workspace-write", "allow_write": ["~/.gradle", "~/go/pkg/mod"], "require": false }}allow_write добавляет каталоги, куда писать разрешено: если сборка упирается в незнакомый кэш, отказ придёт с именем пути. require: true заставит агента не запускаться там, где песочницу обеспечить нельзя. Обеспечивают её Seatbelt на macOS и Landlock на Linux (ядро 5.13 и новее); на Windows механизма нет, агент предупредит при старте и продолжит без ограничения. На один запуск профиль закрепляется флагом --sandbox <профиль> или переменной WAIBEE_SANDBOX, и тогда /sandbox его не меняет. Текущее состояние видно в /status и /doctor.
Чего песочница не делает: она не мешает прочитать .env или домашний каталог и не ограничивает сеть. От случайной записи не туда она страхует, от враждебного кода нет. Там, где риск настоящий, работай в одноразовой копии или в контейнере CI.
Headless
Заголовок раздела «Headless»waibee run работает в режиме trust, если в settings.json не задан другой: значение permissions.mode действует и в headless.
Вопрос задать некому, и агент его не пропускает, а ждёт ответа, которого не будет. Поэтому запуск на команде с высоким риском встанет до таймаута. Что с этим делать:
- команды, которые нужны задаче, перечисли в
allow; - либо поставь
bypassPermissions, если запуск идёт в одноразовой копии или контейнере CI; - в любом случае задай таймаут шага, чтобы зависший запуск не держал раннер.
Списки deny и отказ на разрушительных командах действуют и здесь. Подробнее про запуск из скриптов: Headless-режим.