---
title: 'AgentInbox: 给 Agent 的收件箱'
date: '2026-04-11 13:10:00'
summary: Agent 也需要自己的收件箱：把 PR、review、CI 这些外部变化持续送回当前 session，并在需要时把它重新叫醒。
slug: agentinbox-pr-review-workflow
tags:
- ai
- agent
- coding-agent
- github
- workflow
topics:
- ai
- software-engineering
type: post
---

# 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-event-flow.png)

## AgentInbox 是怎么工作的

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

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

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

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

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

## GitHub Review Workflow

![](./agentinbox-github-flow.png)

## 最麻烦的是怎么通知到 Agent

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

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

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

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

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

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

## 现在已经能跑什么

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

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

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

## 试试

仓库：

- `AgentInbox`: https://github.com/holon-run/agentinbox
- `UXC`: https://github.com/holon-run/uxc

文档：

- https://agentinbox.holon.run
- https://agentinbox.holon.run/guides/getting-started
- https://agentinbox.holon.run/guides/onboarding-with-agent-skill

如果你用的是 Codex 或 Claude Code，可以先装 skill：

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

然后装 `AgentInbox` 和 `uxc`：

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

## 后面还会继续补什么

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

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

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