Comandos slash

Los comandos son gestionados por el Gateway. La mayoría de los comandos deben enviarse como un mensaje independiente que comienza con /. El comando bash solo para host usa ! <cmd> (con /bash <cmd> como alias).

Hay dos sistemas relacionados:

  • Comandos: mensajes independientes /....
  • Directivas: /think, /fast, /verbose, /reasoning, /elevated, /exec, /model, /queue.
    • Las directivas se eliminan del mensaje antes de que el modelo las vea.
    • En mensajes de chat normales (no solo directivas), se tratan como “indicaciones inline” y no persisten la configuración de sesión.
    • En mensajes que solo contienen directivas (el mensaje contiene únicamente directivas), persisten en la sesión y responden con una confirmación.
    • Las directivas solo se aplican para remitentes autorizados. Si commands.allowFrom está configurado, es la única lista de permitidos usada; de lo contrario la autorización viene de listas de permitidos/emparejamiento del canal más commands.useAccessGroups. Los remitentes no autorizados ven las directivas tratadas como texto plano.

También hay algunos atajos inline (solo remitentes en lista de permitidos/autorizados): /help, /commands, /status, /whoami (/id). Se ejecutan inmediatamente, se eliminan antes de que el modelo vea el mensaje, y el texto restante continúa por el flujo normal.

Configuración

{
  commands: {
    native: "auto",
    nativeSkills: "auto",
    text: true,
    bash: false,
    bashForegroundMs: 2000,
    config: false,
    debug: false,
    restart: false,
    allowFrom: {
      "*": ["user1"],
      discord: ["user:123"],
    },
    useAccessGroups: true,
  },
}
  • commands.text (por defecto true) habilita el parseo de /... en mensajes de chat.
    • En superficies sin comandos nativos (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams), los comandos de texto siguen funcionando aunque pongas esto en false.
  • commands.native (por defecto "auto") registra comandos nativos.
    • Auto: habilitado para Discord/Telegram; deshabilitado para Slack (hasta que agregues comandos slash); ignorado para proveedores sin soporte nativo.
    • Configura channels.discord.commands.native, channels.telegram.commands.native, o channels.slack.commands.native para sobreescribir por proveedor (bool o "auto").
    • false limpia comandos previamente registrados en Discord/Telegram al iniciar. Los comandos de Slack se gestionan en la app de Slack y no se eliminan automáticamente.
  • commands.nativeSkills (por defecto "auto") registra comandos de skills nativamente cuando está admitido.
    • Auto: habilitado para Discord/Telegram; deshabilitado para Slack (Slack requiere crear un comando slash por skill).
    • Configura channels.discord.commands.nativeSkills, channels.telegram.commands.nativeSkills, o channels.slack.commands.nativeSkills para sobreescribir por proveedor (bool o "auto").
  • commands.bash (por defecto false) habilita ! <cmd> para ejecutar comandos de shell del host (/bash <cmd> es un alias; requiere listas de permitidos de tools.elevated).
  • commands.bashForegroundMs (por defecto 2000) controla cuánto tiempo espera bash antes de cambiar a modo segundo plano (0 pasa a segundo plano inmediatamente).
  • commands.config (por defecto false) habilita /config (lee/escribe openclaw.json).
  • commands.debug (por defecto false) habilita /debug (sobreescrituras solo en runtime).
  • commands.allowFrom (opcional) configura una lista de permitidos por proveedor para autorización de comandos. Cuando está configurado, es la única fuente de autorización para comandos y directivas (se ignoran listas de permitidos/emparejamiento del canal y commands.useAccessGroups). Usa "*" para un valor global por defecto; las claves específicas por proveedor lo sobreescriben.
  • commands.useAccessGroups (por defecto true) aplica listas de permitidos/políticas para comandos cuando commands.allowFrom no está configurado.

Lista de comandos

