Shell 工具横评报告

8 个主流 Agent Harness 的命令执行模型、安全沙箱、审批、持久化、管道策略、超时与输出截断对比 —— 面向 harness 技术 leader 的设计决策参考
调研对象:codex · dsh · gemini-cli · opencode · pi · mcode · ZCode · goose(Kiro 闭源,仅从公开资料标注)

1. 执行摘要:shell 工具设计的五个核心张力

Shell 工具是 agent 与宿主机之间权柄最大的接口。它同时是能力面(一切进程、文件、网络操作的入口)、 攻击面(提示注入可转化为任意代码执行)和体验面(超时、截断、后台化决定 agent 能否完成真实工程任务)。 8 个 harness 的源码显示,行业已经收敛出几组明确的设计张力:

张力一:隔离强度 vs 命令保真度

张力二:执行隔离 vs 状态连续性

张力三:命令整体执行 vs 逐段语义分析

张力四:审批摩擦 vs 自主性

张力五:输出保真 vs 上下文经济

2. 维度对比总矩阵

维度codexdshgemini-cliopencodepimcodeZCodegoose
执行入口 unified_exec 工具族(exec_command / write_stdin / terminal_session) ShellExecutor 抽象 + tool-bash / tool-bash-persistent ShellTool(node-pty) shell 工具 + Shell 服务 bash / powershell 工具 + 通用 execCommand bash 工具(pi 派生)+ 后台 bash 执行器 Bash 工具 + ExecutionPort 抽象 developer 扩展的 shell 工具
默认调用模型 新进程/次 + 交互进程池 新进程/次(持久版为 PTY/agent) 新 PTY/次 新进程/次 新进程树/次 新进程/次 新进程/次 新进程/次
shell 选择 自动探测($SHELL),模型可传 shell 覆盖 配置化(bash/pwsh 分工具) 系统 shell ShellSelect:/etc/shells → git-bash → pwsh/cmd 配置化 shellPath getShellConfig(同 pi) $SHELL → 固定 posix 目录 → Windows Git Bash 路径 unix_shell() / GOOSE_SHELL 覆盖
login shell -lc(可 login:false 关) 否 PTY 默认行为 否 否(config 可配) 否 默认 login,snapshot 存在时退化 否
OS 沙箱 seatbelt / landlock+bwrap / win restricted-token bwrap→landlock / seatbelt / windows-acl,fail-closed seatbelt / bwrap+seccomp / win helper exe 无 无(BashOperations 可远程委派) SRT:seatbelt / srt-win(WFP) / bwrap+seccomp 已撤除(字段保留,仅遥测) 无
沙箱文件模式 read-only / workspace-write / danger read-only / workspace-write / danger-full-access workspace root + 写白名单 + 全局只读目录 —(命令层权限替代) —(权限层替代) read_only / workspace_write / delete_guard / full_access —(已撤除) —(权限层替代)
网络控制 网络策略 + proxy + 按域规则 沙箱内网络按 mode network allowlist + MITM proxy — — deny / allow_all + 凭证屏蔽 — —
审批模型 AskForApproval 4 态 + execpolicy 前缀规则 + Guardian LLM 审查 + 危险命令检测 默认模式 + sandbox_permissions 升级(强制 justification)+ ctx.approval TOML 模式(plan/default/accepting_edits)+ approvedTools + 命令 allowlist 通配符规则集(默认 ask)+ scanner 精确到子命令 + 只读自动放行 无内建审批(宿主可插) AST 静态管线:fast-allow 白名单 + slow-scan + 危险模式硬拒 + LLM 复核 权限服务(只读自动放行、命令规则)+ prepareApproval 钩子(单向收窄) 无内建审批
命令解析 tree-sitter bash → Read/ListFiles/Search/Unknown(用于遥测与权限收窄) 无(整体 bash -c) stripShellWrapper + parseCommandDetails(首词 + 子命令) 自研 ShellParse scanner(posix/bash/powershell)+ ARITY 表 + opaque 检测 无 bash-ast + 命令拆分 + heredoc 剥离 + wrapper 展开 unbash AST → 逐段 readonly 判定 无(首词级 isDangerousCommand 无)
持久化 shell 状态 进程池(≤64)+ write_stdin 交互;shell snapshot 回放 持久 PTY(每 agent 一个,300s/命令,16k 字符) 无状态;后台进程表 + PID 无状态;shellID 输出文件保留 7 天 无状态;输出临时文件 无状态;后台任务化 无状态;后台生命周期(显式/超时自动) 无状态(drain 500ms 例外)
后台/长任务 yield_time_ms(默认 10s)+ 后台终态 5min + 流式输出 run_in_background + job registry;promoteOnTimeout is_background + 专属工具 list/read_background_output + 日志文件 background 参数 + jobs + 完成合成消息(禁止轮询提示) 无(超时即终止进程树) soft-yield 60s 转 task_id;显式后台 显式 + auto_on_timeout(sleep 除外) 无(前台阻塞至 drain)
默认超时 yield 10s / 后台 300s 120s(上限 600s)/ 持久 300s 非活跃 300s(有输出即重置) 前台 120s / 后台无超时 无默认(模型必选) 120s / 300s / 3600s 三模式 120s(上限 600s) 300s
输出截断 10k tokens / 1 MiB 硬上限 64 KB/流 + 64 MiB spill 文件 直播 100k 字符 + 缓冲 16 MB 2000 行 / 50 KiB,尾部保留 + 文件路径 2000 行 / 50 KB,尾部保留 + 临时文件路径 head_tail 预览 + 完整落盘 inline 30 KB(头尾保留)+ 落盘 5 GiB 软上限 2000 行 / 50 KB → 预览 50 行 / 10 KB + 临时文件
PTY 使用 是(unified exec 核心) 仅持久 bash 用终端 seam 是(node-pty) 是(daemon 持久 PTY,供实验终端 API) 否(stdio 管道) 否(stdio 管道) 是(node adapter spawn) 否(stdio + 标签流)
跨平台处理 三平台原生沙箱 + PowerShell/cmd 派生 三平台 runner 链 + pwsh-sandbox 包 三平台沙箱 manager ShellSelect 平台分支 cross-spawn + powershell 工具 同 pi(继承) Git Bash 路径 + cmd/pwsh dialect GOOSE_SHELL + cmd 多行拒绝

