{
  "manifest_version": "1",
  "slug": "claude-managed-agents",
  "title": "Claude Managed Agents",
  "headline": "Self-hosted sandbox for Claude Managed Agents",
  "description": "Give each Claude Managed Agents session its own exe.dev VM: a small dispatcher claims sessions from your self-hosted environment and starts their workers.",
  "category": "ai-agents",
  "tags": [
    "claude managed agents",
    "self-hosted sandbox",
    "environment worker",
    "ant cli",
    "agent sandbox",
    "sandbox per session",
    "anthropic"
  ],
  "url": "https://exe.dev/deploy/claude-managed-agents",
  "markdown_url": "https://exe-staging.dev/deploy/claude-managed-agents.md",
  "upstream": {
    "website": "https://platform.claude.com/docs/en/managed-agents/overview",
    "source": "https://github.com/anthropics/anthropic-cli",
    "docs": "https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes-workers",
    "license": "MIT (the ant CLI)"
  },
  "example_vm_name": "my-claude-dispatcher",
  "time": "5 minutes",
  "stack": [
    {
      "name": "Dispatcher",
      "detail": "dispatcher.py, run by uv as the claude-dispatcher systemd service",
      "data": "/etc/claude-dispatcher.env"
    }
  ],
  "inputs": [
    {
      "name": "ANTHROPIC_ENVIRONMENT_ID",
      "description": "your self-hosted environment's ID, `env_...`"
    },
    {
      "name": "ANTHROPIC_ENVIRONMENT_KEY",
      "description": "its key, `sk-ant-oat01-...`"
    },
    {
      "name": "EXE_TOKEN",
      "description": "the exe.dev API key that `ssh exe.dev ssh-key generate-api-key` printed, `exe1....`"
    }
  ],
  "delivers": [
    "The claude-dispatcher service, which gives each session in the environment a VM of its own",
    "The service restarted on failure and after a reboot",
    "The environment key and exe.dev API key in /etc/claude-dispatcher.env, mode 600",
    "`exe.dev key works` and `environment key works` in `journalctl -u claude-dispatcher`"
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe-staging.dev/new?prompt=ANTHROPIC_ENVIRONMENT_ID%3D%3Cfill-this-in%3E%0AANTHROPIC_ENVIRONMENT_KEY%3D%3Cfill-this-in%3E%0AEXE_TOKEN%3D%3Cfill-this-in%3E%0A%0ASet%20up%20Claude%20Managed%20Agents%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe-staging.dev%2Fdeploy%2Fclaude-managed-agents.md%20from%20top%20to%20bottom.%0A%0AThe%20values%20at%20the%20top%20of%20this%20message%20are%20mine%3A%0A-%20ANTHROPIC_ENVIRONMENT_ID%3A%20your%20self-hosted%20environment%27s%20ID%2C%20%60env_...%60%0A-%20ANTHROPIC_ENVIRONMENT_KEY%3A%20its%20key%2C%20%60sk-ant-oat01-...%60%0A-%20EXE_TOKEN%3A%20the%20exe.dev%20API%20key%20that%20%60ssh%20exe.dev%20ssh-key%20generate-api-key%60%20printed%2C%20%60exe1....%60%0AAsk%20me%20for%20any%20that%20still%20say%20%3Cfill-this-in%3E%20before%20you%20need%20them.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-claude-dispatcher.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-claude-dispatcher.%20Skip%20the%20step%20that%20creates%20the%20VM%3B%20you%20are%20on%20it.%0A%0AYou%20are%20done%20when%20all%20of%20these%20are%20true.%20Check%20each%20one%20yourself%3A%0A-%20The%20claude-dispatcher%20service%2C%20which%20gives%20each%20session%20in%20the%20environment%20a%20VM%20of%20its%20own%0A-%20The%20service%20restarted%20on%20failure%20and%20after%20a%20reboot%0A-%20The%20environment%20key%20and%20exe.dev%20API%20key%20in%20%2Fetc%2Fclaude-dispatcher.env%2C%20mode%20600%0A-%20%60exe.dev%20key%20works%60%20and%20%60environment%20key%20works%60%20in%20%60journalctl%20-u%20claude-dispatcher%60%0A%0ARun%20%22Set%20up%20the%20dispatcher%20by%20hand%22%20from%20%22On%20the%20VM%22%2C%20skipping%20VM%0Acreation%20and%20SSH.%20The%20three%20inputs%20are%20secrets%3A%20put%20them%20only%20in%0A%2Fetc%2Fclaude-dispatcher.env%2C%20and%20never%20print%20them.%20Don%27t%20start%20a%20session%0Aor%20run%20the%20owner%27s%20commands%3A%20they%20need%20the%20owner%27s%20own%20keys.%20If%20the%20log%0Ashows%20%60401%60%20or%20%60invalid%20token%60%2C%20tell%20the%20owner%20which%20key%20was%20refused.%0AFinish%20by%20pointing%20the%20owner%20to%20%22Give%20it%20a%20task%22.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe-staging.dev/deploy/claude-managed-agents/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "ANTHROPIC_ENVIRONMENT_ID=\u003cfill-this-in\u003e\nANTHROPIC_ENVIRONMENT_KEY=\u003cfill-this-in\u003e\nEXE_TOKEN=\u003cfill-this-in\u003e\n\nSet up Claude Managed Agents on this VM by following the exe.dev recipe at https://exe-staging.dev/deploy/claude-managed-agents.md from top to bottom.\n\nThe values at the top of this message are mine:\n- ANTHROPIC_ENVIRONMENT_ID: your self-hosted environment's ID, `env_...`\n- ANTHROPIC_ENVIRONMENT_KEY: its key, `sk-ant-oat01-...`\n- EXE_TOKEN: the exe.dev API key that `ssh exe.dev ssh-key generate-api-key` printed, `exe1....`\nAsk me for any that still say \u003cfill-this-in\u003e before you need them.\n\nThe recipe's example VM name is my-claude-dispatcher. This VM's name is the output of `hostname`: use it wherever the recipe writes my-claude-dispatcher. Skip the step that creates the VM; you are on it.\n\nYou are done when all of these are true. Check each one yourself:\n- The claude-dispatcher service, which gives each session in the environment a VM of its own\n- The service restarted on failure and after a reboot\n- The environment key and exe.dev API key in /etc/claude-dispatcher.env, mode 600\n- `exe.dev key works` and `environment key works` in `journalctl -u claude-dispatcher`\n\nRun \"Set up the dispatcher by hand\" from \"On the VM\", skipping VM\ncreation and SSH. The three inputs are secrets: put them only in\n/etc/claude-dispatcher.env, and never print them. Don't start a session\nor run the owner's commands: they need the owner's own keys. If the log\nshows `401` or `invalid token`, tell the owner which key was refused.\nFinish by pointing the owner to \"Give it a task\".\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe-staging.dev/deploy/claude-managed-agents/prompt.txt"
  },
  "updated": "2026-10-23",
  "related": [
    "typescript-sandboxes",
    "claude-agent-sdk",
    "agents",
    "claude-code",
    "openclaw",
    "codex"
  ],
  "alternatives": [
    "E2B",
    "Daytona",
    "Modal",
    "Cloudflare Sandbox",
    "Vercel Sandbox"
  ],
  "files": [
    "https://exe-staging.dev/deploy/claude-managed-agents/dispatcher.py"
  ]
}
