Anthropic sandbox-runtime: песочница для ИИ-агентов на уровне ОС, без контейнеров

Anthropic выложила в открытый доступ sandbox-runtime (srt) — инструмент, который ограничивает файловую систему и сеть для произвольного процесса, не поднимая контейнер. Это та самая песочница, на которой работает sandboxed bash tool в Claude Code, но привязана она не к нему: внутри можно запускать собственных агентов, локальные MCP-серверы и обычные консольные программы.

Пакет опубликован в npm как @anthropic-ai/sandbox-runtime версии v0.0.81, распакованный объём — около 11,4 МБ, лицензия Apache-2.0, требуется Node.js 22.12+. Работает как CLI и как TypeScript-библиотека. Похожий подход, только на Firecracker microVM, ранее показала Perplexity в открытых исходниках SPACE.

Seatbelt, bubblewrap и учётная запись Windows

srt не изобретает собственную изоляцию, а опирается на примитивы операционной системы, причём ограничения распространяются на всё дерево процессов, включая скрипты и дочерние вызовы.

  • macOS: sandbox-exec с динамически генерируемыми профилями Seatbelt; из зависимостей нужен только ripgrep.
  • Linux: bubblewrap с удалённым сетевым namespace, дополнительно требуются socat и ripgrep.
  • Windows (alpha): отдельная учётная запись srt-sandbox, сетевой барьер на Windows Filtering Platform и явные ACL для файлов.

Сеть наружу выпускается только через HTTP- и SOCKS5-прокси, запущенные на хосте. На Linux они доступны через Unix-сокеты, смонтированные внутрь песочницы, на macOS профиль Seatbelt разрешает ровно один порт localhost. Уже прокси применяет списки разрешённых и запрещённых доменов.

Почему одного барьера мало

Логика Anthropic простая: граница только по файлам или только по сети не работает. Без сетевой изоляции агент, поймавший инъекцию промпта, вынесет наружу SSH-ключи. Без файловой — выйдет из песочницы и доберётся до сети. Поэтому умолчания такие: чтение разрешено везде, если не запрещено явно; запись запрещена везде, если не разрешена; сеть закрыта, пока домен не добавлен в allowlist.

Как посадить в песочницу MCP-сервер

Для MCP-сервера достаточно поменять command в .mcp.json с npx на srt, а исходную команду передать аргументами. Правила живут в ~/.srt-settings.json:

{
  "network": { "allowedDomains": ["api.github.com", "*.npmjs.org"], "deniedDomains": [] },
  "filesystem": { "denyRead": ["~/.ssh"], "allowWrite": ["."], "denyWrite": [".env"] }
}

Для собственного агента библиотека даёт SandboxManager: вызов initialize(config) поднимает прокси, а wrapWithSandbox() возвращает обёрнутую командную строку, которую можно запускать через spawn.

84% — это внутренняя цифра, а не бенчмарк

Anthropic сообщает, что во внутреннем использовании Claude Code песочница сократила число запросов на подтверждение прав на 84%. Цифра самозаявленная, внешнего замера за ней нет. Задача, которую она описывает, — усталость от подтверждений: разработчик, который целый день жмёт «approve», перестаёт читать, что именно он одобряет. Фиксированная граница позволяет агенту свободно работать внутри и спрашивать только на её краю.

Главный компромисс — ширина allowlist

Кодирующие агенты не только правят файлы: они ставят зависимости, тянут документацию и дёргают API. Слишком строгий список ломает npm install, слишком широкий — превращает песочницу в декорацию. Для середины у srt есть несколько настроек:

  • шаблоны и порты — записи вида *.npmjs.org или api.example.com:443;
  • callback ask — решает судьбу хостов, не покрытых правилами, и может вернуть причину, которую прочитает модель;
  • разрешения на одну команду — открыть реестр ровно на один вызов;
  • живое обновление списков через --control-fd, пока команда выполняется;
  • проверка разрешённого адреса — блокирует имена из allowlist, если они резолвятся в loopback или в IP метаданных облака;
  • причины запрета домена — агенту сообщают санкционированную альтернативу, например HTTPS git remote.

Чем это отличается от других песочниц

