工具批准不能信客户端历史
Agent 产品里的“工具批准”不应该被当成一条普通 UI 消息保存后原样回放;它更像一次短期授权票据。Vercel AI SDK 7.0.0 修复的 WorkflowAgent 问题很典型:服务端从客户端传回的 messages 历史里重建已批准 tool call 时,如果不重新校验输入 schema、不重新计算 approval policy、不验 HMAC,恶意客户端就可以伪造一个“已批准”的 assistant tool-call part,让服务端执行攻击者参数。
这件事的工程含义是:approval response 和 tool-call history 不能混成同一种信任等级。消息历史可以帮助恢复 UI 状态,但不能自动恢复执行权限。真正可执行的批准至少要重新绑定三件事:原始 tool call 的稳定 id/签名、批准时看到的输入、当前服务端的工具 schema 与策略。只要其中任一项变了,就应该回到“待批准”或直接拒绝,而不是继续走 resume。
对 OPC 或 Agent Engineer 来说,这会影响所有“人类点过同意后继续跑”的场景:浏览器登录、发消息、改文件、调用内部 API、审批工作流。一个安全的实现通常会把 approval 存成服务端票据,而不是只相信前端消息;恢复时按 call_id 查票据,再重放 schema validation、policy resolution 和租户/actor scope 检查。前端可以展示“已批准”,但不能成为批准事实本身。
可以检查一下你正在设计的 Agent 审批链路:如果用户刷新页面、换设备、或客户端自己提交一段历史,服务端到底是在“验证一张批准票据”,还是在“相信一段看起来像批准的聊天记录”?