Claude Code and Codex, ready to work.
Preinstalled, unattended and boxed in. Or bring any agent from anywhere with a single key.
operator — workbox agent
$ workbox rootfs build agents$ $ workbox agent claude --detach -p "Fix the build" $S{"sandboxId":"01K8X3F2QH…","sessionId":"01K8X4A7MN…"}$ workbox sandbox attach 01K8X3F2QH… 01K8X4A7MN… $SPair, delegate, or let it run.
Pair with it live.
Talk to the agent in your terminal, just like local. The sandbox stays up for next time.
operator — workbox agent
$ S='--server http://127.0.0.1:8790'
$ workbox agent claude $S
$ workbox agent claude <sandbox-id> $S # again, same sandboxEverything preinstalled.
Built once, shared by every sandbox. Nothing to download at start.
default reach
@anthropic@openai@github@node@python
- Claude Code
- 2.1.312
- Codex
- 0.165.0
- Node
- 22.23.4
Keys live on the host. The agent gets them. Logs never do.
Let one agent hand work to another.
A coding agent, one MCP tool call away.
MCP guidetools/call
{ "name": "agent_run",
"arguments": { "agent": "codex", "prompt": "Add a test for parse()" } }From another machine, with one key.
A URL and a scoped key. That’s all a remote agent needs.
Remote agents guide- 01 · operator, on the host
Mint a bound key
Scoped to one job. Shown once.
shell$ workbox key create --name dots \ --scope read --scope exec --scope admin \ --label owner=dots --ttl 30d - 02 · agent
Create a sandbox
Ready the moment it returns.
shell$ ID=$(curl -sS -H "$AUTH" -H "$JSON" \ -d '{"name":"build"}' $W/v1/sandboxes | jq -r .id) $ S=$W/v1/sandboxes/$ID - 03 · agent
Upload the project
Stream files of any size.
shell$ curl -sS -H "$AUTH" -T build.sh \ "$S/files/raw?path=/workspace/project/build.sh&mkdirs=1" {"path":"/workspace/project/build.sh","bytes":166} - 04 · agent
Start a build session
Keeps running when you disconnect.
shell$ SID=$(curl -sS -H "$AUTH" -H "$JSON" "$S/sessions" -d \ '{"argv":["sh","build.sh"],"cwd":"/workspace/project"}' \ | jq -r .sessionId) - 05 · agent
Follow the event log
Long-poll or stream. Resume after a drop.
shell$ curl -sS -H "$AUTH" "$W/v1/events?sandboxId=$ID\ &types=session.exited&afterSeq=0&waitMs=60000" - 06 · Workbox, to the agent
A signed webhook arrives
Signed, verified, de-duplicated.
requestPOST /workbox HTTP/1.1 webhook-id: msg_01K8QZ6R3V4TQ7J9W2N5B8C1DE webhook-timestamp: 1761700000 webhook-signature: v1,<base64 HMAC-SHA256> - 07 · agent
Download the artifact
Grab the result. Tear down the box.
shell$ curl -sS -H "$AUTH" -o artifact.txt "$S/artifacts/$SHA" $ curl -sS -H "$AUTH" -X DELETE $S
Scoped keys, not SSH.
A key can
- Create and run sandboxes
- Move files of any size
- Follow events and webhooks
It can’t
- See anyone else’s sandboxes
- Mint or revoke keys
- Touch the rest of the fleet
Know the moment a build finishes.
signed delivery
POST /workbox HTTP/1.1
webhook-id: msg_01K8QZ6R3V4TQ7J9W2N5B8C1DE
webhook-timestamp: 1761700000
webhook-signature: v1,<base64 HMAC-SHA256>
{"type":"session.exited", …}retried for about a day
- 1at once
- 2+5 s
- 3+5 min
- 4+30 min
- 5+2 h
- 6+5 h
- 7+10 h
- 8+10 h
Let the agent work. Keep the host.
Open source and self-hosted.