3. 各 Harness 详述

3.1 codex(OpenAI,Rust)—— 进程池 + snapshot 的工业级方案

机制

设计影响面

codex-rs/core/src/tools/handlers/unified_exec.rs:67 · core/src/unified_exec/mod.rs:71-82 · core/src/shell.rs:24 · shell-command/src/shell_snapshot.rs · sandboxing/src/denial.rs · protocol/src/protocol.rs:1163 · execpolicy/src/rule.rs · shell-command/src/command_safety/is_dangerous_command.rs

3.2 dsh(DeepSeek Harness,TypeScript)—— 能力接缝(seam)架构

机制

设计影响面

dsh/packages/shell/shell/src/index.ts:64 · dsh/packages/shell/bash-local/src/index.ts:101-106 · dsh/packages/shell/tool-bash-persistent/src/index.ts:448-471 · dsh/packages/sandbox/sandbox-local/src/index.ts:150-158 · dsh/packages/sandbox/sandbox/src/escalation.ts:42,172 · dsh/packages/shell/shell/src/types.ts(ShellExpiryPolicy)

3.3 gemini-cli(Google,TypeScript)—— 非活跃超时与模式化策略

机制

设计影响面

gemini-cli/packages/core/src/tools/shell.ts:54,605 · packages/core/src/services/shellExecutionService.ts:50,379,1836 · packages/core/src/tools/shellBackgroundTools.ts · packages/core/src/policy/sandboxPolicyManager.ts:46 · packages/core/src/policy/policies/sandbox-default.toml · packages/core/src/sandbox/utils/commandSafety.ts:781

