All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 3s
Adds title, description, type, domain, and tags frontmatter to every doc for improved KB semantic search. The description field is prepended to every search chunk, and domain/type/tags enable filtered queries. Type values: context, guide, runbook, reference, troubleshooting Domain values match directory structure (networking, docker, etc.) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
592 lines
16 KiB
Markdown
592 lines
16 KiB
Markdown
---
|
|
title: "OpenClaw Troubleshooting"
|
|
description: "Troubleshooting guide for OpenClaw on LXC 224 covering gateway startup failures, Discord bot connectivity, MiniMax API errors, Homebrew/skill installation issues, performance problems, and emergency recovery procedures."
|
|
type: troubleshooting
|
|
domain: productivity
|
|
tags: [openclaw, troubleshooting, discord, minimax, docker, homebrew, skills]
|
|
---
|
|
|
|
# OpenClaw Troubleshooting Guide
|
|
|
|
## Gateway Startup Issues
|
|
|
|
### Container Won't Start
|
|
**Symptoms:** `docker compose up` fails immediately
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
docker compose logs openclaw-gateway
|
|
```
|
|
|
|
**Common Causes:**
|
|
1. **Missing environment variables:**
|
|
- Check `.env` file exists and contains required keys
|
|
- Verify `MINIMAX_API_KEY` and `DISCORD_BOT_TOKEN` are set
|
|
- Solution: Copy `.env.example` to `.env` and populate
|
|
|
|
2. **Port conflict (18789 already in use):**
|
|
- Check: `netstat -tulpn | grep 18789`
|
|
- Solution: Stop conflicting service or change port in docker-compose.yml
|
|
|
|
3. **Invalid openclaw.json syntax:**
|
|
- JSON5 allows comments and trailing commas
|
|
- Validate: `docker compose config` (checks interpolation)
|
|
- Solution: Fix syntax errors, remove invalid characters
|
|
|
|
### Container Starts but Exits Immediately
|
|
**Symptoms:** Container runs briefly then stops
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
docker compose logs --tail=50 openclaw-gateway
|
|
docker compose ps
|
|
```
|
|
|
|
**Common Causes:**
|
|
1. **Invalid MiniMax API key:**
|
|
- Error: "Authentication failed" or "Invalid API key"
|
|
- Solution: Verify key at https://platform.minimax.io/
|
|
- Check key format: Should start with `sk-`
|
|
|
|
2. **Docker socket permission denied:**
|
|
- Error: "Cannot connect to Docker daemon"
|
|
- Check: `ls -l /var/run/docker.sock`
|
|
- Solution: Already mounted in compose file; check LXC nesting enabled
|
|
|
|
3. **Configuration file not found:**
|
|
- Error: "Cannot read openclaw.json"
|
|
- Check: `ls -la /opt/openclaw/openclaw.json`
|
|
- Solution: Create file from plan template
|
|
|
|
## Discord Integration Issues
|
|
|
|
### Bot Not Connecting to Discord
|
|
**Symptoms:** Bot shows offline in Discord server
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
docker compose logs openclaw-gateway | grep -i discord
|
|
docker compose exec openclaw-gateway openclaw channels status --probe
|
|
```
|
|
|
|
**Common Causes:**
|
|
1. **Invalid bot token:**
|
|
- Error: "Incorrect login credentials"
|
|
- Solution: Regenerate token in Discord Developer Portal
|
|
- Update `.env` file and restart: `docker compose restart`
|
|
|
|
2. **Missing Message Content Intent:**
|
|
- Error: "Used disallowed intents"
|
|
- Solution:
|
|
1. Go to Discord Developer Portal
|
|
2. Bot → Privileged Gateway Intents
|
|
3. Enable "Message Content Intent"
|
|
4. Restart OpenClaw gateway
|
|
|
|
3. **Bot not invited to server:**
|
|
- No error, just offline status
|
|
- Solution: Generate invite URL from OAuth2 → URL Generator
|
|
- Use scopes: `bot` + `applications.commands`
|
|
- Invite with required permissions
|
|
|
|
### Bot Online but Not Responding to DMs
|
|
**Symptoms:** Bot shows online but doesn't reply to messages
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check channel configuration
|
|
docker compose exec openclaw-gateway openclaw channels status discord
|
|
|
|
# Check recent logs
|
|
docker compose logs --tail=100 openclaw-gateway | grep -E "(DM|discord)"
|
|
```
|
|
|
|
**Common Causes:**
|
|
1. **Pairing required but not approved:**
|
|
- Bot sends pairing code on first message
|
|
- Code expires after 1 hour
|
|
- Solution: Approve pairing:
|
|
```bash
|
|
docker compose exec openclaw-gateway openclaw pairing list discord
|
|
docker compose exec openclaw-gateway openclaw pairing approve discord <code>
|
|
```
|
|
|
|
2. **Policy set to disabled:**
|
|
- Check `openclaw.json` → `channels.discord.dm.policy`
|
|
- Should be `"pairing"` or `"open"`
|
|
- Solution: Change policy and restart
|
|
|
|
3. **Message Content Intent disabled (again):**
|
|
- Bot can't read message text
|
|
- Solution: See "Missing Message Content Intent" above
|
|
|
|
### Pairing Code Not Working
|
|
**Symptoms:** User receives pairing code but approval command fails
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# List all pending pairing requests
|
|
docker compose exec openclaw-gateway openclaw pairing list discord
|
|
|
|
# Check logs for pairing errors
|
|
docker compose logs openclaw-gateway | grep -i pairing
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **Code expired (>1 hour old):**
|
|
- Regenerate: Send new DM to bot
|
|
- Approve new code within 1 hour
|
|
|
|
2. **Wrong pairing code format:**
|
|
- Code format: Usually 6-digit alphanumeric
|
|
- Case-sensitive: Use exact code from Discord message
|
|
|
|
3. **Multiple pending codes:**
|
|
- List all codes: `openclaw pairing list discord`
|
|
- Approve latest code (most recent timestamp)
|
|
|
|
## MiniMax API Issues
|
|
|
|
### API Authentication Errors
|
|
**Symptoms:** "Authentication failed" or "Invalid API key" in logs
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check API key is set
|
|
docker compose exec openclaw-gateway env | grep MINIMAX
|
|
|
|
# Test API key directly
|
|
curl -X POST https://api.minimax.io/anthropic/v1/messages \
|
|
-H "Authorization: Bearer $MINIMAX_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"model":"MiniMax-M2.1","max_tokens":10,"messages":[{"role":"user","content":"test"}]}'
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **Key not set or incorrect:**
|
|
- Verify `.env` file contains: `MINIMAX_API_KEY=sk-...`
|
|
- Restart after changes: `docker compose restart`
|
|
|
|
2. **Key revoked or expired:**
|
|
- Log in to https://platform.minimax.io/
|
|
- Check API key status
|
|
- Generate new key if needed
|
|
|
|
3. **Interpolation not working:**
|
|
- Check `openclaw.json` uses: `"apiKey": "${MINIMAX_API_KEY}"`
|
|
- Verify `.env` file is in same directory as docker-compose.yml
|
|
|
|
### Rate Limiting or Quota Errors
|
|
**Symptoms:** "Rate limit exceeded" or "Insufficient quota"
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check recent API errors
|
|
docker compose logs openclaw-gateway | grep -i "rate\|quota"
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **Rate limit (temporary):**
|
|
- Wait 60 seconds and retry
|
|
- Reduce message frequency
|
|
- Consider upgrading MiniMax plan
|
|
|
|
2. **Quota exceeded (billing):**
|
|
- Check account balance at https://platform.minimax.io/
|
|
- Add credits or upgrade plan
|
|
- Set usage alerts to prevent future issues
|
|
|
|
3. **Context window exceeded:**
|
|
- Error: "Context length too long"
|
|
- Reduce `historyLimit` in openclaw.json (default 20)
|
|
- Current limit: 200,000 tokens (very high, unlikely to hit)
|
|
|
|
## Performance Issues
|
|
|
|
### High Memory Usage
|
|
**Symptoms:** Container using >2GB RAM, system sluggish
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check container stats
|
|
docker stats openclaw
|
|
|
|
# Check for stuck browser processes
|
|
docker compose exec openclaw-gateway ps aux | grep -E "(chrome|firefox|playwright)"
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **Browser automation processes not cleaned up:**
|
|
- Restart gateway: `docker compose restart`
|
|
- Consider disabling browser skills if not needed
|
|
|
|
2. **Large workspace files:**
|
|
- Check workspace size: `du -sh /opt/openclaw/workspace`
|
|
- Clean old files: Review and remove unnecessary workspace data
|
|
|
|
3. **Memory leak (rare):**
|
|
- Update to latest version: `docker compose pull && docker compose up -d`
|
|
- Report issue to OpenClaw GitHub
|
|
|
|
### Slow Response Times
|
|
**Symptoms:** Bot takes >30 seconds to respond
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check API latency
|
|
docker compose logs openclaw-gateway | grep -i "duration\|latency"
|
|
|
|
# Check network connectivity
|
|
docker compose exec openclaw-gateway ping -c 3 api.minimax.io
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **MiniMax API slow:**
|
|
- Switch to lightning model: `minimax/MiniMax-M2.1-lightning`
|
|
- Edit `openclaw.json` → `agents.defaults.model.primary`
|
|
- Restart gateway
|
|
|
|
2. **Large context window:**
|
|
- Reduce `historyLimit` in openclaw.json (e.g., 10 instead of 20)
|
|
- Shorter history = faster responses
|
|
|
|
3. **Network latency:**
|
|
- Check internet connection on LXC: `ping -c 5 8.8.8.8`
|
|
- Verify DNS resolution: `nslookup api.minimax.io`
|
|
|
|
### High CPU Usage
|
|
**Symptoms:** Constant high CPU (>50%) even when idle
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check process CPU usage
|
|
docker compose exec openclaw-gateway top -b -n 1
|
|
|
|
# Check for infinite loops in logs
|
|
docker compose logs --tail=200 openclaw-gateway
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **Stuck skill execution:**
|
|
- Identify stuck process in logs
|
|
- Restart gateway: `docker compose restart`
|
|
|
|
2. **Discord WebSocket reconnect loop:**
|
|
- Error: "WebSocket closed, reconnecting..."
|
|
- Check Discord API status: https://discordstatus.com/
|
|
- Verify bot token is valid
|
|
|
|
3. **Log spam:**
|
|
- Reduce log level: Add `LOG_LEVEL=warn` to .env
|
|
- Restart gateway
|
|
|
|
## Configuration Issues
|
|
|
|
### Changes Not Taking Effect
|
|
**Symptoms:** Modified openclaw.json but behavior unchanged
|
|
|
|
**Solution:**
|
|
```bash
|
|
# Restart gateway to reload configuration
|
|
docker compose restart openclaw-gateway
|
|
|
|
# Verify configuration loaded
|
|
docker compose logs openclaw-gateway | grep "Configuration loaded"
|
|
|
|
# Check for configuration errors
|
|
docker compose logs openclaw-gateway | grep -i "config\|error"
|
|
```
|
|
|
|
### Environment Variables Not Interpolating
|
|
**Symptoms:** Literal `${VAR_NAME}` in logs instead of values
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check environment variables are set in container
|
|
docker compose exec openclaw-gateway env | grep -E "(MINIMAX|DISCORD)"
|
|
```
|
|
|
|
**Solutions:**
|
|
1. **Docker Compose not loading .env:**
|
|
- Verify `.env` file is in same directory as docker-compose.yml
|
|
- Check file permissions: `ls -la .env` (should be readable)
|
|
|
|
2. **Variable name mismatch:**
|
|
- Ensure `.env` uses exact name from openclaw.json
|
|
- Case-sensitive: `MINIMAX_API_KEY` not `minimax_api_key`
|
|
|
|
3. **Quoting issues:**
|
|
- Don't quote values in .env: `KEY=value` not `KEY="value"`
|
|
- OpenClaw handles interpolation, Docker doesn't need quotes
|
|
|
|
## Skill and Package Management Issues
|
|
|
|
### Skill Installation Fails - Missing Binary Dependencies
|
|
**Symptoms:** Skill reports "command not found" or "binary not available on PATH"
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check if binary is installed
|
|
which <binary-name>
|
|
|
|
# List Homebrew packages
|
|
ssh root@10.10.0.224 "brew-as-openclaw list"
|
|
```
|
|
|
|
**Solutions:**
|
|
|
|
1. **Install via Homebrew (recommended for skills):**
|
|
```bash
|
|
# From root shell
|
|
ssh root@10.10.0.224
|
|
brew-as-openclaw install <package>
|
|
|
|
# Or as openclaw user
|
|
ssh openclaw@10.10.0.224
|
|
brew install <package>
|
|
```
|
|
|
|
2. **Install via apt (for system tools):**
|
|
```bash
|
|
ssh root@10.10.0.224
|
|
apt-get update
|
|
apt-get install <package>
|
|
```
|
|
|
|
**Common Skill Dependencies:**
|
|
- `jq` - JSON processing → `brew-as-openclaw install jq`
|
|
- `ffmpeg` - Media processing → `brew-as-openclaw install ffmpeg`
|
|
- `imagemagick` - Image manipulation → `brew-as-openclaw install imagemagick`
|
|
- `git` - Already installed via apt
|
|
- `curl` - Already installed via apt
|
|
|
|
### Homebrew Command Not Found
|
|
**Symptoms:** `brew: command not found` when running as openclaw user
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check if Homebrew is installed
|
|
ssh root@10.10.0.224 "ls -la /home/linuxbrew/.linuxbrew/bin/brew"
|
|
|
|
# Check PATH configuration
|
|
ssh openclaw@10.10.0.224 "cat ~/.bashrc | grep brew"
|
|
```
|
|
|
|
**Solutions:**
|
|
|
|
1. **Use helper script from root:**
|
|
```bash
|
|
ssh root@10.10.0.224 "brew-as-openclaw --version"
|
|
```
|
|
|
|
2. **Fix PATH for openclaw user:**
|
|
```bash
|
|
ssh openclaw@10.10.0.224
|
|
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"' >> ~/.bashrc
|
|
source ~/.bashrc
|
|
brew --version
|
|
```
|
|
|
|
3. **Manual shellenv in commands:**
|
|
```bash
|
|
ssh openclaw@10.10.0.224 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)" && brew list'
|
|
```
|
|
|
|
### ClawHub CLI Not Found
|
|
**Symptoms:** `clawhub: command not found` when trying to install skills
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check if ClawHub CLI is installed
|
|
ssh openclaw@10.10.0.224 "which clawhub"
|
|
|
|
# Check npm global packages
|
|
ssh openclaw@10.10.0.224 "npm list -g --depth=0"
|
|
```
|
|
|
|
**Solutions:**
|
|
|
|
1. **Install ClawHub CLI:**
|
|
```bash
|
|
ssh openclaw@10.10.0.224
|
|
npm install -g clawhub
|
|
|
|
# Or install locally in OpenClaw workspace
|
|
cd /opt/openclaw/workspace
|
|
npm install clawhub
|
|
npx clawhub --version
|
|
```
|
|
|
|
2. **Use alternative skill installation:**
|
|
```bash
|
|
# Manual skill installation
|
|
cd /opt/openclaw/workspace
|
|
mkdir -p skills/<skill-name>
|
|
nano skills/<skill-name>/SKILL.md
|
|
```
|
|
|
|
### Skill Permission Errors
|
|
**Symptoms:** "Permission denied" when installing or running skills
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check workspace ownership
|
|
ssh root@10.10.0.224 "ls -la /opt/openclaw/workspace"
|
|
|
|
# Check skill directory permissions
|
|
ssh root@10.10.0.224 "ls -la /opt/openclaw/workspace/skills"
|
|
```
|
|
|
|
**Solutions:**
|
|
|
|
1. **Fix ownership (workspace should be accessible to Docker node user, UID 1000):**
|
|
```bash
|
|
ssh root@10.10.0.224
|
|
chown -R 1000:1000 /opt/openclaw/workspace
|
|
```
|
|
|
|
2. **Install skills as openclaw user (UID 1000):**
|
|
```bash
|
|
ssh openclaw@10.10.0.224
|
|
cd /opt/openclaw/workspace
|
|
clawhub install <skill>
|
|
```
|
|
|
|
### Homebrew Installation Issues
|
|
**Symptoms:** Homebrew won't install or shows permission errors
|
|
|
|
**Diagnosis:**
|
|
```bash
|
|
# Check Homebrew directory ownership
|
|
ssh root@10.10.0.224 "ls -la /home/linuxbrew/.linuxbrew"
|
|
|
|
# Check openclaw user exists
|
|
ssh root@10.10.0.224 "id openclaw"
|
|
```
|
|
|
|
**Solutions:**
|
|
|
|
1. **Fix directory ownership:**
|
|
```bash
|
|
ssh root@10.10.0.224
|
|
chown -R openclaw:openclaw /home/linuxbrew
|
|
```
|
|
|
|
2. **Reinstall Homebrew:**
|
|
```bash
|
|
ssh root@10.10.0.224
|
|
rm -rf /home/linuxbrew/.linuxbrew
|
|
su - openclaw -c 'NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"'
|
|
```
|
|
|
|
3. **Install system dependencies:**
|
|
```bash
|
|
ssh root@10.10.0.224
|
|
apt-get update
|
|
apt-get install -y build-essential procps curl file git
|
|
```
|
|
|
|
## Emergency Recovery
|
|
|
|
### Complete Service Reset
|
|
If all else fails, nuclear option:
|
|
|
|
```bash
|
|
# Stop and remove all containers
|
|
docker compose down -v
|
|
|
|
# Clear workspace (CAUTION: deletes all agent memory/files)
|
|
rm -rf workspace/*
|
|
rm -rf logs/*
|
|
|
|
# Reset configuration to defaults
|
|
cp openclaw.json openclaw.json.backup
|
|
# Re-create openclaw.json from plan template
|
|
|
|
# Recreate from scratch
|
|
docker compose up -d
|
|
|
|
# Watch logs for errors
|
|
docker compose logs -f
|
|
```
|
|
|
|
### LXC Container Issues
|
|
If Docker itself is broken:
|
|
|
|
```bash
|
|
# From Proxmox host
|
|
ssh root@10.10.0.11
|
|
|
|
# Restart LXC
|
|
pct restart 224
|
|
|
|
# If restart fails, stop and start
|
|
pct stop 224
|
|
pct start 224
|
|
|
|
# Check LXC status
|
|
pct status 224
|
|
|
|
# Access LXC console directly
|
|
pct enter 224
|
|
```
|
|
|
|
### Rollback to Previous Version
|
|
If update caused issues:
|
|
|
|
```bash
|
|
# Pin to specific working version
|
|
# Edit docker-compose.yml, change:
|
|
# image: openclaw/gateway:latest
|
|
# To:
|
|
# image: openclaw/gateway:2026.1.24-1
|
|
|
|
# Recreate container
|
|
docker compose down
|
|
docker compose up -d
|
|
```
|
|
|
|
## Diagnostic Commands Reference
|
|
|
|
```bash
|
|
# Full system health check
|
|
docker compose exec openclaw-gateway openclaw doctor
|
|
|
|
# Channel status (Discord, etc.)
|
|
docker compose exec openclaw-gateway openclaw channels status --probe
|
|
|
|
# Model configuration
|
|
docker compose exec openclaw-gateway openclaw models list
|
|
docker compose exec openclaw-gateway openclaw models get minimax/MiniMax-M2.1
|
|
|
|
# Pairing management
|
|
docker compose exec openclaw-gateway openclaw pairing list discord
|
|
docker compose exec openclaw-gateway openclaw pairing approve discord <code>
|
|
docker compose exec openclaw-gateway openclaw pairing revoke discord <user_id>
|
|
|
|
# Container health
|
|
docker compose ps
|
|
docker compose logs --tail=50 openclaw-gateway
|
|
docker stats openclaw
|
|
|
|
# Network connectivity
|
|
docker compose exec openclaw-gateway ping -c 3 api.minimax.io
|
|
docker compose exec openclaw-gateway curl -I https://discord.com/api/v10/gateway
|
|
|
|
# File system check
|
|
docker compose exec openclaw-gateway df -h
|
|
docker compose exec openclaw-gateway du -sh /workspace/*
|
|
```
|
|
|
|
## Getting Help
|
|
|
|
**Official Resources:**
|
|
- Documentation: https://docs.openclaw.ai/
|
|
- GitHub Issues: https://github.com/openclaw/openclaw/issues
|
|
- Community Discord: [Check OpenClaw website for invite]
|
|
|
|
**Homelab-Specific:**
|
|
- Check MemoryGraph: `python ~/.claude/skills/memorygraph/client.py recall "openclaw"`
|
|
- Review CONTEXT.md: `/mnt/NV2/Development/claude-home/productivity/openclaw/CONTEXT.md`
|
|
- Infrastructure inventory: `/mnt/NV2/Development/claude-home/server-configs/hosts.yml`
|