check_read_only() 支撑只读快速通道,check_permissions() 执行工具自身的安全分析。AgentScope 内置工具覆盖三类检查:
工作目录自动放行始终从属于安全检查:工作目录内的危险操作仍会询问或拒绝。
自定义工具
自定义工具通过实现check_permissions() 添加自己的权限逻辑。如果工具的只读性取决于输入(比如 Bash:ls 是只读,rm 不是),还应该覆写 check_read_only()。
安全检查契约
安全检查(safety check)是工具自己发出、认为太危险而不能被静默放行的 ASK,例如写入~/.bashrc 的 Write、执行 rm -rf / 的 Bash。在决策上设置 bypass_immune=True,即使命中了允许规则或处于会自动放行的模式,引擎也仍然把 ASK 呈现给用户。
适用于「一次错误调用就会造成用户几乎肯定不想发生的破坏」的场景。例如:自定义的 DeployTool 在目标是 prod-* 时返回 bypass_immune=True,那么为预发环境配置的 allow_rules["DeployTool"] = ["*"] 也不会意外授权生产部署。
各模式下的具体处理:
普通 ASK(
bypass_immune=False,默认值)可以被 DEFAULT / ACCEPT_EDITS 下命中的允许规则覆盖,在 BYPASS 下被兜底放行。
只读命令
常见的只读 bash 命令在没有任何规则的情况下也会被自动放行,在所有模式(包括DEFAULT)下都生效。复合命令(&&、||、;、|)只有在所有子命令都只读时才视为只读。输出重定向(>、>>)会让命令立即失去只读属性。被标记为命令注入风险的命令(如 ls $(rm -rf /))不视为只读,因此不会在此自动放行,而是落到工具的安全检查上。
完整只读命令列表
完整只读命令列表