Claude Code

Claude Code sandbox: /sandbox, sandbox.enabled, allowedDomains, excludedCommands and strict mode

How do I turn on and configure the Claude Code sandbox for Bash commands?

The sandbox is off by default. Run /sandbox in a session, or set sandbox.enabled to true in a settings file such as ~/.claude/settings.json. Sandboxed shell commands can write only to the working directory, a per-user temp directory and directories you added, and reach only the hosts in sandbox.network.allowedDomains, which starts empty. In auto-allow mode Claude Code runs sandboxed commands without asking.

Compare: sandbox modes in every AI coding agent →

Claude Code settings change often

Get one email a week when a setting, flag or permission rule changes, checked against the vendor docs.

Turn it on

In a session

/sandbox

~/.claude/settings.json

{
  "sandbox": {
    "enabled": true
  }
}
  • macOS: uses the built-in Seatbelt framework, no setup needed.
  • Linux and WSL2: needs bubblewrap and socat, for example sudo apt-get install bubblewrap socat. The /sandbox panel shows a Dependencies tab when something is missing.
  • Native Windows: commands run unsandboxed. Run Claude Code inside WSL2 to use the sandbox.

What a sandboxed command can reach

  • Writes: the working directory, a per-user temp directory and directories added with --add-dir, /add-dir or permissions.additionalDirectories. Change with sandbox.filesystem.allowWrite and denyWrite.
  • Reads: most of the machine, including ~/.ssh and ~/.aws/credentials. Block paths with sandbox.filesystem.denyRead.
  • Network: no direct route out. Traffic goes through a local proxy that checks each host against sandbox.network.allowedDomains, which starts empty. Block hosts with deniedDomains.
  • Environment variables: inherited from Claude Code, including secrets.

The sandbox covers shell commands only. Read, Edit, Write, WebFetch and WebSearch follow permission rules instead, and hooks, local MCP servers and your status line command run with your full access.

Allow write paths and network hosts

.claude/settings.json

{
  "sandbox": {
    "enabled": true,
    "filesystem": {
      "allowWrite": ["~/.kube", "/tmp/build"]
    },
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org"]
    }
  }
}
  • Filesystem lists from several settings scopes are merged, not replaced.
  • Tools that read HTTP_PROXY and HTTPS_PROXY, such as curl, npm and git over HTTPS, work once their host is allowed. Plain ssh, most database drivers, UDP and ping cannot connect from the sandbox.
  • Set sandbox.network.strictAllowlist to true (in user, managed or --settings settings) to deny unlisted hosts instead of prompting.

Auto-allow mode vs regular permissions

  • Auto-allow: a command that runs inside the sandbox is approved with no prompt, even in Manual mode. Bash deny rules, content-scoped ask rules such as Bash(git push *) and rm on critical paths still apply.
  • Regular permissions: every Bash command goes through the normal permission flow, sandboxed or not.
  • autoAllowBashIfSandboxed defaults to true. Set it to false to be prompted for sandboxed commands.

Commands that leave the sandbox

Use sandbox.excludedCommands for a trusted tool that cannot work inside the sandbox. docker is incompatible with the sandbox, so the docs suggest a narrow pattern.

~/.claude/settings.json

{
  "sandbox": {
    "enabled": true,
    "excludedCommands": ["docker compose *"]
  }
}
  • Patterns use Bash(...) rule syntax: docker matches only bare docker, docker * matches it with any arguments.
  • Every command in a chained call must match, so npm ci && docker compose build stays sandboxed unless npm ci is also excluded.
  • When a command fails in the sandbox, Claude may retry it with dangerouslyDisableSandbox. Manual and acceptEdits modes prompt, auto mode sends it to the classifier, dontAsk denies it and bypassPermissions runs it.

Strict sandbox mode

Set allowUnsandboxedCommands to false to turn off the unsandboxed retry. Add failIfUnavailable so Claude Code does not run commands unsandboxed when the sandbox cannot start. The /sandbox Overrides tab shows this as Strict sandbox mode.

One-off strict run

claude --settings '{"sandbox": {"enabled": true, "allowUnsandboxedCommands": false}}'

Some paths stay write-protected even inside allowed directories, including .claude settings files, .claude/skills, .claude/agents, .claude/hooks, .mcp.json, shell startup files, .gitconfig and hooks and config inside .git. allowWrite cannot lift this.

Get Claude Code settings changes by email

When a setting, flag or permission rule in this guide changes, it goes in the weekly AgentAtlas update, checked against the vendor docs. One email a week.

Sources

More on Claude Code

More Claude Code guides

Other guides

