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