← 返回
IT技术

什么是 Agent Harness?Claude Code、DeepSeek Harness 和 Hermes Agent 背后的架构

✍️ zhirenhun 📅 2026/9/13 👁 29 阅读 ⏱ 49 分钟
什么是 Agent Harness?Claude Code、DeepSeek Harness 和 Hermes Agent 背后的架构

2026年8月13日,DeepSeek 在 GitHub 上发布了一个名为 deepseek-harness 的仓库。仅两天,它的星标就超过了 95,386,分叉达到 8,826(这本身只是一个虚荣指标,但如此迅速的激增预示着不仅仅是运气)。这在 2026 年是开发者工具在 GitHub 上增长最快的曲线之一(Flowtivitydeepseek-ai/deepseek-harness)。

九个月前,一名来自奥地利的独立工程师 Mario Zechner 推出了几乎相反的东西:一个名为 Pi 的编码代理,内置四种工具,几乎没有其他内容。Pi 在没有发布激增的情况下,经过大约一年的有机增长,突破了 91,600 颗星标。这只是来自尝试并继续使用它的工程师们的缓慢、复利式增长(earendil-works/pi)。

于是我们得到了两种截然不同的增长曲线,背后是两种截然不同的设计理念。而在它们之下,我们看到同一个词:harness。

如果你以任何方式构建 AI 代理,这个词现在已经无法回避,而对它的大多数解释要么是营销文案,要么是箭头过多的图示。

本文将定义什么是 agent harness,然后将目前最流行的十种 agent harness(从 Claude Code 到 DeepSeek Harness 再到 Pi)按照同样的五部分架构进行对比。

读完后,你将了解为什么今年开发者交流中“framework”一词被 harness 取代,以及 2026 年最响亮的 harness 在品牌之下到底有何不同。你还将获得一个可自行运行的 60 行 Python harness,并附带其周围技术栈的拆解(MCP、编排、可观测性),以及为你的团队选择合适 harness 的决策指南。

目录

什么是 Agent 绑定?

绑定是包裹 LLM 模型的运行时外壳。模型本身只做一件事:在给定文本流和可用工具列表的情况下,它会预测要说什么或接下来调用哪个工具。其余的一切由绑定来处理。

这种不光彩且乏味的管道包括调用模型的循环、执行工具的代码、管理 40 轮上下文的内存以及保护文件系统的沙盒。它是决定代理在工具调用失败后是否能够恢复还是仅仅挂起的基础设施。

图 1:每个 Agent 绑定必须实现的五个部分,以围绕模型核心的环形图表示。模型位于中心,仅预测下一条消息或工具调用。其周围包括:负责将调用分发到文件系统、shell 或外部 API 的工具路由器;决定哪些上下文会延续到下一轮的内存层;在执行开始前将大任务拆分为步骤的规划层;以及限制工具所能触及范围的沙盒边界。

环形箭头展示了模型的输出如何作为下一轮的输入反馈回来,这正是将单次预测转化为能够持续工作直至任务完成的代理的机制。

一位从业者的定义从另一个角度捕捉到了同样的形状。绑定提供了模型自身无法完成的一切:将目标从计划转化为行动的循环;对终端或文件系统等工具的访问;能够跨轮次存续的内存层;对其衍生出的任何子代理的协调;以及限制其所能触及范围的权限规则(CellCog)。

具体来说,当你在 Claude Code、Cursor 或 Aider 中输入请求时,会按以下顺序发生:

  1. 绑定会组装一个提示:包括你的请求、系统指令以及模型可以调用的工具模式列表。

  2. 模型通常会返回包含推理文本和一个或多个工具调用的混合输出(如 read_filerun_bashedit,或绑定所暴露的任何工具)。

  3. 绑定在沙盒内(理想情况下)执行每个工具调用,并捕获其输出。

  4. 绑定将工具输出追加回对话中,并再次调用模型。

  5. 循环会重复,有时会进行数十轮,直到模型给出最终答案,或者绑定达到轮次限制、成本限制,或被人工中断为止。

这个五步循环,有时被称为 agent 循环或 ReAct 循环(源自 2022 年首次将推理与行动描述为交织过程的论文:Yao 等人),是市面上所有 harness 共有的部分。

变化的地方,以及决定某个 harness 是否称职的关键,在于步骤 3 和步骤 4 所包裹的所有内容:执行前规划的质量、内存在上下文填满时如何决定保留或丢弃信息、沙盒的隔离程度,以及 harness 是否能够启动一个更小的第二个实例来处理子任务而不污染主对话。

只要这四个方面中的任何一个出现问题,从外部看,症状看起来完全一样:代理会停滞、忘记自己在做什么,或者在本来只需五轮就能完成的任务中耗尽你的上下文窗口。

从 Agent 框架到 Agent Harness:变化了什么

在 2023 年至 2025 年期间,“framework”一直主导着 agent 的讨论:比如 LangChain、AutoGen、CrewAI 等工具。当时的 framework 本质是库。你导入组件、自行选择模型调用、自己编写编排逻辑。它们提供了构建块。

harness 是另一种产品形式。它已经内置了该循环,并且该循环在记忆、规划和安全方面持有明确的观点。随后,你通过运行一条命令与它交互。

Anthropic 的 Claude Code 在 2025 年前让这一转变变得不可否认:这是一个终端原生的 agent,能够进行规划、编辑文件、运行测试并提交代码,而无需你编写任何编排逻辑。

到 2026 年,这种“内置循环”的模式在下表中列出的十款 harness 中普遍出现,从 Claude Code 到 DeepSeek Harness 再到 Cline,“harness” 一词成为大家描述这种形态的通用术语,与你自行组装的 framework 有所区别。

你可以从命名中看出这一点:DeepSeek 的官方仓库称为 deepseek-harness,这呼应了 Claude Code 所引入的 framework 到 harness 的转变。

LangChain 的 Deep Agents 表明,业界如今将 “harness” 视为一种独立的架构层,其发布旨在逆向工程 Claude Code 的 harness 为何有效,并将其重建为一个开放且与模型无关的库。

LangChain 对该项目的自身说明将其追溯到 Harrison Chase 的一个问题:“Claude Code 的哪些方面使其具有通用性,我们能否将这些特性抽象出来并进行泛化?”

LangChain 在这里也有明显的动机:它正在推出一种替代品,以对抗它正在研究的工具,而它所命名的四种机制无论由谁命名都仍然成立。

Deep Agents 包装了 Claude Code 的 harness 所依赖的四种具体机制:

这个列表值得记住,因为这四种机制(规划、沙盒、委托和上下文管理)是每个严肃的框架必须解决的工程问题,不管 Deep Agents 是否仍然是人们所指的框架。其他一切都是品牌。

代理框架解决方案一览

下表列出截至 2026 年 8 月最受开发者关注的 harness,以及它们各自在架构上的押注。

名称 构建者 优化用途 亮点
Claude Code Anthropic 端到端编码会话:规划、编辑、测试、提交 推广了规划工具+副代理模式,竞争对手如今纷纷效仿
DeepSeek Harness (dsh) DeepSeek AI 总运行时模块化 仅用两天便突破 95,000 GitHub Star。每个组件、模型、工具、沙箱、UI 均为可插拔插件(GitHub)。
Deep Agents LangChain 与模型无关地复现 Claude Code harness 模式 以开源库+CLI 形式交付,并可与任何可调用模型协作(LangChain)。
Hermes Agent Nous Research 跨渠道持续存在、能自我提升的助手 从单一进程触达 Telegram、Slack、Discord、WhatsApp 及邮件等平台,并拥有不断扩大的可共享技能公共中心(Nous ResearchGitHub)。
Pi Mario Zechner / Earendil Inc. 激进极简主义:内置四种工具,其余均为可选 TypeScript 扩展 凭借自然非发布增长,GitHub Star 超过 91,600(GitHub)。
Oh-My-Pi (omp) Can Bölük Pi 极致分支,内置 IDE:LSP 诊断、DAP 调试器、持久执行内核 用 Rust 重写了 Pi 引擎。
GitHub)。 CellCog CellCog 面向广泛知识工作的通用型超级代理调度系统 在 2026 年 8 月的 DeepResearch Bench 中排名第一(得分 55.78),原生视频、图像和文档输出内置于同一引擎中(CellCog) OpenHands All Hands AI 一个开放的、Docker 化的自主软件工程师,内置 Bash、浏览器和测试执行 以前称为 OpenDevin。Docker 是默认沙盒,将每个会话的 shell 命令和文件写入与主机隔离(OpenHands Docs)。 Aider Paul Gauthier and contributors 原生 Git 配对编程,每个代理步骤均为干净且可审查的提交 长期受到希望获得紧凑 diff 审查循环的工程师的青睐 Cline Cline Bot Inc.and contributors 与模型无关、需审批通过的 VS Code 扩展 默认情况下,每个文件编辑和命令在执行前都会暂停,等待您的确认

