- Instala Claude Code en una Mac extra sin datos personales y configúrala como un entorno independiente siempre accesible desde el SSH de tu Mac principal y la app de Claude en el teléfono.
- Ofrece un nivel de aislamiento de hardware mayor que un contenedor y además permite usar Unity y apps GUI exclusivas de Mac, por lo que el riesgo de
--dangerously-skip-permissions puede separarse de tu Mac principal.
- Crea una cuenta nueva de administrador local, configura
sudo y SSH sin contraseña, evita el reposo, sincroniza el portapapeles e instala Claude Code para establecer la base de trabajo remoto.
- El control por GUI se implementa con un servidor tmux que un LaunchAgent mantiene dentro de la sesión GUI, y los permisos de grabación de pantalla, accesibilidad y acceso total al disco deben ser autorizados manualmente por una persona.
- Si agregas Remote Control, Claude in Chrome, Screen Sharing y Tailscale, podrás controlar desde el teléfono, automatizar el navegador y acceder desde fuera, pero se requieren autenticación separada y ajustes de permisos de macOS.
Objetivo de la configuración y principios básicos
- Crear un entorno que Claude Code pueda controlar de forma independiente para delegar tareas de investigación y desarrollo fuera de la Mac principal.
- Como un agente que usa
--dangerously-skip-permissions tiene permisos muy amplios, ejecútalo en un equipo separado sin datos personales ni Apple ID para reducir la información sensible accesible.
- Puedes acceder a Claude Code en cualquier momento desde la app de Claude en el teléfono o mediante SSH desde la Mac principal.
- La configuración básica requiere una Mac de destino extra conectada a la misma red Wi‑Fi y una Mac de origen que usas a diario.
Por qué usar una Mac extra en lugar de contenedores u OpenClaw
- Los contenedores siguen ejecutándose en la Mac principal y las solicitudes de red también pasan por ella, así que no hay una separación completa a nivel de hardware.
- Es difícil ejecutar Unity o apps exclusivas de Mac, y también hay limitaciones para tareas GUI que requieren hacer clic o arrastrar con funciones de uso de la computadora.
- La configuración con una Mac extra aprovecha tal cual las funciones más recientes de Claude Code, el control desde la app de Claude y el uso de la suscripción de Claude que ya tienes.
- El entorno se aísla según los siguientes principios:
- Usar una Mac extra antigua en lugar de la Mac principal.
- Crear una cuenta local nueva sin datos personales ni Apple ID.
- Controlarla por SSH en la red local y con la app de Claude desde el teléfono.
1. Restablecer la Mac de destino y aislar la cuenta
- Si hay datos personales existentes, el agente podrá acceder a todo, así que primero borra el equipo.
- Mac compatibles: System Settings → General → Transfer or Reset → Erase All Content and Settings
- Mac Intel antiguas: al arrancar, entra en Recovery con
Cmd-R, borra la unidad interna con Disk Utility y luego reinstala macOS.
- Si hace falta, actualiza a la versión más reciente de macOS en System Settings → General → Software Update.
- Crea una nueva cuenta de usuario local y omite el inicio de sesión con Apple ID.
- Otorga privilegios de administrador a la cuenta para poder usar
sudo.
- En System Settings → Users & Groups, activa
Allow this user to administer this computer.
- Al recuperar desde otra cuenta de administrador, puedes usar
sudo dseditgroup -o edit -a <user> -t user admin.
2. Activar el inicio de sesión remoto por SSH
- En la Mac de destino, activa Remote Login con el siguiente comando:
sudo systemsetup -setremotelogin on
- Si aparece el error
Turning Remote Login on or off requires Full Disk Access privileges, concede Full Disk Access a Terminal.
- En System Settings → Privacy & Security → Full Disk Access, agrega Applications → Utilities → Terminal.
- Cierra Terminal, vuelve a abrirla y ejecuta de nuevo el comando.
3. Configurar sudo sin contraseña
- Para que el agente y los comandos por SSH no pidan contraseña cada vez, crea una regla por cuenta en
/etc/sudoers.d/.
echo "<user> ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/<user>-nopasswd >/dev/null
sudo chmod 440 /etc/sudoers.d/<user>-nopasswd
sudo visudo -cf /etc/sudoers.d/<user>-nopasswd
- El primer comando escribe la regla, el segundo establece los permisos de solo lectura que exige
sudo.
- En la validación final debe aparecer obligatoriamente
parsed OK; una sintaxis incorrecta en sudoers puede bloquear el acceso a sudo.
- Si
sudo -n true se ejecuta correctamente sin mostrar salida, el sudo sin contraseña ya funciona.
4. Verificar la dirección de la Mac de destino
- Como la IP puede cambiar tras reiniciar o con el tiempo, se recomienda usar un nombre de host fijo.
scutil --get LocalHostName
- Agrega
.local al nombre mostrado y úsalo como <target-host>.local.
- Si los nombres
.local de las dos Mac coinciden en la misma red, podrías conectarte al equipo equivocado, así que asigna un nombre único.
sudo scutil --set LocalHostName newmacbook
- Si necesitas la IP, puedes verla con
ipconfig getifaddr en0, pero puede cambiar.
- A partir de aquí, usa la dirección con el formato
<user>@<target-host>.local.
5. Configurar SSH sin contraseña desde la Mac de origen
- Si no tienes una clave SSH existente, genera una clave Ed25519 en la Mac de origen.
ssh-keygen -t ed25519
ssh-copy-id <user>@<target-host>.local
- Al instalar la clave pública, introduce una vez la contraseña de la cuenta de destino.
- Si el siguiente comando muestra el nombre de usuario de destino sin pedir contraseña, la configuración quedó lista.
ssh <user>@<target-host>.local whoami
6. Evitar el reposo y el bloqueo automático
- macOS puede entrar en reposo tras unos 10 minutos de inactividad incluso conectado a la corriente y desaparecer de la red, así que desactiva el reposo.
sudo pmset -c sleep 0
sudo pmset -c disablesleep 1
sudo pmset -c displaysleep 0
- Cada comando aplica, respectivamente, prevención del reposo del sistema mientras carga, prevención del reposo con la tapa cerrada y prevención del reposo de la pantalla.
- Verifica
sleep 0, SleepDisabled 1 y displaysleep 0 en la salida de pmset -g | grep -iE 'sleep'.
- Si también quieres aplicarlo con batería, usa
-a en lugar de -c, pero aumentará el consumo de batería.
- También evita el bloqueo automático por el protector de pantalla.
defaults -currentHost write com.apple.screensaver idleTime 0
7. Sincronización del portapapeles por SSH
- Si conectas
pbcopy y pbpaste de macOS por SSH, puedes transferir texto de forma P2P cifrada sin Apple ID ni servicios externos.
clip.sh también permite transferir imágenes.
curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/… -o ~/.local/bin/clip
chmod +x ~/.local/bin/clip
export IC_BOX="<user>@<target-host>.local"
- Agrega la configuración de
IC_BOX a ~/.zshrc.
clip send envía al destino el texto o la imagen desde la Mac de origen; las imágenes se pueden pegar con Ctrl-V en la sesión de Claude Code del destino.
clip get trae el portapapeles de la Mac de destino a la Mac de origen.
8. Instalar Claude Code
- Desde la Mac de origen, instala una versión específica de Claude Code en la Mac de destino a través de SSH.
ssh <user>@<target-host>.local 'curl -fsSL https://claude.ai/install.sh | bash -s -- 2.1.201'
- En lugar de la versión
2.1.201, también se puede especificar latest o stable
- Si aparece una advertencia de PATH para
~/.local/bin, agrega la ruta a ~/.zshenv, que es leído por todas las sesiones de zsh
ssh <user>@<target-host>.local 'echo '\''export PATH="$HOME/.local/bin:$PATH"'\'' >> ~/.zshenv'
9. Instalación opcional de un entorno amigable para Claude Code
- El script opcional
setup-claude-env.sh instala alias de shell, plugins de DX, ajustes en settings.json, GitHub CLI y opcionalmente Playwright MCP y yt-dlp
- La lista completa de componentes puede revisarse en
claude-env-components.md
- En la ejecución interactiva se seleccionan los elementos predeterminados y se muestra una lista de verificación desmarcada para las instalaciones opcionales
ssh -t <user>@<target-host>.local \
'curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/… -o setup-claude-env.sh && bash setup-claude-env.sh'
- La ejecución no interactiva instala solo los elementos principales de forma predeterminada y admite las banderas
--yt-dlp, --playwright, --all y --core
- El script es idempotente, así que puede ejecutarse de nuevo
10. Inicio de sesión en Claude y GitHub
- Conéctate por SSH a la Mac de destino, ejecuta
claude e inicia sesión en tu cuenta de Anthropic mediante el flujo de navegador y código de dispositivo, que puede completarse en el navegador de la Mac principal
- Para trabajar con repositorios, se recomienda agregar el inicio de sesión de GitHub con
gh auth login
- Es más seguro usar una cuenta de GitHub separada para que el agente no afecte a la cuenta principal
11. Función de uso de computadora a través de SSH
-
Cómo se conecta a la sesión GUI
- Los procesos SSH no pueden usar directamente la grabación de pantalla ni los permisos de accesibilidad vinculados a una sesión de inicio de sesión GUI
- Un LaunchAgent mantiene un servidor tmux y una sesión ancla
cc en un socket fijo dentro de la sesión GUI
- Claude Code iniciado dentro de ese servidor hereda la sesión GUI y obtiene acceso a capturas de pantalla y control de mouse y teclado
-
Instalación
ssh -t <user>@<target-host>.local \
'curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/… -o setup-computer-use.sh && bash setup-computer-use.sh'
- Instala el LaunchAgent y el ancla de tmux, y activa la herramienta integrada
computer-use en ~/.claude.json
- Requiere tmux y un plan Claude Pro o Max; el script puede volver a ejecutarse y puede eliminarse con
--uninstall
-
Gestión de sesiones con el comando ic
- Instala
ic.sh en la Mac de origen
curl -fsSL https://raw.githubusercontent.com/ykdojo/claude-controls-mac/… -o ~/.local/bin/ic
chmod +x ~/.local/bin/ic
echo 'export IC_BOX="<user>@<target-host>.local"' >> ~/.zshrc
- Los comandos principales son los siguientes
ic: nueva sesión de Claude
ic -c, ic -r: continuar la conversación reciente o abrir el selector para reanudar
ic --chrome: ejecutar junto con Claude in Chrome
ic sh: shell normal del destino
ic vnc: iniciar Screen Sharing
ic rc: servidor de Remote Control para el teléfono
ic history, ic ls: ver conversaciones guardadas y sesiones en ejecución
ic attach <id>, ic kill <id>, ic kill-all, ic kill-except: gestionar conexión y cierre de sesiones
- Todas las sesiones de
ic se ejecutan con --dangerously-skip-permissions, y ic rc usa --permission-mode bypassPermissions
- Dentro de tmux, Terminal.app no puede recibir las secuencias de portapapeles OSC52 que emite Claude, así que para copiar toda la pantalla usa
Cmd-A y luego Cmd-C
-
Delegación entre agentes
- Claude Code en la Mac de origen puede enviar prompts a una sesión de Claude en ejecución en el destino mediante SSH y
tmux send-keys
- En prompts largos, el Enter incluido en el mismo bloque de envío que el texto puede no interpretarse como envío, así que hay que esperar un momento y mandar Enter una vez más
- Se puede leer la respuesta con
tmux capture-pane y tail, y verificar repetidamente hasta que termine la tarea
-
Permisos que una persona debe otorgar directamente
- Los permisos de grabación de pantalla y accesibilidad deben aprobarse manualmente en la GUI de macOS y no pueden resolverse con clics simulados
- También hay que aprobar la solicitud para permitir
bypass the window picker que aparece en la primera captura, y puede volver a mostrarse aproximadamente una vez al mes
- El objetivo del permiso no es
claude, sino el proceso responsable: el binario de tmux
- Ruta en Intel:
/usr/local/bin/tmux
- Ruta en Apple Silicon:
/opt/homebrew/bin/tmux
- La grabación de pantalla permite capturas de pantalla, y accesibilidad permite el control de mouse y teclado
- Como el estado del permiso se almacena en caché al iniciar el proceso, después de otorgarlo hay que reiniciar el servidor con
tmux -S /tmp/cc-tmux.sock kill-server
- Si tmux no aparece en la lista de configuración, primero provoca la solicitud de permiso pidiéndole a Claude una captura de pantalla desde
ic
- Para no repetir solicitudes de acceso a datos por aplicación en versiones recientes de macOS, otorga Full Disk Access a tmux y reinicia el servidor
12. Instalación de VPN y otras apps GUI
- Puedes instalar una VPN como Proton VPN para separar el tráfico de la Mac de destino de la IP local
- Si ya configuraste la función de uso de computadora, puedes pedirle a Claude desde
ic que instale la app, pero las siguientes tareas deben hacerlas personas
- Incluso en el plan gratuito se requieren credenciales de inicio de sesión, y la contraseña puede enviarse con
clip send
- Hay que aprobar los permisos de VPN y configuración de red de la primera conexión, así como la solicitud de contraseña de la Mac
- Para controlar apps solo GUI se requiere la función de uso de computadora
- Después del inicio de sesión, el agente puede encargarse de la conexión y del cambio de servidor, y el mismo flujo puede aplicarse a otras aplicaciones
13. Control desde el teléfono
- Si ejecutas
/remote-control o /rc en una sesión existente, puedes seguir controlando esa misma sesión desde la app de Claude
claude remote-control admite no solo conectarse a una sesión existente desde el teléfono, sino también crear una nueva sesión
- Si se inicia con
ic rc, las sesiones creadas desde el teléfono también pueden acceder a la función de uso de computadora de la Mac de destino
14. Configuración de Claude en Chrome
- La función de uso general de la computadora puede ver la pantalla del navegador, pero tiene limitaciones para hacer clic o escribir
- La extensión Claude en Chrome admite navegación, clics, entrada en formularios y lectura de logs de consola y solicitudes de red
- A diferencia de Playwright MCP, usa el perfil normal de Chrome de la Mac de destino, por lo que puede aprovechar un estado donde ya hayas iniciado sesión
- La Mac de destino necesita Chrome y una suscripción directa a Anthropic Pro, Max, Team o Enterprise
- Las siguientes tareas deben hacerse manualmente
- Hacer clic en
Add to Chrome en Chrome Web Store
- Iniciar sesión en la cuenta de Claude desde la extensión; las credenciales pueden enviarse con
clip send
- En Claude Code, ejecuta
/chrome para activarlo por defecto, o usa claude --chrome o ic --chrome por sesión
- Si no se conecta, reinicia Chrome una vez
- El script de entorno del paso 9 agrega instrucciones a
~/.claude/CLAUDE.md para usar referencias a elementos del árbol de accesibilidad en lugar de coordenadas y evitar capturas de pantalla no solicitadas
- Si la extensión de la misma cuenta se ejecuta al mismo tiempo en el Chrome de origen y de destino, aparece una solicitud de selección, y existe el issue #74667 donde la detección del equipo local puede fallar
- Se puede evitar eliminando temporalmente la extensión de la Mac de origen o cerrando Chrome en el origen
- Existe el issue #74671 donde las sesiones creadas desde el teléfono actualmente no ofrecen herramientas del navegador
- Inicia la sesión desde la terminal y luego conecta el teléfono con
/rc
15. Screen Sharing de macOS
- Con Screen Sharing integrado puedes ver en tiempo real la pantalla de destino desde la Mac de origen y controlar directamente el mouse y el teclado
- Desde macOS 12.1, no se puede activar desde la línea de comandos, así que debe configurarse en la GUI de destino
- Activa Screen Sharing en System Settings → General → Sharing
- Si Remote Management está activado y no aparece el interruptor, desactívalo primero
- Conéctate desde la Mac de origen con el siguiente comando
open vnc://<user>@<target-host>.local
- Inicia sesión con la contraseña de la cuenta de destino y puedes elegir guardar la contraseña en Keychain
16. Acceso desde redes externas mediante Tailscale
- Las direcciones
.local solo funcionan en la LAN, pero Tailscale permite usar SSH, ic, clip y Screen Sharing también desde redes externas mediante un túnel WireGuard P2P cifrado de extremo a extremo
- No expone servicios a la internet pública y, en la red doméstica, usa directamente la ruta LAN
- Unirse a la red de Tailscale solo proporciona conectividad entre equipos, por lo que siguen siendo necesarias las claves SSH o la contraseña de Screen Sharing
- Instálalo en la Mac de destino en modo headless e inicia sesión desde la URL que aparece en la salida
ssh <user>@<target-host>.local 'brew install tailscale'
ssh <user>@<target-host>.local 'sudo brew services start tailscale'
ssh <user>@<target-host>.local 'sudo tailscale up --operator=<user>'
- Instálalo también en la Mac de origen e inicia sesión con la misma cuenta de Tailscale que el destino
brew install --cask tailscale-app
- Si usas MagicDNS, que está activado por defecto, puedes acceder desde cualquier lugar usando el nombre del host sin
.local
export IC_BOX="<user>@<target-host>"
# export IC_BOX="<user>@<target-host>.local"
- La dirección de Screen Sharing también cambia a
open vnc://<user>@<target-host>
- En la consola de administración se recomiendan las siguientes configuraciones de seguridad y disponibilidad
- Activa device approval para que un equipo nuevo no pueda unirse solo con un inicio de sesión comprometido
- Desactiva key expiry para que el equipo de destino no se desconecte por expiración de clave después de unos 180 días
- Para probar el acceso remoto real, conecta la Mac de origen a otra red, como un hotspot del teléfono, y verifica con
ic ls
1 comentarios
Comentarios de Hacker News
Salvo que se trate del desarrollo gráfico mencionado en el artículo, no hay motivo para aislar al agente en hardware real. Escribí un script que crea un escritorio gráfico dedicado para Claude con libvirt y hasta ejecuta pruebas de aceptación de usuarios en Chrome
Incluso si le das todos los privilegios de root, si algo sale mal puedes descartarlo y reinstalarlo en segundos
sudo useradd agent,sudo su agent, para que el agente solo pueda arruinar sus propios archivos. También tomé capturas con Chrome headless y configuré VNC, pero no valió mucho la penaIncluso en un VPS de 3 dólares puedes reinstalar enseguida si algo se rompe, así que tiene su gracia darle root al agente
No logro encontrar ningún caso de uso donde la IA realmente ayude 24/7, pero también me gustaría sentir esa necesidad
De hecho, si estando fuera empiezan a llegar alertas de Datadog, logs de la nube y alertas de GitHub, puedes poner a Claude Code a investigar y hacer que las clasifique con algo como “la API del banco afiliado está teniendo timeouts en aproximadamente el 15% de las solicitudes desde hace una hora”. Luego contactas a la persona responsable y vuelves a tu fin de semana
Un sistema de guardias bien armado sería mejor, pero considerando la flexibilidad que da el trabajo, hasta vale la pena tolerar alertas de Slack el fin de semana
Muchas veces el cuello de botella es el hardware más que el límite de la suscripción
En vez de instalar Claude en una tercera PC para que siga alucinando código que nadie quiere mientras intento no quedarme atrás, prefiero programar yo mismo, porque disfruto programar
Monté algo parecido en una Mac vieja como reemplazo gratuito del bot de OpenClaw. A veces se cae la conexión y tengo que volver a transferir el control desde el teléfono, pero también corro Homebridge, que Claude puede manejar, así que resulta bastante útil
Tengo Claude Desktop instalado en una Mac mini M4 separada y la controlo con Dispatch. Me pregunto si hay alguna razón para cambiar a este enfoque cuando Claude ya puede controlar por completo la cuenta local que le di
En vez de ejecutar RC en cada sesión del host, me gustaría que Claude usara mi computadora como host del sandbox. Por ahora uso una configuración temporal donde una sesión maestra de RC crea una nueva ventana de tmux y una sesión de Claude RC para cada tarea de programación
Si aparece algún bug en RC, puedo usar Code directamente desde Termux, pero la interfaz de permisos en iOS me resultó algo inestable
curlywgetsin problemaAunque no resuelve todas las limitaciones, con UTM puedes instalar macOS y Claude Code en una máquina virtual en Mac. UTM puede ejecutarse con una cuenta sin privilegios de administrador y permite usar la mayoría de las herramientas nativas de Mac
Eso sí, la UI de Claude Code dentro de la máquina virtual no tiene buen rendimiento interactivo, y no está claro si se puede evitar eso entrando por terminal desde una cuenta sin privilegios en el host
Reconstruí mi homelab y servidor multimedia con una HP EliteDesk con i5 en lugar de un NUC viejo cuyo sobrecalentamiento nunca pude resolver. Pienso crear una máquina virtual aislada sobre Ubuntu base y correr Claude para probar Dispatch, o instalar Claude Code directamente y usar la app Moshi en iPhone y iPad
Armé algo parecido con una M2 vieja. No alcanza para correr modelos locales con suficiente potencia, pero es perfecta para OpenClaw y Claude
También sorprende que los precios de las MacBook M1 y M2 ya estén relativamente bajos en comparación con la Mac mini