把 Claude Code / Codex CLI / Gemini CLI / OpenCode 四套 AI 编程工具的散落配置收敛到一个 TUI 里统一管理,支持声明式配置随 git 走、变量渲染分离凭据、团队约定版本化分发。
Claude Code / Codex / Gemini CLI 四套 dotfiles 漂移难题:aic TUI 的统一管理实践
一台机器跑四个 AI CLI,每个 Skills / MCP 都散在自己的目录里,改一份要同步四份。本文介绍如何用一个本地优先的 TUI 工具收敛这一切。
📑 目录
一、问题:四套 AI CLI 的配置漂移
早上九点用 Claude Code 写后端接口,下午两点切到 Codex CLI 重构另一个仓库,晚上用 Gemini CLI 跑长上下文文档任务。同一台机器,三个 CLI,每个工具的 Skills / MCP / Context 都散在自己的目录里:
Claude Code: <project>/.claude/skills/<name>
Codex CLI: <project>/.codex/skills/<name>
Gemini CLI: <project>/.gemini/skills/<name>
OpenCode: <project>/.opencode/skills/<name>
Shared: <project>/.agents/skills/<name>
改一份 code-review Skill,要手动同步到另外三份。漏一次,AI 输出就跑偏,调试半小时才发现是版本漂移。
💡 核心矛盾:AI 编码工具从单一 Copilot 插件走向多元 CLI 后,配置层缺少统一的声明机制,是共性问题。
二、三类痛点
🔸 痛点一:散落漂移
四套目录、四份副本,每手动同步一次都是潜在的 drift。半年后回看,每台机器上都是一套自演化的配置生态,谁也复现不了谁的环境。
🔸 痛点二:粒度错配
多数 AI 工具的配置要么全局生效污染别的项目,要么得另装插件、另开 GUI 去管。开发者想要的是"这个项目的 AI 行为由这个项目的配置决定",但工具层并不总是提供这个粒度。
🔸 痛点三:经验无法沉淀
团队里 A 同学调好的一套 Skill + Context + MCP 组合,B 同学 clone 仓库后还得自己重配一遍。团队踩坑沉淀的"该用哪套 prompt、该接哪个 MCP、该填什么 key",没有可分发的结构去承载。
三、方案:aic TUI 七面板
aic 是一个本地优先的 AI 编程配置管理工具,TUI 是主入口。它做的事情可以一句话概括:
把散落在四套 dotfiles 里的配置收进一个 TUI 管,让团队经验有处沉淀、可分发。
3.1 七面板统一管理
一个界面,七个面板:
Skills / Contexts / MCP / Ops / Env / Permission / Provider
tab/shift+tab切面板h/l左右切- 所有操作在终端里完成,不用另开浏览器标签页,不用记 CLI 参数
3.2 配置落点:声明式 + gitignore
| 层级 | 路径 | 作用 | 是否进 git |
|---|---|---|---|
| 项目级 | <project>/.aic/.aicrc | 声明式配置 | ✅ 进 git |
| 项目级 | <project>/.aic/.aic-env | 项目变量 | ❌ gitignore |
| 全局级 | ~/.aic/config.toml | 个人偏好(主题、Registry 镜像等) | ❌ |
| 全局级 | ~/.aic/aic-env | 全局变量 | ❌ |
| 全局级 | ~/.aic/cache | Registry cache(git clone 拉取) | ❌ |
.aic/.aicrc 进 git,团队约定随仓库走。新成员 clone 仓库后跑一次 aic sync,aic 通过 git clone 把 Registry cache 拉到 ~/.aic/cache,Skills / Context / MCP 状态即恢复。
3.3 .aicrc 实际长什么样
# <project>/.aic/.aicrc
project = "backend-api"
[provider]
active = "claude-anthropic"
[[provider.profile]]
name = "claude-anthropic"
adapter = "claude-code"
model = "claude-sonnet-4-5"
[[provider.profile]]
name = "codex-openai"
adapter = "codex-cli"
model = "o3"
[skill]
sources = [
"git::https://gitee.com/KaiyuanEra/aic-registry//skills/code-review@v1.2.0",
"git::https://gitee.com/KaiyuanEra/aic-registry//skills/api-doc-gen@v0.8.0",
]
[context]
active = "team-standards@v2.1.0"
[[mcp.server]]
name = "filesystem"
source = "registry://mcp/filesystem@latest"
[[mcp.server]]
name = "github"
source = "registry://mcp/github@latest"
vars = ["GITHUB_TOKEN"]
[@version] 锁版本,所有人用同一套约定。规范变更 = 版本升级,PR review 时一眼能看出 AI 行为受哪些版本影响。
3.4 变量渲染:模板与凭据分离
Registry 里的 Skill / Context / MCP 模板用 {{VAR}} 占位符写需要凭据的字段:
# Registry MCP 模板(公开,进 git)
servers:
github:
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_TOKEN: "{{GITHUB_TOKEN}}"
真实凭据只存本机:
# ~/.aic/aic-env(不进 git)
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
aic sync 后,写入 .codex/skills/<name> 等目录的是渲染好的真实值,但渲染产物 gitignore,Git 历史里只有 {{VAR}} 占位符。
渲染前后对比:
# .codex/skills/github/config.yaml(渲染后,gitignore)
servers:
github:
env:
- GITHUB_TOKEN: "{{GITHUB_TOKEN}}"
+ GITHUB_TOKEN: "ghp_xxxxxxxxxxxxxxxxxxxx"
# Git 历史里看到的:只有 {{VAR}} 占位符
3.5 四适配器层写入
aic 已实现四个适配器,每个适配器按各自的 Tool Link Paths 写入对应目录:
| 适配器 | Tool Link Path | 状态 |
|---|---|---|
| Claude Code | <project>/.claude/skills/<name> | ✅ 已实现 |
| Codex CLI | <project>/.codex/skills/<name> | ✅ 已实现 |
| Gemini CLI | <project>/.gemini/skills/<name> | ✅ 已实现 |
| OpenCode | <project>/.opencode/skills/<name> | ✅ 已实现 |
Codex CLI 不支持 SSE transport 这一点,aic 在适配器层处理,使用者不用关心。
四、五个典型场景
场景 1:个人项目切 Provider
同一个仓库,白天用 Claude Code 写核心逻辑,晚上用 Codex CLI 跑另一类任务。
tab切到 Provider 面板- 选 Claude Code 用 Anthropic,选 Codex 用 OpenAI
- Provider profile 切换是 TUI 里的状态切换,不是改文件
✅ 同一台机器上不同项目用不同 Provider,互不污染——因为配置是项目粒度的。
场景 2:团队经验沉淀可分发
团队约定用同一套 Skill + Context + MCP 组合。模板维护在 aic-registry 的公共内容仓库里,三类内容都支持 [@version] 锁版本。
新人 clone 仓库后三条命令切到团队约定:
aic context use team-standards@v2.1.0
aic install code-review@v1.2.0
aic mcp install github@latest
✅ 所有人的 AI 行为对齐。Skill 和 MCP 同样是可版本化、可分发的团队资产。
场景 3:流程 / 规范 / API wiki 作为版本化资产
把团队的开发流程、代码规范、API wiki 写成 Skill 或 MCP server,[@version] 锁版本进 .aic/.aicrc。
AI 在不同项目里拿到的"流程上下文"就是可审计的、可版本化的。
✅ 规范变更 = Skill 版本升级,PR review 时一眼看出 AI 行为受哪些规范版本影响。
场景 4:变量渲染 = 凭据与模板分离
Registry MCP 模板写 GITHUB_TOKEN: {{GITHUB_TOKEN}},本机 ~/.aic/aic-env 填真实 token。
- ✅
aic sync后写入各工具目录的是渲染好的真实值 - ✅ 渲染产物 gitignore
- ✅ 团队共享模板,个人持有凭据,凭据不出设备
场景 5:MCP 适配器组合 + Registry 社区分发
一个项目要接文件系统 MCP 和 GitHub MCP。aic mcp install <name> 安装一次,aic 按各自 Tool Link Paths 写到 Claude / Codex / Gemini / OpenCode 四个目录。
✅ 改一次配置,四个工具同时生效。另一面,个人开发者把调顺的 Skill + Context 组合发布到 aic-registry,社区 clone 即用。
五、对比 cc-switch
不少读者会问:市面上的 cc-switch 也能切 Provider,凭什么用 aic?
| 维度 | cc-switch | aic |
|---|---|---|
| 形态 | GUI 客户端(Electron) | CLI / TUI 单二进制 |
| 分发 | 安装包 | 单二进制 / tar.gz |
| 适用场景 | 本地桌面切换 | 本地 + 远程服务器 + CI |
| 配置粒度 | 全局 + 部分项目 | 项目粒度原生 |
| 团队分发 | 无版本化机制 | Registry + [@version] |
| 变量渲染 | 无 | {{VAR}} + gitignore |
| Skill / Context / MCP 统一管理 | 部分支持 | 七面板完整覆盖 |
💡 cc-switch 偏 GUI 桌面工具,aic 是 CLI / TUI 单二进制,分发更轻、远程 / CI 友好。如果你的 AI 配置需要进 git、需要锁版本、需要随团队走,cc-switch 的形态天然不够用。
六、5 分钟上手
aic 的安装目前是手动下载 Release 包的方式。一键安装脚本 install.sh 正在准备中,会在 aic-registry 仓库的下一 PR 提交。
Step 1:下载 Release 包
国内用户走 Gitee,海外用户走 GitHub。两个仓库都是 aic 的公共 Registry 与内容仓库,Release 产物一致。
- 🇨🇳 Gitee(国内主):
https://gitee.com/KaiyuanEra/aic-registry - 🌍 GitHub(海外):
https://github.com/KaiyuanEra/aic-registry
Step 2:解压并运行
解压后把 aic 二进制放进 PATH,终端里跑 aic 看 TUI。
系统要求:
- ✅ macOS / Linux:完全支持
- ⚠️ Windows:Beta,暂不支持一键安装和
tar.gz发布包 - 依赖:
git(拉取 Registry cache 用) - 前置:至少一个已安装的 AI 工具(Claude Code / Codex CLI / Gemini CLI / OpenCode)
Step 3:切 Provider
TUI 里 tab 切到 Provider 面板,选一个 Provider profile。第一次用需要在面板里填 API key,aic 把凭据存在 ~/.aic/aic-env,不进 git。
Step 4:选 Context
tab 切到 Contexts 面板,aic context use <name> 切到团队 Context。或者 aic context list --available 看 Registry 里有哪些可用的。
Step 5:同步 Registry
aic sync
一条命令,git clone Registry 到 ~/.aic/cache,Skills / Context / MCP 状态对齐。
七、反馈与资源
aic 是本地优先、闭源、个人免费的工具。TUI 是主入口,所有配置落在本地文件,不依赖云同步、不依赖账号系统。
🔗 相关链接
- 公共 Registry 与内容仓库(国内):
https://gitee.com/KaiyuanEra/aic-registry - 公共 Registry 与内容仓库(海外):
https://github.com/KaiyuanEra/aic-registry - 文档站:
https://aic.pages.dev(暂用 Cloudflare Pages 临时域)
📮 反馈渠道
- Issue 跟踪:在上述 Registry 仓库提 Issue
- Email:
kaiyuanera@zohomail.com
如果四套 dotfiles 也在折磨你,欢迎留言说说你的同步姿势,看看 aic 的解法合不合用。
📝 关于本文
| 项 | 说明 |
|---|---|
| aic 版本 | 当前 latest |
| 适配器状态 | Claude Code / Codex CLI / Gemini CLI / OpenCode 已实现 |
| 路线项 | Cursor / Windsurf / Copilot 适配器 |
| 首发平台 | 掘金 |
欢迎在评论指出本文不准确之处,会同步更新到文档站。