其中一些是专门用于编码的,而另一些(尤其是 CellCog 和 Hermes Agent)则试图将 harness 模式从代码推广到更广泛的知识工作领域。

专门用于编码的 harness 可以将代码仓库、测试套件和 diff 视为其工作单元。而面向通用知识工作的 harness 必须为研究、写作和多步骤业务任务发明等价结构,这更具挑战性且缺乏标准化。

如果您要评估超越代码范围的 harness,请先问:它的工作单元是什么?是否有人为其构建了 diff 的等价物,或者只是假设其存在?

关于 harness 应如何工作的三种竞争哲学

去掉营销的包装,2026 年 agent harness 繁荣背后隐藏着三种不同的工程赌注。

图 2:构建 harness 的三种赌注,以三个并列列呈现。第一列,DeepSeek Harness,以插件内核为中心,其中模型、沙盒、内存和 UI 均为可互换的模块。

第二列,Claude Code 和 Deep Agents,以四种固定机制为中心:规划、虚拟文件系统、子代理和上下文压缩。

第三列,Hermes Agent,以不断增长的技能库为中心,每次代理解决新问题时该库都会扩展。三列仅共享图 1 中的基础循环。该循环之上的一切都是对使代理在长时间会话中保持

DeepSeek Harness 构建在名为 Cordis 的元框架之上,其设计在 DeepSeek 的论文《时空可组合的编程范式》中有所描述,核心思想就是:一切都可以在运行时进行替换。(deepseek-ai/deepseek-harness

实际上,这意味着模型、沙盒、会话存储、调度循环甚至 UI 主题都可以作为可替换的模块。该 harness 还附带一种“创建者模式”,用于检查运行中的系统、在内存中测试 Cordis 插件,并将它们组合成新的配置(DeepSeek)。

此处的赌注是:没有单一架构能够永远获胜,因此制胜之道在于把架构本身当作配置文件。

赌注二:少量固定机制,执行得当。

Claude Code 及其后续的 LangChain Deep Agents 采取了相反的赌注:挑选四种机制(规划、沙盒文件系统访问、子代理委派和上下文压缩),并投入精力使每一种机制都可靠。

列表中的每种机制都足够熟悉,以至于竞争对手会直接照搬:上表将 Claude Code 视为推广规划加子代理模式的功臣,而其他 harness 现在都在复制这一模式。该赌注之所以有效,是因为这四种机制在每项任务中都会一起运行。跳过其中一种,其他机制可以暂时顶替,直到一次长时间的使用暴露出缺口。

赌注三:能够产生复利的记忆。

Hermes Agent 认为目前最大的未解决问题是会话之间会发生什么。大多数 harness 在每次新对话时都会重置为空白上下文。Hermes 则提供了一种机制:在解决非平凡问题时,将其方法保存为可复用的技能。随后,在面对类似的未来请求时,它会先查看技能库,而不是从零开始推理,这样随着使用时间的增长,它在处理重复任务时会变得更快(Nous Research)。

这既是优势,也是风险:如果技能库无限制增长,可能会演变成超出其原始编写目的的技术债务。结合原生调度以及在 Telegram、Slack、Discord 等平台上的渠道集成,其设计目标更接近于常驻服务器上的助手,而不是你打开使用一次后就关闭的工具。

第四个赌注位于前三个赌注之下:Pi 和 Oh-My-Pi 认为其他 harness 构建的大部分功能是多余的负担,而四种工具加上一个扩展系统,对明确需求的工程师来说,胜过一个功能完整的平台。

Pi 的 GitHub Star 已突破 91,600,这一增长主要源于自然的口碑传播而非发布活动,表明该赌注具有持久力。

所有四种赌注都有其道理。它们针对不同的失效模式进行优化:DeepSeek Harness 针对架构锁定进行优化,Claude Code 和 Deep Agents 针对不可靠的长会话行为进行优化,Hermes 针对跨会话的重复工作进行优化,而 Pi 针对臃肿进行优化。

因此,在你做出选择之前,先问问自己今天哪种失效模式在占用你的时间。答案将帮助你选择合适的 agent harness。

在 60 行 Python 以内构建最小的 harness

下面的示例使用 Anthropic 的 Messages API 构建了图 1 中的五步循环:一个模型、三个工具,以及一个持续调用模型直至不再请求工具调用的循环。你将在这 60 行代码中看到本节讨论的所有失效模式。

import subprocess
from anthropic import Anthropic

client = Anthropic()

TOOLS = [
    {
        "name": "read_file",
        "description": "Read a UTF-8 text file from the working directory.",
        "input_schema": {
            "type": "object",
            "properties": {"path": {"type": "string"}},
            "required": ["path"],
        },
    },
    {
        "name": "write_file",
        "description": "Write content to a file, overwriting it if it exists.",
        "input_schema": {
            "type": "object",
            "properties": {
                "path": {"type": "string"},
                "content": {"type": "string"},
            },
            "required": ["path", "content"],
        },
    },
    {
        "name": "run_bash",
        "description": "Run a shell command inside the sandbox directory and return its output.",
        "input_schema": {
            "type": "object",
            "properties": {"command": {"type": "string"}},
            "required": ["command"],
        },
    },
]

def execute_tool(name, tool_input):
    if name == "read_file":
        return open(tool_input["path"]).read()
    if name == "write_file":
        with open(tool_input["path"], "w") as f:
            f.write(tool_input["content"])
        return f"wrote {len(tool_input['content'])} bytes to {tool_input['path']}"
    if name == "run_bash":
        result = subprocess.run(
            tool_input["command"],
            shell=True,
            cwd="./sandbox",
            capture_output=True,
            text=True,
            timeout=30,
        )
        return result.stdout + result.stderr
    raise ValueError(f"unknown tool: {name}")

def run_harness(task, max_turns=15):
    messages = [{"role": "user", "content": task}]

    for _ in range(max_turns):
        response = client.messages.create(
            model="claude-sonnet-5",
            max_tokens=4096,
            tools=TOOLS,
            messages=messages,
        )
        messages.append({"role": "assistant", "content": response.content})

        if response.stop_reason != "tool_use":
            return response.content[0].text

        tool_results = []
        for block in response.content:
            if block.type == "tool_use":
                output = execute_tool(block.name, block.input)
                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": output,
                })
        messages.append({"role": "user", "content": tool_results})

    return "stopped: hit max_turns without a final answer"

