Commit graph

491 commits

Author SHA1 Message Date
B
f29f6946cd refactor: Remove 8 GPU cloud providers
Spawn agents use remote LLM APIs for inference — they need cheap CPU
instances, not expensive GPU VMs. Removed:

- Lambda Cloud
- RunPod
- Vast.ai
- Hyperstack
- FluidStack
- Genesis Cloud
- Paperspace
- Crusoe Cloud

This removes 112 matrix entries and ~8700 lines of GPU-specific code.
Remaining: 25 clouds, 350 matrix entries — all affordable CPU compute.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 00:28:50 +00:00
B
3d0ac5e562 docs: Replace 'coding agent' with 'agents using remote API inference'
Clarifies that spawn agents use remote LLM APIs, not local inference,
which is why cheap CPU instances suffice and GPU clouds are unnecessary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 00:26:00 +00:00
B
ae7a999217 docs: Focus cloud discovery on cheap CPU compute, not GPU clouds
Spawn runs coding agents that call LLM APIs — they need affordable
CPU instances with SSH access, not expensive GPU VMs. Updated the
discovery prompts and CLAUDE.md to explicitly avoid GPU clouds and
prioritize budget VPS providers and container platforms.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 00:24:15 +00:00
A
acbbbda0b2
feat: Add Crusoe Cloud GPU provider (#302)
- Add Crusoe Cloud entry to manifest.json
- Create crusoe/lib/common.sh with CLI-based primitives
- Implement crusoe/claude.sh, crusoe/aider.sh, crusoe/openclaw.sh
- Add matrix entries for all 14 agents (3 implemented, 11 missing)
- Create crusoe/README.md with setup instructions

Crusoe Cloud is a GPU-focused cloud provider with:
- NVIDIA H200/H100/L40S/A100 and AMD MI300X GPUs
- Carbon-reducing infrastructure
- Starting at $1.45/GPU-hr for L40S instances
- Clean CLI workflow with config-based auth

Agent: cloud-scout-1

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 16:21:42 -08:00
A
227088a7be
feat: Add Paperspace cloud provider (#301)
- Add paperspace/lib/common.sh with API and CLI support
- Implement 3 agent scripts: claude, aider, openclaw
- Add Paperspace to manifest.json clouds section
- Add 14 matrix entries (paperspace x all agents)
- Create README with usage docs and pricing info

Paperspace is a GPU cloud (now part of DigitalOcean) with:
- Hourly billing, free bandwidth
- GPU machines from $0.46/hr (M4000) to $1.90/hr (A6000)
- Three regions: NY2, CA1, AMS1
- Both pspace CLI and REST API support

Agent: cloud-scout-2

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 16:17:39 -08:00
A
e07d9ef5cd
fix: auto-correct swapped agent/cloud args and improve help text (#300)
- Auto-correct swapped arguments (e.g., `spawn sprite claude` now runs
  as `spawn claude sprite`) instead of just warning and exiting
- Document `ls` alias for `list` in help text
- Add SPAWN_NO_UPDATE_CHECK env var to troubleshooting section
- Bump version to 0.2.21

Agent: ux-engineer

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 16:14:50 -08:00
A
1be86da79f
refactor: extract duplicated JSON parsing helpers in kamatera and cherry providers (#299)
Kamatera: Extract _kamatera_queue_field and _extract_kamatera_wan_ip helpers
to deduplicate inline Python blocks in wait_for_command (49->33 lines) and
get_kamatera_server_ip (49->26 lines).

Cherry: Extract _cherry_json_field, _cherry_find_key_by_fingerprint, and
_cherry_extract_primary_ip helpers to deduplicate inline Python blocks in
ensure_ssh_key (71->53 lines) and create_server.

Agent: complexity-hunter

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 16:14:30 -08:00
A
f4f02825a3
test: add coverage for compact list view rendering in cmdList (#298)
Tests the compact list view triggered when the matrix grid is wider
than the terminal. Covers view switching logic, count formatting,
missing clouds column, "all clouds" display, and edge cases.

Agent: test-engineer

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 16:14:14 -08:00
A
d70c7a8055
fix: remove cli.js build artifact from repo and add to .gitignore (#297)
cli/cli.js is a bun build output that should never have been committed.
Remove it from tracking and add it to .gitignore.

Fixes #296

Agent: team-lead

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 16:10:42 -08:00
B
686d1bdd88 docs: Sync README matrix with manifest.json
Agent: team-lead
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 00:10:39 +00:00
Sprite
a83a363fea fix: Add --verbose for stream-json, fix duplicate cleanup and stream close
Three fixes:
- claude -p --output-format stream-json requires --verbose flag
- Trap cleanup ran twice (SIGTERM + EXIT) — add re-entry guard
- trigger-server drain() error left HTTP stream open — wrap in
  try/finally so controller.close() always runs, preventing
  curl error 18 (transfer closed with outstanding read data)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 23:58:29 +00:00
Sprite
5db5cf4c12 fix: Stream claude agent output via --output-format stream-json
claude -p buffers all output until completion, so the trigger server
only saw heartbeats during 15-40 min runs. Adding --output-format
stream-json makes claude emit JSON events (tool calls, messages) in
real-time, giving visibility into what the agent is doing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 23:46:30 +00:00
A
af1c366dd5
test: add coverage for showInfoOrError routing in index.ts (#295)
Adds 25 tests for the previously untested showInfoOrError function which
handles single-argument CLI routing (agent info, cloud info, unknown
command with fuzzy suggestions). Tests cover valid agents, valid clouds,
unknown names, fuzzy match suggestions, help flag routing, and edge cases.

Agent: test-engineer

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 15:32:06 -08:00
A
e1c2df3b1b
fix: Use compact list view when matrix is too wide for terminal (#294)
The `spawn list` grid was 888 characters wide with 30 clouds, making it
completely unreadable in standard terminals (80-120 columns). Now detects
terminal width and automatically switches to a compact view showing each
agent with its cloud count and any missing clouds.

Agent: ux-engineer

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 15:30:48 -08:00
A
4f23276338
refactor: reduce complexity in Fly, Koyeb, and Railway providers (#293)
- Split _fly_create_and_start_machine (70 lines) into _fly_create_machine
  and _fly_wait_for_machine_start for single-responsibility
- Replace ensure_koyeb_token (38 lines) with ensure_api_token_with_provider
- Replace ensure_railway_token (37 lines) with ensure_api_token_with_provider
- Remove _save_koyeb_token and _save_railway_token (handled by shared helper)

Net reduction: ~80 lines of duplicated code

Agent: complexity-hunter

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 15:30:32 -08:00
A
2c54300be2
feat: Add kilocode on FluidStack (#292)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:28:47 -08:00
A
ceba1437b1
feat: Add kilocode on GitHub Codespaces (#291)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:28:29 -08:00
A
4945693aa6
feat: Add plandex on FluidStack (#290)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:28:15 -08:00
A
306322faff
feat: Add plandex on GitHub Codespaces (#289)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:28:00 -08:00
A
a873d26a67
feat: Add opencode on FluidStack (#288)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:27:47 -08:00
A
22a4d6baee
feat: Add opencode on GitHub Codespaces (#287)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:27:33 -08:00
A
004aafaca0
feat: Add Cherry Servers cloud provider with openclaw and goose (#286)
Add Cherry Servers as a new cloud provider with:
- REST API-based server provisioning
- SSH key management via API
- Full root access to cloud VPS instances
- Hourly billing with no commitments

Implementation includes:
- cherry/lib/common.sh with Cherry Servers API primitives
- cherry/openclaw.sh for OpenClaw deployment
- cherry/goose.sh for Goose deployment
- cherry/README.md with authentication and usage docs
- manifest.json updates (cloud entry + 14 matrix entries)

Agent: cloud-scout

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
2026-02-10 15:27:23 -08:00
A
7aaf55ddb5
feat: Add cline on FluidStack (#285)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:27:17 -08:00
A
6f25b6740f
feat: Add cline on GitHub Codespaces (#284)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:27:02 -08:00
A
7b54d9e22d
feat: Add amazonq on FluidStack (#283)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:26:50 -08:00
A
0346e972e5
feat: Add amazonq on GitHub Codespaces (#281)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:26:21 -08:00
A
f46d8d0b5d
feat: Add plandex on Northflank (#282)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:26:13 -08:00
A
f4b2b6e906
feat: Add gemini on FluidStack (#280)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:26:05 -08:00
A
502ff1e7a8
feat: Add Plandex on Render (#278)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:51 -08:00
A
f708e8d4e7
feat: Add gemini on GitHub Codespaces (#277)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:45 -08:00
A
7eae9d76c3
feat: Add opencode on Northflank (#276)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:34 -08:00
A
04cb12fa4a
feat: Add interpreter on FluidStack (#275)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:28 -08:00
A
70cca1a0ae
feat: Add OpenCode on Render (#274)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:20 -08:00
A
b7f0c4444f
feat: Add interpreter on GitHub Codespaces (#273)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:19 -08:00
A
02884cbd44
feat: Add codex on FluidStack (#272)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:25:02 -08:00
A
637aa401e6
feat: Add kilocode on Northflank (#271)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:53 -08:00
A
f1374a112a
feat: Add codex on GitHub Codespaces (#270)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:52 -08:00
A
68ba980e37
feat: Add Kilo Code on Render (#269)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:49 -08:00
A
05797f487c
feat: Add goose on GitHub Codespaces (#268)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:25 -08:00
A
7c371b6736
feat: Add goose on FluidStack (#267)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:19 -08:00
A
1d3073ed6b
feat: Add gptme on Render (#266)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:13 -08:00
A
e93858d5b3
feat: Add plandex on Railway (#265)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:24:08 -08:00
A
51b45f9db0
feat: Add nanoclaw on GitHub Codespaces (#263)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:23:47 -08:00
A
00f1bfe862
feat: Add nanoclaw on FluidStack (#262)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:23:39 -08:00
A
9fa80b9253
feat: Add Cline on Render (#261)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:23:32 -08:00
A
100bcc60fd
feat: Add opencode on Railway (#260)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:23:26 -08:00
A
9ac200f9e3
feat: Add openclaw on GitHub Codespaces (#258)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:23:03 -08:00
A
e198c0a8dc
feat: Add openclaw on FluidStack (#259)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:22:55 -08:00
A
23fa0d2630
feat: Add Amazon Q CLI on Render (#257)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:22:49 -08:00
A
4774e523cb
feat: Add kilocode on Railway (#256)
Agent: gap-filler

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 15:22:44 -08:00