Network Policy
The sandbox controls what the agent can reach on the network. This is the third layer of isolation — and it gives you a complete audit trail of every connection the agent attempts.
The default: already open for common dev tools
sbx ships with 5 default allow policies covering everything a developer typically needs. You don't need to configure anything for standard workflows.
Check what's allowed right now:
sbx policy ls
You'll see five policy groups:
| Policy | What it covers |
|---|---|
default-ai-services |
OpenAI, Anthropic, Gemini, Cursor, Perplexity |
default-package-managers |
PyPI, npm, cargo, maven, rubygems, and more |
default-code-and-containers |
GitHub, GitLab, Docker Hub, ghcr.io |
default-cloud-infrastructure |
AWS, GCP, Azure, Vercel, Fastly |
default-os-packages |
Ubuntu, Debian, Alpine package repos |
pypi.org, files.pythonhosted.org, npmjs.org, github.com — all already
allowed. No setup required.
Prove it: install a package
Start your sandbox and ask the agent to install httpx:
sbx run sbxlab
Then prompt:
Install httpx and tell me the version
The agent will work through PEP 668 on its own and successfully install:
• Ran python3 -m pip install httpx
└ error: externally-managed-environment ...
• Ran python3 -m pip install --break-system-packages httpx
└ Successfully installed httpx-0.28.1
0.28.1
The agent self-corrected and got the answer — all inside the microVM, your Mac untouched.
The real power: deny rules
The default policies allow common tools. But you can restrict what the agent can reach — blocking specific domains at the network layer, regardless of what the agent tries.
Step 1 — Block PyPI
sbx policy deny network pypi.org
Verify it's active:
sbx policy ls
You'll see a new local entry at the bottom:
local:9701dc6e-... network deny pypi.org
Step 2 — Restart the sandbox
Policy changes require a sandbox restart to take effect:
sbx stop sbxlab
sbx run sbxlab
Step 3 — Watch the agent fail
Ask the agent to install a package:
Install requests and tell me the version
The agent is persistent — it will try multiple approaches, all of which fail:
• Ran pip install requests
└ error: externally-managed-environment
• Ran pip install --break-system-packages requests
└ ERROR: Could not find a version that satisfies the requirement requests
ERROR: No matching distribution found for requests
• Ran curl -I https://pypi.org/simple/requests/
└ HTTP/2 403
The agent tried everything it knew. It still failed. Not because of a system prompt instruction — because the proxy blocked the TCP connection at the network layer.
Key insight: A smarter agent cannot bypass a network deny rule. Agent capability and network policy are completely independent layers.
Step 4 — Find and remove the deny rule
List policies to get the rule ID:
sbx policy ls
Look for the local deny entry at the bottom. Copy its UUID (the part after
local:), then remove it:
sbx policy rm network --id <uuid-from-policy-ls>
Important: Use
--idwith just the UUID — drop thelocal:prefix.
Verify it's gone:
sbx policy ls
No local entries should remain.
Step 5 — Confirm the agent works again
Restart the sandbox:
sbx stop sbxlab
sbx run sbxlab
Ask the agent to install requests again — it works immediately.
Key rules about policy precedence
- Deny overrides allow — a local deny rule beats any default allow policy
- Restart required — policy changes take effect on the next
sbx run - Always clean up deny rules — use
sbx policy rm network --id <uuid> - Default policies cannot be removed — only local rules you add can be removed
Watch live connections
In a separate terminal, watch every outbound connection in real time:
sbx policy log sbxlab
You'll see each connection as it happens:
ALLOWED pypi.org 200
ALLOWED files.pythonhosted.org 200
Add a deny rule and repeat — you'll see:
BLOCKED pypi.org -
This log is your audit trail. For regulated enterprises it answers: "What did the agent do on the network, and when?"
Reach host services from inside the sandbox
If you have a local service running on your Mac (like Ollama on port 11434),
use host.docker.internal — not localhost, which resolves to the VM itself:
sbx policy allow network localhost:11434
Then inside the sandbox, connect to host.docker.internal:11434.
✅ Checkpoint
Before moving on, confirm you can:
- Run
sbx policy lsand identify the 5 default policy groups - Add a deny rule and observe the agent failing
- Remove the deny rule with
sbx policy rm network --id <uuid> - Confirm the agent works again after the deny rule is removed
Next: branch mode — how to run agents without touching your working tree.