ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

dcode 无头模式如何限制 Shell 命令并设置轮次与超时?

dcode 无头模式如何限制 Shell 命令并设置轮次与超时? dcode 无头模式如何限制 Shell 命令并设置轮次与超时【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents在 deepagents 项目中deepagents-codeCLI 命令dcode提供三种启动形态交互式 TUI、一次性任务的无头headless客户端以及 ACP 服务器。其中无头模式面向脚本化和 CI 场景用dcode -n 任务描述提交一个有边界的任务跑完即退出。在 CI 或定时脚本里跑 agent 时你通常要解决两件事限制 agent 可以执行哪些 Shell 命令以及给执行过程加上轮次和墙钟时间上限防止任务失控。本文基于 无头会话工作流文档 和 CLI 参数实现 说明这三项配置的具体用法和验证方式。准备安装并确认无头模式入口安装方式见 libs/code/README.md官方安装脚本curl -LsSf https://langch.in/dcode | bash dcode安装器自带 OpenAI、Anthropic 和 Gemini 三个 provider其他 provider 通过环境变量DEEPAGENTS_CODE_EXTRAS选择附加包。无头模式的核心入口是-n/--non-interactive参数其帮助文案明确写着执行单个任务非交互式运行并退出且“shell disabled unless --shell-allow-list is set”未设置 Shell 白名单时 Shell 被禁用。所有无头专用的输出、轮次、超时和 rubric 控制都要求任务存在即必须通过-n或管道传入的 stdin 提供任务--max-turns、--timeout的帮助文本均标注 “Requires -n or piped stdin”。管道 stdin 有 10 MiB 上限。一次最小化的无头运行形如来自工作流文档的示例dcode -n run the focused tests --max-turns 8 --timeout 600注意工作目录是信任边界项目产物在任何审批面板存在之前就会被读取审批只针对模型请求的工具调用不针对启动时的读取。文档明确提示不要在宿主机上使用不受信任的 checkout需要宿主隔离时应使用远程 sandbox无--sandbox即本地执行。用 --shell-allow-list 限制 Shell 命令无头模式下Shell 命令的开关与放行范围由-S/--shell-allow-list一个参数控制。无头执行模块的说明 给出了三种取值对应的行为取值Shell 行为其他工具不设置Shell 禁用所有非 Shell 工具调用自动批准recommended或显式逗号分隔列表Shell 启用命令对照白名单校验非 Shell 工具无条件批准allShell 启用任意命令放行所有工具自动批准--shell-allow-list的 CLI 帮助说明其接受三类值逗号分隔的命令列表、recommended安全默认集、或all允许任意命令且同时适用于-n无头模式和交互模式。常见写法# 只放行只读/查询类命令 dcode -n summarize the logs --shell-allow-list ls,cat,grep # 使用内置的安全默认集 dcode -n check the test output --shell-allow-list recommended解析上有两条硬约束来自 配置实现 与 参数测试all是独占值不能与其他命令混用--shell-allow-list all,ls会被拒绝管理配置managed config优先级高于该 CLI 参数可以覆盖它对应的环境变量是DEEPAGENTS_SHELL_ALLOW_LIST。不设置白名单时请求 Shell 命令会被拒绝运行输出中会出现 “without a --shell-allow-list. Use --shell-allow-list to ...” 的提示这是无头模式默认最安全形态的直接体现。设置轮次上限与墙钟超时--max-turns和--timeout是两条独立的护栏帮助文本的定义如下--max-turns N Maximum number of agentic turns before stopping (must be 1). Overrides the internal safety default. Useful for CI/CD pipelines to prevent runaway agents. --timeout SECONDS Hard wall-clock timeout in seconds. The agent is cancelled and the process exits with code 124 if the timeout is reached. Complements --max-turns (turn count) with a time-based limit.两者都要求-n或管道 stdin。--max-turns是 agentic 轮次计数最小为 1省略时由内部安全默认值兜底显式给出时覆盖该默认值--timeout是墙钟秒数到点后 agent 被取消、进程以退出码 124 结束。工作流文档确认轮次用尽与墙钟超时都用退出码 124与 GNUtimeout的约定一致non_interactive 实现 中注释写明该行为是 “matching GNUtimeout”。如果漏掉任务参数CLI 会直接报错并给出修正示例这些示例命令来自 main.py 的帮助文案dcode -n refactor auth module --max-turns 5 dcode -n run the test suite --timeout 120组合使用时两条护栏各自独立生效任务在第 8 轮结束就正常退出不必等满 600 秒反过来哪怕只跑了 3 轮只要超过--timeout也会被取消并退出 124。验证用退出码区分正常完成与限流退出无头模式结束后脚本层可用退出码做判断文档中明确给出的信号有退出码 124--timeout墙钟到期或--max-turns轮次预算用尽。超轮次的错误消息形如Exceeded 1 agentic turns (--max-turns 1).并提示 “Increase --max-turns or break the task into smaller steps.”该消息文案见 non_interactive 实现 及其单元测试--max-turns 1为测试用最小值实际任务请按需放宽。退出码 78管理配置无法强制执行时的 fail-closed 行为此时常规操作全部失败但 help 与config、doctor、auth path诊断命令仍然可用。在 CI 中把 124 当作“任务被限流中断”的信号来告警或重试是文档语义的直接落点124 表示任务未完成而正常跑完的任务以非 124 码结束。边界与已知限制白名单不是强边界。威胁模型 明确记录白名单匹配只检查命令的首个 token因此配置了白名单的解释器/包装器仍可能绕过检查条目 T13--shell-allow-list all则会跳过全部模式检查非交互模式下 LLM 请求的任意命令都会无条件执行。文档给出的判断是字符串白名单收窄但不能替代操作系统级沙箱需要更强隔离时按工作流文档走远程 sandbox 路线。无头模式不复用会话。每次无头进程都创建全新的 UUID7 线程不支持从已有线程恢复这与 TUI 的-r恢复机制不同。交互审批在无头模式不可用。无头模式没有人工审批面板recommended/显式列表模式下未列入白名单的 Shell 命令会被拒绝而不是弹审批非 Shell工具则无条件自动批准因此白名单是 Shell 侧唯一的实际闸门。如果还需要在无头运行中加载仓库级 hooks需显式加--trust-project-hooks帮助文本标注这是 headless/CI 场景加载项目 hooks 的前置条件输出接入管道时可用--quiet让 stdout 只输出 agent 响应文本。【免费下载链接】deepagentsThe batteries-included agent harness.项目地址: https://gitcode.com/GitHub_Trending/de/deepagents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表