CLIs de IA têm um problema chato: identidade global.
Atire a primeira pedra quem nunca abriu o terminal para mexer em um projeto pessoal e perceber que a CLI de IA estava logada na conta da empresa. Ou pior, estar no projeto da empresa e rodar tudo com a conta pessoal.
Você entra num projeto pessoal e está usando a conta da empresa, vai para o projeto da empresa e está com a conta pessoal, troca login, desloga, reloga, muda variável, ajusta diretório... um saco.
O problema das CLIs de IA é que elas, normalmente, assumem uma identidade global. Uma conta, uma configuração, uma pasta de credenciais, uma variável de ambiente para tudo, mas na prática, isso vira bagunça muito rápido para quem alterna entre clientes, empresa e projetos paralelos.
Eu resolvi isso criando o Cloak, uma ferramenta em Rust que permite isolar identidades por diretório. Com ele, consigo ter quantas instâncias eu quiser abertas ao mesmo tempo, o limite é o número de contas que eu possuo.
Com ele, cada projeto pode ter seu próprio perfil. Então eu consigo, ao mesmo tempo, usar uma conta no projeto da empresa, outra conta em um side project e até abrir várias instâncias da mesma CLI sem conflito.
Na prática, o fluxo é simples:
associo um perfil ao diretório com `cloak use work` ou `cloak use personal`;
o Cloak resolve o perfil correto subindo a árvore de diretórios;
injeta o ambiente isolado da CLI;
remove variáveis globais que poderiam vazar contexto; e
entrega a execução para a ferramenta real.
Para o terminal, parece que a CLI está rodando normalmente. Mas por baixo, ela está usando a identidade certa para aquele projeto.
O resultado é bem direto:
menos troca de login;
menos risco de usar a conta errada;
menos vazamento de contexto entre trabalho e vida pessoal.
Além disso, o Cloak também permite:
inspecionar qual conta está logada em cada perfil;
isolar configuração de editores como Cursor e VS Code;
centralizar snapshots de limites de uso por perfil.
A imagem abaixo mostra exatamente isso: quatro instâncias do Claude abertas ao mesmo tempo, cada uma em uma conta diferente, sem conflito.
maioria das CLIs modernas de IA não foi feita para quem "multitaska" entre diferentes clientes ou contextos. Elas assumem que você é um usuário único com uma chave única. Se você exporta uma ANTHROPIC_API_KEY global, ela vaza para todos os seus projetos.
A Solução: Isolamento de Processo via exec(2)
O cloak não é um wrapper pesado ou um daemon. Ele funciona como um roteador de ambiente:
Associação por diretório: Você define qual perfil um repositório usa com um simples cloak use work ou cloak use personal.
Resolução de Escopo: Ao subir a árvore de diretórios, ele encontra o arquivo .cloak e resolve o caminho de configuração isolado (ex: ~/.config/cloak/profiles/work/claude).
Ponte de Execução: Ele define as variáveis de ambiente necessárias (como CLAUDE_CONFIG_DIR) e limpa as globais para evitar vazamentos.
Substituição de Processo: Ele usa a syscall exec para substituir o processo atual pelo da CLI real. Para o seu terminal, é como se a CLI original estivesse rodando nativamente, mas com o "manto" (cloak) da identidade correta.
O Diferencial: Múltiplos Perfis Simultâneos
A grande vantagem é que o isolamento acontece no nível do processo filho. Isso significa que eu posso:
No diretório /projeto-a, rodar o Claude com a conta da empresa.
No diretório /side-project, rodar o Claude com a conta pessoal.
Tudo ao mesmo tempo.
Funcionalidades Adicionais
Account Inspection: Ele lê os arquivos de credenciais locais (JWTs, JSONs) e te diz exatamente quem está logado em cada perfil antes de você disparar um comando caro.
Editor Integration: Consegui isolar até o user-data-dir de editores como Cursor e VS Code, garantindo que as extensões também respeitem o perfil do projeto.
Usage Limits: Ele captura os snapshots de limites de uso e centraliza tudo em um comando cloak profile limits.
O projeto está em Rust pela performance e segurança de memória, garantindo que esse roteamento de ambiente tenha overhead zero.
O que acham dessa abordagem de isolamento por diretório comparado ao uso de containers ou VMs para desenvolvimento?
Repositório: https://github.com/juniormartinxo/cloak