Commit graph

663 commits

Author SHA1 Message Date
A
9fc89d91f7
fix: Improve error messages and spinner feedback in CLI (#324)
- Spinner completion messages now show "done" state instead of repeating
  the in-progress message (e.g., "Loading manifest" instead of "Loading manifest...")
- Script failures show actionable troubleshooting (missing credentials,
  rate limits, dependencies) instead of generic "Script exited with code N"
- Ctrl+C (exit code 130) exits silently instead of showing an error
- Fuzzy matching for unknown agents/clouds now also searches display names,
  so "Hetzner" suggests "hetzner" even when the key doesn't fuzzy-match

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 19:00:56 -08:00
A
6c211588ce
refactor: Extract helpers from IONOS create_server (192 -> 82 lines) (#321)
Break down the 192-line create_server() into focused helpers:
- ionos_parse_api_error: centralize error message extraction (used 7x)
- ionos_check_api_error: centralize error check + log pattern (used 7x)
- _ionos_find_ubuntu_image: Ubuntu image lookup
- _ionos_create_boot_volume: volume creation + wait loop
- _ionos_wait_for_server_ip: IP address polling loop

No behavior changes. All bash -n and bun tests pass.

Agent: complexity-hunter

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-10 18:58:39 -08:00
A
9123528653
test: Add cmdRun display name resolution and validateImplementation tests (#322)
Cover untested integration paths: cmdRun resolving case-insensitive
display names with "Resolved" log messages, validateImplementation
showing ">3 clouds" hint and "no cloud providers" fallback, and
launch message formatting with/without prompt.

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 18:58:35 -08:00
A
d2103fa90c
fix: Prevent team lead session from exiting after spawning agents (#323)
Root cause: `claude -p` (print mode) terminates the session when the
model produces a text response with no tool call. The team lead would
spawn 6 agents, output "I'll wait for messages", and the session would
end — orphaning all agents.

Fix: the prompt now explains the technical constraint (must always
include a tool call) and prescribes an active polling loop using
TaskList + `sleep 30` + gh pr list to stay alive while waiting for
teammate messages, instead of passively waiting.

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 18:56:42 -08:00
B
ca26349bdd feat: Add activity watchdog to discovery cycles (from refactor.sh)
Replaces the naive `claude | tee` pipe with a background process +
watchdog loop that monitors log file growth every 10 seconds.

If no output is produced for 10 minutes (IDLE_TIMEOUT=600s), the
watchdog kills the hung process. This catches stuck API calls,
network hangs, and the team lead silently exiting while teammates
are orphaned — much faster than waiting for the 75min RUN_TIMEOUT_MS.

Team cycle: 10min idle timeout, 60min hard wall-clock timeout
Single cycle: 10min idle timeout, 35min hard wall-clock timeout

The next cron trigger starts a fresh cycle automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 02:11:48 +00:00
A
895ef08deb
feat: Add Continue agent for 8 clouds (digitalocean, vultr, linode, aws-lightsail, gcp, github-codespaces, e2b, modal) (#316)
Implements Continue CLI agent on 8 cloud providers:
- digitalocean/continue.sh
- vultr/continue.sh
- linode/continue.sh
- aws-lightsail/continue.sh
- gcp/continue.sh
- github-codespaces/continue.sh
- e2b/continue.sh
- modal/continue.sh

All scripts follow the standard pattern:
1. Source cloud lib/common.sh with local/remote fallback
2. Authenticate with cloud provider
3. Provision server/sandbox
4. Install Continue CLI via npm
5. Inject OPENROUTER_API_KEY env var
6. Create ~/.continue/config.json with OpenRouter provider
7. Launch interactive TUI session with 'cn' command

Updated manifest.json to mark all 8 combinations as "implemented".

Agent: gap-filler-1

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 18:01:08 -08:00
A
56778b89e0
feat: Add Continue agent for 7 clouds (Kamatera, Cherry, Oracle, Koyeb, Northflank, Railway, Render) (#314)
Implemented Continue CLI TUI mode on:
- kamatera/continue.sh
- cherry/continue.sh
- oracle/continue.sh
- koyeb/continue.sh
- northflank/continue.sh
- railway/continue.sh
- render/continue.sh

All scripts follow the standard pattern:
1. Source cloud-specific lib/common.sh
2. Authenticate with cloud provider
3. Provision server/container
4. Install Continue CLI via npm
5. Inject OpenRouter API key
6. Create ~/.continue/config.json with OpenRouter provider
7. Launch interactive TUI session with 'cn' command

Agent: gap-filler-3

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 18:00:42 -08:00
A
12c2f7a8cf
feat: Add 12 missing IONOS agent scripts (#317)
Implemented the following IONOS cloud combinations:
- ionos/openclaw
- ionos/nanoclaw
- ionos/codex
- ionos/interpreter
- ionos/gemini
- ionos/amazonq
- ionos/cline
- ionos/gptme
- ionos/opencode
- ionos/plandex
- ionos/kilocode
- ionos/continue

All scripts follow the standard IONOS pattern:
1. Source ionos/lib/common.sh with local/remote fallback
2. Resolve IONOS credentials (IONOS_USERNAME, IONOS_PASSWORD)
3. Generate SSH key
4. Create server with cloud-init
5. Wait for SSH and cloud-init completion
6. Install agent (npm, pip, or curl installer)
7. Get OpenRouter API key via OAuth
8. Inject environment variables
9. Launch interactive session

Updated manifest.json to mark all 12 combinations as implemented.

Agent: gap-filler-4

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 18:00:35 -08:00
A
ab89ffb90d
fix: Improve compact list view clarity and help text formatting (#313)
- Rename "Missing" column to "Not available on" to avoid confusion
- Change "all clouds" to "-- all clouds supported" for full coverage agents
- Only show +/- grid legend in grid view (not compact view)
- Fix help text alignment for "spawn list" command

Agent: ux-engineer

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 18:00:17 -08:00
A
bca768ecd2
test: Add E2E tests for cmdRun argument resolution and swapping (#311)
Tests 5 critical untested paths in commands.ts and index.ts:
- Argument swapping detection (spawn cloud agent -> spawn agent cloud)
- Display name resolution (Claude Code -> claude, Hetzner Cloud -> hetzner)
- Case-insensitive key resolution (CLAUDE -> claude, Sprite -> sprite)
- showInfoOrError display name resolution for single-arg mode
- Did-you-mean suggestions for typos in agent/cloud names

27 new tests, all passing.

Agent: test-engineer

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-02-10 18:00:14 -08:00
A
5ff178fb12
fix: Prevent Python/JSON injection in Cherry Servers lib (#312)
- create_server(): Validate hostname, plan, region env vars with
  validate_resource_name(); pass all values via sys.argv instead of
  string interpolation in Python code
- ensure_ssh_key(): Build SSH key JSON payload with json.dumps via
  sys.argv instead of raw string interpolation (prevents SSH key
  content from breaking JSON)
- _cherry_json_field(), _cherry_find_key_by_fingerprint(): Use
  sys.argv instead of bash variable interpolation in Python strings

Agent: security-auditor

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 18:00:10 -08:00
A
6c9b18d7b2
fix: Add monitoring loop instructions and increase watchdog to 10 min (#315)
The team lead was spawning 6 agents then exiting because the prompt
lacked explicit instructions to stay alive and wait for messages (the
discovery prompt has this, refactor didn't). Added the WaitForMessage
monitoring loop pattern from discovery.sh.

Also increased IDLE_TIMEOUT from 180s to 600s — 3 min was too
aggressive, killing legitimate cycles where agents are working and the
leader is waiting for their responses.

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 17:49:54 -08:00
B
db0d535805 docs: Sync README matrix with manifest.json
Agent: team-lead
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 01:47:09 +00:00
A
99971bf84c
feat: Add missing Cherry Servers agent scripts for 12 agents (#309)
Creates agent deployment scripts for Cherry Servers that were marked
as "implemented" in manifest.json but were missing the actual script
files, causing 12 test failures in script-syntax.test.ts.

Added scripts: claude, nanoclaw, aider, codex, interpreter, gemini,
amazonq, cline, gptme, opencode, plandex, kilocode

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 17:38:22 -08:00
A
67acd77f54
fix: Prevent Python injection in IONOS credential handling (#307)
The IONOS provider interpolated $IONOS_USERNAME and $IONOS_PASSWORD
directly into Python string literals when saving credentials, allowing
arbitrary code execution via crafted credential values containing
single quotes. Use json_escape + printf instead (matching the pattern
used by all other providers). Also validate IONOS_LOCATION format and
numeric env vars (IONOS_CORES, IONOS_RAM, IONOS_DISK_SIZE).

Agent: security-auditor

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 17:37:54 -08:00
A
832f3f8ec1
fix: Resolve display names and case-insensitive input in CLI (#306)
Users typing "spawn Claude" or "spawn Claude Code" now get resolved
to the correct key automatically instead of an "invalid characters"
error. Works for both agents and clouds in single-arg info and
two-arg run paths.

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 17:37:51 -08:00
B
fdca682072 fix: Force team lead to stay alive with WaitForMessage monitoring loop
The lead was spawning teammates via Task (fire-and-forget) and then
ending its conversation after 14 turns. Teammates became orphaned
with no coordination or shutdown sequence.

Added three changes to the team lead prompt:
1. Upfront warning: "your session MUST stay alive for the entire cycle"
2. New "Monitoring Loop" section with explicit WaitForMessage pattern
   and common-mistake callout (BAD: spawn then exit, GOOD: spawn then
   WaitForMessage loop then shutdown)
3. End instruction restructured into 3 mandatory phases:
   Setup → Monitor (WaitForMessage loop) → Shutdown

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 01:31:28 +00:00
A
070d58f131
fix: Add activity watchdog to detect and kill hung API calls (#310)
The team lead's claude process can hang indefinitely when an API call
doesn't return (observed: pre-flight check hung for 30+ min while 6
agents were orphaned). The hard timeout waits the full 40 min.

Now monitors log file growth every 10s. If no output for 3 minutes
(IDLE_TIMEOUT=180s), the process is killed immediately. The next
5-minute cron trigger starts a fresh cycle — no wasted time.

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 17:29:45 -08:00
Sprite
b2e2462f0d fix: Poll for sprite provisioning instead of blind sleep
ensure_sprite_exists() now polls `sprite list` until the sprite
appears (up to 30s) instead of a fixed sleep. This eliminates the
spurious "sprite not found" errors that appeared while the sprite
was still provisioning.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 00:52:35 +00:00
A
c167bc4f00
feat: Add IONOS Cloud provider with minute-based billing (#304)
- Budget European provider starting at $2/month for 1 vCore/1GB RAM
- REST API via CloudAPI v6 with Basic Auth (username + password)
- Datacenter-based resource organization (auto-creates if needed)
- Volume-based boot disks with cloud-init support
- Implemented 3 agents: claude, aider, goose
- 11 agents marked as missing for future implementation

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:51:34 -08:00
A
571e17c559
feat: Add Continue AI coding assistant (#303)
Continue is an open-source AI coding assistant with 31K+ GitHub stars and strong HN buzz (298 points launch, 178 points v1.0). Features CLI TUI and headless modes, natively supports OpenRouter.

Evidence of community demand:
- GitHub: 31,335 stars (https://github.com/continuedev/continue)
- HN Launch: 298 points (July 2023)
- HN v1.0: 178 points (March 2025)
- YC-backed (S23)

Technical requirements met:
- Single command install: npm install -g @continuedev/cli
- Native OpenRouter support via config.json
- CLI modes: TUI (cn) and headless (cn -p)

Implemented on sprite and hetzner clouds.

Agent: agent-scout

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 16:49:31 -08:00
B
bbe0d75074 docs: Sync README matrix after GPU cloud removal
14 agents x 25 clouds = 350 combinations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 00:37:18 +00:00
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