审批与 ChangePlan
审批和 ChangePlan 是需要用户审阅动作的安全路径。它们让 Anyy 在执行高风险工具调用或会改变状态的计划前暂停,持久化待决决策,并通过可信路径重放已批准动作。
什么时候需要审批
审批取决于有效工具描述符和工具自身行为:
| 场景 | 行为 |
|---|---|
| 直接读取 | 通常无需审批即可运行。 |
| 低风险写入并审计 | 描述符要求时会执行并写入审计记录。 |
| 连接器变更 | 在发送或修改外部记录前返回 needs_approval。 |
| 桌面控制 | computer_use 对 capture grant 和变更动作请求审批。 |
| Host/config/root-capable 动作 | 执行前使用确认或 ChangePlan 策略。 |
| 必须 force 的动作 | 只提供 force_approve 和 deny。 |
工具集只控制可见性。可见工具仍然保留自己的风险、审批策略、执行策略、输出预算、超时和审计类别。
ChangePlan 生命周期
Created
状态为 change_plan_created 的工具结果会创建 pending ChangePlan 和审批 prompt。Plan 保存:
| 字段 | 含义 |
|---|---|
title | 人类可读的计划名称。 |
risk | 风险类别,例如 config-high、dangerous 或 force-required。 |
execution_policy | change_plan 或 force_change_plan。 |
preconditions | 执行前应满足的条件。 |
current_state | 用于审阅的结构化当前状态快照。 |
proposed_changes | 计划变更。 |
commands | 要执行的命令或操作。 |
validation_steps | 执行后的验证步骤。 |
rollback_steps / rollback_mode | 可用时的恢复说明。 |
expected_impact | 面向用户的影响摘要。 |
plan_hash | 执行已批准计划前会校验的 hash。 |
Pending ChangePlan 默认 10 分钟过期。
Approved
批准 prompt 会把 ChangePlan 标记为 approved。Force approval 会标记为 force_approved,并写入 force-path 审计事件。
Anyy 会检查审批 prompt 是否实际提供了该决策选项。如果 prompt 只提供 force_approve,可信决策路径会把普通 approve 升级为 force_approve。
Executed
执行前,Anyy 会验证:
| 检查 | 目的 |
|---|---|
| Status | Plan 已按要求 approved 或 force-approved。 |
| Expiry | 非 force plan 尚未过期。 |
| Plan hash | 已批准 plan 与待执行 plan 仍然一致。 |
| Policy | force_change_plan plan 在执行前已经 force-approved。 |
执行可以把 plan 标记为 executing、verified、failed 或 rolled_back。
审批入口
审批路径表示为 tui、cli、weixin 或 dashboard。可用路径取决于创建审批的会话 surface 和运行时路径。
审批 prompt 包含:
| 字段 | 含义 |
|---|---|
kind | tool_call 或 change_plan。 |
session_id / turn_id | 重放和展示范围。 |
tool_call_id | 适用时的原始工具调用。 |
change_plan_id | ChangePlan 审批的 plan id。 |
title、summary、risk | 审阅文本。 |
options | 允许的决策。 |
expires_at | 审批过期时间。 |
定时审批
Cron 创建的 ChangePlan 可以携带定时元数据,例如 cron_job_id、cron_run_id、origin session、channel binding、role、actor 和 workspace。存在这些上下文时,审批摘要会包含定时 due time。
审计轨迹
审批和 ChangePlan 会写入审计事件:
| 事件 | 类别 |
|---|---|
| Prompt 决策 | approval |
| Force approval | force_path |
| Plan created/updated/approved/executing/verified/failed/rolled back | change_plan |
工具重放也会记录审批关联元数据,因此审计轨迹可以把已批准执行关联回 approval id、tool call id 和 ChangePlan id。
Dashboard Approvals 页面
Dashboard 的 Approvals 页面通过 approval.list RPC 列出 open 和 decided approvals。它可以从浏览器会话批准或拒绝 open prompt。
该页面刻意只聚焦审批决策。详细工具日志、plan 内部结构和会话 transcript 仍位于对应的运行时、审计或会话视图。