Voltar para o Blog

terminal-mac em 2026: Como Dar um macOS Virtual Só Para o Seu Agente de IA

Olá HaWkers, em 03/11/2026 um desenvolvedor que assina como govijr publicou no GitHub o terminal-mac, um projeto em Swift com a descrição mais curta e mais provocadora da semana: "Entire MacOS running in your terminal". Onze dias depois, em 14/11/2026, o repositório já tinha 2.718 estrelas e 191 forks. A ideia é simples de explicar e difícil de fazer: um macOS de verdade rodando em máquina virtual, com a tela transmitida para dentro do seu terminal e com um conjunto de comandos para um agente de IA clicar, digitar e tirar screenshot lá dentro.

Você já deixou um agente usar o seu computador e ficou olhando o cursor se mexer sozinho, sem poder encostar no teclado? Esse é o problema que o terminal-mac ataca. Neste artigo eu mostro o que o projeto faz, como instalar, como ligar ao Claude Code e a outros clientes MCP, o que o isolamento realmente garante e onde ele ainda é um protótipo. Tudo o que está aqui vem do README e dos metadados do próprio repositório.

O Que É o terminal-mac

O README define o projeto assim: um desktop macOS separado para agentes de computer use, visto e controlado a partir de um terminal. Três peças fazem isso funcionar:

  • Apple Virtualization roda um macOS convidado real em um Mac com Apple Silicon.
  • Um helper dentro do convidado captura a tela e injeta os eventos de entrada, ou seja, cliques, teclas e rolagem.
  • Um visualizador no terminal transmite essa tela usando os protocolos gráficos do Kitty ou do iTerm2.

O ponto central é o que o agente não toca. Os comandos passam pelo helper que vive dentro da máquina virtual, então o ponteiro do seu Mac físico não se move e a sua área de transferência não muda. O convidado é outro Mac: tem os próprios apps, arquivos, contas e permissões, e não herda os apps que você tem abertos nem as sessões em que você está logado.

O projeto é licenciado sob MIT e o próprio autor o chama de "early release candidate". As três releases publicadas até agora são todas builds da versão 0.2.0 e saíram no mesmo dia, 03/11/2026. Guarde essa informação, porque ela muda a forma como você deve usar a ferramenta.

Por Que Um Mac Separado Para o Agente Importa

Computer use é a capacidade de um modelo operar uma interface gráfica como uma pessoa faria: olhar a tela, decidir, clicar, conferir. Funciona, mas quando roda na sua máquina principal cria três incômodos bem concretos.

O primeiro é a disputa pelo cursor. Enquanto o agente trabalha, você não trabalha. Qualquer movimento seu no mouse atrapalha a tarefa dele, e qualquer clique dele pode cair na janela errada.

O segundo é o alcance. Um agente operando o seu desktop enxerga o que você enxerga: o e-mail aberto, o gerenciador de senhas destravado, a aba do banco. Não precisa haver má intenção para dar errado, basta uma instrução escondida em uma página web. Quem acompanhou o caso em que o Postman instalou plugins no Claude Code e no Codex sem pedir sabe como a superfície de um agente cresce rápido.

O terceiro é a reprodutibilidade. O seu desktop tem anos de configuração acumulada. Um teste de interface que passa nele pode falhar em uma instalação limpa, e você só descobre quando o usuário reclama.

Uma máquina virtual resolve os três de uma vez: o agente ganha um cursor só dele, um ambiente que começa vazio e um lugar onde errar custa pouco.

Requisitos e Instalação

A lista de requisitos do README é curta, mas tem pegadinhas:

  • Mac com Apple Silicon e macOS 14 ou mais recente.
  • Internet na primeira execução para baixar o macOS direto da Apple, ou um arquivo .ipsw compatível que você já tenha.
  • Espaço para a imagem de restauração em cache e para um disco virtual que cresce. O tamanho lógico padrão é de 64 GiB.
  • Ghostty, Kitty ou iTerm2 para ver a tela dentro do terminal. Em outros terminais você usa a janela nativa da VM e a CLI do agente.

Para usar a release pronta não é preciso ter Xcode instalado. A instalação é uma linha:

# Baixa a release mais recente e confere o SHA-256 antes de instalar
curl -fsSL https://github.com/govijr/terminal-mac/releases/latest/download/get.sh | bash

# O lançador vai para ~/.local/bin, então garanta que ele está no PATH
export PATH="$HOME/.local/bin:$PATH"

# Inicia o fluxo guiado: baixa a imagem, instala a VM e dá o boot
terminal-mac up

Segundo o README, o instalador não pede senha de administrador e não edita a configuração do seu shell. Ele coloca um lançador em ~/.local/bin e o runtime em ~/.local/lib/terminal-mac.

Um aviso honesto antes de você colar esse comando: as releases são assinadas com um certificado autoassinado e não passam pela notarização da Apple. O autor diz isso com todas as letras. Se você prefere não executar um script remoto direto no bash, baixe o ZIP da release, leia o install.sh e rode a partir da pasta extraída, que é um caminho que o próprio projeto oferece.

Antes de gastar banda, vale usar o modo de planejamento:

# Mostra os passos sem acessar a rede e sem mexer no disco
terminal-mac up --plan

# Cria uma segunda VM, chamada "work", a partir de uma imagem local
terminal-mac up work --ipsw /caminho/para/macos.ipsw

# Sobe a VM, espera o agente ficar pronto e devolve JSON, sem abrir o visualizador
terminal-mac up --no-view

A Configuração Que Ninguém Pula

Aqui está a parte que o título do repositório não conta. A primeira execução abre a janela do Mac virtual e você precisa passar pelo assistente de configuração do macOS e criar uma conta de usuário, como em um Mac novo. Depois, dentro do convidado:

  1. Abra o Finder em /Volumes/My Shared Files/tools.
  2. Abra o TerminalMacGuest.app uma vez. Ele se instala na pasta ~/Applications do convidado e se registra para iniciar no login.
  3. Use os dois botões do helper para liberar Gravação de Tela e Acessibilidade nos ajustes do convidado.

Essas duas permissões são dadas dentro da máquina virtual. O seu Mac físico não precisa conceder nenhuma delas, e isso é uma diferença grande em relação a ferramentas de computer use que rodam direto no host.

O README é claro: isso é uma configuração guiada, não uma instalação desassistida. O texto explica que a Apple documenta o provisionamento automático de conta para convidados com macOS 27, mas que esta build usa as APIs do SDK do macOS 26 e não implementa esse fluxo. Na prática, você não vai subir dez Macs virtuais em um pipeline de CI com um comando só. Ainda não.

Como Ligar ao Claude Code e a Outros Agentes

O terminal-mac expõe o Mac virtual por um servidor MCP com sete ferramentas: screenshot, click, drag, scroll, type, key e status. Junto vem uma skill que ensina ao agente o ciclo observar, agir e verificar. Se você ainda não trabalhou com esse protocolo, o artigo sobre o Model Context Protocol como padrão para agentes de IA cobre a base.

No Claude Code há dois caminhos:

# Caminho 1: plugin com o servidor MCP e a skill juntos (rode dentro do Claude Code)
# /plugin install terminal-mac --marketplace govijr/terminal-mac

# Caminho 2: registrar o servidor MCP e instalar a skill separadamente
claude mcp add terminal-mac -- terminal-mac mcp
terminal-mac skills install   # grava em ~/.claude/skills/terminal-mac/SKILL.md

# Outros clientes MCP (Cursor, VS Code, Codex, Windsurf):
# cole a saída deste comando nas configurações de MCP do cliente
terminal-mac mcp --config

Um detalhe bem pensado: as ferramentas só conversam com o helper do convidado. Quando a VM está na tela de login, elas respondem isso explicitamente, para que o agente peça a você que faça o login em vez de ficar clicando no escuro.

Controlando o Mac Virtual Pela Linha de Comando

Você não precisa de um agente para usar o projeto. Os mesmos comandos estão na CLI, o que ajuda muito a entender o que o modelo está fazendo e a escrever automações simples:

# Captura a tela do convidado em um PNG no host
terminal-mac action default screenshot --output /tmp/guest.png

# Clica nas coordenadas (x, y), contadas a partir do canto superior esquerdo
terminal-mac action default click 640 400

# Digita texto e envia atalhos de teclado
terminal-mac action default type 'Hello from the agent'
terminal-mac action default key cmd+space
terminal-mac action default key return

# Rola a página para baixo em um ponto específico da tela
terminal-mac action default scroll --dy -300 --x 640 --y 400

Os comandos devolvem JSON e saem com status diferente de zero quando falham, o que permite encadear tudo em um script. O exemplo abaixo é meu, não do repositório, e usa só esse contrato para abrir um app pelo Spotlight e guardar a evidência:

#!/usr/bin/env bash
# Abre um app no Mac virtual pelo Spotlight e salva um screenshot do resultado
set -euo pipefail

VM="default"
APP="${1:-TextEdit}"
SAIDA="/tmp/guest-$(date +%s).png"

# Cada ação falha com status diferente de zero, então o set -e interrompe o script
terminal-mac action "$VM" status
terminal-mac action "$VM" key cmd+space
terminal-mac action "$VM" type "$APP"
terminal-mac action "$VM" key return

# Dá tempo para o app abrir antes de conferir a tela
sleep 3
terminal-mac action "$VM" screenshot --output "$SAIDA"
echo "Evidência salva em $SAIDA"

Duas observações do README que evitam dor de cabeça. As coordenadas usam os pontos da tela do convidado e batem com as dimensões do screenshot, inclusive em telas Retina. E o comando snapshot, por enquanto, é só um apelido de screenshot: ele não devolve a árvore de acessibilidade. O agente trabalha em cima de pixels, e isso deixa o ciclo mais lento e mais sujeito a erro do que uma automação baseada em elementos.

O Que o Isolamento Garante e O Que Não Garante

Esta é a seção do README que eu mais recomendo ler inteira, porque o autor não vende o que não entrega.

O que o projeto garante:

  • As ações do agente não usam as APIs de tela e de entrada do host. O helper se recusa a rodar se o hw.model da máquina não começar com VirtualMac.
  • O convidado enxerga apenas dois compartilhamentos: control, de leitura e escrita, com as mensagens JSON e os screenshots, e tools, somente leitura, com o app do helper. A sua pasta pessoal, os seus projetos, a área de transferência, o microfone e a câmera não são conectados.
  • Não existe nenhuma porta de rede escutando para controle remoto. A comunicação é feita por uma caixa de mensagens em arquivos, que rejeita links simbólicos, limita o tamanho das mensagens e expira ações pendentes.

O que o projeto não garante, nas palavras do próprio README:

  • A checagem de VirtualMac evita a execução acidental no host. Ela não é uma atestação de hardware nem uma defesa contra um host comprometido.
  • A rede padrão é NAT. O convidado acessa a internet e pode alcançar serviços no seu host e na sua rede local. O texto diz que isso não é um ambiente isolado de rede nem reforçado para código hostil.

Se a sua intenção é rodar algo em que você não confia, o caminho é criar a VM sem rede:

# Cria uma VM com recursos explícitos e sem dispositivo de rede
terminal-mac create sandbox --ipsw /caminho/para/macos.ipsw \
  --cpus 4 --memory 4 --disk 64 --offline

# Acompanha e controla o ciclo de vida
terminal-mac ls
terminal-mac status sandbox
terminal-mac pause sandbox
terminal-mac resume sandbox
terminal-mac stop sandbox          # pede um desligamento normal
terminal-mac stop sandbox --force  # desliga na hora; trabalho não salvo pode se perder

Os argumentos são CPUs lógicas, GiB de memória e GiB de disco. A VM continua consumindo CPU, memória e armazenamento do host, então um Mac de entrada com pouca memória vai sentir o peso. Se você leu o artigo de ontem sobre o Harbor da Apple e a conta de memória para IA local no Mac, o raciocínio é o mesmo: memória unificada é o recurso que acaba primeiro.

Limites do Protótipo

Além do isolamento, o README lista com franqueza o que ainda falta:

  • Sem clone e sem checkpoint. Clonagem de VM e pontos de restauração estão na lista de trabalho futuro. Hoje você não reverte o Mac virtual para um estado limpo depois que o agente bagunçou tudo.
  • Sem comando para apagar a VM. O texto diz que a ausência de um comando destrutivo é deliberada, por enquanto. Os dados ficam em ~/Library/Application Support/terminal-mac/machines/NOME/.
  • Sem tmux. Passagem por tmux e divisão automática de terminal não foram implementadas.
  • Validação incompleta. O autor escreve que o teste ao vivo em um Mac limpo ainda está pendente e que os testes automatizados cobrem o protocolo, não provam que um convidado foi instalado, iniciado e controlado com sucesso.
  • VPN pode derrubar a rede do convidado. Apps de VPN e proxy em modo TUN podem deixar o DNS mudo. O projeto oferece o modo --network user, que usa o gvproxy para fazer DHCP, DNS e NAT em espaço de usuário.

Nada disso desqualifica o projeto. Só coloca ele no lugar certo: uma ferramenta de onze dias, feita por uma pessoa no tempo livre, que já resolve um problema real e ainda não é infraestrutura.

Quando Vale Usar Hoje

Com o que existe agora, eu vejo três usos em que o terminal-mac já compensa:

  1. Deixar o agente trabalhar enquanto você trabalha. O motivo mais simples e o mais forte. A tarefa de interface roda na VM e o seu cursor continua seu.
  2. Testar instalação e primeiro uso de um app para macOS. Um convidado sem a sua configuração acumulada mostra o que um usuário novo vai ver.
  3. Estudar computer use sem risco para a sua conta. O agente erra em um Mac que não tem o seu e-mail, as suas senhas nem os seus arquivos.

E dois casos em que eu esperaria: rodar código hostil, porque o próprio autor diz que o ambiente não foi reforçado para isso, e automação em escala, porque a configuração inicial ainda depende de uma pessoa clicando no assistente do macOS.

O Que Vem Pela Frente

O terminal-mac acerta na direção. A discussão sobre agentes passou os últimos meses focada em qual modelo é melhor, e a pergunta que começa a pesar é outra: onde o agente roda e o que ele alcança de lá. Dar a ele uma máquina própria, com fronteiras explícitas e documentadas, é uma resposta melhor do que confiar que ele vai se comportar no seu desktop.

O que falta é o que transformaria o protótipo em ferramenta de trabalho: checkpoint para voltar a um estado limpo, snapshot de acessibilidade para o agente parar de adivinhar em cima de pixels e o provisionamento desassistido que a Apple já documenta para convidados com macOS 27. São três itens que o próprio README cita como trabalho futuro, então o caminho está traçado.

Se você tem um Mac com Apple Silicon e espaço em disco sobrando, vale uma tarde de teste. Leia a seção de isolamento antes, rode o up --plan e comece com uma tarefa pequena.

Bora pra cima! 🦅

📚 Quer Acompanhar o Que Vem Por Aí?

Este artigo cobriu o terminal-mac e o isolamento de agentes de IA em um macOS virtual, mas o ecossistema muda toda semana e nem tudo vira artigo aqui.

No X eu compartilho o que estou testando, os bastidores dos projetos e as novidades que aparecem antes de virarem post.

Me Segue Lá

👉 Seguir @jeffbruchado no X

💡 Conteúdo diário sobre desenvolvimento, carreira e as ferramentas que eu realmente uso

Comentários (0)

Esse artigo ainda não possui comentários 😢. Seja o primeiro! 🚀🦅

Adicionar comentário