OSS · Extensión de Chrome · Node.js

claude-shift

Una máquina, varias cuentas de Claude Code.

Gestiona varias cuentas de Claude Code en la misma máquina. shift use cambia la cuenta activa sincronizando los dos archivos que Claude Code realmente lee (~/.claude/.credentials.json para los tokens, ~/.claude.json para el oauthAccount que muestra /status). Un servidor local consulta api.anthropic.com/api/oauth/usage en intervalo configurable y guarda la utilización de 5 horas y semanal en SQLite. El popup del Chrome muestra cada cuenta con un gráfico SVG cruzado y permite cambiar la activa desde el popup.

Ver en GitHub Internals de la autenticación en dos archivos →

Demo en terminal de claude-shift: shift list imprime las tres cuentas registradas con la activa marcada, shift usage reporta 5 horas y semanal por cuenta, shift use imoto-team cambia la activa y el siguiente shift list confirma el nuevo estado.
shift list → shift usage → shift use → shift list. Cada cambio hace sync back del token refresh y reescribe el oauthAccount que lee /status, así el login sigue válido y la vista sigue fiel.

Comandos CLI

Un shell script sobre helpers en Node. Todos los comandos funcionan solos; server y popup son opcionales.

Comando Qué hace
shift list Lista todas las cuentas registradas con la activa marcada.
shift use <name> Cambia la activa. Hace sync back del token refresh y actualiza el oauthAccount en ~/.claude.json.
shift usage Muestra 5 horas y semanal con horas de reset por cuenta.
shift seed <name> Hace una petición mínima para iniciar la ventana de 5 horas ahora. Útil antes de una sesión larga.
shift add <name> Registra el credentials.json actual como <name>. Token duplicado emite aviso (-f para forzar).
shift rm <name> Elimina el registro. Eliminar la activa requiere -f.
shift server Levanta el servidor local (127.0.0.1:19867). Hace polling de usage y guarda en SQLite.

Popup del Chrome

El popup habla con un servidor local en 127.0.0.1:19867 que consulta la API de usage en intervalo configurable y graba snapshots en SQLite. Cada cuenta recibe una barra de 5 horas y una semanal; el modal de análisis dibuja un gráfico SVG cruzado en 6h / 24h / 7d. La card activa lleva el badge 使用中; las demás muestran el botón 切替 que dispara la misma pipeline de shift use por detrás.

Popup del Chrome de Claude Shift con tres cuentas (imoto-max20 en 98% semanal en rojo, imoto-team en 51% semanal en azul, kumiko activa en 9% semanal), con barras de 5 horas y semanal y horas de reset por cuenta.

Instalación

Cloná el repo y registrá las cuentas una por una. Cada cuenta se captura justo después del /login dentro de 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/

Cuatro cosas que vale conocer

Cada una costó un incidente real. Las dejo documentadas para que el próximo lector las salte directo.

  1. La vista de la cuenta vive en ~/.claude.json, no en el archivo de credenciales

    Cambiar solo ~/.claude/.credentials.json hace que /status siga mostrando la cuenta anterior mientras el nuevo token autentica cada request. El desajuste es silencioso y confuso. shift use trae el profile de api.anthropic.com/api/oauth/profile con el nuevo token y escribe ambos archivos de forma consistente.

  2. Los tokens refresh deben sincronizarse antes de sobrescribir

    El archivo de token en disco es actualizado por Claude Code durante la sesión. Sobrescribir con la cuenta destino sin sincronizar el archivo actual de vuelta al slot de la cuenta original descarta ese refresh y puede requerir un nuevo login. shift use graba las credenciales actuales en el slot de la cuenta anteriormente activa antes de reemplazar.

  3. La ventana de 5 horas empieza en el primer uso, no en el reloj

    Dos cuentas Max/Team iniciadas a las 10:00 y a las 15:00 dan dos ventanas de 5 horas independientes que se pueden encadenar. shift seed hace una petición mínima para iniciar la ventana bajo demanda, útil para posicionar una ventana nueva justo antes de una sesión larga.

  4. El intervalo de polling del popup es configurable y persiste

    El servidor acepta --interval N (minutos) al arrancar y un POST /config desde el popup. El valor se guarda en ~/.claude-shift/config.json y se recarga en el siguiente tick. Por defecto 10 minutos; el ícono de engranaje del popup lo cambia sin reiniciar el servidor.

Herramientas relacionadas para devs

Todos los productos →

← Volver a productos