跳转到内容

审批

当策略判定为询问时,智能体的调用会一直等到有人做出决定。在此之前什么都不会执行,之后也不会执行任何其他内容:bssh 只执行被批准的内容。

级别 在哪里决定 适用于
自动 无需决定:策略允许 读取操作,以及临时授权覆盖的调用
在智能体客户端中 智能体自己的确认对话框 approval.in_client 中所列标签主机上的低风险变更
带外 桌面应用,或终端中的 bssh ai approve 其余所有变更
双人 团队中两名不同的管理员 approval.two_person 中所列标签的主机(Teams)

带外渠道才是值得信赖的:智能体进程无法触及它。在客户端中确认更快,适合你正在盯着智能体的时候;但如果客户端被设置为自动批准一切,它也会批准这类请求。因此该级别在你列出标签之前不会启用,从不适用于破坏性、提权或网络类变更,并且会被记录为在客户端中确认。如果客户端无法显示确认对话框,请求会转为带外。

修复很少只需要一条命令。智能体通过 propose_change 发送一个变更计划:

  • 步骤:要执行的命令、以统一 diff 表示的文件修改、服务操作;
  • 验证:如何确认修复生效,例如 curl -fsS localhost/health;
  • 回滚:如何撤销。

在询问任何人之前,策略会先判定每个步骤;只要有一步被拒绝,整个计划就被拒绝。你只需批准一次计划。批准只针对这个确切的计划:apply_change 会拒绝事后被改动的计划,按顺序执行步骤,在第一次失败时停止,然后执行验证步骤。涉及多台主机的计划会先在第一台上执行并验证,然后才会处理其余主机。

被修改的文件在写入前会先备份,主机上和你的电脑上各一份。undo 会恢复这些文件并执行回滚步骤;它和其他变更一样需要审批。

智能体对变更原因的说明会标明出自智能体。请阅读命令和 diff:那才是将要执行的内容。

bssh ai approve # 选择一个待审批请求,查看完整内容,做出决定
bssh ai approve --list # 只列出等待中的请求
bssh ai approve <id> --deny --reason "发布冻结期间不做变更"

只需输入 id 的前缀。智能体会收到决定,拒绝时还会附带你的理由,以便它尝试其他做法。

桌面应用有一个 AI 区域,显示每个正在运行的智能体、其调用及判定的时间线,以及一个停止按钮。新请求会弹出审批对话框并发出通知:命令和主机、分析结果,对于计划还会显示每个步骤及其 diff、验证和回滚步骤,并把智能体的理由与事实分开显示。

一次真实 opencode 运行在 web-1 上的调用,在桌面应用中显示:读取自动放行,清理计划等待审批对话框。

一次又一次地批准同类调用,会让人养成不看就批准的习惯。临时授权在有限时间内放行一类调用:

bssh ai approve <id> --grant 30

这会批准该请求,并在 30 分钟内放行同一主机、同一目标上的同一工具调用,不再询问。bssh ai status 会列出有效的临时授权。它们和审批一样会被记录。

请求在 approval_timeout_secs(默认 300 秒)内无人回应即被拒绝。智能体会被告知请求已过期。

bssh ai status # 运行中的智能体、待审批请求、临时授权
bssh ai stop # 结束唯一的运行,或指定一个,或 --all
bssh ai log # 最近的运行
bssh ai log <run> --report # 变更内容,含 diff、审批和回滚点
bssh ai replay <run> # 回放其命令录制的输出