# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: "OpenClaw devbox \U0001F99E"
spec:
    description: |
        OpenClaw devbox is an extension node for the OpenClaw main application, providing a remote execution environment with programming languages and dev tools pre-installed (Python, Go, Rust, gcc, git, jq). User-installed packages persist across restarts via a persistent volume.
    coverImage: https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/openclaw-logo-text.png
    icon: https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/pixel-lobster.svg
    variables:
        - key: GATEWAY_TOKEN
          type: STRING
          name: Gateway Token
          description: The gateway authentication token of your OpenClaw instance
        - key: GATEWAY_HOST
          type: STRING
          name: Gateway Host
          description: The Zeabur service name of your OpenClaw instance (used as internal hostname, e.g. "openclaw")
    tags:
        - AI
        - DevTools
    readme: "# OpenClaw devbox \U0001F99E\n\nAn extension node for the OpenClaw main application, providing a remote execution environment with programming languages and dev tools pre-installed.\n\n## Pre-installed Languages & Tools\n- **Python 3** (python3, pip, venv)\n- **Node.js** (from OpenClaw base image)\n- **Go** (golang)\n- **Rust** (rustc, cargo)\n- **C/C++** (gcc, g++, make, cmake)\n- **Dev tools**: git, curl, wget, jq, unzip, zip\n\n## Persistent User Packages\nUser-installed packages persist across container restarts:\n- `pip install` → `~/.local/`\n- `npm install -g` → `~/.npm-global/`\n- `go install` → `~/go/`\n- `cargo install` → `~/.cargo/`\n\n## Git Authentication (Optional)\nTo clone private repositories, add the following environment variables to the devbox service in the Zeabur dashboard:\n- **`GIT_TOKEN`** — GitHub personal access token. The startup script will automatically configure HTTPS authentication. Generate one at [GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) with `repo` scope.\n- **`SSH_PRIVATE_KEY`** — Base64-encoded SSH private key. The startup script will automatically write it to `~/.ssh/id_rsa`.\n  Generate a key pair and encode it:\n  ```\n  ssh-keygen -t ed25519 -f ~/.ssh/openclaw_devbox -N \"\"\n  base64 -i ~/.ssh/openclaw_devbox    # paste this as SSH_PRIVATE_KEY\n  ```\n  Then add `~/.ssh/openclaw_devbox.pub` to your GitHub account under **Settings > SSH and GPG keys**.\n\n## Use Cases\n- **Multi-language code execution** — Ask the AI to write and run Python, Go, Rust, or C code in the conversation\n- **Package installation & testing** — Ask the AI to install third-party packages and verify functionality (installations persist across restarts)\n- **Data processing & analysis** — Upload data files and have the AI process, transform, or analyze them with Python or jq\n- **Git operations & project builds** — Clone repositories, build projects, and run tests\n- **System automation scripts** — Write and test shell scripts and automation tools\n\n## Prerequisites\nYou need a running OpenClaw instance first. If you don't have one yet, deploy the [OpenClaw main application template](https://zeabur.com/templates/VTZ4FX).\n\n## Setup\n1. Copy the **Gateway Token** from your OpenClaw service's **Instructions** tab before deploying, so you can paste it easily during setup\n2. Deploy this template to the **same Zeabur project** as your OpenClaw instance\n3. Enter the **Gateway Token** and **Gateway Host** (the Zeabur service name of your OpenClaw instance, e.g. if the service is named `openclaw`, enter `openclaw`)\n4. The devbox node will connect to OpenClaw and send a pairing request\n5. Approve the pairing request in your OpenClaw service terminal:\n   ```\n   openclaw devices list       # find the pending request ID\n   openclaw devices approve <requestId>\n   ```\n\n## Recommended Resources\n- **CPU**: 2 vCPU\n- **Memory**: 2048 MB\n\n## Verification\nAfter deployment, check that the devbox node appears in OpenClaw:\n- Run `openclaw nodes list` in your OpenClaw service terminal\n- Or check the Nodes page in the OpenClaw Web UI\n- Or simply ask in the conversation: \"Can you see the devbox node?\"\n\n## Architecture\n- No exposed ports — the devbox initiates an outbound WebSocket connection to the OpenClaw gateway\n- `exec.security` is set to `full` — no interactive approval needed for command execution\n- System runtimes are baked into the image; user packages live on the persistent volume\n\n## Troubleshooting\n- If you have entered the **Gateway Host** but don't see a pending pairing request in `openclaw devices list`, the service name might be incorrect. Go to the **Networking** tab of your OpenClaw service in the Zeabur dashboard and check the private hostname. For example, if the private hostname is `openclaw.zeabur.internal`, then the Gateway Host should be `openclaw` (the part before `.zeabur.internal`).\n- If the devbox service has not successfully paired for a long time, Zeabur may automatically suspend it. Make sure the devbox service is **running** before attempting to pair.\n"
    services:
        - name: openclaw-devbox
          icon: https://raw.githubusercontent.com/openclaw/openclaw/main/docs/assets/pixel-lobster.svg
          template: PREBUILT_V2
          spec:
            id: openclaw-devbox
            source:
                image: ghcr.io/canyugs/openclaw-devbox:latest
                command:
                    - /bin/sh
                    - -c
                    - /opt/openclaw-devbox/startup.sh
            volumes:
                - id: data
                  dir: /home/node
            env:
                CARGO_HOME:
                    default: /home/node/.cargo
                GATEWAY_HOST:
                    default: ${GATEWAY_HOST}
                GATEWAY_PORT:
                    default: "18789"
                GOPATH:
                    default: /home/node/go
                HOME:
                    default: /home/node
                NODE_DISPLAY_NAME:
                    default: devbox
                NODE_ENV:
                    default: production
                NODE_OPTIONS:
                    default: --max-old-space-size=1024
                NPM_CONFIG_PREFIX:
                    default: /home/node/.npm-global
                OPENCLAW_GATEWAY_TOKEN:
                    default: ${GATEWAY_TOKEN}
                PATH:
                    default: /home/node/.local/bin:/home/node/.npm-global/bin:/home/node/go/bin:/home/node/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
                PIP_USER:
                    default: "1"
                PYTHONUSERBASE:
                    default: /home/node/.local
                RUSTUP_HOME:
                    default: /home/node/.rustup
            configs:
                - path: /opt/openclaw-devbox/startup.sh
                  template: |
                    #!/bin/sh
                    set -e

                    CONFIG_DIR="$HOME/.openclaw"
                    CONFIG_FILE="$CONFIG_DIR/openclaw.json"

                    # Create config with full exec security (no approval needed for server-side container)
                    if [ ! -f "$CONFIG_FILE" ]; then
                      mkdir -p "$CONFIG_DIR"
                      cat > "$CONFIG_FILE" << 'CONF'
                    {
                      "tools": {
                        "exec": {
                          "security": "full"
                        }
                      }
                    }
                    CONF
                      chmod 600 "$CONFIG_FILE"
                    fi

                    # Ensure user-level directories exist on persistent volume
                    mkdir -p "$HOME/.local/bin"

                    # Create openclaw CLI wrapper
                    cat > "$HOME/.local/bin/openclaw" << 'WRAPPER'
                    #!/bin/sh
                    exec node /app/dist/index.js "$@"
                    WRAPPER
                    chmod +x "$HOME/.local/bin/openclaw"
                    mkdir -p "$HOME/.npm-global"
                    mkdir -p "$HOME/go/bin"
                    mkdir -p "$HOME/.cargo/bin"
                    mkdir -p "$HOME/workspace"

                    # Configure git credentials (optional)
                    if [ -n "$GIT_TOKEN" ]; then
                      git config --global url."https://${GIT_TOKEN}@github.com/".insteadOf "https://github.com/"
                    fi

                    # Configure SSH key (optional, base64-encoded)
                    if [ -n "$SSH_PRIVATE_KEY" ]; then
                      mkdir -p "$HOME/.ssh"
                      echo "$SSH_PRIVATE_KEY" | base64 -d > "$HOME/.ssh/id_rsa"
                      chmod 600 "$HOME/.ssh/id_rsa"
                      ssh-keyscan github.com >> "$HOME/.ssh/known_hosts" 2>/dev/null
                    fi

                    # Start node host — retry on pairing rejection to avoid container restart loop
                    RETRY_DELAY=10
                    while true; do
                      echo "Connecting to gateway ${GATEWAY_HOST:-openclaw}:${GATEWAY_PORT:-18789}..."
                      openclaw node run \
                        --host "${GATEWAY_HOST:-openclaw}" \
                        --port "${GATEWAY_PORT:-18789}" \
                        --display-name "${NODE_DISPLAY_NAME:-devbox}" && break
                      echo "Connection lost. Retrying in ${RETRY_DELAY}s..."
                      sleep "$RETRY_DELAY"
                    done
                  permission: 493
                  envsubst: false
