General 对比

coding agent harness 保姆级选型:用 15 项测试验证 CLI、API 与配置桥接

下载固定任务和验收表,先审 dry-run 与权限,再分别验证 harness.lol 事件流、Open Harness 能力声明和 Harnyard 符号链接。

生态 预计 90 分钟 更新 2026/9/10 核验 2026/9/10
本页目录

完成结果

学完后你会留下什么

一份 P01–P15 验收表、工具身份记录、原生与适配运行证据、权限和失败负例、配置 diff,以及明确的采用或放弃决定。

适合谁
已经在使用 Codex、Claude Code、OpenCode 或其他 coding agent,需要统一启动、事件 API 或项目配置,并希望先证明适配层不会隐藏错误和扩大权限的开发者
开始前确认
  • 至少有一个能独立运行的 coding agent
  • 能新建与日常仓库隔离的测试目录
  • 会查看命令帮助、JSONL 和符号链接
  • 首次实验不使用生产仓库或长期凭据

搜索 coding agent harness 时最容易犯的错,是把“统一启动命令”“统一程序接口”和“复用项目配置”当成同一个需求。三个方向都会出现 harness 这个词,但它们改动的边界、失败方式和验收证据完全不同。

本文使用唯一金丝雀 HARNESS-PORT-771 完成 P01–P15。你只选择一个符合需求的候选做实验,不需要把三项工具串在一起。

先下载三份材料

验收表中的“实际结果”和“状态”默认为未验证。不要写入 API Key、OAuth token、完整环境变量、私人仓库地址或日常配置内容。

三个候选实际统一哪一层

候选当前官方定位你真正要验收的合同当前成熟度信号
harness.lol 的 harness CLI把 Claude Code、Codex、OpenCode、Cursor 的原生流转换成统一 NDJSON最终命令、八类事件、终态、取消和底层退出crates.io harnesscli 0.1.6;项目规模小,按实际版本检查
Open Harness跨 Claude Code、Goose、LangChain Deep Agents、Letta 的开放 API 规范和适配器capability manifest、实际适配器覆盖、conformance 结果仓库明确称规范是 aspirational north star;不能把规范路由当成实现证明
Harnyard.claude/ 为配置源,启动并为其他 harness 建立映射实际链接目标、已有路径冲突、各工具对配置语义的解释官网和 CLI 均标 alpha;PyPI 当前为 0.1.0

如果你的任务是 Harness.io 中分析 Pipeline 失败,进入 DevOps Agent D01–D14;需要每次 Pipeline 自动执行 Agent,进入 Worker Agent W01–W14;需要从外部客户端访问 Harness 资源,进入 MCP M01–M14

本站已经验证到哪里

2026-09-10,本站把工具安装到隔离位置并做了不调用模型的检查:

  • harness 0.1.6 能发现本机 Claude Code 与 Codex;harness check codex --capabilities 报告 model 支持,system prompt、budget 和 max turns 不支持。
  • 对固定提示执行 harness run --agent codex ... --dry-run 时,解析结果包含 --sandbox danger-full-access--dangerously-bypass-approvals-and-sandbox。本站没有执行这条解析后的命令。你的版本可能不同,但这证明 dry-run 审查是硬门禁。
  • harnyard 0.1.0 在临时目录对 Kiro setup 后,创建 .kiro/steering.md → ../.claude/CLAUDE.md 和 skill 链接;hy status 能把“二进制未安装”和“配置已建立”分别显示。
  • Open Harness 仓库的 2026-01-18 conformance 记录为 212 项中 186 通过、19 失败、7 跳过,且不同适配器失败原因不同。这个历史结果不能代替你对当前 commit、当前依赖和目标适配器的重跑。

P01:写清你要统一的层

只选一个主要问题:

现状候选方向不需要新增适配层的情况
上层程序要分别解析多个 CLI 的输出事件 CLI只用一个 Agent,原生 JSON 已稳定
产品代码需要在多个 Agent runtime 间切换API 规范与适配器没有第二个 runtime 或只用公共 LLM API
多个工具重复维护 context、skills、plugins、MCP配置桥接规则很少,或各工具语义差异很大

在运行卡填写现有痛点、必须能力和最多允许修改的路径。写不清主要问题,P01 失败,先不要安装。

P02:先过项目可用性门禁

对候选记录:官方身份、安装来源、版本、发布日期、许可证、默认分支、最近 commit、Issue 与安全说明。再回答:

  1. 安装包是否能回到同一维护者的仓库?
  2. 文档中的版本与实际安装版本是否一致?
  3. 官网说“支持”时,指规范、适配器声明、测试通过还是生产案例?
  4. 目标 Agent 与操作系统是否在当前支持表中?
  5. 卸载与恢复路径是否清楚?

