Mac mini M4 como servidor de agentes IA autónomos 24/7

AgentesNexo
··5 min lectura

Una Mac mini M4 puede ejecutar un ecosistema completo de agentes IA autónomos sin costo variable por hora de cómputo — ese es el punto de partida práctico de esta guía, basada en el setup real que usamos en AgentesNexo.

El chip M4 ofrece 38 TOPS (trillones de operaciones por segundo) en su Neural Engine, según Apple (2024). En la práctica, eso significa correr modelos de lenguaje de 3 a 8 mil millones de parámetros localmente, con ~45 tokens por segundo para llama3.2:3b medidos con MLPerf (2025), suficiente para que un agente responda en menos de 2 segundos. Comparado con una instancia EC2 g5.xlarge en AWS — $1.006/hora, equivalente a ~$720/mes por una sola GPU — la inversión única en hardware amortiza en menos de un mes.

Requisitos previos

  • Mac mini M4 (16 GB RAM mínimo; 24 GB si planeas modelos >7B)
  • macOS 15 Sequoia o superior
  • Homebrew instalado: brew --version
  • Node.js 22+ y Python 3.12+
  • Acceso SSH habilitado: Ajustes → General → Compartir → Inicio de sesión remoto
  • Cuenta de Telegram y bot creado vía @BotFather

Cómo funciona la arquitectura

Antes de instalar nada, define cuántos agentes necesitas y qué hace cada uno. Esta es la estructura que funciona en producción:

Mac mini M4 (24/7)
├── LaunchAgents (macOS nativo)
│   ├── daemon.ts           — orquestador principal
│   ├── 6 agentes IA        — BRAIN, CODER, CONTENT, OUTREACH, WATCHER, OPS
│   └── health-check.sh     — verificación cada 5 minutos
├── Ollama                  — modelos locales (llama3.2, nomic-embed)
├── PostgreSQL              — memoria estructurada de agentes
└── Telegram Bot            — canal de entrada/salida

Regla fundamental: un agente, un proceso. No compartas workers entre tareas que puedan bloquearse entre sí.

Cómo instalar y configurar Ollama

Ollama expone los modelos como una API REST local en el puerto 11434. Sin internet, sin latencia de red, sin costos por token.

bash
# Instalar Ollama
brew install ollama

# Descargar modelos según rol del agente
ollama pull llama3.2:3b          # WATCHER, OPS (tareas ligeras)
ollama pull nomic-embed-text     # búsqueda semántica sobre vault
ollama pull llama3.1:8b          # BRAIN (razonamiento complejo)

# Verificar que responde
curl http://localhost:11434/api/generate \
  -d '{#43a047">"model":"llama3.2:3b","prompt":"responde ok","stream":false}' | jq .response

Para que Ollama arranque automáticamente como servicio del sistema, crea el siguiente LaunchAgent y cárgalo:

bash
launchctl load ~/Library/LaunchAgents/com.ollama.serve.plist

El plist mínimo apunta a /opt/homebrew/bin/ollama serve con RunAtLoad y KeepAlive en true. Los logs van a /tmp/ollama.log.

Cómo configurar el daemon de agentes como servicio permanente

El daemon es el proceso que lanza y supervisa a todos los agentes IA. La clave es que sobreviva cierres de sesión y reinicios del sistema.

bash
mkdir -p ~/nexo-agents/{src,memory,logs,credentials}

LaunchAgent para el daemon (ajusta tu-usuario):

xml
<?xml version=#43a047">"1.0" encoding="UTF-8"?>
<plist version=#43a047">"1.0">
<dict>
  <key>Label</key><string>com.nexo.agents-daemon</string>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/homebrew/bin/tsx</string>
    <string>/Users/tu-usuario/nexo-agents/src/daemon.ts</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>WorkingDirectory</key><string>/Users/tu-usuario/nexo-agents</string>
  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key><string>/opt/homebrew/bin:/usr/bin:/bin</string>
  </dict>
  <key>StandardOutPath</key>
  <string>/Users/tu-usuario/nexo-agents/logs/daemon.log</string>
  <key>StandardErrorPath</key>
  <string>/Users/tu-usuario/nexo-agents/logs/daemon-error.log</string>
