Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Set up an active-passive OpenClaw failover gateway with health monitoring, auto-promotion/demotion, channel splitting, and git workspace sync for seamless re...
Set up an active-passive OpenClaw failover gateway with health monitoring, auto-promotion/demotion, channel splitting, and git workspace sync for seamless re...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Deploy a standby OpenClaw gateway that automatically takes over when your primary goes down. Active-passive design with auto-promotion and auto-demotion.
~30 second failover โ health monitor detects primary down, promotes standby Auto-recovery โ when primary comes back, standby demotes itself Zero split-brain โ primary and standby use different channels (no duplicate messages) Git-synced workspace โ standby pulls latest workspace on promotion $12/month โ runs on a minimal VPS
PRIMARY (your main VPS) STANDBY (failover VPS) โโ Full stack (all channels) โโ Single channel only (e.g., Discord DM) โโ All cron jobs โโ No crons (recovery mode) โโ Gateway active โ โโ Gateway stopped ๐ค โโ Pushes workspace to git โโ Health monitor watches primary โ โโ Primary healthy โ sleep โโ Primary down 30s โ PROMOTE โโ Primary back โ DEMOTE The key insight: split your channels between primary and standby. Don't share credentials โ give each node exclusive ownership of different channels. This eliminates split-brain entirely.
SetupPrimaryStandbyRC + DiscordRocket.Chat (full)Discord DM onlyDiscord + TelegramDiscord (full)Telegram DM onlySlack + DiscordSlack (full)Discord DM only Your primary handles everything. The standby is minimal recovery โ just enough to stay reachable.
Primary OpenClaw instance running on a VPS A second VPS for the standby ($6-12/mo, any provider) Tailscale mesh network (or any VPN/private network) Git repository for workspace sync (GitHub, GitLab, etc.) A second messaging channel for the standby (different from primary)
Any cheap VPS works. Recommended: 2GB RAM, Ubuntu 24.04. # Harden the box ufw allow 22/tcp ufw enable apt install -y fail2ban unattended-upgrades # Create openclaw user adduser openclaw --disabled-password usermod -aG sudo openclaw # Copy your SSH key to openclaw user # Install Tailscale curl -fsSL https://tailscale.com/install.sh | sh tailscale up --hostname=your-failover-name
# As openclaw user curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash source ~/.bashrc nvm install --lts npm install -g openclaw # Clone workspace git clone <your-workspace-repo> ~/.openclaw/workspace
Create a minimal OpenClaw config on the standby. Only enable the standby channel: { "agents": { "defaults": { "model": { "primary": "anthropic/claude-opus-4-6", "fallbacks": ["anthropic/claude-sonnet-4-5"] }, "workspace": "/home/openclaw/.openclaw/workspace" }, "list": [{ "id": "main", "default": true }] }, "channels": { "discord": { "enabled": true, "token": "<YOUR_DISCORD_BOT_TOKEN>", "dm": { "policy": "allowlist", "allowFrom": ["<YOUR_DISCORD_USER_ID>"] } } }, "gateway": { "port": 18789, "mode": "local", "bind": "tailnet" } } Important: Disable this channel on your primary to avoid conflicts. Test it works: openclaw gateway run โ verify the bot connects and responds, then stop it.
Copy the included scripts/health-monitor.sh to the standby: sudo cp health-monitor.sh /usr/local/bin/openclaw-health-monitor.sh sudo chmod +x /usr/local/bin/openclaw-health-monitor.sh Edit the variables at the top: PRIMARY_IP โ your primary's Tailscale IP PRIMARY_PORT โ your primary's gateway port (default: 18789) SECRETS_HOST โ (optional) host to rsync secrets from on promotion Create the systemd services: /etc/systemd/system/openclaw-health-monitor.service [Unit] Description=OpenClaw Failover Health Monitor After=network-online.target tailscaled.service Wants=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/openclaw-health-monitor.sh Restart=always RestartSec=10 [Install] WantedBy=multi-user.target /etc/systemd/system/openclaw.service [Unit] Description=OpenClaw Gateway (Failover) After=network-online.target tailscaled.service Wants=network-online.target [Service] Type=simple User=openclaw Group=openclaw WorkingDirectory=/home/openclaw/.openclaw/workspace ExecStart=/usr/bin/openclaw gateway run Restart=on-failure RestartSec=5 Environment=HOME=/home/openclaw Environment=NODE_ENV=production [Install] WantedBy=multi-user.target Enable the monitor (but NOT the gateway โ the monitor starts it on promotion): sudo systemctl daemon-reload sudo systemctl enable openclaw-health-monitor sudo systemctl start openclaw-health-monitor # Do NOT enable openclaw.service โ the monitor controls it
This is critical. Remove or disable the standby's channel from your primary config: { "channels": { "discord": { "enabled": false } } } Each node owns its channels exclusively. No sharing, no conflicts.
# On primary โ simulate failure sudo systemctl stop openclaw-gateway # or kill the process # Watch the standby logs journalctl -u openclaw-health-monitor -f # Expected: 3 failed checks โ PROMOTE โ gateway starts โ standby channel live # On primary โ recover sudo systemctl start openclaw-gateway # Expected: standby detects primary โ DEMOTE โ gateway stops
TimeEvent0sPrimary goes down10sFirst health check fails20sSecond check fails30sThird check fails โ PROMOTE35sGit pull, secrets sync40sGateway starting45sStandby channel active~60sYou're reachable again
ScenarioResultPrimary diesStandby promotes in ~30-60sPrimary + standby dieYou're offline (add a third node?)Network partitionStandby may promote while primary is still running โ but since they use different channels, no conflictsStandby rebootsHealth monitor auto-restarts (systemd), resumes watchingPrimary flapsPromote/demote cycles โ health monitor handles it, but consider increasing FAIL_THRESHOLD
Recovery is automatic. When the primary comes back: Health monitor detects primary healthy Stops the standby gateway Primary resumes all channels Standby returns to watching No manual intervention needed.
ComponentCostVPS (2GB RAM)$6-12/moTailscaleFree (personal)Git repoFreeTotal$6-12/mo
Test monthly. Kill your primary, verify failover works. Trust but verify. Keep the standby minimal. No crons, no extra channels. It's recovery mode. Git push frequently. The standby's workspace is only as fresh as your last push. Use Tailscale. It makes cross-VPS networking trivial. No firewall rules, no port forwarding. Different bot tokens. If using Discord on both, you need two bot applications. Same bot token = last-connect-wins. Monitor the monitor. Check journalctl -u openclaw-health-monitor occasionally to make sure it's running.
Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.
Largest current source with strong distribution and engagement signals.