Aprobaciones

Aprobar las solicitudes de permiso de Claude Code (y Codex) desde el móvil

El motivo habitual por el que un agente deja de avanzar es una solicitud de permiso que nadie ha visto. Hay tres formas de responderla desde el bolsillo: las notificaciones push propias de Claude Code, un hook casero con ntfy o una app con bandeja. Así funciona cada una con Claude Code, esto es lo que cambia con Codex y otros agentes, y esto es lo que te cuesta cada una en seguridad.

Aprobar las solicitudes de permiso de Claude Code (y Codex) desde el móvil

Respuesta rápida

Con un plan Pro, Max, Team o Enterprise, inicia Remote Control y, en /config, activa Push when actions required. La app de Claude te avisa y respondes a la solicitud en la app. Como alternativa gratuita y autoalojada, hooks de código abierto como claude-remote-approver envían cada PermissionRequest a ntfy con botones de aprobar y denegar. Codex tiene el mismo hook PermissionRequest. Apps como Maude muestran las solicitudes de varios agentes en una sola bandeja, con notificaciones push que incluyen Permitir/Denegar.

Cuando Claude Code quiere ejecutar un comando o editar un archivo que no has aprobado de antemano, se detiene y pregunta. Si estás delante del terminal, es cuestión de un segundo. Si no, la sesión espera, y eso puede suponer una hora parada por una sola pulsación. Todas las configuraciones de aprobación remota llevan la solicitud a tu móvil y tu respuesta de vuelta al agente. Se diferencian en cómo interceptan la solicitud, por dónde viaja y quién puede responderla.

Cómo funcionan las aprobaciones remotas

Hay dos mecanismos, y cada herramienta usa uno de ellos.

  • El protocolo remoto propio del agente. Remote Control de Claude Code reenvía el diálogo de permiso real a la app de Claude. Remote Control de Antigravity y el app-server de Codex funcionan igual. Nada intermedio decide nada: respondes a la propia solicitud del agente.
  • Hooks. Claude Code ejecuta un programa que configuras en puntos fijos. Un hook PermissionRequest se dispara cuando está a punto de aparecer un diálogo de permiso y puede responder por ti imprimiendo una decisión como {"behavior": "allow"} o "deny". Un hook PreToolUse se dispara antes de cada llamada a una herramienta y puede devolver allow, deny, ask o defer. Un hook que envía un push y espera a que toques es como funcionan todas las herramientas caseras de aprobación desde el móvil. Los detalles están en la referencia de hooks.

Push nativo en Claude Code

La vía oficial de Anthropic pasa por Remote Control:

  1. Inicia una sesión con claude remote-control (modo servidor) o claude --remote-control, o escribe /remote-control en una sesión en marcha.
  2. Inicia sesión en la app de Claude del móvil con la misma cuenta y permite las notificaciones.
  3. En el terminal, ejecuta /config y activa Push when actions required, que cubre las solicitudes de permiso y las preguntas. Push when Claude decides cubre avisos proactivos como «tests terminados».

La documentación menciona algunas cosas con las que te vas a encontrar:

  • Planes y autenticación. Remote Control está disponible en Pro, Max, Team y Enterprise, y no admite claves de API. En Team y Enterprise, un Owner tiene que activarlo.
  • Las solicitudes no caducan. Las solicitudes de permiso y las preguntas siguen abiertas hasta que respondes.
  • El push se pausa mientras estás en el terminal. Claude Code no envía push mientras escribes en el terminal conectado o lo tienes en primer plano. CLAUDE_CLIENT_PRESENCE_FILE amplía eso a cualquier momento en que estés delante de la máquina.
  • El proceso tiene que seguir vivo. El proceso claude debe seguir en marcha, así que en un servidor arráncalo dentro de tmux.
  • Algunos modos no se pueden usar desde la app. Según la documentación móvil, no puedes seleccionar Bypass permissions desde la app, ni Auto para una sesión de Remote Control.

Si tienes un plan de Claude y solo usas Claude Code, empieza por aquí. Viene gratis con tu plan y lo mantiene Anthropic.

Hazlo tú mismo con hooks de ntfy

