- Instale o Claude Code em um Mac extra sem dados pessoais e configure-o como um ambiente independente sempre acessível via SSH a partir do Mac principal e pelo app Claude no celular
- O nível de isolamento do hardware é maior que o de contêineres e também permite usar Unity e apps GUI exclusivos do Mac, separando do Mac principal os riscos de
--dangerously-skip-permissions
- A base para trabalho remoto é criada com uma nova conta local de administrador,
sudo e SSH sem senha, prevenção de repouso, sincronização da área de transferência e instalação do Claude Code
- O controle da GUI é implementado com um servidor tmux mantido por um LaunchAgent dentro da sessão gráfica; as permissões de gravação de tela, acessibilidade e acesso total ao disco precisam ser concedidas manualmente por uma pessoa
- Ao adicionar Remote Control, Claude in Chrome, Screen Sharing e Tailscale, é possível ir do controle pelo celular à automação do navegador e ao acesso externo, mas isso exige autenticação separada e configuração de permissões do macOS
Objetivo da configuração e princípios básicos
- Criar um ambiente que o Claude Code possa controlar de forma independente, delegando tarefas de pesquisa e desenvolvimento para fora do Mac principal
- Como agentes que usam
--dangerously-skip-permissions têm permissões amplas, execute-os em um dispositivo separado sem dados pessoais nem Apple ID para reduzir as informações sensíveis acessíveis
- É possível acessar o Claude Code a qualquer momento pelo app Claude no celular ou por SSH a partir do Mac principal
- A configuração básica requer um Mac de destino extra conectado ao mesmo Wi‑Fi e o Mac de origem usado no dia a dia
Por que usar um Mac extra em vez de contêineres ou OpenClaw
- Contêineres ainda são executados no Mac principal e as requisições de rede também passam por ele, portanto não oferecem separação completa de hardware
- É difícil executar Unity ou apps exclusivos do Mac, e há limitações em tarefas de GUI que exigem clicar e arrastar usando recursos de uso do computador
- A configuração com um Mac extra aproveita diretamente os recursos mais recentes do Claude Code, o controle pelo app Claude e a cota da assinatura Claude que você já possui
- Separe o ambiente seguindo estes princípios
- Use um Mac extra antigo, não o Mac principal
- Crie uma nova conta local sem dados pessoais nem Apple ID
- Controle por SSH na rede local e pelo app Claude no celular
1. Redefinir o Mac de destino e isolar a conta
- Se houver dados pessoais existentes, o agente poderá acessar tudo; por isso, primeiro apague o dispositivo
- Macs compatíveis: System Settings → General → Transfer or Reset → Erase All Content and Settings
- Macs Intel mais antigos: ao inicializar, pressione
Cmd-R para entrar no Recovery, apague o drive interno pelo Disk Utility e reinstale o macOS
- Se necessário, atualize para a versão mais recente do macOS em System Settings → General → Software Update
- Crie uma nova conta de usuário local e pule o login com Apple ID
- Conceda privilégios de administrador à conta para que ela possa usar
sudo
- Em System Settings → Users & Groups, ative
Allow this user to administer this computer
- Ao recuperar a partir de outra conta de administrador, é possível usar
sudo dseditgroup -o edit -a <user> -t user admin
2. Ativar login remoto por SSH
- No Mac de destino, ative o Remote Login com o comando abaixo
sudo systemsetup -setremotelogin on
- Se ocorrer o erro
Turning Remote Login on or off requires Full Disk Access privileges, conceda Full Disk Access ao Terminal
- Em System Settings → Privacy & Security → Full Disk Access, adicione Applications → Utilities → Terminal
- Feche o Terminal, abra-o novamente e execute o comando outra vez
3. Configurar sudo sem senha
- Para que o agente e os comandos SSH não peçam senha a cada vez, crie uma regra por conta em
/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
- O primeiro comando grava a regra, e o segundo define a permissão somente leitura exigida pelo
sudo
- Na verificação final, a saída deve obrigatoriamente mostrar
parsed OK; uma sintaxe incorreta no sudoers pode bloquear o acesso via sudo
- Se
sudo -n true tiver sucesso sem produzir saída, o sudo sem senha está funcionando
4. Verificar o endereço do Mac de destino
- Como o IP pode mudar após reinicializações ou com o passar do tempo, recomenda-se usar um nome de host fixo
scutil --get LocalHostName
- Acrescente
.local ao nome exibido e use-o como <target-host>.local
- Se dois Macs na mesma rede tiverem o mesmo nome
.local, você pode se conectar ao dispositivo errado; portanto, defina um nome exclusivo
sudo scutil --set LocalHostName newmacbook
- Se precisar do IP, é possível verificá-lo com
ipconfig getifaddr en0, mas ele pode mudar
- A partir daqui, use o endereço no formato
<user>@<target-host>.local
5. Configurar SSH sem senha a partir do Mac de origem
- Se ainda não houver uma chave SSH, gere uma chave Ed25519 no Mac de origem
ssh-keygen -t ed25519
ssh-copy-id <user>@<target-host>.local
- Ao instalar a chave pública, digite a senha da conta de destino uma vez
- Se o comando abaixo imprimir o nome do usuário de destino sem pedir senha, a configuração está concluída
ssh <user>@<target-host>.local whoami
6. Evitar repouso e bloqueio automático
- Mesmo conectado à energia, o macOS pode entrar em repouso após cerca de 10 minutos ocioso e desaparecer da rede; por isso, desative o repouso
sudo pmset -c sleep 0
sudo pmset -c disablesleep 1
sudo pmset -c displaysleep 0
- Cada comando aplica, respectivamente, a prevenção do repouso do sistema durante o carregamento, a prevenção do repouso com a tampa fechada e a prevenção do repouso da tela
- Na saída de
pmset -g | grep -iE 'sleep', confirme sleep 0, SleepDisabled 1 e displaysleep 0
- Para aplicar também na bateria, use
-a em vez de -c, mas isso aumenta o consumo de bateria
- Também evite o bloqueio automático causado pelo protetor de tela
defaults -currentHost write com.apple.screensaver idleTime 0
7. Sincronização da área de transferência via SSH
- Ao conectar
pbcopy e pbpaste do macOS por SSH, é possível transferir texto de forma P2P criptografada sem Apple ID nem serviços externos
clip.sh também oferece suporte ao envio de imagens
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"
- Adicione a configuração
IC_BOX ao ~/.zshrc
clip send envia texto ou imagens do Mac de origem para o destino; imagens podem ser coladas com Ctrl-V na sessão do Claude Code no destino
clip get traz a área de transferência do Mac de destino para o Mac de origem
8. Instalar o Claude Code
- A partir do Mac de origem, instale uma versão específica do Claude Code no Mac de destino via SSH
ssh <user>@<target-host>.local 'curl -fsSL https://claude.ai/install.sh | bash -s -- 2.1.201'
- Em vez da versão
2.1.201, também é possível especificar latest ou stable
- Se aparecer um aviso de PATH para
~/.local/bin, adicione o caminho ao ~/.zshenv, que é lido por todos os zsh
ssh <user>@<target-host>.local 'echo '\''export PATH="$HOME/.local/bin:$PATH"'\'' >> ~/.zshenv'
9. Instalação opcional de um ambiente amigável ao Claude Code
- O opcional
setup-claude-env.sh instala aliases de shell, plugins de DX, ajustes no settings.json, GitHub CLI e, opcionalmente, Playwright MCP e yt-dlp
- A lista completa de componentes pode ser conferida em
claude-env-components.md
- Na execução interativa, os itens padrão vêm selecionados e os itens opcionais são oferecidos em uma checklist desmarcada
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'
- A execução não interativa instala, por padrão, apenas os itens essenciais e oferece suporte às flags
--yt-dlp, --playwright, --all e --core
- O script é idempotente, portanto pode ser executado novamente
10. Login no Claude e no GitHub
- Conecte-se ao Mac de destino via SSH, execute
claude e faça login na conta da Anthropic usando o fluxo de navegador/código de dispositivo, que pode ser concluído no navegador do Mac principal
- Para trabalhar com repositórios, recomenda-se adicionar o login do GitHub com
gh auth login
- Para que o agente não afete a conta principal, é mais seguro usar uma conta separada do GitHub
11. Recurso de uso do computador via SSH
-
Como se conectar à sessão de GUI
- O processo SSH não consegue usar diretamente as permissões de gravação de tela e acessibilidade vinculadas à sessão de login da GUI
- Um LaunchAgent mantém um servidor tmux e a sessão âncora
cc em um socket fixo dentro da sessão de GUI
- O Claude Code iniciado dentro desse servidor herda a sessão de GUI e acessa capturas de tela e controle de mouse e teclado
-
Instalação
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 o LaunchAgent e a âncora tmux, e ativa a ferramenta embutida
computer-use em ~/.claude.json
- É necessário ter tmux e o plano Claude Pro ou Max; o script pode ser executado novamente e removido com
--uninstall
-
Gerenciar sessões com o comando ic
- Instale
ic.sh no Mac de origem
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
- Os principais comandos são:
ic: nova sessão do Claude
ic -c, ic -r: continuar a conversa recente ou seletor de retomada
ic --chrome: executar junto com o Claude in Chrome
ic sh: shell comum no destino
ic vnc: executar Screen Sharing
ic rc: servidor de Remote Control no celular
ic history, ic ls: verificar conversas salvas e sessões em execução
ic attach <id>, ic kill <id>, ic kill-all, ic kill-except: gerenciar conexão e encerramento de sessões
- Todas as sessões
ic são executadas com --dangerously-skip-permissions, e ic rc usa --permission-mode bypassPermissions
- Dentro do tmux, o Terminal.app não recebe as sequências de área de transferência OSC52 enviadas pelo Claude; portanto, para copiar a tela inteira, use
Cmd-A e depois Cmd-C
-
Delegação entre agentes
- O Claude Code no Mac de origem pode usar SSH e
tmux send-keys para enviar prompts a uma sessão do Claude em execução no destino
- Em prompts longos, o Enter incluído no mesmo lote de envio do texto pode não ser tratado como envio; aguarde um pouco e envie Enter mais uma vez
- É possível ler a resposta com
tmux capture-pane e tail, repetindo a verificação até a tarefa terminar
-
Permissões que uma pessoa precisa conceder manualmente
- As permissões de gravação de tela e acessibilidade devem ser aprovadas manualmente por uma pessoa na GUI do macOS e não podem ser tratadas por cliques sintéticos
- Também é necessário aprovar a solicitação
bypass the window picker que aparece na primeira captura; ela pode reaparecer aproximadamente uma vez por mês
- O alvo da permissão não é
claude, mas sim o processo responsável, o binário do tmux
- Caminho no Intel:
/usr/local/bin/tmux
- Caminho no Apple Silicon:
/opt/homebrew/bin/tmux
- A gravação de tela permite capturas de tela, e a acessibilidade permite controle de mouse e teclado
- Como o estado das permissões é armazenado em cache quando o processo inicia, após concedê-las é preciso reiniciar o servidor com
tmux -S /tmp/cc-tmux.sock kill-server
- Se o tmux não aparecer na lista de ajustes, peça ao Claude no
ic uma captura de tela para disparar primeiro a solicitação de permissão
- Para evitar solicitações repetidas de acesso a dados por aplicativo nas versões recentes do macOS, conceda Full Disk Access ao tmux e reinicie o servidor
12. Instalação de VPN e outros apps de GUI
- É possível instalar uma VPN, como a Proton VPN, para separar o tráfego do Mac de destino do IP local
- Se o recurso de uso do computador tiver sido configurado, você pode pedir ao Claude no
ic para instalar apps, mas as tarefas a seguir precisam ser feitas por uma pessoa
- Mesmo no plano gratuito, são necessárias credenciais de login, e a senha pode ser transmitida com
clip send
- É preciso aprovar as permissões de VPN/configuração de rede na primeira conexão e as solicitações da senha do Mac
- Para controlar apps exclusivamente de GUI, é necessário o recurso de uso do computador
- Depois do login, o agente pode realizar conexões e alternar servidores, e o mesmo fluxo pode ser aplicado a outros aplicativos
13. Controle pelo celular
- Ao executar
/remote-control ou /rc em uma sessão existente, é possível continuar controlando a mesma sessão pelo app Claude
claude remote-control permite, além de conectar a uma sessão existente pelo celular, criar novas sessões
- Ao iniciar com
ic rc, as sessões criadas pelo celular também podem acessar o recurso de uso do computador do Mac de destino
14. Configuração do Claude in Chrome
- O recurso geral de uso do computador consegue ver a tela do navegador, mas tem limitações para cliques e entrada de texto
- A extensão Claude in Chrome oferece suporte a navegação, cliques, preenchimento de formulários e leitura de logs do console e de requisições de rede
- Diferentemente do Playwright MCP, ela usa o perfil normal do Chrome no Mac de destino, permitindo aproveitar sessões já logadas
- No Mac de destino, são necessários o Chrome e uma assinatura direta Anthropic Pro, Max, Team ou Enterprise
- As seguintes tarefas precisam ser feitas manualmente por uma pessoa
- Clicar em
Add to Chrome na Chrome Web Store
- Fazer login na conta Claude pela extensão; as credenciais podem ser passadas com
clip send
- No Claude Code, execute
/chrome para ativar por padrão, ou use claude --chrome ou ic --chrome por sessão
- Se não conectar, reinicie o Chrome uma vez
- O script de ambiente da etapa 9 adiciona instruções a
~/.claude/CLAUDE.md para usar referências a elementos da árvore de acessibilidade em vez de coordenadas e evitar capturas de tela não solicitadas
- Se o Chrome de origem e o de destino executarem simultaneamente a extensão na mesma conta, aparece uma solicitação de seleção, e há a issue #74667, em que a identificação da máquina local pode falhar
- É possível contornar removendo temporariamente a extensão do Mac de origem ou fechando o Chrome na origem
- Há a issue #74671, em que sessões criadas pelo celular atualmente não recebem ferramentas de navegador
- Inicie a sessão pelo terminal e depois conecte o celular com
/rc
15. Screen Sharing do macOS
- Com o Screen Sharing integrado, é possível verificar em tempo real a tela de destino a partir do Mac de origem e controlar diretamente o mouse e o teclado
- A partir do macOS 12.1, não é possível ativá-lo pela linha de comando, então é necessário configurá-lo pela GUI do destino
- Em System Settings → General → Sharing, ative Screen Sharing
- Se Remote Management estiver ativado e o seletor não aparecer, desative-o primeiro
- No Mac de origem, conecte-se com o seguinte comando
open vnc://<user>@<target-host>.local
- Faça login com a senha da conta de destino e, se quiser, escolha salvar a senha no Keychain
16. Acesso a redes externas via Tailscale
- Endereços
.local funcionam apenas na LAN, mas o Tailscale permite usar SSH, ic, clip e Screen Sharing também em redes externas por meio de túneis WireGuard P2P com criptografia de ponta a ponta
- Ele não expõe serviços à internet pública e, na rede doméstica, usa uma rota LAN direta
- Entrar na rede Tailscale apenas fornece alcançabilidade entre os dispositivos, portanto chaves SSH ou a senha do Screen Sharing continuam sendo necessárias
- Instale no Mac de destino em modo headless e faça login pela URL exibida
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>'
- Instale também no Mac de origem e faça login com a mesma conta Tailscale do destino
brew install --cask tailscale-app
- Usando o MagicDNS, ativado por padrão, você pode acessar de qualquer lugar pelo nome do host sem
.local
export IC_BOX="<user>@<target-host>"
# export IC_BOX="<user>@<target-host>.local"
- Altere também o endereço do Screen Sharing para
open vnc://<user>@<target-host>
- No console de administração, recomenda-se as seguintes configurações de segurança e disponibilidade
- Ativar device approval para impedir que um novo dispositivo entre apenas com um login comprometido
- Desativar a expiração de chave para que o dispositivo de destino não seja desconectado por expiração da chave após cerca de 180 dias
- Para testar o acesso remoto de fato, conecte o Mac de origem a outra rede, como o hotspot do celular, e verifique com
ic ls
1 comentários
Opiniões no Hacker News
Se não for para o desenvolvimento gráfico mencionado no texto, não há motivo para isolar o agente em hardware real. Escrevi um script que cria um desktop gráfico dedicado ao Claude com libvirt, até fazendo testes de aceitação de usuário no Chrome
Mesmo dando todos os privilégios de root, se algo der errado dá para descartar e reinstalar em poucos segundos
sudo useradd agent,sudo su agent, para que o agente só consiga estragar os próprios arquivos. Também tirei screenshots com Chrome headless e configurei VNC, mas não valeu muito a penaMesmo em um VPS de 3 dólares, se quebrar dá para reinstalar na hora, então é divertido dar root ao agente
Não consigo de jeito nenhum encontrar um uso em que a IA realmente valha a pena para ajudar 24 horas por dia, mas eu também queria sentir essa necessidade
Na prática, se você estiver fora e chegarem alertas do Datadog, logs de nuvem e GitHub, dá para pedir ao Claude Code para investigar e classificar algo como “timeouts na API do banco parceiro ocorrem em cerca de 15% das requisições desde uma hora atrás”. Depois é só contatar o responsável e voltar ao fim de semana
Um esquema de plantão adequado seria melhor, mas considerando a flexibilidade que o trabalho oferece, dá para tolerar alertas de Slack no fim de semana
Com mais frequência, o gargalo é o hardware, não o limite da assinatura
Em vez de instalar o Claude em um terceiro PC para continuar alucinando código que ninguém quer e tentar não ficar para trás, vou programar eu mesmo, porque gosto de programar
Configurei algo parecido em um Mac antigo como alternativa gratuita ao bot OpenClaw. Às vezes a conexão cai e preciso retomar pelo celular, mas também rodo o Homebridge, que o Claude consegue operar, então tem sido bem útil
Instalei o Claude Desktop em um Mac mini M4 separado e o controlo com o Dispatch. Já consigo controlar totalmente a conta local que dei ao Claude; fico curioso se há algum motivo para mudar para esse método
Seria bom se o Claude usasse meu computador como host de sandbox, em vez de eu executar o RC a cada sessão no host. Hoje uso uma configuração provisória em que uma sessão RC mestre cria uma nova janela tmux e uma sessão Claude RC para cada tarefa de programação
Quando surgem bugs no RC, dá para usar o Code diretamente no Termux, mas a interface de permissões do iOS era um tanto instável
curlewgetsem problemasIsso não resolve todas as limitações, mas dá para instalar macOS e Claude Code em uma máquina virtual no Mac usando UTM. O UTM roda até com uma conta sem privilégios de administrador e permite usar a maioria das ferramentas nativas do Mac
Porém, a UI do Claude Code na máquina virtual não tem bom desempenho interativo, e não tenho certeza se dá para contornar isso conectando pelo terminal a partir de uma conta sem privilégios de administrador no host
Reconstruí meu homelab/servidor de mídia em um HP EliteDesk com i5, em vez de um NUC antigo cujo superaquecimento eu não consegui resolver. Pretendo criar uma máquina virtual para isolamento em um Ubuntu básico e rodar o Claude para testar o Dispatch, ou instalar o Claude Code diretamente e usar o app Moshi no iPhone/iPad
Configurei algo parecido com um M2 antigo. Não é suficiente para rodar modelos locais com bom desempenho, mas é perfeito para OpenClaw e Claude
É surpreendente que os preços de MacBooks M1/M2 agora estejam relativamente baratos em comparação com o Mac mini