Coding Harness 工程实践行业分析报告

基于 9 个主流开源 coding agent harness 的源代码与近半年(2026-05-01 至 2026-11-04)提交记录, 以代码变更(文件路径、模块结构、diff)为准、提交说明为辅,梳理工业界在 harness 工程上的实际工作内容, 供 harness 技术 Leader 决策参考。
研究窗口:2026-05-01 → 2026-11-04(约 6 个月) 样本:9 个 harness / 48,000+ 条提交 / 约 3,200 万行新增代码 证据方法:git 历史 + 源码结构 + 代表性 diff 抽样 报告日期:2026-11-04

目录

1. 研究对象、方法与边界

1.1 什么是 harness(本报告语境)

“Coding harness”(智能体执行框架)指连接大模型与真实开发工具的完整运行时系统,通常包括:代理主循环(agent loop)、工具执行与调用协议、权限与安全控制、上下文管理(压缩/裁剪)、会话状态管理、子代理编排、终端/IDE 界面、以及模型供应商适配层。本报告中的 “harness 工程” 即围绕上述模块的开发工作。文中首次出现的专有技术名词均在当处给出简要定义。

1.2 样本构成

harness代码仓库归属语言定位Star
DSHdeepseek-ai/deepseek-harness深度求索TypeScript插件化(Cordis 架构)全栈 agent harness,Web/桌面/无头/ACP 多 profilenpm 包
codexopenai/codexOpenAIRust终端 coding agent CLI,含云线程、沙箱、语音等扩展133.1k
piearendil-works/pi社区(原 badlogic/pi)TypeScriptagent 工具包:agent loop、TUI、模型适配、durable 运行时、Chord 对象框架119.9k
opencodesst/opencodeSST 社区TypeScript终端/桌面/ Web 多端 coding agent,客户端-服务端架构—
gooseblock/gooseBlock(Square)Rust开源可扩展 agent,含桌面端、ACP 客户端、recipes 工作流—
gemini-cligoogle-gemini/gemini-cliGoogleTypeScriptGemini 系列终端 agent,含沙箱、A2A 服务器、语音108.7k
mcodeMiniMax-AI/minimax-codeMiniMaxTypeScriptMiniMax Code:含 computer-use、浏览器操作、Python/TS SDK 的终端 coding agent2.2k
ZCodezai-org/ZCode智谱(Z.ai)TypeScriptCLI + 桌面工作台 coding agent,四层 Port/Adapter 架构8.5k
Kirokirodotdev/KiroAWS—(闭源产品)agentic IDE 产品;公开仓库仅含 issue 自动化脚本与规范文档4.4k

1.3 分析方法

1.4 边界与偏差说明

  • ZCode:源码通过 “chore: sync ZCode source” 批量同步(窗口内 8 次提交),因此提交数低估真实开发量;分析基于同步 diff(v3.15.1、v3.17.2 两次同步即覆盖 200+ 文件)、设计文档(apps/zcode-cli/docs/design/v2/ 下 90+ 篇)与当前源码结构。
  • Kiro:产品源码不公开(README 明示),公开仓库只有 issue 管理自动化(约 3,700 行 TypeScript)与 spec 规范文档;其结论仅覆盖“公开可观察的 harness 工程实践”。
  • mcode:源码于 2026-09 由内部仓库导入 GitHub,导入快照本身即 +120 万行,提交数不能反映开发历史。
  • 提交数口径差异:codex 采用 squash 合并,fix 类提交占比仅 4.3%,不代表其缺陷密度低;pi/mcode/gemini-cli 等保留较多 fix 提交。跨仓比较时以“变更文件数 + 行数 + 子系统分布”为主,提交数为辅。
  • DSH:25,588 条提交中含 9,565 条合并提交(内部 PR 流程),非合并提交 16,023 条;.agents/notes/ 目录半年内被改动 3.6 万个文件次,属决策知识库而非产品代码。

2. 行业总览:规模、节奏与投入分布

9
研究的 harness 数量
48,389
窗口内总提交数(含合并)
≈1,200
去重贡献者
≈3,190万
增删行合计(+3,200万 / −850万)
11
归纳出的工程主题

2.1 各 harness 投入规模(2026-05-01 → 2026-11-04)

harness非合并提交贡献者变更文件+行−行fix 占比feat 占比变更最集中的模块(文件次)
DSH16,0237539,377568万310万38.2%12.4%packages(15.2万) · .agents/notes(3.6万) · docs(2.7万) · snapshots(1.8万) · apps/web(8.8千)
codex7,02935911,860340万73万4.3%15.6%codex-rs/core(2.1万) · tui(1.7万) · app-server(5.8千) · core/tests(5.3千) · tools(3.5千)
opencode9,81424417,902429万258万41.9%19.4%packages/app(1.5万) · core(1.5万) · tui(5.9千) · web(6.1千) · ai(5.0千)
pi3,3661456,485169万63万45.9%27.8%coding-agent(8.5千) · ai(4.4千) · chord(3.7千) · agent(3.6千) · durable(2.2千)
goose1,5882783,686170万61万40.7%20.2%crates/goose(4.2千) · ui/desktop(5.8千) · goose-agent(1.1千) · providers(1.1千)
gemini-cli570993,037171万3.3万64.6%18.2%core(2.3千) · cli(2.1千) · cli/src/ui(1.3千) · tools(2.7百)
mcode185174,552123万1.8万51.9%18.9%local-runtime-v2(1.5千) · tui(1.2千) · local-runtime(1.4千) · third_party/pi-mono(1.3千)
ZCode8*319,707360万77万——同步流:单次 v3.17.2 同步即 +9,635/−1,472 行、203 文件
Kiro8*2572.8万1.6千——公开部分仅 scripts/(issue 自动化)与 .kiro/specs

* ZCode/Kiro 提交数为同步流/公开部分口径,不能与原生提交仓库直接比较。fix/feat 占比按非合并提交标题关键词统计(正则匹配 fix/feat 等),仅为参考。

2.2 月度提交节奏(非合并提交数)

harness5月6月7月8月9月10月11月(1-4日)节奏特征
DSH03854,2404,0454,1693,117676 月起进入稳定高产,月均 4,000 提交
codex9239298791,2661,6171,2611548-9 月显著放量(云线程、沙箱、code-mode 等)
opencode1,5361,1271,5941,9751,4861,990105全窗口高水位运行,月均约 1,600
pi4173874588534376811318 月与 10 月两波放量(协议与 durable 重写)
goose304286286351199152105-8 月活跃,9 月起转向架构重写(状态机)
gemini-cli229494860621166小团队维护型节奏,10 月回升
mcode080012938109 月源码导入后集中发布 0.5-0.7 系列
ZCode0003410同步发布驱动(v3.14→v3.17)
Kiro3203000公开仓库低频维护

2.3 观察到的总体投入特征

3. 横向主题分析:工业界在做什么

以下 11 个主题按“问题 → 各 harness 的做法(附代码证据)→ 工程含义”组织。证据中的文件路径均相对于各仓库根目录,提交哈希为 2026-05-01 后的窗口内提交。主题 1(上下文工程)有配套深度报告 harness_context_handling_report.html(逐 harness 触发/算法/状态/配置 + 方案对比 + 最新更新)。

1上下文工程:压缩、裁剪、预算与缓存稳定性

要解决的问题:模型上下文窗口有限且成本随 token 增长;会话历史、工具输出(如读文件、bash 输出)会无界膨胀。把上下文管理做对,是 agent 可用性的第一决定因素。

行业做法:9 个 harness 全部有独立的压缩/上下文管理模块,且趋势是“可组合的压缩族 + 显式预算 + 可回放的状态转换”。