По изоляции srt ближе к песочнице OpenAI Codex CLI: там тоже Seatbelt, bubblewrap и нативная изоляция Windows, контейнер не нужен, лицензия Apache-2.0. Docker Sandboxes и E2B идут другим путём — microVM на каждую песочницу, причём E2B работает в облаке или BYOC (AWS, GCP) и предоставляет SDK для JavaScript и Python. srt при этом не заперт в своём агенте: это CLI и библиотека для любого процесса, тогда как песочница Codex встроена в Codex, а Docker Sandboxes дают CLI sbx для кодирующих агентов. Сеть у srt по умолчанию закрыта с allowlist на прокси; у Codex в режиме workspace-write она выключена с переключателем в конфиге; Docker Sandboxes выбирают политику при первом старте (например, deny-all или balanced); у E2B сеть включена по умолчанию и отключается. Шаблоны с портами есть у srt, у Docker Sandboxes и у E2B (allowOut с проверкой по SNI/Host); у Codex CLI документирован только переключатель вкл/выкл.

Статус у srt — beta research preview, поддержка Windows в alpha. Это стоит держать в голове, прежде чем ставить его в продакшн-пайплайн. Если же нужен не локальный процесс, а параллельные облачные сессии агента, у Anthropic для этого есть Claude Code Projects в бете.

Что это значит для тех, кто ставит агентов рядом с рабочими данными

Для администратора и владельца малого бизнеса ценность здесь не в самой цифре 84%, а в модели по умолчанию: запись закрыта, сеть закрыта, а исключения перечислены явно. Если агент запускается на машине, где лежат ключи, конфиги и доступы к внутренним API, такой режим снимает главный риск — что процесс с доступом к shell тихо сходит за пределы задачи. Практическая ошибка — широкий шаблон вроде *.example.com или разрешение на весь реестр пакетов «чтобы работало»: тогда песочница защищает от случайности, но не от инъекции промпта. Проверка резолва и причины запрета домена тут важнее, чем кажется: они не дают allowlist превратиться в дыру через loopback и метаданные облака. Тот же принцип минимальных прав продвигают и платформы вроде NVIDIA Open Agent Safety Platform с песочницами OpenShell — разница в том, что srt обходится без контейнеров и microVM.

Частые вопросы

Нужен ли Docker, чтобы запустить sandbox-runtime?

Нет. srt намеренно обходится без контейнеров и использует примитивы самой ОС: Seatbelt на macOS, bubblewrap на Linux, отдельную учётную запись и Windows Filtering Platform на Windows.

Какие зависимости нужны на Linux?

bubblewrap, socat и ripgrep. На macOS достаточно одного ripgrep, на Windows поддержка пока в статусе alpha.

Что по умолчанию разрешено агенту?

Чтение разрешено везде, кроме явно запрещённых путей; запись запрещена везде, кроме явно разрешённых; сеть закрыта, пока домен не попал в allowlist.

Как быстро прикрутить песочницу к существующему MCP-серверу?

Поменять command в .mcp.json с npx на srt и передать исходную команду аргументами, а правила описать в ~/.srt-settings.json.

Можно ли использовать srt вне Claude Code?

Да, инструмент не привязан к Claude Code: он работает как CLI и как TypeScript-библиотека для любых процессов, включая собственных агентов.

Насколько можно верить цифре 84%?

Это внутренняя оценка Anthropic по использованию Claude Code, а не независимый бенчмарк. Как ориентир она полезна, как сравнение с конкурентами — нет.

Что будет, если поставить слишком широкий allowlist?

Песочница останется, но потеряет смысл: широкий домен или весь реестр пакетов открывают канал для утечки данных при инъекции промпта. Ширина списка — главный регулятор безопасности в этой схеме.

Готов ли srt к продакшену?

Сам проект называет себя beta research preview, а поддержку Windows — alpha. Для экспериментов и локальных агентов это рабочий вариант, для критичных пайплайнов стоит оценивать риски отдельно.

Есть ли смысл смотреть на альтернативы?

Если нужна изоляция через microVM и запуск в облаке, смотрите в сторону E2B и Docker Sandboxes. Если агент работает локально и нужна песочница для произвольного процесса, srt и песочница Codex CLI решают ту же задачу схожими средствами.

Источник: marktechpost.com