lys-codex-switch Svelte Themes

Lys Codex Switch

本地优先的 AI 客户端配置切换与诊断工具 - Codex / Claude 配置管理

CodexSwitch

lys: 本地优先的 AI 客户端配置切换与诊断工具

Part of the lys personal open source system.

当前状态:暂停维护

如需成熟可用方案,默认推荐使用: https://github.com/farion1231/cc-switch

CodexSwitch 是一个本地优先的 AI 配置管理工具原型,用来统一管理和切换:

  • Codex
  • Claude

同时覆盖:

  • 官方端点
  • 中转 / Relay / 自定义端点

它解决的是下面这类问题:

  • 经常在官方 OpenAI、Anthropic、代理、中转之间切换
  • 想把多个配置集中保存,而不是手改 ~/.codex~/.claude 配置
  • 想在切换前后做预览和验证
  • 想保留备份和回滚入口
  • 想明确知道“这次切换到底会改哪些文件”

它更接近:

  • SwitchHosts 一类的本地配置切换器

而不是:

  • 聊天客户端
  • 云端控制台
  • 模型网关

当前仓库继续保留公开,但默认不再作为主推项目推进。

原因:

  • 已有更成熟的开源替代方案
  • 当前继续投入的边际收益不高

如果你只是想找一个成熟工具,建议直接使用:

  • cc-switch
  • https://github.com/farion1231/cc-switch

项目定位

这是一个开发者辅助工具,不是模型网关,也不是聊天客户端。

当前状态是:

  • 暂停维护
  • 社区维护优先
  • 保留公开参考价值

它当前聚焦 3 件事:

  1. 保存多套 AI 客户端配置
  2. 在激活前明确预览“会改什么”
  3. 以“文件模板切换 + 备份回滚”为主路径做安全切换

在整体体系中的位置

CodexSwitch 属于个人开源系统里的AI 协作 / 开发效率工具,不是当前对外主线的一部分。

也就是说:

  • 它不是 Smart BLE / Open IoT Platform 这样的主入口项目
  • 它不会进入当前学习者网站的首页主叙事
  • 它更像你个人开发工作流中的低频辅助工具

这个定位比把它硬塞进主线更稳。


项目架构

当前架构不是“先做一个好看 GUI”,而是:

CodexSwitch
├── Profile Store
│   ├── profile metadata
│   ├── managed file templates
│   └── preset variables
├── Activation Engine
│   ├── render
│   ├── diff preview
│   ├── backup
│   ├── apply
│   └── rollback
├── Core Libraries
│   ├── codex-config
│   ├── launch-spec
│   ├── state
│   └── test-connection
├── Adapter A
│   └── CLI
└── Adapter B
    └── Desktop GUI

这套结构的意思是:

  • 先把本地配置切换核心做稳
  • CLI 和 GUI 都只是适配层
  • 真正的关键是把“文件模板切换”做成可预览、可备份、可回滚

所以现在不要把它理解成“做了一半的桌面应用”,而应该理解成“核心已经是独立工具,当前入口先用 CLI”。

运行时覆盖是兼容路径,不是长期主心智。


如果增加操作界面,必须使用什么栈

CodexSwitch 如果继续增加 GUI,不再临时选型,而是直接遵守根目录的标准文档:

具体就是:

  • Tauri 2
  • Rust
  • Svelte 5
  • TypeScript
  • Vite

也就是说:

  • 当前 CLI 是适配层 A
  • 未来 GUI 是适配层 B
  • 但核心结构不改

当前命名

  • 产品名:CodexSwitch
  • 目标仓库名:lys-codex-switch

当前能力

当前已经落地:

  • init
  • list
  • current
  • show <name>
  • save-profile
  • delete-profile
  • list-file-profiles
  • show-file-profile
  • render-file-profile
  • sync-file-profiles
  • build-launch-spec
  • preview-profile
  • import-current <name>
  • use <name>
  • rollback
  • test <name>
  • export

当前也已经起了统一栈下的 GUI:

  • src-ui/
  • src-tauri/

它当前的定位是:

  • 左侧:配置列表
  • 中间:配置编辑器
  • 右侧:激活预览

当前 GUI 已经具备:

  • 草稿 / 已保存 / 模板同步状态
  • file profile 来源展示
  • 预览过期阻断激活
  • 搜索与筛选
  • 配置与认证的 before / after 差异视图

