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 与 sequence也就是说:切换是「备份当前 → 恢复目标」的本地文件操作,不经过第三方。安装需要 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 跳转,通常就够了。