dcode 如何配置 Manual、Auto 与 YOLO 审批模式控制代理副作用?
dcode 如何配置 Manual、Auto 与 YOLO 审批模式控制代理副作用【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents在运行deepagents-code命令名dcode会话时代理会请求执行executeshell、写/改/删文件、Web 工具、task、异步子代理控制以及非只读 MCP 工具等带副作用的调用。审批模式Approval Mode就是用来控制这些调用是逐个人工批准、交给分类器自动审查、还是直接放行的按会话策略。本文介绍如何在 dcode 中通过快捷键、斜杠命令和启动参数在 Manual、Auto、YOLO 三种模式间切换以及如何在无人值守场景下配合 shell 白名单限定代理能执行的命令。适用对象是本地 TUI、ACP 模式和 headless 模式的使用者所有模式行为来自仓库中 Permissions and Human Approval 概念文档与 dcode 会话工作流。三种模式分别控制什么dcode 的ApprovalMode是一个每会话策略取值manual、auto、yolo三者对被审批门控的工具调用即上面列出的副作用工具的处理方式不同模式行为manual每次门控调用都暂停等待人工 approve / rejectauto对符合条件的 graph 启用分类器classifier辅助审查分类器允许的调用继续执行策略拒绝或分类器不可用的调用变成错误消息require_human的调用升级为人审批提示yolo绕过审批门控门控调用不经人工审查直接执行两个关键的默认与边界失败关闭fail closed无效、非字符串的持久化值一律强制回退为manual审批模式记录存于每线程的 LangGraph Store 记录命名空间(deepagents_code, approval_mode)键为线程 ID 的 SHA-256 哈希。Store 缺失、记录损坏、键错误或读取异常都会返回None调用方按 Manual 处理——控制状态丢失时宁可多问人也不会静默变成自主执行。Auto 不是无差别放行清单它先跑确定性策略再做分类器审查其确定性 shell 放行范围刻意收窄只允许固定仓库命令或已配置的命令条目且要先拒绝 shell 控制语法和宽泛的可执行文件/通配条目。沙箱会话不支持 Auto基于远程 sandbox 的会话中 Auto 不可用模式循环中会跳过它。在会话中切换模式ShiftTab 与斜杠命令在交互 TUI 中最直接的切换方式是ShiftTab循环顺序为 Manual → Auto → YOLO → Manual规则如下只有当 Auto 可用时才包含 Auto沙箱会话中会被省略只有当 YOLO 切换器启用时才包含 YOLO由startup.yolo_switcher配置控制见下文退出 YOLO 时固定回到 Manual而不是循环回 YOLO 之前的模式。首次通过 ShiftTab 进入 YOLO 时会弹出与--yolo相同的本地确认框acknowledgement需要确认当前策略版本的无审查模式风险警告后YOLO 才会真正生效确认持久化在安装私有的approval.json状态文件中按策略版本当前版本2026-07-14一次性记录。如果确认写入 Store 失败会话停留在原模式并提示YOLO could not be persisted; remaining in the previous mode.。除快捷键外dcode 提供对应的斜杠命令效果与 ShiftTab 切换器一致命令作用/manual切换到 Manual 审批模式/auto切换到 Auto 审批模式或管理其分类器模型/yolo切换到 YOLO 审批模式无审查沙箱会话中输入/auto会被拒绝/yolo同样受startup.yolo_switcher策略约束并触发首次确认。命令一览可参见 COMMANDS.md。用启动参数指定初始模式两种模式也可以通过命令行参数在启动时就确定参数定义见 main.py# 启动本地 TUI 或 ACP 服务器并启用分类器辅助的 Auto 模式 # headless 模式下该参数被忽略并给出警告 dcode -y # 在一次性本地风险确认后以 YOLO无审查运行门控动作 # 适用于交互 TUI 或 ACP 模式headless 模式下被忽略并警告 dcode --yolo两点注意-y/--auto-approve与--yolo属于同一个互斥参数组一次只能给其一两个参数在 headless 模式dcode -n ...下都会被忽略并警告headless 的审批控制走下面一条路径——shell 白名单。禁用 YOLO 切换器startup.yolo_switcher如果组织不希望交互式会话能进入无审查模式可以关闭 YOLO 切换器条目。该开关的解析见 config.py 的is_yolo_switcher_enabled()配置项为startup.yolo_switcher默认启用在config.toml中设为假值即可让团队分发关闭策略也可用环境变量DEEPAGENTS_CODE_YOLO_SWITCHER设为0、false、no等假值说明见 _env_vars.py。关闭后的效果ShiftTab 循环只剩 Manual或 Manual/Auto但已经通过--yolo启动进入 YOLO 的会话仍可用 ShiftTab 退出退出后回到 Manual。Headless 场景用 shell 白名单约束副作用headless 模式例如dcode -n run the focused tests --max-turns 8 --timeout 600每次进程都会创建新的 UUID7 线程不进入交互审批。此时控制副作用的主要手段是-S/--shell-allow-list# 仅允许逗号分隔的指定命令自动执行 dcode -n run the focused tests -S uv run,git status # 使用内置的安全默认命令列表 dcode -n run the focused tests -S recommended # 允许任意命令等价于不受限 shell需谨慎 dcode -n run the focused tests -S all行为规则见 permissions-hitl.md 与 run-dcode-session.md未提供白名单时headless 下 shell 访问直接禁用提供限制性列表后ShellAllowListMiddleware在执行前检查execute调用白名单外的命令直接返回错误ToolMessage而不是走中断/恢复流程白名单为空是非法输入allSHELL_ALLOW_ALL哨兵值不能与具体命令混用且非交互场景若使用不受限 shell应改用auto_approveTrue它会禁用所有 HITL 中断。验证当前处于哪种模式状态栏YOLO 激活期间状态栏有持久的YOLO指示器同时会弹出YOLO is active: gated actions run without review.提示。该提示可通过/notifications或把yolo加入[warnings].suppress静音但静音只是外观性的——进入 YOLO 仍需显式确认状态栏指示器会一直存在这是老用户静音提示后唯一的会话内信号。行为验证让代理触发一个门控调用例如执行一条 shell 命令。Manual 下会弹出审批面板等待 approve/rejectAuto 下分类器允许的调用直接继续、被拒绝的变成错误消息、require_human的调用升级为人工提示YOLO 下无暂停直接执行。追踪元数据YOLO 激活时运行会在 trace 元数据中记录dcode_auto_approveTrue可在追踪系统中筛出未经 HITL 审批就执行了工具的运行见 config.py 的流配置说明。失败关闭验证如果 Store 中该线程的审批模式记录丢失或损坏下一次读取会按 Manual 处理并记录告警日志而不是回到 Auto/YOLO——这是设计行为不属于故障。限制与边界审批模式只门控模型请求的工具调用不门控启动时对项目文件的读取工作目录本身是信任边界不要在宿主机上直接跑不受信任的 checkout需要主机隔离时应使用远程 sandbox。Auto 与 YOLO 都不可用于 sandbox-backed 会话Auto 被明确排除沙箱中 YOLO 循环条目也会被省略的说明只涉及 Auto 的资格判断YOLO 条目由startup.yolo_switcher单独控制。ask_user工具只用于提问不是审批门控不能拿它当审批替代。模式状态是每线程的切换影响当前会话线程其他线程各自维持自己的记录。进一步阅读Permissions and Human Approval、Run a dcode Session、config.py 中的is_yolo_switcher_enabled()与 approval_mode.py 中的模式持久化实现。【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考