spawn/ramnode
A 5ebe3e5a13
fix: add actionable guidance to destroy_server failures and service timeouts (#959)
When server destruction fails, users are left with a bare error message and
no indication that they may still be billed for a running server. This adds
dashboard URLs and clear warnings to destroy_server errors across 9 clouds
(Hetzner, UpCloud, Contabo, Netcup, RamNode, Hostinger, HOSTKEY, OVH,
Latitude). Also improves error messages for Koyeb (app creation, service
deployment, deployment timeout, instance ID), GitHub Codespaces (creation
failure, readiness timeout), and E2B (sandbox creation failure).

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-13 09:38:58 -08:00
..
lib fix: add actionable guidance to destroy_server failures and service timeouts (#959) 2026-02-13 09:38:58 -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
amazonq.sh feat: implement ramnode gaps for gemini, amazonq, plandex, kilocode (#855) 2026-02-13 02:09:35 -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 (#796) 2026-02-13 07:19:00 -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 feat: implement ramnode gaps for gemini, amazonq, plandex, kilocode (#855) 2026-02-13 02:09:35 -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
kilocode.sh feat: implement ramnode gaps for gemini, amazonq, plandex, kilocode (#855) 2026-02-13 02:09:35 -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
opencode.sh feat: implement ramnode/opencode.sh (#812) 2026-02-13 01:21:57 -08:00
plandex.sh feat: implement ramnode gaps for gemini, amazonq, plandex, kilocode (#855) 2026-02-13 02:09:35 -08:00
README.md fix: improve CloudSigma error messages and update RamNode README (#947) 2026-02-13 07:54:31 -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
  • Amazon Q
  • Cline
  • Codex
  • Continue
  • Gemini CLI
  • Goose
  • gptme
  • Kilocode
  • NanoClaw
  • Open Interpreter
  • OpenClaw
  • OpenCode
  • Plandex

Documentation