问题:两个AI在同一个房间却说不上话

我用的腾讯云 Coding Assistant 里同时跑着两个 Agent:

  • Claude Code(DeepSeek V4):擅长代码、推理、文本分析。但看不到图片——截图贴过去只能看到 [Unsupported Image]
  • CodeBuddy:能识别图片(Kimi K2.6、Minimax-M3),但推理和架构能力相对弱

两个 Agent 各司其职,各有短板。但能力恰好互补——一个有脑子,一个有眼睛。可惜它俩在一个 IDE 里,谁也不认识谁。

如果能让它们通信呢?

这个想法一旦冒出来就成了绕不开的工程问题。


核心设计:文件收件箱,不用网络

没有服务器、没有数据库、没有消息队列。最直接的方案:共享文件系统

两个 Agent 都能读写本地文件。那就用文件当信箱:

.agent-comms/
  claude-inbox.jsonl      ← CodeBuddy 写给 Claude Code
  codebuddy-inbox.jsonl   ← Claude Code 写给 CodeBuddy
  cursor-claude.json      ← 已读位置追踪
  cursor-codebuddy.json   ← 已读位置追踪

为什么选 JSONL:每行一条 JSON,追加写入,读取时按行解析。不需要锁机制——写冲突概率极低,因为两个 Agent 各写各的 inbox。

Cursor 机制:每个 Agent 维护一个 cursor JSON,记录已读行号。每次只读新行,避免重复处理和消息遗漏。


七种消息类型

不是简单发条文字就完事。根据实际需求,定义了 7 种消息类型:

type 方向 用途
memory 双向 记忆同步,增量推送变更文件
task 双向 任务分配,含指令和预期输出
notify 双向 状态通知、反馈
question 双向 方案校验、调研请求
handoff 双向 复杂任务的移交协作
multimodal-request Claude → CodeBuddy 图片识别请求
multimodal-response CodeBuddy → Claude 图片识别结果

每条消息都带 idtimestampttl_hours 和可选的 in_reply_to,形成消息链条。


CB 助手:始终在线的信使

最初的想法很简单:写文件 → 对方轮询读取。但马上遇到问题——我需要有人帮我盯着收件箱

答案是 CB 助手agent-bridge.mjs),一个常驻 Node.js 进程,做三件事:

1. 收件箱扫描 每 3 秒轮询 codebuddy-inbox.jsonl,有新消息立即处理。Cursor 预更新机制防止并发重复消费,消息 TTL 超时自动跳过。

2. 结构化 Prompt 解析 当 Claude Code 发来 multimodal-request 消息,CB 助手按协议解码出 image_typedepthfocus 等参数,生成精确的 CodeBuddy prompt 再转发。

3. 心跳 + 看门狗 每 30 秒写 heartbeat.json,看门狗每 30 秒检测一次。心跳超过 90 秒未更新 → 自动重启 CB 助手。


推送机制:Hook + 常驻双通道

两个方向的推送走不同路径:

Claude → CodeBuddy:Claude Code 有 Stop Hook —— 每次对话结束时自动触发,调用 PowerShell 脚本将新消息写入 codebuddy-inbox.jsonl。CB 助手扫到后处理。

CodeBuddy → Claude:CB 助手将处理结果(如多模态识别报告)写入 claude-inbox.jsonl。Claude Code 下次对话开始时读取。


多模态管道:让盲人借一双眼睛

这是最核心的真实用例。完整流程:

Claude Code(我)
  │ 用户贴了张截图
  │ 触发 codebuddy-image Skill
  │ 生成 [ANALYSIS_REQUEST] 消息
  ▼
CB 助手
  │ 扫到 multimodal-request
  │ 解析参数生成 CodeBuddy prompt
  │ 调 CodeBuddy CLI 传图加描述
  ▼
CodeBuddy(多模态模型)
  │ 分析图片内容
  │ 输出结构化文字描述
  ▼
CB 助手
  │ 组装 multimodal-response
  │ 写入 claude-inbox.jsonl
  ▼
Claude Code(我)
  │ 轮询到回复
  │ 格式化展示给用户

一个关键设计:消息带附件引用(文件路径、mime 类型、大小),不把二进制塞进 JSON。图片始终在原始路径,Agent 按路径读取。


Skills 职责边界

为了管理复杂度,把能力封装为 Skills:

Skill 职责 不负责
codebuddy-image 确定分析参数→构建结构化请求→发送→展示结果 多模态识别本身
codebuddy-task 确定任务类型→构建消息→发送→等待/通知 任务执行

Skills 本质是标准化的调用模板——Claude Code 不需要知道 CB 助手怎么调 CodeBuddy CLI,只需要按协议写好请求消息。


写在最后

这套体系的核心价值不是技术有多复杂,而是在完全本地、零成本的条件下,让两个独立 AI 像一个团队一样干活。

目前的局限:

  • 消息轮询有 3 秒延迟(够用但不是实时推送)
  • 单请求处理(没有并发队列管理)
  • 图片识别依赖本地路径,不适合跨机器协作

但方向对了。两个 Agent 加一个 CB 助手,本质上是微型 AI 团队的雏形——不收钱、不用注册、不需要 API Key,本地文件夹就是它们的办公室。