3.4 opencode(SST,TypeScript/Effect)—— 自研 scanner + 规则集权限

机制

设计影响面

opencode/packages/core/src/tool/plugin/shell.ts:21-93 · packages/core/src/shell.ts:33,238 · packages/core/src/shell/parse.ts(scan/ARITY) · packages/core/src/permission.ts:94-98 · packages/core/src/tool-output.ts:13-14 · packages/core/src/shell/select.ts

3.5 pi(earendil-works,TypeScript)—— 极简无沙箱 + 可扩展执行面

机制

设计影响面

pi/packages/coding-agent/src/core/tools/bash.ts:18-36,86-120 · packages/coding-agent/src/core/tools/truncate.ts:11-12 · packages/coding-agent/src/core/exec.ts · packages/coding-agent/src/extensions/codemode/execute.ts:52-53 · packages/coding-agent/src/core/agent-session.ts:3717-3728(shellCommandPrefix)

3.6 mcode(minimax/mavis,TypeScript)—— 静态分析权限管线 + 可恢复删除

机制

设计影响面

mcode/packages/agent-tools/src/desktop/builtin-defs.ts:106 · packages/agent-tools/src/desktop/local-bash-timing.ts · packages/agent-modules/permission/src/tools/bash-safe-first-words.ts:20 · bash-safety-scan.ts:583 · bash-split.ts:490 · packages/local-runtime-v2/src/service/sandbox/backend/srt-macos.ts:50 · third_party/sandbox-runtime/src/sandbox/sandbox-manager.ts:1553

3.7 ZCode(闭源分发 + 开源 CLI 核心,TypeScript)—— 重权限、轻沙箱

机制

设计影响面

ZCode/apps/zcode-cli/packages/core/src/tool/handlers/bash.ts:43-90,438-490 · bash-command-parser.ts · bash-semantics.ts:120-159 · bash-command-permission-policy.ts:26-37 · bash-timeout-policy.ts:9-14 · bash-background-policy.ts · apps/zcode-cli/packages/adapters/src/exec/execution-utils.ts:5,11 · node-execution-adapter-run.ts:399-400 · bash-shell-provider.ts

3.8 goose(Block,Rust)—— 最小内核 + 扩展注入

机制

设计影响面

goose/crates/goose/src/agents/platform_extensions/developer/shell.rs:161-164,408,416,547,747-800 · crates/goose/src/config/extensions.rs:10 · crates/goose/src/agents/state_machine/ops_bang_shell.rs · crates/goose/src/subprocess.rs(prctl / git_command)

3.9 Kiro —— 闭源,无源码可评

本仓库仅为 Kiro 的 issue 追踪与自动化脚本(label 分类、重复检测、stale 管理),不含 harness 源码。 官方资料称 Web 端在多仓库任务中使用 isolated cloud sandboxes(云端隔离沙箱), IDE/CLI/Crew 共用"一个统一 agent harness"。设计细节无法从源码核验,本报告不对其内部机制做任何断言。

Kiro/README.md(仓库定位与 surface 表)· 无源码引用

4. 关键设计议题深度分析

4.1 持久化 shell:三条路线的收益与风险

路线实现收益风险
无状态 + snapshot 回放 codex shell snapshot 隔离不破;aliases/函数/env 延续;凭证安全处理后单独注入 snapshot 本身是攻击面(eval 内容来自用户 rc);只捕获声明式状态,cd 目录不跨调用
持久 PTY 会话 dsh tool-bash-persistent cwd/env/函数全连续;终端语义完整(交互程序) reset 前状态可被后续任意命令读取(跨命令信息泄漏);超时即 reset 的语义突变;PTY 缓冲管理复杂(scrollback 分页)
显式状态参数 opencode/gemini workdir + 后台进程表 模型完全掌控状态;无隐式泄漏面 模型负担重(必须自己记得 cwd);cd 在单命令内生效的约束靠提示词维持
结论:桌面级单租户 harness 可选持久 PTY(dsh 路线,配合 reset 语义); 多租户/服务端必须选无状态或 snapshot 路线;workdir 参数应作为所有路线的标配(防止 cd 进权限判定盲区——mcode/ZCode 的工具描述均显式警告 cd 不跨调用持久)。

