Logotipo de Bitdoze

Controla Agentes de IA Desde tu Teléfono: Moshi + Herdr en un VPS

Controla agentes de IA desde tu teléfono con Moshi y Herdr en un VPS barato y siempre encendido. Guía de configuración paso a paso: aprobaciones push, mosh, trampas y costos reales.

Dragos

30 min de lectura

Controla Agentes de IA Desde tu Teléfono: Moshi + Herdr en un VPS

Si quieres controlar agentes de IA desde tu teléfono (aprobar prompts de Claude Code desde la pantalla de bloqueo, ver qué agente está bloqueado, responder una pregunta por voz), esta es la configuración. Herdr mantiene los agentes vivos en un VPS siempre encendido. Moshi convierte el teléfono en el terminal que los dirige. Ambos son baratos o gratuitos, y todo el conjunto cabe en una máquina de €4-5/mes.

El modelo mental importa más que los comandos: la manada vive en el host, y cada laptop o teléfono es solo otro cliente que puede conectarse y desconectarse a voluntad.

Por qué tus agentes de IA necesitan un host siempre encendido

Los agentes de codificación no son interactivos de la forma en que un shell es interactivo. Lanzas uno, trabaja durante 20 minutos, y luego te necesita durante 30 segundos impredecibles: un prompt de permiso, una pregunta aclaratoria, un «terminé, ¿quieres que abra el PR?». Esos 30 segundos son todo el cuello de botella.

Encadena los agentes a tu laptop y tú también quedas encadenado. Cierra la tapa y se detienen. Ejecútalos en una configuración solo de teléfono y estarás escribiendo prompts en un teclado de cristal. La solución aburrida es ejecutar los agentes en una máquina que nunca duerme y tratar cada pantalla que posees como una ventana desechable hacia esa máquina.

Un VPS barato supera aquí a las otras opciones siempre encendidas. Un Mac mini funciona, pero necesita energía, refrigeración y un lugar en un estante, y si alguna vez se duerme tu manada se detiene. Un VPS clase Hetzner cuesta aproximadamente lo mismo que un café al mes, no tiene tapa que cerrar, y puedo reconstruirlo desde cero en 10 minutos cuando inevitablemente rompo algo.

Claude Code no se instala en tu iPhone

El mayor malentendido sobre los agentes móviles: no existe un Claude Code nativo para teléfono. El agente se ejecuta en un host que tú controlas (VPS, servidor doméstico, Mac siempre encendido). El teléfono es un terminal y un timbre. Todo lo que sigue se deriva de esa división.

Lo que realmente quieres del teléfono es limitado y concreto: ver qué agente está bloqueado, aprobar el prompt en el que está atascado, responder una pregunta corta y echar un vistazo a un diff cuando te apetezca. Eso es un bucle de 30 segundos, no una sesión de codificación. Diseña para el bucle de 30 segundos y la configuración se mantiene pequeña.

El stack: Herdr, Moshi y moshi-hook

Tres piezas, cada una haciendo un trabajo. Puedes parar después de cualquiera de ellas y aún así tener algo útil.

Arquitectura: el servidor Herdr en un VPS posee los terminales de agentes; el cliente Moshi del teléfono se conecta vía Mosh; moshi-hook envía notificaciones de aprobación

Herdr: el runtime sobre el que viven tus agentes

Herdr es un multiplexor de terminal consciente de agentes escrito en Rust. Un servidor en segundo plano posee los PTY. Los clientes se conectan y desconectan. Los paneles siguen ejecutándose cuando la sesión SSH se cae o la pantalla del teléfono se bloquea. Se distribuye como un único binario de ~10-11 MB, sin Electron, sin telemetría, sin cuenta. El repositorio tenía ~40.9k estrellas y licencia Apache-2.0 cuando lo verifiqué el 2026-09-27, y está bajo desarrollo muy activo (pre-1.0, con financiación seed, principalmente un desarrollador en solitario).

La parte que justifica su existencia frente a tmux puro es la detección del estado del agente. Herdr lee el buffer inferior en vivo de cada panel con «screen manifests» en TOML (más hooks de ciclo de vida opcionales) y acumula los estados en una barra lateral: working, blocked, done, idle, unknown. Si alguna vez has ejecutado cinco agentes sin saber cuál te estaba esperando, esa barra lateral es la función estrella. Para la comparación completa con tmux, consulta nuestra reseña de Herdr.

