Ir al contenido

Configuración del asistente personal

OpenClaw es una puerta de enlace autoalojada que conecta Discord, Google Chat, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo y más con agentes de IA. Esta guía cubre la configuración de “asistente personal”: un número de WhatsApp dedicado que se comporta como tu asistente de IA siempre activo.

Estás poniendo a un agente en posición de:

  • ejecutar comandos en tu máquina (dependiendo de tu política de herramientas)
  • leer/escribir archivos en tu espacio de trabajo
  • enviar mensajes de vuelta a través de WhatsApp/Telegram/Discord/Mattermost y otros canales incluidos

Empieza con precaución:

  • Establezca siempre channels.whatsapp.allowFrom (nunca ejuste abierto al mundo en su Mac personal).
  • Utiliza un número de WhatsApp dedicado para el asistente.
  • Los latidos ahora se predeterminan a cada 30 minutos. Desactívelos hasta que confíe en la configuración estableciendo agents.defaults.heartbeat.every: "0m".
  • OpenClaw instalado y configurado - consulta Cómo empezar si aún no lo has hecho
  • Un segundo número de teléfono (SIM/eSIM/prepago) para el asistente

La configuración de dos teléfonos (recomendada)

Sección titulada «La configuración de dos teléfonos (recomendada)»

Quieres esto:

flowchart TB
A["<b>Your Phone (personal)<br></b><br>Your WhatsApp<br>+1-555-YOU"] -- message --> B["<b>Second Phone (assistant)<br></b><br>Assistant WA<br>+1-555-ASSIST"]
B -- linked via QR --> C["<b>Your Mac (openclaw)<br></b><br>AI agent"]

Si vinculas tu WhatsApp personal a OpenClaw, cada mensaje que recibas se convierte en “entrada del agente”. Eso casi nunca es lo que quieres.

  1. Emparejar WhatsApp Web (muestra un código QR; escanea con el teléfono del asistente):
Ventana de terminal
openclaw channels login
  1. Iniciar la puerta de enlace (déjala en ejecución):
Ventana de terminal
openclaw gateway --port 18789
  1. Coloque una configuración mínima en ~/.openclaw/openclaw.json:
{
gateway: { mode: "local" },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}

Ahora envía un mensaje al número del asistente desde tu teléfono autorizado.

Cuando finalice la integración, OpenClaw abre automáticamente el panel e imprime un enlace limpio (sin tokenizar). Si el panel solicita autenticación, pegue el secreto compartido configurado en la configuración de la interfaz de usuario de Control. La integración utiliza un token de forma predeterminada (gateway.auth.token), pero la autenticación por contraseña también funciona si cambió gateway.auth.mode a password. Para volver a abrir más tarde: openclaw dashboard.

Dar al agente un espacio de trabajo (AGENTS)

Sección titulada «Dar al agente un espacio de trabajo (AGENTS)»

OpenClaw lee las instrucciones de operación y la “memoria” de su directorio de espacio de trabajo.

De forma predeterminada, OpenClaw usa ~/.openclaw/workspace como espacio de trabajo del agente y lo creará (junto con el AGENTS.md inicial, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md) automáticamente en la configuración/primera ejecución del agente. BOOTSTRAP.md solo se crea cuando el espacio de trabajo es totalmente nuevo (no debería volver después de eliminarlo). MEMORY.md es opcional (no se crea automáticamente); cuando está presente, se carga para sesiones normales. Las sesiones de subagente solo inyectan AGENTS.md y TOOLS.md.

Ventana de terminal
openclaw setup

Guía completa del diseño del espacio de trabajo y copias de seguridad: Espacio de trabajo del agente Flujo de trabajo de memoria: Memoria

Opcional: elija un espacio de trabajo diferente con agents.defaults.workspace (soporta ~).

{
agents: {
defaults: {
workspace: "~/.openclaw/workspace",
},
},
}

Si ya envía sus propios archivos de espacio de trabajo desde un repositorio, puede deshabilitar por completo la creación de archivos de arranque:

{
agents: {
defaults: {
skipBootstrap: true,
},
},
}

La configuración que lo convierte en “un asistente”

Sección titulada «La configuración que lo convierte en “un asistente”»

OpenClaw tiene una configuración de asistente predeterminada bastante buena, pero generalmente querrás ajustar:

  • persona/instrucciones en SOUL.md
  • valores predeterminados de pensamiento (si se desea)
  • latidos (heartbeats) (una vez que confíes en él)

Ejemplo:

{
logging: { level: "info" },
agents: {
defaults: {
model: { primary: "anthropic/claude-opus-4-6" },
workspace: "~/.openclaw/workspace",
thinkingDefault: "high",
timeoutSeconds: 1800,
// Start with 0; enable later.
heartbeat: { every: "0m" },
},
list: [
{
id: "main",
default: true,
groupChat: {
mentionPatterns: ["@openclaw", "openclaw"],
},
},
],
},
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: {
"*": { requireMention: true },
},
},
},
session: {
scope: "per-sender",
resetTriggers: ["/new", "/reset"],
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 10080,
},
},
}
  • Archivos de sesión: ~/.openclaw/agents/<agentId>/sessions/{{SessionId}}.jsonl
  • Metadatos de la sesión (uso de tokens, última ruta, etc.): ~/.openclaw/agents/<agentId>/sessions/sessions.json (legado: ~/.openclaw/sessions/sessions.json)
  • /new o /reset inicia una sesión nueva para ese chat (configurable mediante resetTriggers). Si se envía solo, OpenClaw confirma el restablecimiento sin invocar el modelo.
  • /compact [instructions] compacta el contexto de la sesión e informa el presupuesto de contexto restante.

Por defecto, OpenClaw ejecuta un latido cada 30 minutos con el prompt: Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. Establezca agents.defaults.heartbeat.every: "0m" para desactivar.

  • Si HEARTBEAT.md existe pero está efectivamente vacío (solo líneas en blanco y encabezados de markdown como # Heading), OpenClaw omite la ejecución del latido para ahorrar llamadas a la API.
  • Si falta el archivo, el latido aún se ejecuta y el modelo decide qué hacer.
  • Si el agente responde con HEARTBEAT_OK (opcionalmente con un relleno corto; ver agents.defaults.heartbeat.ackMaxChars), OpenClaw suprime el envío saliente para ese latido.
  • Por defecto, se permite la entrega de latidos a objetivos user:<id> de tipo DM. Establezca agents.defaults.heartbeat.directPolicy: "block" para suprimir la entrega a objetivos directos manteniendo las ejecuciones de latido activas.
  • Los latidos ejecutan turnos completos del agente: intervalos más cortos consumen más tokens.
{
agents: {
defaults: {
heartbeat: { every: "30m" },
},
},
}

Los archivos adjuntos entrantes (imágenes/audio/documentos) pueden mostrarse en su comando a través de plantillas:

  • {{MediaPath}} (ruta de archivo temporal local)
  • {{MediaUrl}} (seudo-URL)
  • {{Transcript}} (si la transcripción de audio está habilitada)

Los archivos adjuntos salientes del agente utilizan campos de medios estructurados en la herramienta de mensaje o en la carga útil de respuesta, como media, mediaUrl, mediaUrls, path, o filePath. Argumentos de ejemplo de la herramienta de mensaje:

{
"message": "Here's the screenshot.",
"mediaUrl": "https://example.com/screenshot.png"
}

OpenClaw envía medios estructurados junto con el texto. Las respuestas finales del asistente heredadas aún pueden normalizarse por compatibilidad, pero el resultado de las herramientas, el resultado del navegador, los bloques de streaming y las acciones de mensaje no analizan el texto como comandos de adjuntos.

El comportamiento de la ruta local sigue el mismo modelo de confianza de lectura de archivos que el agente:

  • Si tools.fs.workspaceOnly es true, las rutas locales de medios salientes se mantienen restringidas a la raíz temporal de OpenClaw, la caché de medios, las rutas del espacio de trabajo del agente y los archivos generados por el sandbox.
  • Si tools.fs.workspaceOnly es false, los medios locales salientes pueden usar archivos locales del host que el agente ya tiene permiso para leer.
  • Las rutas locales pueden ser absolutas, relativas al espacio de trabajo o relativas al directorio de inicio con ~/.
  • Los envíos locales al host todavía solo permiten tipos de medios y documentos seguros (imágenes, audio, video, PDF, documentos de Office y documentos de texto validados como Markdown/MD, TXT, JSON, YAML y YML). Esto es una extensión del límite de confianza de lectura del host existente, no un escáner de secretos: si el agente puede leer un archivo secret.txt o config.json local del host, puede adjuntar ese archivo cuando la extensión y la validación de contenido coincidan.

Esto significa que las imágenes/archivos generados fuera del espacio de trabajo ahora se pueden enviar cuando tu política de fs ya permite esas lecturas, mientras que las extensiones de texto locales arbitrarias del host siguen bloqueadas. Mantén los archivos confidenciales fuera del sistema de archivos legible por el agente, o mantén tools.fs.workspaceOnly=true para envíos de rutas locales más estrictos.

Ventana de terminal
openclaw status # local status (creds, sessions, queued events)
openclaw status --all # full diagnosis (read-only, pasteable)
openclaw status --deep # asks the gateway for a live health probe with channel probes when supported
openclaw health --json # gateway health snapshot (WS; default can return a fresh cached snapshot)

Los registros residen en /tmp/openclaw/ (predeterminado: openclaw-YYYY-MM-DD.log).