4.2 管道策略:整串执行 vs 逐段分析

"管道"在本报告含两层:shell 语法管道(|、&&、;)与数据的stdio流转。8 个 harness 对前者的处理分三档:

档位策略代表分析粒度
不分析bash -c 整串执行,权限看首词或整体goose、pi、dsh bash-local、gemini零解析成本;cat a | rm -rf / 这类组合无法拆分判定
解析但仅用于放行解析失败/含动态词 → 整体询问,绝不整体放行opencode(opaque 即报错)、ZCode(parseErrors 即 matcher 全匹配)、mcode(AST 拆分逐段)只读段免打扰,写入段逐段判定;解析器成为攻击面
解析 + 内核沙箱双保险命令分析做权限收窄,OS 沙箱做最终边界codex(ParsedCommand 四分类 + sandbox 重试)、dsh bash-sandbox、mcode解析错一次不致命——内核兜底
关键风险:静态解析必然滞后于 shell 语义。已实现的绕过类别:别名与函数(alias)、 eval/$()/反引号命令替换、heredoc 体(mcode 专门剥离)、bash <script> 文件参数、 glob 与变量展开后的动态词。所有 harness 的共识防线是:解析只用于"放行",不用于"拦截"。

4.3 沙箱策略分级与撤除

级别实现适用面8 个 harness 的分布
内核级(三平台原生)seatbelt / bwrap+seccomp / landlock / Windows restricted token·WFP·ACL服务端、多租户、CI;本机高风险codex、dsh、gemini、mcode(4/8 主力)
命令语义级(无 OS 沙箱)AST 分析 + 只读放行 + 危险模式硬拒单租户本机、模型可信度高pi、goose、opencode、ZCode(4/8,其中 ZCode 由内核级主动撤除至此)
外部委派容器/VM/远程(Kiro 云端、opencode workerd 变体等)多仓库任务、完全隔离Kiro(宣称),pi 经 BashOperations 接缝

值得注意的数据点:

4.4 审批 UX 的四档光谱

档位机制打扰率自主上限代表
逐次询问每次执行都问100%零—(无 harness 采用为默认)
只读自动放行逐段/首词 AST 判定只读即放行<20%只读操作全自主ZCode、mcode、opencode、codex(ParsedCommand::Read 收窄)
会话级 allowlistalways-allow 模式;按命令规则记忆逐会话收敛写入操作经一次授权后全自主dsh escalation(强制 justification)、ZCode alwaysAllowPatternSources、codex prefix_rule
全局模式plan / default / accepting_edits / danger 模式切换模式内零打扰整个模式授权(如 accepting_edits 白名单 sed/awk/perl)gemini(TOML 模式)、dsh(三档 SandboxMode)
结论:行业收敛点是"只读自动放行 + 写入会话授权 + 全局模式兜底"的三段式。 两个易忽略的细节值得抄:①升级(escalation)强制非空理由(dsh validateEscalationArgs),给审计留痕; ②prepareApproval 类钩子只能收窄不能扩权(ZCode),预览失败 fail-open 为纯询问。

4.5 超时、截断与后台化