当前支持范围

客户端

  • Codex
  • Claude

提供商 / 模式

  • OpenAI 官方
  • Anthropic 官方
  • Kimi(Moonshot)
  • 智谱 Coding / Claude 兼容
  • Relay / Custom

Provider Key

provider_nameprovider_key 不是同一层概念。

  • provider_name
    • 给人看的展示名
    • 例如:RelayKimiZhipu Coding
  • provider_key
    • 真正写入客户端配置文件的协议 key
    • Codex 当前默认仍然是 OpenAI

这意味着:

  • 官网和中转大多共用同一个 provider_key
  • 差别主要体现在 base_urlwire_apiauth

切换思路

1. 文件模板切换

推荐作为主路径。

特点:

  • 官网也是一套 profile
  • 中转也是一套 profile
  • 第三方兼容端也是一套 profile
  • 激活前先预览目标文件
  • 激活时先备份再写入
  • 当前 Codex 的持久切换已优先走 file profile 模板目录
  • 当前预览面板会展示:
    • provider section before / after
    • auth before / after
    • 模板目录与托管文件

2. Runtime Override

作为兼容路径保留。

特点:

  • 更适合还没有稳定文件模型的客户端
  • 可以先生成运行时方案
  • 不应该反过来成为产品核心

平台差异

路径并不是一套写死的规则。

当前已经按:

  • macOS
  • Linux
  • Windows

区分目标路径展示。

具体矩阵见:


支持的文件

当前工具围绕下面这些本地文件工作:

  • ~/.codex/config.toml
  • ~/.codex/auth.json
  • ~/.claude.json
  • ~/.claude/
  • ~/.codex-switch/profiles/
  • ~/.codex-switch/profiles.json
  • ~/.codex-switch/state.json
  • ~/.codex-switch/backups/

说明:

  • profiles.json 是当前兼容层存储
  • profiles/ 目录是正在推进的文件模板存储
  • 当前模板目录里的 render_vars 默认不会持久化真实 API key

配置模型

每个 profile 至少包含:

  • name
  • client
  • activation_strategy
  • provider_name
  • provider_key
  • provider
  • base_url
  • api_key
  • wire_api
  • model
  • model_reasoning_effort
  • requires_openai_auth
  • env_vars

快速开始

1. 初始化示例配置

cd CodexSwitch
node src/cli.mjs init

2. 查看 profile

node src/cli.mjs list

3. 查看某个 profile

node src/cli.mjs show "OpenAI Official"

4. 生成启动方案

node src/cli.mjs build-launch-spec "OpenAI Official"

5. 同步到文件模板目录

node src/cli.mjs sync-file-profiles

6. 查看文件模板 profile

node src/cli.mjs list-file-profiles

7. 查看某个文件模板 profile

node src/cli.mjs show-file-profile "OpenAI Official" --client codex

8. 渲染文件模板 profile

node src/cli.mjs render-file-profile "OpenAI Official" --client codex

9. 预览激活结果

node src/cli.mjs preview-profile --json-input '{"name":"OpenAI Official", ... }'

10. 导入当前配置

node src/cli.mjs import-current "Imported Current"

11. 实际切换

node src/cli.mjs use "OpenAI Official"

12. 查看当前激活状态

node src/cli.mjs current

13. 回滚到上一个配置

node src/cli.mjs rollback

14. 测试配置

node src/cli.mjs test "OpenAI Official"

15. 启动 GUI 开发界面

npm install
npm run dev:ui -- --host 0.0.0.0

16. 启动 Tauri GUI

npm install
npm run tauri:dev

当前设计取舍

  • 先用纯 Node.js 实现,避免先引入依赖
  • 先做 CLI,确认模型和流程正确
  • 先把配置理解成“可切换的目标文件模板”
  • 激活前必须显示“会改哪些文件”
  • 默认记录活动 profile 和最近一次备份,方便回滚
  • CLI 默认对 stdout 做密钥脱敏
  • 优先支持本地 profile 管理和切换,不先做远程同步
  • GUI 当前先通过统一桌面栈起骨架,再逐步增强后端能力

后续方向

默认暂停。

如果后续有人愿意继续接手,优先方向仍然是:

  • 小范围修复
  • 文档补充
  • 社区 PR 合并
  • 低风险的体验优化

文档

Top categories

Loading Svelte Themes