Режимы разрешений
Режим разрешений определяет, когда агент спрашивает подтверждение перед действием. Текущий режим показан в интерфейсе.
| Режим | Метка | Как работает |
|---|---|---|
default | DEFAULT | Спрашивает про опасные команды, которые распознаёт разбор, и про команды, которые разобрать не удалось. python -c, node -e и скрипты выполняет без вопроса |
paranoid | PARANOID | Спрашивает про любую команду, если не уверен, что она только читает данные |
bypassPermissions | YOLO | Ничего не спрашивает, выполняет всё сразу |
afk | AFK | «Я отошёл»: ничего не спрашивает, а на вопросы агента отвечает, что вас нет, и агент продолжает работу до конца задачи. Опасные команды не блокируются |
Если агент может запускать скрипты, которые сам написал, и вам важно подтверждать каждое такое действие, используйте paranoid.
Как переключить режим
- Колесо
Shift+Tab: за один раз переключаются режим разрешений, модель и уровень рассуждений.Enterприменяет выбор сразу,Escотменяет. Если ничего не нажимать, выбор применится через 1,5 секунды. - Команда
/mode. - Флаг при запуске:
veai --permission-mode paranoid.

Каждая сессия хранит свой режим. Субагенты работают в режиме родительской сессии.
Режим afk
afk рассчитан на одну задачу, которую никто не контролирует. После каждого ответа агент получает указание продолжать, пока сам не завершит работу. По умолчанию таких продолжений не больше 10 после вашего последнего сообщения; лимит задаётся параметром afk.maxContinuations. Сессия, сохранённая в afk, при повторном открытии запускается в bypassPermissions.
Режим по умолчанию
Чтобы новые сессии всегда начинались в нужном режиме, задайте permissions.defaultMode в ~/.veai/settings.json. Допустимые значения: default, paranoid и bypassPermissions. Этот параметр читается только из глобальных настроек, поэтому склонированный репозиторий не может отключить подтверждения. Подробнее — в разделе «Настройки».
В режимах bypassPermissions и afk агент выполняет любые команды без подтверждения. Включайте их только в проектах, где изменения можно легко откатить, например через Git.
Безопасность и ограничения
CLI не полагается на регулярные выражения и не использует LLM-классификатор. Он разбирает команду в синтаксическое дерево и раскрывает обёртки env, sudo, timeout, xargs, вызовы bash -c и подстановки $(...) на глубину до восьми уровней. Поэтому опасная команда, спрятанная за безобидными обёртками, например env FOO=1 timeout 5 bash -c "rm -rf ~", тоже вызовет запрос.
CLI всегда спрашивает подтверждение, если:
- вложенность глубже восьми уровней;
- команда содержит
eval; - имя команды не записано буквально, например
$CMDили$(which rm); - скрипт передаётся через pipe;
- команду не удалось разобрать.
Ограничения:
- Песочницы на уровне ОС нет. Проверка защищает от ошибок модели, но не изолирует процессы.
- Защищённые пути, например
.git, проверяются только для распознанных команд записи:sed -i, перенаправлений вывода,tee,cpиmv. Запись изpython -c,node -eили скрипта, который агент сам написал и запустил, в режимеdefaultпройдёт без вопроса. - Windows без Git Bash. Инструмент
bashвыполняет команды в PowerShell, и модель пишет команды на синтаксисе PowerShell. Разбора PowerShell у политики разрешений пока нет. - Режим нельзя задать файлом в проекте. Иначе склонированный чужой репозиторий мог бы отключить вам подтверждения.