heron
第 7 章

安全与审批模型

7.1 工具档位

档位 含义
allow 直接放行(兜底档)
ask 每次执行前挂起,等人批准
deny 不可用

判定顺序:deny → ask → 兜底 allow。

7.2 谁能用什么(分层工具表)

层 作用 跨 agent
外层 policy/permissions.yaml 的 deny 全局禁令 谁都别想用,子 agent 无法放松
外层 policy/permissions.yaml 的 ask 需要点头 所有 agent 都一样
内层 agent 的 disabled_tools 收窄某一个 agent 只影响它自己
tools: 段的启用 工具存不存在 不开 = 工具根本不存在

★ 两层是分层保存,永不合并 —— 合并就丢掉了「谁在外层」,而那是子 agent 不能越权加回被禁工具的唯一保证。

7.3 启用的内置工具

工具 干什么
ls / read_file / glob / grep 读项目文件(默认放行)
write_file / edit_file 改文件(默认要审批)
execute 执行命令(默认要审批)
task 委派给子 agent(DeepAgent 提供)
write_todos 任务清单(DeepAgent 提供)
skill 调用技能(默认放行)
kb_search / kb_index 知识库(需配 kb.corpus)
request_get / request_post / request_put / request_delete HTTP(需配 tools.http)
duckduckgo_search 网络搜索(需配 tools.web_search)
wikipedia_search 维基检索(需配 tools.wikipedia)

想知道某个 agent 实际拿到了哪些工具、每个是什么档位,看自省接口 (GET /v2/agents/:agentId 的 effectiveTools)—— 那里给的是装配后的真实结论 (档位、原因、运行期观测到的工具名),不是配置原文。

7.4 审批的几个边界情况

  • 拒绝最好给理由 —— 理由会回灌给模型,它据此改路;没有理由的拒绝对模型等于凭空断路。 ★ 但这不是硬约束:服务端允许空理由,界面也不拦(留空照样能拒)。
  • 多个审批一起答 —— 逐个答的话,答完第一个其余会带着新 id 重新中断。
  • 重启后审批会丢 —— 启动巡检会发现「有 checkpoint 但没有 pending 审批」的会话, 日志里会报 ownerless,那些会话无法恢复,需要重新提问。