</dict>
</plist>

Cargar y verificar:

bash
launchctl load ~/Library/LaunchAgents/com.nexo.agents-daemon.plist
pgrep -f daemon.ts && echo #43a047">"VIVO" || echo "MUERTO"

Cómo programar tareas recurrentes con launchd

No uses cron en macOS: si el sistema entró en reposo, cron no ejecuta la tarea pendiente. launchd sí lo hace al despertar.

Ejemplo: publicar en RRSS a las 09:00 hora Bolivia (13:00 UTC):

xml
<key>StartCalendarInterval</key>
<array>
  <dict>
    <key>Hour</key><integer>13</integer>
    <key>Minute</key><integer>0</integer>
  </dict>
</array>

Para tareas con intervalo fijo (ej: health check cada 5 minutos):

xml
<key>StartInterval</key><integer>300</integer>

Cómo monitorear con alertas por Telegram

Un servidor sin observabilidad es una caja negra. Este script verifica los procesos críticos y envía alertas inmediatas:

bash
#!/bin/bash
TOKEN=#43a047">"tu-token-telegram"
CHAT_ID=#43a047">"tu-chat-id"

alert() {
  curl -sf #43a047">"https://api.telegram.org/bot${TOKEN}/sendMessage" \
    -d "chat_id=${CHAT_ID}&text=ALERTA Mac mini: $1" > /dev/null
}

pgrep -f daemon.ts > /dev/null || {
  alert #43a047">"daemon caido — reiniciando"
  launchctl start com.nexo.agents-daemon
}

curl -sf http://localhost:11434 > /dev/null || {
  alert #43a047">"Ollama caido — reiniciando"
  launchctl start com.ollama.serve
}

USED=$(df -h / | awk 'NR==2{print $5}' | tr -d '%')
[ #43a047">"$USED" -gt 85 ] && alert "Disco al ${USED}% — limpiar logs"

Arquitectura del sistema

Las cinco piezas encajan así:

  • Ollama provee modelos locales: latencia menor a 2 segundos, privacidad total, costo cero por token
  • daemon.ts orquesta agentes y responde a eventos externos vía webhooks o Telegram
  • LaunchAgents garantizan que todo sobrevive reinicios y modo reposo
  • PostgreSQL almacena la memoria estructurada y el historial de ejecuciones entre sesiones
  • Telegram Bot es la interfaz de control: interactúas con cualquier agente desde el celular

Lo que aprendimos

Después de 8 meses corriendo este setup en producción con seis agentes simultáneos:

  1. Un M4 de 16 GB maneja 4 a 6 agentes concurrentes sin degradación perceptible usando modelos de 3 a 8B.
  2. launchd supera a cron en macOS para tareas agendadas: cron no se activa si el Mac durmió; launchd recupera la tarea al despertar.
  3. Los logs son la única fuente de verdad: un agente que falla silenciosamente puede pasar desapercibido días enteros.
  4. La memoria unificada del M4 es la ventaja estructural: CPU y GPU comparten el mismo pool de RAM, eliminando el cuello de botella de transferencia de datos que sufren los setups convencionales.
  5. Temperatura bajo carga sostenida: ~45°C. El chasis del Mac mini disipa calor suficiente para operación 24/7 sin refrigeración adicional.

En resumen

  • Una Mac mini M4 corre un ecosistema de agentes IA autónomos por ~$600 USD de inversión única, sin costo variable de cómputo
  • La arquitectura mínima viable: Ollama + daemon.ts + LaunchAgents + PostgreSQL + Telegram
  • launchd garantiza resiliencia ante reinicios y modo reposo — cron no lo hace en macOS
  • El Neural Engine del M4 entrega 38 TOPS, suficiente para modelos de 8B a velocidad de producción (Apple, 2024)
  • Un script de health check con alertas por Telegram es todo el monitoreo que necesitas para empezar

Si quieres implementar un ecosistema de agentes IA en tu negocio sin construirlo desde cero, en AgentesNexo lo hacemos por ti. Escríbenos en agentesnexo.com o por WhatsApp al +591 67564218.

Escríbenos en agentesnexo.com o por WhatsApp al +591 67564218

Articulos relacionados