【Harness Agent】源码剖析(一):项目全景——SOTA Coding Agent 的架构哲学
2026/5/10 13:30:46 网站建设 项目流程

【Harness Agent】源码剖析(一):项目全景——SOTA Coding Agent 的架构哲学

写在前面:拆完 OpenClaw(43 万行)、LangGraph(3 万行)、Pocket Flow(100 行)之后,今天我们来看一个"中间路线"的项目——Harness Agent。它不是最大的,不是最小的,但它是唯一在 Harness-Bench 上得分100%的开源 Coding Agent,超越了 Claude Code 和 Cursor。它的核心论点是:LLM 提供智能,Harness 提供一切其他——手(工具执行)、眼(文件读取)、记忆(Memory)、安全(沙箱+权限)、协作(多 Agent)。今天起,我将用3 篇文章,带你从源码层面彻底搞懂 Harness Agent 的每一个核心子系统。这是第一篇——理解 Harness Agent 的架构全貌


📑 文章目录

  • 📌 一、Harness Agent 是什么?不是什么?
  • 🏗️ 二、五层架构:从 CLI 到 Plugin 的分层设计
  • 🔄 三、Agent Loop:五阶段循环引擎
  • 📂 四、源码目录结构:16 个子包的精巧布局
  • 🤖 五、双 Agent 模式:Initializer + Coder
  • ⚖️ 六、Harness vs LangGraph vs OpenClaw:三种 Agent 哲学
  • 🔮 七、系列预告

📌 一、Harness Agent 是什么?不是什么?

1.1 Harness Agent 不是什么

很多人看到 “Harness Agent” 这个名字,第一反应是:这不就是又一个 Coding Agent 吗?和 Claude Code、Cursor、Aider 有什么区别?这种理解太浅了。Harness Agent 不是一个"编辑器插件"——它是一个完整的Agent 运行时基础设施。它不绑定任何 IDE,不绑定任何模型,甚至不绑定任何编程语言。

1.2 Harness Agent 是什么

Harness Agent 是一个开源的、模型无关的 Coding Agent 运行时,提供从 LLM 调用到工具执行、沙箱隔离、审计追溯的全栈基础设施。这句话里有四个关键词:

关键词含义为什么重要
开源MIT 协议,完全可审计安全敏感场景必须可审计
模型无关支持 Claude/GPT/Gemini/Ollama不被任何模型供应商锁定
Coding Agent 运行时不是框架,是运行时开箱即用,不需要"组装"
全栈基础设施工具+沙箱+权限+审计+记忆不是"只管编排",而是"端到端"

1.3 “Agent Harness” 概念

Harness 这个名字来自一个核心概念——Agent Harness。它的定义是:

An Agent Harness is the complete infrastructure that wraps around an LLM to make it a functional agent. The model provides intelligence; the harness provides hands, eyes, memory, and guardrails.

翻译过来就是:Harness 是包裹在 LLM 外面的完整基础设施。模型提供智能,Harness 提供手(工具执行)、眼(文件读取)、记忆(Memory)和护栏(安全机制)。

这个概念非常重要,因为它定义了 Harness 的设计边界——Harness 不关心 LLM 内部怎么"思考",只关心 LLM “想做什么"和"做了什么”。这种分离使得 Harness 可以适配任何 LLM,而不需要修改基础设施代码。


🏗️ 二、五层架构:从 CLI 到 Plugin 的分层设计

Harness Agent 的架构可以清晰地分为五层,每层职责明确,层间通过定义良好的接口通信:

2.1 五层概览

名称职责核心包
Layer 1CLI/SDK用户入口cli/
Layer 2Core EngineAgent Loop + 会话管理core/
Layer 3Agent SystemAgent 注册 + 双 Agent 模式agents/
Layer 4Infrastructure沙箱 + 权限 + 审计 + 可观测性sandbox/permissions/audit/
Layer 5Plugin EcosystemMCP + Skills + Hooks + Providersmcp/skills/hooks/providers/

2.2 层间通信

