Claude Code / Codex / Gemini CLI 四套 dotfiles 漂移难题:aic TUI 的统一管理实践

117 阅读8分钟

把 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 输出就跑偏,调试半小时才发现是版本漂移。

img-b02-pain-scattered-configs.svg

💡 核心矛盾: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 参数

img-b01-pain-before-after.svg

3.2 配置落点:声明式 + gitignore

层级路径作用是否进 git
项目级<project>/.aic/.aicrc声明式配置✅ 进 git
项目级<project>/.aic/.aic-env项目变量❌ gitignore
全局级~/.aic/config.toml个人偏好(主题、Registry 镜像等)❌
全局级~/.aic/aic-env全局变量❌
全局级~/.aic/cacheRegistry 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 在适配器层处理,使用者不用关心。

img-001-tui-hero-dark.webp


四、五个典型场景

场景 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-switchaic
形态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 适配器
首发平台掘金

欢迎在评论指出本文不准确之处,会同步更新到文档站。