Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Use when diagnosing, repairing, or maintaining an OpenClaw Gateway on the same machine. Designed for rescue agents to fix a down gateway or check operational...
Use when diagnosing, repairing, or maintaining an OpenClaw Gateway on the same machine. Designed for rescue agents to fix a down gateway or check operational...
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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
This skill serves two core scenarios and nothing else: Rescue โ The main OpenClaw Gateway is down or broken. You (the rescue agent) need to diagnose the root cause, fix it, and bring the gateway back online. Health Check โ The main OpenClaw Gateway is running. You need to verify its operational health, clean up resources, or perform maintenance tasks like upgrades. What this skill is NOT for: Day-to-day business configuration (adding channels, configuring agents, setting up integrations) Application-level issues (agent behavior, prompt tuning, skill management) Initial deployment or first-time setup (use openclaw daemon install and openclaw configure) Principle: Diagnose โ Judge โ Act โ Verify. Never skip steps.
Detect the platform first โ commands differ between Linux (systemd) and macOS (launchd): OS=$(uname -s) # "Linux" or "Darwin" echo "Platform: $OS"
Do NOT assume port 18789. Detect the actual configured port first: PORT=$(openclaw config get gateway.port 2>/dev/null | grep -oE '[0-9]+') PORT=${PORT:-18789} # fallback to default only if config unavailable echo "Gateway port: $PORT" Use $PORT in all port-related commands throughout this guide.
Follow these sections in order when the main gateway is not running.
# Is the service running at all? # Linux: systemctl --user status openclaw-gateway # macOS: launchctl list | grep openclaw # Is the process alive? pgrep -af openclaw # Is the port listening? # Linux: ss -tlnp | grep $PORT # macOS: lsof -iTCP:$PORT -sTCP:LISTEN
Linux: journalctl --user -u openclaw-gateway --since "1 hour ago" --no-pager | grep -iE "error|crash|fatal|SIGTERM|OOM" # Last 50 lines for context journalctl --user -u openclaw-gateway -n 50 --no-pager macOS: LOG_DIR="$HOME/.openclaw/logs" grep -iE "error|crash|fatal" "$LOG_DIR/gateway.log" | tail -20 tail -50 "$LOG_DIR/gateway.log" # Also check unified log log show --predicate 'process == "node"' --last 1h | grep -iE "error|crash|fatal"
Log patternMeaningFixEADDRINUSEPort already in useFind conflicting process: ss -tlnp | grep $PORT (Linux) or lsof -iTCP:$PORT (macOS), kill it or change portENOMEM / JavaScript heapOut of memoryCheck free -h (Linux) / vm_stat (macOS), kill memory hogs or increase Node heapSyntaxError in configBad JSON in openclaw.jsonSee A3 Config RepairMODULE_NOT_FOUNDMissing dependencycd $(npm root -g)/openclaw && npm install --productionInvalid token / 401 / 403Auth failureCheck tokens in env file or systemd drop-inECONNREFUSEDUpstream unreachableCheck network, Tailscale, API endpoints
Always backup first: cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak.$(date +%s) JSON syntax validation: python3 -c "import json; json.load(open('$HOME/.openclaw/openclaw.json'))" Common JSON issues: trailing comma, missing quotes, unescaped characters. The error message shows line/position. Config schema validation: openclaw config get gateway # check gateway config section openclaw config get channels # check channels config section Common config errors: SymptomLikely causeFix"device identity mismatch"Service env token โ config tokenSync tokens between env file and openclaw.jsonAgent not routingbindings misconfiguredBindings go at top-level, not inside agents.list[].routing After fixing, validate: python3 -c "import json; json.load(open('$HOME/.openclaw/openclaw.json')); print('JSON OK')" openclaw status
# Disk space df -h ~ # Memory (Linux) free -h # Memory (macOS) vm_stat | head -5 # Node.js available? node -v which openclaw openclaw --version
Only restart after identifying and fixing the root cause. Linux: systemctl --user restart openclaw-gateway sleep 3 systemctl --user status openclaw-gateway journalctl --user -u openclaw-gateway -n 20 --no-pager macOS: launchctl kickstart -k "gui/$(id -u)/com.openclaw.gateway" sleep 3 launchctl list | grep openclaw tail -20 ~/.openclaw/logs/gateway.log If service won't start at all: # Manual foreground start for better error output openclaw gateway start Final verification: openclaw status openclaw doctor --non-interactive
Follow these sections for routine operational checks on a running gateway.
# Comprehensive check โ start here openclaw doctor # If issues found, auto-fix safe ones openclaw doctor --fix
# Check versions CURRENT=$(openclaw --version) LATEST=$(npm view openclaw version) echo "Current: $CURRENT Latest: $LATEST" Perform update: # 1. Save doctor baseline openclaw doctor --non-interactive 2>&1 | tee /tmp/doctor-before.txt # 2. Backup config cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.pre-upgrade.$(date +%s) # 3. Update npm update -g openclaw openclaw --version # 4. Restart # Linux: systemctl --user restart openclaw-gateway # macOS: launchctl kickstart -k "gui/$(id -u)/com.openclaw.gateway" # 5. Compare doctor output sleep 5 openclaw doctor --non-interactive 2>&1 | tee /tmp/doctor-after.txt diff /tmp/doctor-before.txt /tmp/doctor-after.txt Rollback: npm install -g openclaw@<previous_version> cp ~/.openclaw/openclaw.json.pre-upgrade.<timestamp> ~/.openclaw/openclaw.json # Restart (platform-appropriate command above)
# Check disk usage per agent for agent_dir in ~/.openclaw/agents/*/; do agent=$(basename "$agent_dir") size=$(du -sh "$agent_dir/sessions/" 2>/dev/null | cut -f1) count=$(find "$agent_dir/sessions/" -name "*.jsonl" 2>/dev/null | wc -l) echo "$agent: $size ($count transcripts)" done # Auto-fix orphans openclaw doctor --fix # Manual cleanup: old transcripts (>30 days) find ~/.openclaw/agents/*/sessions/ -name "*.jsonl" -mtime +30 -exec ls -lh {} \; # Review, then delete if safe: find ~/.openclaw/agents/*/sessions/ -name "*.jsonl" -mtime +30 -delete
BACKUP_DIR=~/openclaw-backup-$(date +%Y%m%d-%H%M%S) mkdir -p "$BACKUP_DIR" # Core files cp ~/.openclaw/openclaw.json "$BACKUP_DIR/" [ -f ~/.openclaw/env ] && cp ~/.openclaw/env "$BACKUP_DIR/" || echo "No env file (tokens may be in systemd drop-in or plist)" cp -r ~/.openclaw/agents "$BACKUP_DIR/" cp -r ~/.openclaw/devices "$BACKUP_DIR/" cp -r ~/.openclaw/workspace "$BACKUP_DIR/" # Service config if [ "$(uname -s)" = "Linux" ]; then cp ~/.config/systemd/user/openclaw-gateway.service "$BACKUP_DIR/" 2>/dev/null cp -r ~/.config/systemd/user/openclaw-gateway.service.d "$BACKUP_DIR/" 2>/dev/null elif [ "$(uname -s)" = "Darwin" ]; then cp ~/Library/LaunchAgents/com.openclaw.gateway.plist "$BACKUP_DIR/" 2>/dev/null fi echo "Backup saved to $BACKUP_DIR"
If OpenClaw uses Tailscale Serve as reverse proxy: tailscale status tailscale serve status curl -s -o /dev/null -w "%{http_code}" http://localhost:$PORT/healthz || echo "Gateway not reachable on localhost" Reconfigure if broken: tailscale serve reset tailscale serve https / http://localhost:$PORT tailscale serve status
SymptomPathGateway won't startA1 โ A2 โ A3 โ A5Gateway crashedA2 (logs) โ A4 (resources) โ A3 (config) โ A5 (restart)Config broken after editA3 โ A5Disk filling upB3After upgrade something brokeB2 (rollback)Tailscale not proxyingB5
FlagEffect(none)Interactive health check--fixApply safe repairs (orphan cleanup, stale locks)--forceAggressive repairs (may overwrite custom service config)--deepScan system for extra gateway installs--non-interactiveNo prompts, safe migrations only --fix repairs: orphan transcripts, stale session locks, legacy key migration. --fix does NOT: modify openclaw.json, change service files (unless --force), delete workspace files.
CommandPurposeopenclaw statusQuick status: running, version, basic infoopenclaw doctorDeep health check: state, channels, plugins, skillsopenclaw doctor --fixHealth check + auto-repair safe issuesopenclaw gateway startStart gateway in foreground (for debugging)openclaw daemon installInstall as persistent service (systemd/launchd)openclaw daemon restartRestart the serviceopenclaw config get <path>Read config valueopenclaw config set <path> <value>Write config value
Always check logs before changing anything โ understand the problem first Always backup before editing config โ cp with timestamp suffix Always validate JSON after editing โ one bad comma kills the service Never print secrets โ check env file exists, don't cat it Never delete workspace files โ use trash if you must remove something Always verify after restart โ status + logs, don't assume it worked Destructive operations require confirmation โ ask the user before wiping data
~/.openclaw/ โโโ openclaw.json # Main config โโโ openclaw.json.bak # Auto-backup โโโ env # Environment variables (secrets) โโโ logs/ # macOS: launchd log output โโโ agents/ # Per-agent configs โ โโโ <agent>/agent/ โ โโโ auth-profiles.json โ โโโ models.json โโโ devices/ โ โโโ paired.json โโโ workspace/ # Agent workspace โโโ sessions/ # Session logs # Linux: ~/.config/systemd/user/ โโโ openclaw-gateway.service โโโ openclaw-gateway.service.d/ โโโ env.conf # macOS: ~/Library/LaunchAgents/ โโโ com.openclaw.gateway.plist
Messaging, meetings, inboxes, CRM, and teammate communication surfaces.
Largest current source with strong distribution and engagement signals.