Saltar al contenido
Proyectos

enjambre

En vivo usable

Reparto trabajos de Claude Code entre mi PC y una Mac mini; cada uno vuelve como una rama que reviso, con un visor en vivo de las máquinas.

Programación con agentes repartida en hardware propio: una PC con Windows orquesta y una Mac mini ejecuta trabajos de Claude Code sin interfaz, cada uno en su worktree de git. Cada trabajo vuelve como una rama revisable y una línea en un registro de solo añadir, y un visor local muestra nodos, trabajos y telemetría.

Tecnología

  • IA & agentes
  • Automatización
  • Infraestructura

Sector

  • Herramientas dev

Problema

Tengo una PC y una Mac mini que casi siempre están libres, y los agentes de código sin supervisión suelen correr con permisos de más o sin dejar rastro revisable. Quería repartir trabajo entre las dos con permisos mínimos y un resultado que pueda auditar.

Enfoque

Una PC con Windows orquesta y una Mac mini con Apple Silicon ejecuta los trabajos de Claude Code sin interfaz. La PC valida un contrato de tarea, elige la máquina con una tabla (routing.toml) y el estado vivo, y manda el trabajo por SSH. El nodo crea un worktree en una rama propia, ejecuta el agente dentro de tmux y deja un result.json. La PC trae la rama, la escanea en busca de secretos y la sube; el registro jobs.jsonl anota nodo, rama, tiempos, código de salida y consumo.

El visor es un tablero local que lee la telemetría de cada nodo (CPU, memoria con presión, swap, temperatura, red, procesos) y el registro de trabajos. Su modo demo corre el mismo código con un enjambre sintético, así que se puede enseñar sin exponer ninguna máquina real.

Límites: solo Mac y Windows hoy; los trabajos desatendidos necesitan el llavero de macOS desbloqueado tras un reinicio; los códigos de salida no verifican los criterios de hecho, así que revisar la rama sigue siendo humano. Código bajo MIT; tipografías del visor bajo SIL OFL 1.1.

Resultado

pruebas automáticas en verde
405
suite de la copia pública, Windows, 2026-10-11
latencia ssh al nodo por Ethernet (mediana de 10)
187ms
tutorial 29 §8, 2026-10-10

Qué haría después

  • Aprovisionar un nodo Linux: hoy solo hay Mac y Windows.
  • Sumar el portátil como tercer nodo, sin fecha comprometida.

Arquitectura

Un PC manda tareas de código a una Mac y recoge ramas de git: contrato, enrutado sin modelo, trabajos que sobreviven al cierre de la ventana, ledger y visor.

  • PC Windows
  • Mac mini
  • GitHub
  • Hostinger
  • Navegador del usuario
git pushcola en carpetas (state/queue)ssh + scpsondeo · recogerssh cat · livevisor.htmlPOST firmadogh · gitTUSworker.shjobrun.pygit fetchcurl 127.0.0.1collect.pytmux-runventanaclaude -pclaude -pworktreeclon principalPC Windows · pythonCLI enjambreenjambre.py · routing.py ·largos.pyPC Windows · tarea programadaVigilanteenjambre watch ·presence.py · scheduler.pyPC Windows · pythonPublicación y demoexportar · demo ·subir_demoPC Windows · pythonVisorlive.py · build.py · web.pyMac mini · sistemasshsshd de la Mac ·llave dedicada ·BatchModeMac mini · bash 3.2worker.shworker.sh · tmux-run.shMac mini · python 3Supervisorjobrun.py: launch ·superviseMac mini · discoClon y worktreesPortfolio/{repo} ·wt/{repo}-{id}Mac mini · LaunchAgentPuenteagent/puente.py ·127.0.0.1:8766Mac mini · LaunchAgentColectorcollect.py · snapshot cada5 minMac mini · LaunchAgentServidor tmuxtmux -L enjambre · sesión enjambreMac mini · agenteAgente claude -pclaude -p sobre un worktree ·allowedTools explícito · tope deturnos y de gastoGitHub · repo privadoRepo de trabajoramas mac/{id}GitHub · repo públicoRepo públicoexportación filtradaHostinger · estáticoDemo públicaindex.html · live.js ·ring.jsHostinger · PHPVisor privadoingest.php · páginacon loginNavegador del usuarioNavegadorvisor.html · recargalive.jsC4 · nivel 2 (contenedores) · tráfico ambiente = llamadas reales · clic en una caja para el detallelínea continua = HTTP/SQL · punteada = adaptador elegido por configuración · caja punteada = existe fuera del proyecto
abrir en pestaña ↗

Flujos que se pueden reproducir

  1. Despachar y recoger
  2. Turno que sobrevive al cierre de la ventana
  3. Visor regenerado y publicado
  4. Añadir un nodo

Cómo se hizo

  • Primera tarea distribuida — enjambre run: Windows manda, vuelve una rama + ledger
  • El puente — Un Claude Code persistente en la Mac al que Windows le habla (enjambre chat/send/sessions), con Playwright, ledger por turno y gui sí/no en status; modelo de amenazas de la clave
Parte del Ecosistema Claude Code →

Proyectos hermanos

Aprende cómo se hizo → Build Stack