ntfy es un servicio de push de código abierto. Publicas en un topic con una simple petición HTTP y la app de ntfy del móvil lo muestra. Varios proyectos de código abierto lo combinan con un hook PermissionRequest. El hook publica la llamada pendiente en tu topic con botones de acción, espera tu respuesta en un segundo topic e imprime la decisión de vuelta a Claude Code. El mérito es de sus autores:

ProyectoHookSi no respondesNotas
claude-remote-approver (yuuichieguchi)PermissionRequestVuelve a la solicitud del terminal tras 120 s (300 s para revisiones de planes)npm install -g claude-remote-approver; genera un topic aleatorio de 128 bits; Approve / Always Approve / Deny
claude-push (coa00)PermissionRequestVuelve al terminal tras 90 s (configurable)Script de instalación en shell; Allow / Deny
claude-code-phone-notifications (ssarnecki)PermissionRequest, PreToolUse, StopEspera unos 9 minutos y luego vuelve al terminalEspera 30 s antes de enviar el push por si estás en el escritorio; también envía las preguntas de AskUserQuestion (sin botones)
hookline (tsyche)PreToolUse para Claude; PermissionRequest para Codex15 minutos por defecto, con un margen mayor para respuestas tardíasTambién cubre Codex, Grok y OpenCode; admite un ntfy autoalojado con credenciales

Los cuatro tienen licencia MIT. Los tiempos de espera son sus valores por defecto documentados. Si solo quieres un aviso, sin responder en remoto, te basta con el hook Notification de Claude Code. El matcher permission_prompt se dispara cuando aparece un diálogo:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt",
        "hooks": [
          { "type": "command",
            "command": "curl -s -d 'Claude Code is waiting for approval' https://ntfy.sh/your-long-random-topic" }
        ]
      }
    ]
  }
}

Pon eso en ~/.claude/settings.json en la máquina que ejecuta Claude Code. Seguirás necesitando llegar a un terminal para responder. Los proyectos de arriba añaden el camino de vuelta.

La bandeja de Maude

Maude sigue el primer enfoque. Su daemon en tu servidor habla con el protocolo propio de cada agente, así que una solicitud de permiso llega a la app como la solicitud real y no como una suposición de un hook. Las solicitudes de todas las sesiones de todos los servidores llegan a una sola bandeja, junto a los errores y el trabajo terminado. Puedes responder ahí mismo o directamente desde la notificación push, que incluye Permitir y Denegar. Una solicitud espera hasta que respondes; la sesión no caduca ni sigue adelante sin ti. Funciona con Claude Code, Codex, OpenCode y Grok Build. Antigravity es la excepción: agy en modo headless no puede pausar antes de ejecutar una herramienta, así que Maude te muestra la acción denegada después y la reintenta si la permites. Maude es una app de pago, y cada agente necesita su propia cuenta. No es la única app con bandeja y push: Happier, entre otras, tiene ambas cosas.

Codex y otros agentes

  • Codex también tiene hooks, activados por defecto. Un hook PermissionRequest puede responder con "behavior": "allow" o "deny", y PreToolUse puede denegar. Se configuran en ~/.codex/hooks.json o en [hooks] dentro de config.toml. Es lo que usa hookline para Codex. El ajuste notify, más antiguo, ejecuta un programa cuando termina un turno. Según análisis de terceros, no se dispara con las solicitudes de aprobación, así que usa hooks para las aprobaciones. Para la vía oficial de Codex con la app del móvil y sus límites en Linux, consulta Codex CLI en un VPS.
  • Antigravity responde a las solicitudes desde su panel de Remote Control cuando lo ejecutas en modo interactivo o como daemon. agy en modo headless deniega en lugar de preguntar. Consulta Antigravity CLI en un servidor.
  • OpenCode y Grok Build están cubiertos por el soporte de plugins y hooks de hookline, o por las apps multiagente.

Seguridad de las aprobaciones remotas

