Saltar al contenido

Lección 17 · 24 en la ruta · 5 min de lectura · Nivel 2

Mac vs Windows

Mismas tareas en las dos máquinas; nube vs local en claude -p; modelo local de código vs Claude

Objetivo

Saber con números qué conviene mandar a la Mac: tests, build, git, un trabajo real de claude -p, y si un modelo local de 9B reemplaza a claude -p para código.

Por qué

“la Mac es más rápida” no sirve para decidir. Hay que separar dos cosas que el reloj mezcla: el tiempo del modelo en la nube (igual en cualquier máquina) y el tiempo local (arrancar Node, hooks, servidores MCP, lanzar procesos). Solo el segundo depende de la máquina.

Máquinas: Mac mini M2 Pro 16 GB · Windows 10, Intel i5-8600, 48 GB, Git Bash.

Pasos

1. Mismo código en las dos: git bundle

PS> git -C ..\orquestador bundle create <bundles>\orquestador.bundle --all
PS> git -C ..\enjambre    bundle create <bundles>\enjambre.bundle --all
PS> scp <bundles>\*.bundle mac:~/modelos/benchcmp/
PS> python scripts\bench_compare.py <bundles> <work> windows --claude
mac$ python scripts/bench_compare.py ~/modelos/benchcmp ~/modelos/benchcmp/work mac --claude

Los dos lados clonan del mismo bundle: mismos commits (orquestador 89ae2fd, enjambre 6a14b6e), sin depender de GitHub ni del llavero.

2. Herramientas locales (mediana de 3)

TareaWindowsMacMac más rápida
Tests orquestador: statusline15,40 s1,08 s14×
Tests orquestador: hooks17,59 s1,03 s17×
Tests enjambre (Python, 38)0,55 s0,35 s1,6×
Build build-kit.sh16,98 s0,62 s27×
git clone local0,24 s0,03 s8×
git status ×201,42 s0,14 s10×
git gc —aggressive1,88 s0,85 s2,2×

La diferencia enorme está en los scripts de bash; en Python puro, apenas 1,6×. Hipótesis coherente con eso (no medida aparte): en Windows cada jq, sed o date pasa por la emulación de fork de MSYS, que es cara, y estos tests lanzan cientos de procesos.

3. claude -p: la nube por un lado, lo local por otro

El JSON de claude -p --output-format json trae duration_api_ms. Local = reloj − API:

(captura del entorno real: no se publica; ver docs/CAPTURAS.md para las del modo demo)

RelojNubeLocalCoste
Windows45,4 s15,0 s30,4 sUS$ 0,28
Mac15,1 s11,1 s4,0 sUS$ 0,18

¿La máquina o la configuración? Windows tiene 13 servidores MCP y la Mac 8. Con un prompt trivial, 2 corridas por celda:

Arranque localWindowsMac
Normal18,2 / 18,7 s4,1 / 3,6 s
Sin MCP (--strict-mcp-config)13,6 / 12,9 s1,8 / 1,6 s

Los MCP suman ~5 s en Windows; el resto (~13 s contra ~1,7 s) es la plataforma.

4. Modelo local de código vs claude -p

Tres funciones con tests ocultos que ninguno de los dos ve: montos en soles, unir intervalos, dígito verificador del RUC. El local tiene un intento y un reintento con la salida de los tests; claude -p es un agente que puede escribir y correr sus propias pruebas.

PS> python scripts/bench_code.py            # local sin razonamiento + claude -p
PS> python scripts/bench_code.py --think --skip-claude
MotorAciertosTiempoCoste
claude -p (Opus 5.5)3/3132 sUS$ 0,91
Qwen3.5-9B local1/3155 sUS$ 0
Qwen3.5-9B local con thinking1/3751 sUS$ 0

Sin maquillaje: para código con reglas exactas, el 9B local no reemplaza a claude -p. Acertó merge_intervals a la primera; falló la agrupación de miles y el dígito verificador aun con reintento. Razonar más lo hizo 5× más lento sin acertar más.

Qué salió mal de verdad

  1. build-kit.sh no corre en la Mac: el sed de BSD rechaza la línea 55 (RE error: parentheses not balanced, un \) sin \(). Se midió con GNU sed (brew install gnu-sed); el bug quedó anotado para arreglarlo en orquestador.
  2. “2 fallos en Windows” que no eran de Windows: dos tests de statusline buscan la sesión por directorio y el clon de prueba vivía en una ruta temporal rara. En el checkout normal del mismo commit: 50/0.
  3. claude -p desde Python en Windows recibía la mitad del prompt: claude es un .cmd y cmd.exe corta los argumentos en el primer salto de línea. Arreglo: el prompt va por stdin.
  4. Borrar el clon de prueba fallaba en Windows: los packs de git son de solo lectura. Arreglo: quitar el atributo y reintentar dentro de rmtree.

Cómo verificar

PS> python scripts\bench_compare.py <bundles> <work> windows --claude
mac$ python scripts/bench_compare.py ~/modelos/benchcmp ~/modelos/benchcmp/work mac --claude

Esperado (medianas de 3, paso 2): tests de statusline 15,40 s en Windows contra 1,08 s en la Mac; build-kit.sh 16,98 s contra 0,62 s; tests de enjambre (Python) 0,55 s contra 0,35 s. claude -p con el trabajo real: local 30,4 s en Windows contra 4,0 s en la Mac. Ambos lados clonan del mismo bundle (orquestador 89ae2fd, enjambre 6a14b6e). Con n pequeño, los números son orientativos.

Límites

n pequeño (1 corrida del trabajo real por máquina). Carga ajena: Fotos indexando en la Mac, navegador y otra sesión de Claude en Windows. Los tiempos son techo, no promedio.

Autoevaluación

  1. ¿Por qué se resta duration_api_ms del reloj y no al revés?
  2. Si quitas todos los MCP, ¿cuánto del hueco Windows–Mac queda? ¿Qué te dice eso?
  3. ¿Qué tipo de tarea le darías hoy al modelo local, y cuál nunca?
Se guarda solo en este navegador.