参数收敛值分歧点
前台超时120–300 sgemini 非活跃超时(输出即重置)vs pi/mcode 无默认或三模式;dsh 的 promoteOnTimeout(超时转后台不杀)
输出截断2000 行 / 50 KB(pi/opencode/goose 完全一致,疑似同源)codex 10k tokens;ZCode 30 KB 字符级头尾;gemini 16 MB 缓冲(最宽松)
完整输出一律落临时文件 + 路径回报dsh spill 64 MiB 上限;ZCode 5 GiB 软上限;opencode 7 天保留
后台通知完成自动通知,禁止轮询opencode 显式写入工具描述;gemini 截断注入 5000 字符
截断的对抗性:goose 的 truncate_preview_bytes 注释点明:无换行的 \r 进度条、minified/Base64 内容 可以按行截断"合法"地走私无限长预览——截断实现必须字节封顶。 pi 的 exec.ts 更进一步:截断时把退出码改写为 1,截断绝不伪装成功。

5. 面向本 harness 的设计建议与决策清单

5.1 决策清单(按优先级)

#决策点建议依据
1沙箱与否 服务端/多租户:内核级沙箱(bwrap/seatbelt 平台链 + fail-closed)。单租户桌面:可撤除,权限层兜底,但保留接缝字段(ZCode 教训:字段保留、消费方可插拔) dsh runner 链 + fail-closed;ZCode 撤除注释
2持久化模型 默认无状态 + workdir 参数;持久 PTY 作为可选工具(带 reset 语义与滚动分页);高连续需求场景用 snapshot 回放 dsh 双工具并存;codex snapshot;mcode 工具描述显式警告 cd 不持久
3管道策略 整串 bash -c 执行;AST 解析仅用于"放行":解析失败/含动态词 → 整体询问。绝不用解析结果做整体拦截 opencode opaque 报错;ZCode matcher 全匹配;mcode heredoc 剥离
4审批分层 只读自动放行(逐段判定)→ 写入会话 allowlist(强制 justification)→ 全局模式兜底;升级路径 fail-closed dsh escalation;ZCode prepareApproval 单向收窄;gemini TOML 模式
5超时策略 前台硬超时 120–300s;提供 promoteOnTimeout 选项(长任务转后台而非杀死);非活跃超时作为可选模式 dsh promoteOnTimeout;gemini 非活跃超时;mcode soft-yield
6输出截断 2000 行 / 50 KB 头尾保留 + 完整输出落盘 + 路径回报;截断必须字节封顶(防 \r 走私);截断改写退出码为 1 pi/opencode/goose 收敛值;goose truncate_preview_bytes;pi exec.ts
7后台化 显式 run_in_background + 超时自动后台(sleep 类除外)+ 完成自动通知 + 禁止轮询提示 ZCode auto_on_timeout;opencode 通知文案;gemini 日志落盘工具
8执行接缝 shell 执行抽象为可替换服务(本地/远程/沙箱三实现);环境消毒(凭证 scrub → 用户 env → 托管 DSH_*)顺序固定 dsh ShellExecutor 接缝;pi BashOperations;dsh 环境合并顺序注释

5.2 一句话立场

Shell 工具的设计顺序应当是:先定租户模型(单租户桌面 vs 多租户服务端),再定沙箱档位; 权限层一律"解析只放行、不拦截";持久状态宁缺毋滥,必须持久则显式 reset; 截断必须诚实(字节封顶 + 退出码改写);超时必须留逃生口(转后台而非杀死)。

6. 源码引用索引

codex(Rust)

  • codex-rs/core/src/tools/handlers/unified_exec.rs:67-101 — ExecCommandArgs 参数模式
  • codex-rs/core/src/tools/runtimes/unified_exec.rs:71-82 — 超时/输出/进程数常量
  • codex-rs/core/src/shell.rs:24-46 — derive_exec_args(-lc/-c、PowerShell、cmd)
  • codex-rs/shell-command/src/shell_snapshot.rs — snapshot 捕获/回放
  • codex-rs/sandboxing/src/denial.rs — is_likely_sandbox_denied 启发式
  • codex-rs/sandboxing/src/seatbelt_*.sbpl / bwrap.rs / windows_mxc.rs — 三平台沙箱
  • codex-rs/protocol/src/protocol.rs:1163-1204 — AskForApproval 与 GranularApprovalConfig
  • codex-rs/protocol/src/parse_command.rs:9-45 — ParsedCommand 四分类
  • codex-rs/execpolicy/src/rule.rs — PrefixPattern 前缀规则
  • codex/codex-rs/shell-command/src/command_safety/is_dangerous_command.rs — 危险命令检测
  • codex/codex-rs/exec-server/README.md — 远程执行环境

