午夜咖啡午夜咖啡

jolestar 的文章与笔记。

AgentInbox: 给 Agent 的收件箱

最近又捣鼓了一个工具:AgentInbox

它给 Agent 加了一层 event bus:先把外部变化收进来,再送回当前 session,让 Agent 可以接着把手上的事情做完。这个工具是从我的一个开发流需求里长出来的。

同一个项目里,我一般会开至少两个 Codex / Claude Code 窗口。

一个偏产品经理兼架构师角色,负责分析需求、定计划、创建 issue、review PR,以及最后决定合并。
另外一个偏开发者角色,负责分析 issue、制定开发计划、提交 PR,再继续跟 review 和 CI。

这里面我经常在扮演一个很笨但又很关键的角色:转发信息。

比如:

  • reviewer 留了 comment
  • CI 跑完了
  • PR 下面又有人补了一条约束

这些变化理论上都应该回到对应的 Agent 身上,但现实里经常还是得靠我去 GitHub 看一下,再手动转过去。问题不在信息有没有发生,而在这些信息很难稳定地回到对应的 agent session。

一旦我去处理别的事情,这个链路就很容易断掉。

那能不能让这些 Agent 直接被 GitHub 事件驱动,自己协作起来?

最直接的办法当然是让 Agent 自己盯着。

比如每次 Codex 提交 PR 之后,它会问我要不要继续盯 review 和 CI。我说可以,它就开始定时轮询接口。这个办法也能工作,但一直不太稳:费 token,容易断。

说到底,还是缺一套给 Agent 用的事件服务。

比如:

  • 订阅 GitHub event
  • 订阅 CI 状态变化
  • 订阅 X 上的 feed 流
  • 然后在事件发生时,驱动 Agent 主动采取行动

这就是 AgentInbox 想解决的问题。

Event Flow

AgentInbox 是怎么工作的

AgentInbox 做的事情很直接:先把外部事件收下来,再按不同 Agent 的订阅规则写进各自的 inbox。

它会把数据源(Source)里的事件拉到本地,再根据 Agent 定义的订阅规则(Subscription)做过滤。每个 Agent 都有自己的 Inbox,命中的事件会写进去。

Inbox 里一有新的消息,AgentInbox 就会负责通知 Agent。Agent 收到通知后再去读取,处理完以后做 ack

为什么不把事件一股脑直接推给 Agent,还要多一个 Inbox?

因为一旦某个数据源突然冒出很多消息,直接全塞给 Agent,Agent 很容易就会被冲爆。这和人处理消息有点像:系统先告诉你有多少未读,再由你决定什么时候打开、按什么顺序处理。

GitHub Review Workflow

最麻烦的是怎么通知到 Agent

把事件收进来并不难,真正麻烦的是最后一步:怎么把消息送到 Agent。

最理想的方式当然是 Agent 自己暴露一个 webhook 接口,AgentInbox 直接推过去。

但现实是,Codex / Claude Code 现在都没有提供这样的接口。

所以 AgentInbox 目前做的是另一套机制:基于 terminal session 的通知。

它支持 tmuxiTerm。当 Inbox 里有新消息时,它会直接把消息发到对应的 terminal 窗口,把提醒内容直接填进 Codex / Claude Code 的输入框并发送,让 Agent 继续干活。

这不是最优雅的方式,但对 Codex / Claude Code 这样的 Agent 来说,是一个可行的办法。

现在已经能跑什么

我已经断断续续试了几天,也陆续修了一些 bug。现在至少 reviewer 和 developer 这种协作工作流已经能完整跑通:

  • developer 开 PR
  • reviewer 收到通知去 review
  • developer 收到 review comment 和 CI 结果继续修
  • reviewer 再确认、再合并

这样一来,本地 Agent 更像一个能持续收消息、持续跟进、持续协作的工作对象,不再只是一个一次性执行器。

试试

仓库:

文档:

如果你用的是 Codex 或 Claude Code,可以先装 skill:

npx skills add holon-run/agentinbox --skill agentinbox -a codex -a claude-code

然后装 AgentInboxuxc

npm install -g @holon-run/agentinbox
brew tap holon-run/homebrew-tap
brew install uxc

后面还会继续补什么

现在内置的 EventSource 还不多,主要是 GitHub 和 Feishu,不过已经支持自定义扩展。

后面我会继续补更多的 EventSource,以及更多的 terminal / agent runtime 集成方式。

这层东西继续长出来,本地 Agent 的工作流就会更像一个长期在线的协作者,不用每次都重新喂上下文。