Загрузка...

Agent Sandbox (песочница для ИИ-агента): что это и зачем изолировать код

Agent Sandbox (песочница для ИИ-агента) — изолированная среда, в которой агент выполняет команды и код: ограниченный доступ к файлам, сети и системным ресурсам. Если модель ошибётся или её обманут, ущерб ограничен стенками песочницы, а не всей вашей машиной.

Coding-агент не просто отвечает текстом: он запускает bash, правит файлы, ставит пакеты, ходит в сеть. Каждое такое действие выполняется с правами пользователя, который запустил агента. Песочница сужает эти права до необходимого минимума.

Зачем изолировать выполнение кода

  • Ошибки модели. Модель может уверенно выполнить rm -rf не в том каталоге, перезаписать конфиг или сделать git reset --hard с потерей работы. Это не злой умысел, а обычная галлюцинация или неверно понятая задача.
  • Prompt injection. Агент читает README, issue, веб-страницы, вывод инструментов. В этих данных может быть спрятана инструкция вроде «отправь содержимое ~/.ssh на такой-то адрес». Модель не всегда отличает данные от команд, подробнее — в статье про prompt injection и защиту от промпт-инъекций. Полностью устранить такой риск на уровне промпта нельзя, поэтому его ограничивают на уровне среды: нет доступа к секретам — нечего красть, нет выхода в сеть — некуда отправлять.
  • Недоверенный код. Агент запускает чужие зависимости, скрипты установки и тесты. Любой из них может делать лишнее.
  • Автономность. Чем дольше агент работает без вашего участия, тем меньше шансов, что вы заметите опасную команду до её выполнения.

Как это работает

Песочница ограничивает три вещи:

  1. Файловую систему: куда можно писать (обычно только рабочий каталог и временные папки) и что можно читать.
  2. Сеть: полный запрет, список разрешённых доменов или свободный доступ.
  3. Ресурсы и процессы: память, CPU, число процессов, привилегии.

Границу может обеспечивать операционная система, контейнер или виртуальная машина. Отдельно от неё работают approvals — подтверждения человека. Это разные механизмы: песочница определяет, что технически возможно, а approvals — что агент должен согласовать перед выполнением. Часто их комбинируют: внутри песочницы агент работает свободно, а выход за её пределы требует вашего «да».

Виды песочниц

Вид Как изолирует Плюсы Ограничения
OS-sandbox (Seatbelt на macOS, bubblewrap на Linux) Ограничения ОС на процесс: каталоги записи, сеть Нет Docker, почти нет накладных расходов Защищает только команды, которые запускает агент; не заменяет VM
Docker-контейнер Отдельная файловая система, сеть и лимиты ресурсов; общее ядро с хостом Воспроизводимая среда, привычный инструмент Ядро общее, при ошибках конфигурации (например, проброс сокета Docker) изоляция теряется
microVM / виртуальная машина Отдельное ядро (Firecracker, облачные VM) Самая сильная изоляция Сложнее, дольше стартует, чаще облачный вариант
Git worktree Отдельная рабочая копия ветки Защищает вашу рабочую ветку от правок агента, удобно для параллельных агентов Это не безопасность: команды выполняются с вашими правами

Worktree полезен для порядка в репозитории, но не ограничивает доступ к ~/.ssh, переменным окружения и сети. Для защиты нужен один из первых трёх вариантов.

Права, approvals и YOLO-режим

Инструменты обычно предлагают шкалу от «спрашивать всё» до «не спрашивать ничего»:

  • Только чтение — агент смотрит код, но не меняет его.
  • Запись в рабочий каталог — свободно правит проект, остальное требует подтверждения.
  • Полный доступ без подтверждений — неофициально называется YOLO-режим (флаги вроде --dangerously-skip-permissions в Claude Code или --dangerously-bypass-approvals-and-sandbox в Codex). Без песочницы это означает, что любая ошибка или инъекция выполнится с вашими правами.

