Claude Code 2.1.28x

Песочница Claude Code: туториал и настройка /sandbox

Запустите /sandbox, выберите auto-allow — и каждая bash-команда окажется внутри границы, которую навязывает ОС, — с реальными ключами настроек, а не с фольклором. 12 шагов, сверенных с официальной документацией.

TL;DR

  • Команда /sandbox открывает панель с вкладками Mode, Overrides и Config. Режим auto-allow запускает изолированные bash-команды без запроса разрешения; regular permissions сохраняет каждое подтверждение.
  • Границу навязывает ядро, а не диалоги: Seatbelt на macOS, bubblewrap на Linux и WSL2. Нативный Windows и WSL1 не поддерживаются.
  • Изолированные команды могут писать только в рабочий каталог, пользовательский временный каталог и пути из --add-dir. Сетевой трафик идёт через прокси, который заранее не разрешает ни один домен.
  • Чтения по умолчанию не блокируются — ~/.ssh и ~/.aws остаются читаемыми, пока вы не добавите правила sandbox.credentials. Диалог Sandbox в VS Code появился в v2.1.280.

Claude Code Sandbox Explained

Канал:The Art of Vibe Coding4:29

Открыть

How auto mode works with Claude Code

Канал:Claude5:42

Открыть

Configure the sandboxed Bash tool (official docs)

Документация:code.claude.com

Открыть

Первое видео — ролик с motion-графикой: его кадры на этой странице — стилизованные иллюстрации, а не скриншоты, и часть его утверждений исправлена в шагах ниже (учётные данные по умолчанию читаемы; примеры ключей настроек из видео не совпадают с настоящими). Второе видео — официальная запись Anthropic; используются только её настоящий терминал и настройки UI.

Факты сверены с code.claude.com/docs/en/sandboxing и CHANGELOG проекта anthropics/claude-code (v2.1.280–2.1.283). Кадры цитируют краткие фрагменты записей для комментария.

Настройте песочницу Claude Code за 12 шагов

Поймите границу

  1. 1

    Осознайте проблему усталости от одобрений

    Без песочницы каждая предложенная команда останавливается ради y/n: npm install, git status, потом следующая. Anthropic измерила, что 97% запросов разрешений Claude Code одобряются, — именно поэтому песочница выносит проверку за пределы каждой команды, в границу, которую настраиваешь один раз.

    Dark Claude Code terminal recreation showing a Next.js dashboard build interrupted twice by Allow Claude to run npm install and git status y/n prompts
    Реконструкция цикла y/n на каждую команду, который заменяет песочница, — нажать Enter 47 раз и перестать читать.Смотреть на 0:22
  2. 2

    Запустите Claude Code на поддерживаемой платформе

    Откройте сессию в своём проекте. В macOS изоляция встроена: Seatbelt поставляется с системой, устанавливать ничего не нужно. На Linux и WSL2 сначала поставьте bubblewrap и socat пакетным менеджером. Нативный Windows и WSL1 не поддерживаются — пользователям Windows запускать Claude Code внутри дистрибутива WSL2.

    Claude Code v2.1 session header naming the Fable 5 with high effort model, the ~/Documents/code/acme working directory and a running Tidy up local branches task
    Сессия в ~/Documents/code/acme — именно этот рабочий каталог песочница сочтёт доступным для записи.Смотреть на 0:35
  3. 3

    Запустите /sandbox и прочитайте панель

    Введите /sandbox в сессии. У панели три вкладки: Mode (как одобряются изолированные команды), Overrides (может ли упавшая команда повториться без песочницы — настройка allowUnsandboxedCommands) и Config (полностью разрешённые настройки песочницы). В Linux добавляется вкладка Dependencies со списком недостающего: bubblewrap, socat или опциональный фильтр seccomp. С v2.1.281 вкладки переключаются стрелками, а VS Code получил диалог Sandbox с теми же настройками в v2.1.280.