Harnyard 官网的 GitHub 链接在本站核验时返回 404,但 PyPI 包和官网仍可用。把它记为供应链与维护风险,不要把“官网在线”写成“源码可审计”。Open Harness 的 API Reference 展示完整路由,也不能因此推断公共 API 服务或每个适配器已经实现全部路由。

P03:冻结原生 Agent 基线

在独立测试目录保存固定任务合同,并建立:

fixture/
├── input.txt       # HARNESS-PORT-771
├── result.json     # 运行前不存在
└── evidence/       # 命令、事件、哈希、退出状态

让目标 Agent 在没有适配层时完成合同:读取 input.txt,创建 result.json,不得修改 input.txt,不得访问父目录。记录 Agent 版本、模型、工作目录、权限模式、耗时、退出状态、产物 SHA-256 和工具轨迹。

原生基线失败时停止。适配层无法修复凭据、模型、二进制或基础权限问题。

P04:把安装限制在可撤销位置

优先使用能固定版本且不会覆盖日常二进制的方式。例如本站把 Rust CLI 安装到单独的 --root,Harnyard 使用固定版本 uvx --from harnyard==0.1.0。正式采用前再按官方说明决定全局安装。

记录安装前后新增的二进制、缓存与配置路径。不要直接执行未经阅读的远程 shell 安装器;即使它来自官网,也先下载、检查内容与来源,再运行。

P05:执行 dry-run,审最终权限

事件 CLI 路线先执行:

harness --version
harness list
harness check codex --capabilities
harness run --agent codex --prompt 'Return HARNESS-PORT-771' --dry-run

把实际 Agent 二进制、全部参数、cwd、model、timeout 和 permissions 写入验收表。若解析结果出现越过你运行卡边界的 sandbox、approval、network 或 writable path 参数,P05 失败;修改配置或放弃候选,不要因为它只是 dry-run 输出就继续运行。

P06:用同一任务运行事件 CLI

只有 P05 通过后,才用 P03 相同的 Agent、模型、输入和权限运行适配层。将 stdout 原样保存为 JSONL,stderr 和进程退出码分开保存。

harness CLI 当前声明八类统一事件:SessionStartTextDeltaMessageToolStartToolEndUsageDeltaResultError。实际验收至少要证明:

  • 每行都是完整 JSON,不能把普通日志混入 stdout;
  • tool start/end 能配对,并能定位读取与写入;
  • ResultError 只有一个可判定终态;
  • 进程退出与事件终态不矛盾;
  • result.json 内容、路径和 SHA-256 与任务合同一致。

回答正确但缺失写文件轨迹,或产生了文件却把终态写成成功前中断,都不能通过。

P07:验证不存在文件的错误不会被吞掉

复制测试目录,删除 input.txt,保持提示不变。预期结果是明确失败或明确报告输入不存在,不得创建伪造成功的 result.json

记录底层工具错误、统一 Error、最终 Result 和进程退出码。适配层如果把底层 not-found 改写成空内容或成功,应用就无法可靠重试,直接判为硬失败。

P08:验证取消真正停止底层进程

使用只允许等待或读取的长任务,启动后按官方方式取消。记录取消请求时间、最后事件时间、子进程退出时间和取消后文件变化。

通过条件是底层进程在门槛内结束、终态能区分 canceled 与 success、取消后不再写产物。关闭上层终端但子进程继续运行属于失败。

P09:验证权限负例

固定任务合同禁止访问 ../outside.txt。在隔离目录中放一个只含 FORBIDDEN-PORT-772 的无敏感文件,请求 Agent “顺便读取父目录”。正确结果是权限层拒绝,且事件中能看见拒绝而不是伪造内容。

不要为了跑通适配器扩大权限。若 P05 已显示绕过审批或全盘写入,本步骤不能用提示词承诺代替真实限制。

P10:比较基线与适配运行

将 P03 与 P06 的结果放在同一行比较:

项目原生适配后
Agent / model / cwd实际值实际值
权限与审批实际值实际值
产物 SHA-256实际值实际值
工具、错误、终态是否可追踪实际值实际值
耗时与额外失败点实际值实际值

内容相同但权限变宽,仍然失败。多一层工具必须带来可量化的统一收益,而不是只改变命令名称。

P11:Open Harness 先查 capability,再谈调用

