信任边界
Holon 把信任边界显式保留下来,因为长期 Agent 会从多个面收到输入。操作者 指令、外部 webhook 载荷、文件内容、网页和子 Agent 输出并不等价。
信任为什么重要
在无头运行时里,一个 Agent 可能同时在:
- 执行来自可信渠道的操作者指令
- 为取证读取不可信的 webhook 载荷
- 解析包含项目约定的 Markdown 文件
- 接收需要验证的子 Agent 输出
- 抓取外部网页做调研
没有显式的信任分类,藏在这些来源里的恶意或意外的“指令”就可能提升权限。
来源分类
每个入站事件都带一个 origin,记录它的来源:
| 来源 | 说明 | 示例 |
|---|---|---|
operator | 直接的人类指令 | CLI 提示、操作者入站 API |
system | 运行时生成的事件 | 系统心跳、压缩触发 |
task | 子任务完成 | 命令任务结束、子 Agent 结果 |
channel | 外部集成 | Slack 消息、CI 通知 |
webhook | 第三方回调 | GitHub webhook、部署钩子 |
callback | 由能力密钥放行的外部触发回调 | 外部触发唤醒提示 |
timer | 定时触发 | 类 cron 定时器触发 |
运行时能够区分“操作者让我做 X”和“某个网页提到了 X”。
信任级别
| 级别 | 含义 | 谁能设置 |
|---|---|---|
trusted-operator | 最高权威——具有约束力的指令 | 操作者、运行时配置 |
trusted-system | 运行时内部事件 | Holon 运行时自身 |
trusted-integration | 经过审查的外部服务 | 已配置的传输绑定 |
untrusted-external | 未知或未验证的来源 | webhook、外部内容的默认值 |
信任分类能防止意外的权限提升:
- Markdown 文件不会因为里面有一句话长得像命令,就能覆盖操作者指令
- 为调研抓取的网页不能改变 Agent 的活动工作项
- GitHub issue 评论不能修改运行时配置
优先级与信任的区别
优先级和信任是两回事:
- 优先级 控制调度:
interject>next>normal>background - 信任 控制权威:这个事件被允许做什么
低信任的外部事件也可以很紧急(CI 构建失败——立刻唤醒 Agent)。高信任的 操作者备注也可以是例行公事(有空时看一下这个)。
委派
子 Agent 和后台任务返回的是证据,不是权威:
- 子 Agent 的输出通过受监督的任务句柄到达
- 父 Agent 仍然负责审查和验证
- 子 Agent 的结论不会自动变成父 Agent 的回答
实际应用
读文件时
文件内容是不可信上下文,即使它在工作区里。它可以描述约定、提供事实, 但不能发出运行时指令。
抓取网页内容时
WebFetch 的结果会被标记为不可信外部内容。Agent 可以把它当作调研证据,
但不能当作命令。
收到外部事件时
入站 webhook 载荷带着 origin: webhook 和具体来源。Agent 检查载荷里的
证据,但把操作者指令或自身 AGENTS.md 指引视为有约束力的。
操作者指令
通过可信渠道(holon run、操作者入站 API、TUI)进入的操作者输入拥有最高
信任级别。这些指令定义任务范围和验收标准。
对文档的启示
本站点是 Markdown 原生的,因此 Agent 可以直接抓取源内容,但这些内容仍然是
文档。它可以解释项目约定,但不能取代已加载的运行时指引、工作区 AGENTS.md
文件和操作者指令。
另见
- 运行时模型 — Agent、任务和工作项生命周期
- 通过 HTTP 自动化 Holon — 来源和信任在 HTTP API 中如何呈现
- CLI 参考 —
holon run的--trust标志
