spawn/ramnode
A 6c7ced54dd
fix: replace log_warn with log_step/log_info for non-warning messages (#604)
Agent: ux-engineer

Many shell scripts misused log_warn (yellow) for normal progress/status
messages, making routine operations appear alarming. This fixes 59 files:

- Progress messages -> log_step (cyan): "Injecting environment variables...",
  "Attaching volume...", "Powering on instance...", "Retrieving server IP...",
  "Terminating sandbox/server...", "Creating datacenter...", "Importing SSH key...",
  "Deleting service/app...", "Modal not authenticated. Running setup..."
- Informational notices -> log_info (green): WhatsApp QR code authentication
  notices (30 nanoclaw scripts), codespace delete hints (14 scripts),
  "Appending environment variables to ~/.zshrc..." (6 local scripts),
  credential prompt hints, package update skipped, app reuse notices

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 03:24:30 -08:00
..
lib refactor: extract get_validated_server_name to eliminate 18 duplicate get_server_name functions (#535) 2026-02-11 14:42:09 -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
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