La licencia cambió en algún momento

Mi reseña anterior de Herdr indicaba AGPL-3.0-or-later. El README del repositorio al 2026-09-27 muestra Apache-2.0, y el changelog del proyecto registra el cambio de licencia de AGPL-3.0-or-later a Apache-2.0. Aun así, revisa el archivo LICENSE antes de construir un producto comercial sobre él.

Moshi: un terminal móvil construido para agentes de codificación IA

Moshi (iOS 17+, Android 10+) es una app de terminal diseñada en torno a CLIs de agentes en lugar de SSH genérico. El nivel gratuito te da un terminal SSH completo con sesiones ilimitadas, notificaciones push para eventos del agente (con límite de frecuencia), dictado y protección biométrica de claves. Pro cuesta $7.99/mes o $69.99/año y desbloquea lo que hace buena a esta configuración: transporte Mosh, la UI del multiplexor (tmux/Zellij/Herdr), pegado de imágenes, un visor de diffs y acciones de bandeja de entrada ilimitadas. Una licencia cubre tres dispositivos.

Dos cosas lo hacen más que «Termius con tema oscuro». Primero, soporte nativo de Herdr: una pestaña de selector de sesiones que lista las sesiones Herdr en ejecución, un panel de atajos para los acordes Ctrl-B y gestos ajustados para pantallas estrechas. Segundo, la bandeja de entrada de agentes que clasifica los eventos en Needs you / Working / Done en lugar de hacerte desplazar por el historial. Como terminal móvil para agentes de codificación IA, esa combinación es la que elegiría ahora mismo.

Moshi en iPhone ejecutando una sesión de Claude Code sobre Mosh, con la función de pegar capturas de pantalla en el chat resaltada

moshi-hook: el timbre que convierte prompts en aprobaciones push

moshi-hook es un daemon gratuito en el host. Instala hooks en las propias configuraciones de los agentes (PreToolUse/Notification/Stop de Claude Code en ~/.claude/settings.json, Codex en ~/.codex/hooks.json, OpenCode también), escucha en un socket Unix local y mantiene un WebSocket hacia el gateway de Moshi. Cuando un agente llega a un prompt de permiso, tu pantalla de bloqueo se enciende con Approve y Deny.

Dos propiedades de seguridad que vale la pena conocer antes de instalarlo. Los eventos de aprobación están limitados a 256 caracteres, así que un prompt no puede volcar tu archivo env en una notificación push. Y si una aprobación expira antes de que la toques, el agente vuelve a su propio prompt local en el terminal. Nada se auto-aprueba silenciosamente porque tu teléfono estuviera en modo avión.

También conoce Herdr: lee $HERDR_ENV / $HERDR_SESSION, etiqueta los eventos de la bandeja con la sesión y el workspace, y un toque en una tarjeta de la bandeja reconecta a esa sesión exacta vía moshi://herdr?workspace=<id>&session=<name>.

Qué necesitas antes de empezar

La regla para toda esta guía: prueba cada capa en un escritorio antes de añadir la siguiente. Primero los agentes funcionando sobre SSH. Luego mosh. Luego el teléfono. Luego push. Saltarse ese orden es como la gente termina depurando una notificación de pantalla de bloqueo cuando su problema real es una clave SSH incorrecta.

  • VPS con Ubuntu 22.04+ o Debian 12. 2 vCPU / 4 GB es cómodo para unos pocos agentes más un servidor de desarrollo. Una máquina clase CX22 de Hetzner Cloud es el host de referencia en toda esta guía.
  • SSH accesible con autenticación solo por clave. SSH público está bien para empezar; una tailnet es mejor (cubierto en la sección de seguridad).
  • CLIs de agentes ya autenticados y funcionando en ese host desde un terminal de escritorio. Claude Code, Codex, o lo que uses. Si aún estás eligiendo, consulta las mejores herramientas y agentes de codificación IA.
  • Paquetes del host: mosh, tmux (como respaldo), git.
  • Teléfono con Moshi instalado desde la App Store o Google Play, notificaciones push activadas, clave SSH importada con protección Face ID / biométrica.
  • Plan de firewall: TCP 22 más UDP 60000-61000 para Mosh, o solo Tailscale sin puertos públicos.

Si tu VPS aún no está provisionado, sigue primero la configuración segura de VPS para agentes de codificación IA. Cubre el hardening, las claves SSH y la instalación de los CLIs de agentes.

