gas(Grok Account Switch)是一套開源的命令列工具,可在同一台機器上管理多個 Grok CLI 登入。Grok 將當前工作階段寫入 ~/.grok/auth.json;gas 將這份檔案快照成多個編號帳號,然後用一條指令切換——工作帳號、個人帳號、實驗帳號,不必反覆 logout / login。專案網址:github.com/pintaste/gas(MIT)。設計靈感來自 Claude Code 端的 ccs / cc-account-switcher。我為什麼寫這個工具起因很具體:我同時用 Grok 做個人專案和日常 agent 對話,帳號不只一個。Grok CLI 把工作階段綁在 ~/.grok/auth.json 這一份檔案上——要換帳號就得 logout 再 login,瀏覽器跑一遍裝置授權,中間還容易打亂正在執行的對話。Claude Code 端已經有 ccs 這類本機多帳號切換器,思路很乾淨:不介入登入流程,只管「目前哪份憑證生效」。Grok 這邊當時沒有對等的小工具,我就按照相同的產品型態寫了 gas。設計上我刻意限縮了範圍:不碰登入流程——登入仍走官方 grok login,gas 只負責快照與切換憑證不離開本機——檔案全放在 ~/.grok-switch/,不上傳、不轉送也為 agent 預留了空間——固定安裝路徑、gas exec 使用隔離的 GROK_HOME,避免多個 agent 同時搶寫同一份 live auth切換可回滾——加鎖、原子寫入、失敗復原,日常頻繁切換才敢用實作上是跟 Grok 一起寫完、再補測試和安裝腳本的。對我來說它首先是解決自己痛點的工具;開源出來,是希望同樣在多帳號使用 Grok CLI 的人,不用再重複造輪子。你為什麼需要它Grok CLI 預設只維護一個「當前登入」。多帳號情境很常見:公司帳號和個人帳號都要用不同專案想隔離用量或權限寫腳本、跑 agent 時,希望指定某個帳號執行,而不改動全域工作階段手動切換帳號的成本不低:登出 → 重新登入 → 再切回來。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不會把 token 上傳到任何伺服器;檔案全在本機 ~/.grok-switch/不是 xAI 官方工具;Grok CLI 的 auth 格式若變更,可能需要調整Note指令名稱是 gas,不是 gss。很多 shell 會把 gss 當作 git status -s 的別名。運作原理(簡化版)目錄職責大致如下:TEXT ~/.grok/auth.json # Grok 實際讀取的當前連線 ~/.grok-switch/ sequence.json # 帳號索引、輪轉順序、統計資料 accounts/<n>/auth.json # 每個帳號的備份 dir-accounts.json # 可選:路徑 → 帳號 isolated/ # gas exec 用的隔離 home 每次切換時,gas 會:取得獨佔鎖(.switch.lock),避免並發寫入弄壞狀態用目前的 live 信箱定位你在檔案庫中的槽位若當前登入還不在管理清單中,拒絕切換(先 gas add)把 live token 寫回當前槽位,再把目標槽位原子寫入 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 中。給 coding agent 的最低驗收標準: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/ 底下的 token 檔案。檔案庫裏就是工作階段憑證。快速入門已登入 Grok 時:gas add(只擷取目前工作階段,不會登出)登入第二個帳號: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>具體化隔離 home,輸出 export GROK_HOME=...gas check驗證備份、權限、JSONgas status / gas whoami當前帳號與 token 狀態gas stats各帳號切換次數/使用時間gas -n sw模擬執行,只看會切到誰舊別名仍可使用:gas save、gas use、gas list。進階:依專案自動切換、並行不搶工作階段目錄對應適合「進這個 repo 就用工作帳號」:BASH gas dir ~/work/acme 1 cd ~/work/acme gas auto 隔離執行適合 agent / CI / 並行任務——不改動全域 auth.json:BASH gas exec 2 -- grok -p "hello" # 或者取得獨立 home 再 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。先擷取,再切換。能在 coding agent 裡使用嗎?可以。安裝路徑固定為 ~/.local/bin/gas;並行任務優先使用 gas exec <id> -- ...,避免多個 agent 同時搶寫同一個 live auth.json。和 ccs 有什麼關係?產品型態相近:都是「本機多帳號切換器」。ccs 面向 Claude Code,gas 面向 Grok CLI;彼此獨立,互不依賴。總結如果你已經在多帳號使用 Grok CLI,gas 把「登出再登入」濃縮成幾條本機指令,並補上目錄對應和隔離執行。安裝一條 curl,先 gas add 兩次,再用 gas to 跳轉,通常就夠了。倉庫:https://github.com/pintaste/gas協議:MIT聲明:非官方工具,與 xAI 無正式隸屬關係(文案由 Grok 參與撰寫)
gas(Grok Account Switch)是一套開源的命令列工具,可在同一台機器上管理多個 Grok CLI 登入。Grok 將當前工作階段寫入 ~/.grok/auth.json;gas 將這份檔案快照成多個編號帳號,然後用一條指令切換——工作帳號、個人帳號、實驗帳號,不必反覆 logout / login。
專案網址:github.com/pintaste/gas(MIT)。設計靈感來自 Claude Code 端的 ccs / cc-account-switcher。
我為什麼寫這個工具
起因很具體:我同時用 Grok 做個人專案和日常 agent 對話,帳號不只一個。Grok CLI 把工作階段綁在 ~/.grok/auth.json 這一份檔案上——要換帳號就得 logout 再 login,瀏覽器跑一遍裝置授權,中間還容易打亂正在執行的對話。
Claude Code 端已經有 ccs 這類本機多帳號切換器,思路很乾淨:不介入登入流程,只管「目前哪份憑證生效」。Grok 這邊當時沒有對等的小工具,我就按照相同的產品型態寫了 gas。
設計上我刻意限縮了範圍:
實作上是跟 Grok 一起寫完、再補測試和安裝腳本的。對我來說它首先是解決自己痛點的工具;開源出來,是希望同樣在多帳號使用 Grok CLI 的人,不用再重複造輪子。
你為什麼需要它
Grok CLI 預設只維護一個「當前登入」。多帳號情境很常見:
手動切換帳號的成本不低:登出 → 重新登入 → 再切回來。gas 把這件事變成:
Grok 會熱載入 auth.json,多數情況下切完不用重啟 TUI。
它做什麼、不做什麼
支援:
不支援:
指令名稱是 gas,不是 gss。很多 shell 會把 gss 當作 git status -s 的別名。
運作原理(簡化版)
目錄職責大致如下:
每次切換時,gas 會:
也就是說:切換是「備份當前 → 還原目標」的本機檔案操作,不經過第三方。
安裝
需要 Python 3.9+。Grok CLI 只在登入時需要,gas 本身不依賴它執行。
或從原始碼:
預設安裝到 ~/.local/bin/gas,請確保該目錄在 PATH 中。給 coding agent 的最低驗收標準:
不要列印或提交 ~/.grok/、~/.grok-switch/ 底下的 token 檔案。檔案庫裏就是工作階段憑證。
快速入門
幫帳號取個好記的名稱:
指令一覽
舊別名仍可使用:gas save、gas use、gas list。
進階:依專案自動切換、並行不搶工作階段
目錄對應適合「進這個 repo 就用工作帳號」:
隔離執行適合 agent / CI / 並行任務——不改動全域 auth.json:
環境變數(可選):
安全與移除
測試用暫存目錄,不會碰真實帳號:
常見問題
gas 和直接修改 auth.json 有什麼不同?
直接修改檔案沒有索引、沒有鎖定、沒有回滾。gas 維護編號檔案庫、輪替順序、失敗復原,以及 exec 隔離路徑,適合日常頻繁切換。
切換後 Grok 帳號沒變?
先用 gas whoami / gas status 查看 live 信箱是否已改變。極少數情況下需重啟 TUI;文件說明 Grok 通常會熱載入 auth.json。
提示當前登入未管理?
你剛 grok login 進了一個新工作階段,但還沒 gas add。先擷取,再切換。
能在 coding agent 裡使用嗎?
可以。安裝路徑固定為 ~/.local/bin/gas;並行任務優先使用 gas exec <id> -- ...,避免多個 agent 同時搶寫同一個 live auth.json。
和 ccs 有什麼關係?
產品型態相近:都是「本機多帳號切換器」。ccs 面向 Claude Code,gas 面向 Grok CLI;彼此獨立,互不依賴。
總結
如果你已經在多帳號使用 Grok CLI,gas 把「登出再登入」濃縮成幾條本機指令,並補上目錄對應和隔離執行。安裝一條 curl,先 gas add 兩次,再用 gas to 跳轉,通常就夠了。