返回博客

Harness 还是 Hermes?两个名字很像的 Agent 概念,到底有什么区别

Harness 还是 Hermes?两个名字很像的 Agent 概念,到底有什么区别 Claude Code、Codex CLI、DeepSeek Harness 都可以被称为 Harness;我们正在使用的 Hermes 内部也做着类似工作。区别不在“有没有工具”,而在产品从哪一层开始,又最终交付到哪里。 我刚写完 DeepSeek Harness,又在

本文目录
  1. 01 第一次实验:主模型不会看图,我改了消息进入模型前的路径
  2. 02 Harness 不是模型,它负责让一次调用变成一段任务
  3. 03 第二次实验:给 Hermes 导入一个 WPS Skill
  4. 04 同样叫扩展,进入系统的位置不同
  5. Harness 插件:介入运行路径
  6. Hermes Skill:增加任务能力
  7. 05 Hermes 为什么不只是一个 Harness
  8. 06 为什么这两个词越来越容易混
  9. 07 最后,怎样用一句话区分
  10. 资料来源

Claude Code、Codex CLI、DeepSeek Harness 都可以被称为 Harness;我们正在使用的 Hermes 内部也做着类似工作。区别不在“有没有工具”,而在产品从哪一层开始,又最终交付到哪里。

Harness 与 Hermes:两个名字很像,为什么不是一回事?

我刚写完 DeepSeek Harness,又在 Hermes 里导入了一个 WPS 日历与待办 Skill。

两个名字摆在一起,很容易让人产生一种错觉:

Text
Harness
Hermes

只差几个字母;两边又都有模型、工具、Skills、会话和执行循环。

那它们是不是同一种东西,只是来自不同团队?

真正使用以后,我发现问题不能这样问。

Harness 更接近模型外面的运行机制;Hermes 则是一个已经把运行机制、用户入口、工具和长期系统组合起来的 Agent 产品。

这不是“谁比谁强”的横向比较,而是两个不同层级的概念。

下面不先堆定义。我们从两次刚刚发生的真实操作开始。


#01 第一次实验:主模型不会看图,我改了消息进入模型前的路径

在 DeepSeek Harness 的测试中,我给会话发送了一张图片,并问:“这个是谁?”

当前选择的 DeepSeek-V4-Flash High​ 明确不支持直接图片输入。换一个支持视觉的主模型当然是办法,但这次我没有换主模型,而是让自制的 vision-preprocess 插件先处理附件。

实际链路是:

Text
图片附件
→ vision-preprocess
→ 外部视觉模型读取原图
→ 生成文字描述
→ 描述注入 DeepSeek 会话
→ DeepSeek 基于文字继续回答

实验 A:原图输入与视觉结果注入

这张图里,A1 是图片附件进入会话;A2 则显示 vision-preprocess 和视觉识别文字进入上下文,随后 DeepSeek 使用这些文字生成回答。

需要强调一个容易写错的事实:

这个实验没有让 DeepSeek 主模型突然获得视觉能力。读取原图的是外部视觉模型,DeepSeek 接收到的是插件注入的文字描述。

插件改变的不是模型参数,而是消息进入主模型之前的运行路径

这正是理解 Harness 的第一个切口:模型只负责其中一部分,模型外面还有一套系统决定上下文怎么准备、工具何时执行、结果如何返回,以及任务是否继续。


#02 Harness 不是模型,它负责让一次调用变成一段任务

如果直接调用模型 API,最简单的流程通常是:

Text
输入 → 模型 → 输出

Agent 的任务却很少一次结束。

模型可能发现信息不够,需要读取文件;执行命令后,还要把结果放回上下文,再让模型判断下一步。信息已经足够时,它也可以跳过工具,直接回答。

一个简化后的 Harness 循环是:

Harness 如何组织上下文、模型、工具与执行循环

它处理的事情包括:

  • 准备当前上下文;
  • 调用模型;
  • 判断是否需要工具;
  • 管理工具执行与权限边界;
  • 把执行结果写回上下文;
  • 决定继续循环还是返回回答。

所以,模型负责推理,Harness 负责让任务继续推进。

这里的 Harness 不是某一个厂商独占的产品名。Claude Code、Codex CLI 和 DeepSeek Harness 都可以被理解为 Coding Harness:它们把模型带进代码仓库、文件系统、Shell、Git、测试与构建环境。

但不同产品对 Harness 的实现并不相同。

Claude Code 使用 CLAUDE.md​、权限系统、Bash 工具和可配置 Sandbox 组织项目环境;Codex CLI 使用 AGENTS.md​、项目级 .codex/config.toml、审批策略和可写目录控制运行边界;DeepSeek Harness 同样面向 Coding 场景,它的显著特点是通过 Cordis 强调插件化组合。

这些例子用来说明 Harness 有多种实现,不代表它们彼此继承,也不代表它们属于同一个产品家族。


#03 第二次实验:给 Hermes 导入一个 WPS Skill

再看另一次扩展。

我把自制的 wps-rili Skill 导入 Hermes。它没有修改 Hermes 的 Agent Loop,也没有在模型输入前增加预处理插件。

它做的是另一件事:告诉一个已经能工作的 Agent,如何通过 OpenCLI 操作 WPS 日历与个人待办。

链路是:

Text
用户请求
→ Hermes 理解意图并加载 wps-rili
→ Skill 约束操作步骤和安全边界
→ OpenCLI 连接 WPS 页面
→ Hermes 整理执行结果
→ 返回原对话

我现场做了只读验证,结果并不是四项全绿:

实验 B:Hermes WPS Skill 只读验证