层间通信遵循一个简单原则:上层依赖下层,下层不知道上层存在。具体来说:

  • CLI/SDK 调用 Core Engine 的engine.py启动 Agent Loop
  • Core Engine 通过agents/registry.py获取 Agent 配置
  • Core Engine 通过sandbox/executor.py执行工具
  • Core Engine 通过providers/调用 LLM
  • 工具执行前后触发hooks/钩子

这种分层设计的好处是:每一层都可以独立测试和替换。比如,你可以用不同的 Provider(Claude/GPT/Ollama)而不影响 Core Engine 的逻辑;你可以用不同的 Sandbox(Docker/本地/远程)而不影响 Agent Loop 的流程。


🔄 三、Agent Loop:五阶段循环引擎

Harness Agent 的核心运行时是一个五阶段循环,定义在core/loop.pycore/engine.py中:

3.1 五阶段详解

Phase 1: Steering(导航)— 决定下一步做什么。Steering 模块读取当前上下文(对话历史 + 工作区状态),决定是继续推理、调用工具还是结束循环。这是整个循环的"大脑"。

Phase 2: LLM Call(模型调用)— 调用 LLM 生成响应。通过providers/适配不同的模型 API,支持流式输出。LLM 的响应可能包含文本输出或工具调用请求。

Phase 3: Tool Execution(工具执行)— 如果 LLM 请求调用工具,解析工具调用参数,通过tools/mcp/执行。工具执行在沙箱中进行,受权限系统约束。

Phase 4: Sandbox Validation(沙箱验证)— 在工具执行前和执行后,沙箱系统验证操作是否安全。包括:命令白名单检查、文件路径验证、网络访问限制。如果验证失败,拒绝执行并返回错误信息。

Phase 5: Audit(审计记录)— 记录所有工具调用、文件修改、模型响应到审计日志。支持回放、合规检查、事后追溯。

3.2 与其他框架的对比

维度Harness AgentLangGraphOpenClaw
循环模式五阶段串行循环BSP 四阶段并行双层循环(Attempt+Turn)
安全机制内置沙箱+权限+审计无内置安全PRISM 零 Fork 安全层
状态管理Session + ContextChannel + ReducerLane Queue + SessionKey
持久化Session 文件CheckpointMemory + SQLite
并行支持无(串行循环)天然并行Lane Queue 串行化

📂 四、源码目录结构:16 个子包的精巧布局

Harness Agent 的源码组织在src/harness/下,共 16 个子包,按职责分为 5 大模块:

4.1 核心模块(core/)

core/ ├── engine.py # Agent Loop 主引擎 ├── loop.py # 循环逻辑 ├── session.py # 会话管理 ├── steering.py # 导航决策 ├── context.py # 上下文组装 └── config.py # 配置管理

这是整个框架的心脏。engine.py是入口,loop.py定义循环逻辑,steering.py决定每一步的方向,session.py管理会话状态,context.py组装 LLM 的输入上下文。

4.2 Agent 模块(agents/)

agents/ ├── registry.py # Agent 注册表 └── manager.py # Agent 生命周期管理

Harness Agent 支持双 Agent 模式——Initializer Agent 负责规划和分解任务,Coder Agent 负责执行具体编码。两个 Agent 通过 Shared Context 协作。

4.3 基础设施模块

sandbox/ # 沙箱执行环境 permissions/ # 权限控制系统 audit/ # 审计日志 observability/ # 可观测性

这四个子包构成了 Harness 的"安全底座"。沙箱隔离工具执行,权限控制文件访问,审计记录所有操作,可观测性提供追踪和监控。

4.4 插件生态模块

providers/ # 多模型适配(Claude/GPT/Gemini/Ollama) tools/ # 内置工具集(Bash/文件/搜索/Git) mcp/ # MCP 协议集成 skills/ # 技能系统 hooks/ # 钩子机制

4.5 其他模块

cli/ # 命令行入口 ui/ # 终端 UI 渲染 types/ # 类型定义 memory/ # 记忆管理 ci/ # CI/CD 集成

🤖 五、双 Agent 模式:Initializer + Coder

5.1 为什么需要两个 Agent?

单个 Agent 面临一个根本矛盾:规划需要"大局观",执行需要"细节控"。一个 Agent 同时做两件事,容易顾此失彼——要么规划不够深入就急于编码,要么编码时忘记了整体架构。

