diff --git a/docs.json b/docs.json
index 4ad9bbcb..c70af8fa 100644
--- a/docs.json
+++ b/docs.json
@@ -54,9 +54,9 @@
{
"group": "Agents in sandbox",
"pages": [
- "docs/agents/anthropic-managed-agents",
"docs/agents/amp",
"docs/agents/claude-code",
+ "docs/agents/claude-managed-agents",
"docs/agents/codex",
"docs/agents/devin",
"docs/agents/openai-agents-sdk",
@@ -3727,6 +3727,11 @@
}
},
"redirects": [
+ {
+ "source": "/docs/agents/anthropic-managed-agents",
+ "destination": "/docs/agents/claude-managed-agents",
+ "permanent": true
+ },
{
"source": "/docs/troubleshooting/pip-install-error",
"destination": "/docs/faq/pip-install-error",
diff --git a/docs/agents/anthropic-managed-agents.mdx b/docs/agents/claude-managed-agents.mdx
similarity index 70%
rename from docs/agents/anthropic-managed-agents.mdx
rename to docs/agents/claude-managed-agents.mdx
index 12ce802d..eaf209db 100644
--- a/docs/agents/anthropic-managed-agents.mdx
+++ b/docs/agents/claude-managed-agents.mdx
@@ -1,13 +1,17 @@
---
-title: "Anthropic Managed Agents"
-description: "Use E2B as the sandbox runtime for Anthropic Managed Agents self-hosted environments."
+title: "Claude Managed Agents"
+description: "Use E2B as the sandbox runtime for Claude Managed Agents self-hosted environments."
icon: "/images/icons/claude-code.svg"
---
-[Anthropic Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) can use a self-hosted environment when you want to run tool calls in your own infrastructure. E2B provides a reusable `E2B/claude-managed-agents-webhooks` template that receives Anthropic webhooks and routes each Managed Agents session to a persistent E2B worker sandbox.
+[Claude Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) can use a self-hosted environment when you want tool calls to run in your own infrastructure. Claude runs the agentic loop and reasoning process; E2B provides isolated sandbox infrastructure for the environment where tool calls execute. The reusable `E2B/claude-managed-agents-webhooks` template receives webhooks and routes each Claude Managed Agents session to a persistent E2B worker sandbox.
-For the full source, local setup scripts, and app-owned routing examples, see the [Anthropic Managed Agents cookbook](https://github.com/e2b-dev/e2b-cookbook/tree/main/examples/anthropic-managed-agents).
+This separation is intentional for security: Claude decides what work to do, while the sandbox contains the execution environment, filesystem, tools, network access, and runtime logs.
+
+
+
+For the full source, local setup scripts, and app-owned routing examples, see the [Claude Managed Agents cookbook](https://github.com/e2b-dev/e2b-cookbook/tree/main/examples/anthropic-managed-agents).
## Install dependencies
@@ -28,20 +32,20 @@ Export the values you will pass to the webhook sandbox:
# E2B dashboard API keys: https://e2b.dev/dashboard?tab=keys
export E2B_API_KEY="..."
-# Anthropic Console API keys: https://console.anthropic.com/settings/keys
+# Claude Console API keys: https://console.anthropic.com/settings/keys
export ANTHROPIC_API_KEY="..."
-# Anthropic Console environments: https://platform.claude.com/workspaces/default/environments
+# Claude Console environments: https://platform.claude.com/workspaces/default/environments
export ANTHROPIC_ENVIRONMENT_ID="..."
-# Open the self-hosted environment in the Anthropic Console and click Generate environment key.
+# Open the self-hosted environment in the Claude Console and click Generate environment key.
export ANTHROPIC_ENVIRONMENT_KEY="..."
```
## Start the webhook sandbox
Start the public template with auto-resume enabled. The template starts a webhook server on port `8000`.
-Because Anthropic only shows the webhook signing key after you register an endpoint, write the router config now and add the signing key to the same sandbox after registration.
+Because the signing key only appears after you register a webhook endpoint, write the router config now and add the signing key to the same sandbox after registration.
```typescript JavaScript & TypeScript
@@ -109,7 +113,7 @@ At this point `/health` returns `200`, but `/webhook` returns `503` until the si
## Register the webhook
-In the [Anthropic Console webhooks settings](https://platform.claude.com/settings/workspaces/default/webhooks), create a webhook endpoint using the printed URL:
+In the [Claude Console webhooks settings](https://platform.claude.com/settings/workspaces/default/webhooks), create a webhook endpoint using the printed URL:
```text
https:///webhook
@@ -143,15 +147,15 @@ sandbox.files.write(
```
-## Send work to the agent
+## Run an end-to-end smoke test
-Create or select a Managed Agents agent in the [Anthropic Console](https://platform.claude.com/workspaces/default/agents), then create a session with that agent and the same `ANTHROPIC_ENVIRONMENT_ID` you wrote into the webhook sandbox. Creating the session does not start work; the `user.message` event does.
+Create or select a Claude Managed Agents agent in the [Claude Console](https://platform.claude.com/workspaces/default/agents), then create a session with that agent and the same `ANTHROPIC_ENVIRONMENT_ID` you wrote into the webhook sandbox. Creating the session does not start work; the `user.message` event does.
```bash
export ANTHROPIC_AGENT_ID="agent_..."
```
-Use a small sandbox task for the first smoke test:
+Use a small shell task for the first smoke test:
```text
Use bash to echo webhook-smoke-ok. Answer only with that text.
@@ -159,9 +163,9 @@ Use bash to echo webhook-smoke-ok. Answer only with that text.
```typescript JavaScript & TypeScript
-import Anthropic from '@anthropic-ai/sdk'
+import Claude from '@anthropic-ai/sdk'
-const client = new Anthropic({
+const client = new Claude({
apiKey: process.env.ANTHROPIC_API_KEY,
})
@@ -190,9 +194,9 @@ console.log(`Session ID: ${session.id}`)
```python Python
import os
-import anthropic
+from anthropic import Anthropic as Claude
-client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
+client = Claude(api_key=os.environ["ANTHROPIC_API_KEY"])
session = client.beta.sessions.create(
agent=os.environ["ANTHROPIC_AGENT_ID"],
@@ -219,6 +223,12 @@ print(f"Session ID: {session.id}")
```
+Claude should answer:
+
+```text
+webhook-smoke-ok
+```
+
Then check the webhook sandbox:
@@ -261,8 +271,8 @@ A healthy run has:
- `/health` returning `ok: true`.
- Router logs showing `routing work` and `assigned session`.
- A session-to-sandbox assignment in the router's assignment store.
-- The assigned worker sandbox's `worker.log` showing claimed work, tool execution, and successful results posted back to Anthropic.
-- The Anthropic session returning to `session.status_idle`.
+- The assigned worker sandbox's `worker.log` showing the shell tool execution and successful results posted back to Claude.
+- The Claude Managed Agents session returning to `session.status_idle`.
The assignment store records the worker sandbox ID for each routed session. Connect to that sandbox and check `/opt/anthropic-managed-agents-js/worker.log` when you need the tool execution logs.
@@ -270,21 +280,21 @@ If the session stays at `requires_action`, check `/opt/anthropic-managed-agents-
## Runtime behavior
-The worker runs with `/mnt/session` as its workdir. File tools are constrained to that workdir, skills are downloaded under `/mnt/session/skills//`, and generated artifacts should be written under `/mnt/session/outputs`.
+The worker sandbox runs tool calls with `/mnt/session` as its workdir. File tools are constrained to that workdir, skills are downloaded under `/mnt/session/skills//`, and generated artifacts should be written under `/mnt/session/outputs`.
The webhook sandbox is the router. It keeps a session-to-sandbox assignment store and starts worker sandboxes with E2B auto-resume and pause-on-timeout settings.
## Session-scoped sandboxes
-By default, the public webhook template gives each Managed Agents session its own E2B worker sandbox. Follow-up turns for the same session reconnect to the same worker and reuse its `/mnt/session` filesystem.
+By default, the public webhook template gives each Claude Managed Agents session its own E2B worker sandbox. Follow-up turns for the same session reconnect to the same worker and reuse its `/mnt/session` filesystem. The sandbox is the isolated execution environment, not the place where Claude's reasoning loop runs.
Use [cloud buckets](/docs/storage/cloud-buckets), [Archil](/docs/storage/archil), or [volumes](/docs/volumes) when files need to outlive a sandbox or be shared across many sandboxes.
-If you want to run that router in your own service instead of in E2B, use the cookbook's [`app-webhooks/` example](https://github.com/e2b-dev/e2b-cookbook/tree/main/examples/anthropic-managed-agents/javascript/app-webhooks). It receives Anthropic webhooks in your app, claims work there, and routes each session to its own E2B sandbox by default.
+If you want to run that router in your own service instead of in E2B, use the cookbook's [`app-webhooks/` example](https://github.com/e2b-dev/e2b-cookbook/tree/main/examples/anthropic-managed-agents/javascript/app-webhooks). It receives webhooks in your app, claims work there, and routes each session to its own E2B sandbox by default.
## Clean up
-Remove the webhook endpoint in the Anthropic Console before deleting the router sandbox. Then kill the router sandbox and any assigned worker sandboxes you no longer need.
+Remove the webhook endpoint in the Claude Console before deleting the router sandbox. Then kill the router sandbox and any assigned worker sandboxes you no longer need.
## Related guides