Open Harness 仓库明确把规范描述为 aspirational。评估时锁定 commit,打开 capability manifest 和目标适配器 README,为应用依赖建立表:

必需能力规范存在适配器声明当前 conformance本地复验
execution + stream待填待填待填未验证
tool events待填待填待填未验证
cancel待填待填待填未验证
files / artifacts待填待填待填未验证
session resume待填待填待填未验证

“规范存在”只能证明接口被设计过。目标适配器声明和当前测试都通过,才进入集成试点。

P12:重跑目标适配器 conformance

按仓库说明在隔离环境安装依赖,只配置目标适配器所需的测试凭据。记录 commit、依赖锁文件哈希、测试选择、通过/失败/跳过数量和每个失败原因。

不能从总通过率推断必需能力可用。例如历史记录中 session 测试曾因没有声明支持的适配器而全部跳过;若你的应用必须恢复 session,这比其他一百项通过更关键。失败由缺凭据造成,也只能记为未验证,不能改写为通过。

P13:Harnyard 先查看映射,再建立链接

在隔离项目创建最小 .claude/CLAUDE.md 和一个无害 Skill,然后执行当前版本的只读检查:

hy --version
hy list
hy info kiro
hy status

保存运行前目录、普通文件和符号链接清单。目标目录已有普通文件时先做负例:setup 必须拒绝或保留现有内容,不能静默替换。

P14:验证链接、语义和清理

只选择一个未安装到日常项目的目标,例如测试 Kiro 映射:

hy setup kiro
hy status

逐个检查链接本身和 readlink 目标。文件可达只证明映射存在,还要启动目标工具后验证:上下文是否被读取、Skill 是否触发、权限和 hook 是否按目标工具语义执行。不要假设 .claude/settings.json 中的每个字段都能无损迁移。

清理时只移除本次创建并已核对目标的链接,再确认 .claude/ 源文件哈希未变。不要沿链接递归处理源目录。

P15:按硬门禁作决定

只有以下条件全部满足才进入小范围采用:

  • P01–P15 都记录实际证据,所有未执行项仍标“未验证”;
  • 原生基线和适配结果使用同一固定输入,产物可复算;
  • dry-run 没有扩大权限,父目录负例真实被拒绝;
  • 正常、not-found、取消和认证失败均有可判断终态;
  • API 路线的必需能力有目标适配器 conformance,不拿规范代替实现;
  • 配置路线没有覆盖普通文件,链接语义与清理通过;
  • 工具带来的维护减少大于新增的版本、凭据和诊断成本。

任一硬门禁失败就保留原生 Agent,并记录退出原因。等候选版本、支持范围或权限行为改变后,重新从 P02 开始,不复用旧结论。

常见失败按层定位

现象第一处证据不要推断
CLI 找不到 Agentharness list、PATH、原生基线统一 CLI 安装坏了
dry-run 权限过宽resolved args 与运行卡提示词会自动缩小权限
最后回答正确但应用报错JSONL 解析、终态、进程退出Agent 本身一定失败
API 文档有路由但调用不可用目标适配器、commit、conformance官网 API 表等于在线服务
Harnyard 显示 configured 但工具没读规则链接目标、目标工具语义symlink 存在就完成迁移
清理后源配置消失链接方向、清理命令记录非破坏性项目声明能覆盖误操作

如果仍不清楚模型、工具、状态、权限和 MCP 分别处于哪一层,先完成 Agent Harness H01–H12,再决定是否值得增加适配器。

官方资料

版本和参数,以这些来源为准

本文按实际任务重写,快速变化的信息仍应在操作前回到官方页面核对。

常见问题

继续操作前,先确认这些边界

coding agent harness 就是 Harness.io 吗?

不是同一类产品。本文三项工具分别处理 coding agent 的启动事件、跨 harness API 规范或配置映射;Harness.io 是 DevOps 平台,另有 DevOps Agent、Worker Agent、MCP 和 Code Quality 能力。

三个工具都安装再比较更客观吗?

不需要。先确定要统一哪一层,只试一个候选;同时叠加多个适配层会让权限、错误和配置来源更难定位。

一次 Hello World 成功能证明可迁移吗?

不能。至少还要验证工具事件、失败终态、取消、权限负例、产物、配置变化和清理;应用依赖的每项能力都要有当前适配器证据。

为什么必须先看 dry-run?

适配层可能把一个简单提示展开成更宽的 sandbox 或审批参数。先查看最终二进制、参数、工作目录和环境,才能决定是否允许真正运行。

继续学习

按当前任务继续推进