VS Code Extensions
S

Swap Accounts — Claude Code

by lucasftas

Troca rápida entre contas do Claude Code, com dashboard de cota (5h/semana + reset) em tarjas no rodapé. Uma tarja por conta; clique para trocar quando a cota encher.

Downloads

2

Rating

(0)

Version

0.5.1

Last updated

Aug 03, 2026

Troca rápida entre várias contas do Claude Code direto do VSCode, com um dashboard de cota no rodapé. Uma tarja por conta (nome + % de uso das 5h/semana + horário de reset); quando a cota de uma enche, você clica na tarja de outra e continua — mantendo o mesmo contexto (histórico, projetos, settings do Claude Code).

Por que

Quem tem mais de uma conta Claude (Max/Pro/Teams) bate o limite de uso de uma e quer pular pra outra sem reconfigurar nada. O Claude Code guarda a credencial num único lugar (CLAUDE_CONFIG_DIR); esta extensão gira essa credencial entre contas que você capturou antes, e mostra a cota de cada uma pra você saber pra qual pular.

No rodapé, uma tarja por conta: ✓ Personal 12% (ativa, fundo colorido) · Work 45% · Studio ⊗ 09/08 (semana esgotada). Clique numa tarja pra trocar.

Como funciona (resumo técnico)

O Claude Code lê a conta de:

  • <configDir>/.credentials.json — token OAuth (claudeAiOauth.accessToken)
  • <configDir>/.claude.json — identidade exibida (oauthAccount)

onde configDir = CLAUDE_CONFIG_DIR (ou ~/.claude). A extensão guarda um snapshot por conta em ~/.claude-accounts/<id>/ e, ao trocar, copia o snapshot por cima do configDir e recarrega a janela — a extensão Claude Code relê o token no reload. A cota vem de GET https://api.anthropic.com/api/oauth/usage.

A troca é manual, por clique — sem rotação automática (evita o risco de rotacionar tokens no meio de uma sessão).

Instalar

Rápido (sem buildar)

  1. Baixe o swap-accounts-<versão>.vsix do último release.
  2. Instale (precisa do code no PATH):
code --install-extension swap-accounts-0.1.0.vsix
  1. Developer: Reload Window.

Buildar do código

git clone https://github.com/lucasftas/swap-accounts.git
cd swap-accounts
npm install
npm run compile
npx @vscode/vsce package --allow-missing-repository --no-yarn
code --install-extension swap-accounts-0.1.0.vsix

Requisito: Node.js + code CLI no PATH (VSCode → Command Palette → "Shell Command: Install 'code' command in PATH").

Configurar as contas

Nas settings (settings.json), declare as contas — uma tarja por item, na ordem da lista:

"swapAccounts.accounts": [
  { "id": "personal", "label": "Personal", "color": "#644389" },
  { "id": "work",     "label": "Work",     "color": "#D6515C" }
]
  • id — nome da pasta-snapshot (~/.claude-accounts/<id>/). Sem espaços.
  • label — texto exibido na tarja.
  • color — cor hex (fundo quando a conta está ativa, texto quando inativa).

O snapshot de cada conta é criado a partir da conta logada no momento:

  1. Logue na conta A no Claude Code (claude auth login).
  2. Command Palette → "Swap Accounts: Capturar conta atual num slot" → escolha o slot (ou crie um id novo).
  3. Repita pra cada conta (logue na B, capture no slot B; etc).

Isso salva ~/.claude-accounts/<id>/.credentials.json + oauthAccount.json. Refaça a captura de uma conta sempre que quiser atualizar o snapshot dela (ex: token renovado).

Usar

  • Trocar: clique na tarja da conta desejada no rodapé (ou Command Palette → "Swap Accounts: Trocar de conta") → confirme Recarregar. A janela recarrega e o Claude Code volta na conta nova, mesmo contexto.
  • Conta esgotada/desconectada → login: se a conta estiver 429/cota estourada (5h ou semana ≥100%) ou desconectada (sem sessão salva), clicar na tarja abre o login dela em vez de trocar (trocar pra uma conta sem cota/sessão não adianta). A esgotada dá a opção "Trocar mesmo assim"; a desconectada vai direto pro login. Depois de logar, rode "Capturar conta atual num slot" pra salvar a sessão. (Também via Command Palette → "Swap Accounts: Fazer login numa conta".)
  • Dashboard: cada tarja mostra as duas cotas$(clock) 5h% (janela de 5 horas / sessão) e $(calendar) semana%. marca a cota que estourou. A conta ativa tem $(check) e fundo colorido; passe o mouse pra ver os % + horários de reset/volta detalhados.
    • Projeção da semana (no hover): o tooltip estima quando a cota semanal chega a 100% e diz direto, pelo dia da semana⚠️ nesse ritmo, a cota da semana estoura na Quinta às 10h24 ou 📈 nesse ritmo, a cota da semana aguenta até resetar (Quinta). O ritmo combina dinâmico (últimas ~4h, de amostras que a extensão guarda por conta em <accountsDir>/<id>/usage-samples.json) + fixo (média desde o início do ciclo): no começo pesa o fixo (estável), depois o dinâmico assume.
    • Só a conta ativa mostra cota ao vivo (token fresco). Inativas usam o snapshot, que expira ~1h após a captura → mostram ·? (estado expired, não conta como desconectada — a troca segue normal). Isso é esperado.

Settings

Setting Default O que é
swapAccounts.accounts [] Lista de contas (id, label, color).
swapAccounts.accountsDir ~/.claude-accounts Onde ficam os snapshots.
swapAccounts.configDir $CLAUDE_CONFIG_DIR ou ~/.claude Config dir do Claude Code (credencial ativa).
swapAccounts.reload reloadWindow Como aplicar: reloadWindow · command · none.
swapAccounts.reloadCommand "" Comando shell quando reload=command (${id} = conta destino).
swapAccounts.loginCommand "" Comando de login ao clicar numa conta 429/desconectada (${id}/${email}). Vazio = claude auth login.
swapAccounts.refreshSeconds 60 Intervalo pra reconsultar a cota.

code-server / servidor (modo command)

No VSCode desktop, reloadWindow basta. Em code-server (ou setups onde o Claude Code roda como serviço), reiniciar o serviço é mais confiável que recarregar a aba do browser. Use:

"swapAccounts.reload": "command",
"swapAccounts.reloadCommand": "sudo systemd-run --collect --unit=claude-switch-${id} --property=Type=oneshot /home/USER/scripts/claude-switch.sh ${id}"

Nesse modo a extensão não mexe nos arquivos — delega tudo ao comando (que sabe parar o serviço antes de trocar a credencial, evitando lock). Um script de referência (claude-switch.sh, faz copy da credencial + patch do oauthAccount + restart) está em scripts/.

Notas

  • Fundo colorido da tarja ativa: a API do VSCode só permite error/warning como background de status bar item. Pra dar cor por conta, a extensão sobrescreve statusBarItem.errorBackground no seu settings.json global ao trocar de conta. Outros itens de status que usem essa cor herdam o tom da conta ativa.
  • Segurança: os snapshots contêm tokens OAuth reais. ~/.claude-accounts/ fica fora de qualquer repositório; não versione essa pasta.
  • macOS: se o Claude Code guardar a credencial no Keychain (sem CLAUDE_CONFIG_DIR apontando pra arquivo), a troca por arquivo não se aplica — defina CLAUDE_CONFIG_DIR pra usar credencial em disco.

Releases

https://github.com/lucasftas/swap-accounts/releases

Related extensions