夜雨聆风学习资料网

ARTICLE · 1031744

AI 编程工具的配置藏在哪?16 个工具位 + 8 个 MCP 落点实测

AI 编程工具的配置藏在哪?16 个工具位 + 8 个 MCP 落点实测

先说一个我刚遇到的场景。

换电脑,工具装好,账号登好 —— 然后发现半年的"调教成果"全没了:给 Claude Code 写的 hooks,攒下来的 skill,一份一份改出来的 rules,十几个 MCP server 的配置。

这些东西不在代码仓库里,不在你的 dotfiles 里,也不在你记得住的任何地方。它们散在十几个隐藏目录里。而且,这是全文最重要的一句话:

没有任何两个工具的放法是一样的。

我把能查证落点的 AI 编程工具全部实测了一遍,画出一张地图,又写了一个两百行的脚本,一条命令扫全、一条命令备份。地图和脚本都在这篇文章里。

一、乱在哪:同一件事,三种放法

图 1 · 三种布局流派,没有一种是"标准"

配置放哪儿,业界没有约定,只有流派。实测下来是三派:

派一:~/.<工具名>/Claude、Cursor、Codex、Qoder、Trae 都是这样。最常见,但连命名风格都不统一 ——~/.claude~/.trae-cn,一个纯小写,一个带连字符和国家后缀。

派二:~/.config/<工具名>/OpenCode、Docker 的 cagent 走这条。这是守了 XDG 规范的少数派,也是最反直觉的一派—— 你按 dotfile 的习惯去 HOME 目录下面找,是找不到的,它在.config里。

派三:<项目>/.<工具名>/项目级覆盖。.claude/settings.json.cursor/hooks.json.mcp.json。这一派最麻烦的不是找,是权限:有的该提交进仓库分享给团队,有的里面躺着 token,必须进.gitignore。搞反一次就出事。

文件名也是各写各的。同样是"管 hook 行为"这件事,我实测看到的文件名有五种:settings.jsonhooks.jsonconfig.jsoncli/config.jsonconfig.toml。JSON 和 TOML 还各占一头。

二、全表:16 个工具位 + 8 个 MCP 落点

下面这张表来自teamai-cli(腾讯开源的团队级 AI 配置分发工具)v0.24.0 的teamai hooks list真实输出,我在 2026-09-18 实测抓取。它内置了 16 个工具位的落点约定,是目前能一次看到的最大集合:

图 2 · 16 个工具位落点全表(teamai-cli v0.24.0 实测输出)

对外部用户真正有用的主要是 claude、codex、cursor、qoder、codebuddy、workbuddy 这几个;tclaudetcodexcodex-internal等是腾讯内部工具位。

MCP 的落点更值得单独看,因为它最危险:

图 3 · MCP 的用户级 / 项目级双层落点

这里有三个容易踩的点,都是我实测或交叉官方文档确认的:

1.~/.claude.json是个混杂文件。它不是纯配置 —— MCP server 配置和账号登录态混在同一个文件里。想备份它,只能按字段挑着拿。

2. Codex 的 hook 是独立的~/.codex/hooks.json,但默认不生效。Codex 的 hooks 能力挂在codex_hooks这个 feature flag 底下,目前默认是false。也就是说你照着文档写好了 hooks.json,没开 flag,它就是一段安静的 JSON。

3. Cursor 的项目级 hooks 需要信任工作区,且默认 fail-open。hook 进程崩了,命令照常执行 —— 除非你在配置里显式写failClosed: true。拿 hook 当安全护栏的人,这条不知道会出事。

顺带说 Claude Code 的一个坑:settings.json里 hooks 块多一个尾逗号,整个 hooks 配置静默失效,不报错。排查方法是在会话里敲/hooks,那里列出来的才是真正生效的。

一个反直觉的发现:这张表不是你机器的现状

我把这张 16 位的表拿去扫自己的机器,结果:只有 2 个目录真的存在.codebuddy.workbuddy),有配置文件的只有 1 个。

反过来,我机器上还有这张表里没有的工具窝:.trae-cn(16 个子项,mcps/builtin_skills/memory/都在里面)、.ai_completion~/.config/cagent

结论很直接:任何一张静态落点表都会过期,也都不全。你需要的是一台扫描器,不是一张收藏清单。这也是我写脚本的原因。

三、备份之前,先把落点分四堆

图 4 · 四类落点:该备的 / 混杂的 / 绝不能碰的 / 噪音

动手备份之前必须先分类,这一步做错,后面全是白干:

该备的(config)settings.jsonhooks.jsonconfig.tomlskills/rules/CLAUDE.mdAGENTS.mdmcp.json。纯配置,可以进私有仓库。

混杂的(mixed)~/.claude.json、Qoder 的settings.json(MCP 和其他设置共用一个文件)。只能按字段挑,或者干脆跳过。

