Volver a la lista

Blog

Mi flujo diario con Tactic Remote: sesiones, notificaciones y el ciclo de revisión móvil

Cómo ejecuto tres agentes Claude Code en paralelo, recibo notificaciones push cuando terminan y reviso todo desde mi iPhone — la rutina diaria real, no la teoría.

Publicado Etiquetas: flujo de trabajo / guía / productividad / práctico
Blog

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

Ver categoría

Ejecuto Claude Code en tres proyectos simultáneamente. Cada uno trabaja en una tarea diferente — frontend, backend, tests. Cuando cualquiera termina o necesita mi aprobación, recibo una notificación push en mi teléfono. Toco, reviso, apruebo y me voy.

Este es mi flujo de trabajo diario real con Tactic Remote. Sin teoría. Solo lo que hago cada día.

Resumen: Tres sesiones tmux, una por proyecto o tarea. Los hooks auto-configurados por la app de Mac envían notificaciones push. Revisa desde tu iPhone, aprueba con un toque, sigue caminando.

La distribución de sesiones

Organizo las sesiones tmux por proyecto, no por herramienta. Cada proyecto tiene su propia sesión con su propio directorio de trabajo:

┌─────────────────────────────────────────────────┐
│                  Tu Mac                          │
│                                                  │
│  tmux session: webapp      (~/code/webapp)       │
│    └─ Claude: "Refactorizando auth a JWT..."     │
│                                                  │
│  tmux session: api         (~/code/api)          │
│    └─ Claude: "Añadiendo rate limiting..."       │
│                                                  │
│  tmux session: mobile      (~/code/mobile-app)   │
│    └─ Claude: "Corrigiendo crash de nav..."      │
│                                                  │
└─────────────────────────────────────────────────┘
                      │
                      │  notificación push:
                      │  "Claude Task Completed — webapp"
                      ▼
              ┌──────────────┐
              │   iPhone     │
              │  Claude      │
              │  Remote      │
              └──────────────┘

¿Por qué sesiones en lugar de ventanas? Porque cada instancia de Claude Code necesita su propio directorio de trabajo y su propio buffer de scrollback de 50,000 líneas. Las sesiones dan aislamiento limpio — cambiar entre proyectos es cambiar entre sesiones, no recordar qué número de ventana corresponde a qué tarea.

Crear sesiones desde tu teléfono

Desde la app Tactic Remote:

  1. Toca el selector de sesiones (parte superior de la pantalla)
  2. Toca "Crear sesión"
  3. Nómbrala (ej. webapp)
  4. Navega al directorio del proyecto usando el selector de rutas
  5. Toca "Iniciar Claude"

Internamente, esto ejecuta:

tmux new-session -d -s webapp -c ~/code/webapp
tmux set-option -t webapp history-limit 50000
tmux send-keys -t webapp -l 'claude'
tmux send-keys -t webapp C-m

Repite para api y mobile. Tres sesiones, tres instancias independientes de Claude Code, cada una vinculada al proyecto correcto.

El pipeline de notificaciones

Esta es la parte que hace práctico todo el flujo. Sin notificaciones, tendrías que revisar constantemente el teléfono para ver si Claude terminó. Con ellas, puedes irte de verdad.

Cómo se configura

La app de Mac auto-configura los hooks de Claude Code al iniciar el servidor. No requiere configuración manual. Escribe tres scripts shell en ~/.claude/hooks/:

#!/bin/bash
# claude-remote-stop.sh (auto-generado)
 
PORT="${CLAUDE_REMOTE_PORT:-8765}"
HOOK_SERVER_URL="http://localhost:${PORT}/hook"
 
TMUX_SESSION=""
if [ -n "$TMUX" ]; then
    TMUX_SESSION=$(tmux display-message -p '#S')
fi
 
PROJECT="$(basename "$PWD")"
TIMESTAMP=$(date +%s)
 
curl -s -X POST "$HOOK_SERVER_URL" \
    -H "Content-Type: application/json" \
    -d "{\"event\":\"Stop\",\"project\":\"$PROJECT\",\"tmux_session\":\"$TMUX_SESSION\",\"timestamp\":$TIMESTAMP}" \
    > /dev/null 2>&1 &
exit 0

