mirror of
https://github.com/OpenRouterTeam/spawn.git
synced 2026-04-30 12:59:32 +00:00
Security: - Fix command injection in modal/lib/common.sh (run_server, upload_file, interactive_session) - Fix command injection in fly/lib/common.sh (run_server, upload_file, interactive_session) - All container providers now use printf '%q' for proper shell escaping Complexity: - Extract _api_should_retry_on_error() helper in shared/common.sh (-19 lines) - Refactor scaleway_api and upcloud_api to use shared retry helper (-24 lines) - Extract _save_fly_token() helper in fly/lib/common.sh (-11 lines) - Extract validateAndGetAgent() in commands.ts, reducing cmdRun/cmdAgentInfo duplication - Refactor cmdList column width calculation to use calculateColumnWidth() UX: - Add actionable next steps to error messages in shared/common.sh - Improve CLI bash fallback error messages with guidance (spawn.sh) - Add OAuth progress indicator during browser authentication wait - Show invalid model ID value and link to openrouter.ai/models - Add troubleshooting steps for agent installation failures Tests: - Update test assertions in test/run.sh to match refactored patterns - All tests passing: 74 TypeScript + 75 bash = 149 total, 0 failures Co-authored-by: A <6723574+louisgv@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| lib | ||
| aider.sh | ||
| amazonq.sh | ||
| claude.sh | ||
| cline.sh | ||
| codex.sh | ||
| gemini.sh | ||
| goose.sh | ||
| gptme.sh | ||
| interpreter.sh | ||
| nanoclaw.sh | ||
| openclaw.sh | ||
| opencode.sh | ||
| plandex.sh | ||
| README.md | ||
UpCloud
UpCloud cloud servers via REST API. UpCloud
Agents
Claude Code
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/claude.sh)
OpenClaw
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/openclaw.sh)
NanoClaw
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/nanoclaw.sh)
Aider
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/aider.sh)
Goose
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/goose.sh)
Codex CLI
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/codex.sh)
Open Interpreter
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/interpreter.sh)
Gemini CLI
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/gemini.sh)
Amazon Q CLI
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/amazonq.sh)
Cline
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/cline.sh)
gptme
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/gptme.sh)
OpenCode
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/opencode.sh)
Plandex
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/plandex.sh)
Non-Interactive Mode
UPCLOUD_SERVER_NAME=dev-mk1 \
UPCLOUD_USERNAME=your-api-username \
UPCLOUD_PASSWORD=your-api-password \
OPENROUTER_API_KEY=sk-or-v1-xxxxx \
bash <(curl -fsSL https://openrouter.ai/lab/spawn/upcloud/claude.sh)
Environment Variables
| Variable | Description | Default |
|---|---|---|
UPCLOUD_USERNAME |
UpCloud API username | (prompted) |
UPCLOUD_PASSWORD |
UpCloud API password | (prompted) |
UPCLOUD_SERVER_NAME |
Server name | (prompted) |
UPCLOUD_ZONE |
Datacenter zone | de-fra1 |
UPCLOUD_PLAN |
Server plan | 1xCPU-2GB |
OPENROUTER_API_KEY |
OpenRouter API key | (OAuth or prompted) |