OSS · Chrome拡張 · Node.js

claude-shift

1台のマシンに、複数のClaude Codeアカウント。

同じマシン上に複数のClaude Codeアカウントを持つための管理ツール。shift use は Claude Code が実際に読んでいる2ファイル、~/.claude/.credentials.json (token) と ~/.claude.json の oauthAccount (/status が表示している方) を両方同期して active を切り替えます。ローカルAPIサーバーが api.anthropic.com/api/oauth/usage を可変間隔でポーリングし、5時間枠と週次の使用率をSQLiteに時系列snapshot。Chrome拡張のpopupはアカウント一覧と横断SVG折れ線グラフを表示し、popupからactive切替まで実行できます。

GitHubで見る 2ファイル認証の内部仕様 →

claude-shiftのターミナルデモ: shift list は登録済み3アカウントと現在activeを表示、shift usage は各アカウントの5時間枠と週次の使用率+リセット時刻を出し、shift use imoto-team で activeを切替、続く shift list で activeが変わっていることを確認。
shift list → shift usage → shift use → shift list。切替のたびに refresh 済み token を sync back し、/status が読んでいる oauthAccount も書き換えるので、ログインは有効なまま表示も正しくなる。

CLIコマンド

1本のshellスクリプトが Node ヘルパを呼び出す構成。すべて単独で動き、server と popup はオプションです。

コマンド 内容
shift list 登録済み全アカウントとactiveを一覧表示。
shift use <name> activeを切替。refresh済みtokenをsync backし、~/.claude.jsonのoauthAccountも更新。
shift usage 全アカウントの5時間枠と週次の使用率+リセット時刻を表示。
shift seed <name> 最小の課金requestで5時間ウィンドウを今から起動。長時間セッションの直前に新枠を仕込む用途に。
shift add <name> 現在の credentials.json を <name> として登録。重複tokenは警告 (-fで強行)。
shift rm <name> 登録削除。active削除は -f 必要。
shift server ローカルAPIサーバー(127.0.0.1:19867)を起動。usageを可変間隔でポーリング+SQLite保存。

Chrome拡張のpopup

popupは127.0.0.1:19867のローカルサーバーと会話します。サーバーはusage APIを可変間隔でポーリングし、SQLiteに時系列snapshot。カードごとに5時間枠と週次のバーを描き、分析モーダルは6h / 24h / 7d の横断SVG折れ線グラフを表示します。active カードは「使用中」バッジ、それ以外は「切替」ボタンで、押すと裏で shift use と同じパイプラインが走ります。

Claude Shift Chrome拡張のpopup。3アカウント(imoto-max20が週次98%で赤、imoto-teamが週次51%で青、kumikoがactiveで週次9%)を表示、各アカウントの5時間枠と週次バーとリセット時刻。

インストール

リポジトリをcloneして、アカウントを1つずつ登録します。各アカウントはClaude Code内の /login 直後にキャプチャします。

# 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/

知っておくと良い4点

いずれも実際の事故を経て把握した挙動です。次に触る人は素通りできるように残しておきます。

  1. アカウント表示は ~/.claude.json 側にある

    ~/.claude/.credentials.json だけ差し替えると、/status は前のアカウントを表示し続けますが、リクエスト認証は新tokenで通っています。無音のズレで気付きにくい。shift use は新tokenで api.anthropic.com/api/oauth/profile を叩いて profile を取得し、両ファイルを一貫させます。

  2. refresh 済みtokenは上書き前にsync backする

    ディスク上のtoken fileはClaude Codeのセッション中にrefreshされます。sync backせずに別アカウントで上書きすると、そのrefreshが捨てられて再ログインが要る事があります。shift use は、上書き前に現在のcredentialsを元アカウントのslotへ書き戻します。

  3. 5時間ウィンドウは「初回使用起点」であって時計基準ではない

    Max/Team 2アカウントで10:00と15:00に開始すれば、独立した5時間枠が2本連なります。shift seed は最小の課金リクエストを1発だけ打って、任意のタイミングでウィンドウを起動できます。長時間セッションの直前に「新しい枠」を仕込む用途に。

  4. popupのポーリング間隔は可変で永続化される

    サーバーは起動時の --interval N (分) と popup からの POST /config を受け付けます。値は ~/.claude-shift/config.json に書き出され、次のtickで反映されます。デフォルト10分、popupの歯車アイコンからサーバー再起動なしで変更可能です。

関連する開発ツール

プロダクト一覧 →

← プロダクト一覧へ