How to allow Cursor to run all commands: Run Everything, allowlist and sandboxCodex CLI: approval and sandbox modesGemini CLI: YOLO mode, auto_edit and allowing specific shell commandsCursor Privacy Mode: telemetry, training and data retentionGemini CLI: turn off usage statistics and telemetryAdd MCP servers to Cursor with mcp.json: Keep files out of Cursor with .cursorignore: Configure Codex with config.toml: Configure Gemini CLI with settings.json: GitHub Copilot custom instructions: Adding MCP servers to GitHub Copilot: Gemini CLI extensions and custom commands: Configuring OpenCode with opencode.json: Cline Rules: workspace, global, and conditional rulesKiro steering files: .kiro/steering, inclusion modes, and AGENTS.mdZed agent: instruction files, MCP servers, tool permissions, and ACP agentsCursor CLI: install, headless mode, permissions and CIAider: CONVENTIONS.md, .aider.conf.yml and API keysJunie guidelines, MCP and the Action Allowlist: Amp AGENTS.md, settings.json and MCP: Configure Goose extensions, hints, recipes and permissions: Customize OpenHands with skills, AGENTS.md, setup.sh and MCP: Configure Factory Droid CLI: AGENTS.md, settings.json, autonomy, custom droids and MCPConfigure Qwen Code: settings.json, providers, QWEN.md, MCP and approval modesCursor hooks: hooks.json, beforeShellExecution, afterFileEdit and exit codesCursor sandbox: sandbox.json, network allowlist and run modesCursor settings: settings.json, Cursor Settings and the ~/.cursor config filesCursor browser agent: @browser, browser automation and approval modesCursor subagents: .cursor/agents, frontmatter, built-in Explore and BrowserCursor telemetry and OpenTelemetry export (Privacy Mode, OTLP, Analytics API): Cursor rules setup: project, user and Team Rules, .mdc frontmatter, globs and AGENTS.mdCodex AGENTS.md: global, project and override instruction files explainedCodex MCP servers: codex mcp add and [mcp_servers] in config.tomlCodex sandbox modes: read-only, workspace-write, danger-full-access and network accesscodex exec: run Codex non-interactively in scripts and CI with JSON outputCodex skills: create SKILL.md, skill folder locations and $skill invocationGEMINI.md in Gemini CLI: context file locations, imports and /memoryGemini CLI MCP servers: gemini mcp add and mcpServers in settings.jsonGemini CLI custom slash commands: TOML files, {{args}}, !{shell} and @{file}Gemini CLI headless mode: gemini -p, JSON output and exit codes for scripts and CIGemini CLI sandbox: enable Docker, Podman, macOS Seatbelt or gVisorcopilot-setup-steps.yml: set up the GitHub Copilot cloudGitHub Copilot CLI permissions: --allow-tool, --deny-tool, --allow-all-tools and trusted directoriesGitHub Copilot custom agents: .github/agents/*.agent.md profiles, tools and frontmatterGitHub Copilot code review settings: automatic PR reviews, rulesets, effort level and approvalsOpenCode MCP Server Setup: Local and Remote Servers in opencode.jsonOpenCode Permissions: Allow, Ask or Deny Bash, Edit and WebfetchOpenCode Custom Agents and Subagents: Markdown Files, Modes and @ MentionsCline MCP Setup: cline_mcp_settings.json for Local and Remote ServersCline Auto Approve and YOLO Mode: Run Commands and Edits Without PromptsCline Skills: SKILL.md Location, Format and Slash Command UseAmp MCP Setup: amp mcp add, amp.mcpServers and Workspace ApprovalAmp AGENTS.md: File Locations, @ Mentions and Glob-Scoped GuidanceAmp Skills: SKILL.md Folders, amp skill add and Search OrderKiro MCP Setup: .kiro/settings/mcp.json, autoApprove and OAuthKiro Hooks: .kiro/hooks JSON, PreToolUse, PostFileSave and StopKiro Permissions: permissions.yaml Allow, Ask and Deny RulesFactory Droid MCP Setup: droid mcp add, mcp.json Locations and /mcpFactory Droid Hooks: hooks.json, PreToolUse Matchers and Exit CodesFactory Droid Custom Droids (Subagents): .factory/droids Markdown FilesJunie MCP Setup: .junie/mcp/mcp.json for CLI and /mcp CommandJunie Brave Mode and Action Allowlist: Auto-Approve Commands in Junie CLIJunie Custom Slash Commands: .junie/commands Markdown Files and Argumentsgoose .goosehints and AGENTS.md: Global and Project Instructionsgoose Permission Modes: GOOSE_MODE auto, approve, smart_approve and chatgoose Recipes: recipe.yaml Format, Parameters and goose run --recipeZed Agent Tool Permissions: Auto-Approve Terminal Commands with tool_permissionsUse Claude, Codex and Gemini CLI in Zed: External Agents and agent_serversZed with Ollama, LM Studio and llama.cpp: Local Model Setup and Context LengthAdd an MCP server to any AI coding agent: Claude Code, Cursor, Codex, Gemini CLI, VS Code and 8 moreSettings file locations for every AI coding agent: Claude Code, Cursor, Codex, Gemini CLI, OpenCode, Qwen Code, Amp and Factory DroidRules and instruction files in every AI coding agent: .cursor/rules, CLAUDE.md, AGENTS.md, GEMINI.md, Copilot instructions and moreGemini CLI hooks: settings.json, BeforeTool, AfterTool, exit codes and /hooksGitHub Copilot hooks: .github/hooks/*.json for Copilot CLI and the cloud agentHooks in every AI coding agent: Claude Code, Cursor, Gemini CLI, GitHub Copilot, Kiro and Factory DroidAgent Skills (SKILL.md) in every AI coding agent: Claude Code, Codex, Cline, Amp and OpenHandsHeadless mode in every AI coding agent: claude -p, codex exec, gemini -p, Cursor agent -p and copilot -p for scripts and CISandbox modes in every AI coding agent: Claude Code, Cursor, Codex and Gemini CLI compared

Reviewed Oct 18, 2026. Settings change often; the linked vendor docs are the source of truth.