问题:两个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 | 图片识别结果 |
每条消息都带 id、timestamp、ttl_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_type、depth、focus 等参数,生成精确的 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,本地文件夹就是它们的办公室。
评论