Skip to content

希望支持多个 Codex 账号共享同一套工作区/历史/插件配置 #2299

Description

@blainehuang1028

Self Checks / 自检

Related App / 涉及应用

Codex

Problem or Motivation / 问题或动机

我的使用场景

我有:

  • 两个官方 Codex / ChatGPT Plus 账号
  • 一个 OpenAI-compatible 中转站
  • 日常主要使用 Codex CLI 写代码

我希望可以在这些账号/供应商之间快速切换,而不需要反复退出/登录 Codex,也不希望每次切换账号后,Codex 的本地工作区状态都像被重置一样。

理想状态是:cc-switch 可以支持类似 Codex 多账号 profile group / 账号池 的能力。多个 Codex 账号各自保存认证信息,但共享同一套工作区配置。

当前遇到的问题

现在切换 Codex 账号/provider 之后,之前的一些 Codex 本地状态似乎会丢失或变成另一套,例如:

  • 对话/历史记录
  • workspace 状态
  • 插件或 MCP 配置
  • 其他 Codex 设置

我的理解是,Codex 会把认证信息和本地状态都放在 ~/.codex 下面,例如 auth.jsonconfig.toml、history/cache/plugin 相关文件等。

目前 cc-switch 切换 Codex provider 时,似乎不只是切换账号认证,而是会影响整套 Codex 本地状态。因此每个 Codex 账号看起来都像是一个独立的新工作区,而不是只切换当前使用的账号。

期望行为

希望可以把 Codex 账号认证状态Codex 工作区/配置状态 分离。

例如:

  • 账号 A 和账号 B 各自有独立的 OAuth/auth 数据

  • 但它们可以共享同一套:

    • config.toml
    • 历史记录
    • workspace 设置
    • 插件 / MCP 配置
    • 其他 Codex 偏好设置

也就是说,切换 Codex 账号时,不应该让 Codex 变成一个全新的环境。

可能的功能设计

可以考虑几种方式:

  1. Codex 共享配置模式

    允许多个 Codex provider 共享同一套非认证配置,只切换认证数据。

  2. 只切换 auth 的选项

    增加类似这样的选项:

    Only switch Codex auth, keep config/history/plugins unchanged
    
  3. Codex profile group / 账号组

    允许多个 Codex 账号属于同一个组。每个账号有自己的 auth,但共享 workspace/config/plugin 状态。

  4. 可选的账号组轮询或 failover

    这个优先级低于“共享状态”,但如果以后能支持多个 Codex 账号组成账号池也会很有用。

    例如:

    session 1 -> Codex 账号 A
    session 2 -> Codex 账号 B
    

    这里最好是按 session 级别路由,而不是每个 request 都轮询,因为 Codex 工作流可能依赖 session/cache 连续性。

为什么这个需求重要

对于有多个 Codex 账号的用户来说,切换账号最好只是切换“身份/凭据”,而不是切换整套 Codex 本地环境。

现在的行为会让多账号 Codex 使用比较麻烦,因为每次切换账号后,都像进入了另一个全新的 Codex 配置环境。

想请问这个使用方式现在是否已经有推荐做法?如果没有,希望未来可以考虑支持这个功能。目前我只看到在 Oauth 中心有针对 Claude Code的功能。

Proposed Solution / 建议方案

以下是 Codex 生成:## 建议方案

我觉得这个问题可以通过把 Codex provider 的数据拆成两层来解决:

  1. 认证层

    • OAuth token
    • auth.json
    • 账号相关凭据
    • 必要时包括 provider 专属的 base URL / model 设置
  2. 共享工作区层

    • config.toml
    • 历史记录
    • workspace 状态
    • 插件 / MCP 配置
    • 其他 Codex 偏好设置

然后 cc-switch 可以允许多个 Codex provider 加入同一个 共享 profile group / 账号组

例如:

Codex Group: Personal Codex Pool
  共享工作区/配置状态:
    ~/.codex-shared/personal/

  账号:
    - Codex 账号 A -> 独立 auth 数据
    - Codex 账号 B -> 独立 auth 数据
    - 中转站 -> 独立 API key / base_url

当在这个组内切换账号时,cc-switch 只切换认证信息和 provider 专属信息,不改变共享的工作区、历史、插件和 MCP 配置。

一个可能的实现结构是:

~/.cc-switch/codex-profiles/
  personal-group/
    shared/
      config.toml
      history.jsonl
      plugins/
      mcp/
      workspace/
    accounts/
      account-a/
        auth.json
        provider.toml
      account-b/
        auth.json
        provider.toml
      relay/
        auth.json or api-key config
        provider.toml

激活某个账号时,cc-switch 可以把当前 Codex 环境组装成:

~/.codex/auth.json        -> 来自当前选择的账号
~/.codex/config.toml      -> 来自共享组
~/.codex/history.jsonl    -> 来自共享组
~/.codex/plugins/         -> 来自共享组
~/.codex/mcp/             -> 来自共享组

具体实现可以用复制文件,也可以用 symlink,取决于哪种方式对 Codex 更安全。

也可以先做一个更简单的选项:

[ ] 只切换 auth,保持 Codex 本地状态不变

这个应该是最小可行版本。开启这个模式后,cc-switch 只更新当前账号凭据和 provider endpoint,不触碰用户已有的 Codex 工作区、配置、历史记录、插件和 MCP 状态。

更高级的版本可以再考虑支持 Codex 账号组内的路由策略:

路由模式:
- 手动切换
- Failover
- 按 session 轮询

我认为按 session 轮询会比按 request 轮询更安全,因为 Codex 可能依赖缓存、会话状态或上下文连续性。

Additional Context / 补充信息

No response

Contribution / 参与贡献

  • I am interested in contributing to this feature.
    我有兴趣参与开发此功能。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions