{"_id":"@caiquepessan/claude-account-manager","name":"@caiquepessan/claude-account-manager","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@caiquepessan/claude-account-manager","version":"0.1.0","description":"Pick which Claude account `claude` starts with. One environment variable on one spawned process, zero dependencies. Not affiliated with, endorsed by, or sponsored by Anthropic.","keywords":["claude","claude-code","account","profile","switcher","cli","zero-dependencies"],"homepage":"https://github.com/caiquepessan/claude-account-manager#readme","bugs":{"url":"https://github.com/caiquepessan/claude-account-manager/issues"},"repository":{"type":"git","url":"git+https://github.com/caiquepessan/claude-account-manager.git"},"license":"MIT","author":{"name":"Caique Pessan"},"type":"module","bin":{"cam":"bin/cam.js","claude-account-manager":"bin/cam.js"},"engines":{"node":">=18.17.0"},"scripts":{"test":"node --test","lint":"node --test test/pure.test.js","check":"npm run lint && npm test && npm pack --dry-run"},"publishConfig":{"access":"public"},"gitHead":"531c81f3213c569e5b2c65a83b2e0c9bbc5b846e","_id":"@caiquepessan/claude-account-manager@0.1.0","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-wwdclLd1ji7jyF2eFOUDgDEk6kNcEA8UYwaBUAyTqe6U9hICMraF007Zg+AFvzTL5fdoYyiacmtgpsnpWBsftw==","shasum":"3e70c1b18483e6688f5501e2b00d28396734283a","tarball":"https://registry.npmjs.org/@caiquepessan/claude-account-manager/-/claude-account-manager-0.1.0.tgz","fileCount":20,"unpackedSize":596930,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDpykCrQ1brXizs6T8YRpbC7tL/Abo6H3aB7PWGn5Ao6QIgYmyDhPnnyiyLRcIkfYFRsR9cxKUgc+yJjAGIMoFGNRA="}]},"_npmUser":{"name":"caiquepessan","email":"caiquepessan123@gmail.com"},"directories":{},"maintainers":[{"name":"caiquepessan","email":"caiquepessan123@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/claude-account-manager_0.1.0_1788276104239_0.5995852866631228"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-01T15:21:44.029Z","0.1.0":"2026-09-01T15:21:44.393Z","modified":"2026-09-01T15:21:44.826Z"},"maintainers":[{"name":"caiquepessan","email":"caiquepessan123@gmail.com"}],"description":"Pick which Claude account `claude` starts with. One environment variable on one spawned process, zero dependencies. Not affiliated with, endorsed by, or sponsored by Anthropic.","homepage":"https://github.com/caiquepessan/claude-account-manager#readme","keywords":["claude","claude-code","account","profile","switcher","cli","zero-dependencies"],"repository":{"type":"git","url":"git+https://github.com/caiquepessan/claude-account-manager.git"},"author":{"name":"Caique Pessan"},"bugs":{"url":"https://github.com/caiquepessan/claude-account-manager/issues"},"license":"MIT","readme":"# Claude Account Manager (`cam`)\n\n[![CI](https://github.com/caiquepessan/claude-account-manager/actions/workflows/ci.yml/badge.svg)](https://github.com/caiquepessan/claude-account-manager/actions/workflows/ci.yml)\n[![licença](https://img.shields.io/github/license/caiquepessan/claude-account-manager)](LICENSE)\n[![node](https://img.shields.io/badge/node-%E2%89%A518.17-brightgreen)](https://nodejs.org)\n[![dependências](https://img.shields.io/badge/dependencies-zero-brightgreen)](package.json)\n\nEscolha com qual conta Claude o `claude` inicia.\n\nEnglish: [README.md](README.md)\n\n```\nPS C:\\proj\\api> claude\n\n╭──────────────────────────────────────────────────────────────────────╮\n│ Claude Account Manager  0.1.0                    claude 2.1.252      │\n│ ──────────────────────────────────────────────────────────────────── │\n│   ○ default      voce@gmail.com · max             seu login       1  │\n│ ▸ ● work         eu@acme.io · team · Acme Inc     2h atrás        2  │\n│   ○ research     lab@uni.edu · pro                ! expira em 4d  3  │\n│                                                                      │\n│   + Adicionar conta                   via claude auth login       a  │\n│ ──────────────────────────────────────────────────────────────────── │\n│ ↑↓ mover · ↵ iniciar · a adicionar · q sair                          │\n╰──────────────────────────────────────────────────────────────────────╯\n\n● = ativa (pré-selecionada)   ○ = parada   ▸ = cursor   ! = precisa de atenção\n```\n\nAo apertar `↵` a caixa é apagada; sobra uma linha no histórico do terminal e o\nClaude Code de verdade assume:\n\n```\nPS C:\\proj\\api> claude\n✓ work · eu@acme.io · team\n\n╭───────────────────────────────────────────╮\n│ ✻ Welcome to Claude Code                  │\n╰───────────────────────────────────────────╯\n```\n\nApertar `2` faz a mesma coisa em uma tecla só: o dígito pula para a linha e já\ninicia. A ordem das linhas é estável — `default` primeiro, depois a ordem de\ncriação — então os dígitos nunca mudam de lugar embaixo dos seus dedos.\n\n> Sem afiliação com a Anthropic, e sem endosso ou patrocínio dela.\n\n## Por quê\n\nO Claude Code guarda um login só. Se você tem uma conta pessoal e uma de\ntrabalho, ou uma conta por cliente, a única forma suportada de alternar é sair e\nentrar de novo. Isso perde a sessão em que você estava e é lento o bastante para\nas pessoas simplesmente pararem de fazer — e mandarem o prompt errado para a\norganização errada.\n\nO `cam` dá a cada conta a sua própria pasta e deixa você escolher uma na hora de\niniciar. Nada é desconectado. Nada é copiado de uma conta para outra. A conta que\nvocê já usa continua funcionando exatamente como hoje, com o nome `default`.\n\n## Instalação\n\n```sh\nnpm i -g @caiquepessan/claude-account-manager\n```\n\nIsso instala dois comandos, `cam` e o apelido mais longo\n`claude-account-manager`. São o mesmo programa.\n\nRequisitos: Node.js 18.17 ou mais novo e o Claude Code já instalado. O `cam` não\ntem nenhuma dependência em tempo de execução — só módulos nativos do Node.\n\nDepois, para o `claude` sozinho perguntar qual conta usar:\n\n```sh\ncam shell install\n```\n\n## Primeiros passos\n\n```sh\ncam doctor         # antes de tudo, checar cada suposição nesta máquina\ncam add            # entrar com uma segunda conta\ncam shell install  # fazer o `claude` sozinho perguntar\nclaude             # escolher uma conta e iniciar o Claude Code\n```\n\nO `cam add` pede um nome, prova que duas pastas de configuração são de fato\nisoladas nesta máquina, cria a pasta e entrega o terminal ao `claude auth login`\ndo próprio Claude Code. O `cam` nunca vê a sua senha.\n\n```\n╭─ Adicionar uma conta ────────────────────────────────────────────────╮\n│ Dê um nome a esta conta                                              │\n│   ›  client-acme▏                                                    │\n│      a–z 0–9 . _ -  ·  máx 32  ·  isso vira um nome de pasta         │\n╰──────────────────────────────────────────────────────────────────────╯\n  ↵ continuar · esc cancelar\n\n✓ Teste de isolamento  uma pasta nova reporta que está deslogada\n✓ Pasta                ~/.claude-account-manager/profiles/client-acme\n✓ Herdado              onboarding, tema, confiança de pasta, 3 MCP servers\n✓ Compartilhado        plugins, commands, agents, skills   (junction)\n·  Não compartilhado   histórico de conversas e sessões do --resume ficam\n                       privados de cada conta, de propósito\n\n───────────────────────── claude auth login ──────────────────────────\nLogin successful.\n──────────────────────────────────────────────────────────────────────\n\n✓ Conectado           billing@corp.example · Corp Ltd · team\n✓ Salvo como \"client-acme\"\n```\n\nSe o login for cancelado ou falhar, o perfil pela metade é removido e nada mais\nmuda. Para guardá-lo e investigar, use `cam add <nome> --keep`.\n\n## Comandos\n\nDo dia a dia:\n\n| Comando | O que faz |\n| --- | --- |\n| `cam add [nome]` | Entrar com outra conta. Opções: `--console`, `--sso`, `--email <endereço>`, `--no-share`, `--no-seed`, `--share-projects`, `--keep`. |\n| `cam ls` | Listar contas, planos, organizações e validade do login. `--json` para saída de máquina. Apelido: `cam list`. |\n| `cam use [nome]` | Definir a conta que o `claude` sozinho usa. Sem nome e com terminal, abre o menu. |\n| `cam rm <nome>` | Colocar uma conta em quarentena, na pasta `trash/`. `--yes` pula a confirmação digitada, `--purge` apaga de vez em vez disso — sem desfazer, e no macOS apaga também o item do Keychain daquela conta. |\n| `cam shell install\\|uninstall\\|status` | Instalar, remover ou inspecionar o hook do `claude` no shell. `--dry-run` mostra o que mudaria, `--shell <id>` limita a um shell. |\n| `cam doctor` | Checar cada suposição nesta máquina. `--deep` refaz o teste de isolamento, `--fix` aplica os reparos marcados como seguros, `--json` para saída de máquina. |\n| `cam help [comando]` | Ajuda. `--all` também lista os comandos avançados. |\n\nAvançados (`cam help --all`):\n\n| Comando | O que faz |\n| --- | --- |\n| `cam launch [-- <args...>]` | Escolher uma conta e iniciar o Claude Code. É o que o hook do shell chama. |\n| `cam which [-v]` | Mostrar qual conta seria usada agora, e por quê. `--json` para saída de máquina. |\n| `cam env <nome>` | Imprimir o ambiente de uma conta como comandos de shell. `--shell posix\\|powershell\\|fish\\|cmd`. |\n| `cam exec <nome> -- <cmd...>` | Rodar qualquer comando sob o ambiente de uma conta. |\n| `cam restore <nome>` | Trazer de volta uma conta em quarentena. |\n| `cam trash` | Listar a quarentena. `--empty` esvazia, `--yes` pula a confirmação. |\n| `cam config [chave] [valor]` | Ler ou mudar as três configurações: `ask` (`auto\\|always\\|never`), `claudeBin` (caminho absoluto do binário `claude`), `ascii` (`true\\|false`). |\n\nOpções globais: `--cam <nome>`, `--keep-env`, `--ask <modo>`, `--json`,\n`-y/--yes`, `-v/--verbose`, `--ascii`, `--no-color`, `--lang en|pt-BR`,\n`-h/--help`, `--version`.\n\nOs códigos de saída são estáveis e estão documentados no `cam help`:\n\n```\n0 OK   1 ERROR   2 USAGE   4 NOT_FOUND   5 CONFLICT\n6 NO_ACCOUNTS   7 AUTH_FAILED   8 UNSAFE   127 NO_CLAUDE   130 CANCELLED\n```\n\n## Fazendo o `claude` perguntar\n\nO `cam shell install` escreve um bloco gerenciado nos arquivos de inicialização\ndo seu shell. Ele define uma função chamada `claude` que chama o `cam launch` e\ndepois executa o binário `claude` de verdade — resolvido como executável, então a\nfunção nunca chama a si mesma. PowerShell, bash, zsh e fish são suportados. O\n`cmd.exe` não é: a única forma de instalar um hook nele é uma chave `AutoRun` no\nregistro, que afeta todo `cmd.exe` da máquina — invasivo demais. Ali, use\n`cam env` ou `cam exec`.\n\nA regra que o hook segue é de propósito bem estreita:\n\n```sh\nclaude                          # pergunta — sem argumentos e com mais de uma conta\nclaude -p \"resuma isso\" | jq    # não pergunta; a saída padrão continua limpa\nclaude --resume                 # não pergunta; retoma dentro da conta ativa\nclaude --cam research -c        # troca pontual; o claude nunca vê o --cam\n```\n\nQualquer argumento passado ao `claude` significa que você já sabe o que quer,\nentão o menu sai da frente. Integrações de IDE, scripts e CI se comportam\nexatamente como antes de você instalar o `cam`. O menu é desenhado no **stderr**,\nentão a saída padrão em um pipe não é afetada.\n\nPara mudar a política: `cam config ask always` (perguntar mesmo com argumentos)\nou `cam config ask never` (nunca perguntar). O `--ask <modo>` e a variável\n`CAM_ASK` sobrescrevem por uma execução. O `--cam` sem valor força o menu uma vez.\n\nTodas as teclas, e não existem outras:\n\n```\n↑  k  Ctrl+P .......... anterior  (dá a volta)\n↓  j  Ctrl+N  Tab ..... próxima   (dá a volta)\nHome / End ............ primeira / última\n1 … 9 ................. pular para a conta E iniciar\n↵  (CR ou LF) ......... iniciar o Claude Code com a conta destacada\na ..................... adicionar uma conta\nq  Esc ................ sair sem iniciar                 saída 0\nCtrl+C  Ctrl+D ........ cancelar                         saída 130\n```\n\nInstalar o hook é opcional. `cam launch`, `cam exec` e `cam env` funcionam\nsozinhos, e o `cam shell uninstall` tira o bloco de volta, deixando o resto de\ncada arquivo byte a byte como estava.\n\n## Como funciona\n\nO Claude Code lê a variável `CLAUDE_CONFIG_DIR`; quando ela está definida, toda a\nconfiguração dele — inclusive o `.claude.json` e o `.credentials.json` — passa a\nmorar dentro daquela pasta, e não na sua pasta pessoal. O `cam` dá a cada conta a\nsua própria pasta em `~/.claude-account-manager/profiles/<nome>/` e define essa\núnica variável no único processo filho `claude` que ele inicia. A partir daí é o\npróprio Claude Code que cuida das credenciais, dentro daquela pasta, exatamente\ncomo sempre fez — então um token renovado no meio da sessão é gravado direto na\nconta a que pertence, e não existe nenhuma cópia guardada em outro lugar para\nficar desatualizada. A conta reservada `default` é a exceção que torna isso\nseguro de instalar: ela não tem pasta própria, então o `cam` **não** define\nnenhum `CLAUDE_CONFIG_DIR` para ela e entrega ao processo filho o seu ambiente\ncompletamente intocado — byte a byte o que você já tem hoje. Isso inclui um\n`CLAUDE_CONFIG_DIR` que você mesmo tenha definido: o `cam` mantém e imprime\n`respeitando seu CLAUDE_CONFIG_DIR` em vez de passar por cima. O `cam` nunca\nescreve em `~/.claude.json`, `~/.claude/.claude.json` ou\n`~/.claude/.credentials.json`, e não existe nele nenhum caminho de código que\nabra um arquivo de credenciais para escrita.\n\nCinco variáveis silenciosamente valem mais que o `CLAUDE_CONFIG_DIR`. Se\nficassem no lugar, todo perfil resolveria para a mesma conta enquanto o `cam`\nreportasse sucesso — então, ao iniciar uma conta gerenciada pelo `cam`, ele\nremove cada uma daquele processo filho e imprime uma linha dizendo que removeu:\n`CLAUDE_CODE_OAUTH_TOKEN`, `CLAUDE_SECURESTORAGE_CONFIG_DIR`,\n`SELF_HOSTED_RUNNER_HOST_CONFIG_DIR`, `CLAUDE_CODE_ACCOUNT_UUID` e\n`CLAUDE_CODE_ORGANIZATION_UUID`. Use `--keep-env` quando uma delas for justamente\na credencial que você quer. A conta `default` é de novo a exceção, e de\npropósito: nada é removido dela, porque \"intocado\" é a promessa inteira. Se uma\ndessas cinco estiver definida no seu shell, a `default` roda como *aquela*\ncredencial, e não como o seu login do `~/.claude`. Remova a variável, ou escolha\numa conta com nome, onde o `cam` garante a escolha.\n\n## O que é compartilhado e o que não é\n\nUm perfil novo começa vazio, o que significaria reaprovar cada plugin e reaceitar\ncada diálogo de confiança de pasta. Por isso o `cam add` compartilha as partes do\n`~/.claude` que pertencem a *você*, e se recusa a compartilhar as partes que\npertencem à organização de uma conta específica.\n\n| O quê | Tratamento | Por quê |\n| --- | --- | --- |\n| `plugins/`, `commands/`, `agents/`, `skills/` | **Compartilhado** — junction no Windows, symlink no resto; se não der, vira cópia, e por último é pulado | São as suas ferramentas. Edite uma vez, todas as contas veem. |\n| `settings.json`, `CLAUDE.md` | **Copiados uma vez**, na criação | Ponto de partida, não um vínculo vivo — depois cada conta pode divergir. |\n| Estado da máquina: flag de onboarding, tema, confiança por pasta, `mcpServers` | **Herdado uma vez**, a partir de uma lista explícita de chaves permitidas | Para uma conta nova não perguntar de novo o que você já respondeu. |\n| Estado da conta: `oauthAccount`, caches de uso e elegibilidade, caches de acesso a modelo | **Nunca copiado** | Pertence a uma conta só. Copiar contamina a interface e os caches. |\n| `projects/`, `sessions/`, `todos/`, `file-history/`, `shell-snapshots/` | **Não compartilhado** | São transcrições de conversa. Compartilhar deixa o `--resume` de uma conta continuar uma sessão que é de outra organização. |\n\nDito sem rodeio: **depois de trocar de conta, \"meu histórico sumiu\" é o\ncomportamento esperado.** Cada conta tem a sua própria lista de `--resume`, e é\nesse justamente o objetivo. Se você aceita o risco e quer as transcrições\ncompartilhadas mesmo assim, crie o perfil com `cam add <nome> --share-projects`;\no `cam` avisa na criação que o `--resume` pode então carregar a sessão de outra\nconta.\n\nO `cam add --no-share` pula por completo as pastas compartilhadas e os arquivos\ncopiados. O `cam add --no-seed` pula o estado de máquina herdado.\n\n## Segurança\n\nO detalhe completo, incluindo a lista exata de arquivos escritos e o modelo de\nameaça, está no [SECURITY.md](SECURITY.md). As três coisas que importam aqui:\n\n- **O `cam` nunca lê nem escreve o valor de um token.** Não existe caminho de\n  código que abra o `.credentials.json` para escrita. O que ele chega a ler de um\n  é pouco e fixo: os dois carimbos de validade por trás do aviso \"expira em 4d\",\n  o tipo de assinatura e a lista de escopos, se existe ou não um token de acesso,\n  os nomes das chaves de primeiro nível inesperadas, e uma impressão SHA-256 de\n  12 caracteres do token de renovação, usada para perceber que dois perfis são a\n  mesma conta. Nenhum token vai para log nem é gravado em arquivo que o `cam`\n  crie. (O tipo de assinatura *é* guardado, como o plano que aparece no `cam ls`,\n  no `.cam-meta.json` do próprio perfil.)\n- **As credenciais de cada conta ficam onde o Claude Code as coloca.** No Linux e\n  no Windows, isso é um `.credentials.json` em texto puro dentro da pasta do\n  perfil; no macOS, é o Keychain de login, com um nome por pasta de configuração.\n  O `cam` não muda esse armazenamento e não consegue deixá-lo mais seguro do que\n  o Claude Code deixa. No Windows o `chmod` não faz nada, então esses arquivos\n  são protegidos apenas pela ACL NTFS do seu perfil de usuário — o `cam doctor`\n  diz isso em vez de sugerir uma proteção que não existe.\n- **Remover uma conta não encerra a sessão.** O `cam rm` move uma pasta local\n  para `trash/`. A sessão continua válida do lado da Anthropic até você\n  encerrá-la em claude.ai → Settings → Sessions. O `cam rm` avisa isso todas as\n  vezes, e o `cam restore <nome>` desfaz a remoção. O `cam rm --purge` não move\n  nada: ele apaga a pasta do perfil de vez e, no macOS, apaga também o item do\n  Keychain daquele perfil, que o `cam restore` não tem como trazer de volta.\n  Mesmo assim, não encerra a sessão.\n\nEsta ferramenta serve para alternar entre contas que já são suas. Não é uma forma\nde dividir uma conta com outras pessoas; isso vai contra os termos da Anthropic.\n\n## Suporte por plataforma\n\n**Windows e Linux estão verificados.** O mecanismo é exercitado nos dois: o\nisolamento por `CLAUDE_CONFIG_DIR`, junctions e symlinks, o shim de função do\nPowerShell e o hook de bash/zsh. A CI roda a suíte de testes no Ubuntu, macOS e\nWindows, nas versões 18.17, 20, 22 e 24 do Node.\n\n**O macOS é verificado em tempo de execução, não presumido.** No macOS o backend\nde credenciais é o Keychain de login, não um arquivo, e o `cam` não tem como\nafirmar a partir de uma suíte de testes que a separação por pasta de configuração\nno Keychain se comporta como ele precisa. Então, em vez de afirmar, o `cam add`\nprova isso na sua máquina antes de criar uma segunda conta: ele cria uma pasta de\nconfiguração descartável, pergunta ao `claude auth status --json` o que ela\nreporta, e só continua se a resposta for \"deslogado\". Se uma pasta em branco\nalega estar conectada, o isolamento não vale, todas as contas dividiriam uma\ncredencial só e trocar de conta não faria nada enquanto parecesse funcionar — por\nisso o `cam add` se recusa e sai com código 8, em vez de mentir para você. O\n`cam doctor` roda a mesma checagem e guarda o resultado em cache; o\n`cam doctor --deep` refaz.\n\nSe você usa o `cam` no macOS, essa checagem é a garantia que você tem. Relatos de\nuso real no macOS são bem-vindos.\n\n## Perguntas frequentes\n\n**Isso mexe no meu login atual?** Não. Ele vira a linha `default` do menu, e o\n`cam` não acrescenta nenhum `CLAUDE_CONFIG_DIR` próprio nem muda mais nada no\nambiente — byte a byte o comportamento que você tinha antes de instalar o `cam`.\nSe você já define `CLAUDE_CONFIG_DIR` por conta própria, a `default` continua\nusando o seu; o `cam` avisa em vez de passar por cima.\n\n**O `cam` vê a minha senha?** Não. Adicionar uma conta entrega o terminal ao\n`claude auth login` do próprio Claude Code. O `cam` nunca lida com senha, nunca\nsegura um token e nunca fala com os servidores da Anthropic.\n\n**Trocar de conta desconecta a outra?** Não. Cada conta guarda a própria sessão\nna própria pasta. Entrar em uma nova não desconecta as que você já tem.\n\n**Por que meu histórico de conversas sumiu depois de trocar?** Porque ele não foi\njunto, de propósito. As transcrições ficam privadas de cada conta para o\n`--resume` não atravessar a fronteira entre organizações. Veja\n[O que é compartilhado e o que não é](#o-que-é-compartilhado-e-o-que-não-é).\n\n**Deixa o `claude` mais lento?** Só quando ele pergunta. Com argumentos, ele\nresolve uma conta e executa o binário de verdade; não há daemon, nem chamada de\nrede, nem árvore de dependências para carregar.\n\n**Dá para usar sem o hook do shell?** Dá. `cam launch`, `cam exec <nome> --\n<cmd>` e `eval \"$(cam env work)\"` funcionam sozinhos.\n\n**Dá para fixar uma conta para um terminal inteiro ou um job de CI?** Defina\n`CAM_PROFILE` (ou `CAM_ACCOUNT`) com o nome da conta. O `--cam` ainda tem\nprioridade por uma execução.\n\n**Onde fica tudo?** Em `~/.claude-account-manager`. Dá para mudar a pasta inteira\ncom `CAM_HOME` — útil no Windows quando o `MAX_PATH` fica apertado, coisa que o\n`cam doctor` avisa.\n\n## Resolução de problemas\n\nComece pelo `cam doctor`. Ele checa o Node, o binário do `claude`, o isolamento,\no backend de credenciais, variáveis de ambiente presentes, suporte a links, a\ncapacidade do terminal, o tamanho dos caminhos, o hook do shell e a validade do\nlogin de cada conta.\n\n**O menu nunca aparece.** Em ordem de probabilidade:\n\n- O hook não está instalado, ou o terminal é anterior à instalação. Rode\n  `cam shell status` e abra um terminal novo.\n- Um **alias** chamado `claude` está na frente da função. No bash e no zsh, um\n  alias ganha de uma função com o mesmo nome, então o hook nunca roda. O\n  `cam shell install` avisa sobre isso; resolva com `unalias claude` e tire a\n  linha do seu arquivo de configuração.\n- Você está dentro da ferramenta Bash do próprio Claude Code. A variável\n  `CLAUDECODE=1` é definida em todo processo que o Claude Code inicia, e ali o\n  menu é suprimido sem exceção — perguntar em um stdin que nunca vai entregar um\n  byte é um travamento, não um caminho mais lento.\n- Você passou argumentos. É por design: `claude -p …`, `claude -c` e\n  `claude --resume` nunca perguntam. Use `claude --cam` para forçar o menu uma\n  vez, ou `cam config ask always`.\n- Você está no git-bash ou no mintty. Ali o Node não recebe um TTY, então o hook\n  avisa ao `cam` que é um terminal (`CAM_TTY=1`) e o `cam` cai para um prompt\n  numerado, sem nenhum ANSI. Isso é esperado; o Windows Terminal dá o menu\n  completo.\n- Alguma outra coisa não é um terminal (um pipe, um runner de CI). O `cam` diz\n  qual conta usou e por quê, em vez de escolher em silêncio:\n\n  ```\n  $ echo oi | claude\n  cam: usando \"work\" (última usada; o stdin não é um terminal)\n       troque com: cam use <nome>   ou   claude --cam <nome>\n  ```\n\n**`Não encontrei o comando claude`** (saída 127). O `cam` imprime todos os\ncaminhos em que procurou, e essa lista é o diagnóstico. Se o Claude Code está em\num lugar incomum, aponte direto para ele:\n\n```sh\ncam config claudeBin \"C:\\caminho\\para\\claude.exe\"\n```\n\nO `cam doctor` lista todos os caminhos candidatos.\n\n**`CLAUDE_CODE_OAUTH_TOKEN` definida no ambiente.** Essa variável é um desvio\ncompleto da autenticação: ela vale mais que qualquer conta, então, ao iniciar uma\nconta gerenciada pelo `cam`, ele a remove da sessão que inicia e avisa que\nremoveu. Se ela for mesmo a credencial que você quer — em um job de CI, por\nexemplo — use `--keep-env` (ou defina `CAM_KEEP_ENV=1`) e o `cam` avisa que a\nescolha de conta não está sendo garantida. Ela nunca é removida em silêncio, e\nnunca é removida do seu shell. A conta reservada `default` não é tocada de jeito\nnenhum: com essa variável exportada, a `default` roda como a conta do token, e\nnão como o seu login do `~/.claude`. Remova a variável, ou escolha uma conta com\nnome, se não é isso que você quer.\n\n**`Não dá para adicionar uma segunda conta com segurança nesta máquina`**\n(saída 8). Uma pasta de configuração descartável reportou que já está conectada,\nou seja, o isolamento não vale. A causa comum é a variável\n`CLAUDE_SECURESTORAGE_CONFIG_DIR` estar definida. Remova-a e rode o `cam doctor`.\n\n**A saída sai quebrada ou desalinhada.** `CAM_ASCII=1` (ou `--ascii`) força saída\n7-bit para todo símbolo, separador, seta e reticência que o `cam` imprime — menu,\ntabelas, linhas de status e linhas simples de resumo, tudo; `NO_COLOR=1` (ou\n`--no-color`) tira a cor. O layout é idêntico dos dois jeitos. A cor continua\nquando você dobra para ASCII, porque as duas opções são independentes.\n\nA dobra é opt-in e nunca é disparada por redirecionamento: mandar o `cam ls` para\num arquivo preserva o UTF-8, então um e-mail ou nome de organização com acento\nsobrevive. Só um terminal que declara não saber desenhar unicode dobra sozinho.\n\n**Um `%VARIÁVEL%` no prompt chega expandido — só no Windows.** Se o seu Claude\nCode foi instalado com `npm i -g`, o ponto de entrada é um `claude.cmd`, e um\n`.cmd` só pode ser iniciado através do `cmd.exe`. O `cmd.exe` substitui `%NOME%`\npor qualquer variável de ambiente que exista *antes* de o programa começar,\nentão `claude \"estamos com 100%CPU% de carga\"` chega com `%CPU%` já trocado.\nIsso é comportamento documentado do `cmd.exe` e não tem escape na linha de\ncomando — `%%` só funciona dentro de um arquivo .bat —, então nenhuma\nferramenta consegue evitar por completo. Duas saídas: usar o instalador nativo,\ncujo `claude.exe` é executado direto e nunca passa por shell, ou mandar o texto\npela entrada padrão (`… | claude -p -`) em vez de como argumento. Nomes que não\nexistem como variável passam intactos.\n\n**Outra coisa.** O `cam which -v` mostra exatamente qual conta seria usada, por\nquê, qual binário rodaria e a linha de comando completa — normalmente mais rápido\nque adivinhar.\n\n## Desinstalar\n\n```sh\ncam shell uninstall\nnpm uninstall -g @caiquepessan/claude-account-manager\nrm -rf ~/.claude-account-manager      # opcional: apaga as contas extras\n```\n\nO `cam shell uninstall` remove o bloco gerenciado de todo arquivo de shell em que\nescreveu, deixando o resto de cada arquivo byte a byte como estava. Antes de\nmexer em um arquivo ele copia para `<arquivo>.cam-backup-<ISO>`, exatamente como\no `cam shell install` faz. Nada é restaurado *a partir* dessas cópias — elas\nficam ali para você ler ou desfazer na mão, uma por edição, e são suas para\napagar.\n\nO seu login original do Claude Code fica intacto o tempo todo, porque ele nunca\nsaiu do lugar. Apagar o `~/.claude-account-manager` apaga as pastas de\nconfiguração das *outras* contas, o que não encerra as sessões delas — encerre em\nclaude.ai → Settings → Sessions se quiser que sumam de vez.\n\n## Contribuindo\n\nVeja o [CONTRIBUTING.md](CONTRIBUTING.md). Em resumo: ESM, Node 18.17+, zero\ndependências, só módulos `node:`. Tudo que depende do ambiente vem de um `ctx`\ninjetado, então nenhum arquivo em `src/` além do `ctx.js` toca em `process.env`,\n`process.platform`, `process.stdout`, `os.homedir()`, `Date.now()` ou\n`node:child_process`. Toda string voltada ao usuário passa pelo `ctx.t()`, com\nentrada correspondente em `en` e em `pt-BR`.\n\n```sh\ngit clone https://github.com/caiquepessan/claude-account-manager\ncd claude-account-manager\nnode --test          # não há nada para instalar — esse é o ponto\n```\n\nPara testar uma cópia de trabalho sem tocar nas suas contas de verdade:\n\n```sh\nCAM_HOME=/tmp/cam-scratch node bin/cam.js ls\n```\n\nRelatos de bug e questões de segurança:\n[issues](https://github.com/caiquepessan/claude-account-manager/issues) ·\n[SECURITY.md](SECURITY.md).\n\n## Licença\n\nMIT © Caique Pessan. Veja o [LICENSE](LICENSE).\n","readmeFilename":"README.pt-BR.md","_rev":"1-d1adeeba87e22606b4a56544a5bb8998"}