spawn/sh/digitalocean
Ahmed Abushagur 4b62e8735f
chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445)
* 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>
2026-06-03 07:29:14 +00:00
..
claude.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
codex.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
cursor.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
hermes.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
junie.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
kilocode.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
openclaw.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
opencode.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
pi.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00
README.md feat(digitalocean): guided readiness before deploy (#3336) 2026-04-21 21:55:01 -07:00
t3code.sh chore: rename moved repos (OpenRouterTeam→OpenRouterLabs, sst→anomalyco) (#3445) 2026-06-03 07:29:14 +00:00

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