Una aprobación desde el móvil es tan sólida como el eslabón más débil entre la solicitud y tu toque.

  • En ntfy.sh, el topic es la contraseña. La documentación de ntfy lo dice sin rodeos: sin registro, cualquiera que conozca el nombre de un topic puede leerlo y publicar en él. En un servidor público, si alguien adivina el topic, puede aprobar los comandos de tu agente. Usa un topic largo y aleatorio, o aloja tu propio ntfy con autenticación.
  • Lee el comando, no el título. Un push en la pantalla de bloqueo muestra un resumen. Un rm -rf dentro de una línea de Bash larga se pasa por alto fácilmente en una pantalla de 6 pulgadas. Usa «permitir siempre» para herramientas de solo lectura, no para Bash(*).
  • Conoce tu comportamiento por defecto. Los hooks caseros de arriba vuelven a la solicitud del terminal cuando caducan, así que una solicitud sin respuesta bloquea en lugar de aprobarse sola. Escribe tu propio hook con la misma regla. La documentación de Claude Code advierte de que un hook PreToolUse que caduca no bloquea la llamada a la herramienta, que sigue por el flujo normal de permisos, así que no cuentes con un hook atascado como barrera.
  • Protege el canal. El tráfico de aprobaciones revela lo que está haciendo tu agente. Remote Control de Anthropic pasa por los servidores de Anthropic, y el relay de Maude solo ve tráfico cifrado de extremo a extremo. Con un hook, tú eliges adónde va. El ajuste Require trusted devices de Anthropic limita qué dispositivos pueden usar Remote Control.
  • Las aprobaciones son una red de seguridad, no un sandbox. Ejecutar el agente con un usuario que no sea root, en una máquina que puedas reconstruir, importa más que cualquier interfaz de aprobación. Consulta cómo ejecutar agentes con todos los permisos de forma segura.

Respóndelas desde Maude

Si tus agentes se ejecutan en un servidor y quieres un único sitio para responderles a todos, prueba Maude con Claude Code o Codex. Añade el servidor desde la app, inicia sesión con tu propio plan y las solicitudes de permiso llegarán como notificaciones push con Permitir y Denegar. La bandeja reúne todo lo que está esperando por ti.

Preguntas frecuentes

¿Claude Code puede enviar notificaciones push?
Sí, a través de Remote Control. Conecta la sesión a la app de Claude y activa Push when actions required (y, si quieres, Push when Claude decides) en /config. Necesita un plan Pro, Max, Team o Enterprise; los inicios de sesión con clave de API no son compatibles.
¿Puedo permitir o denegar desde la pantalla de bloqueo?
Con los hooks basados en ntfy, sí: añaden botones de aprobar y denegar a la notificación. La documentación de Anthropic describe el push para las solicitudes de permiso, pero no botones de respuesta en la propia notificación, así que cuenta con responder en la app de Claude. Los push de permisos de Maude incluyen las acciones Permitir y Denegar.
¿Qué pasa si no respondo?
En el propio Claude Code, las solicitudes de permiso siguen abiertas hasta que se responden, así que la sesión simplemente espera. Los hooks caseros de ntfy caducan tras el margen configurado y vuelven a la solicitud normal del terminal. Comprueba que cualquier hook que escribas falle de forma segura: un hook PreToolUse que caduca no bloquea la llamada a la herramienta.
¿Funciona con Codex?
Sí. Codex admite un hook PermissionRequest que puede permitir o denegar, y proyectos como hookline lo usan para llevar las aprobaciones de Codex a ntfy. Según análisis de terceros, el ajuste notify de Codex solo cubre los turnos terminados, así que usa hooks para las aprobaciones.
¿Es seguro aprobar comandos desde el móvil?
Es tan seguro como el canal y tu atención. Usa un topic de ntfy imposible de adivinar o autenticado, lee el comando completo antes de aprobar, evita las reglas genéricas de «permitir siempre» para comandos de shell y ejecuta el agente con un usuario que no sea root en una máquina que puedas reconstruir.

Qué ha cambiado

  • — Primera publicación. Comportamiento de Remote Control y de los hooks comprobado con la documentación de Anthropic y OpenAI; detalles y valores por defecto de cada repositorio tomados de su README en esta fecha.

Que no se te escape ninguna solicitud de permiso

Permite o deniega desde la notificación, para todos los agentes de todos tus servidores. iOS y Android.

Download Maude on the App Store Get Maude on Google Play