localization:
    es-ES:
        description: OpenClaw devbox es un nodo de extensión para la aplicación principal de OpenClaw, que proporciona un entorno de ejecución remota con lenguajes de programación y herramientas de desarrollo preinstalados (Python, Go, Rust, gcc, git, jq). Los paquetes instalados por el usuario se conservan mediante un volumen persistente.
        variables:
            - key: GATEWAY_TOKEN
              type: STRING
              name: Token de Gateway
              description: El token de autenticación del Gateway de su instancia de OpenClaw
            - key: GATEWAY_HOST
              type: STRING
              name: Host del Gateway
              description: El nombre del servicio Zeabur de su instancia de OpenClaw (usado como hostname interno, ej. "openclaw")
        readme: "# OpenClaw devbox \U0001F99E\n\nNodo de extensión para la aplicación principal de OpenClaw, que proporciona un entorno de ejecución remota con lenguajes de programación y herramientas de desarrollo preinstalados.\n\n## Lenguajes y herramientas preinstalados\n- **Python 3** (python3, pip, venv)\n- **Node.js** (de la imagen base de OpenClaw)\n- **Go** (golang)\n- **Rust** (rustc, cargo)\n- **C/C++** (gcc, g++, make, cmake)\n- **Herramientas de desarrollo**: git, curl, wget, jq, unzip, zip\n\n## Paquetes persistentes del usuario\nLos paquetes instalados por el usuario se conservan tras reinicios del contenedor:\n- `pip install` → `~/.local/`\n- `npm install -g` → `~/.npm-global/`\n- `go install` → `~/go/`\n- `cargo install` → `~/.cargo/`\n\n## Autenticación Git (opcional)\nPara clonar repositorios privados, agregue las siguientes variables de entorno al servicio devbox en el panel de Zeabur:\n- **`GIT_TOKEN`** — GitHub personal access token. El script de inicio configurará automáticamente la autenticación HTTPS. Genere uno en [GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) con el alcance `repo`.\n- **`SSH_PRIVATE_KEY`** — Clave SSH privada codificada en Base64. El script de inicio la escribirá automáticamente en `~/.ssh/id_rsa`.\n  Genere un par de claves y codifíquelo:\n  ```\n  ssh-keygen -t ed25519 -f ~/.ssh/openclaw_devbox -N \"\"\n  base64 -i ~/.ssh/openclaw_devbox    # pegue este valor en SSH_PRIVATE_KEY\n  ```\n  Luego agregue `~/.ssh/openclaw_devbox.pub` a su cuenta de GitHub en **Settings > SSH and GPG keys**.\n\n## Casos de uso\n- **Ejecución de código multilenguaje** — Pida a la IA que escriba y ejecute código en Python, Go, Rust o C en la conversación\n- **Instalación y prueba de paquetes** — Pida a la IA que instale paquetes de terceros y verifique su funcionalidad (las instalaciones persisten tras reinicios)\n- **Procesamiento y análisis de datos** — Suba archivos de datos y pida a la IA que los procese, transforme o analice con Python o jq\n- **Operaciones Git y compilación de proyectos** — Clone repositorios, compile proyectos y ejecute pruebas\n- **Scripts de automatización del sistema** — Escriba y pruebe scripts de shell y herramientas de automatización\n\n## Requisitos previos\nNecesita una instancia de OpenClaw en ejecución. Si aún no tiene una, despliegue primero la [plantilla principal de OpenClaw](https://zeabur.com/templates/VTZ4FX).\n\n## Configuración\n1. Antes de desplegar, copie el **Gateway Token** de la pestaña **Instrucciones** de su servicio OpenClaw para facilitar la entrada\n2. Despliegue esta plantilla en el **mismo proyecto Zeabur** que su instancia de OpenClaw\n3. Ingrese el **Gateway Token** y el **Gateway Host** (el nombre del servicio Zeabur de su instancia de OpenClaw, por ejemplo, si el servicio se llama `openclaw`, ingrese `openclaw`)\n4. El nodo devbox se conectará a OpenClaw y enviará una solicitud de emparejamiento\n5. Apruebe la solicitud de emparejamiento en la terminal de su servicio OpenClaw:\n   ```\n   openclaw devices list       # encontrar el ID de solicitud pendiente\n   openclaw devices approve <requestId>\n   ```\n\n## Recursos recomendados\n- **CPU**: 2 vCPU\n- **Memoria**: 2048 MB\n\n## Verificación\nDespués del despliegue, verifique que el nodo devbox aparezca en OpenClaw:\n- Ejecute `openclaw nodes list` en la terminal de su servicio OpenClaw\n- O consulte la página de Nodos en la interfaz web de OpenClaw\n- O simplemente pregunte en la conversación: \"Can you see the devbox node?\"\n\n## Arquitectura\n- Sin puertos expuestos — el devbox inicia una conexión WebSocket saliente al gateway de OpenClaw\n- `exec.security` está configurado como `full` — no se necesita aprobación interactiva para la ejecución de comandos\n- Los entornos de ejecución del sistema están integrados en la imagen; los paquetes del usuario residen en el volumen persistente\n\n## Solución de problemas\n- Si ha ingresado el **Gateway Host** pero no ve una solicitud de emparejamiento pendiente en `openclaw devices list`, es posible que el nombre del servicio sea incorrecto. Vaya a la pestaña **Red** del servicio OpenClaw en el panel de Zeabur y verifique el hostname privado. Por ejemplo, si el hostname privado es `openclaw.zeabur.internal`, entonces el Gateway Host debe ser `openclaw` (la parte antes de `.zeabur.internal`).\n- Si el servicio devbox no ha logrado emparejarse durante mucho tiempo, Zeabur puede suspenderlo automáticamente. Asegúrese de que el servicio devbox esté **en ejecución** antes de intentar el emparejamiento.\n"
    id-ID:
        description: OpenClaw devbox adalah node ekstensi untuk aplikasi utama OpenClaw, menyediakan lingkungan eksekusi jarak jauh dengan bahasa pemrograman dan alat pengembangan yang sudah terinstal (Python, Go, Rust, gcc, git, jq). Paket yang diinstal pengguna disimpan melalui volume persisten.
        variables:
            - key: GATEWAY_TOKEN
              type: STRING
              name: Token Gateway
              description: Token autentikasi Gateway dari instans OpenClaw Anda
            - key: GATEWAY_HOST
              type: STRING
              name: Host Gateway
              description: 'Nama layanan Zeabur dari instans OpenClaw Anda (digunakan sebagai hostname internal, contoh: openclaw)'
        readme: "# OpenClaw devbox \U0001F99E\n\nNode ekstensi untuk aplikasi utama OpenClaw, menyediakan lingkungan eksekusi jarak jauh dengan bahasa pemrograman dan alat pengembangan yang sudah terinstal.\n\n## Bahasa & Alat yang Terinstal\n- **Python 3** (python3, pip, venv)\n- **Node.js** (dari image dasar OpenClaw)\n- **Go** (golang)\n- **Rust** (rustc, cargo)\n- **C/C++** (gcc, g++, make, cmake)\n- **Alat pengembangan**: git, curl, wget, jq, unzip, zip\n\n## Paket Pengguna Persisten\nPaket yang diinstal pengguna tetap tersimpan setelah container di-restart:\n- `pip install` → `~/.local/`\n- `npm install -g` → `~/.npm-global/`\n- `go install` → `~/go/`\n- `cargo install` → `~/.cargo/`\n\n## Autentikasi Git (Opsional)\nUntuk meng-clone repositori privat, tambahkan variabel lingkungan berikut ke layanan devbox di dashboard Zeabur:\n- **`GIT_TOKEN`** — GitHub personal access token. Skrip startup akan otomatis mengonfigurasi autentikasi HTTPS. Buat di [GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) dengan scope `repo`.\n- **`SSH_PRIVATE_KEY`** — Kunci SSH privat yang di-encode Base64. Skrip startup akan otomatis menulisnya ke `~/.ssh/id_rsa`.\n  Buat pasangan kunci dan encode:\n  ```\n  ssh-keygen -t ed25519 -f ~/.ssh/openclaw_devbox -N \"\"\n  base64 -i ~/.ssh/openclaw_devbox    # tempel nilai ini sebagai SSH_PRIVATE_KEY\n  ```\n  Lalu tambahkan `~/.ssh/openclaw_devbox.pub` ke akun GitHub Anda di **Settings > SSH and GPG keys**.\n\n## Kasus Penggunaan\n- **Eksekusi kode multi-bahasa** — Minta AI menulis dan menjalankan kode Python, Go, Rust, atau C dalam percakapan\n- **Instalasi dan pengujian paket** — Minta AI menginstal paket pihak ketiga dan memverifikasi fungsionalitasnya (instalasi tetap tersimpan setelah restart)\n- **Pemrosesan dan analisis data** — Unggah file data dan minta AI memprosesnya dengan Python atau jq\n- **Operasi Git dan build proyek** — Clone repositori, build proyek, dan jalankan pengujian\n- **Skrip otomasi sistem** — Tulis dan uji shell script dan alat otomasi\n\n## Prasyarat\nAnda memerlukan instans OpenClaw yang sudah berjalan. Jika belum memilikinya, deploy terlebih dahulu [template aplikasi utama OpenClaw](https://zeabur.com/templates/VTZ4FX).\n\n## Pengaturan\n1. Sebelum deploy, salin **Gateway Token** dari tab **Instruksi** layanan OpenClaw Anda agar mudah dimasukkan nanti\n2. Deploy template ini ke **proyek Zeabur yang sama** dengan instans OpenClaw Anda\n3. Masukkan **Gateway Token** dan **Gateway Host** (nama layanan Zeabur dari instans OpenClaw Anda, misalnya jika layanan bernama `openclaw`, masukkan `openclaw`)\n4. Node devbox akan terhubung ke OpenClaw dan mengirim permintaan pairing\n5. Setujui permintaan pairing di terminal layanan OpenClaw Anda:\n   ```\n   openclaw devices list       # temukan ID permintaan yang tertunda\n   openclaw devices approve <requestId>\n   ```\n\n## Rekomendasi Sumber Daya\n- **CPU**: 2 vCPU\n- **Memori**: 2048 MB\n\n## Verifikasi\nSetelah deployment, pastikan node devbox muncul di OpenClaw:\n- Jalankan `openclaw nodes list` di terminal layanan OpenClaw Anda\n- Atau periksa halaman Nodes di OpenClaw Web UI\n- Atau tanyakan langsung dalam percakapan: \"Can you see the devbox node?\"\n\n## Arsitektur\n- Tidak ada port yang terbuka — devbox memulai koneksi WebSocket keluar ke gateway OpenClaw\n- `exec.security` diatur ke `full` — tidak perlu persetujuan interaktif untuk eksekusi perintah\n- Runtime sistem sudah terpasang di dalam image; paket pengguna disimpan di volume persisten\n\n## Pemecahan Masalah\n- Jika Anda sudah memasukkan **Gateway Host** tetapi tidak melihat permintaan pairing yang tertunda di `openclaw devices list`, kemungkinan nama layanan salah. Buka tab **Jaringan** pada layanan OpenClaw di dashboard Zeabur dan periksa hostname privat. Misalnya, jika hostname privat adalah `openclaw.zeabur.internal`, maka Gateway Host harus diisi `openclaw` (bagian sebelum `.zeabur.internal`).\n- Jika layanan devbox tidak berhasil pairing dalam waktu lama, Zeabur dapat menangguhkannya secara otomatis. Pastikan layanan devbox dalam status **berjalan** sebelum mencoba pairing.\n"
    ja-JP:
        description: OpenClaw devbox は OpenClaw メインアプリケーションの拡張ノードで、プログラミング言語と開発ツール（Python、Go、Rust、gcc、git、jq）がプリインストールされたリモート実行環境を提供します。ユーザーがインストールしたパッケージは永続ボリュームにより保持されます。
        variables:
            - key: GATEWAY_TOKEN
              type: STRING
              name: Gateway トークン
              description: OpenClaw インスタンスの Gateway 認証トークン
            - key: GATEWAY_HOST
              type: STRING
              name: Gateway ホスト
              description: OpenClaw インスタンスの Zeabur サービス名（内部ホスト名として使用、例："openclaw"）
        readme: "# OpenClaw devbox \U0001F99E\n\nOpenClaw メインアプリケーションの拡張ノード。プログラミング言語と開発ツールがプリインストールされたリモート実行環境を提供します。\n\n## プリインストール済み言語・ツール\n- **Python 3**（python3、pip、venv）\n- **Node.js**（OpenClaw ベースイメージに含まれます）\n- **Go**（golang）\n- **Rust**（rustc、cargo）\n- **C/C++**（gcc、g++、make、cmake）\n- **開発ツール**：git、curl、wget、jq、unzip、zip\n\n## パッケージの永続化\nユーザーがインストールしたパッケージはコンテナの再起動後も保持されます：\n- `pip install` → `~/.local/`\n- `npm install -g` → `~/.npm-global/`\n- `go install` → `~/go/`\n- `cargo install` → `~/.cargo/`\n\n## Git 認証（オプション）\nプライベートリポジトリをクローンするには、Zeabur ダッシュボードの devbox サービスに以下の環境変数を追加してください：\n- **`GIT_TOKEN`** — GitHub personal access token。起動スクリプトが自動的に HTTPS 認証を設定します。[GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) で `repo` スコープを有効にして生成してください。\n- **`SSH_PRIVATE_KEY`** — Base64 エンコードされた SSH 秘密鍵。起動スクリプトが自動的に `~/.ssh/id_rsa` に書き込みます。\n  鍵ペアの生成とエンコード：\n  ```\n  ssh-keygen -t ed25519 -f ~/.ssh/openclaw_devbox -N \"\"\n  base64 -i ~/.ssh/openclaw_devbox    # この値を SSH_PRIVATE_KEY に貼り付け\n  ```\n  `~/.ssh/openclaw_devbox.pub` を GitHub アカウントの **Settings > SSH and GPG keys** に追加してください。\n\n## ユースケース\n- **多言語コード実行** — 会話で AI に Python、Go、Rust、C のコードを書いて実行してもらう\n- **パッケージのインストールとテスト** — AI にサードパーティパッケージをインストールして機能を検証してもらう（インストールは再起動後も保持）\n- **データ処理と分析** — データファイルをアップロードし、AI に Python や jq で処理・変換・分析してもらう\n- **Git 操作とプロジェクトビルド** — リポジトリのクローン、プロジェクトのビルド、テストの実行\n- **システム自動化スクリプト** — シェルスクリプトや自動化ツールの作成とテスト\n\n## 前提条件\nまず OpenClaw インスタンスが稼働している必要があります。まだお持ちでない場合は、先に [OpenClaw メインアプリケーションテンプレート](https://zeabur.com/templates/VTZ4FX) をデプロイしてください。\n\n## セットアップ\n1. デプロイ前に、OpenClaw サービスの**指示**タブから **Gateway Token** をコピーしておくと、入力がスムーズです\n2. このテンプレートを OpenClaw インスタンスと**同じ Zeabur プロジェクト**にデプロイします\n3. **Gateway Token** と **Gateway Host**（OpenClaw インスタンスの Zeabur サービス名、例えばサービス名が `openclaw` の場合は `openclaw` と入力）を入力します\n4. devbox ノードが OpenClaw に接続し、ペアリングリクエストを送信します\n5. OpenClaw サービスターミナルでペアリングリクエストを承認します：\n   ```\n   openclaw devices list       # 保留中のリクエスト ID を確認\n   openclaw devices approve <requestId>\n   ```\n\n## 推奨リソース\n- **CPU**：2 vCPU\n- **メモリ**：2048 MB\n\n## 確認\nデプロイ後、devbox ノードが OpenClaw に表示されていることを確認します：\n- OpenClaw サービスターミナルで `openclaw nodes list` を実行\n- または OpenClaw Web UI のノードページで確認\n- または会話で直接聞く：「devbox の node は見えますか？」\n\n## アーキテクチャ\n- 公開ポートなし — devbox は WebSocket で OpenClaw gateway に発信接続します\n- `exec.security` は `full` に設定 — コマンド実行時にインタラクティブな承認は不要\n- システムランタイムはイメージに組み込み済み；ユーザーパッケージは永続ボリュームに保存\n\n## トラブルシューティング\n- **Gateway Host** を入力しても `openclaw devices list` にペアリングリクエストが表示されない場合、サービス名が正しくない可能性があります。Zeabur ダッシュボードで OpenClaw サービスの**ネットワーク**タブを開き、プライベートホスト名を確認してください。例えばプライベートホスト名が `openclaw.zeabur.internal` の場合、Gateway Host には `openclaw`（`.zeabur.internal` の前の部分）を入力してください。\n- devbox サービスが長時間ペアリングに成功しない場合、Zeabur が自動的にサービスを一時停止することがあります。ペアリングを試みる前に、devbox サービスが**実行中**であることを確認してください。\n"
    zh-CN:
        description: OpenClaw devbox 是 OpenClaw 主程序的扩展节点，提供预装多种编程语言与开发工具（Python、Go、Rust、gcc、git、jq）的远程执行环境。用户安装的包通过持久化磁盘保留。
        variables:
            - key: GATEWAY_TOKEN
              type: STRING
              name: Gateway Token
              description: 您的 OpenClaw 实例的 Gateway 认证令牌
            - key: GATEWAY_HOST
              type: STRING
              name: Gateway Host
              description: 您的 OpenClaw 实例在 Zeabur 上的服务名称，作为内部主机名使用（例如 "openclaw"）
        readme: "# OpenClaw devbox \U0001F99E\n\nOpenClaw 主程序的扩展节点，提供预装多种编程语言与开发工具的远程执行环境。\n\n## 预装语言与工具\n- **Python 3**（python3、pip、venv）\n- **Node.js**（来自 OpenClaw 基础镜像）\n- **Go**（golang）\n- **Rust**（rustc、cargo）\n- **C/C++**（gcc、g++、make、cmake）\n- **开发工具**：git、curl、wget、jq、unzip、zip\n\n## 持久化用户包\n用户安装的包在容器重启后仍会保留：\n- `pip install` → `~/.local/`\n- `npm install -g` → `~/.npm-global/`\n- `go install` → `~/go/`\n- `cargo install` → `~/.cargo/`\n\n## Git 认证（可选）\n如需 clone 私有仓库，请在 Zeabur 控制台的 devbox 服务中添加以下环境变量：\n- **`GIT_TOKEN`** — GitHub personal access token，启动脚本会自动配置 HTTPS 认证。前往 [GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) 生成，需勾选 `repo` 权限。\n- **`SSH_PRIVATE_KEY`** — Base64 编码的 SSH 私钥，启动脚本会自动写入 `~/.ssh/id_rsa`。\n  生成密钥并编码：\n  ```\n  ssh-keygen -t ed25519 -f ~/.ssh/openclaw_devbox -N \"\"\n  base64 -i ~/.ssh/openclaw_devbox    # 将此值粘贴到 SSH_PRIVATE_KEY\n  ```\n  然后将 `~/.ssh/openclaw_devbox.pub` 添加到 GitHub 账号的 **Settings > SSH and GPG keys**。\n\n## 使用案例\n- **多语言程序执行** — 在对话中请 AI 编写并执行 Python、Go、Rust、C 代码\n- **包安装与测试** — 请 AI 安装第三方包并验证功能（安装会持久化，重启后仍保留）\n- **数据处理与分析** — 上传数据文件，请 AI 用 Python 或 jq 处理、转换、分析\n- **Git 操作与项目构建** — Clone 仓库、构建项目、运行测试\n- **系统自动化脚本** — 编写和测试 shell script 与自动化工具\n\n## 前置要求\n您需要先有一个运行中的 OpenClaw 实例。如果还没有，请先部署 [OpenClaw 主程序模板](https://zeabur.com/templates/VTZ4FX)。\n\n## 设置步骤\n1. 部署前，先从 OpenClaw 服务的**操作说明**标签页中复制 **Gateway Token**，方便后续输入\n2. 将此模板部署到与您的 OpenClaw 实例**相同的 Zeabur 项目**\n3. 输入 **Gateway Token** 和 **Gateway Host**（您的 OpenClaw 实例的 Zeabur 服务名称，例如服务名称为 `openclaw`，则填入 `openclaw`）\n4. devbox 节点将连接至 OpenClaw 并发送配对请求\n5. 在您的 OpenClaw 服务终端中批准配对请求：\n   ```\n   openclaw devices list       # 找到待处理的请求 ID\n   openclaw devices approve <requestId>\n   ```\n\n## 建议资源配置\n- **CPU**：2 vCPU\n- **内存**：2048 MB\n\n## 验证\n部署后，确认 devbox 节点已出现在 OpenClaw 中：\n- 在 OpenClaw 服务终端中执行 `openclaw nodes list`\n- 或在 OpenClaw Web UI 的节点页面中查看\n- 或直接在对话中询问：\"你现在有看到 devbox 的 node 吗？\"\n\n## 架构\n- 无对外公开端口 — devbox 通过 WebSocket 主动连接至 OpenClaw gateway\n- `exec.security` 设为 `full` — 执行命令时无需交互式批准\n- 系统运行环境内置于镜像中；用户包存储在持久化磁盘上\n\n## 疑难排解\n- 如果已输入 **Gateway Host** 但在 `openclaw devices list` 中看不到等待配对的请求，可能是服务名称填写错误。请前往 Zeabur 控制台中 OpenClaw 服务的**网络**标签页，查看内网名称。例如内网名称为 `openclaw.zeabur.internal`，则 Gateway Host 应填入 `openclaw`（`.zeabur.internal` 前面的部分）。\n- 如果 devbox 服务长时间未成功配对，Zeabur 可能会自动暂停该服务。请在尝试配对前确认 devbox 服务处于**运行中**状态。\n"
    zh-TW:
        description: OpenClaw devbox 是 OpenClaw 主程式的擴充節點，提供預裝多種程式語言與開發工具（Python、Go、Rust、gcc、git、jq）的遠端執行環境。使用者安裝的套件透過持久化磁碟保留。
        variables:
            - key: GATEWAY_TOKEN
              type: STRING
              name: Gateway Token
              description: 您的 OpenClaw 實例的 Gateway 認證令牌
            - key: GATEWAY_HOST
              type: STRING
              name: Gateway Host
              description: 您的 OpenClaw 實例在 Zeabur 上的服務名稱，作為內部主機名使用（例如 "openclaw"）
        readme: "# OpenClaw devbox \U0001F99E\n\nOpenClaw 主程式的擴充節點，提供預裝多種程式語言與開發工具的遠端執行環境。\n\n## 預裝語言與工具\n- **Python 3**（python3、pip、venv）\n- **Node.js**（來自 OpenClaw 基礎映像檔）\n- **Go**（golang）\n- **Rust**（rustc、cargo）\n- **C/C++**（gcc、g++、make、cmake）\n- **開發工具**：git、curl、wget、jq、unzip、zip\n\n## 持久化使用者套件\n使用者安裝的套件在容器重啟後仍會保留：\n- `pip install` → `~/.local/`\n- `npm install -g` → `~/.npm-global/`\n- `go install` → `~/go/`\n- `cargo install` → `~/.cargo/`\n\n## Git 認證（選用）\n如需 clone 私有儲存庫，請在 Zeabur 控制台的 devbox 服務中加入以下環境變數：\n- **`GIT_TOKEN`** — GitHub personal access token，啟動腳本會自動設定 HTTPS 認證。前往 [GitHub > Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens) 產生，需勾選 `repo` 權限。\n- **`SSH_PRIVATE_KEY`** — Base64 編碼的 SSH 私鑰，啟動腳本會自動寫入 `~/.ssh/id_rsa`。\n  產生金鑰並編碼：\n  ```\n  ssh-keygen -t ed25519 -f ~/.ssh/openclaw_devbox -N \"\"\n  base64 -i ~/.ssh/openclaw_devbox    # 將此值貼入 SSH_PRIVATE_KEY\n  ```\n  然後將 `~/.ssh/openclaw_devbox.pub` 加入 GitHub 帳號的 **Settings > SSH and GPG keys**。\n\n## 使用案例\n- **多語言程式執行** — 在對話中請 AI 撰寫並執行 Python、Go、Rust、C 程式碼\n- **套件安裝與測試** — 請 AI 安裝第三方套件並驗證功能（安裝會持久化，重啟後仍保留）\n- **資料處理與分析** — 上傳資料檔，請 AI 用 Python 或 jq 處理、轉換、分析\n- **Git 操作與專案建置** — Clone 儲存庫、建置專案、執行測試\n- **系統自動化腳本** — 撰寫和測試 shell script 與自動化工具\n\n## 前置需求\n您需要先有一個運行中的 OpenClaw 實例。如果還沒有，請先部署 [OpenClaw 主程式模板](https://zeabur.com/templates/VTZ4FX)。\n\n## 設定步驟\n1. 部署前，先從 OpenClaw 服務的**使用說明**分頁中複製 **Gateway Token**，方便後續輸入\n2. 將此模板部署到與您的 OpenClaw 實例**相同的 Zeabur 專案**\n3. 輸入 **Gateway Token** 和 **Gateway Host**（您的 OpenClaw 實例的 Zeabur 服務名稱，例如服務名稱為 `openclaw`，則填入 `openclaw`）\n4. devbox 節點將連線至 OpenClaw 並發送配對請求\n5. 在您的 OpenClaw 服務終端中批准配對請求：\n   ```\n   openclaw devices list       # 找到待處理的請求 ID\n   openclaw devices approve <requestId>\n   ```\n\n## 建議資源配置\n- **CPU**：2 vCPU\n- **記憶體**：2048 MB\n\n## 驗證\n部署後，確認 devbox 節點已出現在 OpenClaw 中：\n- 在 OpenClaw 服務終端中執行 `openclaw nodes list`\n- 或在 OpenClaw Web UI 的節點頁面中查看\n- 或直接在對話中詢問：「你現在有看到 devbox 的 node 嗎？」\n\n## 架構\n- 無對外公開端口 — devbox 透過 WebSocket 主動連線至 OpenClaw gateway\n- `exec.security` 設為 `full` — 執行指令時無需互動式批准\n- 系統執行環境內建於映像檔中；使用者套件儲存在持久化磁碟上\n\n## 疑難排解\n- 如果已輸入 **Gateway Host** 但在 `openclaw devices list` 中看不到等待配對的請求，可能是服務名稱填寫錯誤。請前往 Zeabur 控制台中 OpenClaw 服務的**網路**分頁，查看內網名稱。例如內網名稱為 `openclaw.zeabur.internal`，則 Gateway Host 應填入 `openclaw`（`.zeabur.internal` 前面的部分）。\n- 如果 devbox 服務長時間未成功配對，Zeabur 可能會自動暫停該服務。請在嘗試配對前確認 devbox 服務處於**執行中**狀態。\n"