Luego registra estos scripts en ~/.claude/settings.json para que Claude Code los llame en eventos del ciclo de vida:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "*",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/claude-remote-stop.sh" }]
      }
    ],
    "Notification": [
      {
        "matcher": "*",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/claude-remote-notification.sh" }]
      }
    ]
  }
}

El flujo de eventos

Claude termina la tarea
    │
    ▼
Hook de Claude Code se ejecuta: claude-remote-stop.sh
    │
    ▼
curl POST http://localhost:8765/hook
  {"event": "Stop", "project": "webapp", "tmux_session": "webapp"}
    │
    ▼
Servidor Node.js recibe el hook → transmite a todos los clientes WebSocket
    │
    ├─► Si iPhone está en primer plano:
    │     Terminal muestra: 📢 [Claude] Proyecto completado
    │
    └─► Si iPhone está en segundo plano:
          Aparece notificación push del sistema
          Tocar → abre directamente la sesión

Deduplicación

Claude a veces dispara múltiples eventos hook en sucesión rápida — por ejemplo, cuando completa varias subtareas seguidas. La app iOS deduplica con una ventana de 3 segundos. Si el mismo evento (mismo proyecto, misma sesión, mismo timestamp) llega dos veces dentro de 3 segundos, el duplicado se descarta silenciosamente. Sin spam de notificaciones.

El ciclo de revisión

Así luce un ciclo de revisión típico:

Paso 1: Recibir la notificación

Mi teléfono vibra: "Claude Task Completed — webapp"

Estoy en una cafetería, en el sofá o caminando al almuerzo. No importa.

Paso 2: Revisar la salida

Toco la notificación. Tactic Remote abre directamente la sesión webapp. Veo la salida completa de Claude — qué cambió, qué pregunta, cualquier resultado de tests.

La vista de terminal preserva todo el formato de Claude Code: resaltado de sintaxis, colores de diff, caracteres de dibujo de caja para su interfaz. No es un resumen reducido — es la salida real del terminal, renderizada con colores ANSI en tu teléfono.

Si la salida es larga, desplázate hacia arriba. El buffer de scrollback de 50,000 líneas de tmux significa que nada se pierde, incluso si Claude produjo páginas de salida mientras estabas fuera. La app puede cargar hasta 5,000 líneas con "Cargar más."

Paso 3: Aprobar o redirigir

Tres escenarios comunes:

Claude está esperando permiso para ejecutar un comando:

Claude muestra algo como:

> Need permission to run: npm install bcrypt
> [y/n]

Toco el botón Y en la barra de herramientas del teclado. Un toque. Claude continúa.

Claude terminó y está en su prompt:

Escribo una nueva instrucción: "Ahora escribe tests para el módulo de auth." Envío. Claude empieza a trabajar en la siguiente tarea. Guardo el teléfono.

Claude encontró un error y necesita orientación:

Leo el error, escribo una respuesta explicando qué hacer diferente y la envío. Claude ajusta su enfoque.

Paso 4: Seguir adelante

Después de aprobar o redirigir, cambio a la siguiente sesión (toco el selector de sesiones, toco api) para verificar la otra tarea. Si aún está ejecutándose, me voy y espero la siguiente notificación.

El ciclo es: notificación → revisión → acción → seguir adelante. Cada ciclo toma de 30 segundos a 2 minutos, dependiendo de lo que Claude produjo.

Estrategia de tareas paralelas

Ejecutar múltiples instancias de Claude en paralelo es potente pero requiere disciplina. Esto es lo que he aprendido:

Da a cada tarea un brief claro y completo

No envíes instrucciones vagas como "trabaja en el frontend." Envía instrucciones específicas:

Refactoriza el módulo de autenticación en src/auth/ para usar tokens JWT
en lugar de cookies de sesión. Actualiza todos los route handlers que
verifican auth. Escribe tests. Ejecuta la suite de tests existente para
asegurarte de que nada se rompa.

Cuanto más específico el prompt, más tiempo puede trabajar Claude de forma autónoma antes de necesitar tu input. Prompts vagos significan más interrupciones.

Escalona los inicios

