spawn/CLAUDE.md
L 7940d43169
Implement Claude Code Agent Teams for continuous improvement (#20)
Rewrites improve.sh to use the experimental Agent Teams feature:
- Lead coordinates in delegate mode (never touches code)
- Teammates work in parallel: Gap Fillers, Agent Scouts, Cloud Scouts
- Shared task list for self-claiming work
- Plan approval required for cloud provider work (lib/common.sh)

CLAUDE.md updated with team role definitions and coordination rules.
.claude/settings.json enables CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS.

Usage:
  ./improve.sh              # one team cycle
  ./improve.sh --loop       # continuous team cycles
  ./improve.sh --single     # old single-agent mode (fallback)

Co-authored-by: Sprite <noreply@sprite.dev>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-07 13:54:27 -08:00

6.5 KiB

Spawn

Spawn is a matrix of agents x clouds. Every script provisions a cloud server, installs an agent, injects OpenRouter credentials, and drops the user into an interactive session.

The Matrix

manifest.json is the source of truth. It tracks:

  • agents — coding agents / AI tools (Claude Code, OpenClaw, NanoClaw, ...)
  • clouds — cloud providers to run them on (Sprite, Hetzner, ...)
  • matrix — which cloud/agent combinations are "implemented" vs "missing"

How to Improve Spawn

When run via ./improve.sh, your job is to pick ONE of these tasks and execute it:

1. Fill a missing matrix entry

Look at manifest.jsonmatrix for any "missing" entry. To implement it:

  • Find the cloud's lib/common.sh — it has all the provider-specific primitives (create server, run command, upload file, interactive session)
  • Find the agent's existing script on another cloud — it shows the install steps, config files, env vars, and launch command
  • Combine them: use the cloud's primitives to execute the agent's setup steps
  • The script goes at {cloud}/{agent}.sh

Pattern for every script:

1. Source {cloud}/lib/common.sh (local or remote fallback)
2. Authenticate with cloud provider
3. Provision server/VM
4. Wait for readiness
5. Install the agent
6. Get OpenRouter API key (env var or OAuth)
7. Inject env vars into shell config
8. Write agent-specific config files
9. Launch interactive session

OpenRouter injection is mandatory. Every agent script MUST:

  • Set OPENROUTER_API_KEY in the shell environment
  • Set provider-specific env vars (e.g., ANTHROPIC_BASE_URL=https://openrouter.ai/api)
  • These come from the agent's env field in manifest.json

2. Add a new agent

Research coding agents, AI CLI tools, or AI-powered dev tools. To add one:

  1. Add an entry to manifest.jsonagents with: name, description, url, install command, launch command, and env vars needed for OpenRouter
  2. Add "missing" entries to the matrix for every existing cloud
  3. Implement the script for at least one cloud
  4. Update README.md

Where to find new agents:

  • GitHub trending in AI/coding categories
  • OpenRouter's ecosystem
  • HuggingFace agent frameworks
  • CLI tools that accept ANTHROPIC_API_KEY or OPENAI_API_KEY (these work with OpenRouter via base URL override)

3. Add a new cloud provider

Research cloud providers with API-based provisioning. To add one:

  1. Create {cloud}/lib/common.sh with the provider's primitives:
    • Auth/token management (env var → config file → prompt)
    • Server creation (API call or CLI)
    • SSH/exec connectivity
    • File upload
    • Interactive session
    • Server destruction
  2. Add an entry to manifest.jsonclouds
  3. Add "missing" entries to the matrix for every existing agent
  4. Implement at least one agent script
  5. Update README.md

Good candidate clouds have:

  • REST API or simple CLI for provisioning
  • SSH access to the created server
  • Cloud-init or similar userdata support
  • Pay-per-hour pricing (so users can destroy after use)

4. Extend tests

test/run.sh contains the test harness. When adding a new cloud or agent:

  • Add mock functions for the cloud's CLI/API calls
  • Add per-script assertions matching the agent's setup steps
  • Run bash test/run.sh to verify

File Structure Convention

spawn/
  {cloud}/
    lib/common.sh     # Cloud-specific shared functions
    {agent}.sh        # One script per agent
  manifest.json       # The matrix (source of truth)
  improve.sh          # Run this to trigger one improvement cycle
  test/run.sh         # Test harness
  README.md           # User-facing docs

Script Conventions

  • #!/bin/bash + set -e
  • Source lib/common.sh with local-first, remote-fallback pattern
  • Use OPENROUTER_API_KEY env var to skip OAuth when set
  • All env vars documented in README.md under the relevant section
  • Remote fallback URL: https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/{path}
  • Scripts must be runnable via: bash <(curl -fsSL https://openrouter.ai/lab/spawn/{cloud}/{agent}.sh)

After Each Change

  1. Update manifest.json matrix status to "implemented"
  2. Update README.md with usage instructions
  3. Run bash -n {file} to syntax-check your scripts
  4. Commit with a descriptive message

Agent Team Roles

When running as part of an agent team (./improve.sh), teammates are assigned specific roles:

Gap Filler

You're assigned a specific {cloud}/{agent} entry to implement. Steps:

  1. Read {cloud}/lib/common.sh — understand the cloud's primitives
  2. Read an existing {agent}.sh on another cloud — understand the install steps
  3. Write {cloud}/{agent}.sh combining the two
  4. Update manifest.json matrix entry to "implemented"
  5. Add usage entry to README.md under the cloud's section
  6. bash -n syntax check
  7. Commit your changes only (don't touch other teammates' files)

Agent Scout

Research and add ONE new AI coding agent. Requirements:

  • Must be installable via a single command (npm install -g, pip install, curl | bash, etc.)
  • Must accept API keys via environment variables (OPENAI_API_KEY, OPENROUTER_API_KEY, ANTHROPIC_API_KEY, etc.)
  • OpenRouter compatibility: either native OPENROUTER_API_KEY support, or OPENAI_BASE_URL=https://openrouter.ai/api/v1 override
  • Add to manifest.jsonagents with full metadata including env field
  • Add "missing" entries in the matrix for ALL existing clouds
  • Implement on at least 2 clouds to prove the pattern
  • Update README.md

Cloud Scout

Research and add ONE new cloud provider. Requirements:

  • REST API or CLI for provisioning VMs/instances
  • SSH access to created servers
  • Cloud-init, userdata, or startup-script support
  • Pay-per-hour pricing
  • Create {cloud}/lib/common.sh with ALL primitives (see existing clouds for the pattern)
  • Add to manifest.jsonclouds
  • Add "missing" entries for ALL existing agents
  • Implement at least 2 agents to prove the lib works
  • Update README.md

Coordination Rules

  • Never edit the same file as another teammate — coordinate via the shared task list
  • manifest.json conflicts: only ONE teammate should update manifest.json at a time. If you're a Gap Filler, update just your entry. If you're a Scout, add your block and your matrix entries.
  • README.md: append your section, don't rewrite others' sections
  • Commit early: commit your work as soon as it's done so other teammates can see it
  • Self-claim: when you finish your assigned task, check the task list for the next unblocked item