真实结果如下:

  • opencli validate wps-rili 通过,14 条命令、0 错误、0 警告;
  • OpenCLI Daemon、浏览器扩展和连接状态正常;
  • calendar-list 成功返回 3 个日历资源;
  • 指定日期的个人待办查询返回 EMPTY_RESULT

EMPTY_RESULT 不能被改写成“明天没有安排”。工具给出的边界更谨慎:页面结构可能变化,也可能需要重新确认登录状态。

这次实验真正证明的是:

Hermes 已经能理解请求、选择 Skill、调用本地工具并把结果送回对话;但外部服务的每一次读取,仍受登录态、页面结构和适配器状态影响。

换句话说,wps-rili​ 扩展的是一个现成 Agent 可以完成的任务范围,而不是重新设计 Agent 内部的运行循环。


#04 同样叫扩展,进入系统的位置不同

把两次实验并排看,区别就清楚了。

#Harness 插件:介入运行路径

视觉插件发生在模型调用之前:

Text
原始消息
→ 插件预处理
→ 外部视觉能力
→ 上下文注入
→ 主模型

开发者改变了消息怎样进入 Agent Loop。

#Hermes Skill:增加任务能力

WPS Skill 发生在一个已运行的 Agent 之上:

Text
用户请求
→ Hermes
→ Skill 规则
→ OpenCLI
→ WPS

用户增加了 Agent 能可靠执行的一类工作。

两者都叫“扩展”,但开放的位置不同:

  • 插件可以改变运行路径;
  • Skill 更像可复用的操作规程;
  • OpenCLI、MCP 或其他工具负责连接外部系统;
  • Hermes 负责理解请求、组织执行并交付结果。

这也是为什么只看功能表很容易误判。两边都有模型、工具、Skills 和会话,不代表它们从同一个产品层级出发。


#05 Hermes 为什么不只是一个 Harness

Hermes 内部当然承担 Harness 类职责。

它同样要准备上下文、调用模型、执行工具、处理结果并决定下一步。没有这一层,Hermes 不可能完成文件操作、浏览器任务或 WPS 查询。

但用户实际拿到的 Hermes 不只是一段运行循环。

它还提供:

  • QQ、CLI、桌面端、Web 与 IDE 等交互入口;
  • 文件、终端、浏览器、Skills 和 MCP 等执行能力;
  • Memory、Cron、Webhook、Gateway 与 Profiles 等长期系统;
  • 多模型与 Provider 配置;
  • 让结果回到原聊天渠道的交付链路。

这意味着 Hermes 的产品边界已经越过“模型如何调用工具”,进入“Agent 如何长期出现在用户的真实工作中”。

Hermes 与 Harness 的职责关系

这张关系图需要按职责理解,而不是按软件依赖理解。

Hermes 内部有一层承担与 Agent Harness 相似的运行职责;Claude Code、Codex CLI、DeepSeek Harness 则是外部独立产品。Hermes 不包含、继承或代表其中任何一个。

相似的是职责,不是品牌归属,也不是软件谱系。


#06 为什么这两个词越来越容易混

因为 Agent 产品正在向彼此的方向生长。

Coding Harness 不再满足于只改代码。它们开始拥有 Skills、子 Agent、网页搜索、插件和远程任务。

通用 Agent 也不再只是聊天窗口。它们开始进入代码仓库、终端、浏览器和本地文件系统。

功能列表越来越接近,产品起点却依然不同:

  • Coding Harness 首先解决“模型怎样进入开发环境”;
  • Hermes 这类通用 Agent 产品首先解决“Agent 怎样进入用户的工作流并持续存在”。

因此,最有用的判断方式不是数功能,而是问三个问题:

  1. 用户首先从哪里进入它?
  2. 开发者可以介入执行链的哪一层?
  3. 它最终交付的是一套运行机制,还是一个长期可用的 Agent 产品?

#07 最后,怎样用一句话区分

如果只记住一句,可以记这个版本:

Harness 组织模型如何使用上下文和工具持续完成任务;Hermes 在这套运行能力之外,又提供了用户入口、扩展体系和长期系统。

更严格一点说:

  • Harness 是一个会随语境变化的架构词,不是统一行业标准;
  • Claude Code、Codex CLI、DeepSeek Harness 是具体的 Coding Harness 产品或实现;
  • Hermes 是具体的 Agent 产品,内部同样需要承担 Harness 类运行职责;
  • 职责相似,不表示产品包含、继承或同源。

我原本只是觉得两个名字很像。

真正把视觉插件和 WPS Skill 分别跑过一遍后,区别不再停留在定义上:一个实验改变了消息进入模型前的路径,另一个实验扩大了现成 Agent 能处理的任务。

名字只差几个字母,差别藏在 Agent 开始工作的那一层。


#资料来源

  1. OpenAI Codex CLI 官方文档:https://developers.openai.com/codex/cli/
  2. OpenAI Codex 配置文档:https://developers.openai.com/codex/config-basic/
  3. Claude Code 官方概览:https://code.claude.com/docs/en/overview
  4. Claude Code 安全说明:https://code.claude.com/docs/en/security
  5. DeepSeek Harness 官方网站:https://www.deepseek.com/harness/
  6. DeepSeek Harness 快速入门:https://deepseek-harness.github.io/deepseek-harness/guide/quickstart
  7. DeepSeek Harness GitHub:https://github.com/deepseek-ai/deepseek-harness
  8. Hermes Agent 文档:https://hermes-agent.nousresearch.com/docs

实验说明:Harness 视觉插件与 Hermes WPS Skill 的运行结果来自本文作者的本地测试环境。截图和终端摘录只证明文中明确指出的状态,不代表所有版本、账号或外部服务环境都会得到相同结果。

返回顶部

评论

还没有评论,来说点什么吧。

评论经发布者审核后公开