Volver a la lista

Blog

Ejecuta Claude Code en una VM en la nube o un servidor Linux headless y contrólalo desde tu iPhone

El agente puede ejecutarse en cualquier máquina Linux siempre encendida — una VM en la nube, una máquina de desarrollo remota, un contenedor Docker — y tu iPhone se convierte en la superficie de control, estés donde estés.

Publicado Etiquetas: Primeros pasos / linux / cloud / systemd / claude-code / codex / amp / remote-coding / mobile-ai-coding
Blog

Sigue las novedades de producto e ingeniería de esta categoría.

Ver categoría

La mayoría de los usuarios de Tactic Remote tienen el servidor corriendo en el mismo Mac donde escriben código. Es el punto de partida más natural. Pero el equipo anfitrión no tiene por qué ser tu portátil, ni tiene que estar en el mismo escritorio.

npx tacticremote se ejecuta en cualquier máquina Linux con Node.js — una VM en la nube, una máquina de desarrollo remota, un servidor headless debajo del televisor, o un contenedor Docker. Una vez en marcha, la app de iOS se conecta mediante Cloudflare Tunnel y te ofrece el mismo Chat Mode, Terminal Mode, Quick Prompts, notificaciones push y aprobaciones con un toque que obtienes en la red local.

Esta guía trata precisamente de esa configuración: un agente que se ejecuta de forma continua en un servidor remoto y un teléfono que lo controla desde cualquier lugar.

Por qué ejecutar el agente en un servidor remoto

Hay varias razones para mover el servidor fuera de tu portátil.

Trabajos de larga duración sin el portátil enchufado. Una refactorización de varias horas, una suite de pruebas extensa o una sesión de programación exploratoria pueden superar tu disposición a mantener la tapa abierta. Una VM en la nube se ejecuta de forma continua. Cierras el portátil y el trabajo sigue adelante.

Acceso permanente desde el teléfono. Si el servidor siempre está activo, no necesitas iniciarlo antes de salir de casa. Abres la app y la sesión está ahí.

Cargas de trabajo similares a CI. Algunos equipos usan agentes de IA para redactar parches, ejecutar suites de pruebas contra ramas o pre-revisar pull requests. Un servidor Linux dedicado — separado de las máquinas individuales de los desarrolladores — es un anfitrión natural para eso.

Margen de recursos. Delegar tareas del agente a una máquina con más CPU o RAM, o a una máquina cercana al endpoint de la API, puede reducir el tiempo real de ejecución en tareas grandes.

No se requiere Mac. Si tu máquina principal es una estación de trabajo Windows pero tienes un servidor Linux disponible, puedes ejecutar el agente allí y seguir controlándolo desde el iPhone.

Requisitos previos

Antes de seguir los pasos a continuación, necesitas:

  • Un servidor o VM Linux accesible desde internet (cualquier distribución; Ubuntu 22.04 o posterior es con lo que realizamos las pruebas)
  • Node.js 16 o posterior instalado (node --version para verificarlo)
  • El agente de IA que quieras usar, instalado y con sesión iniciada en ese servidor:
    • Claude Code: sigue las instrucciones de instalación de Anthropic y luego claude login
    • Codex: instala y autentica según la documentación de OpenAI
    • Amp: instala e inicia sesión según la documentación de Amp
  • La app de iOS instalada en tu iPhone (App Store)

No necesitas la app de menú bar para Mac ni la app de Windows — son envoltorios GUI opcionales para uso en escritorio. En un servidor headless, npx tacticremote es todo lo que necesitas en el lado del servidor.

Instalar y ejecutar el servidor

npx tacticremote descarga y ejecuta el servidor sin necesidad de una instalación global. En un servidor nuevo:

npx tacticremote

En la primera ejecución, muestra algo como:

Tactic Remote server listening on port 8765
API Key: tr_xxxxxxxxxxxxxxxxxxxx
Pair with QR or enter the address manually in the iOS app

Para un servidor remoto (sin red local, sin mDNS), te conectarás mediante Cloudflare Tunnel. El API Key que se muestra es el que autentica tu iPhone. Cópialo — lo introducirás en la app durante el emparejamiento.

Si quieres fijar una versión específica en lugar de obtener siempre la más reciente:

npx tacticremote@latest

Mantenerlo en ejecución con systemd