Guía de configuración de VPS

Contexto de costos antes de empezar: la infraestructura cuesta unos €4-5/mes. Tus suscripciones de tokens de agentes la harán parecer pequeña. Esta guía trata sobre el plano de control, que es casi gratuito.

Configuración de Herdr en el VPS: construir el host

Todo lo que sigue asume una máquina Ubuntu/Debian nueva y un usuario con sudo. Los comandos se pueden copiar y pegar en orden.

Instala Herdr en el VPS

curl (VPS Linux)

bash
curl -fsSL https://herdr.dev/install.sh | sh
herdr --version

Homebrew (host macOS)

bash
brew install herdr
herdr --version

mise

bash
mise use -g herdr
herdr --version

Ahora la primera trampa. Moshi sondea tu host con un comando SSH no interactivo, lo que significa que ~/.bashrc y ~/.zshrc no se cargan. Si el script de instalación puso herdr en ~/.local/bin, Moshi no lo encontrará. Ponlo en algún lugar del PATH predeterminado:

bash
sudo ln -sf ~/.local/bin/herdr /usr/local/bin/herdr

Verifica: ejecuta ssh you@vps 'command -v herdr' desde tu laptop. Debe imprimir una ruta. Si no imprime nada, la pestaña Herdr faltará en Moshi más adelante.

Instala Mosh y corrige el locale UTF-8

bash
sudo apt update && sudo apt install -y mosh tmux
sudo locale-gen en_US.UTF-8 && sudo update-locale LANG=en_US.UTF-8

Mosh es el transporte que hace viables los terminales de teléfono. SSH puro es una conexión TCP, y los sistemas operativos de teléfonos son agresivamente buenos matando conexiones TCP: bloquea la pantalla, cambia de wifi a LTE, camina entre habitaciones, y la sesión se congela. Mosh arranca sobre SSH y luego cambia a UDP (60000-61000 por defecto) y está diseñado exactamente para este caso de enlace intermitente.

Las imágenes mínimas de VPS vienen sin locales UTF-8

Fallo clásico en una imagen mínima nueva de Debian/Ubuntu: The locale requested by LC_CTYPE=UTF-8 isn't available here, y mosh se niega a arrancar. Los comandos locale-gen + update-locale de arriba lo corrigen. Barato de ejecutar preventivamente, molesto de diagnosticar después.

Verifica: locale muestra LANG=en_US.UTF-8 (u otro locale UTF-8) y which mosh-server devuelve una ruta. Con una conexión normal de laptop, mosh you@vps debería llevarte a un shell.

Abre el firewall: SSH más el rango UDP de Mosh

bash
sudo ufw allow OpenSSH
sudo ufw allow 60000:61000/udp
sudo ufw status

Nada más necesita estar abierto para este stack. Sin puertos web, sin paneles de agentes. Si quieres ver lo feo que se pone un firewall demasiado abierto en la práctica, la historia de cómo proteger un servidor Hetzner con ufw es una buena lectura antes de saltarte este paso.

La alternativa a SSH público + UDP: pon el VPS en una tailnet y no abras ninguno. La propia documentación de Moshi recomienda Tailscale cuando es posible. Lo cubro en la sección de seguridad más abajo; por ahora la ruta pública mantiene el tutorial simple.

Verifica: sudo ufw status verbose muestra ambas reglas. Desde una red externa (el hotspot del teléfono es perfecto para esto), nc -u -z -v you.vps.ip 60000 no debería quedarse colgado en un puerto filtrado.

Empareja moshi-hook y activa el lingering

En el teléfono, abre Moshi → Settings → Hooks y copia el token de emparejamiento. Luego en el host:

Linux (VPS)

bash
curl -fsSL https://getmoshi.app/install.sh | sh

moshi-hook pair --token <token from Moshi: Settings -> Hooks>
moshi-hook install
moshi-hook serve

# separate terminal
moshi-hook status

macOS

bash
brew tap rjyo/moshi
brew install rjyo/moshi/moshi-hook
brew trust --formula rjyo/moshi/moshi-hook
brew services start rjyo/moshi/moshi-hook

moshi-hook pair --token <token from Moshi: Settings -> Hooks>
moshi-hook install
moshi-hook status

