spawn/ramnode
A cf53ea1fb2
fix: use log_step (cyan) for in-progress messages instead of log_info (green) (#757)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).

Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.

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-12 15:48:38 -08:00
..
lib fix: use log_step (cyan) for in-progress messages instead of log_info (green) (#757) 2026-02-12 15:48:38 -08:00
aider.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 feat: add ramnode/codex agent implementation (#749) 2026-02-12 15:31:36 -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
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 for progress messages in recent scripts (#524) 2026-02-11 14:04:14 -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
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 for progress messages in recent scripts (#524) 2026-02-11 14:04:14 -08:00
README.md feat: Add ramnode/nanoclaw implementation (#556) 2026-02-11 16:41:33 -08:00

RamNode Cloud

Budget VPS cloud provider with OpenStack API compatibility and hourly billing.

Overview

  • Provider: RamNode
  • Pricing: Hourly billing starting at $0.006/hr (~$4.38/month for 1GB instance)
  • API: Full OpenStack API compatibility
  • Billing: Pay-as-you-go with $3 minimum cloud credit
  • Regions: Multiple US and international locations

Authentication

RamNode uses OpenStack authentication with username, password, and project ID.

Getting Credentials

  1. Go to RamNode Cloud Control Panel
  2. Navigate to: Cloud → API Users
  3. Create or select an API user
  4. Note your credentials:
    • Username: Your API username
    • Password: Your API password
    • Project ID: Your cloud project ID

Setting Credentials

Option 1: Environment Variables

export RAMNODE_USERNAME="your-username"
export RAMNODE_PASSWORD="your-password"
export RAMNODE_PROJECT_ID="your-project-id"

Option 2: Interactive Prompt

If credentials are not set, the script will prompt for them and save to ~/.config/spawn/ramnode.json.

Usage

Run Claude Code

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

Run Aider

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

Run Goose

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

Run NanoClaw

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

Configuration

Environment Variables

  • RAMNODE_USERNAME - Your RamNode API username
  • RAMNODE_PASSWORD - Your RamNode API password
  • RAMNODE_PROJECT_ID - Your cloud project ID
  • RAMNODE_SERVER_NAME - Server name (optional, will prompt if not set)
  • RAMNODE_FLAVOR - Instance flavor (optional, defaults to interactive picker)
  • OPENROUTER_API_KEY - OpenRouter API key (optional, will use OAuth if not set)

Instance Flavors

RamNode offers various instance sizes. Common options:

  • 1GB - 1 vCPU, 1GB RAM (~$0.006/hr)
  • 2GB - 1 vCPU, 2GB RAM (~$0.012/hr)
  • 4GB - 2 vCPU, 4GB RAM (~$0.024/hr)

The script will show available flavors interactively if RAMNODE_FLAVOR is not set.

Features

  • Full OpenStack API compatibility
  • Hourly billing (billed by the second)
  • SSH key management via API
  • Cloud-init support for automated setup
  • Multiple instance sizes
  • Low minimum cost ($3 cloud credit)

Pricing

RamNode uses hourly billing with per-second granularity:

  • 1GB instance: ~$0.006/hr = ~$4.38/month
  • 2GB instance: ~$0.012/hr = ~$8.76/month
  • 4GB instance: ~$0.024/hr = ~$17.52/month

Billing is deducted from your cloud credit balance. Minimum deposit: $3.

Technical Details

API Endpoints

  • Identity: https://openstack.ramnode.com:5000/v3
  • Compute: https://openstack.ramnode.com:8774/v2.1
  • Network: https://openstack.ramnode.com:9696/v2.0

Authentication

RamNode uses OpenStack Keystone v3 authentication with password grant:

  1. POST to /v3/auth/tokens with username/password/project
  2. Receive X-Subject-Token header
  3. Use token in subsequent API calls

Server Creation

Uses OpenStack Compute API:

  • Creates server with Ubuntu 24.04 image
  • Injects cloud-init via user_data (base64 encoded)
  • Attaches SSH key for root access
  • Waits for IPv4 address assignment

Troubleshooting

Insufficient Cloud Credit

Error: "Insufficient cloud credit"

Fix: Add at least $3 in cloud credit through the RamNode Client Area.

Authentication Failed

Error: "Authentication failed"

Fix: Verify credentials at Cloud Control Panel → API Users. Ensure username, password, and project ID are correct.

SSH Connection Timeout

Error: "SSH connectivity check failed"

Fix: Wait a few minutes for the server to fully boot and configure cloud-init. If the issue persists, check that your SSH key was properly registered.

Implemented Agents

  • Claude Code
  • Aider
  • Goose
  • Open Interpreter
  • NanoClaw
  • OpenClaw
  • Cline
  • gptme
  • Continue

Documentation