Skip to content

OpenClaw Setup

Last updated: 2026-04-25

OpenClaw es el AI assistant self-hosted en CT100 (clawdbot, IP 192.168.0.245; VMID migró 253→100). Recibe mensajes via Telegram (@Veraclawd_bot) y otros canales, los procesa con Claude/GPT y responde.

🌿 Actualización 2026-07-17 — v2026.7.1 + fix turn_aborted

Las tablas de abajo son de 2026-04-25. Estado real: OpenClaw 2026.7.1 sobre node 22.23.1.

Síntoma: Vera lanzaba turn_aborted "sin sentido" y no terminaba las tareas interactivas (las autónomas sí). Causa raíz: codex no tiene señal nativa de fin-de-turno, así que cuando el agente llama a una tool terminal (message → respuesta Telegram) OpenClaw interrumpe el sidecar codex para liberar el turno → lo registra como turn_aborted/reason:"interrupted". Vera estaba entrenada (en /root/clawd/MEMORY.md: "ACK primero si tarda >10s") a mandar un mensaje-ACK antes de trabajar → ese ACK terminal mataba el turno antes de empezar.

Fix aplicado:

  • messages.ackReactionScope: group-mentions → "all" — acusa con reacción emoji (no terminal) también en chats directos → el turno sobrevive. Valores válidos: all / direct / group / group-mentions / mentions.
  • Upgrade beta.5 → estable 2026.7.1. GOTCHA node: 2026.7.1 exige node ≥22.22.3 (rechazo duro); el LXC tenía 22.22.2 → subido a 22.23.1 (apt-get install --only-upgrade nodejs, repo NodeSource 22.x — patch dentro del major, no toca otras apps node del LXC). node 24 habría sido system-wide y arriesgado.
  • Reinstalado @openclaw/codex (el update lo dejó en beta.5 mientras el core iba a 2026.7.1 → reinstalar para que casen). Restart con openclaw gateway restart.
  • Snapshot previo pct snapshot 100 preupg20260715; backup openclaw.json.bak-20260715.

Verificado: gateway 127.0.0.1:9943, plugins 7/68, pre-warmed, sin MissingAgentHarnessError. Pendiente prueba E2E real por Telegram; si Vera sigue mandando mensaje-ACK y se corta, editar también /root/clawd/MEMORY.md para quitar el "ACK primero via message".

🎯 Estado actual

Versión 2026.4.23 (npm openclaw@latest)
Modelo primary openai/gpt-5.5 (OAuth ChatGPT subscription, no API key)
Fallback 1 openai/gpt-5.4
Fallback 2 openai/gpt-5.4-mini
Heartbeat model openai/gpt-5.4-mini
Subagents model openai/gpt-5.5
Bot Telegram @Veraclawd_bot (chat 730947207)
Watchdog timer DESACTIVADO (interfería con maintenance)

🔌 Endpoints

Service URL Auth
Gateway WebSocket ws://127.0.0.1:9943 password (OPENCLAW_GATEWAY_PASSWORD=<see secrets.local.md>)
Browser control http://127.0.0.1:9945 token
nginx public http://192.168.0.245:9944 (proxy a gateway)
OAP frontend http://192.168.0.245:3000
OAP API http://192.168.0.245:3001 bearer token
PostgreSQL (oap) 127.0.0.1:5432 local

🧠 Auth providers

Anthropic (Claude Code subscription)

Perfil anthropic:default dentro de openclaw.json (auth.profiles). Estado: DORMIDO — no está en la cadena activa (primary/fallbacks/heartbeat/subagents son todos openai/gpt-5.x). Queda plumbing residual sin uso (backend claude-cli + /usr/local/bin/claude-bridge). La restricción "sin suscripción Claude activa" se cumple.

OpenAI Codex (ChatGPT subscription) — ACTIVO

OAuth token (JWT) en profile openai-codex:[email protected]. Setup hecho con:

openclaw configure
# → Section: Model
# → OpenAI Codex Browser Login
# → URL → login en navegador → paste callback URL

Refresh token automático. Expira ~10 días tras último uso, se renueva con cada request. Si expira completamente, repetir el wizard.

OpenAI API key (legacy fallback)