moshi-hook install escribe los hooks en las configuraciones de tus agentes. moshi-hook serve es el daemon de ejecución prolongada en Linux (macOS obtiene un servicio brew).

Lingering, o tu daemon muere al cerrar sesión

En un VPS sin pantalla, los servicios de usuario de systemd se desmontan cuando termina la última sesión de ese usuario. Sin lingering, moshi-hook muere en el momento en que te desconectas. Ejecuta esto una vez:

bash
sudo loginctl enable-linger $USER

Confirma con loginctl show-user $USER | grep Linger.

Verifica: moshi-hook status reporta un daemon limpio con una conexión viva al gateway, y una notificación de prueba llega al teléfono. Si el status dice herdr: not found, salta a la sección de fallos: es un problema de PATH de systemd con una solución de dos líneas.

Inicia tu primer workspace de agentes

Ahora la manada real.

bash
ssh you@vps
herdr                 # starts the background server and attaches a client

Acordes que necesitas el primer día: Ctrl+B v divide verticalmente, Ctrl+B - divide hacia abajo, Ctrl+B c nueva pestaña, Ctrl+B q desconecta. Lanza un agente en un panel:

bash
claude                # or codex / opencode / pi

Luego conecta las integraciones de ciclo de vida. Estas registran los IDs de sesión nativos para que las conversaciones sobrevivan a un reinicio del servidor:

bash
herdr integration install claude
herdr integration install codex
herdr session list --json    # this is what Moshi's picker calls

Aquí es también donde un segundo agente se gana su lugar. Me gusta OpenCode como un segundo cerebro barato en un segundo panel; si quieres la instalación completa, ejecutar OpenCode en tu VPS lo explica paso a paso. Una tercera opción en su propia pestaña también está bien: la guía de configuración de Pi coding agent cubre esa.

Verifica: la barra lateral de Herdr muestra el agente como working o idle (no unknown), y herdr session list --json devuelve la sesión. Si el estado es unknown, ejecuta herdr agent explain <target> --verbose; los screen manifests van detrás de las nuevas versiones de UI de los agentes y herdr server update-agent-manifests descarga los actualizados.

Ejecuta Claude Code desde tu teléfono

El host está listo. Ahora la mitad del teléfono.

Conecta Moshi al VPS (clave SSH, luego Mosh)

Crea o importa una clave SSH en Moshi y activa la protección biométrica de claves. Añade un host, conéctate primero por SSH puro y confirma que ves la TUI de herdr. Eso prueba la clave, el usuario y la corrección del PATH de antes.

Luego cambia el transporte a Mosh (Pro). Todo lo que instalaste en la sección anterior es lo que Mosh necesita: mosh-server en el host, un locale UTF-8 y UDP 60000-61000 accesible.

La ruta gratuita funciona hoy

SSH puro en el nivel gratuito de Moshi es suficiente para probar el concepto: sesiones ilimitadas, el terminal, incluso eventos push de agentes con límite de frecuencia. Lo que pierdes es el roaming de Mosh y la UI del multiplexor Herdr. Prueba primero la ruta gratuita; consulta la sección de costos para ver lo que Pro realmente compra.

Verifica: conéctate, ejecuta htop o herdr, luego activa el modo avión durante 10 segundos. Con Mosh la sesión está viva cuando vuelves. Con SSH no. Esa única prueba te dice en qué transporte estás.

El selector de sesiones de Herdr y el panel de atajos

Moshi detecta Herdr al conectar ejecutando un sondeo SSH no interactivo, luego llama a herdr session list --json y muestra las sesiones en ejecución bajo una pestaña Herdr. Si tienes dos o tres sesiones de agentes, aparecen aquí con los nombres de sus workspaces. Un deslizamiento vertical abre el navegador de workspaces.

El panel de atajos pre-asigna los acordes Ctrl-B de Herdr como botones táctiles, que es como haces Ctrl+B c en cristal. Si remapeaste el prefijo en ~/.config/herdr/config (o config.toml), configura el mismo prefijo en Moshi bajo Settings → Shortcuts → Herdr. Los gestos están en Settings → Input → Gestures.

Ergonomía de teléfono que vale la pena conocer: usa pestañas, no muchos paneles pequeños. Un teléfono acomoda aproximadamente un panel. Pliega la barra lateral cuando estés leyendo. Si quieres la verdadera experiencia de cliente ligero, usa un iPad con Magic Keyboard. La pantalla más grande maneja este flujo de trabajo mejor que un teléfono.

