From 1538e9746535fd1335d2fa16954d9140f503cecb Mon Sep 17 00:00:00 2001 From: L <6723574+louisgv@users.noreply.github.com> Date: Sat, 7 Feb 2026 22:58:43 -0800 Subject: [PATCH] Add 5 Genesis Cloud agent scripts: nanoclaw, goose, codex, interpreter, gemini (#45) Implement Genesis Cloud deployment scripts for NanoClaw, Goose, Codex CLI, Open Interpreter, and Gemini CLI. Each script follows the standard pattern: authenticate, provision instance, install agent, inject OpenRouter credentials, and launch interactive session. Co-authored-by: Sprite Co-authored-by: Claude Opus 4.6 (1M context) --- genesiscloud/codex.sh | 48 +++++++++++++++++++++++++++++ genesiscloud/gemini.sh | 49 +++++++++++++++++++++++++++++ genesiscloud/goose.sh | 53 ++++++++++++++++++++++++++++++++ genesiscloud/interpreter.sh | 48 +++++++++++++++++++++++++++++ genesiscloud/nanoclaw.sh | 61 +++++++++++++++++++++++++++++++++++++ manifest.json | 18 +++++------ 6 files changed, 268 insertions(+), 9 deletions(-) create mode 100644 genesiscloud/codex.sh create mode 100644 genesiscloud/gemini.sh create mode 100644 genesiscloud/goose.sh create mode 100644 genesiscloud/interpreter.sh create mode 100644 genesiscloud/nanoclaw.sh diff --git a/genesiscloud/codex.sh b/genesiscloud/codex.sh new file mode 100644 index 00000000..8b250280 --- /dev/null +++ b/genesiscloud/codex.sh @@ -0,0 +1,48 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=genesiscloud/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/genesiscloud/lib/common.sh)" +fi + +log_info "Codex CLI on Genesis Cloud" +echo "" + +ensure_genesis_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${GENESIS_SERVER_IP}" +wait_for_cloud_init "${GENESIS_SERVER_IP}" 60 + +log_warn "Installing Codex CLI..." +run_server "${GENESIS_SERVER_IP}" "npm install -g @openai/codex" +log_info "Codex CLI installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${GENESIS_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" + +echo "" +log_info "Genesis Cloud server setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${GENESIS_SERVER_ID}, IP: ${GENESIS_SERVER_IP})" +echo "" + +log_warn "Starting Codex..." +sleep 1 +clear +interactive_session "${GENESIS_SERVER_IP}" "source ~/.zshrc && codex" diff --git a/genesiscloud/gemini.sh b/genesiscloud/gemini.sh new file mode 100644 index 00000000..dc2c7f26 --- /dev/null +++ b/genesiscloud/gemini.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=genesiscloud/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/genesiscloud/lib/common.sh)" +fi + +log_info "Gemini CLI on Genesis Cloud" +echo "" + +ensure_genesis_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${GENESIS_SERVER_IP}" +wait_for_cloud_init "${GENESIS_SERVER_IP}" 60 + +log_warn "Installing Gemini CLI..." +run_server "${GENESIS_SERVER_IP}" "npm install -g @google/gemini-cli" +log_info "Gemini CLI installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${GENESIS_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "GEMINI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" + +echo "" +log_info "Genesis Cloud server setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${GENESIS_SERVER_ID}, IP: ${GENESIS_SERVER_IP})" +echo "" + +log_warn "Starting Gemini..." +sleep 1 +clear +interactive_session "${GENESIS_SERVER_IP}" "source ~/.zshrc && gemini" diff --git a/genesiscloud/goose.sh b/genesiscloud/goose.sh new file mode 100644 index 00000000..d7378f37 --- /dev/null +++ b/genesiscloud/goose.sh @@ -0,0 +1,53 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=genesiscloud/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/genesiscloud/lib/common.sh)" +fi + +log_info "Goose on Genesis Cloud" +echo "" + +ensure_genesis_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${GENESIS_SERVER_IP}" +wait_for_cloud_init "${GENESIS_SERVER_IP}" 60 + +log_warn "Installing Goose..." +run_server "${GENESIS_SERVER_IP}" "CONFIGURE=false curl -fsSL https://github.com/block/goose/releases/latest/download/download_cli.sh | bash" + +log_warn "Verifying Goose installation..." +if ! run_server "${GENESIS_SERVER_IP}" "command -v goose" >/dev/null 2>&1; then + log_error "Goose installation failed" + exit 1 +fi +log_info "Goose is installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${GENESIS_SERVER_IP}" upload_file run_server \ + "GOOSE_PROVIDER=openrouter" \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" + +echo "" +log_info "Genesis Cloud server setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${GENESIS_SERVER_ID}, IP: ${GENESIS_SERVER_IP})" +echo "" + +log_warn "Starting Goose..." +sleep 1 +clear +interactive_session "${GENESIS_SERVER_IP}" "source ~/.zshrc && goose" diff --git a/genesiscloud/interpreter.sh b/genesiscloud/interpreter.sh new file mode 100644 index 00000000..e75043e2 --- /dev/null +++ b/genesiscloud/interpreter.sh @@ -0,0 +1,48 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=genesiscloud/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/genesiscloud/lib/common.sh)" +fi + +log_info "Open Interpreter on Genesis Cloud" +echo "" + +ensure_genesis_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${GENESIS_SERVER_IP}" +wait_for_cloud_init "${GENESIS_SERVER_IP}" 60 + +log_warn "Installing Open Interpreter..." +run_server "${GENESIS_SERVER_IP}" "pip install open-interpreter 2>/dev/null || pip3 install open-interpreter" +log_info "Open Interpreter installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${GENESIS_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_API_KEY=${OPENROUTER_API_KEY}" \ + "OPENAI_BASE_URL=https://openrouter.ai/api/v1" + +echo "" +log_info "Genesis Cloud server setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${GENESIS_SERVER_ID}, IP: ${GENESIS_SERVER_IP})" +echo "" + +log_warn "Starting Open Interpreter..." +sleep 1 +clear +interactive_session "${GENESIS_SERVER_IP}" "source ~/.zshrc && interpreter" diff --git a/genesiscloud/nanoclaw.sh b/genesiscloud/nanoclaw.sh new file mode 100644 index 00000000..e5a95dc3 --- /dev/null +++ b/genesiscloud/nanoclaw.sh @@ -0,0 +1,61 @@ +#!/bin/bash +set -eo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)" +# shellcheck source=genesiscloud/lib/common.sh +if [[ -f "${SCRIPT_DIR}/lib/common.sh" ]]; then + source "${SCRIPT_DIR}/lib/common.sh" +else + eval "$(curl -fsSL https://raw.githubusercontent.com/OpenRouterTeam/spawn/main/genesiscloud/lib/common.sh)" +fi + +log_info "NanoClaw on Genesis Cloud" +echo "" + +ensure_genesis_token +ensure_ssh_key + +SERVER_NAME=$(get_server_name) +create_server "${SERVER_NAME}" +verify_server_connectivity "${GENESIS_SERVER_IP}" +wait_for_cloud_init "${GENESIS_SERVER_IP}" 60 + +log_warn "Installing tsx..." +run_server "${GENESIS_SERVER_IP}" "source ~/.bashrc && bun install -g tsx" + +log_warn "Cloning and building nanoclaw..." +run_server "${GENESIS_SERVER_IP}" "git clone https://github.com/gavrielc/nanoclaw.git ~/nanoclaw && cd ~/nanoclaw && npm install && npm run build" +log_info "NanoClaw installed" + +echo "" +if [[ -n "${OPENROUTER_API_KEY:-}" ]]; then + log_info "Using OpenRouter API key from environment" +else + OPENROUTER_API_KEY=$(get_openrouter_api_key_oauth 5180) +fi + +log_warn "Setting up environment variables..." +inject_env_vars_ssh "${GENESIS_SERVER_IP}" upload_file run_server \ + "OPENROUTER_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_API_KEY=${OPENROUTER_API_KEY}" \ + "ANTHROPIC_BASE_URL=https://openrouter.ai/api" + +log_warn "Configuring nanoclaw..." +DOTENV_TEMP=$(mktemp) +trap 'rm -f "${DOTENV_TEMP}"' EXIT +chmod 600 "${DOTENV_TEMP}" +cat > "${DOTENV_TEMP}" << EOF +ANTHROPIC_API_KEY=${OPENROUTER_API_KEY} +EOF + +upload_file "${GENESIS_SERVER_IP}" "${DOTENV_TEMP}" "/root/nanoclaw/.env" + +echo "" +log_info "Genesis Cloud server setup completed successfully!" +log_info "Server: ${SERVER_NAME} (ID: ${GENESIS_SERVER_ID}, IP: ${GENESIS_SERVER_IP})" +echo "" + +log_warn "Starting nanoclaw..." +log_warn "You will need to scan a WhatsApp QR code to authenticate." +echo "" +interactive_session "${GENESIS_SERVER_IP}" "cd ~/nanoclaw && source ~/.zshrc && npm run dev" diff --git a/manifest.json b/manifest.json index 3b967eef..3222c53d 100644 --- a/manifest.json +++ b/manifest.json @@ -705,16 +705,16 @@ "binarylane/plandex": "implemented", "genesiscloud/claude": "implemented", "genesiscloud/openclaw": "implemented", - "genesiscloud/nanoclaw": "missing", + "genesiscloud/nanoclaw": "implemented", "genesiscloud/aider": "implemented", - "genesiscloud/goose": "missing", - "genesiscloud/codex": "missing", - "genesiscloud/interpreter": "missing", - "genesiscloud/gemini": "missing", - "genesiscloud/amazonq": "missing", - "genesiscloud/cline": "missing", - "genesiscloud/gptme": "missing", - "genesiscloud/opencode": "missing", + "genesiscloud/goose": "implemented", + "genesiscloud/codex": "implemented", + "genesiscloud/interpreter": "implemented", + "genesiscloud/gemini": "implemented", + "genesiscloud/amazonq": "implemented", + "genesiscloud/cline": "implemented", + "genesiscloud/gptme": "implemented", + "genesiscloud/opencode": "implemented", "genesiscloud/plandex": "missing" } }