sk-proj-lA499P***r7EA en openclaw.json env.OPENAI_API_KEY. Sin saldo (quota exceeded). El provider openai/ lo usa pero falla con 429. Recargar en platform.openai.com/settings/billing.

Telegram bot

@Veraclawd_bot token <TELEGRAM_BOT_TOKEN — see secrets.local.md> chat 730947207. Compartido con n8n forwarder y Grafana alerts.

⚠️ Hardware caveat

CT100 corre en pmx-50 (Ryzen 7 7735HS, con AVX2; nota: la variante baseline de Bun era por el antiguo host proxmox2 sin AVX2). Bun necesita variante baseline:

# Si bun se actualiza, reinstalar baseline:
curl -fsSL -o /tmp/bun.zip "https://github.com/oven-sh/bun/releases/download/v1.3.13/bun-linux-x64-baseline.zip"
unzip /tmp/bun.zip -d /tmp/
mv /tmp/bun-linux-x64-baseline/bun /root/.bun/bin/bun

Sin esto: SIGILL al primer comando de Bun. oap-api.service en crashloop.

🔄 Workflow añadir provider/modelo nuevo

openclaw configure
# Select: Model
# Provider: OpenAI / Anthropic / Custom
# Method: API key / Browser Login / Token
# Si OAuth: ábrir URL en navegador, paste callback

Tras esto el wizard reescribe /root/.openclaw/openclaw.json y el gateway hace reload automático detectando cambios. Si no recarga: systemctl --user restart openclaw-gateway (siendo root, con XDG_RUNTIME_DIR=/run/user/0).

🛠 Files clave

File Qué
/root/.openclaw/openclaw.json Config principal (providers, agents, model, env vars)
auth.profiles (dentro de openclaw.json) Tokens/OAuth por proveedor (openai:* activos, anthropic:default dormido) + estado/cooldowns
/root/.openclaw/openclaw.json.bak-* Backups automáticos del config
/root/clawd/ Workspace del agent (memoria, scripts, n8n flows JSON, etc.)
/root/clawd/scripts/openclaw-watchdog.sh Watchdog (DISABLED actualmente)

🔧 Comandos comunes

# Versión instalada
openclaw --version

# Update a latest
npm install -g openclaw@latest

# Restart gateway (como user systemd de root)
XDG_RUNTIME_DIR=/run/user/0 systemctl --user restart openclaw-gateway

# Logs gateway
journalctl --user-unit=openclaw-gateway --since "10 minutes ago"

# Estado modelo activo (en logs)
journalctl --user-unit=openclaw-gateway | grep "agent model"

# Health
curl -s http://127.0.0.1:9943/health

🚨 Watchdog (script bash)

/root/clawd/scripts/openclaw-watchdog.sh — corre cada minuto via timer (cuando habilitado). Hace: 1. curl http://127.0.0.1:9943/health con timeout 15s → si falla, restart gateway 2. Restart máx 3 veces/hora 3. Si supera el límite → send_alert "max restarts reached" (vía n8n webhook ahora, antes era curl directo a Telegram)

Patch aplicado: KillMode=control-group (antes KillMode=process) — evita procesos sleep huérfanos en logs systemd.

Patch aplicado endpoint: /health (antes /) — / requiere auth y fallaba. /health es público.

Migración: send_alert ahora postea a webhook n8n centralizado (no curl directo a Telegram API).

Reactivar watchdog:

# En CT100:
systemctl enable --now openclaw-watchdog.timer

🐛 Issues conocidos

Problema Estado Workaround
Bun SIGILL en CPU sin AVX2 ✅ resuelto Variante baseline pinned
claude-cli/ model en config sin CLI instalado ✅ resuelto Cambiar a anthropic/ direct
Claude OAuth sin créditos ⏳ pendiente recarga manual Usar openai-codex/gpt-5.5
OpenAI API key sin saldo ⏳ pendiente recarga manual OAuth Codex funciona
telegram-monitor.sh activo pero no escribe ⏸️ baja prioridad DB telegram-history.db sin writes desde 2026-04-04
sandsara-viewer.service crashloop port 8095 ✅ resuelto DISABLED (port collision con nginx)