Aprueba prompts desde la pantalla de bloqueo

Esta es la recompensa. Con moshi-hook emparejado y el lingering activado, un agente que llega a un prompt de permiso produce una notificación push en el teléfono. Approve o Deny desde la pantalla de bloqueo (o desde un Watch, o una Live Activity) y la decisión viaja de vuelta: teléfono → gateway de Moshi → socket Unix del host → el agente.

Flujo de aprobación: prompt de permiso del agente a moshi-hook al gateway de Moshi a notificación push a Approve o Deny en la pantalla de bloqueo y de vuelta al agente

La bandeja de entrada ordena los eventos en Needs you / Working / Done. Los eventos conscientes de Herdr llevan la sesión y el workspace, así que tocar una tarjeta reconecta ese panel exacto. Un estado «done while unviewed» significa que el agente terminó mientras no mirabas, que es la señal para abrir el visor de diffs y revisar lo que hizo.

Resumen de seguridad, porque un botón Approve en la pantalla de bloqueo merece escepticismo: límite de 256 caracteres por evento, sin exfiltración de secretos vía push, las aprobaciones expiradas vuelven al prompt local del terminal del agente, y nada se auto-aprueba silenciosamente.

El bucle diario: dirigir la manada desde el sofá

Una vez que las piezas están en su lugar, el ritmo es el mismo cada día:

  1. En el escritorio (o desde el teléfono), abre 2-3 workspaces de Herdr y lanza un agente en cada uno. claude en una pestaña, codex en otra.
  2. Cierra la laptop. El VPS sigue ejecutando los agentes.
  3. El teléfono vibra ante un muro de permiso. Approve o Deny desde la pantalla de bloqueo. Interacción total: 5 segundos.
  4. El agente hace una pregunta aclaratoria. Responde por voz (el dictado en dispositivo de Moshi maneja Whisper/Parakeet/Apple) sobre Mosh. Interacción total: 30 segundos.
  5. Más tarde, cuando quieras mirar código, siéntate y conéctate correctamente. Herdr 0.9 (sept. 2026) añadió herdr machine add myvps --label "VPS herd", que integra las máquinas remotas en la misma barra lateral que las locales:
bash
herdr machine add myvps --label "VPS herd"
herdr --remote myvps      # thin client against a single host

El modo de cliente ligero también es útil para el puenteo de pegado de imágenes del portapapeles desde el lado del teléfono. Revisa herdr --version en ambos extremos y herdr status para detectar desfases de versión cliente/servidor antes de depender de la barra lateral multi-máquina.

Qué se rompe (y cómo arreglarlo)

Todo lo que sigue es un síntoma que realmente encontrarás. Cada uno está titulado de la forma en que lo buscarías.

Moshi no muestra la pestaña Herdr (PATH de SSH)

Síntoma: Moshi conecta, obtienes un shell, pero la pestaña Herdr está vacía o falta.

Causa: herdr no está en el PATH de un comando SSH no-login y no interactivo. ~/.bashrc no se ejecuta para ssh host 'command -v herdr'. Además: solo se listan los servidores Herdr en ejecución.

Solución:

bash
ssh you@vps 'command -v herdr'      # if empty, that is the bug
sudo ln -sf ~/.local/bin/herdr /usr/local/bin/herdr
# or set PATH in ~/.ssh/environment

Luego asegúrate de que un servidor realmente está en ejecución: ssh you@vps herdr inicia uno. Reconecta en Moshi y el selector se puebla.

Mosh no conecta (rango UDP, locale, mosh-server)

Síntoma: Mosh agota el tiempo de espera, o la sesión inicia y muere inmediatamente con un error de locale.

Tres causas, en el orden en que las revisaría:

  1. UDP 60000-61000 bloqueado. sudo ufw allow 60000:61000/udp y revisa también las ACLs de red de tu proveedor.
  2. Sin locale UTF-8 en una imagen mínima. Texto del error: The locale requested by LC_CTYPE=UTF-8 isn't available here. Corrige con sudo locale-gen en_US.UTF-8 && sudo update-locale LANG=en_US.UTF-8.
  3. mosh-server no instalado. sudo apt install -y mosh.

Nota la trampa: si Mosh falla, Moshi recurre silenciosamente a SSH, que parece funcionar hasta que caminas entre habitaciones y la pantalla se congela.

moshi-hook dice herdr: not found (PATH de systemd)

Síntoma: moshi-hook status no encuentra herdr, pero la app lo detecta bien en un shell interactivo.

Causa: el daemon de usuario de systemd tiene su propio PATH y no ve ~/.local/bin.

Solución:

bash
systemctl --user edit moshi-hook.service
ini
[Service]
Environment="MOSHI_HERDR_PATH=/absolute/path/to/herdr"
bash
systemctl --user daemon-reload && systemctl --user restart moshi-hook.service
moshi-hook status

Relacionado: los hooks no se disparan para sesiones de agentes iniciadas antes de moshi-hook install. Reinicia esos paneles de agentes. En macOS, Homebrew ahora requiere brew trust --formula rjyo/moshi/moshi-hook para el tap de terceros.

El panel de atajos no hace nada (el prefijo no coincide)

Síntoma: tocar los botones de atajo de Herdr en Moshi no produce ningún efecto visible.

Causa: el panel envía el prefijo configurado en Moshi, pero Herdr escucha en otro diferente.

Solución: Settings → Shortcuts → Herdr en Moshi debe coincidir con el prefijo en ~/.config/herdr/config (predeterminado Ctrl-B). Después de cambiar la configuración de Herdr, herdr server reload-config. Reasigna los gestos en Settings → Input → Gestures mientras estás ahí.

Desconectar no es reiniciar (el reinicio del servidor mata los paneles)

Esta es la semántica que todos entienden mal una vez, normalmente en un mal momento.

Desconectar no es reiniciar

Ctrl+B q (desconectar) deja todos los procesos en ejecución. herdr server stop, y la mayoría de los flujos de herdr update que reinician el servidor, matan los procesos de los paneles. El layout y los directorios vuelven. Tu servidor de desarrollo en ejecución no. Programa los reinicios del servidor como los reinicios que son.

Evento Procesos de panel Layout Conversaciones de agentes
Desconexión de cliente (Ctrl+B q) vivos intacto intactas
Caída de SSH/Mosh vivos intacto intactas
herdr server stop / reinicio muertos restaurado reanudables vía IDs de sesión registrados
Reinicio del VPS muertos restaurado reanudables vía IDs de sesión registrados

Por qué sobreviven las conversaciones: las integraciones de ciclo de vida (herdr integration install claude|codex) registran los IDs de sesión nativos, así que codex resume <id> (o el equivalente de Claude) continúa donde lo dejaste. Los contenidos del terminal no vuelven, por eso existe [experimental] pane_history = true en la configuración. Déjalo desactivado a menos que aceptes que el contenido de la pantalla (incluidos secretos en el scrollback) se escriba en disco.

Revisa herdr status para detectar desfases de versión cliente/servidor después de cualquier actualización. herdr update --handoff es la ruta sin tiempo de inactividad y sigue siendo experimental. Si los estados de los agentes parecen incorrectos, herdr agent explain <target> --verbose es la herramienta de diagnóstico. tmux anidado dentro de un panel Herdr oculta los agentes a la detección, y los agentes en sandbox/envueltos necesitan HERDR_AGENT=claude <wrapper> -- claude.

Una advertencia más con mordida: ambos proyectos son pre-1.0 y se mueven rápido. Fija las versiones, re-verifica este tutorial trimestralmente, y no auto-actualices el agente del host un viernes.

Reversión / desmantelamiento

¿Quieres que todo desaparezca? En orden:

bash
# stop the doorbell and remove its hooks from ~/.claude/settings.json, ~/.codex/hooks.json
systemctl --user disable --now moshi-hook.service   # or: brew services stop moshi-hook
sudo loginctl disable-linger $USER

# stop the herd (this kills pane processes - see above)
herdr server stop

# close the Mosh range if you opened it publicly
sudo ufw delete allow 60000:61000/udp

Desempareja desde Moshi → Settings → Hooks. El VPS en sí y sus árboles de trabajo permanecen hasta que elimines la máquina; respáldalos antes de hacerlo.

Cuánto cuesta: la ruta gratuita vs Moshi Pro

Obtuve los precios de abajo de las páginas de los proveedores el 2026-09-27. Verifica antes de comprar; ambos lados de este stack publican semanalmente.