绝不能碰的(secret)~/.claude/.credentials.json~/.codex/auth.json~/.trae-cn/trae-jwt-token、一切*.pem.env。凭据永远不进备份、永远不进仓库,换机器重新登一次就好。

噪音(noise)history.jsonllogs/extensions/。体积大、没价值、对话历史里还可能有敏感内容。

别觉得这是杞人忧天。我拿脚本扫自己的机器,四个 skill 的config.json里,有一个躺着明文的 API Key——sk-开头、46 个字符,就那么明晃晃地存在~/.workbuddy/skills/<技能名>/config.json里。如果哪天有人"顺手把 skills 目录传个网盘",这就是一次泄露。

四、脚本:三个命令,各管一件事

图 5 · scan / backup / audit 三个命令的真实输出

脚本叫agentcfg.py,纯 Python 标准库,零依赖,Windows / macOS / Linux 都能跑。核心是一张 33 条的落点表(覆盖 11 个工具),每条标了类型和风险等级:

MAP = [     dict(tool="claude", kind="settings", rel=".claude/settings.json",          risk="config", src="官方文档+实测"),     dict(tool="claude", kind="secret",   rel=".claude/.credentials.json",          risk="secret", src="实机验证"),     dict(tool="codex",  kind="hooks",    rel=".codex/hooks.json",          risk="config", src="第三方文档+实测"),     dict(tool="trae",   kind="mcp",      rel=".trae-cn/mcps",          risk="config", src="实机扫描"),

... 共 33 条,直接改这个列表就能扩]

三个子命令,各管一件事:

scan—— 先看清楚你有什么。

$ python agentcfg.py scan落点表共 33 条,覆盖 11 个工具;本机命中 8 条,合计 106 个文件 / 1.7M

它会把每条落点的存在情况、文件数、体积列出来,凭据类标红。还会反查 HOME 下所有不在表里的隐藏目录 —— 表外的工具窝就是这么发现的。

backup—— 备份,默认脱敏、跳过凭据。

$ python agentcfg.py backup -o ./backup收录 105 个文件,跳过 4 条落点(凭据/噪音)   脱敏替换 8 处   已生成 manifest.json / .gitignore / README.md

产出是一个可以直接git init的目录:按工具/类型/组织,每个文件带 sha256,manifest.json记录了备份时刻的全部状态。

audit—— 对备份做密钥残留自查。

$ python agentcfg.py audit -o ./backup扫描 108 个文件,可疑残留 6 处(其中硬命中 0 处)

剩下的 6 处全是hex32jwt-ish误报 —— git 提交哈希和 base64 过的配置串。audit 的价值不在自动判断,在逼你逐条看一遍。它在发现硬命中(kv / literal / pem 三类)时退出码返回 1,可以直接挂进 pre-commit 或者 CI 把关。

五、脱敏这个坑:两头都会错

图 6 · 脱敏的两轮失败:漏掉 botToken,以及改坏源码

这节是我在真机上连撞两轮换来的,值得单独讲。

第一轮:漏。脱敏正则只认token这个完整的词。结果botToken从缝里溜过去了 —— 那是一条真凭据,如果没兜住,就跟着备份进了仓库。camelCase、snake_case、连字符变体(accessToken/client_secret/api-token)全是一样的坑。

第二轮:误伤。把 key 名匹配放宽之后,它开始改坏源码。r.password=(o=r.password)!==null&&o!==void 0?o:""被替换成了,api_key = resolve_api_key(ap)也一样。单次备份的替换数从 8 处涨到 63 处,备份出来的 JS 和 Python 全都不能看了。

想明白之后,规则收敛成两条:

·key 名:包含敏感词即命中,不看大小写和分隔符;

·值的形状:只认两种 —— 引号包住的字符串(≥12 字符)、裸的高熵长串(≥20 字符且只含 base64 字符集)。带括号、空格、运算符的一律放过,那基本是源码,不是配置值。

改完之后跑一组 10 条用例的回归测试,10/10 通过,替换数回落到 8 处,源码完好。

但我要把结论说得更狠一点:自动脱敏一定有漏,别信它。真正的防线是三层的 —— 凭据类落点压根不备份、audit 逐条过目、提交前git grep一把。任何一层单独用都不可靠。

六、这件事什么时候值得做

值得:换机或重装前;两台机器之间同步;准备把个人配置沉淀成团队仓库(这是 teamai-cli 那类工具的前置步骤 —— 你得先知道自己有什么);以及最简单的,知道自己的东西放在哪儿

不值得:只用一个 AI 工具、没写过 hooks、skill 都是官方装的那种。这时候一个.claude目录拷走就完了,不用上脚本。

最后一句话总结:工具会换,模型会换,你调教出来的配置才是资产。资产的第一步,是知道它存在哪。

获取脚本

agentcfg.py全文约 240 行,纯标准库。公众号后台回复「落点」获取。

相关学习资料