运行 run_harness("Write a Python script in sandbox/hello.py that prints the first 10 Fibonacci numbers, then run it and show me the output.") 并观察轮次如何展开:模型写入文件,调用 run_bash 执行它,读取输出,然后才产生最终的文本答案。上面表格中的每个生产 harness 都是此形状的更工程化版本。

Claude Code 在第一轮之前添加了一个规划步骤,并在每个 run_bash 等价操作之前添加了一个权限门。Deep Agents 添加了一个虚拟文件系统,以及一个中间件层,在 messages 超过模型上下文窗口之前对其进行压缩。DeepSeek Harness 使得 TOOLS 列表和模型客户端本身在运行时可互换。

这个玩具循环与严肃循环之间的差距完全体现在可靠性工程上:工具调用失败时会发生什么,第 50 轮会发生什么,以及什么阻止了沙箱触碰 ./sandbox 之外的任何东西。

execute_tool 中既不会捕获格式错误的响应,也不会捕获出错的工具,因此一次错误的工具调用可能会让模型反复陷入同一个错误结果的循环。您可以自行添加重试路径,否则 harness 默认会一直这样做。

此例中有两点值得更仔细地审视。首先,cwd="./sandbox" 是一个承载安全的边界:没有它,run_bash 可以执行宿主用户能执行的任何操作,这就是为什么每个严肃的 harness 都会在容器或受限目录中运行工具执行。这行代码在重构过程中很容易被意外删除,丢失它也很危险。

其次,max_turns=15 之所以存在,是因为这里没有任何东西告诉模型自行停止。如果您省略它,一个既没有轮次限制也没有成本限制的 harness 将会一直循环,并在模型不断请求工具的情况下持续消耗 token。如果您在重构过程中忘记了这一行,从外部看故障表现完全一样:一个永不返回的作业,以及一个会持续攀升的 token 账单,直到有人手动终止进程。

代理 Harness 解决方案栈

harness 不会单独运行。在几乎所有的生产代理部署中,会出现三个相邻的层次,了解每一层的起止位置,可以避免让 harness 去解决实际上属于上一层的问题。如果跳过这种映射,您将花费一周时间来调试 harness,而实际上错误在于沙箱中。

图 3:四个水平层,从底部到顶部堆叠。底层是协议层,即 Model Context Protocol(MCP)。这是一个共享标准,使得任何 harness 都能以相同的方式与任何外部工具或数据源通信。第二层是 harness 本身,即图 1 中的循环。

