OSS · Extensão do Chrome · Node.js

claude-shift

Uma máquina, várias contas do Claude Code.

Gerencia várias contas do Claude Code no mesmo computador. shift use troca a conta ativa sincronizando os dois arquivos que o Claude Code realmente lê (~/.claude/.credentials.json para os tokens, ~/.claude.json para o oauthAccount que aparece no /status). Um servidor local consulta api.anthropic.com/api/oauth/usage em intervalo configurável e grava a utilização de 5 horas e semanal em SQLite. O popup do Chrome mostra cada conta com um gráfico SVG cruzado e deixa você trocar a ativa direto do popup.

Ver no GitHub Internals da autenticação em dois arquivos →

Demo de terminal do claude-shift: shift list imprime as três contas registradas com a ativa marcada, shift usage informa 5 horas e semanal por conta, shift use imoto-team troca a ativa e o próximo shift list confirma o novo estado.
shift list → shift usage → shift use → shift list. Cada troca faz sync back do token refresh e reescreve o oauthAccount lido pelo /status, então o login continua válido e a exibição continua fiel.

Comandos CLI

Um shell script sobre helpers em Node. Todos os comandos funcionam sozinhos; server e popup são opcionais.

Comando O que faz
shift list Lista todas as contas registradas com a ativa marcada.
shift use <name> Troca a ativa. Faz sync back do token refresh e atualiza o oauthAccount em ~/.claude.json.
shift usage Mostra 5 horas e semanal com horas de reset por conta.
shift seed <name> Faz uma requisição mínima para iniciar a janela de 5 horas agora. Útil antes de sessão longa.
shift add <name> Registra o credentials.json atual como <name>. Token duplicado gera aviso (-f para forçar).
shift rm <name> Remove o registro. Remover a ativa requer -f.
shift server Sobe o servidor local (127.0.0.1:19867). Faz polling de usage e grava em SQLite.

Popup do Chrome

O popup conversa com um servidor local em 127.0.0.1:19867 que consulta a API de usage em intervalo configurável e grava snapshots em SQLite. Cada conta ganha uma barra de 5 horas e uma semanal; o modal de análise desenha um gráfico SVG cruzado em 6h / 24h / 7d. O card ativo carrega o badge 使用中; os demais mostram o botão 切替, que dispara a mesma pipeline do shift use por trás.

Popup do Chrome do Claude Shift com três contas (imoto-max20 em 98% semanal em vermelho, imoto-team em 51% semanal em azul, kumiko ativa em 9% semanal), com barras de 5 horas e semanal e horários de reset por conta.

Instalação

Clone o repositório e registre as contas uma de cada vez. Cada conta é capturada logo depois do /login dentro do Claude Code.

# 1. Clone and install
git clone https://github.com/kenimo49/claude-shift
cd claude-shift
npm install
chmod +x shift.sh

# 2. Register accounts, one at a time
# Inside Claude Code, run /login for the account you want to register.
# Immediately after, register it:
./shift.sh add my-account-a

# Repeat /login + add for every account you want to manage.

# 3. Start the usage server (optional, needed for popup)
./shift.sh server --interval 5

# 4. Load the Chrome extension
# chrome://extensions → Developer mode → Load unpacked → extension/

Quatro coisas que valem saber

Cada uma custou um incidente real. Deixo documentado para quem for ler depois pular direto.

  1. A exibição da conta fica em ~/.claude.json, não no arquivo de credenciais

    Trocar só ~/.claude/.credentials.json faz o /status seguir mostrando a conta anterior enquanto o novo token autentica cada request. O desencontro é silencioso e confuso. shift use busca o profile em api.anthropic.com/api/oauth/profile com o novo token e escreve os dois arquivos de forma consistente.

  2. Tokens refresh precisam ser sincronizados de volta antes da sobrescrita

    O arquivo de token no disco é atualizado pelo Claude Code durante a sessão. Sobrescrever com a conta destino sem sincronizar o arquivo atual de volta para o slot da própria conta descarta esse refresh e pode exigir novo login. shift use grava as credenciais atuais no slot da conta anteriormente ativa antes de substituir.

  3. A janela de 5 horas começa no primeiro uso, não no relógio

    Duas contas Max/Team iniciadas às 10:00 e às 15:00 dão duas janelas de 5 horas independentes que podem ser encadeadas. shift seed faz uma requisição mínima para iniciar a janela sob demanda, útil para posicionar uma janela nova bem antes de uma sessão longa.

  4. O intervalo de polling do popup é configurável e persiste

    O servidor aceita --interval N (minutos) na inicialização e um POST /config vindo do popup. O valor é gravado em ~/.claude-shift/config.json e recarregado no próximo tick. Padrão 10 minutos; o ícone de engrenagem no popup altera o valor sem reiniciar o servidor.

Ferramentas relacionadas para devs

Todos os produtos →

← Voltar para produtos