OSS · Chrome拡張 + Web UI + デスクトップ · 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切替まで実行できます。同じpopup UIはブラウザ (127.0.0.1:19867) と Tauri v2 デスクトップアプリでもそのまま動きます。UIファイル1枚、入口は4つ。
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保存。 |
1つのUI、4つの入口
popupは127.0.0.1:19867のローカルサーバーと会話します。サーバーはusage APIを可変間隔でポーリングし、SQLiteに時系列snapshot。カードごとに5時間枠と週次のバーを描き、分析モーダルは6h / 24h / 7d の横断SVG折れ線グラフを表示します。active カードは「使用中」バッジ、それ以外は「切替」ボタンで、押すと裏で shift use と同じパイプラインが走ります。同じ popup.html をサーバーが静的配信するので、ブラウザで 127.0.0.1:19867 を開いても、Tauri v2 のデスクトップウィンドウ (トレイ常駐、msi / dmg / deb はCIが生成) でも同一のUIが出ます。バグ修正は1ファイルで全入口に反映。
インストール
リポジトリを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/ 知っておくと良い5点
いずれも実際の事故を経て把握した挙動です。次に触る人は素通りできるように残しておきます。
-
アカウント表示は ~/.claude.json 側にある
~/.claude/.credentials.json だけ差し替えると、/status は前のアカウントを表示し続けますが、リクエスト認証は新tokenで通っています。無音のズレで気付きにくい。shift use は新tokenで api.anthropic.com/api/oauth/profile を叩いて profile を取得し、両ファイルを一貫させます。
-
refresh 済みtokenは上書き前にsync backする
ディスク上のtoken fileはClaude Codeのセッション中にrefreshされます。sync backせずに別アカウントで上書きすると、そのrefreshが捨てられて再ログインが要る事があります。shift use は、上書き前に現在のcredentialsを元アカウントのslotへ書き戻します。
-
5時間ウィンドウは「初回使用起点」であって時計基準ではない
Max/Team 2アカウントで10:00と15:00に開始すれば、独立した5時間枠が2本連なります。shift seed は最小の課金リクエストを1発だけ打って、任意のタイミングでウィンドウを起動できます。長時間セッションの直前に「新しい枠」を仕込む用途に。
-
popupのポーリング間隔は可変で永続化される
サーバーは起動時の --interval N (分) と popup からの POST /config を受け付けます。値は ~/.claude-shift/config.json に書き出され、次のtickで反映されます。デフォルト10分、popupの歯車アイコンからサーバー再起動なしで変更可能です。
-
デスクトップ版はUI資産を持たないTauriのガワ
exe (約8MB) がやるのは 127.0.0.1:19867 を開くWebViewと server のライフサイクル管理だけ: 生きている server がいれば再利用、いなければ node cli/server.js を spawn、どちらも無理ならエラーページ。別マシンへの配布は Node 20+ / repo / 環境変数 CLAUDE_SHIFT_REPO の3点です (docs/desktop-setup.md 参照)。WSL2 mirrored networking 環境なら、Windows の exe が WSL 内で常駐する server にそのまま繋がります。
関連記事
関連する開発ツール
- hook-chain-lens Claude Codeのhook群(user / project / local / plugin)を全部読んで、今このcwdで実際にどう発火するかを出す読み取り専用CLI。
- private-lint 個人名・プライベートな名前 (家族名・私用メール・契約先ドメイン) の混入をcommit/push前に止めるgitフックゲート。pure Bash。検出パターンはマシンローカルのみでどのrepoにも置かず、repo公開直前の全履歴一括監査 (audit) を同梱。
- quake-lens 地震統計のCLI+MCPサーバー。標準ライブラリだけのPythonで、公開カタログからb値 (Aki最尤推定) と大森・宇津則の余震減衰 (Ogata最尤推定) を計算する。
- rhythm-lens 日本語・英語・ポルトガル語Markdownのリズム (文長の揺れ・段落構造・burstiness) を、2本の論文の実測分布とパーセンタイル照合するCLI。AI検出器ではなく、執筆フィードバックの計測器。