gas(Grok Account Switch)は、1台のマシンで複数のGrok CLIログインを管理するオープンソースのコマンドラインツールです。Grokは現在のセッションを~/.grok/auth.jsonに書き込みます。gasはこのファイルを番号付きアカウントとしてスナップショットし、1コマンドで切り替えます。仕事用、個人用、実験用——ログアウトとログインを繰り返す必要はありません。logout / login。プロジェクトURL:github.com/pintaste/gas(MIT)。デザインの着想はClaude Codeのccs / cc-account-switcherから得ています。このツールを作った理由きっかけは具体的です:私はGrokを個人プロジェクトと日常のエージェントセッションの両方で使っており、アカウントも複数あります。Grok CLIはセッションを~/.grok/auth.jsonという1つのファイルに固定しています——アカウントを切り替えるにはlogoutしてからloginし、ブラウザでデバイス認証を行う必要があり、その間に実行中のセッションが乱れることもよくありました。Claude Code側には既にccsというローカルマルチアカウント切替ツールがあり、その設計はとてもクリーンです:ログインには関与せず、「現在どの認証情報を有効にするか」だけを管理します。Grok側には当時そのようなツールがなかったため、同じプロダクト設計でgasを作りました。gas。設計では意図的に範囲を絞っています:ログイン処理には触れない——ログインは公式のgrok loginに任せ、gasはスナップショットと切替のみ担当認証情報はローカルから出さない——すべてのファイルは~/.grok-switch/に置き、アップロードも中継もしないエージェントにも対応——固定インストールパス、gas execで分離されたGROK_HOMEを使用し、複数のエージェントが同一のlive authに競合書き込みするのを防ぐ切替はロールバック可能——ロック、アトミック書き込み、失敗時復旧により、日常的に繰り返し切り替えても安心実装上は、Grokと一緒にすべてを一気に書き上げ、その後テストとインストールスクリプトを追加しました。私にとってはまず自分の課題を解決するためのツールです。オープンソースにしたのは、複数アカウントでGrok CLIを使っている人が、同じ車輪を再発明しなくて済むようにという思いからです。なぜ必要なのかGrok CLIはデフォルトでは「現在のログイン」1つだけを管理します。マルチアカウントのシナリオはよくあります:会社のアカウントと個人アカウントの両方を使いたいプロジェクトごとに利用量や権限を分けたいスクリプトやエージェント実行時に、グローバルセッションを変えずに特定アカウントを指定したい手動でのアカウント切替はコストが高い:ログアウト → 再ログイン → 元に戻す。gasを使えばこうなります:BASH gas sw # 次のアカウントにローテーション gas to work # workという設定にジャンプ gas to 2 # 番号指定でジャンプ Grokはauth.jsonをホットリロードするため、ほとんどの場合、切り替え後にTUIを再起動する必要はありません。できること・できないことできること:現在ログイン中のセッションをキャプチャ(gas add)、ローカルアーカイブに保存アカウントの一覧表示、ローテーション、番号/メール/エイリアスでの切替オプション:ディレクトリ → アカウントのマッピング(特定のプロジェクトディレクトリに入ると自動切替)オプション:分離されたGROK_HOMEでコマンドを実行し、グローバルセッションに影響を与えない(gas exec)状態確認、使用統計、ドライラン(gas -n sw)できないこと:ログイン処理は代行しません——ログインは公式のgrok loginトークンをサーバーにアップロードしません。すべてのファイルはローカルの~/.grok-switch/xAIの公式ツールではありません。Grok CLIのauth形式が変更された場合、対応が必要になる可能性がありますNoteコマンド名はgasであり、gssではありません。多くのシェルではgssをgit status -sのエイリアスとして扱います。動作の仕組み(簡略版)ディレクトリの役割はおおよそ次のとおりです:TEXT ~/.grok/auth.json # Grokが実際に読み取る現在のセッション ~/.grok-switch/ sequence.json # アカウントインデックス、ローテーション順、統計 accounts/<n>/auth.json # 各アカウントのバックアップ dir-accounts.json # オプション:パス→アカウント isolated/ # gas exec用の分離ホーム 切り替え時にgasが行うこと:排他ロックを取得(.switch.lock)、同時書き込みによる状態破損を防止現在のliveメールアドレスを使ってアーカイブ内のスロットを特定現在のログインが管理リストにない場合は切替を拒否(先にgas add)liveトークンを現在のスロットに書き戻し、ターゲットスロットをアトミックにliveへ書き戻す(パーミッションauth.jsonに書き戻す(パーミッション600)統計を更新。失敗時はlive authとシーケンスをロールバックつまり、切り替えは「現在をバックアップ → ターゲットを復元」という、第三者を介さないローカルファイル操作です。インストール必要環境はPython 3.9+です。Grok CLI はログイン時のみ必要で、gas 自体はこれに依存せず動作します。BASH curl -fsSL https://raw.githubusercontent.com/pintaste/gas/main/install.sh | bash またはソースから:BASH git clone https://github.com/pintaste/gas.git cd gas ./install.sh デフォルトでは~/.local/bin/gasにインストールされます。PATHにそのディレクトリが含まれていることを確認してください。コーディングエージェント用の最小限の注意事項:BASH curl -fsSL https://raw.githubusercontent.com/pintaste/gas/main/install.sh | bash export PATH="${HOME}/.local/bin:${PATH}" command -v gas && gas version # 例:gas 0.1.0 のような出力を期待 Warning以下のファイルを出力またはコミットしないでください:~/.grok/以下のファイルは出力やコミットを避けてください:~/.grok-switch/内のトークンファイル。アーカイブ自体がセッション認証情報です。クイックスタートGrokにログイン済みの場合:gas add(現在のセッションをキャプチャするのみ。ログアウトはしません)2つ目のアカウントにログイン:grok logout && grok loginもう一度実行:gas add以降、いつでも切り替え可能:BASH gas sw # 次のアカウントにローテーション gas to 1 # 番号指定 gas to you@email.com # メールアドレス指定 gas to work # 設定したエイリアス指定 アカウントにわかりやすい名前を付けましょう:BASH gas profile 1 work gas profile 2 personal gas ls # * / (active) が現在のアカウントを示す コマンド一覧コマンド説明gas add現在のログインを追加または更新gas ls管理中のアカウントを一覧表示gas sw次のアカウントにローテーションgas to <id>番号/メール/エイリアスで切替gas profile <id> <name>フレンドリ名を設定gas rm <id>保存済みアカウントを削除(live authには影響なし)gas dir [path] <id>ディレクトリをアカウントにマッピングgas auto現在のディレクトリマッピングで切替gas exec <id> -- <cmd>指定アカウントで隔離実行gas config-dir <id>隔離ホームを実体化し、export GROK_HOME=...gas checkバックアップ、パーミッション、JSONを検証gas status / gas whoami現在のアカウントとトークンの状態gas statsアカウントごとの切替回数/使用時間gas -n swドライラン。誰に切り替わるかのみ表示旧エイリアスも引き続き使用可能:gas save、gas use、gas list。応用編:プロジェクトごとの自動切替とセッション競合の防止ディレクトリマッピングは「このリポジトリに入ったら仕事用アカウントを使う」という用途に適しています:BASH gas dir ~/work/acme 1 cd ~/work/acme gas auto 隔離実行はエージェント/CI/並列タスクに適しています——グローバルのauth.jsonを変更しません:BASH gas exec 2 -- grok -p "hello" # または独立したホームを取得してexport: eval "$(gas config-dir 2 | tail -1)" 環境変数(オプション):変数デフォルト説明GAS_HOME / GSS_HOME~/.grok-switchアーカイブの保存先GROK_HOME / GROK_DIR~/.grokGrok設定ディレクトリGAS_SILENT=1—スクリプト用サイレントモードNO_COLOR—ANSIカラーを無効化セキュリティとアンインストールアーカイブとlive authはどちらもローカルファイルです。バックアップディスクや同期ディスク、クラウドストレージのクライアントが~/.grok-switchをスキャンすると、ログイン認証情報が同期されてしまう可能性があります。gas rmはアーカイブスロットのみを削除し、現在のGrokログインはログアウトしません。バイナリのアンインストール:rm -f ~/.local/bin/gasセッションアーカイブも一緒に削除する場合:さらにrm -rf ~/.grok-switchテスト用の一時ディレクトリ。実際のアカウントには影響しません:BASH python3 -m unittest discover -s tests -v よくある質問gasとauth.jsonを直接編集する違いは?直接ファイルを編集する場合、インデックス、ロック、ロールバックがありません。gasは番号付きアーカイブ、ローテーション順序、失敗時のロールバック、そしてexecの隔離パスを管理し、日常的な繰り返し切替に適しています。切り替えてもGrokのアカウントが変わらない?まずgas whoami / gas statusでliveメールアドレスが変わったか確認してください。ごく稀にTUIの再起動が必要な場合があります。ドキュメント上はGrokは通常auth.jsonをホットリロードします。「現在のログインが管理されていません」と表示される?新しく grok login で新しいセッションにログインしたものの、まだ gas add を実行していません。先にキャプチャしてから、切り替えてください。コーディングエージェントで使えますか?はい。インストールパスは~/.local/bin/gasに固定されています。並列タスクではgas exec <id> -- ...を優先して使用し、複数のエージェントが同一のliveauth.jsonに競合書き込みするのを防いでください。ccsとの関係は?プロダクトの形態は似ています:どちらも「ローカルマルチアカウント切替ツール」です。ccsはClaude Code向け、gasはGrok CLI向けであり、互いに独立しており依存関係もありません。まとめすでに複数アカウントでGrok CLIを使っているなら、gasは「ログアウト→再ログイン」をいくつかのローカルコマンドにまとめ、さらにディレクトリマッピングと隔離実行を追加します。curl1行でインストールし、まずgas addを2回実行してからgas toで切り替えれば、通常は十分です。リポジトリ:https://github.com/pintaste/gasライセンス:MIT免責事項:非公式ツールであり、xAIとの正式な所属関係はありません(文章の作成にGrokが協力)
gas(Grok Account Switch)は、1台のマシンで複数のGrok CLIログインを管理するオープンソースのコマンドラインツールです。Grokは現在のセッションを~/.grok/auth.jsonに書き込みます。gasはこのファイルを番号付きアカウントとしてスナップショットし、1コマンドで切り替えます。仕事用、個人用、実験用——ログアウトとログインを繰り返す必要はありません。logout / login。
プロジェクトURL:github.com/pintaste/gas(MIT)。デザインの着想はClaude Codeのccs / cc-account-switcherから得ています。
このツールを作った理由
きっかけは具体的です:私はGrokを個人プロジェクトと日常のエージェントセッションの両方で使っており、アカウントも複数あります。Grok CLIはセッションを~/.grok/auth.jsonという1つのファイルに固定しています——アカウントを切り替えるにはlogoutしてからloginし、ブラウザでデバイス認証を行う必要があり、その間に実行中のセッションが乱れることもよくありました。
Claude Code側には既にccsというローカルマルチアカウント切替ツールがあり、その設計はとてもクリーンです:ログインには関与せず、「現在どの認証情報を有効にするか」だけを管理します。Grok側には当時そのようなツールがなかったため、同じプロダクト設計でgasを作りました。gas。
設計では意図的に範囲を絞っています:
実装上は、Grokと一緒にすべてを一気に書き上げ、その後テストとインストールスクリプトを追加しました。私にとってはまず自分の課題を解決するためのツールです。オープンソースにしたのは、複数アカウントでGrok CLIを使っている人が、同じ車輪を再発明しなくて済むようにという思いからです。
なぜ必要なのか
Grok CLIはデフォルトでは「現在のログイン」1つだけを管理します。マルチアカウントのシナリオはよくあります:
手動でのアカウント切替はコストが高い:ログアウト → 再ログイン → 元に戻す。gasを使えばこうなります:
Grokはauth.jsonをホットリロードするため、ほとんどの場合、切り替え後にTUIを再起動する必要はありません。
できること・できないこと
できること:
できないこと:
コマンド名はgasであり、gssではありません。多くのシェルではgssをgit status -sのエイリアスとして扱います。
動作の仕組み(簡略版)
ディレクトリの役割はおおよそ次のとおりです:
切り替え時にgasが行うこと:
つまり、切り替えは「現在をバックアップ → ターゲットを復元」という、第三者を介さないローカルファイル操作です。
インストール
必要環境はPython 3.9+です。Grok CLI はログイン時のみ必要で、gas 自体はこれに依存せず動作します。
またはソースから:
デフォルトでは~/.local/bin/gasにインストールされます。PATHにそのディレクトリが含まれていることを確認してください。コーディングエージェント用の最小限の注意事項:
以下のファイルを出力またはコミットしないでください:~/.grok/以下のファイルは出力やコミットを避けてください:~/.grok-switch/内のトークンファイル。アーカイブ自体がセッション認証情報です。
クイックスタート
アカウントにわかりやすい名前を付けましょう:
コマンド一覧
旧エイリアスも引き続き使用可能:gas save、gas use、gas list。
応用編:プロジェクトごとの自動切替とセッション競合の防止
ディレクトリマッピングは「このリポジトリに入ったら仕事用アカウントを使う」という用途に適しています:
隔離実行はエージェント/CI/並列タスクに適しています——グローバルのauth.jsonを変更しません:
環境変数(オプション):
セキュリティとアンインストール
テスト用の一時ディレクトリ。実際のアカウントには影響しません:
よくある質問
gasとauth.jsonを直接編集する違いは?
直接ファイルを編集する場合、インデックス、ロック、ロールバックがありません。gasは番号付きアーカイブ、ローテーション順序、失敗時のロールバック、そしてexecの隔離パスを管理し、日常的な繰り返し切替に適しています。
切り替えてもGrokのアカウントが変わらない?
まずgas whoami / gas statusでliveメールアドレスが変わったか確認してください。ごく稀にTUIの再起動が必要な場合があります。ドキュメント上はGrokは通常auth.jsonをホットリロードします。
「現在のログインが管理されていません」と表示される?
新しく grok login で新しいセッションにログインしたものの、まだ gas add を実行していません。先にキャプチャしてから、切り替えてください。
コーディングエージェントで使えますか?
はい。インストールパスは~/.local/bin/gasに固定されています。並列タスクではgas exec <id> -- ...を優先して使用し、複数のエージェントが同一のliveauth.jsonに競合書き込みするのを防いでください。
ccsとの関係は?
プロダクトの形態は似ています:どちらも「ローカルマルチアカウント切替ツール」です。ccsはClaude Code向け、gasはGrok CLI向けであり、互いに独立しており依存関係もありません。
まとめ
すでに複数アカウントでGrok CLIを使っているなら、gasは「ログアウト→再ログイン」をいくつかのローカルコマンドにまとめ、さらにディレクトリマッピングと隔離実行を追加します。curl1行でインストールし、まずgas addを2回実行してからgas toで切り替えれば、通常は十分です。