
给 Claude Code 和 Codex 装一个共享大脑基于 Obsidian 的双 Agent 开发-审核闭环关键词Claude Code / Codex CLI / Obsidian / MCP / 多 Agent 协作 / AGENTS.md / CLAUDE.md / 代码审核适用环境Windows 10/11 Claude Code Codex CLI实测 v0.147.0-alpha Node.js Obsidian可不打开一、背景为什么两个 Agent 需要一个共享大脑我用两个桌面开发 Agent 协作Claude Code 负责架构和开发Codex 负责代码审核。最开始遇到的问题很典型Claude Code 默认读项目里的CLAUDE.mdCodex 默认读AGENTS.md两套初始化文件各管各的互相不知道对方在做什么。新开一个会话、或者从开发切换到审核时之前的进度、决策、待办全丢了只能靠聊天记录人工搬运。想跑「开发 → 审核 → 修复 → 再审核」的闭环但两个 Agent 之间没有一个双方都认的「交接本」。解决方案是在本地建一个 Obsidian 仓库当共享大脑长期记忆两个 Agent 开工时都从里面读身份卡、进度、决策、审核队列任务结束把结果写回去。Obsidian 在这里只是 Markdown 文件柜不要求软件开着用 MCP 或直接文件读写都可以。这套方案我最终完整跑通了下面是落地全过程。二、总体架构读/写桥接文件调起 codex exec结构化审核结果指向/导入codex exec 只读调用落盘审核意见Obsidian 共享大脑独立于项目仓库agents/ 身份卡projects/项目/ 初始化与记忆memory/ progress / decisions / review-queueprotocols/ 联动作战协议Claude Code 架构开发者AGENTS.md CLAUDE.mdCodex 代码审核要点共享大脑独立于任何项目仓库不进 git避免和项目代码混在一起。身份卡 桥接文件决定每个 Agent 读到什么Codex 靠AGENTS.md自动加载Claude Code 靠CLAUDE.md的import。状态全部写在 Markdown 里进度progress.md、决策decisions.md、审核队列review-queue.md不依赖任何一方的聊天记忆。三、共享大脑的目录结构E:\BrainVault\ # Obsidian 的 vault可建在安装目录外任意位置 ├─ agents\ # 全局身份卡跨项目通用 │ ├─ claude-code-架构开发者.md │ └─ codex-代码审核.md ├─ protocols\ # 跨项目作战协议 │ └─ dev-review-loop.md └─ projects\ └─ my-project\ # 每个项目一个目录 ├─ init.md # 项目初始化技术栈/规范/红线 ├─ architecture.md # 架构记录 └─ memory\ ├─ decisions.md # ADR 决策记录只追加 ├─ progress.md # 进度与交接日志任务结束必写 └─ review-queue.md # 审核队列状态 当前轮次四、身份卡让每个 Agent 知道“我是谁”身份卡是全局的放agents/目录两个 Agent 各自通读。核心内容--- type: agent-card agent: codex role: 代码审核 --- # Codex — 代码审核 ## 本项目的固定路径my-project - initE:/BrainVault/projects/my-project/init.md - 进度交接E:/BrainVault/projects/my-project/memory/progress.md - 审核队列E:/BrainVault/projects/my-project/memory/review-queue.md ## 身份定位 你是代码审核不负责开发只审查变更、按 严重/中/低 分级输出可执行意见。 ## 开工流程先读后写 1. 读 init.md 2. 读 review-queue.md 3. 读 decisions.md 4. 读 progress.md 5. 检查变更输出审核意见 ## 任务结束强制输出未完成输出不得宣称任务完成 - review-queue.md每条意见写明 文件:行号 级别 问题 建议 - progress.md按模板追加审核交接Claude Code 的身份卡类似只是职责是「架构开发者」并额外规定交接记录必须让下一位不提问就能接手未完成任务禁止写「已完成」。五、桥接文件AGENTS.md 与 CLAUDE.md这是「确保 Codex 一被调起就知道自己是谁」的关键。Codex 侧项目根目录 AGENTS.mdCodex CLI 会自动读取运行目录及其父目录的AGENTS.md所以只要在项目根目录放一个桥接段Codex 每次启动都会自动加载## 共享大脑Obsidian 开工前必须先读取以下文件再开始任何工作 1. E:/BrainVault/agents/codex-代码审核.md你的身份卡 2. E:/BrainVault/projects/my-project/init.md 3. E:/BrainVault/projects/my-project/memory/progress.md 4. E:/BrainVault/projects/my-project/memory/review-queue.md 5. E:/BrainVault/protocols/dev-review-loop.md 任务结束前必须完成输出未完成输出不得宣称任务完成。Claude Code 侧项目根目录 CLAUDE.mdClaude Code 支持在CLAUDE.md里用路径导入外部文件启动时自动展开## 共享大脑Obsidian 开工前自动导入 E:/BrainVault/agents/claude-code-架构开发者.md E:/BrainVault/projects/my-project/init.md E:/BrainVault/projects/my-project/memory/decisions.md E:/BrainVault/projects/my-project/memory/progress.md E:/BrainVault/projects/my-project/memory/review-queue.md E:/BrainVault/protocols/dev-review-loop.md 任务结束前必须完成输出 - 重要设计选择追加到 decisions.md只追加不改旧条目 - 按模板在 progress.md 追加交接记录 - review-queue.md 相关条目置为「待审」/「已修复」六、Obsidian MCP 配置Codex 侧全局 config.toml实测Codex CLI 不读取项目级.mcp.json所以要配在用户全局配置[mcp_servers.obsidian] command npx args [-y, istrejo/obsidian-mcp] [mcp_servers.obsidian.env] OBSIDIAN_VAULT_PATH E:\BrainVault npm_config_cache C:\Users\你的用户名\AppData\Local\npm-cache⚠️ Windows 路径在 TOML 里必须用单引号。用双引号E:\BrainVault会报missing escaped value因为\B、\V被当成转义符。Claude Code 侧项目级 .mcp.json{mcpServers:{obsidian:{command:npx,args:[-y,istrejo/obsidian-mcp],env:{OBSIDIAN_VAULT_PATH:E:\\BrainVault}}}}该 MCP 直接读写文件系统Obsidian 软件不用开着。七、开发-审核联动协议核心协议文件protocols/dev-review-loop.md定义了闭环、轮次上限和人工接管Claude Code 完成一轮开发/修复后在progress.md写「待审核」交接并把review-queue.md相关条目置「待审」。Claude Code 调起codex exec审核命令见下一节。Codex 只读审查当前 git 改动输出结构化审核结果本轮结论、建议轮次、意见列表、给架构开发者的话。Claude Code 把审核结果落盘review-queue.md新增小节并把顶部「当前轮次」1progress.md追加审核交接。按结果处理已通过→ 汇报用户等归档命令待修复且轮次 3→ 修复进入下一轮轮次 ≥ 3 仍有严重/中问题→ Codex 写 STOP 「阻塞-需人工介入」Claude Code 停止自动迭代并上报。Codex exec只读审核Claude Code开发/编排你Codex exec只读审核Claude Code开发/编排你alt[待修复且轮次3][已通过 或 第3轮仍有问题]开发/修复 写「待审核」交接调起 codex exec读脑库 git diff输出结构化意见结果落盘到临时文件意见写入 review-queue轮次1 progress修复进下一轮汇报 / STOP 人工介入审核队列顶部维护轮次计数 当前轮次1每轮审核 1上限 3第 3 轮仍有严重/中问题 → 阻塞-需人工介入八、Claude Code 如何调起 Codex在项目里放一个斜杠命令.claude/commands/codex-review.mdClaude Code 会话里随时可以/codex-review--- description: 调起 Codex 执行本项目代码审核共享大脑联动协议 --- 按共享大脑的「开发-审核联动协议」执行本轮代码审核 !codex exec -C D:/Projects/my-project -s read-only -c approval_policynever -o C:/Users/你的用户名/AppData/Local/Temp/codex-review-last.md 按 AGENTS.md 的共享大脑协议对 my-project 执行本轮代码审核。先读身份卡与 memory 文件再审查当前 git 改动只读命令。把审核结果输出到最终回复本轮结论已通过/待修复、建议轮次当前轮次1、意见列表文件:行号级别问题建议、给架构开发者的话。不要写脑库沙箱只读脑库落盘由 Claude Code 负责。 命令结束后用 Read 工具读取 .../codex-review-last.md先把审核结果落盘到 review-queue.md新增小节 顶部「当前轮次」1和 progress.md追加审核交接再按协议处理修复 / 上报 / 停止。参数说明参数作用-C 项目根锁定工作目录保证读到该项目 AGENTS.md身份自动加载-s read-only只读沙箱为什么不用 workspace-write见踩坑-c approval_policynever非交互不弹审批-o 文件把 Codex 最后一条回复落盘方便 Claude Code 读取九、用 Hooks 强制闭环光靠提示词约束Agent 在任务小的时候会直接说“Done”跳过审核我实测踩过。所以加了两个 Claude Code Hooks项目.claude/settings.json{hooks:{UserPromptSubmit:[{hooks:[{type:command,command:powershell -NoProfile -ExecutionPolicy Bypass -File \D:/Projects/my-project/.claude/hooks/prompt-reminder.ps1\}]}],Stop:[{hooks:[{type:command,command:powershell -NoProfile -ExecutionPolicy Bypass -File \D:/Projects/my-project/.claude/hooks/stop-review-check.ps1\}]}]}}UserPromptSubmit每条用户消息后自动追加协议提醒“未审核不得宣称完成”让模型每次都看得到。Stop当模型宣称“已完成/Done”但本会话没真正执行过codex exec检查会话 transcript 里的 Bash 工具调用时返回block拦截提示先补审核。中文提醒文本放在 vault 的.txt文件里由脚本读取避免 PowerShell 脚本文件编码问题脚本本身保持纯 ASCII。十、踩坑记录Windows 实测价值最高1. Windows 下 workspace-write 沙箱是坏的现象codex exec -s workspace-write --add-dir E:/BrainVault后模型执行任何 shell 命令都报windows sandbox: helper_unknown_error: setup refresh had errors结果模型折腾 10 分钟脑库一个字都没写进去。对策改用-s read-only实测正常配合下面的分工调整。2. codex exec 不挂载 MCP 写工具现象exec 会话里list_mcp_resources为空工具列表里没有update_note所以“让 Codex 用 MCP 直接写脑库”行不通。对策分工调整——Codex 只读审核并把结构化结果输出到-o落盘文件由拥有完整写权限的 Claude Code 负责把意见写进review-queue.md/progress.md。这反而更安全。3. ide MCP 让每次 exec 白等 300 秒现象全局配置里有一个[mcp_servers.ide]http://127.0.0.1:64342/stream每次 exec 的 MCP 资源枚举在它身上超时 300 秒直接把 Agent 卡死。对策从config.toml移除该服务器先备份exec 初始化立刻变快。4. TOML 里的 Windows 路径必须用单引号OBSIDIAN_VAULT_PATH E:\BrainVault会报missing escaped value: expected b, e, f, n, ...改单引号E:\BrainVault即可。5. CLI 里中文乱码多半是显示问题PowerShell 默认用 GBK 解码 UTF-8 文件看着乱码文件本身没坏。用Get-Content -Encoding UTF8查看即可不要因此去重写文件。6.-a never在部分版本报错实测 v0.147.0 的codex exec不接受-a/--ask-for-approval报unexpected argument。统一用-c approval_policynever。7. 桌面 App 可能重写 config.toml手动编辑config.toml前先备份如果 App 启动后把改动覆盖回去重新编辑即可。8. 轮次与归档要有明确的“所有者”轮次计数放在review-queue.md顶部由审核方每次 1双方都认这个数字。归档只由用户下达命令触发把已收敛任务移入memory/archive/并建索引Agent 不得擅自归档避免任务记录混在一起、上下文越来越贵。十一、验证方法与成本控制最小验证身份是否加载成功codex exec-CD:/Projects/my-project-sread-only-c approval_policynever按 AGENTS.md 回答1) 你的身份角色2) 当前项目名3) 开工必读的脑库文件路径。能答出「代码审核 / my-project / 脑库路径」就说明桥接成功。成本观察共享大脑的代价是 tokenCodex 每次审核都要读身份卡 init decisions 全量 progress 审核队列。实测一次只回答 3 个问题的最小调用就用了约 1.4 万 token。控制手段任务尽量小而聚焦定期归档已收敛的任务记录保持 progress.md 不膨胀低级别问题不阻塞闭环交给用户决定避免无谓的轮次。十二、小结这套方案的骨架其实很简单一个 Obsidian 仓库当共享大脑独立于项目 git两份身份卡 两个桥接文件决定谁读什么、写什么一个联动协议规定闭环、轮次上限和人工接管一条固定命令codex exec hooks 保证流程不被“偷懒跳过”踩坑记录帮你绕开 Windows 下的沙箱、MCP、编码三大坑。最终效果你只需要在 Claude Code 里描述需求剩下的「开发 → 审核 → 修复 → 再审核」最多 3 轮自动跑完第 3 轮还有严重问题就停下等人工介入任务完成你下归档命令一切记录都在 Obsidian 里随时可以翻。提示文中路径、用户名均为占位符请替换成你自己的环境API Key 等敏感信息不要写进博客或提交到仓库。