spawn/render
A dd224612e9
refactor: replace raw curl calls in render/lib/common.sh with render_api wrapper (#933)
Add a centralized `render_api` function that delegates to `generic_cloud_api`,
giving Render the same automatic retry logic (429/503/network errors with
exponential backoff) that all other providers already have.

- `_render_create_service`: raw curl POST -> `render_api POST`
- `_render_wait_for_service`: raw curl GET -> `render_api GET` + `_extract_json_field`
- `cleanup_server`: raw curl DELETE -> `render_api DELETE`

Also improves the wait loop with `INSTANCE_STATUS_POLL_DELAY` support and
better timeout messaging matching the standard provider pattern.

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-13 05:56:20 -08:00
..
lib refactor: replace raw curl calls in render/lib/common.sh with render_api wrapper (#933) 2026-02-13 05:56:20 -08:00
aider.sh fix: validate MODEL_ID from environment to prevent command injection (#548) 2026-02-11 15:41:10 -08:00
amazonq.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
claude.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
cline.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
codex.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
continue.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
gemini.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
goose.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
gptme.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
interpreter.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
kilocode.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
nanoclaw.sh fix: replace log_warn with log_step/log_info for non-warning messages (#604) 2026-02-12 03:24:30 -08:00
openclaw.sh fix: use log_step (cyan) for in-progress messages instead of log_info (green) (#768) 2026-02-12 16:45:58 -08:00
opencode.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
plandex.sh fix: use log_step (cyan) for progress messages instead of log_warn (yellow) (#534) 2026-02-11 14:37:43 -08:00
README.md feat: Add render/goose.sh (#245) 2026-02-10 12:55:16 -08:00

Render

Render is a modern cloud platform for deploying full-stack applications, APIs, and websites. It offers a developer-first experience with automatic deployments, built-in SSL, and managed infrastructure.

Features

  • Free Hobby Plan: Free tier for development and small projects
  • Docker Support: Native Docker container support
  • CLI & SSH Access: Full CLI tooling with SSH access via render ssh
  • REST API: Comprehensive API for programmatic provisioning
  • Auto Deployments: Automatic deployments from Git repositories
  • Managed Services: PostgreSQL, Redis, and other managed services

Authentication

Render scripts require a RENDER_API_KEY. Get yours at: https://dashboard.render.com/u/settings/api-keys

The scripts will:

  1. Check for RENDER_API_KEY environment variable
  2. Fall back to saved key at ~/.config/spawn/render.json
  3. Prompt for the key if neither is available

Available Agents

Claude Code

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/claude.sh)

Deploys Claude Code with OpenRouter integration. Configures:

  • Automatic OpenRouter API base URL
  • Bypass permissions mode for autonomous operation
  • Dark theme and vim editor settings

OpenClaw

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/openclaw.sh)

Deploys OpenClaw with multi-channel gateway and TUI. Starts gateway in background, then launches interactive TUI. Prompts for model selection (default: openrouter/auto).

NanoClaw

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/nanoclaw.sh)

Deploys NanoClaw WhatsApp-based AI agent. Requires WhatsApp QR code scan for authentication.

Aider

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/aider.sh)

Deploys Aider with OpenRouter model routing. Prompts for model selection (default: openrouter/auto).

Goose

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/goose.sh)

Deploys Goose AI coding agent by Block with native OpenRouter support.

Codex CLI

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/codex.sh)

Deploys Codex CLI with OpenRouter integration via OPENAI_BASE_URL override.

Open Interpreter

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/interpreter.sh)

Deploys Open Interpreter with OpenRouter integration via OPENAI_BASE_URL override.

Gemini CLI

bash <(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/render/gemini.sh)

Deploys Gemini CLI with OpenRouter integration via OPENAI_BASE_URL and GEMINI_API_KEY override.

Service Details

  • Plan: Starter (can be configured)
  • Region: Oregon (default)
  • Runtime: Docker
  • Base Image: render-examples/docker-hello-world (minimal Ubuntu with SSH)

Environment Variables

All scripts support:

  • RENDER_API_KEY: Your Render API token
  • OPENROUTER_API_KEY: Your OpenRouter API key (or OAuth flow)

Cleanup

Services are automatically cleaned up on exit. Manual cleanup:

render services:delete <service-id>

Limitations

  • Render's free Hobby plan has resource limits (512MB RAM, 0.1 CPU)
  • Services spin down after 15 minutes of inactivity
  • Cold starts take 30-60 seconds