Volver a la lista

Blog

La arquitectura detrás de Tactic Remote: Construyendo una plataforma de codificación distribuida

Cómo diseñamos un sistema que mantiene tu Mac como la única fuente de verdad mientras cada interacción se siente instantánea en tu iPhone.

Publicado Etiquetas: ingeniería / arquitectura / análisis profundo
Blog

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

Ver categoría

Construir una plataforma de desarrollo remoto suena sencillo sobre el papel: ejecutar código en una máquina, mostrarlo en otra. En la práctica, los desafíos de ingeniería son profundos. Cada milisegundo de latencia erosiona la confianza. Cada conexión interrumpida arriesga la pérdida de trabajo. Cada atajo de seguridad invita a la catástrofe.

Este artículo recorre la arquitectura de Tactic Remote — las decisiones que tomamos, las concesiones que aceptamos y los principios que guían nuestra dirección técnica.

El problema central

Los desarrolladores dependen cada vez más de herramientas de codificación asistidas por IA como Claude Code, pero estas herramientas están atadas a terminales de escritorio. No puedes alejarte de tu escritorio sin perder visibilidad sobre lo que está haciendo tu asistente de IA. Tactic Remote existe para resolver esto: tu Mac sigue siendo el motor de ejecución, mientras que tu iPhone se convierte en una superficie de control de primera clase.

El desafío es que esto se sienta fluido en lugar de una torpe sesión de escritorio remoto.

Arquitectura en capas

Tactic Remote está construido en cuatro capas distintas, cada una con una frontera de responsabilidad clara:

Capa 1: El motor de ejecución (Mac)

En la base se encuentra tu Mac ejecutando Claude Code dentro de una sesión tmux. Elegimos tmux deliberadamente — proporciona persistencia de procesos, multiplexación de sesiones y una interfaz bien conocida para el control programático del terminal. La app complementaria del Mac gestiona el ciclo de vida de tmux, monitorea la salud de las sesiones y expone una API HTTP ligera para los consumidores superiores.

Decisiones de diseño clave en esta capa:

  • Aislamiento de procesos: Cada sesión de Claude Code se ejecuta en su propia ventana tmux, previniendo la contaminación cruzada entre proyectos.
  • Persistencia de estado: Las sesiones tmux sobreviven a reinicios de la app, caídas de red e incluso ciclos de suspensión del sistema.
  • Huella mínima: La app complementaria añade una sobrecarga de CPU y memoria insignificante cuando está inactiva.

Capa 2: La capa de transporte

Entre tu Mac y tu iPhone se encuentra el transporte — ya sea una conexión directa de red local o un Cloudflare Tunnel para acceso remoto.

El modo local usa mDNS/Bonjour para el descubrimiento de dispositivos y HTTP directo para la transferencia de datos. Esto ofrece tiempos de ida y vuelta inferiores a 10ms en una buena red, haciendo que la transmisión del terminal se sienta instantánea.

El modo Cloudflare Tunnel enruta el tráfico a través de la red edge de Cloudflare. Esto añade latencia (típicamente 30-80ms) pero permite el acceso desde cualquier lugar — una cafetería, un tren de cercanías o al otro lado del mundo. Aprovechamos el daemon cloudflared de Cloudflare en el lado del Mac, que establece una conexión solo de salida, lo que significa que no es necesario abrir puertos en tu firewall.

┌─────────────┐         ┌──────────────────┐         ┌─────────────┐
│   iPhone    │◄───────►│  Capa transporte  │◄───────►│     Mac     │
│  (Control)  │   HTTP  │  Local / CF Edge  │   HTTP  │ (Ejecución) │
└─────────────┘         └──────────────────┘         └─────────────┘

Capa 3: El gestor de sesiones

El gestor de sesiones es el cerebro de la operación. Ejecutándose en el Mac, mantiene un registro de sesiones tmux activas, rastrea su estado (inactiva, en ejecución, esperando entrada) y gestiona la compleja coreografía de la reconexión.

Cuando tu iPhone se reconecta después de una interrupción de red, el gestor de sesiones debe responder varias preguntas en milisegundos:

  1. ¿Qué sesiones estaban activas antes de la desconexión?
  2. ¿Se ha acumulado salida de terminal durante el intervalo?
  3. ¿Alguna sesión está esperando la aprobación del usuario para operaciones sensibles?
  4. ¿Cuál es el estado actual del proceso de cada instancia de Claude Code?

Resolvemos esto mediante una combinación de event sourcing (registrando transiciones de estado como eventos inmutables) y caché de instantáneas (capturando periódicamente el estado del búfer del terminal para una restauración rápida).

Capa 4: La interfaz móvil

La app de iPhone intencionalmente no es un emulador de terminal. Tomamos una decisión temprana de que meter un terminal completo en la pantalla de un teléfono crearía una experiencia de usuario terrible. En cambio, la capa móvil proporciona:

  • Vista de conversación: Ver el razonamiento y las salidas de Claude en un formato legible.
  • Vista rápida del terminal: Acceso de un vistazo a la salida cruda del terminal cuando sea necesario.
  • Controles de aprobación: Aprobar/rechazar con un toque para operaciones que requieren confirmación humana.
  • Puente de notificaciones: Notificaciones push para finalizaciones de tareas y solicitudes de aprobación.

Patrones de resiliencia

Las redes del mundo real son poco fiables. Los teléfonos pierden señal en los ascensores. El Wi-Fi se cae cuando caminas entre habitaciones. Nuestra estrategia de resiliencia se construye sobre tres principios:

Asumir que la desconexión es normal. Cada componente está diseñado para funcionar de forma independiente durante una partición de red. El Mac continúa ejecutando. El iPhone almacena en caché el último estado conocido. La reconexión activa un protocolo de reconciliación de estado, no un reinicio completo.

Nunca perder trabajo. La salida del terminal se almacena en búfer en el lado del Mac con retención configurable. Incluso si tu iPhone está desconectado durante una hora, reconectarse te muestra todo lo que sucedió.

Fallar visiblemente. Cuando algo sale mal, el usuario ve un mensaje de error honesto, no un spinner que nunca se resuelve. Invertimos significativamente en indicadores de estado de conexión que reflejan la realidad en segundos.

Seguridad por diseño

Ejecutar código generado por IA de forma remota plantea serias cuestiones de seguridad. Nuestro modelo de seguridad se cubre en profundidad en nuestra documentación del modelo de seguridad, pero los aspectos arquitectónicos destacados incluyen:

  • Transporte de confianza cero: Toda comunicación está cifrada, ya sea local (TLS) o por túnel (capa de cifrado de Cloudflare).
  • Puertas de aprobación: Las operaciones sensibles (escritura de archivos, comandos de shell, acceso a red) requieren aprobación explícita desde el móvil antes de la ejecución.
  • Sin dependencia de la nube: Tu código nunca sale de tu Mac. Tactic Remote es un plano de control, no un plano de datos.

Lo que viene

La arquitectura nunca está terminada. Estamos trabajando activamente en soporte multi-Mac (conectar un iPhone a múltiples máquinas de desarrollo), sesiones colaborativas (múltiples miembros del equipo monitoreando la misma ejecución de Claude Code) e integraciones más profundas con IDEs. Cada uno de estos requiere extender la arquitectura sin comprometer la fiabilidad que hemos construido.

Si estás construyendo herramientas distribuidas para desarrolladores, esperamos que esta visión general sea útil. Y si quieres experimentar esta arquitectura de primera mano, comienza aquí.

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.