Включите её

  1. 4

    Выберите auto-allow или обычные разрешения

    На вкладке Mode auto-allow запускает изолированные команды без вопросов, а regular permissions сохраняет вопросы даже для изолированных команд. Выбор сохраняется в .claude/settings.local.json проекта, который Claude Code сам добавляет в gitignore. Чтобы покрыть все проекты, задайте "sandbox": undefined в ~/.claude/settings.json; для одной сессии передайте через --settings.

    Explainer card listing the two sandbox setup moves: run the /sandbox command to enable auto-allow mode and create settings.json inside the Claude folder
    Быстрый старт в два шага: /sandbox выбирает режим, settings.json хранит всё долговечное.Смотреть на 4:00
  2. 5

    Знайте, о чём auto-allow всё ещё спрашивает

    Auto-allow — не кнопка «без звука». Явные deny-правила всегда побеждают, rm или rmdir по критическим путям всё ещё спрашивают, а контентные ask-правила вроде Bash(git push *) всё ещё требуют подтверждения. Команды, которые не могут работать в песочнице, откатываются к обычному потоку с вопросом под заголовком "Bash command (unsandboxed)". Auto-allow также независим от режима разрешений — изолированный bash запускается без вопросов даже в режиме Manual.

    Claude Code terminal footer reading plan mode on with the shift+tab hint to cycle permission modes above an empty input prompt
    shift+tab листает режимы разрешений — отдельный механизм, не auto-allow песочницы.Смотреть на 0:28
  3. 6

    Посмотрите, как ОС проводит границу

    Ограничения навязаны ядром, это не вежливые уговоры: macOS использует Seatbelt, Linux и WSL2 — bubblewrap. Команда с промпт-инъекцией, которая попытается прочитать ~/.ssh или сбежать домой, ударится о ту же стену: правила связывают запущенный процесс и всех его детей, — модель не уговорит ядро красноречием.

    Explainer card contrasting a bypassable application permission layer with an OS kernel layer enforced through bubblewrap on Linux and Seatbelt on macOS
    Проверки разрешений на уровне приложения можно обойти; уровень ядра — нет.Смотреть на 2:07

Файловая система, учётные данные и сеть

  1. 7

    Поймите файловые значения по умолчанию — и подвох с чтением

    Изолированные команды могут писать в рабочий каталог и подкаталоги, в пользовательский временный каталог и в папки, добавленные через --add-dir или permissions.additionalDirectories. Чтения открыты по умолчанию: читаем весь диск, включая ~/.aws/credentials и ~/.ssh, пока вы не запретите. Объясняющие видео любят говорить, что учётные данные становятся «невидимыми», — документация суха: защищать их — ваша работа, через sandbox.credentials или denyRead-правила.

    Explainer card of a sandboxed project folder where src, package.json, README.md, tsconfig.json and node_modules stay writable while the .env file is blocked
    Записи упираются в стену песочницы; чтения остаются открытыми, пока вы их не закроете на следующем шаге.Смотреть на 1:30
  2. 8

    Защитите учётные данные до автономного режима

    Добавьте блок sandbox.credentials: перечислите файлы вроде ~/.ssh или ~/.aws/credentials с "mode": "deny" и секретные переменные окружения вроде GITHUB_TOKEN, чтобы они очищались в каждой изолированной команде. Режим mask идёт дальше — команда видит значение-пустышку, а прокси песочницы подставляет настоящее только на разрешённых вами хостах. Правила Read в permissions.deny накрывают файловые инструменты сверху.

    Claude Code managed-settings.json editor showing permissions deny rules for Bash curl and Read ./.env beneath allow, soft_deny and hard_deny entries
    Deny-правила для curl и чтений .env — ваш блок sandbox лежит в том же файле настроек.Смотреть на 4:35
  3. 9

    Разрешите сетевые домены, нужные вашему стеку

    Весь изолированный трафик идёт через прокси, и ни один домен не разрешён заранее. Когда команде впервые понадобится хост, Claude Code спросит; ответьте "Yes, and don't ask again" — сохранится allow-правило WebFetch(domain:...) для будущих сессий. Разрешайте реестры заранее через sandbox.network.allowedDomains, блокируйте конкретные хосты через deniedDomains и включите strictAllowlist, чтобы список стал жёстким потолком, а не перечнем вопросов.

    Explainer card of the sandbox network proxy waving an npm install request through to the registry while a postinstall script calling evil.com is denied
    Запросы к registry проходят прокси; postinstall, стучащийся на evil.com, — нет.Смотреть на 1:51
  4. 10

    Разложите конфиг по уровням: проект, пользователь или управление

    Настройки проекта в .claude/settings.json могут добавлять пути для записи и домены, но не могут отключать изоляцию файловой системы или включать Apple Events — эти ключи признаются только из пользовательских, управляемых настроек или флага --settings, так что склонированный репозиторий не ослабит вашу песочницу. Команды навязывают песочницу управляемыми настройками: enabled, failIfUnavailable и allowUnsandboxedCommands в true/false/false.

    Claude Code managed-settings.json editor with an auto mode environment block listing a GitHub source control entry, trusted s3 cloud buckets and an internal CI server
    Файл управляемых настроек описывает доверенную среду организации — настраивают админы, разработчики наследуют.Смотреть на 4:10

