Безопасность
Разрешения, trust-уровни, project trust и режимы безопасности SOBA Agent.
SOBA классифицирует операции агента (инструменты и shell-команды) по уровням доверия и запрашивает подтверждение пользователя для опасных действий.
1. Уровни доверия (TrustLevel)
Каждый вызов инструмента или shell-команды получает один из трёх уровней:
| Уровень | Поведение | Примеры |
|---|---|---|
| safe | Выполняется автоматически | read, ls, git status, npm test |
| normal | Выполняется без подтверждения (логируется) | write, edit, git commit, bun install |
| dangerous | Требует подтверждения пользователя | rm, sudo, curl, git push |
2. Режимы разрешений (PermissionMode)
Три режима, задаются в TrustManager.setPermissionMode():
| Режим | Поведение |
|---|---|
| ask (по умолчанию) | Каждая dangerous-команда запрашивает подтверждение |
| repo | Dangerous-команды внутри текущего repo разрешены без повторного запроса; внешние, сетевые и privileged команды по-прежнему требуют подтверждения |
| full | Все dangerous-операции разрешены без повторного запроса до конца текущей сессии |
3. Классификация shell-команд
Встроенный список правил поддерживается runtime trust policy.
Dangerous — требуют подтверждения
Удаление: rm, rm -rf, rmdir, unlink, shred, srm
Привилегии: sudo, chown, chmod 777
Сеть: curl, wget, nc, ssh, scp
Git: git push, git reset
Dev-серверы (блокировка агента): bun run dev, npm run dev, npx vite
Скриптовые обходы: node -e, bun -e, python -c, ruby -e
Перемещение за пределы проекта: mv ... /tmp/, mv ... $HOME/
Файловые системы: mkfs.*, dd if=
Перенаправление в устройство: > /dev/sda
Normal — выполняются без спроса
Запись: write, edit, mkdir, cp, mv (внутри проекта), touch, chmod
Git: git add, git commit, git checkout
Пакетные менеджеры: bun install, npm install, yarn install, pnpm install
Сборка: make, cargo, go, docker, docker-compose
Safe — всегда разрешены
Чтение: read, ls, cat, head, tail, wc
Поиск: grep, rg, find (без -delete/-exec rm)
Git: git status, git log, git diff, git branch
Тесты/запуск: npm test, npm run, bun test, bun run
Информация: echo, pwd, which, env, date, whoami
Перенаправление: > /dev/null
4. Подтверждение опасных операций
Когда агент вызывает dangerous-команду, пользователь видит запрос с вариантами:
| Решение | Действие |
|---|---|
| deny (n) | Отклонить |
| once (y) | Разрешить один раз |
| session (s) | Разрешить на всю сессию (та же команда больше не запросит подтверждения) |
| repo (r) | Включить repo-режим |
| full (f) | Включить полный session-режим для всех dangerous-операций |
Запрос также может показывать более безопасные alternatives. SOBA сейчас предлагает least-privilege rewrites для
частых risky-паттернов: destructive cleanup, связанный с build-командой, и remote git push. Эти alternatives
записываются в proof permission receipt, чтобы потом soba prove и soba verify показывали, что именно было
разрешено или отклонено.
5. Прямые shell-команды (!)
В TUI синтаксис !команда выполняет команду напрямую, минуя AI.
Проверка безопасности применяется перед выполнением.
6. Project Trust для skills
Skills из .soba/skills/ требуют одобрения перед первым использованием в проекте.
Хранилище: ~/.soba/project-trust.json.
Slash-команды:
| Команда | Действие |
|---|---|
/project-trust status | Показать статус доверия текущего проекта |
/project-trust approve | Одобрить проект |
/project-trust revoke | Отозвать доверие |
7. Кастомизация правил
TrustManager позволяет добавлять и удалять правила:
trustManager.addToolRule("my-tool", "dangerous");
trustManager.addCommandRule("my-cmd ", "safe");
trustManager.removeToolRule("my-tool");8. Аудит
Все действия агента записываются в сессию (JSONL). Для просмотра shell-команд:
grep '"name":"bash"' ~/.soba/sessions/<session-id>.jsonlConversation items в session JSONL сохраняют user/model content для resume, поэтому этот файл следует считать чувствительными локальными данными. Flight/debug sidecars редактируют secret-bearing keys и распознаваемые credentials в persisted prompt/output strings, но credentials всё равно нельзя помещать в сессию.
Proof receipts добавляют отдельный локальный audit artifact в .soba/evidence/. Новые receipts рекурсивно редактируются,
sealed SHA-256 digest и на POSIX записываются с правами только владельца. soba verify обнаруживает изменение файла и
отклоняет successful evidence, связанный с denied tool call. Это не превращает workspace в sandbox и не заменяет
аккуратную работу с credentials: redaction не умеет распознавать любой возможный формат секрета.