Ejecutar npx tacticremote en una shell levanta el servidor, pero el proceso muere cuando la sesión de shell termina. Para ejecutarlo como un servicio en segundo plano que se inicie al arrancar y se reinicie ante fallos, usa systemd.

Crea un archivo de unidad. Sustituye youruser por el usuario Linux que debe ser el propietario del proceso y ajusta WorkingDirectory a un directorio de proyecto si quieres que el agente arranque en una carpeta específica.

# /etc/systemd/system/tacticremote.service
[Unit]
Description=Tactic Remote server
After=network-online.target
Wants=network-online.target
 
[Service]
Type=simple
User=youruser
WorkingDirectory=/home/youruser
ExecStart=/usr/bin/npx tacticremote
Restart=on-failure
RestartSec=5
Environment=HOME=/home/youruser
 
[Install]
WantedBy=multi-user.target

Habilítalo e inícialo:

sudo systemctl daemon-reload
sudo systemctl enable tacticremote
sudo systemctl start tacticremote
sudo systemctl status tacticremote

Consulta los registros en cualquier momento con:

journalctl -u tacticremote -f

Algunas notas sobre el archivo de unidad:

  • After=network-online.target garantiza que la red esté disponible antes de que arranque el servidor, lo cual importa al inicio si Cloudflare Tunnel necesita conectarse.
  • Restart=on-failure con un retardo de 5 segundos significa que el servidor se recupera automáticamente de errores transitorios sin reiniciarse de forma inmediata en un bucle sin pausa.
  • Si npx no está en /usr/bin/npx, encuentra la ruta correcta con which npx y actualiza ExecStart en consecuencia. También puedes usar la ruta completa a un binario tacticremote instalado de forma global si prefieres npm install -g tacticremote sobre npx.
  • La línea Environment=HOME garantiza que Node/npm pueda encontrar la caché y los paquetes globales bajo el directorio home del usuario correcto, lo cual puede importar cuando se ejecuta con escalado de privilegios.

Conectar el iPhone mediante Cloudflare Tunnel

En un servidor remoto no hay red local compartida, por lo que el descubrimiento mDNS no funciona. El método de conexión para esta configuración es Cloudflare Tunnel.

Tactic Remote tiene Cloudflare Tunnel integrado — no se necesita instalar cloudflared por separado para el túnel en sí. Actívalo pasando un indicador al iniciar el servidor:

npx tacticremote --tunnel --api-key YOUR_SECRET_KEY

O si lo estás ejecutando mediante systemd, actualiza el archivo de unidad:

ExecStart=/usr/bin/npx tacticremote --tunnel --api-key YOUR_SECRET_KEY

Cuando Cloudflare Tunnel está activo, el servidor muestra una URL de trycloudflare.com:

Cloudflare Tunnel active: https://example-random-name.trycloudflare.com
API Key: tr_xxxxxxxxxxxxxxxxxxxx

En el iPhone:

  1. Abre Tactic Remote
  2. Toca Add Host y elige Manual
  3. Introduce la URL de trycloudflare.com como dirección del servidor
  4. Introduce el API Key que aparece en la salida del servidor
  5. Toca Connect

La conexión está cifrada de extremo a extremo mediante Cloudflare. Tu código y la salida del terminal no pasan por ningún relay en la nube de Tactic Remote — no existe tal relay. El tráfico va del servidor al edge de Cloudflare, a través del túnel, y directamente a la app de iOS.

Para una configuración permanente, es posible que quieras usar un Cloudflare Tunnel con nombre vinculado a tu propio dominio en lugar de la dirección efímera trycloudflare.com. Eso mantiene la URL de emparejamiento estable entre reinicios. Consulta la guía de configuración de Cloudflare Tunnel para esa opción.

Nota de seguridad

En esta configuración — servidor remoto, Cloudflare Tunnel, API Key — las propiedades de seguridad relevantes son:

  • El puerto 8765 del servidor no necesita estar abierto a internet. Cloudflare Tunnel crea una conexión saliente desde tu servidor al edge de Cloudflare; no es necesario exponer ningún puerto entrante.
  • La autenticación por API Key significa que solo los dispositivos que conocen la clave pueden conectarse. Establece una clave robusta o usa la generada aleatoriamente.
  • El modo LAN usa ws:// sin cifrar. En un servidor remoto no estás usando el modo LAN, por lo que esto no aplica — el tráfico de Cloudflare Tunnel usa TLS.