Texto + nativos (cuando están habilitados):

  • /help
  • /commands
  • /skill <name> [input] (ejecuta un skill por nombre)
  • /status (muestra el estado actual; incluye uso/cuota del proveedor para el proveedor de modelo actual cuando está disponible)
  • /allowlist (listar/agregar/eliminar entradas de la lista de permitidos)
  • /approve <id> allow-once|allow-always|deny (resolver prompts de aprobación de exec)
  • /context [list|detail|json] (explicar “contexto”; detail muestra tamaño por archivo + por herramienta + por skill + prompt del sistema)
  • /export-session [path] (alias: /export) (exportar sesión actual a HTML con prompt del sistema completo)
  • /whoami (muestra tu id de remitente; alias: /id)
  • /session idle <duration|off> (gestionar auto-unfocus por inactividad para vinculaciones de hilo enfocadas)
  • /session max-age <duration|off> (gestionar auto-unfocus por edad máxima para vinculaciones de hilo enfocadas)
  • /subagents list|kill|log|info|send|steer|spawn (inspeccionar, controlar o generar ejecuciones de sub-agente para la sesión actual)
  • /acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions (inspeccionar y controlar sesiones del runtime ACP)
  • /agents (listar agentes vinculados a hilos para esta sesión)
  • /focus <target> (Discord: vincular este hilo, o un nuevo hilo, a un destino de sesión/subagente)
  • /unfocus (Discord: eliminar la vinculación del hilo actual)
  • /kill <id|#|all> (abortar inmediatamente uno o todos los sub-agentes en ejecución para esta sesión; sin mensaje de confirmación)
  • /steer <id|#> <message> (dirigir un sub-agente en ejecución inmediatamente: en ejecución cuando es posible, de lo contrario aborta el trabajo actual y reinicia con el mensaje de dirección)
  • /tell <id|#> <message> (alias de /steer)
  • /config show|get|set|unset (persistir config en disco, solo propietario; requiere commands.config: true)
  • /debug show|set|unset|reset (sobreescrituras en runtime, solo propietario; requiere commands.debug: true)
  • /usage off|tokens|full|cost (pie de uso por respuesta o resumen de costos local)
  • /tts off|always|inbound|tagged|status|provider|limit|summary|audio (controlar TTS; consulta /tts)
    • Discord: el comando nativo es /voice (Discord reserva /tts); el texto /tts sigue funcionando.
  • /stop
  • /restart
  • /dock-telegram (alias: /dock_telegram) (cambiar respuestas a Telegram)
  • /dock-discord (alias: /dock_discord) (cambiar respuestas a Discord)
  • /dock-slack (alias: /dock_slack) (cambiar respuestas a Slack)
  • /activation mention|always (solo grupos)
  • /send on|off|inherit (solo propietario)
  • /reset o /new [model] (indicación de modelo opcional; el resto se pasa como mensaje)
  • /think <off|minimal|low|medium|high|xhigh> (opciones dinámicas por modelo/proveedor; aliases: /thinking, /t)
  • /fast status|on|off (omitir el argumento muestra el estado actual del modo rápido)
  • /verbose on|full|off (alias: /v)
  • /reasoning on|off|stream (alias: /reason; cuando está habilitado, envía un mensaje separado con prefijo Reasoning:; stream = solo borrador de Telegram)
  • /elevated on|off|ask|full (alias: /elev; full omite aprobaciones de exec)
  • /exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id> (envía /exec para ver la configuración actual)
  • /model <name> (alias: /models; o /<alias> desde agents.defaults.models.*.alias)
  • /queue <mode> (más opciones como debounce:2s cap:25 drop:summarize; envía /queue para ver la configuración actual)
  • /bash <command> (solo host; alias de ! <command>; requiere commands.bash: true + listas de permitidos de tools.elevated)

Solo texto:

  • /compact [instructions] (consulta /concepts/compaction)
  • ! <command> (solo host; uno a la vez; usa !poll + !stop para trabajos de larga duración)
  • !poll (verificar salida / estado; acepta sessionId opcional; /bash poll también funciona)
  • !stop (detener el trabajo bash en ejecución; acepta sessionId opcional; /bash stop también funciona)

Notas:

  • Los comandos aceptan un : opcional entre el comando y los argumentos (ej. /think: high, /send: on, /help:).
  • /new <model> acepta un alias de modelo, provider/model, o un nombre de proveedor (coincidencia difusa); si no hay coincidencia, el texto se trata como cuerpo del mensaje.
  • Para el desglose completo de uso del proveedor, usa openclaw status --usage.
  • /allowlist add|remove requiere commands.config=true y respeta configWrites del canal.
  • En canales multi-cuenta, /allowlist --account <id> y /config set channels.<provider>.accounts.<id>... dirigidos a configuración también respetan configWrites de la cuenta destino.
  • /usage controla el pie de uso por respuesta; /usage cost imprime un resumen de costos local desde los logs de sesión de OpenClaw.
  • /restart está habilitado por defecto; configura commands.restart: false para desactivarlo.
  • Comando nativo solo de Discord: /vc join|leave|status controla canales de voz (requiere channels.discord.voice y comandos nativos; no disponible como texto).
  • Los comandos de vinculación de hilos de Discord (/focus, /unfocus, /agents, /session idle, /session max-age) requieren que las vinculaciones de hilos efectivas estén habilitadas (session.threadBindings.enabled y/o channels.discord.threadBindings.enabled).
  • Referencia de comandos ACP y comportamiento del runtime: Agentes ACP.
  • /verbose está pensado para depuración y mayor visibilidad; mantenlo desactivado en uso normal.
  • /fast on|off persiste una sobreescritura de sesión. Usa la opción inherit de la UI de Sesiones para limpiarla y volver a los valores por defecto de configuración.
  • Los resúmenes de fallos de herramientas se siguen mostrando cuando son relevantes, pero el texto detallado de fallos solo se incluye cuando /verbose es on o full.
  • /reasoning (y /verbose) son riesgosos en entornos grupales: pueden revelar razonamiento interno o salida de herramientas que no pretendías exponer. Prefiere dejarlos desactivados, especialmente en chats grupales.
  • Ruta rápida: los mensajes que solo contienen comandos de remitentes en lista de permitidos se gestionan inmediatamente (omiten cola + modelo).
  • Control de mención en grupos: los mensajes que solo contienen comandos de remitentes en lista de permitidos omiten los requisitos de mención.
  • Atajos inline (solo remitentes en lista de permitidos): ciertos comandos también funcionan cuando están incrustados en un mensaje normal y se eliminan antes de que el modelo vea el texto restante.
    • Ejemplo: hey /status dispara una respuesta de estado, y el texto restante continúa por el flujo normal.
  • Actualmente: /help, /commands, /status, /whoami (/id).
  • Los mensajes no autorizados que solo contienen comandos se ignoran silenciosamente, y los tokens /... inline se tratan como texto plano.
  • Comandos de skills: los skills user-invocable se exponen como comandos slash. Los nombres se sanitizan a a-z0-9_ (máx. 32 caracteres); las colisiones obtienen sufijos numéricos (ej. _2).
    • /skill <name> [input] ejecuta un skill por nombre (útil cuando los límites de comandos nativos impiden comandos por skill).
    • Por defecto, los comandos de skills se reenvían al modelo como una solicitud normal.
    • Los skills pueden opcionalmente declarar command-dispatch: tool para enrutar el comando directamente a una herramienta (determinista, sin modelo).
    • Ejemplo: /prose (plugin OpenProse) — consulta OpenProse.
  • Argumentos de comandos nativos: Discord usa autocompletado para opciones dinámicas (y menús de botones cuando omites argumentos obligatorios). Telegram y Slack muestran un menú de botones cuando un comando admite opciones y omites el argumento.

