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.
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
PermissionRequestse 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 hookPreToolUsese dispara antes de cada llamada a una herramienta y puede devolverallow,deny,askodefer. 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:
- Inicia una sesión con
claude remote-control(modo servidor) oclaude --remote-control, o escribe/remote-controlen una sesión en marcha. - Inicia sesión en la app de Claude del móvil con la misma cuenta y permite las notificaciones.
- En el terminal, ejecuta
/configy 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_FILEamplía eso a cualquier momento en que estés delante de la máquina. - El proceso tiene que seguir vivo. El proceso
claudedebe 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:
| Proyecto | Hook | Si no respondes | Notas |
|---|---|---|---|
| claude-remote-approver (yuuichieguchi) | PermissionRequest | Vuelve 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) | PermissionRequest | Vuelve al terminal tras 90 s (configurable) | Script de instalación en shell; Allow / Deny |
| claude-code-phone-notifications (ssarnecki) | PermissionRequest, PreToolUse, Stop | Espera unos 9 minutos y luego vuelve al terminal | Espera 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 Codex | 15 minutos por defecto, con un margen mayor para respuestas tardías | Tambié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
PermissionRequestpuede responder con"behavior": "allow"o"deny", yPreToolUsepuede denegar. Se configuran en~/.codex/hooks.jsono en[hooks]dentro deconfig.toml. Es lo que usa hookline para Codex. El ajustenotify, 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.
agyen 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 -rfdentro 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 paraBash(*). - 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
PreToolUseque 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?
/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?
¿Qué pasa si no respondo?
PreToolUse que caduca no bloquea la llamada a la herramienta.¿Funciona con Codex?
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?
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.