第三层是编排框架,位于单代理 harness 之上,负责协调多个代理或长期运行的有状态工作流:LangGraph、CrewAI、AG2、Mastra 和 DSPy 就位于此层。

最上层被绘制为两侧面板而非第四条横向带,是可观测性与沙箱:Langfuse、LangSmith 等工具会监视其下方的所有层,而 E2B 和 Modal 提供了 harness 沙箱运行的隔离执行环境。

协议层:MCP

Model Context Protocol 是一个开放标准,最初由 Anthropic 在 2024 年 11 月提出,用以以统一的方式将模型与外部工具、文件和数据源连接起来(Anthropic)。到 2025 年底,它已迁移至 Linux Foundation 下的 Agentic AI Foundation,获得 Anthropic、OpenAI 和 Block 的支持(Wikipedia)。

harness 通常会从 MCP 配置文件加载其工具列表,而不是从你手写的代码中读取:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/project"]
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
    }
  }
}

您在此添加的每个 MCP 服务器都会在 TOOLS 中以工具的形式可用,无需您编写任何新的 execute_tool 分支。编写一次集成,任何 MCP 兼容的 harness(如 Claude Code、Deep Agents、DeepSeek Harness 或您自己构建的)都可以使用它。这就是协议层的全部论点,一句话概括。

编排层

