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 conopenclaw gateway restart. - Snapshot previo
pct snapshot 100 preupg20260715; backupopenclaw.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 deopenclaw.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 [memoriavera_anthropic_authprofile_20260725]) tampoco se había reflejado nunca aquí.
| Versión | 2026.7.1 (confirmado openclaw --version → 2026.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-5 → anthropic/claude-sonnet-4-6 → anthropic/claude-opus-4-8 → openai/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 leyendoopenclaw.json. El perfilanthropic:claude-cli(OAuth) es real, ydefaults.model.primaryesanthropic/claude-sonnet-5conagentRuntime.id: claude-cli— es decir, es el modelo primario activo, no plumbing residual. Backendclaude-cli→/usr/local/bin/claude-bridge, en uso real. Perfiles vistos enauth.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.5sigue 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.serviceen 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(antesKillMode=process) — evita procesossleephuérfanos en logs systemd.Patch aplicado endpoint:
/health(antes/) —/requiere auth y fallaba./healthes público.Migración:
send_alertahora postea a webhook n8n centralizado (no curl directo a Telegram API).
Reactivar watchdog:
🐛 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) |