* chore: rename moved repos OpenRouterTeam→OpenRouterLabs and sst/opencode→anomalyco
Pure mechanical find/replace across the tree — both repos were renamed on
GitHub and only resolved via 301 redirects (fragile; hijack risk if the old
names are re-registered).
- OpenRouterTeam/spawn → OpenRouterLabs/spawn (141 refs): hardcoded REPO
consts (manifest.ts, agent-tarball.ts), release-download URLs in every
sh/{cloud}/{agent}.sh, gh/raw/asset URLs, docs, tests, fixtures.
- sst/opencode → anomalyco/opencode (5 refs): manifest, README, agent-setup.ts
download cmd, opencode.Dockerfile.
No behavior change. biome clean (205 files). CLI version 1.1.0 → 1.1.1.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test(spawn): deflake cmdRun + hetzner tests (disable telemetry in tests, route hetzner mock by endpoint)
* test(spawn): deflake cmdRun + hetzner tests (disable telemetry in tests, route hetzner mock by endpoint)
* test(spawn): deflake cmdRun + hetzner tests (disable telemetry in tests, route hetzner mock by endpoint)
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: spa-the-spawn-maintainer[bot] <286559366+spa-the-spawn-maintainer[bot]@users.noreply.github.com>
|
||
|---|---|---|
| .. | ||
| claude.sh | ||
| codex.sh | ||
| cursor.sh | ||
| hermes.sh | ||
| junie.sh | ||
| kilocode.sh | ||
| openclaw.sh | ||
| opencode.sh | ||
| pi.sh | ||
| README.md | ||
| t3code.sh | ||
DigitalOcean
DigitalOcean Droplets via REST API. DigitalOcean
Agents
Claude Code
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/claude.sh)
OpenClaw
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/openclaw.sh)
Codex CLI
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/codex.sh)
OpenCode
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/opencode.sh)
Kilo Code
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/kilocode.sh)
Hermes
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/hermes.sh)
Junie
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/junie.sh)
Cursor CLI
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/cursor.sh)
Pi
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/pi.sh)
T3 Code
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/t3code.sh)
Environment Variables
| Variable | Description | Default |
|---|---|---|
DIGITALOCEAN_ACCESS_TOKEN |
DigitalOcean API token (also accepts DIGITALOCEAN_API_TOKEN or DO_API_TOKEN) |
— (OAuth if unset) |
DO_DROPLET_NAME |
Name for the created droplet | auto-generated |
DO_REGION |
Datacenter region (see regions below) | nyc3 |
DO_DROPLET_SIZE |
Droplet size slug (see sizes below) | s-2vcpu-2gb |
SPAWN_JSON_READINESS |
Set to 1 with SPAWN_NON_INTERACTIVE=1 to print machine-readable JSON when readiness is blocked |
— |
SPAWN_CLI_DIR |
Absolute path to the Spawn repo root when developing locally — makes the cloud shim run packages/cli/src/{cloud}/main.ts instead of downloading a release bundle |
— |
Pre-flight readiness
Before region/size selection, the CLI checks DigitalOcean account state (GET /v2/account), SSH keys registered on your account, and OpenRouter credentials. If something blocks deployment (unverified email, locked or warning billing status, droplet quota, missing SSH registration, or invalid OpenRouter key), you get guided steps and a readiness checklist. Billing issues open the add-payment flow: https://cloud.digitalocean.com/account/billing?defer-onboarding-for=or&open-add-payment-method=true.
OAuth tokens requested by the CLI include tag:create so droplets can be tagged spawn for attribution. If your token cannot create tags, the CLI retries creation without the tag.
Available Regions
| Slug | Location |
|---|---|
nyc1 |
New York 1 |
nyc3 |
New York 3 (default) |
sfo3 |
San Francisco 3 |
ams3 |
Amsterdam 3 |
sgp1 |
Singapore 1 |
lon1 |
London 1 |
fra1 |
Frankfurt 1 |
tor1 |
Toronto 1 |
blr1 |
Bangalore 1 |
syd1 |
Sydney 1 |
Available Droplet Sizes
| Slug | Specs | Price |
|---|---|---|
s-1vcpu-1gb |
1 vCPU · 1 GB RAM | $6/mo |
s-1vcpu-2gb |
1 vCPU · 2 GB RAM | $12/mo |
s-2vcpu-2gb |
2 vCPU · 2 GB RAM | $18/mo (default) |
s-2vcpu-4gb |
2 vCPU · 4 GB RAM | $24/mo |
s-4vcpu-8gb |
4 vCPU · 8 GB RAM | $48/mo |
s-8vcpu-16gb |
8 vCPU · 16 GB RAM | $96/mo |
Non-Interactive Mode
DO_DROPLET_NAME=dev-mk1 \
DIGITALOCEAN_ACCESS_TOKEN=your-token \
OPENROUTER_API_KEY=sk-or-v1-xxxxx \
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/claude.sh)
Override region and droplet size:
DO_REGION=fra1 \
DO_DROPLET_SIZE=s-1vcpu-2gb \
DIGITALOCEAN_ACCESS_TOKEN=your-token \
OPENROUTER_API_KEY=sk-or-v1-xxxxx \
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/claude.sh)
Interactive Region and Size Picker
Pass --custom to select from a menu of regions and droplet sizes interactively:
bash <(curl -fsSL https://openrouter.ai/labs/spawn/digitalocean/claude.sh) --custom