一个 harness 在单个循环中运行一个 agent。当您需要多个 agent 在具状态、长期运行的工作流中协作,并分配如规划者、研究者、审阅者等专门角色时,您就进入了编排框架的领域。在这里选择错误的框架会让您花费数月时间,而只需几行代码即可解决。

  1. LangGraph 将多智能体工作流建模为带有检查点和时间旅行调试的图,并在受监管公司的有状态生产工作流中得到广泛应用(GitHub

  2. CrewAI 围绕按角色定义智能体并让它们在共享任务上协作而构建

  3. AG2 是微软原始 AutoGen 项目的社区维护继承者,2026 年转向基于可组合中间件的异步事件驱动运行时(GitHubpickaxe.co

  4. Mastra 是一个以 TypeScript 为先的智能体框架,在 2026 年 1 月达到 1.0 版本后,GitHub star 超过 22,000,每周 npm 下载量达 300,000(pickaxe.coGitHub

  5. 来自 Stanford NLP 的 DSPy 将提示工程视为更接近编译而非手工撰写的过程,以度量为目标优化提示(GitHub

可观测性与沙箱

当 agent 自行进行工具调用时,您需要看到它做了什么以及在哪里做的,以免盲目调试。Langfuse 和 LangSmith 会在整个会话中追踪每次模型调用、工具调用和 token 消耗,这就是您调试在第 34 轮失败的 harness 的方法(GitHubLangChain)。

Braintrust 和 Arize Phoenix 在该追踪基础上添加了严格的评估,这样你就可以像测试代码库一样对 harness 的行为进行回归测试(BraintrustArize-ai/phoenix)。并且对于沙箱本身——即 run_bash-style 工具调用执行的隔离环境——E2B 和 Modal 提供可一次性使用的微型 VM,使得 harness 能够在不接触宿主机的情况下运行不可信代码(GitHubModal)。

为什么炒作曲线和采用曲线会分歧

图 4:两个 GitHub star 增长曲线在大约 400 天的时间内绘制在同一坐标轴上。DeepSeek Harness 曲线几乎是垂直的:从零开始保持平坦,然后在 2026 年 8 月 13 日发布后的前两天内几乎瞬间飙升至 95,000 多颗星星,随后趋于平缓。

Pi 曲线则呈相反形状:从其 2025 年 8 月发布开始,到一年后超过 91,600 颗星星,呈浅而稳定、几乎是直线的增长,过程中没有任何单一的峰值。两条曲线最终大约位于同一地点。

将这两条曲线放在同一张图表上的目的在于:到达该点的路径形状对每条曲线来说是不同的:一条曲线反映了协调的发布和恰时的公告;另一条曲线反映了一年来工程师们逐个决定该工具值得继续安装。

发布时的峰值表明项目引起了关注。持续使用则说明该工具在六个月后是否仍然在终端中打开,这两个问题有不同的原因。

DeepSeek Harness 在两天内获得的 95,000 颗星星是一个可验证的数字(Flowtivity),但它在很大程度上受到时机、分发以及众所周知的模型实验室现有受众的影响。

Pi 达到类似星星数量的增长传递了一种不同的信号:没有人为它在一年前协调发布。它通过尝试了四工具编码代理的工程师之间的口碑传播积累起来,他们继续使用它并告诉其他工程师。

如果仅依赖发布周峰值选择的工具,第一天可能看起来同样强大,但如果维护者转向下一个公告,三个月后可能仍会让团队陷入困境。这两个数字 ninguno 不能说哪个更重要,但如果你要选择一个 harness 来赌上团队的工作流程,应研究曲线的形状,而不仅仅是其当前高度。

陡峭的峰值随后出现平缓的尾部表明该项目正在形成活跃的社区,在将生产工作流提交之前值得关注。长而浅且未中断的攀升表明工程师们在热度消退后仍继续安装使用它,这是一个更强的( albeit 较慢)信号。

如何为团队选择合适的 harness

将 harness 与你面前的失效模式匹配,而不是盲目跟随本周的热门趋势。依据星标而非你的瓶颈进行选择,这会导致团队后来花费数周进行迁移工作的错误。

  • 如果你需要一个能够可靠地完成端到端单个编码任务的代理,想要获得最紧凑、最易审查的每次提交 diff 循环,可以从 Claude Code、Deep Agents 或 Aider 开始。这三者都很好地实现了图 1 中的规划加沙盒模式。

  • 如果你担心供应商或架构锁定,并期望频繁更换模型:DeepSeek Harness 的插件一切设计以及 Deep Agents 的模型无关性都直接针对这一顾虑。这里若选择一个将某供应商的 SDK 硬编码到核心中的 harness,无论该供应商当前模型多么强大,都是错误的选择。

  • 如果同一类任务在周或月之间反复出现,并且你希望代理通过积累已有知识随时间变得更快:Hermes Agent 的复合技能库正是为这种模式而构建,尤其是当你还希望它能够从团队日常使用的聊天平台访问时。

  • 如果你希望审计表面积尽可能小,并且愿意自行编写缺失的扩展:Pi 的四工具核心,或者如果你特别需要 IDE 级别的工具、LSP 诊断和调试器,则可以选择 Oh-My-Pi——它们都建立在同一个最小基础之上。

  • 如果你需要多个代理在长时间运行的有状态进程中协作:这个问题位于 harness 之上的一个层面。此时应升级到 LangGraph、CrewAI、AG2 或 Mastra。

无论你选择哪种方案,从第一天起都应将可观测性层视为必不可少。如果在无人值守运行的第 30 次轮次出现故障,没有任何追踪信息的 harness 将成为调试噩梦。若同时挂载 Langfuse 或 LangSmith,同样的故障只需五分钟即可修复。为省去下午的设置时间而跳过此步骤,首次出现代理在运行中途失败时,你将为此付出代价,且无人能说清原因。

无论选择哪种 harness,什么内容会被传承

本文中提到的具体工具名称在一年内可能会显得过时,因为该领域变化极快。长期有用的是图 1 中的五步循环、LangChain 在 Claude Code 架构中识别出的四种机制,以及图 3 中的分层堆栈。

接下来每月出现的任何新 harness,只要参照这三个参考点,你就能在一小时内判断它是否在结构上有真正的创新,还是仅仅在不同的插件系统下重新包装同样的循环,并伴随着更夸张的发布公告。

值得保留的技能是:读懂架构而不是读懂营销,这是这一类别无论如何工具名称更迭多快都无法让其过时的唯一要素。

结论

代理 harness 并不是一种神秘的新软件类别。它是运行时外壳,能够把模型的下一个 token 预测转化为能够规划、行动、检查自身工作并持续直至任务完成的代理。

harness 由五个部分构成,这些部分在每个实现中都会出现:循环、工具路由器、内存、规划以及沙盒边界。2026 年发生变化的只是规模。

足够多的团队交付了相互竞争的实现,以至于它们之间的架构差异值得研究。如今的格局从 DeepSeek 的插件一切内核和 Pi 的激进极简主义,到 Hermes Agent 的复合技能以及 Claude Code 和 Deep Agents 的四种固定机制。

上一节的数据印证了这一点:两天内获得 95,000 颗星,一年内获得 91,600 颗星,说明两条不同的路径指向了同一个结论。

亲自动手构建这个 60 行的版本。观察它如何循环。做完之后,市场上的每一个 harness 都不再看起来像魔法,而开始像是你可以根据其优势进行评估的工程决策。

接下来要探索的内容

访问我的 GitHub,探索我使用这个具备 AI 原生的工程流程构建并共享的 30+ 开源软件解决方案和开发者工具。

——

🧑‍💻

zhirenhun

一个热爱技术的程序员,喜欢分享前沿AI知识和开发经验。