Skip to content

OpenClaw Setup

Last updated: 2026-08-01 (IP + estado de modelos verificados en vivo contra el LXC)

OpenClaw es el AI assistant self-hosted en CT100 (clawdbot, IP 192.168.0.203; VMID migró 253→100). IP histórica: .245 hasta la renumeración "Oleada 2" del 2026-07-31 (antes de eso, .253). 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

Reverificado en vivo 2026-08-01 (pct exec 100 -- openclaw --version + lectura directa de openclaw.json): la tabla de abajo estaba doblemente desactualizada — ni la versión ni la cadena de modelos coincidían con lo que corre de verdad. La sección "🌿 Actualización 2026-07-17" ya había anotado el salto de versión pero nadie volvió a tocar esta tabla; el cambio de modelo primario a Anthropic (ver [memoria vera_anthropic_authprofile_20260725]) tampoco se había reflejado nunca aquí.

Versión 2026.7.1 (confirmado openclaw --version2026.7.1 (2d2ddc4))
Modelo primary anthropic/claude-sonnet-5 (backend claude-cli, perfil anthropic:claude-cli OAuth — ya NO está "dormido", ver Auth providers)
Fallbacks (orden real) anthropic/claude-opus-5anthropic/claude-sonnet-4-6anthropic/claude-opus-4-8openai/gpt-5.5
Heartbeat / Subagents model No hay claves heartbeat/subagents separadas en openclaw.json en esta versión — TODO: no verificado si heredan la cadena defaults.model o si viven en otro sitio; no asumir que siguen siendo gpt-5.4-mini/gpt-5.5 como decía la tabla vieja
Bot Telegram @Veraclawd_bot (chat 730947207) — no reverificado el chat ID en esta pasada
Watchdog timer openclaw-watchdog.timer está enabled pero inactive ahora mismo (systemctl is-active → inactive) — consistente con "desactivado en la práctica", aunque el estado enabled sin estar corriendo no se investigó a fondo

🔌 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 — TODO: puerto no encontrado escuchando en la verificación 2026-08-01 (ss -tlnp no listaba 9945); puede ser bajo demanda, no confirmado
nginx public http://192.168.0.203:9944 (proxy a gateway)
OAP frontend http://192.168.0.203:3000
OAP API http://192.168.0.203:3001 bearer token
PostgreSQL (oap) 127.0.0.1:5432 local

🧠 Auth providers

Anthropic (Claude Code subscription) — ACTIVO (perfil anthropic:claude-cli)

Cambio de estado 2026-08-01: esta sección decía "DORMIDO" — quedó desmentida por la memoria [vera_anthropic_authprofile_20260725] y confirmada en vivo hoy leyendo openclaw.json. El perfil anthropic:claude-cli (OAuth) es real, y defaults.model.primary es anthropic/claude-sonnet-5 con agentRuntime.id: claude-cli — es decir, es el modelo primario activo, no plumbing residual. Backend claude-cli/usr/local/bin/claude-bridge, en uso real. Perfiles vistos en auth.profiles: anthropic:default (token), anthropic:claude-cli (oauth, el que usa el primary). La restricción "sin suscripción Claude activa" que motivó dejarlo dormido en su día ya no aplica — no se investigó en esta pasada el porqué del cambio de política, solo se confirmó el estado técnico actual.

OpenAI Codex (ChatGPT subscription) — ahora FALLBACK (no primario)

openai/gpt-5.5 sigue configurado, pero como último fallback de la cadena (claude-sonnet-5 → claude-opus-5 → claude-sonnet-4-6 → claude-opus-4-8 → gpt-5.5), no como modelo primario. El resto de esta sección (setup del OAuth, refresh) sigue siendo válido tal cual.

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)