1. ¿Por qué ejecutar NanoClaw en un Mac mini dedicado?
NanoClaw solo responde mientras su host está encendido y conectado, el quickstart lo dice sin rodeos, lo que descarta un portátil que se duerme. Necesita una máquina Mac o Linux con al menos 4 GB de RAM más Docker (Docker Desktop en macOS), y su descripción en GitHub lo posiciona como una alternativa ligera a OpenClaw que se ejecuta en contenedores por seguridad. Un VPS Linux compartido puede ser más barato que un Mac mini, así que ten claro lo que estás comprando: un Mac físico Apple Silicon dedicado 1:1 que nadie más comparte, la única plataforma en la que funciona el backend local de iMessage de NanoClaw, una sesión de escritorio real para Docker Desktop y una máquina que también puedes usar para compilaciones de Xcode o modelos locales.
| Característica | VPS cloud (instancia compartida) | Mac mini (MyRemoteMac) |
|---|---|---|
| Coste mensual | Varía según el tamaño; las instancias dedicadas cuestan más | $85/mes (M4) o $149/mes (M6), tarifa plana, 1 Gbps incluido |
| Hardware | CPU y RAM compartidas y virtualizadas (NanoClaw lista las VM de Google Compute Engine como no soportadas) | Mac físico Apple Silicon dedicado 1:1 |
| Runtime de contenedores | Docker Engine en Linux | Docker Desktop para Mac (los mismos contenedores Linux por sesión) |
| iMessage (backend local) | No es posible (solo macOS) | Soportado en un Mac con sesión iniciada en iMessage |
| Acceso | SSH | Root completo, SSH, VNC, VPN WireGuard |
| Disponibilidad | Depende del proveedor | SLA 99,9 % |
Qué es NanoClaw: un único proceso host en Node.js enruta los mensajes de tus apps de chat a contenedores Docker por sesión, donde los agentes se ejecutan sobre Claude Code mediante el Claude Agent SDK de Anthropic. No hay archivos de configuración más allá de .env y una base de datos SQLite: lo personalizas pidiéndole a Claude Code que cambie el código en tu propio checkout. Versión en el momento de escribir esto: v2.4.0 (23 de septiembre de 2026), creado por Gavriel Cohen y mantenido por NanoCo.
2. Requisitos previos
Antes de empezar, asegúrate de tener lo siguiente. Todo lo que aparece a continuación procede del README, el quickstart y las páginas de instalación oficiales de NanoClaw, más los términos de Docker y Anthropic para los datos de plataforma:
- Un Mac mini dedicado de MyRemoteMac, M4 desde $85/mes (16 GB / 256 GB) o Mac mini M6 desde $149/mes. NanoClaw pide al menos 4 GB de RAM (el instalador avisa por debajo de 3.700 MB); todos los planes lo superan con creces.
- Acceso SSH y VNC (ambos incluidos con tu suscripción). VNC se necesita una sola vez: Docker Desktop es una aplicación gráfica y debe lanzarse desde el escritorio la primera vez.
- Docker Desktop para Mac, en ejecución siempre que NanoClaw arranque. Términos de Docker: gratuito para uso personal, educación, código abierto no comercial y empresas con menos de 250 empleados y menos de US$10 millones de facturación anual; las empresas más grandes y las entidades gubernamentales necesitan una suscripción de pago.
- Homebrew, git, Node.js 22+ y pnpm 10. git debe estar presente; el instalador ofrece instalar Homebrew e instala Node y pnpm por sí mismo si faltan (Node 20 no está soportado desde la 2.3.0).
- La CLI de Claude Code en el Mac. No es opcional: todas las skills /add-<channel>, /customize, /debug, /update-nanoclaw y la recuperación de errores del instalador se ejecutan dentro de Claude Code desde la raíz del proyecto.
- Una clave API de Anthropic (sk-ant-api…) de console.anthropic.com, facturada por token. El asistente también ofrece iniciar sesión con una suscripción a Claude, pero los términos legales de Anthropic establecen que OAuth está pensado para el uso ordinario de Claude Code y las apps nativas de Anthropic, y que los productos construidos sobre el Agent SDK deben usar autenticación por clave API, así que, para un despliegue empresarial o always-on, usa una clave.
- Una cuenta de mensajería en Telegram, WhatsApp o Discord para conectar tu agente (el canal de terminal integrado no necesita nada).
3. Paso 1: Conectar por SSH, instalar Docker Desktop y Claude Code
Primero, conéctate por SSH a tu Mac mini con las credenciales de tu panel de MyRemoteMac y comprueba las dos herramientas que el instalador espera encontrar. El instalador de NanoClaw instalará Homebrew, Node y Docker por ti, pero preinstalar Docker Desktop te permite iniciarlo y verificar el daemon antes de que el asistente lo necesite.
Conectar por SSH
# Connect to your Mac mini
ssh admin@your-server-ip
# Verify you're on Apple Silicon
uname -m
# Expected output: arm64
# git is required (not auto-installed); Homebrew is offered by the installer if missing
git --version
brew --version
Instalar e iniciar Docker Desktop para Mac
Este es el comando exacto que el propio setup/install-docker.sh de NanoClaw ejecuta en macOS cuando falta docker. Docker Desktop es una aplicación de escritorio: lánzala una vez desde el escritorio del Mac por VNC y luego confirma desde SSH que el daemon responde. Si no está en ejecución cuando NanoClaw arranca, el host termina con "FATAL: Container runtime failed to start".
# Install Docker Desktop for Mac (the same Homebrew cask NanoClaw's installer uses)
brew install --cask docker
# Start Docker Desktop, a GUI app: do the first launch from the desktop (VNC)
open -a Docker
# The daemon must answer before NanoClaw can start
docker info
Instalar Claude Code en el host
El setup/install-claude.sh de NanoClaw ejecuta el mismo comando cuando falta claude. A partir de ahora usarás Claude Code para cada canal, proveedor y actualización:
# Official Claude Code installer (the command NanoClaw's setup/install-claude.sh runs)
curl -fsSL https://claude.ai/install.sh | /bin/bash
claude --version
4. Paso 2: Instalar NanoClaw y configurar tu clave API de Claude
NanoClaw no es un paquete npm que se instala de forma global: clonas el repositorio y ejecutas un instalador de una sola pasada que convierte el checkout en tu propia instalación. Deja la carpeta donde está después, la etiqueta de launchd, el nombre de la imagen y el slug de instalación se derivan de su ruta. Reserva de 30 a 60 minutos; el asistente es interactivo.
Clonar y ejecutar el instalador
# Clone the canonical repo (nanocoai: the old qwibitai URL redirects here)
cd ~
git clone https://github.com/nanocoai/nanoclaw.git
cd nanoclaw
# One-shot installer: Node 22 + pnpm + Docker if missing, OneCLI gateway,
# credential registration, sandbox image, launchd service, optional channel
bash nanoclaw.sh
El asistente te guía por las opciones documentadas: Standard setup → Fresh agent → imagen del sandbox: descargar la imagen endurecida preconstruida por Echo (requiere un inicio de sesión gratuito en NanoClaw, unos 800 MB desde una única región de EE. UU.) o construirla en local (3–10 minutos, sin cuenta, no contacta con nada, puede ser más rápido desde Europa o Asia) → runtime de IA: Claude → pega tu clave API de Anthropic (recomendado; también se ofrece "Sign in with my Claude subscription", ver la nota en Requisitos previos) → Skip for now para el canal de mensajería. El instalador guarda tu clave en el OneCLI Agent Vault, una pasarela de credenciales obligatoria desde la 2.4.0: los contenedores de agentes nunca contienen claves API en claro.
Alternativa por script y primer mensaje
Si prefieres una ejecución no interactiva, la página de instalación documenta variables de configuración que responden de antemano a las preguntas. En cualquier caso, prueba con el canal de terminal integrado desde la carpeta del proyecto, la primera respuesta puede tardar un poco mientras arranca el contenedor:
# Scripted setup (documented alternative to the wizard)
pnpm install
pnpm run setup:auto
# Pre-answer prompts with NANOCLAW_AGENT_PROVIDER, NANOCLAW_CHANNELS,
# NANOCLAW_HARDENED_IMAGE, NANOCLAW_SKIP; NANOCLAW_NO_DIAGNOSTICS=1 disables setup diagnostics
# First message through the built-in CLI channel (no credentials needed)
pnpm run chat "hello, who are you?"
# Re-run individual steps later: rebuild the image, reinstall the service, health check
pnpm run setup -- --step container
pnpm run setup -- --step service
pnpm run setup -- --step verify
Elegir el modelo y definir lo básico en .env
Los ajustes globales de la instalación viven en .env en la raíz del proyecto (creado con modo 0600 por el setup); los ajustes por grupo de agentes viven en la base de datos y se editan con la CLI de administración ncl. Desde la 2.4.0, los grupos Claude sin modelo definido usan Opus 5.5 (claude-opus-5-5, $4 de entrada / $20 de salida por millón de tokens); Claude Sonnet 5 cuesta $2 / $10, así que fíjalo para un asistente personal si el coste importa. Los demás proveedores son por grupo de agentes: /add-codex (OpenAI) y /add-opencode (OpenRouter, OpenAI, Google, DeepSeek). Modelos locales: el README lista /add-ollama-provider, pero la página de proveedores de docs.nanoclaw.dev indica que no es un reemplazo directo soportado en el main actual, trátalo como un experimento, no como una forma de sustituir a Claude.
# Install-wide model for every Claude group with no model set
# (aliases sonnet | opus | haiku, or a full id such as claude-sonnet-5)
echo 'NANOCLAW_DEFAULT_MODEL=sonnet' >> .env
# Timezone for scheduled tasks and timestamps (IANA name)
echo 'TZ=Europe/Paris' >> .env
# .env is read only by the host process: restart it after edits
launchctl kickstart -k gui/$(id -u)/com.nanoclaw-v2-<slug>
# Per-group overrides via the ncl admin CLI (symlinked at ~/.local/bin/ncl by setup)
ncl groups config update --id <group-id> --model opus
ncl groups config update --id <group-id> --timezone Europe/Lisbon
# Switch a group to another provider (takes effect on the next container spawn)
ncl groups config update --id <group-id> --provider opencode
5. Paso 3: Conectar canales de mensajería
Los canales no vienen incluidos: cada uno se instala bajo demanda como una skill de Claude Code ejecutada desde la raíz del proyecto, que añade el adaptador a tu checkout. Telegram es el más rápido de poner en marcha, crea un bot con @BotFather, pega el token cuando la skill lo pida (se guarda como TELEGRAM_BOT_TOKEN en .env) y luego envía al bot el código de emparejamiento de 6 dígitos de un solo uso como un mensaje que contenga únicamente los dígitos. El modo polling significa que no hay URL pública, webhook ni puerto abierto:
# Step 1: Open Telegram and search for @BotFather
# Step 2: Send /newbot and follow the prompts
# Step 3: Copy the token
# Every channel is a Claude Code skill run from the project root
cd ~/nanoclaw && claude
/add-telegram
# Paste the token when asked (stored as TELEGRAM_BOT_TOKEN in .env).
# The wizard prints a one-time 6-digit pairing code: send exactly those digits to the bot.
# Groups: BotFather -> /mybots -> Bot Settings -> Group Privacy -> Turn off
Conectar WhatsApp
El adaptador nativo habla el protocolo de WhatsApp Web (Baileys, no la API oficial de Meta): escanea el código QR, que rota cada 60 segundos aproximadamente, o introduce el código de emparejamiento de 8 caracteres en WhatsApp → Dispositivos vinculados. En modo de número compartido, el asistente responde en tu propio chat "Tú"; para un número dedicado, usa una SIM aparte y define ASSISTANT_HAS_OWN_NUMBER=true. Si el cumplimiento normativo importa, usa en su lugar /add-whatsapp-cloud (Meta Cloud API):
claude
/add-whatsapp
# Scan the QR (rotates ~60 s) or enter the 8-character code in WhatsApp -> Linked Devices
# Auth state persists in store/auth/: keep that folder private
# Dedicated number (separate SIM) instead of your own chat:
# ASSISTANT_HAS_OWN_NUMBER=true in .env
# Meta's official Cloud API instead of the Web-protocol adapter:
# /add-whatsapp-cloud
Conectar Discord, iMessage y el resto
Discord usa un token de bot y un listener de Gateway (sin URL pública). El catálogo también cubre Slack, Mattermost (nuevo en la 2.4.0), Signal, iMessage, Microsoft Teams, Google Chat, Matrix, Webex, WeChat, GitHub, Linear, Delta Chat, Emacs, correo electrónico vía Resend y un número de teléfono real vía Dial. El backend local de iMessage es la función exclusiva de macOS: el Mac mini debe tener la sesión iniciada en iMessage con un Apple ID y el binario exacto de node necesita Acceso total al disco (el backend alojado Photon no necesita ninguna de las dos cosas). Volver a ejecutar una skill /add-<channel> más adelante refresca el adaptador; /manage-channels vincula cada conversación a un grupo de agentes:
claude
/add-discord
# others: /add-slack /add-imessage /add-signal /add-teams /add-mattermost /add-matrix ...
# Wire conversations to agent groups
/manage-channels
# Silent agent? Check why messages were dropped (no_agent_wired, no_agent_engaged, ...)
ncl dropped-messages list
ncl sessions list
6. Paso 4: Ejecutar 24/7 con launchd y actualizar de forma segura
Para un funcionamiento 24/7, NanoClaw debe arrancar al inicio y reiniciarse ante fallos. El instalador ya se ha encargado de ello: su paso de servicio escribe un LaunchAgent de launchd por usuario llamado com.nanoclaw-v2-<slug> (slug = los 8 primeros caracteres hexadecimales del SHA-1 de la ruta del proyecto; los tutoriales antiguos aún muestran la etiqueta com.nanoclaw anterior a la 2.3.0) con RunAtLoad y KeepAlive, registrando logs en logs/nanoclaw.log y logs/nanoclaw.error.log. El plist solo define PATH y HOME y no carga .env, así que reinicia el host después de cada edición de .env.
Verificar y gestionar el servicio
# Is the LaunchAgent loaded? Find your label (com.nanoclaw-v2-<slug>)
launchctl list | grep nanoclaw
ls ~/Library/LaunchAgents/ | grep nanoclaw
# Health: host + connected adapters (ncl status is new in 2.4.0)
ncl status
pnpm run setup -- --step verify
docker ps --filter label=nanoclaw-install
# Live logs
tail -f logs/nanoclaw.log logs/nanoclaw.error.log
# Restart (also after every .env edit) / stop / start / reinstall the service
launchctl kickstart -k gui/$(id -u)/com.nanoclaw-v2-<slug>
launchctl unload ~/Library/LaunchAgents/com.nanoclaw-v2-<slug>.plist
launchctl load ~/Library/LaunchAgents/com.nanoclaw-v2-<slug>.plist
pnpm run setup -- --step service # regenerates the plist (wipes manual edits)
Sobrevivir a un reinicio en un Mac mini headless
Esta parte es nuestra recomendación operativa, elaborada a partir de la documentación de Apple y de Docker, la documentación de NanoClaw no cubre los Mac headless. El LaunchAgent vive en tu sesión de usuario y Docker Desktop es una app gráfica, así que tras un reinicio nada se ejecuta hasta que alguien inicia sesión. Activa el inicio de sesión automático para la misma cuenta de usuario que ejecutó bash nanoclaw.sh, el LaunchAgent y el ajuste de arranque al iniciar sesión de Docker Desktop son ambos por usuario, así que iniciar sesión automáticamente con otra cuenta dejaría el servicio sin cargar y Docker detenido (Apple: el inicio de sesión automático no está disponible mientras FileVault está activado). Recuerda que cualquiera que reinicie el Mac aterriza en esa sesión, lo cual solo es aceptable en un Mac mini dedicado accesible únicamente por SSH, VNC y WireGuard; si prefieres una cuenta sin privilegios de administrador para ello, instala NanoClaw bajo esa cuenta, sabiendo que instalar Homebrew y ejecutar sudo pmset siguen necesitando un administrador (Docker Desktop en sí se ejecuta como usuario sin privilegios y solo pide acceso privilegiado para funciones concretas). Luego activa el ajuste "Start Docker Desktop when you sign in to your computer" de Docker Desktop y desactiva el reposo:
# 1. System Settings > Users & Groups > Automatic login = the user that ran bash nanoclaw.sh
# (over VNC; not available with FileVault on; LaunchAgent + Docker Desktop are per-user)
# 2. Docker Desktop > Settings > General > "Start Docker Desktop when you sign in to your computer"
# 3. Keep the Mac awake (same as in our OpenClaw guide)
sudo pmset -a sleep 0 disksleep 0 standby 0 powernap 0
# 4. Reboot-test, then log back in over SSH and check
sudo reboot
docker info
launchctl list | grep nanoclaw
Actualizar NanoClaw (nunca git pull)
La página de actualización es explícita: "Do not update with a raw git pull." NanoClaw registra cada actualización autorizada en data/upgrade-state.json y un tripwire de arranque se niega a iniciar si hay discrepancia. La única vía soportada es /update-nanoclaw en Claude Code: crea una rama y un tag de respaldo, prepara upstream en un worktree separado, valida (instalación, build, tests), detiene el servicio y los contenedores, hace una instantánea de .env, data, groups y store, aplica el cambio, reinicia y comprueba el estado. Está bloqueada con un árbol de trabajo sucio o cuando NanoClaw no se ejecuta bajo launchd. Antes de pasar a la 2.4.0, fija tu modelo si no quieres que los grupos Claude sin modelo definido cambien a Opus 5.5:
# Optional: pin the model BEFORE upgrading (2.4.0 default for unset Claude groups is Opus 5.5)
echo 'NANOCLAW_DEFAULT_MODEL=sonnet' >> .env
# The only supported update path: inside Claude Code, from the project root
cd ~/nanoclaw && claude
/update-nanoclaw
# Refresh installed channel/provider skills only:
/update-skills
# After resolving merge conflicts, or to roll back after cutover:
pnpm exec tsx scripts/update-nanoclaw.ts resume --id "$id"
pnpm exec tsx scripts/update-nanoclaw.ts rollback --id "$id"
# Remove this checkout only (service, containers, image, data; .env backed up to .env.bak)
bash nanoclaw.sh --uninstall --dry-run
bash nanoclaw.sh --uninstall
7. Hardening de seguridad (mínimo privilegio)
El modelo de amenazas de NanoClaw es "asumir que el agente sufrirá una inyección de prompt y asegurarse de que un agente comprometido no tenga nada que robar ni adónde ir". De serie, cada sesión se ejecuta en su propio contenedor como el usuario sin privilegios node con --cap-drop=ALL, --security-opt no-new-privileges, --init, un límite de pids y los bits setuid eliminados; no hay home del host, ni .ssh, ni socket de Docker, y la pasarela OneCLI reescribe las cabeceras de autenticación al vuelo para que los contenedores nunca vean tu clave API. Las tarjetas de aprobación (paquetes, servidores MCP, subagentes, registro de nuevos chats) necesitan la respuesta de un administrador y se deniegan automáticamente si no se responden, consérvalas. La configuración documentada más segura añade lo siguiente, y nunca desactiva las aprobaciones ni la pasarela:
-
Remitentes desconocidos: define
--unknown-sender-policy strict(descartados en silencio) orequest_approvalen cada grupo de mensajería al que puedan llegar desconocidos. - Montajes: deja la lista de permitidos (~/.config/nanoclaw/mount-allowlist.json) ausente o mínima, sin ella, todos los montajes adicionales quedan bloqueados, y .ssh.gnupg.aws.kube.docker, credentials.env y .netrc son patrones bloqueados de todos modos. Los montajes son de solo lectura salvo que se permita explícitamente lo contrario.
- Aislamiento: "en caso de duda, empieza más aislado". Un chat familiar y un canal de clientes no deberían ser un mismo agente; un agente con un repositorio montado y credenciales de despliegue no debe compartir grupo de agentes con uno que habla con desconocidos. Las sesiones separadas no son un límite de confidencialidad dentro de un grupo.
- Límites y salida de red: define CONTAINER_CPU_LIMIT y CONTAINER_MEMORY_LIMIT, y activa NANOCLAW_EGRESS_LOCKDOWN=true (todo el tráfico a través de la pasarela, contenedores en una red interna) una vez que tus herramientas funcionen a través del proxy, está desactivado por defecto porque rompe las herramientas que no reconocen proxies.
- Secretos en disco: .env se crea con modo 0600 y solo contiene tokens de canales; las claves API de los agentes viven en el vault. Mantén también privado store/auth/ (sesión de WhatsApp), nuestra recomendación, no una afirmación de NanoClaw. El setup envía diagnósticos salvo que NANOCLAW_NO_DIAGNOSTICS=1.
# Unknown senders: drop silently (or route to an approval card) on every reachable group
ncl messaging-groups list
ncl messaging-groups update --id <mg-id> --unknown-sender-policy strict
# or: --unknown-sender-policy request_approval
# Opt-in per-container caps (passed to docker create --cpus / --memory)
echo 'CONTAINER_CPU_LIMIT=2' >> .env
echo 'CONTAINER_MEMORY_LIMIT=8g' >> .env
# Once every tool works through the OneCLI proxy: no direct internet route for containers
echo 'NANOCLAW_EGRESS_LOCKDOWN=true' >> .env
launchctl kickstart -k gui/$(id -u)/com.nanoclaw-v2-<slug>
# Mounts are deny-by-default and read-only unless the allowlist root sets allowReadWrite
ncl groups config add-mount --id <group-id> --host /path/on/mac --container /path/in/container
# Secrets on disk: .env must stay 0600 (setup creates it that way)
ls -l .env
Riesgos residuales que el sandbox no cubre: un agente comprometido aún puede enviar mensajes a cualquier destino al que esté vinculado, leer o destruir su propio espacio de trabajo y memoria, gastar las credenciales que se le concedieron y envenenar la memoria del grupo, así que acota cada grupo de agentes de forma estricta.
8. Resolución de problemas comunes
"FATAL: Container runtime failed to start"
Docker Desktop no estaba en ejecución cuando arrancó el host, el clásico tras un reinicio sin sesión iniciada. Comprueba el daemon, inicia Docker Desktop y luego reinicia NanoClaw:
# Is the Docker daemon up?
docker info
# Not running? Start Docker Desktop (first launch must be from the desktop over VNC)
open -a Docker
# Then restart NanoClaw and watch the logs
launchctl kickstart -k gui/$(id -u)/com.nanoclaw-v2-<slug>
tail -f logs/nanoclaw.error.log
"NanoClaw stopped: update did not go through the supported path"
Alguien ejecutó git pull (o modificó el checkout de otro modo) y data/upgrade-state.json ya no coincide. Vuelve a pasar por la actualización soportada, o reanuda/revierte una que quedó preparada:
# Never `git pull`. Run the supported update from the project root:
cd ~/nanoclaw && claude
/update-nanoclaw
# A staged update stuck in conflict, or a bad cutover?
pnpm exec tsx scripts/update-nanoclaw.ts resume --id "$id"
pnpm exec tsx scripts/update-nanoclaw.ts rollback --id "$id"
# The update is blocked on a dirty working tree, detached HEAD or a host not under launchd
git status
El agente nunca responde en un chat
Normalmente es un problema de vinculación o de disparador más que un fallo: el agente solo responde cuando coincide su disparador (@Andy por defecto, a partir de ASSISTANT_NAME; el valor por defecto del asistente de WhatsApp es Nano), y el chat debe estar vinculado a un grupo de agentes. Lista los mensajes descartados y las sesiones:
# Why were messages dropped? (no_agent_wired, no_agent_engaged, ...)
ncl dropped-messages list
ncl sessions list
# Wire the chat to an agent group
claude
/manage-channels
# Telegram: pending pairing codes live here; the message must contain only the 6 digits
cat data/telegram-pairings.json
El host se niega a arrancar tras una actualización fusionada a mano (sin pasarela de credenciales)
Desde la 2.4.0, el host se niega a arrancar sin una pasarela de credenciales registrada. Los forks fusionados a mano deben registrar OneCLI (o Iron Proxy) y comprobar NANOCLAW_GATEWAY_PROVIDER en .env; las instalaciones con OpenCode deben además volver a ejecutar /add-opencode, reconstruir la imagen y reiniciar sus grupos (comandos de la nota de la versión 2.4):
# Register the gateway (OneCLI is the default; Iron Proxy is the alternative)
claude
/add-onecli
# or: /add-iron-proxy
# Check the provider recorded in .env (onecli | iron-proxy)
grep NANOCLAW_GATEWAY_PROVIDER .env
# OpenCode installs: re-run /add-opencode, then rebuild the image, restart the host and the groups
./container/build.sh build
launchctl kickstart -k gui/$(id -u)/com.nanoclaw-v2-<slug>
ncl groups restart --id <group-id>
Nada se ejecuta después de que el Mac mini se reinicie
El LaunchAgent y Docker Desktop viven ambos en la sesión de usuario. Comprueba que el servicio está registrado, que el inicio de sesión automático está activado para el usuario que ejecutó el instalador y que Docker Desktop arranca al iniciar sesión, y luego haz una prueba de reinicio:
# Is the LaunchAgent registered?
launchctl list | grep nanoclaw
# Not listed? Reinstall it (regenerates the plist)
pnpm run setup -- --step service
# Docker not up after login? Enable "Start Docker Desktop when you sign in" (Settings > General)
docker info
# Then reboot-test again
sudo reboot
9. Análisis de costes vs. VPS cloud
NanoClaw en sí es gratuito (MIT). Pagas el host y el uso del modelo con tu clave API de Anthropic, idéntico en cualquier host, porque NanoClaw no ejecuta modelos locales de forma soportada. El Mac mini es una máquina física dedicada, así que la comparación justa es una instancia cloud dedicada o de tier IA, no el VPS compartido más barato:
| Caso de uso | Llamadas IA/mes | Coste VPS cloud | Coste MyRemoteMac | Ahorro mensual |
|---|---|---|---|---|
| Asistente personal, un canal | ~500 llamadas | $120/mes (instancia dedicada de tier IA) | $85/mes (Mac mini M4) | $35/mes |
| Equipo pequeño, varios canales + tareas programadas | ~5.000 llamadas | $200/mes | $85/mes (Mac mini M4) | $115/mes |
| Varios grupos de agentes con contenedores concurrentes | 10.000+ llamadas | $350+/mes | $149/mes (Mac mini M6) | $201+/mes |
Supuestos: los precios de VPS son los mismos rangos usados en todas nuestras guías para instancias dedicadas de tier IA y no son presupuestos de un proveedor concreto; un VPS Linux compartido de 4 GB sería más barato que cualquier plan de Mac mini. Los precios de MyRemoteMac son las tarifas mensuales actuales en USD, sin impuestos, 1 Gbps incluido. El uso del modelo se paga aparte en ambos casos: Opus 5.5 cuesta $4 / $20 por millón de tokens de entrada / salida y Sonnet 5 cuesta $2 / $10 (platform.claude.com, septiembre de 2026). NanoClaw no publica cifras de consumo de RAM o CPU para el host, la VM de Docker Desktop ni los contenedores por sesión, así que las recomendaciones de plan se mantienen cualitativas.
Qué plan elegir: el Mac mini M4 de 16 GB a $85/mes es un host cómodo para un asistente personal o un bot de equipo pequeño, el mínimo propio de NanoClaw es 4 GB. Elige el Mac mini M6 cuando ejecutes varios grupos de agentes con contenedores concurrentes junto a la VM de Docker Desktop, o cuando el Mac también compile apps iOS. Para mantener predecible la factura de tokens, define NANOCLAW_DEFAULT_MODEL=sonnet y reserva Opus para un grupo que lo necesite.
10. NanoClaw vs. OpenClaw
NanoClaw se posiciona explícitamente frente a OpenClaw: su README afirma que OpenClaw tiene casi medio millón de líneas de código, 53 archivos de configuración y más de 70 dependencias, con la seguridad a nivel de aplicación (listas de permitidos, códigos de emparejamiento) en lugar de aislamiento a nivel de sistema operativo, cifras del README de NanoClaw, no medidas de forma independiente. A partir de nuestra guía de OpenClaw, las diferencias prácticas en un Mac mini son estas. OpenClaw es una instalación global de npm (Node 26.1+ recomendado), un único proceso Gateway, un archivo de configuración JSON5, canales incluidos, sin Docker. NanoClaw es git clone + bash nanoclaw.sh, Node 22+ y pnpm 10, requiere Docker Desktop, Homebrew y Claude Code en el host, no tiene archivos de configuración (la personalización es código en tu propio checkout), ejecuta cada sesión en un contenedor Linux con cap-drop y no-new-privileges, bloquea los montajes por defecto y mantiene las claves API fuera del sandbox mediante una pasarela de credenciales; los canales se instalan bajo demanda como skills y las actualizaciones pasan únicamente por /update-nanoclaw. En resumen: NanoClaw es más seguro por construcción pero más pesado de operar (una VM de Docker Desktop siempre encendida, una sesión gráfica iniciada, la regla de licencia de Docker para grandes empresas, una configuración interactiva de 30–60 minutos y un fork que mantienes tú); OpenClaw es más ligero de instalar y configurar pero se apoya en comprobaciones de permisos a nivel de aplicación. Ambos usan Claude por defecto; NanoClaw añade Codex y OpenCode por grupo de agentes. El coste del Mac mini es idéntico para ambos.
¿Ya usas OpenClaw? NanoClaw incluye /migrate-from-openclaw, una conversación guiada en Claude Code que asigna los agentes de OpenClaw a grupos de agentes, los chats a grupos de mensajería vinculados, IDENTITY.md/SOUL.md a instructions.prepend.md más memory/, las skills a container/skills, los tokens de canales a .env, las claves API al vault de OneCLI, las tareas cron a tareas ncl, los servidores MCP a la configuración por grupo y las listas de permitidos a unknown_sender_policy y roles. WhatsApp debe volver a autenticarse; el retardo humano y el TTS no tienen equivalente en v2. ¿Empiezas desde cero? Lee nuestra guía de OpenClaw en Mac mini y nuestra guía de Hermes Agent antes de elegir.
11. Preguntas frecuentes
¿NanoClaw es gratuito?
Sí. NanoClaw tiene licencia MIT y más de 30k estrellas en GitHub, creado por Gavriel Cohen y mantenido por NanoCo. Pagas el Mac mini (desde $85/mes para el M4, $149/mes para el M6 en MyRemoteMac) y el uso de Claude con tu clave API de Anthropic. Docker Desktop es gratuito para uso personal y para empresas con menos de 250 empleados y US$10 millones de facturación; las empresas más grandes y las entidades gubernamentales necesitan una suscripción de pago a Docker.
¿De verdad necesito Docker Desktop en un Mac mini?
Sí. En macOS, NanoClaw requiere Docker Desktop, que su instalador añade con brew install --cask docker; Docker es el runtime distribuido (NANOCLAW_RUNTIME_DRIVER=docker, detrás de una capa de driver seleccionable desde la 2.3.0). La herramienta de contenedores propia de Apple no es un runtime soportado a día de hoy, el trabajo /add-apple-container de v2 es un pull request en borrador abierto. Cada sesión de agente se ejecuta en su propio contenedor Linux, que es la razón de ser del modelo de seguridad de NanoClaw.
¿Puedo usar mi suscripción a Claude en lugar de una clave API?
El asistente de NanoClaw ofrece "Sign in with my Claude subscription" y acepta un token OAuth. Sin embargo, los términos legales de Anthropic establecen que la autenticación OAuth está pensada exclusivamente para el uso ordinario de Claude Code y las aplicaciones nativas de Anthropic por parte de los suscriptores, que los desarrolladores que construyen sobre el Agent SDK deben usar autenticación por clave API, y que Anthropic puede hacerlo cumplir sin previo aviso. Para un despliegue empresarial o always-on, usa una clave API de la Console, y nunca guardes ni compartas tus credenciales de Claude.ai.
¿Qué plan de Mac mini debo elegir para NanoClaw?
NanoClaw pide al menos 4 GB de RAM y no publica cifras de consumo más allá de eso, así que el consejo es cualitativo: el Mac mini M4 de 16 GB a $85/mes aloja cómodamente un asistente personal o un bot de equipo pequeño con un par de canales. Elige el Mac mini M6 desde $149/mes cuando varios grupos de agentes ejecuten contenedores al mismo tiempo junto a la VM de Docker Desktop, o cuando el mismo Mac también ejecute compilaciones de Xcode u otras cargas de trabajo.
¿NanoClaw sobrevive a un reinicio del Mac mini?
Sí, siempre que vuelva una sesión de usuario: el instalador registra un LaunchAgent por usuario (com.nanoclaw-v2-<slug>, KeepAlive) y Docker Desktop es una app gráfica, así que en un Mac mini headless activa el inicio de sesión automático para la misma cuenta de usuario que ejecutó bash nanoclaw.sh (ambos son por usuario; no disponible con FileVault activado), activa el ajuste de arranque al iniciar sesión de Docker Desktop y desactiva el reposo con pmset. Verifícalo con launchctl list | grep nanoclaw y docker info tras un reinicio de prueba. Esta receta para headless es nuestra recomendación; la documentación de NanoClaw solo dice que mantengas el ordenador encendido y conectado.
¿Puedo migrar mi instalación actual de OpenClaw a NanoClaw?
Sí. Ejecuta /migrate-from-openclaw en Claude Code desde la raíz del proyecto NanoClaw: asigna los agentes de OpenClaw a grupos de agentes, los chats a grupos de mensajería, IDENTITY.md y SOUL.md a instructions.prepend.md y memory/, las skills a container/skills (mismo formato), los tokens de canales a .env, las claves API al vault de OneCLI, las tareas cron a tareas ncl y las listas de permitidos a políticas de remitentes. WhatsApp no se migra deliberadamente, vuelves a escanear el QR, y el retardo humano y el TTS no tienen equivalente en v2.
12. Fuentes y lecturas adicionales
Todos los comandos, rutas, variables y requisitos de esta guía se verificaron el 28 de septiembre de 2026 contra el repositorio oficial de NanoClaw (nanocoai/nanoclaw, v2.4.0 publicada el 23 de septiembre de 2026, la antigua URL qwibitai redirige allí) y docs.nanoclaw.dev, más la documentación de Docker, Anthropic y Apple para los datos de plataforma. Las versiones fijadas, como la build de Claude Code dentro de los agentes, cambian con cada versión, así que consulta estas páginas para ver los valores actuales:
- GitHub: nanocoai/nanoclaw (README, LICENSE, package.json, nanoclaw.sh)
- docs.nanoclaw.dev: Quickstart
- docs.nanoclaw.dev: Instalación
- docs.nanoclaw.dev: Modelo de seguridad
- docs.nanoclaw.dev: Niveles de aislamiento
- docs.nanoclaw.dev: Configuración
- docs.nanoclaw.dev: Credenciales
- docs.nanoclaw.dev: Pasarelas de credenciales (OneCLI, Iron Proxy)
- docs.nanoclaw.dev: Hardening
- docs.nanoclaw.dev: Actualización
- docs.nanoclaw.dev: Resolución de problemas
- docs.nanoclaw.dev: Referencia de variables de entorno
- docs.nanoclaw.dev: Visión general de canales
- docs.nanoclaw.dev: Telegram
- docs.nanoclaw.dev: WhatsApp
- docs.nanoclaw.dev: iMessage
- docs.nanoclaw.dev: Proveedores (Claude, Codex, OpenCode, estado de Ollama)
- docs.nanoclaw.dev: Imagen de runtime endurecida Echo
- docs.nanoclaw.dev: Migrar desde v1 / OpenClaw
- docs.nanoclaw.dev: Changelog (v2.4.0, 2026-09-23)
- GitHub: docs/release-2.4-update.md (cambio del modelo por defecto, fijado)
- GitHub: setup/install-docker.sh (Docker vía Homebrew)
- Docker: Instalar Docker Desktop en Mac
- Docker: FAQ de precios (licencias de Docker Desktop)
- Docker Desktop: Ajustes (arranque al iniciar sesión)
- Claude Code: Legal y cumplimiento (OAuth vs clave API)
- platform.claude.com: Visión general y precios de los modelos Claude
- Soporte de Apple: Inicio de sesión automático y FileVault
- TechCrunch (2026-03-13): El creador de NanoClaw y el acuerdo con Docker
- Docker Docs: Requisitos de permisos de Docker Desktop para Mac (se ejecuta como usuario sin privilegios)
Guías relacionadas
Instalar OpenClaw en Mac mini
La alternativa más ligera y sin Docker: instalación global de npm, un único proceso Gateway, configuración JSON5 y canales incluidos.
Instalar Hermes Agent en Mac mini
El agente autoalojado de Nous Research con bucle de aprendizaje, instalador de una línea y soporte de Ollama local.
Ejecutar LLMs en Mac mini M4
Ejecuta Ollama, llama.cpp y modelos de lenguaje locales nativamente en Apple Silicon para inferencia IA sin coste.
Alquila un Mac mini M6
Los planes M6 desde $149/mes: más margen para contenedores de agentes concurrentes y la VM de Docker Desktop.