Pieza Costo Qué obtienes
VPS (Hetzner Cloud clase CX22) ~€4-5/mes 2 vCPU / 4 GB, cómodo para unos pocos agentes
Herdr $0 binario único Apache-2.0, sin cuenta
moshi-hook $0 daemon gratuito, aprobaciones push
Nivel gratuito de Moshi $0 terminal SSH, sesiones ilimitadas, push de agentes con límite de frecuencia
Moshi Pro $7.99/mes, $69.99/año, ~$199 vitalicia (web) Mosh, UI de Herdr/tmux/Zellij, pegado de imágenes, visor de diffs, bandeja ilimitada, 3 dispositivos

El precio vitalicio es $199 en el sitio web y $249 vía compra dentro de la App Store al momento de escribir. Compra en la web si vas por la vitalicia.

Para el host, Hetzner Cloud es mi predeterminado, y un VPS de Hostinger es una alternativa económica razonable (KVM, NVMe) si su promo actual supera a Hetzner ese día. Elijas lo que elijas, haz benchmark del VPS antes de comprometerte, y ojea lo que las subidas de precios de VPS de 2026 hicieron a los niveles que estás comparando.

La ruta gratuita es real

Moshi gratis + SSH puro + herdr sobre SSH, sin moshi-hook, es una configuración funcional de 15 minutos. Pierdes el roaming, la UI del multiplexor y las aprobaciones rápidas, pero puedes ver la manada desde tu teléfono y probar el flujo de trabajo antes de gastar nada. Yo lo ejecutaría una semana antes de pagar Pro.

Lo que empequeñece todo esto: los costos de suscripción de los agentes. Claude Max o equivalente está un orden de magnitud por encima del plano de control. El VPS y la app son la parte barata.

Nota operativa sobre el radio de impacto: ese VPS contiene tus árboles de trabajo y tus inicios de sesión de agentes. La misma disciplina de respaldo que cualquier otro servidor con datos que te importan. Respaldos compatibles con S3, fuera de la máquina, restauraciones probadas.

Seguridad: qué permanece en el host

La propia documentación de Moshi lo expresa bien: es «una ventana y un timbre, no un sandbox».

Una ventana y un timbre, no un sandbox

Tu código, credenciales de git e inicios de sesión de agentes nunca abandonan el host. Moshi no aloja tu shell, tus repos ni el proceso del agente. El visor de diffs se sirve a través de tu sesión desde el gateway del host, no se sube a un tercero.

Lo que cruza el cable: tráfico de terminal (SSH o Mosh, ambos cifrados) y eventos de aprobación limitados a 256 caracteres. Lo que ve el gateway de Moshi: tráfico de retransmisión push, igual que cualquier servicio push.

Postura que yo desplegaría:

  • SSH solo por clave, sin autenticación por contraseña, y protección biométrica de claves en el lado del teléfono.
  • Prefiere una tailnet sobre SSH público + UDP si puedes. Los docs de Moshi recomiendan Tailscale cuando es posible, y un servidor de control de Tailscale autoalojado con Headscale mantiene el plano de control en tu propio VPS. (Mosh funciona sobre una tailnet mientras la tailnet pase UDP.)
  • Ten en cuenta que loginctl enable-linger mantiene los servicios de usuario en ejecución después del cierre de sesión. Eso es lo que quieres para moshi-hook, y también es un hecho a recordar durante la limpieza de incidentes.
  • Respalda los árboles de trabajo. Los agentes que nunca duermen generan mucho trabajo que nunca has revisado.
  • Trata ambos proyectos como cadena de suministro pre-1.0: fija versiones, vigila las notas de lanzamiento, y no ejecutes instaladores curl | sh en hosts que contienen secretos de producción sin leerlos primero.

Moshi vs las alternativas: terminales móviles para agentes de codificación IA

Corto y honesto, no un listado.

Herramienta Qué es Consciencia de agentes Aprobaciones push Costo
Moshi + Herdr terminal móvil + multiplexor de agentes nativa (estados, selector de sesiones) moshi-hook gratis, Pro $7.99/mes
Claude Code Remote Control remoto propio de Claude solo Claude sí incluido con Claude
Happy cliente móvil estilo chat modelo de chat sí gratis
Termius / Blink / JuiceSSH clientes SSH genéricos ninguna (sondeo de scrollback) no varía
TermRover terminal móvil Herdr «en camino» no varía
cmux / Conductor orquestación de escritorio (Mac) sí n/a varía
herdr-mobile-relay relay web autoalojado DIY Herdr DIY $0 + tu tiempo
ccgram puente de Telegram para notificaciones de Herdr solo notificaciones vía Telegram $0

