前置
Decision Trace and Authorization Audit
运行时策略管线不仅需要决定一次工具调用是被拒绝、需要审批还是获准执行,还应支持在事后还原该决策的形成过程。
为此,引入 Decision Trace(决策链)机制。决策链记录一次工具调用经过的策略节点及其决策关系,并在拒绝或开始执行等关键节点生成带时间戳的终点事件。审计时,从终点事件关联的决策节点出发,沿 parent_id 回溯,即可重建本次调用实际经过的决策路径。
该机制无需在终点事件中重复保存整条管线的所有策略信息。各策略节点分别保存自身的决策事实,终点事件只需引用对应的决策链。
决策链模型
每次工具调用都有独立的 call_id,并关联一条由策略决策节点组成的链。各节点根据实际发生的决策关系建立父子关联;尚未执行的后续阶段无需生成节点。
记录结构
决策节点至少需要包含以下信息:
node_id:当前决策节点的唯一标识。parent_id:直接前置的决策节点;根节点为空。call_id:所属工具调用的标识。layer:产生决策的策略层。decision:该层的决策结果,例如allow、ask、deny或no_match。matched_rule:命中的规则或策略条目标识;未命中时为空。policy_revision:本次决策实际使用的策略版本。
终点事件与时间戳
终点事件至少需要包含以下信息:
event_id:终点事件的唯一标识。call_id:所属工具调用的标识。trace_head_id:作出终止决定的节点;当调用开始分发时,指向最后一个适用的决策节点。event:拒绝时为denied;获准并进入分发时为dispatch_started。timestamp:事件发生的时间。
Subagent
Subagent 沿用现有六层运行时策略。管线顺序不变,策略来源换成子级自己的有效策略。有效策略在创建时由父级有效策略与本次委派的收紧条件共同决定,并写入子会话。Spawn 与 Fork 共用这套继承;二者只在上下文上不同,权限行为相同。
继承
子级的每一项策略都落在父级有效范围之内。委派时附带的过滤、网络开关和沙箱限制只用于进一步收紧。
| 策略 | 子级得到的策略 |
|---|---|
| Work mode | 父级有效能力集合再经本次过滤。以能力集合为准,而不是继承 mode 的枚举值 |
| Network | 父级网络开关,且本次委派可以把它关掉 |
| User rule | 全部祖先规则,父级只能在其上再增加限制。优先级为 deny > ask > allow |
| Tool approval policy | 本次委派单独指定的审批策略,与父级当前策略分开。默认 whitelist_accept,也可改用其他策略 |
| Approval response policy | 固定为 never:审批请求直接拒绝 |
| Sandbox mode | 父级有效沙箱再经本次收紧 |
| 持久化 | 子会话保存完整的委派策略快照 |
创建时先取父级的有效策略,再与本次委派求交,得到子级有效策略。能力取交集,网络在父级允许且本次委派未关闭时才打开,用户规则合并全部祖先,工具审批采用本次单独指定的策略,审批应答固定为直接拒绝,沙箱取父级与本次收紧的交集。随后初始化工具范围、审批应答和沙箱,写入快照,再启动子 Agent。
Spawn 与 Fork
| 创建方式 | 上下文 | 策略 |
|---|---|---|
| Spawn | 全新会话 | 同一套继承 |
| Fork | 带上已完成的对话历史 | 同一套继承 |
持久化与收紧
子会话保存委派当时的完整有效策略,并记下父会话、策略版本和创建时间。快照涵盖能力、工具、网络、用户规则、工具审批、审批应答和沙箱。
运行中父级可以继续收紧子级。收紧立即生效,并提高快照版本;已经在执行的任务同样受新约束。父级事后放宽自己的权限时,子级保持已收紧的范围。子 Agent 冷恢复时读回这份快照。
执行
一次子级工具调用仍按原顺序经过各层,每层读子级的有效策略:能力、网络、继承来的用户规则、独立的工具审批、固定为直接拒绝的审批应答、沙箱,然后执行。
能力在模型侧隐藏未授予的工具,执行器在真正执行前再校验一次。沙箱在执行层强制,包括 shell 路径。由此:
- 父级为
ro时,子级的写入被拒绝。 - 父级关闭网络时,子级保持关闭。
- 祖先规则为
deny时,子级写出的allow仍然拒绝。 - 祖先规则为
ask时,请求进入询问,并因审批应答固定为直接拒绝而结束。 - 子级审批策略本身要求询问时,请求直接拒绝。
- 子级的沙箱保持在父级沙箱之内。
- 父级在运行中收紧时,子级同步收紧;父级恢复原权限时,子级保持收紧后的范围。
- 冷恢复读回原快照。
- Fork 与 Spawn 的权限行为相同。