给 Agent 接工具前,先列清它能读什么、改什么、替谁操作

把账号主体、资源范围、动作和撤回责任写进接入清单,未知权限先核实再连接。

Buda Team
← 返回博客
给 Agent 接工具前,先列清它能读什么、改什么、替谁操作

采购主管只想让Agent比较三家供应商的报价。接入时却用了一个既能读报价、又能改订单和发邮件的账号。提示词写着“只交草稿”,系统凭据仍然拥有更大的权限。

这个虚构场景里,缺的不是最后一遍检查,而是接入前的AI Agent权限清单:谁的账号、能看哪些数据、能做哪些动作、谁来撤回。结果审核能发现一份比较稿写错,却不能自动消除背后的写入能力。

先把“整理采购资料”拆成动作

先确定任务:只读指定三份脱敏报价,交一份比较草稿。价格缺项保留未知,不联系供应商、不修改采购系统、不发送邮件、不付款。

不要只写“采购工具已连接”。把动作拆开,才能发现任务需要与账号实际能力之间的距离。

动作本次业务要求接入前必须确认
read读指定三份报价副本账号是否还能看到其他供应商或合同
draft在指定输出目录写比较稿输出是否共享,是否含无关客户信息
write不改正式采购记录provider端scope或角色是否真的排除写入
send不发邮件或通知邮件登录、API权限是否仍可发送
delete不删除任何源文件文件/工具权限是否允许删除

这是一份拟定的任务权限矩阵,不是Buda原生逐工具ACL的界面,也不是已执行拒绝写入测试。业务上“不允许”和系统上“做不到”必须分栏。

采购任务所需的读取与草稿动作,对照仍需核实的修改、发送与删除能力

清单里写账号,不写密钥

access-inventory.csv至少保留:任务ID、工具、实际账号主体、资源范围、允许动作、实际角色或scope、认证位置、授予人、复核人、到期时间或撤回责任、核验依据与状态。

任务:Q-01,三份报价比较(虚构)
主体:采购测试账号的可识别名称,不使用个人全权账号
资源:三份已授权报价副本;不含其他采购记录
业务动作:read指定输入;draft指定本地输出
实际scope:unknown,待账号管理员在provider控制台核实
认证位置:Agent变量名称或登录位置,不记录值
负责人:账号管理员授予;采购主管复核范围
接入状态:等待scope确认,不连接生产凭据

如果工具背后使用的是共享账号,应列清共享者与责任人;显示名称不能证明实际认证主体。浏览器登录、API token和另一个集成可能分别代表不同身份,不能只登记其中一个就视为盘点完成。

unknown-scopes.md把不知道的权限变成具体待办:哪个系统、哪个账号、缺什么证据、由谁核实、核实前暂停哪一步。一次读取成功,只证明这次读取发生了,不能证明账号没有写权限。

masked只是显示方式,不是进程隔离

Buda环境变量文档说明:变量属于单个Agent,但会注入它的云端计算机,可供Terminal、脚本、开发服务器以及该Agent运行的进程读取,并跨sandbox重启保留。

变量在UI里被遮住,不意味着脚本无法读取它。不要在聊天里贴值,不把真实token写进清单,不用打印敏感变量的命令“证明连接正常”。用管理员可见的角色配置、scope说明和非敏感状态验证;不要为了核权限把凭据复制到报告或截图里。

同样,单个Agent的范围不等于单个Session的范围。新Session把对话上下文分开,不会把同一Agent的文件和环境变量自动分开。共享Agent如果需要真正不同的数据或凭据范围,应先由管理员设计独立身份与权限,而不是仅开新对话。

Drive的官方区别是Agent Drive私属于一个Agent,Space Drive用于空间共享。文件夹叫approved只是名称,不会施加ACL;放进共享位置之前,仍要确认谁能访问。

Skill规则、工具清单和系统权限是三件事

安装与管理Skill可以查看完整SKILL.md、来源和范围。Skill说明如何工作;任务里“不要发送”也是行为要求。它们都不能替代连接系统里的OAuth scope、角色和资源授权。

一个Skill列出某工具,不等于已经取得该系统认证;一个账号已认证,也不等于只获得本次任务需要的动作。先让管理员在provider端核实权限,再检查Skill是否按这些边界工作。不要从manifest的工具名称推断平台提供任意细粒度权限开关。

如果provider无法细分读写,优先采用获准的脱敏导出或专用低权限测试账号,而不是把全权账号接上后依赖提示词自律。业务确实需要写入时,应另立动作范围、复核和执行授权。

接入验收要验证“允许”和“拒绝”两面

以下是建议验收,不是已运行的安全测试。由账号管理员选无敏感数据的测试环境,明确可接受的测试动作,再安排执行:

  1. 用指定测试身份读取允许的样本,确认来源和范围。
  2. 选应被拒绝的写动作,在不会影响真实记录的受控对象上验证provider拒绝;若无法安全测试,标为未验证,不去碰生产数据。
  3. 核对其他路径:浏览器登录或另一token是否仍能写。一个路径拒绝不代表所有路径拒绝。
  4. 记录测试身份、资源、配置依据和结果,不记录secret。失败就停在接入环节,不先安排周期任务。

“不打印敏感值”与“权限正确”也不是一回事:前者减少暴露,后者需要实际授权依据。两项都要做,但不能互相替代。

任务指令、工具可见性和provider权限分别回答不同问题

撤回不止是关闭对话

revocation-checklist.md列出provider token或角色、Agent环境变量、浏览器登录与会话、已分发共享副本各自的责任人和核实方式。先确认需要撤回哪项,再按对应系统操作并保留确认记录。

关闭Session或取消任务,不等于provider凭据失效。删除环境变量也不应被当成已结束的进程、浏览器登录和所有副本都已清除的证明。共享副本的保留或清理要按组织规则另行处理;不要让Agent自行删除文件来制造“已撤回”的表象。

三个产物,让管理员能接手

先在Buda工作区准备无secret的清单、未知项、撤回检查表。可以要求:

只根据指定工具说明和管理员提供的非敏感配置整理接入清单。分开任务允许动作与实际账号权限,未知项不推断。输出access-inventory.csv、unknown-scopes.md、revocation-checklist.md。不读取或打印密钥,不连接新生产账号,不尝试修改、发送或删除。

主管确认业务范围,管理员确认系统授权,执行者记录受控验收。角色可以由同一人承担,但三个判断不能混在一句“可以用了”里。

不知道scope,还能先试读吗?

先用脱敏文件副本验证方法。正式账号的权限保持unknown,交管理员核实;不要把试读成功升级成接入批准。

共用Agent,开一个新Session就够了吗?

如果只是分开讨论,可以;如果要分开文件、凭据或可操作系统,不够。先核实际身份和资源权限,必要时另设Agent及相应低权限身份。

UI遮住了token,能放心运行任意Skill吗?

不能由masked推出这个结论。阅读Skill全文与来源,核它需要的工具和数据范围;环境内进程可能读取该Agent变量,避免把不需要的凭据放进去。

只要草稿,怎样减少权限?

从授权导出开始,正式系统不接写权限;输出放指定目录。确需实时读取时,先让管理员选择受限账号和资源,再做受控验证。

在Buda AI的Marketplace搜索并安装适用Skill,先核方法,再给权限。最有用的接入清单不是列出Agent“能用多少工具”,而是让每一种能力都有业务理由、实际范围与撤回负责人。