La forma limpia de elegir: Claude Code Remote Control extiende Claude, y es excelente si solo usas Claude y quieres cero configuración. Moshi extiende la máquina, así que cualquier CLI de agente funciona y tu flujo de trabajo es un terminal real. Happy es el punto medio con forma de chat. Termius y Blink son grandes clientes SSH sin concepto de un agente esperándote. herdr-mobile-relay y ccgram son la ruta DIY si quieres push sin dependencia de una app. Uno para vigilar en lugar de elegir hoy: Superlogical Rex tiene un cliente iOS en desarrollo como parte de su multiplexor de terminal, pero aún no ha salido.

Para el stack de este artículo: control a nivel de terminal, visibilidad del estado del agente y un VPS de €4 como host. Esa combinación es para lo que está hecho Moshi + Herdr.

FAQ

¿Puedo ejecutar Claude Code en mi teléfono directamente?

No. No existe un Claude Code nativo para teléfono (ni Codex, ni OpenCode). El agente se ejecuta en un host que tú controlas y el teléfono es un cliente: una ventana de terminal más un timbre de notificaciones. Esto es una característica, no un apaño. Tu repo, credenciales y acceso a modelos permanecen en el host, y el agente conserva una máquina con CPU y disco reales. Si estás eligiendo qué agente de terminal ejecutar en ese host, la comparación OpenCode vs Pi Agent cubre dos opciones sólidas.

¿Mi código o sesión de agente se sube a algún lugar?

No. El proceso del agente, los repos y las credenciales de git viven en tu VPS. El tráfico del terminal está cifrado con SSH/Mosh. Los eventos de aprobación a través de moshi-hook están limitados a 256 caracteres. El visor de diffs lo sirve un gateway en tu host a través de tu sesión, no se sube. Los servidores de Moshi retransmiten notificaciones push; no guardan tu código.

¿Qué pasa cuando el VPS se reinicia?

El layout y los directorios de trabajo se restauran. Los procesos de los paneles no: cualquier servidor de desarrollo o agente en ejecución en un panel desaparece. Las conversaciones de agentes vuelven vía los IDs de sesión registrados por herdr integration install, así que codex resume <id> (o el equivalente de Claude) continúa el hilo. Por eso un herdr server stop debe programarse como el reinicio que efectivamente es.

Ya uso tmux. ¿Por qué Herdr?

tmux sigue estando bien y deberías mantenerlo instalado como respaldo. Lo que Herdr añade a este flujo de trabajo: la barra lateral de estados de agentes (working/blocked/done), detección con integraciones de ciclo de vida e IDs de sesión reanudables, una API de socket Unix para que los scripts controlen agentes (herdr agent wait --until blocked), y soporte de primera clase en el selector de sesiones y panel de atajos de Moshi. Si no te importa el estado del agente y solo necesitas persistencia, tmux hace el trabajo.

Tu manada en tu bolsillo

La configuración es pequeña a propósito: Herdr para persistencia y estado, Moshi para la ventana con forma de teléfono, moshi-hook para el timbre. El host es un VPS de €4 que nunca duerme. Las partes caras (tu tiempo, tus suscripciones de agentes) quedan intactas.

Antes de darlo por terminado, ejecuta la lista de verificación de extremo a extremo. Cada ítem detecta una clase de fallo que el anterior no puede:

  • El agente funciona en un escritorio en el host primero, sobre SSH puro.
  • mosh conecta desde el teléfono y sobrevive a un cambio de modo avión.
  • La sesión de Herdr persiste a través de esa caída de red (el panel sigue vivo).
  • Un prompt de permiso real ejercitado de extremo a extremo desde la pantalla de bloqueo.
  • herdr status, moshi-hook status y herdr agent explain todos limpios.
  • Reinicia el VPS una vez a propósito y anota exactamente qué vuelve (layout sí, procesos no).
  • Mide la RAM/CPU en reposo de la manada. Si una máquina de 2 vCPU / 4 GB ya está sudando, la solución es menos agentes concurrentes, no un VPS más grande.

Si aún no has provisionado y protegido el host, empieza por ahí. Todo en este artículo asume una máquina en la que puedes confiar.

Protege tu VPS primero