Si tu servidor está dentro de una VPC privada, Cloudflare Tunnel es la forma de acceder a él sin abrir agujeros en el cortafuegos.

Multi-agente en el servidor

La configuración de servidor remoto admite las mismas opciones de agente que un anfitrión Mac o Windows local. Cuando creas una nueva sesión en la app de iOS, un selector por sesión te permite elegir Claude Code, Codex o Amp — cualquiera de los agentes instalados en el servidor.

Cada sesión es independiente. Puedes tener una sesión de Claude Code ejecutando una tarea de pruebas larga y una sesión de Codex en una rama diferente al mismo tiempo. La app de iOS alterna entre ellas.

Las notificaciones push funcionan en esta configuración. Cuando el agente termina, se detiene para pedir aprobación o sale inesperadamente, tu iPhone recibe una notificación. Para trabajos de larga duración que revisas periódicamente en lugar de observar activamente, esta es la funcionalidad clave — no necesitas mantener la app abierta.

Ejecutar en Docker

Si tu entorno de servidor está basado en Docker, puedes ejecutar npx tacticremote dentro de un contenedor. Las principales consideraciones son:

  • El contenedor necesita el agente (Claude Code, Codex, Amp) instalado y autenticado
  • El puerto 8765 debe estar expuesto si usas el modo LAN (no es necesario para Cloudflare Tunnel)
  • Para Cloudflare Tunnel, el contenedor necesita acceso a internet saliente
  • La gestión de procesos dentro del contenedor (usa CMD o un supervisor en lugar de systemd)

Un fragmento mínimo de Dockerfile:

RUN npm install -g tacticremote
CMD ["tacticremote", "--tunnel", "--api-key", "YOUR_SECRET_KEY"]

La autenticación persistente del agente (el directorio ~/.claude de Claude Code, por ejemplo) debe montarse como un volumen para que sobreviva a los reinicios del contenedor.

Advertencias

El agente sigue necesitando credenciales en el servidor. npx tacticremote no gestiona la autenticación de Claude Code, Codex o Amp. Esos agentes deben estar instalados e iniciados con sesión en el servidor antes de que Tactic Remote pueda iniciar sesiones con ellos.

Cloudflare Tunnel añade una pequeña latencia adicional. Para uso interactivo esto suele ser imperceptible (menos de 100 ms en la mayoría de las regiones). Para una salida de terminal de muy alto rendimiento es perceptible. El modo LAN es más rápido cuando está disponible, pero requiere que el teléfono y el servidor estén en la misma red.

La versión de Node.js importa. Node 16 es el mínimo; se recomienda Node 20 LTS. Compruébalo con node --version.

npx descarga el paquete en la primera ejecución. Si tu servidor tiene reglas de salida estrictas, añade el registro de npm a la lista blanca. Alternativamente, instala de forma global con npm install -g tacticremote y usa tacticremote directamente en el archivo de unidad de systemd.

tmux se usa para la persistencia de sesiones en Linux. Asegúrate de que tmux esté instalado (apt install tmux o equivalente). Si tmux no está presente, las sesiones no persistirán entre reconexiones.

El nivel gratuito de la app de iOS es funcional para esta configuración. Chat Mode, Terminal Mode, notificaciones push y multi-agente están disponibles de forma gratuita. Pro añade funciones adicionales. Precios: Gratis / Pro 2,99 USD al mes / 19,99 USD al año.


Ejecutar el agente en un servidor siempre encendido es el uso de mayor impacto del modelo de control remoto: el agente trabaja durante la noche, durante reuniones, durante vuelos, y tu teléfono es la ventana desde la que compruebas el progreso.

Si lo estás configurando por primera vez, empieza con el enfoque básico de npx tacticremote --tunnel --api-key YOUR_SECRET_KEY, confirma la conectividad de extremo a extremo desde el iPhone y luego incorpora el servicio systemd para mayor fiabilidad.

Relacionado

Prueba Tactic Remote

Controla tus agentes de programación desde el móvil

Conéctate a Claude Code, Codex y otros agentes en tu Mac, Windows o Linux. Consulta el progreso y envía la siguiente instrucción desde el iPhone o iPad.