dsh(TypeScript)

  • dsh/packages/shell/shell/src/index.ts:64-96 — ShellExecutor 抽象接缝(一次性工具专用)
  • dsh/packages/shell/tool-bash-persistent/src/index.ts:9-14 — 持久工具注入 ['terminals'],不经 ShellExecutor
  • dsh/packages/shell/shell/src/types.ts — ShellExecRequest/Spec/Process、ShellExpiryPolicy
  • dsh/packages/shell/bash-local/src/index.ts:101-106,150 — 本地执行器配置与 stateful-shell TODO
  • dsh/packages/shell/tool-bash/src/index.ts:56-95 — tool-bash 配置与工具描述
  • dsh/packages/shell/tool-bash-persistent/src/index.ts:448-471 — 持久 bash 默认值(300s/16k)
  • dsh/packages/shell/bash-sandbox/src/index.ts — 沙箱执行器与 fail-closed
  • dsh/packages/bundle/base/cordis.patch.yml:282 / web-app/presets/standard.patch.yml:24 / minimal.patch.yml:33-90 — 双工具按 preset 互斥挂载(!!js 平台门控)
  • dsh/snapshots/sdk/persistent-tools/cordis.yml:47-52 — 持久组合中一次性工具显式 disabled
  • dsh/packages/sandbox/sandbox/src/index.ts:30 — SandboxMode 三档
  • dsh/packages/sandbox/sandbox-local/src/index.ts:150-198 — 平台 runner 链与 denial 签名
  • dsh/packages/sandbox/sandbox/src/escalation.ts:42-172 — 升级词汇表与审批
  • dsh/packages/shell/tool-bash/src/background.ts — 后台 job 术语映射

gemini-cli(TypeScript)

  • packages/core/src/tools/shell.ts:54,605 — 缓冲常量与非活跃超时
  • packages/core/src/services/shellExecutionService.ts:50,379,1836 — 后台进程/日志/PID 表
  • packages/core/src/tools/shellBackgroundTools.ts — list/read_background_output 工具
  • packages/core/src/policy/sandboxPolicyManager.ts:46-140 — TOML 模式加载
  • packages/core/src/policy/policies/sandbox-default.toml — plan/default/accepting_edits 模式
  • packages/core/src/sandbox/utils/commandSafety.ts:781 — isDangerousCommand
  • packages/core/src/sandbox/macos/MacOsSandboxManager.ts:178 — sandbox-exec seatbelt
  • packages/core/src/sandbox/linux/LinuxSandboxManager.ts:144 — bwrap + seccomp BPF

opencode(TypeScript/Effect)

  • packages/core/src/tool/plugin/shell.ts:21-93 — 工具 schema 与描述
  • packages/core/src/shell.ts:33,238-273 — 输出捕获与截断(2000行/50KiB)
  • packages/core/src/shell/parse.ts — ShellParse scanner、ARITY 表、opaque 检测
  • packages/core/src/shell/select.ts — 平台 shell 解析
  • packages/core/src/permission.ts:94-98 — 规则集 evaluate(双通配、默认 ask)
  • packages/core/src/tool-output.ts:13-14 — MAX_LINES/MAX_BYTES
  • packages/core/src/persistent-pty/index.ts — daemon 持久 PTY(实验终端 API)