Superficies de uso (qué se muestra dónde)

  • Uso/cuota del proveedor (ejemplo: “Claude 80% left”) se muestra en /status para el proveedor de modelo actual cuando el seguimiento de uso está habilitado.
  • Tokens/costo por respuesta se controla con /usage off|tokens|full (adjunto a respuestas normales).
  • /model status es sobre modelos/auth/endpoints, no sobre uso.

Selección de modelo (/model)

/model está implementado como una directiva.

Ejemplos:

/model
/model list
/model 3
/model openai/gpt-5.2
/model opus@anthropic:default
/model status

Notas:

  • /model y /model list muestran un selector compacto y numerado (familia de modelo + proveedores disponibles).
  • En Discord, /model y /models abren un selector interactivo con dropdowns de proveedor y modelo más un paso de Enviar.
  • /model <#> selecciona de ese selector (y prefiere el proveedor actual cuando es posible).
  • /model status muestra la vista detallada, incluyendo endpoint del proveedor configurado (baseUrl) y modo de API (api) cuando está disponible.

Sobreescrituras de debug

/debug te permite configurar sobreescrituras de configuración solo en runtime (memoria, no disco). Solo propietario. Deshabilitado por defecto; habilítalo con commands.debug: true.

Ejemplos:

/debug show
/debug set messages.responsePrefix="[openclaw]"
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
/debug unset messages.responsePrefix
/debug reset

Notas:

  • Las sobreescrituras se aplican inmediatamente a nuevas lecturas de configuración, pero no escriben en openclaw.json.
  • Usa /debug reset para limpiar todas las sobreescrituras y volver a la configuración en disco.

Actualizaciones de configuración

/config escribe en tu configuración en disco (openclaw.json). Solo propietario. Deshabilitado por defecto; habilítalo con commands.config: true.

Ejemplos:

/config show
/config show messages.responsePrefix
/config get messages.responsePrefix
/config set messages.responsePrefix="[openclaw]"
/config unset messages.responsePrefix

Notas:

  • La configuración se valida antes de escribir; los cambios inválidos se rechazan.
  • Las actualizaciones de /config persisten entre reinicios.

Notas de superficie

  • Los comandos de texto se ejecutan en la sesión de chat normal (DMs comparten main, los grupos tienen su propia sesión).
  • Los comandos nativos usan sesiones aisladas:
    • Discord: agent:<agentId>:discord:slash:<userId>
    • Slack: agent:<agentId>:slack:slash:<userId> (prefijo configurable con channels.slack.slashCommand.sessionPrefix)
    • Telegram: telegram:slash:<userId> (apunta a la sesión del chat con CommandTargetSessionKey)
  • /stop apunta a la sesión de chat activa para poder abortar la ejecución actual.
  • Slack: channels.slack.slashCommand sigue admitido para un solo comando estilo /openclaw. Si habilitas commands.native, debes crear un comando slash de Slack por cada comando integrado (mismos nombres que /help). Los menús de argumentos de comandos para Slack se entregan como botones efímeros de Block Kit.
    • Excepción de Slack nativo: registra /agentstatus (no /status) porque Slack reserva /status. El texto /status sigue funcionando en mensajes de Slack.