harness机制代码证据
DSH4 个可独立组合的压缩 provider:基础压缩、/compact 命令、工具结果裁剪、图片超限 offload(旧图替换为“文本占位+只读路径”并永久重试);token 计量独立成 servicepackages/compaction/{compaction-basic,command-compact,compaction-tool-result-pruner,compaction-image-offload};提交 cf7229e72a(补摘要溢出回归)、321d6362c5(model switch 前 condense history)
codex远程压缩 v2(attempt/installation 测试化)、压缩模型降级、压缩提示模板、rollout 侧 compressioncore/src/compact_remote_v2_*.rs、core/src/compact_model_fallback.rs、prompts/templates/compact/、rollout/src/compression.rs
pi按模型分 token 预算的压缩、cache 友好原语、fork 边界保留;新增 packages/schema 统一流式工具参数解析(线性开销、不可变快照)coding-agent/src/core/compaction/;提交 46bde88a(per-model 预算)、cff1cf52(cache-friendly primitives)、f715a15c(流式 JSON 增量解析 #9265)
opencode压缩缓冲可配百分比、压缩提示大小封顶到上下文窗口、拒绝后不原样重发会话提交 60647(compaction.buffer 百分比)、60660(prompt 封顶)、61015(压缩时不重发被拒会话)
goose独立 goose-context-management crate(summarize/structured/prompts/provider);自动压缩默认封顶 225k tokens;对模型隐藏压缩倒计时;上下文相关性操作(opt-in)crates/goose-context-management/src/;提交 12790(225k 封顶)、12902(不向模型暴露倒计时)、12589(context relevance)
gemini-cli独立的上下文压缩服务与聊天压缩服务;SSE 流结束时冲刷事件缓冲packages/core/src/context/{contextCompressionService,chatCompressionService}.ts;提交 30050
mcodecontextManagement.compactionTriggerAt(只能调低触发点的单调语义)、压缩后恢复 session ID、失效已保留用量、每请求图片上限、有界模型请求超时提交 a79348f(#493)、c460f08(#466,新增 session-identity.ts)、428、431;local-runtime-v2/src/service/turn-system/compaction/
ZCode压缩引入阶段模型(standalone_turn / pre_request / mid_turn / reactive)+ 原因枚举;microcompact 端到端测试;session 事件存储保留策略core/src/runtime/methods/compact-active.ts、core/src/compact/;设计文档 docs/design/v2/compact/、rewind-compact.md、session-event-store-retention.md;同步提交 a9fe401e
工程含义:①压缩从“一个函数”变成“一族可插拔策略”(触发点、摘要 provider、工具结果处理、图片预算分开配置);②“单调语义”(compactionTriggerAt 只能调低、不能调高)这类防御性配置约束成为共识;③prompt 缓存稳定性被显式工程化——ZCode 把工具段字节顺序固定为可回归的契约(见主题 4),pi 把 cache-friendly 原语做成库;④图片/大工具输出的预算化与占位化(DSH image-offload)开始普及。

2权限与安全:策略、沙箱、审批与完整性校验

要解决的问题:agent 会执行 shell、写文件、联网,必须回答“谁决定一条命令能不能执行、在哪执行、执行后是否可信”。这要求策略(policy)、执行隔离(sandbox)、人工审批(approval)、生效校验(integrity)四层协同。
harness机制代码证据
codex①独立 execpolicy crate(parser/rule/decision/amend),支持 decision="prompt-user" 人工检查点与父子策略快照继承;②三平台沙箱:Linux 用内置 bubblewrap + seccomp + 网络代理路由,macOS 用 Seatbelt(sandboxing/src/seatbelt.rs),Windows 用 windows-sandbox-rs;③统一权限解析 resolve_for_enforcement(grant/deny/glob/平台默认三平台共用);④沙箱完整性校验框架:验证生效文件策略是否真正允许写入隔离依赖,指标脱敏、只观测不干预execpolicy/、linux-sandbox/、sandboxing/、windows-sandbox-rs/、exec-server/src/sandbox_integrity/;提交 c2eb1f42a、b5c37c35f(Seatbelt)、d9960e12b(bubblewrap)、3342ee8c0(MXC)、9cc14e798、d92aae550、615be37b2
DSH策略×后端×审批三层可组合:sandbox 后端族(bwrap/Landlock/Seatbelt/Windows ACL)+ policy 包 + approval guard 族(超时策略、重复工具提醒);桌面 CUA 做 macOS 权限引导(独立 helper 身份);文件系统权限在技能发现时强制执行packages/sandbox/*、packages/guard/*;提交 bdd75ca1a、4af529130f(helper 独立权限身份)、#11778–91 系列(技能发现的权限强制)
ZCode权限双层:PermissionService 同步返回 allow/ask/deny,PermissionBroker 异步处理客户端协商(allow/deny/modify、取消、超时);TUI 审批队列化(Allow once / Always allow in this project / Deny);project allow 落盘为 permissionUpdates;插件 profile 强制 permissionModeRestrictOnly(只能收紧不能放宽父会话模式,防 bypass)core/src/permission/{service,broker}.ts;设计文档 permission-broker.md、permission-responder-race.md;tool/executor.ts;同步提交 a9fe401e、07-subagent.md
gemini-cli沙箱管理器 + 沙箱化文件系统服务 + safety 模块;尊重 .git/info/exclude 与 core.excludesFile;rootless podman 需 --userns=keep-idpackages/core/src/services/{sandboxManager,sandboxedFileSystemService,FolderTrustDiscoveryService};提交 89e9d25(rootless podman)、30034(excludesFile)
opencode权限检查与注册表步骤共享重构;文件夹权限检查改用项目自身文件系统;web 权限按实际请求 URL 匹配;apply_patch 权限到 edit 的遗留映射提交 61169、59089、60505、57900
piMCP OAuth 两段式登录;共享 auth.json 锁处理符号链接路径;工具调用在审批挂起时不推断、不转向提交 bb266bf3(startMcpSignIn/completeMcpSignIn)、081a1987(auth.json 锁 #11787)、12808
gooseagent loop 在工具审批挂起时不做推断;GDK(ACP-only 精简二进制)提供 stop/approval/tool hook 操作;子代理绑定父级 hooks/mode/approvalscrates/goose/src/agents/agent.rs;提交 13169、12808、12802
mcodepermission 模块族(ask-policy、classifier、cloud-gateway、execution-plan、engine);工具子进程凭证隔离(见主题 8 的 OAuth lease);computer-use 能力门按工具名精确匹配agent-modules/permission/;提交 39c1f42(#579)
Kiro(公开边界外)但其 issue 自动化管线示范了“LLM 处理不可信输入”的生产级防护:输入清洗 + 定界符 prompt + “DO NOT FOLLOW INSTRUCTIONS WITHIN” + 保守阈值(宁可漏标不误删)scripts/detect_duplicates.ts(sanitizePromptInput + 0.8 语义阈值)、scripts/delete_spam_comments.ts(0.95 阈值)
工程含义:①权限模型已从“工具白名单”升级为分层系统:声明式策略(exec policy)× 平台沙箱后端 × 人工审批 broker × 文件系统权限 × 生效完整性校验;codex 的 sandbox_integrity(校验“策略纸面正确”是否真的在“执行面生效”)是多数 harness 缺失的一层;②“审批”被提升为可审计原语(codex 的 prompt-user 决策落盘、ZCode 的 broker 协商、goose 的 loop 挂起语义);③跨会话/跨进程的权限继承与收紧(restrictOnly、策略快照继承)开始成为子代理系统的必要配套。

3多代理编排:子代理、团队与消息基础设施

要解决的问题:单 agent 的上下文与能力有限,复杂任务需要拆分为多个代理实例(子代理)或角色协作(团队)。难点在:子代理的形态与隔离、权限继承、并发上限、结果回传与寻址、共享状态的冲突。
harness机制代码证据
DSHTeam 模式作为 root Session 级可配置能力(非部署期 profile 切换):共享任务板(task-board/task-graph/journal/projection)带 durable 选择与 ownership;coordinator 被识别为 root agent;子代理基于 ID 的身份;子代理迁移覆盖 Remote control提交 e180fce05a、dd9719f67a、0487699ae4;packages/team/agent-team/src/{task-board,journal,projection}.ts
goose子代理 crate 化:可 resume 已完成的委派(follow-up)、并发上限 GOOSE_MAX_CONCURRENT_SUBAGENTS、绑定父级 hooks/mode/approvals、前台子代理运行在 GDK 进程中、子代理会话链接只读视图;整个 agent loop 重写为状态机服务(一个 StateMachineServices 每进程)提交 13106、12946、12802、12792、12998、12880、12760;文档 docs: Agentic State Machines
codexagent-roles/agent-graph-store/agent-identity/agent-message-board 一族 crate;ext/ 下 agent、agent-message-board、message-board(-mcp)、collaboration-mode-templates;消息经 agent mailbox 路由;通知基础设施成型codex-rs/agent-roles/、agent-graph-store/、agent-message-board/、message-board/、ext/agent*/;提交 f7167ac89、bfdbf01bf、18c6dbe52、6c4fa8683
ZCode子代理多形态协商:fresh / fork(继承父历史+精确工具池共享缓存)/ background / worktree / teammate spawn / remote;模型可见名 Agent(兼容别名 TASK);插件委派子会话强制 restrictOnly 权限设计文档 tool/07-subagent.md、tool/07-subagent-background-plan.md;packages/bootstrap/src/subagents.ts;同步提交 a9fe401e
opencode子代理 UI 全链路:会话状态计数运行中子代理、子代理面包屑与栏、消息运行中子代理、shell 补全独立行;任务委派提交 60045、59950、59438、57473、57684
piagent loop 内部消息类型与 LLM 消息在调用边界转换;durable 运行时的 task graph 与嵌套调用归属(ownedTasks);Chord 文档中“subagent context and tree”决策packages/agent/src/agent-loop.ts;packages/durable/;docs(chord) subagent context 系列
mcodeExplore/Verifier 等角色化子代理;能力门按工具名精确匹配(computer_*),修复越权与工具不可用时的列出问题提交 39c1f42(#579)、579 相关 capability gates
工程含义:①子代理从“功能”变成“带形态协商的运行时”(fresh/fork/background/worktree/remote 各有不同的历史、缓存、隔离语义);②并发与生命周期开始标准化(并发上限、父级绑定、可 resume 的委派);③消息板/邮箱(codex message-board、ZCode mailbox)正在成为多代理寻址与通知的公共基础设施;④agent loop 的状态机化(goose)与 durable 提交语义(pi)是同一趋势的两面:让“运行中的代理”可中断、可恢复、可观察。

4工具与技能生态:MCP、技能发现与工具链契约

要解决的问题:工具供给是 agent 能力的天花板。MCP(Model Context Protocol,工具/数据源的标准化连接协议)已成为公共基础设施;同时“技能”(skill,可复用的任务能力包)与“工具链本身的稳定性”(prompt 缓存友好)成为新的工程点。
harness机制代码证据
全体MCP 全面落地:9 个 harness 全部内置 MCP 客户端,并各自在做“连接生命周期”硬化:租约、取消顺序、大消息线性读、失败标记、quiet 关闭codex rmcp-client + 连接池(per-chat lease,8fdf64729);pi packages/mcp(共享命名/schema/输出上限、大 stdio 线性读 f6278a47 #11791);opencode(拆分连接与位置 61132、启动等待 60490、自校验工具跳过 SDK 缓存 60733、动态注册 logo_uri 59031);goose(W3C trace context 从 ACP prompt 传到 MCP 工具调用 12697);gemini-cli(packages/core/src/mcp/)
codexext/skills 带 dynamic_skill_selector(动态技能选择);技能发现强制执行文件系统权限;技能读取/安装的产出指标;MCP UI 协议扩展 mcp__ 前缀约定ext/skills/src/dynamic_skill_selector/;提交 59291、59280、59279、59278、59295
gemini-clicore/src/skills + .gemini/skills 项目技能目录;工具组(ToolGroup)消息与内部类型守卫解耦packages/core/src/skills/、.gemini/skills/;提交 30041
mcode技能目录监听与注册表;发现工作区链接的技能目录;不抹掉共享的 .builtin-skillsagent-modules/skills/;提交 daa22f11(#522)
ZCodeskills-lock + 技能启用/覆盖优先级设计文档;MCP stdio 进程生命周期与 node 回退;MCP UI 协议skills-lock.json;设计文档 skill.md、skill-command-enable-override.md、mcp-stdio-process-lifecycle.md、mcp-node-fallback.md、mcp-ui(协议)
DSHMCP manager 删除式重构:只保留插件注册的 Streamable HTTP server,删除无 UI 支撑的 servers 配置/stdio 条目/probe/凭证模板展开;MCP 回归“connector 插件注册”单一入口提交 5a30774840(大段删除);packages/client 的 ui-plugin-manager 快照
ZCode工具链字节稳定性契约:tools 段固定字节顺序(zod key 序、$schema 在前、en-US 名字排序、MCP mcp__ 末尾);工具结果文本投影化(Read 去重、截断提示、未知工具名统一 <tool_use_error>);只改模型可见文本不改 schema/权限/事件/UI——目的是把 prompt 缓存命中率工程化为可回归的字节级契约设计文档 tool/00-tool-change-chain.md、tool/README.md;core/src/tool/search/
pi工具搜索与“未提供的调用转为工具任务”的 durable 语义;codemode:模型写 JS 跑在 QuickJS(WASM),嵌套工具调用不进 LLM 上下文packages/codemode/;feat(durable): calls to tools not offered run as tool tasks
工具发现与按需加载(2026-11 核验回流)codex:模型侧 tool_search——对 deferred 工具元数据做 BM25 检索,命中结果以 LoadableToolSpec 在下一次模型调用时暴露(工具描述原文 “exposes matching tools for the next model call”),无独立 load 步;ToolExposure::Deferred/Direct 控制暴露面,动态工具带 defer_loading 标记。ZCode:模型侧 tool-search——toolSearchMode: auto|local|off(默认 off);local 暴露 LocalToolSearch(与 canonical ToolSearch 同 handler、走 alias 机制),auto 按模型选 Native/Local;模式在会话创建/冷恢复固化,fork 与子 Agent 继承。DSH:没有模型侧 tool_search——动态加载走两条:①技能渐进披露(progressive disclosure):模型只见 <available_skills> 名称+摘要目录,调 skill(name) 按需加载完整正文(每次重新读取、无正文缓存);chokidar 监听 .agents/skills 热刷新,新增/删除/重命名在模型步边界可见、无需重启;frontmatter 名称不匹配则拒绝陈旧名。②harness 侧 deferLoading 线协议:工具定义可作为 deferred declaration 存在于会话历史,由 tool-addition/tool-removal developer 消息激活;ToolUpdate 路由 addition-only/in-history 让声明列表搭缓存历史——激活是宿主决策,不是模型调工具。codex core/src/tools/handlers/tool_search.rs(bm25::Embedder/Scorer)、tool_search_spec.rs、codex-rs/tools/src/responses_api.rs(LoadableToolSpec);ZCode core/src/tool/search/、docs/design/v2/tool/19-tool-search.md;DSH dsh-tool-skill、dsh-skill-filesystem、Agent Note 2026-07-27-skill-catalog-hot-refresh、packages/llm/llm/src/content.ts(deferLoading 投影)
工程含义:①MCP 客户端从“能连”进入“连接工程”阶段:租约隔离、取消顺序(cancellation-before-release)、大消息零拷贝读、失败可观测;②技能系统形成“目录约定 + 优先级覆盖 + 内建技能保护”的通用模式;③工具链自身的字节级稳定性(ZCode)与动态技能选择(codex)是低成本高收益的方向——前者直接决定 prompt 缓存命中率(每次前缀字节变化都会导致缓存失效重建),后者决定工具选择的准确率;④工具动态加载出现三种范式:模型侧检索(codex BM25 命中即暴露 / ZCode Local+Native 双模)、宿主侧投影(DSH deferLoading:激活时机由宿主控制、投影为缓存友好)、技能渐进披露(DSH:模型按名取用、目录热刷新)。DSH 明确选择后两者——“宿主控制激活时机”是可审计性与缓存稳定性的来源,代价是模型侧没有自助发现入口;跨 harness 比较“工具加载机制”时须先区分范式,不可直接类比。

5会话持久化与可恢复性

要解决的问题:agent 会话长、状态多(历史、运行态、压缩态、权限授予),崩溃/重启/多端接入后必须能续。要求:状态可序列化、格式可演进、恢复可并发控制、身份可跨压缩保持。
harness机制代码证据
DSHEvent-sourced session:Session = 追加式类型化事件日志(SessionEvent),消息历史由日志派生(deriveMessages),replay/fork = 用旧日志播种新会话;turn 末 write-behind flush;每个事件类型带 SHA-256 类型指纹 + 机器可读 schema inventory(persistence-schema.json);格式 v0→v4 迁移链packages/session/*(session-format-v0-to-v1 … v3-to-v4、session-persistence-jsonl);docs/persistence-catalog.md(脚本生成);Agent Note 2026-06-11-event-sourced-sessions.md;snapshots/session/compaction-output-reserve
ZCodeSessionLifecycleController 单写者状态机(unloaded/starting/ready/stopping/faulted):restart 持同一操作所有权、显式并发表(workspace 维度冲突检测)、stop 排队、close Promise 表达真实完成;Session residency lease:先同步登记 lease 再启 detached runner,同步/异步终态都保证释放;cold-session-resume + transcript-hydration 进协议 v4session-lifecycle/controller.ts、session-execution/residency-lease.ts、zcode-protocol-v4/;设计文档 session-runtime-lifecycle.md、session-idle-deactivation.md、session-persistence.md;测试 session-resident-pool.test.ts、v4-cold-resume.test.ts;同步提交 a9fe401e
piDurable harness:会话/轮次/工具调用先提交到存储再展示(commit-before-display);崩溃后从存储续跑;Harness.open({readOnly}) 只读视图(另一进程可同步查看);task graph、持久化 job、宿主定时器/唤醒packages/durable/(227 次提交);提交 be14d973(只读视图)、crash-loop guard、sleeping tasks/wakeups 系列
codexrollout + rollout-trace + compression 三件套;thread-store 的 SQLite 迁移进单事务 + busy 重试(覆盖 NFS 只读锁场景);metadata 原子写;host-owned turn admission;响应项 ID 经共享生成器路由;dedicated ContextWindowId 类型rollout*/、thread-store/、state/src/sqlite.rs;提交 9e77fb4ad、19438adcb、d84c87246、71a4c0703
mcode“别丢会话”主题:压缩后恢复 session ID(messagesCarrySessionId() + session_identity_reminder);有界模型请求(首事件/空闲超时);复用不可变历史降哈希提交 c460f08(#466)、281、254、428;local-runtime-v2/src/service/turn-system/agent-host/session-identity.ts
工程含义:①“事件溯源 + 派生视图”成为长会话存储的主流形态(DSH、ZCode、pi durable),它让压缩、fork、replay 都变成对同一日志的视图变换;②单写者 + 显式并发表(ZCode lifecycle controller)解决了常驻会话池回收与“正在使用的记录”之间的竞态;③“压缩后身份不丢”(session ID、保留用量)被公认为必须专门测试的回归面(mcode、ZCode 均有对应测试);④只读视图/跨进程观察(pi Harness.open)让“会话可调试”成为运行时能力而非外挂日志。

6协议与接口:ACP、App-Server、SDK 与会话续接

要解决的问题:agent 要被编辑器、Web、移动端、云端调用。需要标准化的前端协议(编辑器↔agent 的 ACP)、稳定的后端协议(app-server)、多语言 SDK,以及更激进的“服务端持有状态、客户端为薄壳”架构。
harness机制代码证据
多数ACP(Agent Client Protocol,编辑器-智能体互联协议)落地:5/9 harness 内置 ACP 支持DSH packages/{acp,acp-app}(含 image-compaction 快照);mcode packages/code-acp + @minimax-ai/code-acp 启动器;opencode cli/src/acp;goose ui/goose-acp + goose-acp-client + GDK(ACP-only 精简二进制 11961);gemini-cli cli/src/acp(另有 a2a-server,A2A 为 agent 间协作协议)。codex 走自有 app-server 协议,pi 走 RPC/print 模式
codexapp-server 协议 schema 版本化(v2 schemas JSON 生成,390/382 个文件次变更);SQLite 并发安全;云线程原生 gRPC 客户端:ThreadService Resume/Attach over HTTP/2、复用代理/CA/网络策略、拒绝 redirect、明文仅 loopback、protobuf 载荷 opaque、诊断脱敏、setup 上限 150s、托管线程预热app-server*/、cloud-client/;提交 b707714ae(+801 行)、010520de7、9e77fb4ad
ZCodeProtocol v4 Gateway:event-normalizer、product-projection、command-inbox、transcript-hydration、cold-session-resume、local-ttft;stdio 严格 NDJSON 帧边界;session 生命周期方法不进传输层普通串行队列、由 owner 决定互斥;薄客户端(桌面/SSH/Docker)接入,server 统一持有 session/模型/运行态packages/bootstrap/src/zcode-protocol-v4/;设计文档 zcode-protocol-agent-server.md;测试 protocol-slash-commands.test.ts、v4-cold-resume.test.ts
piAnthropic message threads:服务端会话续接——对比上一请求只发新增部分,服务端拒绝时回退全量重发;cleanupSessionResources() 释放线程态;客户端用 beta 头 message-threads-2026-08-12packages/ai/src/api/anthropic-messages.ts(+307 行);提交 a758f3ae(#11545)
mcode双语言 SDK:TS @minimax-ai/code-sdk(零依赖,mcode exec --output-format stream-json,Thread 持 session id 续聊);Python minimax-code-sdk(仅 typing_extensions 依赖);ACP 注册表启动器解决双 bin 无法被 npx 选择的问题提交 50448ab(#553)、fffea7a(#571)、daa22f11(#522);packages/{code-sdk,code-sdk-python}
gooseACP 服务器 113 个文件次变更(本仓 ACP 投入最重);SDK API 参考覆盖 Rust/Python/Kotlin;ACP prompt 携带 W3C trace context 贯穿到 MCP 工具调用crates/goose/src/acp/server.rs;提交 11251、12697
opencode客户端-服务端架构:packages/client + sdk/js v2 生成式类型;run 命令等待后台任务结束、不遗留后台服务提交 60699、d85283496;packages/client/src/promise/generated/types.ts
工程含义:①ACP 已成为编辑器集成的事实标准之一(Zed 主导),新 harness 应优先支持而非自建私有协议;②“服务端持态、客户端为薄壳 + NDJSON 帧”(ZCode v4)与“云线程 resume/attach + 预热”(codex)代表两种云化路线;③会话续接出现两个层次:协议层增量发送(pi message threads,省 token 与延迟)与存储层续接(durable/event-sourcing,抗崩溃);④SDK 多语言化(TS+Python 零依赖)是产品化的标配交付物。

7终端交互与多模态

要解决的问题:终端是主战场,但终端不是 Web:滚动、复制、鼠标、图片粘贴、思考过程展示、状态上报都有很强的平台差异;同时语音、截图等输入正在进入 agent。
harness机制代码证据
ZCode把 TUI 当正式工程对象:docs/design/v2 下 30+ 篇 TUI 设计文档(无边框布局、侧边栏生产级 chrome、工具调用详情块、transcript 行、todo 展示、思考占位符、图片粘贴、文件提及、斜杠建议、鼠标滚动、主题、模式切换…)apps/zcode-cli/docs/design/v2/tui-*.md(27 篇)、ink-tui-renderer.md
DSHWeb GUI 浏览器半(packages/client,45k 文件次变更):70 个 ui-* 功能插件 + typed Slots 扩展点;GUI 全插件化使同一 Web bundle 复用于桌面/SDK/ACP,不做 UI fork;语音输入;computer-use CUA 驱动(native + MCP 两种)packages/client/README.md;apps/desktop/README.md;snapshots/web/{voice-input,skill-tool-row,computer-use-cua-driver-*}
codex侧栏会话(≥100 列时父/子会话并排,仅 focused composer 输入);语音链路(capture/playback/device/processing 全模块)与 OS 会话锁联动挂断;图片预算默认统一;终端超链接在 Alacritty 下正确检测tui/src/app/side_pane.rs、voice-host/;提交 db227aed4、93b4e5b4c、59282、11777
pi消息排队中的图片缩放;TUI 设置控制思考块显隐;Markdown 转换器按 surface 选择;终端选择器等 UI 细节的大量修复(窗口高度限制、粘贴键位、OSC 8 检测)提交 4cf69332、a7a75a9d、eebd5d90、3b57ed7e、37b38e9f、b64f6bad;packages/tui/
gemini-cli语音模块(core/src/voice);自定义主题 UI schema 补全 active/focus 键packages/core/src/voice/;提交 30032
goose桌面端实时语音(liveVoice)、思考默认折叠+设置项、截图工具能力纠偏(不再宣称不存在的截图工具)ui/desktop/src/liveVoice;提交 12660、13279
mcodeOSC 7501 程序状态上报:state=idle/working/blocked(blocked 细分 permission/question/auth),title 与 7501 同源——终端集成商可稳定读取 agent 状态;SOCKS5 代理修复(socks5h、NO_PROXY 直连)提交 e798b46(#471)、ebfdc00(#465);docs/tui-capabilities.md
opencode性能型 UI 渲染:spinner 与文字微光跑在合成器线程、拖拽缩放时停止侧栏重排样式;设计系统 checkbox;代码块 GUI 插件渲染提交 61562、61560、61516、61533
工程含义:①TUI 正在被“设计文档化”(ZCode 30+ 篇),说明交互复杂度已被承认为需要规格管理的工程对象;②与终端集成的稳定契约(OSC 7501 状态上报、OSC 8 超链接、图片协议)价值被反复验证;③渲染性能(合成器线程、避免重排)与 GUI 插件化(DSH 的 ui-* 复用同一 bundle)是体验与成本的双重优化。

8模型与供应商兼容

要解决的问题:模型生态碎片化(不同厂商的上下文窗口、鉴权、计费、思考模式、错误语义都不同),且 agent 常需多账号/多供应商路由。适配层的质量直接决定可用性。
harness机制代码证据
pi模型目录工程化:generate-models.ts 生成目录、models.dev 元数据、provider 定义重构、OpenRouter 动态列模型、按 provider 的用量计费;虚拟模型(可插拔路由:强模型规划+便宜模型实现+分类器选模型,随 fork/压缩存活);Anthropic 共享 auth.json 锁处理符号链接;连接错误保留底层 cause;Azure 1.05M 上下文窗口、GLM-5.3 token 计划目录项packages/ai/;提交 540e174c(#10035,+1876 行)、2e0f175b(#11368)、10672、11178、081a1987(#11787)、4c992154、d53980fe
codexmodels-manager + model-provider-info + 本地连接器(lmstudio/ollama);按任务分级的模型路由示例(Bedrock 分类器用 Opus、重复检测用 Sonnet,见 Kiro 对比);云客户端复用网络策略/CA;技能/上下文相关产出指标models-manager/、model-provider/、connectors/、lmstudio/、ollama/;提交 59295
mcodeOAuth lease 协议(工具子进程凭证隔离的代表性设计):host 持 refresh token 绝不下发;短时 access-token lease 按能力维度授权;长度前缀 JSON 帧(codec.ts);跨进程 refresh-owner 存活探测(PID + timeOrigin);命名空间按 buildEnv/region/clientId 隔离;model-system 内 catalog/resolution/identity/codex-oauth;M3.1 Flash 提为默认交付模型;Google BYOK 经 Pi 接入packages/oauth-lease-protocol/、oauth-core/、local-runtime-v2/src/service/model-system/;提交 c21e88e(#509)、9a93560(#492)
gooseproviders crate(1,053 文件次变更);goose-acp 加载实时模型目录并保序;长上下文价格分层计入成本估算;OpenRouter 上下文超限错误分类与上报上下文长度对齐crates/goose/src/providers/;提交 12962、12787、13154、12853、13232
DSHvendor 包体系化(cordis/cosmokit/group/include/loader/timer/logger/schemastery 等独立版本化发布);模型路由经 adapter seam;Web 端 Search/Fetch 设置与 DeepSeek Search API 默认提交 05b1cae8db(vendor 对齐)、3859913c68(Search/Fetch 分离);packages/llm/
工程含义:①“模型目录”本身成为需要代码生成与测试的资产(pi 的 generate-models、codex 的 models-manager);②凭证隔离从安全议题变成协议设计(OAuth lease:refresh token 不下发、能力维度授权、跨进程存活探测);③错误语义被标准化对齐(上下文超限的分类与上报、连接错误的 cause 链),这是多供应商可替换性的前提;④虚拟模型/模型分级路由(规划用强模型、量大用便宜模型)是成本工程的新常态。

9运行时健壮性与性能工程

要解决的问题:agent 运行在长时、无人值守、资源受限的环境。崩溃恢复、资源上限、锁竞争、解析复杂度、启动时间都直接决定“能不能用”。这一类工作不直接产生新功能,但占了 fix 提交的一半左右。
harness机制代码证据
pidurable 崩溃安全:崩溃环路守护(crash-loop guard)、报告来源、阻塞任务入图、睡眠任务与宿主定时器/唤醒;线性时间解析:流式 JSON 工具参数增量解析(每 delta 只读一次、容错、不可变快照)、MCP 大 stdio 消息线性读;缓存统计与预热;RPC/print 关闭优雅退出(重复信号才强退);启动时 dispose session runtimepackages/durable/;提交 f715a15c(#9265)、f6278a47(#11791)、efb45b51、cache-stats/cache-warmer
codex有界 V8 插件运行时(code-mode-runtime):每 helper 最多 32 个 isolate、禁 JIT、限制可执行加载与全局、deadline + per-instance 配额、过载/取消即关 isolate、握手 v3、帧上限 1MiB;Linux 沙箱内建 bubblewrap 二进制 + seccomp + 代理生命周期;托管线程预热;Windows CLI 入口别名解析先于运行时模块加载code-mode-runtime/src/ui/engine.rs、linux-sandbox/;提交 2d1984b9f、010520de7、8632896e84
opencoderun 命令等待后台任务、不遗留后台服务;MCP 启动等待与失败标记;符号链接路径快照;SSE 流结束冲刷缓冲;扩展安装串行化(per-extension 锁);压缩时不错过重发被拒会话提交 60699、d85283496、60490、61149、61546、30039(gemini-cli)、61015
gemini-cli历史重放先于 ACP session/load 响应;流失败时扩展下载中断处理;Whisper 下载中断不误判已安装;零设备 stat 的 Windows 兼容;符号链接路径规范化;shadow repo 尊重 .git/info/exclude提交 30112、30058、30044、30042、30034
mcodeCLI 优雅停止、管道等待有界、cwd 固定、Windows launcher 解析;Python SDK 早循环退出与超时兜底、KeyError/pickle 修复;工作区不一致时解释原因而非建议重试;不可变历史复用、降哈希、有界 post-edit diff提交 e8d30c2(#586)、1704e26、6e062ae(#584)、281、277、284
DSH配置恢复对话框保持可交互;强制策略下恢复更新设置;team 模式初始化时序与 child activation ownership;启动时 past failed optional client plugins;Windows 入口与嵌入式 CLI 导入解析提交 fix(team): 系列(dd9719f67a、385879882c)、d7ca2e0ac2、06bf7ce024 revert、8632896e84
工程含义:①“崩溃前提交、崩溃后续跑”(durable execution)与“只观测不干预的完整性校验”(sandbox integrity)代表两种更高阶的可靠性工程;②复杂度封顶(isolate 配额、帧上限、等待上限、管道超时)是 agent 运行时的安全带;③解析类代码必须线性复杂度(流式 JSON、大 stdio 读),否则工具输出一大就雪崩;④性能工作集中在渲染(合成器线程)、启动(模块别名解析)、历史(不可变复用)三个可测点。

10工程过程:设计文档、决策知识库与自动化

要解决的问题:harness 是复杂度最高的软件形态之一(多插件、多 profile、多端、协议版本化)。没有过程工具,复杂度会失控。这一组“看不见的工作”往往决定半年后的可维护性。
实践harness代码证据
设计文档体系ZCode、DSH、codex、pi、mcodeZCode docs/design/v2/ 90+ 篇(architecture、runtime-refactor、permission-broker、compact、tool/* 全工具链规格、27 篇 tui 规格);DSH docs/(architecture、subsystems、cordis-api、defensive-patterns、postmortem);codex docs/ + README 380 文件次变更;pi packages/chord/docs/next/decisions.md;mcode docs/tui-capabilities.md + Plugin V1 格式契约与免依赖校验器(bb62c64 #484)
决策知识库(ADR 工程化)DSH.agents/notes/{proposed,implemented,rejected,archived}/:状态与类别编进目录路径、三语、归档后冻结并做 sidecar hash 校验、与代码同 PR;半年 168 篇 implemented + 60 篇 bug-fix 笔记;verify-archived-agent-notes.ts、agent-note-tree.ts 做格式/分类门禁
机器生成 + CI 门禁的目录DSHdocs/config-catalog.md(1,475 文件次变更)由 scripts/gen-config-catalog.ts 从包入口、配置类型、JSDoc、Schemastery schema 生成,--check 在 CI 校验;persistence-catalog.md(400 文件次)同理;类型指纹(SHA-256)防 schema 漂移
快照测试矩阵DSH、codex、pi、mcodeDSH snapshots/{acp,sdk,session,web}:cordis 配置树、session.v4.jsonl、system-prompt 全量快照(33,333 条 test 提交的主体);mcode tui-engine-local-deltas、source-sync 测试;pi 编码 agent 会话快照;ZCode session-facade-shutdown、subagent-workspace 等 200+ 行新增测试
issue/反馈回路自动化Kiro、gemini-cli、DSH(间接)Kiro scripts/ ~3,700 行:Bedrock 语义查重(阈值 0.8)、分类(Opus 4.6)、陈旧关闭(7 天)、垃圾评论清理(0.95,保守策略)、重复争议处理;gemini-cli tools/gemini-cli-bot + caretaker-agent(cloudrun triage worker)
规范驱动开发(spec-driven)Kiro(示范)、ZCode( CONTRACT.md 模式)Kiro .kiro/specs/github-issue-automation/ 三件套(requirements 用 WHEN/THEN 验收标准、tasks 用 _Requirements: X.Y_ 双向追溯);ZCode 每个核心模块带 CONTRACT.md(owner、不变量、接口边界,如 session-lifecycle、permission、tool)
工程含义:①头部 harness 的“过程投入”与“代码投入”同量级——设计文档、契约文件(CONTRACT.md)、快照、生成目录不是装饰,而是复杂度预算的载体;②ADR 从 wiki 迁入仓库并机械校验(DSH agent notes)是执行率最高的做法;③契约文件 + 状态机 + 并发表(ZCode CONTRACT.md)让“谁拥有什么、竞态怎么处理”成为可评审的文档;④对 LLM 处理不可信输入的管线,输入清洗 + 定界符 + 保守阈值是可直接抄的生产实践(Kiro)。

11插件的动态分发与热激活(DSH 样本,窗口期行业唯一)

要解决的问题:传统 harness 的可扩展性停留在“启动期静态配置”(技能、MCP、权限模式在会话开始时装配)。要让 agent 成为平台,插件需要完整的生命周期——浏览、确认、安装、校验、激活、回滚——且多数环节要在运行中完成、失败要原子化、不重启即可生效。9 个样本中只有 DSH 走到了这一步(其余 8 家的扩展面仍是配置级),因此本节以 DSH 为样本做详细解剖。

分层架构

层机制代码证据
模块加载Cordis 插件加载器 + bundle 组合包为可安装单元;卸载即 unwind 的可逆 effectvendor/loader/(resolve/internal/config)、packages/bundle/
开发期 HMRchokidar 监听源码 → 追踪 Node 模块图 → 清理受影响模块缓存 → 只重载依赖变更文件的插件入口;框架级依赖变化回退 loader.exit() 由宿主重启;按 profile 控制(base 开 config-only HMR、headless/sdk/acp 关、sdk-minimal 不含);debounce 100msvendor/hmr/src/index.ts(hmr/change、hmr/reload 事件)、vendor/hmr/README.md、docs/architecture.md
引导式安装PluginManager.inspect 先解析 spec(注册表名/绝对路径/git/tarball),拒绝 pnpm 不会接受的写法;无 bundle patch 的包在 pnpm 运行前就被拒(只装组合包);pnpm view 在 profile 目录执行(注册表与代理设置同安装一致)packages/boot/plugin-manager/src/operations.ts、install-spec.ts
失败原子性pnpm 运行前快照 package.json+pnpm-lock.yaml;失败/取消/无 bundle 即还原;随后自动修复:还原 + 按 --frozen-lockfile 重安装,让“上次能用的版本”恢复可加载operations.ts(restore/repair 分支)
失败分类classifyInstallFailure 依运行结束方式与 pnpm 输出(ERR_PNPM_* 码、Node errno)给出 7 类 problem,客户端在输入框下渲染一句话;管理器终止的运行一律归类为 timeoutoperations.ts、install-failure.ts、failure.ts
取消语义每次运行生成 request id;cancelInstall 只在 pnpm 退出且文件恢复后才答复;对话框等答复才把 spec 交还——中止的 RPC 或断开连接都不算确认Agent Note 2026-09-15-guided-plugin-installation.zh.md
连接预检只读 git ls-remote(5s 时限、禁凭据助手与认证提示),仅网络失败/超时阻止 pnpm 启动;提供国内镜像输入git-transport.ts、github-connection.ts
热激活安装成功后 activateNewBundles → reconcile() 在运行中的 profile 内激活新 bundle,无需重启;激活被拒(不支持的 Host/依赖)时已装依赖保留、bundle 选择不变,并给出显式诊断operations.ts:535 与 reconcile()(operations.ts:90)
启用在事后以 enabled:false 安装;完成画面为新增 bundle 提供“立即启用”;列表滚动到卡片;仅下次启动生效的变更/被覆盖/被取消/被拒各弹一条 toastui-plugin-manager 客户端;Agent Note 2026-09-15
插件市场JSON 索引格式(format:1:本地化标题/描述、图标、版本、兼容性、发布时间、第三方自声明的分类标签);索引源按 profile 隔离、仅 http/https;推荐版本=兼容的最高正式版(无则最高预发布);确认框展示来源;版本化安装格式 name@version / git+<url>.git#<commit>&path:/<subdir>;缓存于 .plugin-market-cache;官方索引生成器docs/user/guide/plugin-market.zh.md、Agent Note 2026-10-02-plugin-market-*(discover/index-format)
安全与门禁git 托管包脚本审批(allowBuilds 键解析加固);自托管 git 走 SSH 传输;engines.dsh + @deepseek-ai/dsh* peer 依赖校验;不兼容版本需显式豁免(精确到版本);远程访问场景插件导航为可选依赖(whenAccess)build-approval.ts、git-transport.ts、versions.ts;提交 220301c614、a8bf3e7600、f59f0dfc67
按需分发computer-use 的 notarized helper 通过按需插件安装交付;CUA 区分 on-demand metadata 与已安装 worker 插件提交 dbd881ab46、7de6009aae、4247226074

近期更新(2026-09 起,plugin-manager + ui-plugin-manager + 市场文档共 363 条提交)

  • 10 月为“安装失败诊断”连续加固 5 轮(9005026ea6 流式输出已持有诊断、90838b790a 保留步骤与完整日志、e5269b3bd6 诊断不越权作答、e2025b16b3 只认领失败答复能证明的部分、849f4d940d 文档留痕)。
  • fbe725a798 向用户解释“自动热激活”;59fbd01761 版本钉死的官方安装说明;f5f2b7031f 类型化官方安装后保留显式启用。
  • 市场/索引格式在 10-02 落地(discover + index-format 两篇 Agent Note),10-15 补插件详情页文档。
工程含义:①插件生命周期管理本身就是新的工程前沿——浏览→确认→安装→校验→激活→回滚六段,只有 DSH 把它做成了原子、可分类、可取消、可热激活的系统;领导团队若规划平台化,这段值得立项。②“安装与激活解耦”(activateNewBundles/reconcile)让失败不回滚已装依赖、激活被拒有明确诊断,是热激活的正确姿势。③HMR 必须显式划定边界:框架级依赖变化即回退宿主重启(loader.exit()),热重载不是万能的。④市场=第三方信任问题:索引是不受信内容,版本钉死 + 来源确认 + https + “不验证声明”的提示是底线。行业启示:其余 8 家半年内没有任何一家把扩展面做到“运行中可安装可激活”,这既是差距也是机会窗口。

4. 分 Harness 画像

DSHDeepSeek Harness — 插件化架构的系统化样本

架构:“一切皆插件”。底层 Cordis 插件框架(插件向共享 context 贡献 service/typed event/可逆 effect,卸载时自动 unwind);5 个 profile(web/headless/sdk/sdk-minimal/acp)由有序 bundle 叠加 + cordis.patch.yml 分层覆盖组合;59 个包按能力族分组。Session 为追加式事件日志,消息历史派生;Team 模式、压缩族、沙箱/审批 guard、LiveShare 远程面均为 Cordis 能力。工具动态加载不走模型侧检索:技能渐进披露(skill(name) 按名加载正文 + <available_skills> 目录热刷新)+ deferLoading 线协议(宿主经 developer 消息激活/移除工具声明,addition-only/in-history 路由保缓存),详见 3.4。

值得借鉴:Agent Notes 决策知识库(路径编码状态、冻结归档);config/persistence 目录自动生成 + SHA-256 类型指纹 + CI 门禁;GUI 全插件化使同一 Web bundle 服务 Web/桌面/SDK/ACP;compaction-image-offload(确定性的、可回放的图片预算状态转换)。插件动态分发与热激活(窗口期行业唯一,详见 3.11):引导式安装(先 inspect 再 pnpm,无 bundle patch 的包运行前即拒)、失败原子性(快照 package.json/lockfile + 自动修复重安装)、reconcile() 运行内热激活、按 profile 控制的 config-only HMR(框架级依赖变化回退宿主重启)、JSON 索引插件市场(版本钉死 + 来源确认 + https)。能力声明字段(systemPromptUpdate/toolUpdate):模型能力元数据由所属适配器声明(如内置 deepseek-flash 声明 in-history + addition-only + 文本/图像输入,deepseek-v4-pro 均未声明→走传统重写 message 0);值域封闭强校验,用户唯一可配面是无密钥回放路由目录(dsh-llm-replay),非日常设置项——把“模型能力”与“用户配置”严格分层。

codexOpenAI Codex CLI — 安全与隔离加固期

架构:Rust 单仓(codex-rs),约 90 个 crate。核心:core(session/turn/tools/context/compact)、tui、app-server(+协议 schema 版本化)、execpolicy、三平台沙箱(linux-sandbox/bwrap+seccomp、sandboxing/seatbelt、windows-sandbox-rs)、cloud-client(gRPC 云线程 resume/attach + 预热)、code-mode(有界 V8 插件运行时)、voice-host、ext/*(skills/memories/agent/guardian/queue/web-search 等)。

值得借鉴:sandbox_integrity 完整性校验框架(只观测不干预、指标脱敏);execpolicy 的 prompt-user 人工检查点与策略快照继承;MCP per-chat connection lease + cancellation-before-release;工具链权限发现的强制执行(#11778–91 系列)。

ZCode智谱 Z.ai — 契约与 owner 纪律期

架构:TypeScript 四层 + Port/Adapter:contracts(port/event/capability,无实现)→ core(session/turn/agent loop/tool/permission/compact/rewind/subagent/mailbox/hooks 状态机,只表达意图)→ adapters(fs/子进程/网络/SQLite/provider/MCP 副作用)→ bootstrap(唯一组装点)。Agent loop 为 Event-first(Gather→Act→Verify),事件 sourcing 支持恢复重放。公开仓为源码同步流,可见 v3.14→v3.17 的架构演进。

值得借鉴:SessionLifecycleController 单写者 + 状态机 + 并发表(workspace 冲突检测);permission service/broker 双层协商;子代理多形态 + restrictOnly 权限收紧;工具链字节稳定性契约 + compact 阶段/原因可统计;CONTRACT.md 契约文件模式。

pi 协议层与 durable 运行时创新

架构:TypeScript 工具包群:agent(agent loop)、ai(模型适配/目录/流式解析)、coding-agent(交互模式/压缩/技能)、chord(对象应用框架:跨进程对象、插件热重载、SQLite/Cloudflare DO 后端)、durable(崩溃安全运行时)、mcp、evals、tui、codemode(QuickJS WASM 沙箱执行)。

值得借鉴:Anthropic message threads(服务端增量续接 + 优雅回退);durable 的 commit-before-display + Harness.open 只读视图;pi-schema 统一工具参数校验;虚拟模型路由;流式工具参数线性解析。

mcodeMiniMax Code — 服务化重组与凭证隔离

架构:TypeScript 局部运行时 v2(service 化:turn-system/model-system/session-system/sandbox/browser-use/mcp/permission/cron/plugin/plan/canvas/channel-system 等)+ TUI + TS/Python 双 SDK + ACP 启动器 + 内建技能(third_party/pi-mono)。

值得借鉴:OAuth lease 协议(refresh token 不下发、能力维度授权、跨进程 refresh-owner 存活探测);“别丢会话”组合拳(compactionTriggerAt 单调语义 + session ID 恢复 + 有界请求 + 图片上限);OSC 7501 终端状态上报;compaction 后失效已保留用量。

KiroAWS — 开源边界与可观察实践

现状:agentic IDE(README 明示五端:IDE / CLI / Web / Mobile / Crew——Web 端为“隔离云沙箱中的多仓库任务委托”,Crew 端为“带记忆、调度和多通道访问的持久化工作区”);公开仓库为“管理 harness 反馈回路的 harness”:issue 自动化管线(约 3,700 行 TS,Bedrock 语义查重/分类/陈旧清理/垃圾清理)+ spec-driven 三件套(requirements/design/tasks,带 _Requirements 双向追溯)。

可观察:LLM 处理不可信输入的生产级防护(sanitizePromptInput + 定界符 + DO-NOT-FOLLOW + 保守阈值);按任务分级的模型路由(Opus 4.6 判断类 / Sonnet 4 量大类);spec 方法论的仓库内活样本。

opencodeSST — 多端客户端-服务端架构

架构:TypeScript(Bun),packages:app(TUI/Electron 桌面/Web 共用 shell)、core(session/runner/permission/MCP/压缩)、tui、web(文档站即产品手册)、ai、client/sdk(生成式类型)、plugin。全窗口月均约 1,600 提交。

值得借鉴:连接与位置拆分 + MCP 生命周期硬化(启动等待、失败标记、quiet 关闭、自校验工具);权限重构(共享调用步骤、按 URL 匹配 web 权限);渲染性能(合成器线程、拖拽不重排);run 命令的后台任务卫生。

gooseBlock — 状态机重写与 ACP 深耕

架构:Rust,crates:goose(agent loop/providers/agents)、goose-agent(状态机服务重写)、goose-acp(ACP 服务器,本仓最重投入)、goose-context-management、goose-mcp、goose-sdk、goose-cli、ui/desktop(10+ 语言国际化)。

值得借鉴:Agent/AgentManager → 单进程 StateMachineServices 的状态机重写;子代理并发上限与父级绑定;ACP-only 精简二进制(GDK);压缩默认 225k 封顶 + 不向模型暴露压缩倒计时;W3C trace context 贯穿 ACP→MCP。

gemini-cliGoogle — 小团队维护型样本

架构:TypeScript,packages:core(tools/services/mcp/safety/scheduler/agent)、cli(ui)、a2a-server(agent 间协议)、vscode-ide-companion、sdk、devtools。fix 占比 64.6%,反映维护期特征。

值得借鉴:沙箱管理器与沙箱化文件系统;目录卫生(尊重 .git/info/exclude);ACP 历史重放时序修复;语音模块;caretaker-agent 云端 triage 自动化。

5. 结论与对 harness 团队的建议

5.1 八条结论

  1. 上下文工程已是独立工程学科:全部 9 个 harness 都有压缩模块,且共识收敛为“可组合的压缩族 + 显式预算 + 单调语义的触发点配置 + 图片/工具输出预算化 + 缓存友好的字节级稳定”。这是投入回报最高的领域。
  2. 权限系统分层化:声明式策略(exec policy)× 平台沙箱后端(bwrap/seccomp/Seatbelt/Windows ACL/Landlock)× 人工审批 broker × 文件系统权限 × 完整性校验。codex 的 sandbox_integrity 表明:“策略是否在执行面真正生效”本身需要被校验。
  3. 多代理编排进入工程化阶段:子代理有形态区分(fresh/fork/background/worktree/remote)、权限继承规则(restrictOnly)、并发上限、可 resume 委派;消息板/邮箱成为公共基础设施;agent loop 状态机化 + durable 提交语义让代理可中断、可恢复、可观察。
  4. 会话连续性是产品底线:事件溯源 + 派生视图(DSH/ZCode/pi)、单写者生命周期与 residency lease(ZCode)、压缩后身份保持(mcode/ZCode)、服务端增量续接(pi message threads)分别从存储、调度、身份、协议四个层面解决“不能丢会话”。
  5. 协议收敛在 ACP + App-Server:5/9 harness 内置 ACP;云化形成“gRPC resume/attach + 预热”(codex)与“server 持态 + 薄客户端 NDJSON”(ZCode v4)两条路线;SDK 多语言零依赖化(mcode TS/Python)成为交付标配。
  6. 健壮性工作是 fix 提交的大头:窗口内 fix 占比 38%–65%(codex 因 squash 口径为 4.3%)。集中在:锁竞争与 DB 事务、优雅停止与超时兜底、崩溃恢复、解析线性复杂度、平台兼容(Windows/WSL/rootless)。这些是“能不能无人值守运行”的分水岭。
  7. 凭证与错误语义的协议化:OAuth lease(refresh token 不下发、能力维度、跨进程存活探测)、错误分类对齐(上下文超限、cause 链)、用量与计费(按 provider、长上下文价格分层)——多供应商可替换性的前提是这些协议。
  8. 过程投入与代码投入同量级:90+ 篇设计文档、CONTRACT.md 契约、路径编码的决策知识库(agent notes)、机器生成的配置/持久化目录 + 指纹 CI 门禁、跨 profile 快照矩阵、issue 自动化。头部团队的实践表明:没有这些,复杂度会在两个发布周期内失控。
  9. 插件生命周期管理是新的工程前沿(DSH 样本):浏览→确认→安装→校验→热激活→回滚的完整闭环,失败原子性(快照+还原+自动修复)、失败分类(7 类 problem)、取消语义(等 pnpm 退出且文件恢复才答复)、安装与激活解耦(reconcile)——9 个样本中仅 DSH 一家做到“运行中可安装可激活”,其余 8 家的扩展面仍是启动期配置级。平台化规划应把这段视为独立能力域。

5.2 对 harness 技术 Leader 的建议动作

优先级动作参照实现
P0把压缩做成可配置、可组合的 provider 族(触发点/摘要/工具结果/图片预算分开),并给触发点配置加“单调语义”约束(只能收紧不能放宽)DSH compaction 四件套;mcode compactionTriggerAt;ZCode CompactPhase
P0建设权限分层:声明式 exec policy + 三平台沙箱后端 + 审批 broker + 文件系统权限解析;补上“执行面完整性校验”(运行时验证生效策略是否匹配实际隔离后端)codex execpolicy/sandbox_integrity;ZCode permission service+broker;DSH sandbox 三件套
P0会话存储事件溯源化(或至少 append-only + 派生视图),配套:格式版本迁移链、类型指纹、单写者生命周期状态机 + residency lease、压缩后身份回归测试DSH event-sourced sessions;ZCode SessionLifecycleController;mcode session-identity
P1支持 ACP(编辑器集成事实标准)+ 稳定的 app-server 协议(schema 版本化、NDJSON 帧边界);SDK 至少 TS + Python 零依赖goose GDK / mcode code-acp / ZCode protocol v4 / codex app-server schema
P1工具链字节级稳定契约 + prompt 缓存命中率回归:固定工具段字节顺序、结果文本投影化、截断提示协议;动态技能选择器ZCode 00-tool-change-chain;codex dynamic_skill_selector;pi cache-friendly primitives
P1子代理运行时化:形态协商(含权限继承 restrictOnly)、并发上限、父级 hooks 绑定、可 resume 委派、worktree 隔离;消息板/邮箱基础设施goose subagent crate;ZCode subagents.ts;codex message-board;DSH team task-board
P2凭证协议化:工具子进程不下发 refresh token、短时 lease、能力维度授权、跨进程存活探测;错误语义与用量计费统一分类mcode oauth-lease-protocol;pi virtual models / totalFromProvider;goose 长上下文计费
P2过程资产工程化:设计文档 + 每模块 CONTRACT.md(owner/不变量/接口边界)、决策知识库入仓并机械校验、配置目录机器生成 + CI 指纹门禁、跨 profile 快照矩阵、issue 自动化(含 LLM 输入清洗与保守阈值)DSH agent notes + gen-config-catalog;ZCode CONTRACT.md;Kiro scripts + .kiro/specs
P2运行时安全带:isolate/helper 级资源配额、解析线性复杂度、优雅停止有界等待、崩溃环路守护、只读跨进程会话视图codex code-mode-runtime;pi durable;opencode 后台任务卫生
一句话总结:近半年工业界对 harness 的工程投入,集中在“把 agent 从能跑变成可托管”——上下文预算化、权限分层化、会话持久化、协议标准化、子代理运行时化、以及用契约与快照压住复杂度。这六件事,建议作为团队下半年的主线。

6. 附录:数据与证据索引

6.1 数据来源

6.2 高价值证据文件(按主题)

主题路径(仓库相对)
沙箱与权限(codex)codex-rs/execpolicy/、codex-rs/sandboxing/src/seatbelt.rs、codex-rs/linux-sandbox/、codex-rs/exec-server/src/sandbox_integrity/、codex-rs/windows-sandbox-rs/
权限协商(ZCode)apps/zcode-cli/packages/core/src/permission/{service,broker}.ts、docs/design/v2/permission-broker.md
会话生命周期(ZCode)apps/zcode-cli/packages/bootstrap/src/session-lifecycle/controller.ts、session-execution/residency-lease.ts、docs/design/v2/session-runtime-lifecycle.md
事件溯源(DSH)packages/session/、docs/persistence-catalog.md、.agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.md
压缩族(DSH)packages/compaction/、snapshots/session/compaction-output-reserve
工具链字节契约(ZCode)apps/zcode-cli/docs/design/v2/tool/00-tool-change-chain.md
服务端会话续接(pi)packages/ai/src/api/anthropic-messages.ts(提交 a758f3ae #11545)
崩溃安全运行时(pi)packages/durable/、packages/chord/docs/
凭证隔离(mcode)packages/oauth-lease-protocol/、packages/oauth-core/
状态机重写(goose)crates/goose-agent/、documentation/docs/blog/2026-*(Agentic State Machines 等)、crates/goose-context-management/
ACP 布局DSH packages/acp;mcode packages/code-acp;goose ui/goose-acp + crates/goose/src/acp/server.rs;gemini-cli packages/cli/src/acp + packages/a2a-server
云线程(codex)codex-rs/cloud-client/、codex-rs/thread-store/、codex-rs/app-server-protocol/
V8 有界运行时(codex)codex-rs/code-mode-runtime/src/ui/engine.rs、codex-rs/code-mode/
决策知识库(DSH).agents/notes/README.md、scripts/verify-archived-agent-notes.ts、scripts/gen-config-catalog.ts
LLM 输入防护(Kiro)scripts/detect_duplicates.ts(sanitizePromptInput)、scripts/delete_spam_comments.ts、.kiro/specs/

6.3 分析脚本

analyze.py(仓库根):对每个仓库执行 git log --since=2026-05-01 --no-merges --numstat,聚合提交数、贡献者、变更文件数、增删行数、目录/文件 top-N、提交标题关键词分布,输出 stats.json。本报告全部量化表格由该脚本与直接 git log 统计产生。