跳转到正文
Manuel García-Llera Añón / Product Designer · Design Engineer联系

案例

Coordination Hub

一个用于协调多个 AI 的工作空间,让我了解各自提出了什么、哪些内容已经评审,以及哪些决定需要由我作出。

我创建它,是为了解决自己工作中的问题:切换不同 AI 时,我会丢失上下文,不得不重新梳理决策。Hub 的实验性界面名为 Testigo,它汇集项目、对话与经过评审的记忆。我的目标是跟进工作,同时不把提案混同于经过验证的结果。

实验性

背景
独立产品 · 在实际使用中构建的工作流程基础设施
我的贡献
产品方向、决策架构,以及人类与 AI 监督契约的定义
技术
Node.jsMCPJSONLZodClaudeOpenAI/Codex
年份
2026
试点
开发中的独立产品
L0–L3
由人保留决定权的自主性
MCP
独立会话之间的协调

协作: 我与 Claude 和 Codex 合作实现并审查系统。产品方向、验收标准,以及需要授权的决定,仍由我负责。

使用演示数据的实际界面。这些截图来自 Testigo 的开发过程,不包含工作对话或 LALIGA 信息。在这个隔离会话中,服务提供方显示为未连接;页面展示的是监督机制的设计,而非正在运行的自主执行过程。

逐层解读项目

细小的决策,共同构成系统。

01 / 031. 跟进一段对话

我按项目与对话组织上下文。每项贡献保留其作者,不离开工作空间就能查看工具的可用状态。实际界面,使用演示数据。

02 / 032. 审查保留的信息

记忆区分接收到的材料与经过评审的知识。我希望人们能够检查和审查被复用的信息,而不是默认写下的内容都有效。实际界面,使用演示数据。

03 / 033. 设置另一个项目

创建独立工作空间,让每个项目的边界明确可见。这属于我仍在测试的初次使用体验,旨在减少设置工作并避免混淆上下文。实际界面,使用演示数据。

研究

问题是在工作中出现的。我在助手之间复制回答、重复背景,并花时间检查实际完成了什么。我想区分经常被混为一谈的三件事:请求、提案,以及结果的证据。

我定义了自主级别,防止建议自行转化为授权。L0 允许观察;L1 和 L2 按范围约束操作;L3 将影响最大的决策保留给人。

方法:评估人工中转协调的实际成本 · 与现有框架进行比较,并决定构建针对性的解决方案 · L0–L3 自主模型,其中 L3 由人负责 · 在编写代码之前定义可衡量的成功标准.

原型

我围绕一个具体任务组织界面:理解哪些事情需要我关注。上下文位于左侧,对话在中央,工具状态在右侧。记忆按需查阅,而不是一直占据阅读空间。

事件日志保留操作轨迹。在此基础上建立的视图,使人们不必浏览全部技术日志,也能阅读对话并审查相关决策。

流程中的 AI

在这个项目中,我使用 AI 构建一个也应帮助我监督 AI 的工具。我与 Claude 和 Codex 交替开展实现和评审,将它们的结论与代码及测试对照。两个相同的回答,并不足以让我认定某件事已经得到验证。

工具
Claude · Codex,通过 Hub 本身相互协调
阶段
完整周期:规格定义、实现、交叉评审与验证
人的贡献
问题、验收标准、决策架构、优先级,以及每项不可逆操作的批准
AI 输出
实现、测试,以及带有优先级问题与证据的独立评审
选择标准
可核实的证据、可逆性、项目隔离、不含秘密信息,以及通过的测试
发现的局限
任何 AI 都不能自行扩大权限、作出不可逆决定,或在没有独立评审时宣布达成共识
最终决策
一切不可逆事项由人决定。AI 决定可逆操作,并留下记录

开发

Hub 通过 MCP 暴露操作,供兼容工具读取消息、记录回复与提交证据。契约区分发送、接收、处理与验证:它们是不同的状态,我也希望界面以同样的方式对待它们。

我重点关注恢复、重试与项目间隔离。这些场景并不起眼,但要让协调工具减少而非增加不确定性,它们就至关重要。

验证

一次审查发现了一个很有启发性的问题:某个议题可以在未检查独立评审的情况下,以共识状态关闭。我们修正契约,要求提供该评审并保留证据。这一发现改变了我的设计判断:积极状态需要说明其依据。

初始版本记录了 95 项自动化测试。这是历史开发证据,不保证当前产品已经完成。Hub 仍处于试点阶段,其易用性仍需要与实际用户一起评估;截图或代码测试无法替代这种验证。

从原型到组件

系统组织方式

  • 基础规范 / 自主级别 · 可用状态 · 可见性类别
  • 组织组件 / 待关注队列 · 对话时间线 · 共识面板
  • 组织组件 / 决策日志 · 智能体清单 · 证据链

代码 · 实现证据

const requiredReviewers = [
  ...new Set(target.to.filter((agent) => agent !== parsed.from)),
]
if (requiredReviewers.length === 0) {
  throw new Error('Consensus requires an independent review')
}

const reviewedBy = requiredReviewers.filter((reviewer) =>
  events.some(
    (event) =>
      event.correlationId === target.id &&
      event.from === reviewer &&
      ['review', 'objection', 'result'].includes(event.messageKind),
  ),
)
if (reviewedBy.length !== requiredReviewers.length) {
  throw new Error('Consensus requires an independent review from: ...')
}

const level =
  parsed.reversibility === 'irreversible' ? 'L3' : topicLevel
if (level === 'L3' && parsed.from !== 'manuel') {
  throw new Error('L3 consensus may only be resolved by Manuel')
}

src/store.mjs · resolveTopic()

系统核心是共识门槛。以前,只需智能体声明即可;现在必须获得每位必需评审者的独立评审,并依据评审推导级别,而不是直接指定级别。

consensusState = 'reviewed' | 'provisional' | 'lapsed' ← 由已记录的评审推导,而非由解决议题的智能体声明

收获

将智能与权限分开:由一方提出建议,再由另一个确定性的部分授权,可以防止将建议误当成决定。

没有独立评审的一致意见不是共识,而是盖了认可印章的观点。如果系统不对此进行检查,这种情况迟早会发生。

因配额而不可用不是例外,而是常见条件:设计应明确降级,而不是陷入停滞。

我学会了在工作时记录决策:事后重建背景需要更多精力,也可能遗漏信息。

开放问题:一个人需要看到哪些信息,才能放心监督多个自主智能体,而不必阅读它们产生的全部内容?

联系

聊聊你的想法.

如果你觉得我的工作方式适合你的团队,或者有希望推进的产品或研究项目,我很愿意了解。请告诉我你的需求以及目前的进展。我会亲自阅读你的留言。

你也可以在 LinkedIn 找到我

你的邮箱地址仅用于回复这条留言。