No inicies las tres sesiones al mismo tiempo exacto. Inicia una, espera a que empiece a trabajar (verás la salida inicial en unos 5 segundos), luego inicia la siguiente. Esto evita que las tres lleguen a prompts de permisos simultáneamente, lo que significaría tres notificaciones llegando a la vez.

Revisa la más ocupada al final

Al revisar, empieza con la sesión que lleva más tiempo ejecutándose — es la que más probablemente terminó o se atascó. La sesión iniciada más recientemente probablemente aún está trabajando.

Usa nombres de sesión que tengan sentido

Cuando recibes una notificación push que dice "Claude Task Completed — webapp," necesitas saber qué significa sin pensar. No nombres las sesiones session1, session2, session3. Nómbralas según proyectos o tareas.

Acciones rápidas que uso constantemente

La barra de herramientas del teclado en la parte inferior de la vista de chat tiene teclas especiales diseñadas para la interacción con Claude Code:

BotónQué haceCuándo lo uso
YEnvía la tecla yAprobar un prompt de permiso
NEnvía la tecla nRechazar un prompt de permiso
EnterEnvía EnterConfirmar una selección
EscEnvía EscapeCancelar o descartar
TabEnvía TabAutocompletar o ciclar opciones
Ctrl+CEnvía interrupciónDetener un proceso desbocado

Los botones Y y N existen específicamente porque los prompts de permisos de Claude Code son la interacción más común. Poder aprobar con un solo toque — sin escribir "y" en un teclado de teléfono — hace práctico el flujo móvil.

Mi .tmux.conf

Mínimo. No hago nada sofisticado:

# Scrollback grande — Claude produce MUCHA salida
set -g history-limit 50000
 
# Scroll con ratón (no se usa mucho desde el teléfono, pero útil en el escritorio)
set -g mouse on
 
# Iniciar numeración de ventanas en 1
set -g base-index 1

Tactic Remote configura el scrollback a 50,000 al crear sesiones, así que la configuración de .tmux.conf es un respaldo para sesiones que crees manualmente.

Cómo luce esto en la práctica

Una mañana típica:

8:00 AM — Me siento frente a mi Mac. Tres proyectos necesitan trabajo. Creo tres sesiones desde la app de Mac (o desde el iPhone — cualquiera funciona).

8:05 AM — Envío a Claude una tarea detallada en cada sesión. Camino a la cocina.

8:20 AM — Primera notificación: sesión api completada. Reviso en iPhone. Claude añadió rate limiting, los tests pasan. Envío siguiente tarea: "Ahora añade los headers de rate limit a los docs de la API."

8:35 AM — Segunda notificación: sesión webapp necesita aprobación. La abro. Claude quiere instalar una nueva dependencia. Verifico que luce bien. Toco Y. Camino a mi escritorio.

8:50 AM — Tercera notificación: sesión mobile completada. Reviso. Se ve bien. Inicio una nueva tarea.

9:00 AM — Me siento frente a mi Mac. Los tres proyectos avanzaron significativamente. Reviso los diffs en git, hago commit, push.

Una hora, tres proyectos, la mayor parte hecha mientras preparaba café y desayunaba. El ciclo de revisión por teléfono significa que Claude nunca estuvo bloqueado esperando que yo estuviera en mi escritorio.

Consejos

Activa las notificaciones inmediatamente. Los hooks se auto-configuran con la app de Mac, pero necesitas conceder permisos de notificación en tu iPhone cuando se te solicite. Hazlo en el primer arranque — todo el flujo depende de ello.

Mantén Tactic Remote en tu dock. Lo abrirás 20-30 veces al día durante sesiones de desarrollo activas. Tenerlo a un toque de distancia importa.

Confía en el scrollback. Cuando reconectas a una sesión, toda la salida está ahí. No necesitas preguntar a Claude "¿qué hiciste?" — desplázate hacia arriba y lee la salida del terminal directamente.

No micro-gestiones. El punto de este flujo es dar a Claude tareas sustanciales y alejarte. Si estás revisando cada 2 minutos, lo estás usando mal. Dale una tarea de 15 minutos, espera la notificación y luego revisa.


Para los detalles técnicos de cómo funcionan el servidor, tmux y las notificaciones internamente, consulta Ejecutar Claude Code remotamente desde tu teléfono. Para la configuración inicial, consulta Inicio rápido.

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.