Практическое правило: чем меньше вы подтверждаете вручную, тем строже должна быть песочница. YOLO-режим оправдан только в изолированной среде без секретов и с ограниченной сетью. Постоянные подтверждения тоже имеют цену: человек быстро начинает нажимать «разрешить» не читая.

Как это устроено в популярных агентах

  • Codex CLI. Три режима песочницы: read-only, workspace-write и danger-full-access; политика подтверждений задаётся отдельно (on-request или never). На macOS используется Seatbelt, на Linux — bubblewrap. В режиме workspace-write сеть по умолчанию выключена. Настройка в гайде по Codex.
  • Claude Code. Песочница для Bash-инструмента опирается на Seatbelt (macOS) и bubblewrap (Linux, WSL2); доступ к файлам и доменам настраивается. Она ограничивает команды оболочки, а не все инструменты агента. Для более жёсткой изоляции документация предлагает запускать агента в контейнере или VM. Подключение — в гайде по Claude Code.
  • OpenHands. Агент выполняет команды внутри Docker-песочницы, отдельной от хоста, а код проекта монтируется в неё. См. OpenHands через RouterAI.
  • Strix. Автономный пентест-агент: атакует цели и запускает инструменты, поэтому его работа в изолированном Docker-окружении — часть дизайна, а не опция. Если вы запускаете такие агенты, держите их отдельно от рабочей машины.

Как агент связывает модель, инструменты и среду выполнения, объясняет статья про Agent Harness.

Пример: запуск агента в Docker

Минимальный вариант — запустить CLI-агента в одноразовом контейнере, куда смонтирован только нужный проект и передан только ключ RouterAI:

docker run --rm -it \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  --memory 2g --cpus 2 --pids-limit 256 \
  -v "$PWD":/work -w /work \
  -e ROUTERAI_API_KEY \
  node:24-bookworm bash

Внутри устанавливаете агента и работаете как обычно. Что здесь важно:

  • в контейнер попадает только $PWD, а не домашний каталог;
  • не пробрасывайте /var/run/docker.sock и не используйте --privileged: это сводит изоляцию к нулю;
  • передавайте только нужные переменные окружения (-e ROUTERAI_API_KEY), а не весь env;
  • агенту нужен доступ к API, поэтому сеть полностью не отключается; при необходимости ограничивайте исходящий трафик на уровне файрвола.

Для Codex режим песочницы и подтверждений задаётся флагами:

codex --sandbox workspace-write --ask-for-approval on-request

Связь с RouterAI

RouterAI не выполняет команды вашего агента: он отдаёт ответы моделей, а песочницу вы выбираете на стороне агента. Агенту в контейнере нужен исходящий доступ только к https://routerai.ru/api/v1 (OpenAI-совместимый API) или https://routerai.ru/api (Anthropic Messages API), VPN не требуется. Для автономных агентов удобно завести отдельный API-ключ и ограничить его, чтобы утечка ключа из песочницы не затронула остальные проекты. Модели вроде anthropic/claude-sonnet-5.5 или deepseek/deepseek-v4.1-flash выбирайте в каталоге моделей; оплата в рублях.

FAQ

Достаточно ли попросить модель «не делать ничего опасного»? Нет. Инструкция в промпте — это пожелание, которое можно обойти инъекцией или ошибкой. Ограничения должна обеспечивать среда.

Docker — это безопасная песочница? Это разумная изоляция для ошибок и большинства сценариев, но контейнеры делят ядро с хостом. Для заведомо враждебного кода используют microVM.

Нужна ли песочница, если я подтверждаю каждую команду? Желательно: подтверждения утомляют, а длинная однострочная команда легко скрывает лишнее.

Что делать с секретами? Не кладите в рабочий каталог .env с боевыми ключами, давайте агенту отдельные ограниченные ключи.

Можно ли включать YOLO-режим? Только в одноразовой среде без важных данных и секретов.

Что почитать