Harness 的解法是双 Agent 模式

Agent职责特点
Initializer理解需求、分解任务、制定计划大局观、系统性、慢思考
Coder执行编码、调试修复、验证结果细节控、精确性、快执行

5.2 协作流程

  1. 用户输入任务描述
  2. Initializer Agent 分析需求,生成任务分解和执行计划
  3. 计划写入 Shared Context
  4. Coder Agent 读取计划,逐步执行每个子任务
  5. 每个子任务完成后,Coder 更新 Shared Context
  6. 如果 Coder 遇到无法解决的问题,回退到 Initializer 重新规划

这种模式的优势是:Initializer 只在需要时运行(通常只在会话开始时),大部分时间由 Coder 高效执行。这既保证了规划质量,又不会因为频繁的"重新规划"拖慢执行速度。


⚖️ 六、Harness vs LangGraph vs OpenClaw:三种 Agent 哲学

维度Harness AgentLangGraphOpenClaw
核心定位Coding Agent 运行时图计算编排引擎AI Gateway
设计哲学安全优先,全栈内置状态优先,图计算范式调度优先,Gateway 范式
代码量~2 万行~3 万行~43 万行
安全机制沙箱+权限+审计(内置)无内置安全PRISM 安全层
模型支持任意 OpenAI 兼容任意 LLMpi-mono 驱动
并行支持串行循环BSP 并行Lane Queue 串行
持久化Session 文件CheckpointMemory + SQLite
适用场景Coding Agent / DevOps通用工作流多平台 Agent

6.1 三种哲学

  • Harness:安全优先。所有工具执行都在沙箱中,所有操作都有审计记录。适合安全敏感的 Coding 场景。
  • LangGraph:状态优先。Channel/Reducer 精确管理状态,BSP 模型天然支持 Checkpoint。适合复杂的有状态工作流。
  • OpenClaw:调度优先。Gateway 统一调度 25+ 平台,Lane Queue 保证消息不串。适合多平台 Agent 部署。

🔮 七、系列预告

第二篇,我们将深入 Harness Agent 最核心的子系统——Core Engine 与 Steering

核心问题
engine.py 的 Agent Loop 是怎么启动和管理的?
steering.py 如何决定下一步是推理还是调用工具?
context.py 如何组装 LLM 的输入上下文?
session.py 如何管理会话状态和断点续跑?
双 Agent 模式在源码层面是怎么切换的?

关注我,不要错过后续更新!


🎁 总结速查卡

Harness Agent 核心概念

概念一句话解释
Agent Harness包裹在 LLM 外面的完整基础设施——手、眼、记忆、护栏
五阶段循环Steering → LLM → Tool → Sandbox → Audit
双 Agent 模式Initializer(规划)+ Coder(执行),通过 Shared Context 协作
沙箱安全命令白名单 + 文件隔离 + 网络限制 + 审计追溯
模型无关支持 Claude/GPT/Gemini/Ollama 等任意 OpenAI 兼容端点
Harness-BenchSOTA Coding Agent 基准,唯一 100% 得分的开源 Agent

五层架构速查

职责核心包
CLI/SDK用户入口cli/
Core EngineAgent Loop + 会话core/
Agent System注册 + 双 Agentagents/
Infrastructure沙箱+权限+审计sandbox/permissions/audit/
Plugin EcosystemMCP+Skills+Hooksmcp/skills/hooks/

一句话总结

Harness Agent 的核心论点是"Agent Harness"——LLM 提供智能,Harness 提供一切其他。五阶段循环(Steering → LLM → Tool → Sandbox → Audit)确保每一步都安全可控,双 Agent 模式(Initializer + Coder)确保规划与执行各司其职,16 个子包覆盖从 CLI 到 Plugin 的完整技术栈。它不是最大的框架,但它是唯一在 Harness-Bench 上得分 100% 的开源 Coding Agent——安全优先,全栈内置,模型无关。


参考链接

  • Harness Agent GitHub 仓库
  • Harness Agent PyPI
  • Harness SDK 教程
  • OpenHarness 官网
  • Harness-Bench 基准

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询