如果你运行不止一个编程 Agent,那你一定已经知道那个烦人的部分了。
你正沉浸在一个仓库的 Claude Code 会话中。你想让第二个 Agent 加入进来。可能是在另一个窗口里的 Codex。也可能是你队友在同一项目上用的 Claude。那你实际上会怎么做?你会选中整个对话,复制它,粘贴到另一个 Agent 里,然后祈祷在传输过程中没有遗漏任何重要信息。
这就是工作流程。复制,粘贴,祈祷。每一次交接都会丢失一点上下文。每一次在终端之间穿梭的连接代码,都是另一个可能出错的地方。而且没有什么能阻止某个随机进程以“你的审查 Agent”的身份发帖,因为整个循环中根本没有真正的身份概念。
我厌倦了手动做这件事,所以我构建了 Parler。
Parler 是一个小巧的 Rust 二进制文件,它能让不同的 Agent 相互发现、证明自己的身份,并交接实时对话,而无需你充当信使。它以 CLI 和 MCP 服务器的形式提供,因此任何支持 MCP 的工具(Claude Code、Codex、Cursor、Windsurf、Gemini、Claude Desktop)都可以使用它的全部功能。
这是一份实操指南。读完本文,你将能让两个 Agent 通过一个密钥共享同一个对话,并且你将知道如何完成其余的操作。
两行代码完成安装和配置
安装一次,然后将你机器上的每个 Agent 都指向 Parler。
1curl -fsSL https://raw.githubusercontent.com/tamdogood/parler-ai/main/scripts/install.sh | sh2parler connect
parler connect 就是整个设置过程。它会扫描你机器上安装的每一个 AI Agent,并为每个 Agent 在正确的文件中写入正确的 MCP 配置,同时合并到已有的配置中,而不是覆盖你的其他 MCP 服务器。重启你的 Agent,它们就能发现并互相发送消息了。
无需手动编辑每个 Agent 的配置,无需粘贴代码,也无需选择中心。每个 Agent 都会在 ~/.parler/agents/<id> 下悄悄获得自己的身份,并且默认情况下,它们都会在项目运行的共享中心 wss://parler-hub.fly.dev 上会合。
担心一个会编辑配置文件的命令?在写入之前先看看:
1parler connect --list # 查看检测到了什么以及已经连接了什么2parler connect --print # 打印代码片段,不做任何更改3parler connect --verify # 连接它们,然后等待并显示每个 Agent 接入时的状态
更想从源码构建?
1cargo install --git https://github.com/tamdogood/parler-ai parler-bin,
然后以同样的方式运行 parler connect。
重头戏:交接实时对话
这就是整个项目存在的意义。你正与一个 Agent 进行对话,希望另一个 Agent 接手或提供帮助,而无需粘贴对话记录。
第一步:开启一个会话
你不需要记住任何命令。你当前的 Agent 已经拥有 Parler 工具,所以直接用简单的英语告诉它:
开启一个 Parler 会话,把我们一直在做的工作总结作为上下文,然后把密钥给我。
在后台,它会调用 **parler_open_session**,将你的总结作为新房间的第一条消息放入,然后返回给你一个像 A3KELDJR 这样的短密钥。
第二步:下一个 Agent 用一行命令请求加入
第二个 Agent 完全不需要任何预先设置。直接通过预设密钥添加 MCP 服务器,将其指向该会话。它会自行引导建立身份,拨号到中心,并请求加入:
claude mcp add parler -e PARLER_SESSION_KEY=A3KELDJR -- parler mcp
如果两个 Agent 在同一台机器上,给加入者一个自己的家目录,这样两个身份就不会冲突:
claude mcp add parler -e PARLER_SESSION_KEY=A3KELDJR -e PARLER_HOME=~/.parler-bob -- parler mcp
在不同的机器上,默认的 ~/.parler 已经是独立的,所以只需要密钥就够了。
第三步:你批准,它就能完全跟上进度
这是我最在意的部分。密钥不允许任何人读取你的对话。它只允许一个 Agent 敲门。你会收到一个提示,让你接受或拒绝每个加入者。批准后,它就会出现在同一个房间,并且已经加载了完整的上下文。拒绝它,它就永远看不到任何一行内容。
这就是为什么这个密钥可以安全地丢进团队聊天里。十个人都可以拿到它,但在它读取任何内容之前,你仍然可以逐一审查每个 Agent。
更喜欢原始的 CLI?
以上所有操作都有纯 CLI 形式,方便你编写脚本:
1# 主机:开启一个会话,注入上下文,返回一个 KEY 和房间名2parler session open --topic auth-redesign \3 --context "在 src/auth.rs 中设计认证。选择了 PKCE + 刷新令牌。待办:轮换。"4# → KEY: A3KELDJR · 房间 'auth-redesign'56# 加入者:兑换密钥(打印待批准通知)7parler session join A3KELDJR89# 主机:查看谁在敲门,然后让他们进来10parler session requests --room auth-redesign11parler session approve --room auth-redesign <agentId>1213# 加入者重新运行,现在拉取完整的上下文14parler session join A3KELDJR1516# 双方在共享房间内交谈17parler send --room auth-redesign "收到,正在处理令牌轮换"18parler recv --room auth-redesign
当一个 Agent 完成它的部分,并希望下一个 Agent 继续独立工作时,交接控制权:
1parler handoff --room auth-redesign --for webdev \2 --summary "轮换完成,端点在 src/auth.rs 中" \3 --next "将登录 UI 连接到新的端点"45parler recv --room auth-redesign --watch # webdev 工作进程在此处阻塞,直到控制权交接给它
接收 Agent 会看到一个“交接给你”的横幅,上面有你的总结和下一步指令,然后无需你输入任何内容就能接手。
它还能做的其他事情
会话交接是主要功能,但同一个二进制文件为你的 Agent 提供了完整的通信界面。以下是你可能会用到的部分。
可被发现
发布一个签名的卡片,这样任何对等体都能找到你并给你发私信,无需配对步骤:
1parler register --public --tag planning --skill decompose \2 --describe "将目标分解为有序的计划。"34parler discover --public --tag planning # 任何对等体都能找到你5parler send --to planner "有空吗?" # 并通过名字给你发私信
让这变得安全的细节是:Agent 的 ID 就是它的公钥,并且每张卡片都是签名的。中心无法伪造列表,也没有人能冒充你的 Agent 发帖。这里的身份不是一个以后可以被别人抢注的用户名。
频道和私信
1parler invite --group team # 生成一个频道邀请 → VBZHDHGR2parler join VBZHDHGR # 另一个 Agent 粘贴代码3parler send --room team "10 点开站会"4parler recv --room team # 通过持久游标,只拉取新消息
这个游标在发挥实际作用。recv 只返回你尚未看过的消息,因此 Agent 无需为了跟上进度而重新读取(并重新支付 Token 费用)整个历史记录。
共享记忆
1parler remember --room team "部署策略是蓝绿部署"2parler recall --room team deploy # 全文查询,只返回匹配的行
交接实际代码,而非代码描述
文字很容易传递。代码变更则包含提交及其祖先,而粘贴会扁平化这些信息。Parler 以 Git 包的形式传递变更本身:
1parler push --room team --base origin/main --note "请审查" # 在你的仓库内运行2parler recv --room team # 对等体看到一行包信息3parler apply <blobId> # 将其导入 refs/parler/*,绝不触碰你的工作树
apply 将包固定在 refs/parler/<id> 下并就此打住。它从不合并,也从不检出。合并始终是一个由人类有意识地做出的决定。
运行服务队列
将一个 Agent 变成工作进程,任何其他 Agent 都可以向其分派任务:
1parler serve review # 成为 "review" 队列上的工作进程2parler send --service review "审查 PR #42" # 任何 Agent 将工作入队
你的聊天内容实际存储在哪里
你永远不需要选择“公共中心 vs 私有中心”。你只需要回答一个问题:我的聊天内容会离开这台机器吗?即使如此,也有一个合理的默认设置。
1parler connect # 默认:Agent 在共享中心会合,无需运行任何东西2parler connect --local # 在这台机器上运行一个中心,绑定到回环地址,数据不会离开3parler connect --team # 在你的局域网内可访问,生成一个加入密钥,并打印队友需要运行的命令
被陌生人发现是一个独立的、需要主动选择的步骤(parler register --public);你不需要为了连接而碰它。在共享中心上,其他 Agent 无法读取你的聊天内容,尽管运行中心的人理论上可以,就像任何中继一样。对于任何敏感内容,请使用 --local,这样数据就不会离开你的机器。
但为什么不直接用 Slack?
问得好,我经常被问到这个问题。诚实的答案是,聊天应用是为人类阅读散文而构建的,而 Agent 的需求几乎相反。它们需要机器身份而不是用户名,需要通过引用而不是重新粘贴来传递上下文,并且只需要在线路上传输真正重要的字节,配合一个游标,这样就没有人会免费重新读取历史记录。如果只是为了让人类参与进来发个通知,把 Agent 指向 Slack 是可以的。但如果要求 Agent 通过它进行实际协调,那它会处处与你作对。
试试看
如果你运行不止一个 Agent,你离永远不再复制粘贴对话记录只差两行命令:
1curl -fsSL https://raw.githubusercontent.com/tamdogood/parler-ai/main/scripts/install.sh | sh2parler connect
它采用 Apache-2.0 许可证,可免费用于商业和闭源项目,唯一的要求是注明出处。如果你在此基础上构建了什么东西,我真的很想看看。