Проверьте и почините

  1. 11

    Проверьте на реальной задаче

    Попросите сборку или прогон тестов. Изолированные команды исполняются без вопросов, а при блокировке нарушение называет путь или хост в результате команды, чтобы Claude адаптировался. Откройте вкладку Config в /sandbox и прочитайте каждое действующее правило, включая защищённые пути, которые не переиграет никакая настройка. Для разовой строгой пробы запустите: claude --settings 'undefined}'.

    Claude Code terminal with the prompt Tidy up local branches fully typed and the footer reading auto mode on beside the shift+tab cycling hint
    Одна введённая задача, ни одного вопроса на команду — граница держится без вас.Смотреть на 0:32
  2. 12

    Диагностируйте типовые сбои

    jest виснет — watchman несовместим, запустите jest --no-watchman. docker падает — он не умеет работать в песочнице, добавьте "docker *" в excludedCommands. open или osascript падает с ошибкой -600 на macOS — Apple Events заблокированы, пока allowAppleEvents не true. git merge или checkout падает с "unable to unlink old" — мешает защищённый путь или denyWrite-правило: одобрите повтор без песочницы или запустите команду сами. bwrap выдаёт Operation not permitted внутри контейнера — включите enableWeakerNestedSandbox. Пайпы в буфер обмена не доходят — используйте /copy вместо pbcopy.

Настройки песочницы, которые имеют значение

Панель /sandbox пишет основу, но настоящая сила — в settings.json. Вот ключи, которые документирует официальный справочник по sandboxing, — все живут под блоком "sandbox" (последний — под "permissions").

  • 1sandbox.enabled — выключен, пока вы не включите. true в ~/.claude/settings.json покрывает все ваши проекты; панель /sandbox пишет локальную для проекта копию в .claude/settings.local.json.
  • 2sandbox.autoAllowBashIfSandboxed — переключатель auto-allow, по умолчанию true. Поставьте false, чтобы сохранить запросы разрешений даже для команд внутри песочницы.
  • 3sandbox.allowUnsandboxedCommands и sandbox.failIfUnavailable — false на первом убивает повтор dangerouslyDisableSandbox (на вкладке Overrides показан как Strict sandbox mode); true на втором превращает недостающие зависимости в жёсткий отказ на старте вместо предупреждения.
  • 4sandbox.filesystem — allowWrite для внешних путей, нужных инструментам ("~/.kube", "/tmp/build"), denyRead плюс allowRead для секретных мест и disabled (v2.1.216+), чтобы снять файловый слой, сохранив сетевую изоляцию.
  • 5sandbox.network — allowedDomains и deniedDomains, strictAllowlist (v2.1.219+), чтобы запретить всё неописанное, allowLocalBinding, чтобы dev-серверы могли занимать порты, и tlsTerminate для маскировки учётных данных на прокси.
  • 6sandbox.credentials — записи files и envVars в режимах deny или mask; маски требуют tlsTerminate и признаются только из источников user, managed или --settings. Пара к ним — permissions.blockReadsOutsideWorkingDirectories, отсекающая все чтения за пределами рабочих каталогов.

Seatbelt против bubblewrap: платформенные различия

macOS использует Seatbelt, встроенный в систему, — ставить ничего не нужно. Шероховатости конкретные: CLI на Go вроде gh, gcloud и terraform могут падать на TLS-проверке под Seatbelt — внесите их в excludedCommands; open, osascript и браузерные флоу авторизации падают с ошибкой -600, пока не включите allowAppleEvents, — это ослабляет изоляцию и игнорируется в настройках проекта.

Linux и WSL2 используют bubblewrap плюс socat, ставятся пакетным менеджером. Опциональный фильтр seccomp (npm install -g @anthropic-ai/sandbox-runtime) добавляет блокировку Unix domain sockets и именно он не пускает Windows-бинарники в WSL2. В Ubuntu 24.04 и новее политика AppArmor мешает bubblewrap создавать user namespaces — добавьте bwrap-профиль из документации и перечитайте AppArmor. Внутри непривилегированного контейнера включите enableWeakerNestedSandbox, чтобы bubblewrap bind-монтировал существующий /proc.

WSL1 не поддерживается вовсе — bubblewrap нужны фичи ядра, которые есть только у WSL2. Накладные расходы минимальны, хотя отдельные файловые операции идут чуть медленнее. Субагенты работают в том же процессе, что и родительская сессия, и наследуют её конфигурацию песочницы, так что фоновый bash внутри агента тоже изолирован.

Обращение с песочницей ещё гуляет между релизами: v2.1.280 добавила диалог Sandbox в VS Code, v2.1.281 улучшила навигацию по вкладкам /sandbox и подсказку allowLocalBinding для dev-серверов, а v2.1.282–2.1.283 починила сопоставление excludedCommands, записи в TMPDIR и парсинг управляемых настроек. Пролистайте CHANGELOG, прежде чем полагаться на пограничное поведение.

FAQ по песочнице Claude Code

Похожие руководства