pi(TypeScript)

  • packages/coding-agent/src/core/tools/bash.ts:18-36,86-120 — bash schema 与本地执行
  • packages/coding-agent/src/core/tools/truncate.ts:11-12 — 截断常量
  • packages/coding-agent/src/core/exec.ts — execCommand:maxBuffer、SIGTERM→SIGKILL、截断改写退出码
  • packages/coding-agent/src/extensions/codemode/execute.ts:52-53 — QuickJS 256 MiB 堆上限
  • packages/codemode/src/runtime/host.ts — 每执行独立 worker、可终止
  • packages/coding-agent/src/core/agent-session.ts:3717-3728 — shellCommandPrefix 注入
  • packages/coding-agent/src/utils/child-process.ts:49 — waitForChildProcess 管道耗尽宽限

mcode(TypeScript)

  • packages/agent-tools/src/desktop/builtin-defs.ts:106-141 — LocalBashToolDef schema 与描述
  • packages/agent-tools/src/desktop/local-bash-timing.ts — 三档超时(120/300/3600s)
  • packages/agent-modules/permission/src/tools/bash-safe-first-words.ts:20 — fast-allow 白名单
  • packages/agent-modules/permission/src/tools/bash-safety-scan.ts:583 — bashCommandIsSafe
  • packages/agent-modules/permission/src/tools/bash-split.ts:490 — 命令拆分与 heredoc 区间
  • packages/local-runtime-v2/src/service/sandbox/backend/srt-macos.ts:50 — SRT 能力声明
  • third_party/sandbox-runtime/src/sandbox/sandbox-manager.ts:1553 — wrapWithSandbox 三平台包装
  • third_party/sandbox-runtime/src/utils/platform.ts — 平台检测(含 WSL1 不支持)

ZCode(TypeScript)

  • apps/zcode-cli/packages/core/src/tool/handlers/bash.ts:43-90,438-490 — 处理器与 ExecutionRequest 构造
  • apps/zcode-cli/packages/core/src/tool/handlers/bash.ts:500-568 — bashToolEntry 权限声明
  • apps/zcode-cli/packages/core/src/tool/handlers/bash-command-parser.ts — unbash AST 分析
  • apps/zcode-cli/packages/core/src/tool/handlers/bash-semantics.ts:120-159 — 只读语义判定
  • apps/zcode-cli/packages/core/src/tool/handlers/bash-command-permission-policy.ts:26-37 — 高风险根命令与 wrapper 规则
  • apps/zcode-cli/packages/core/src/tool/handlers/bash-timeout-policy.ts:9-14 — 超时策略
  • apps/zcode-cli/packages/core/src/tool/handlers/bash-background-policy.ts — 自动后台资格
  • apps/zcode-cli/packages/adapters/src/exec/execution-utils.ts:5,11 — 超时/落盘常量
  • apps/zcode-cli/packages/adapters/src/exec/node-execution-adapter-run.ts:399-400 — 沙箱撤除注释
  • apps/zcode-cli/packages/adapters/src/exec/bash-shell-provider.ts — shell 选择
  • apps/zcode-cli/packages/core/src/tool/executor/approval-gate.ts — prepareApproval 单向收窄

goose(Rust)

  • crates/goose/src/agents/platform_extensions/developer/shell.rs:161-164,408,416 — 输出/超时常量
  • crates/goose/src/agents/platform_extensions/developer/shell.rs:547-640 — 命令构造(Flatpak/Windows/POSIX)
  • crates/goose/src/agents/platform_extensions/developer/shell.rs:747-800 — truncate_output 与字节封顶预览
  • crates/goose/src/config/extensions.rs:10 — DEFAULT_EXTENSION_TIMEOUT=300
  • crates/goose/src/agents/state_machine/ops_bang_shell.rs — ! 前缀直通
  • crates/goose/src/subprocess.rs — PDEATHSIG、git 加固
  • crates/goose/src/agents/platform_extensions/developer/mod.rs:135-150 — 工具注册与动态描述