· Agent 工程 ·阅读时长约 7 分钟

Harness 工程概念:把 LLM 变成 Agent 的"外壳"

Harness(工程外壳) 是包裹在 LLM 外面的运行时环境,负责把一个"能对话的模型"改造成一个"能干活的 Agent"。

HarnessRuntime工程外壳LLM 应用

所属专题:Harness 工程 (harness·01)

Harness 工程概念:把 LLM 变成 Agent 的”外壳”

一、什么是 Harness

Harness(工程外壳) 是包裹在 LLM 外面的运行时环境,负责把一个”能对话的模型”改造成一个”能干活的 Agent”。

一句话定义:

Harness = LLM 之外的一切工程 —— 让模型拥有工具、记忆、上下文管理、协作能力的那层胶水。

类比

类比说明
人 vs 汽车LLM 是引擎,Harness 是底盘、油路、方向盘、座舱
CPU vs 电脑LLM 是 CPU,Harness 是主板 + 操作系统 + 外设
演员 vs 剧组LLM 是演员,Harness 是导演、道具、场景、剪辑

没有 Harness 的 LLM 只是一个”接收文本、返回文本”的函数。 有了 Harness,它才成为能读文件、写代码、调工具、开子任务、跨会话记忆的 Agent。


二、为什么需要 Harness

LLM 本身的”缺陷”

缺陷Harness 提供的解决方案
不能执行代码工具调用循环、沙盒执行
上下文有限压缩、摘要、渐进式披露
无状态、无记忆会话持久化、Memory 系统
不能读文件Read/Write/Edit 工具封装
不能协作Subagent 派发机制
不能自动化触发Hook / Event 系统
不认识”技能”Skills 加载协议
单独调用效率低请求缓存、并发调度

Harness 补齐了 LLM 的所有”非智能”能力。


三、Harness 的核心组件

一个完整的 Agent Harness 通常包含以下模块:

┌────────────────────────────────────────────────────┐
│                  Agent Harness                     │
├────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌─────────┐   │
│  │   工具系统    │  │ Context 管理 │  │ Skills  │   │
│  │  Tool Loop   │  │ Compression  │  │ Loader  │   │
│  └──────────────┘  └──────────────┘  └─────────┘   │
│  ┌──────────────┐  ┌──────────────┐  ┌─────────┐   │
│  │  Subagent    │  │   Memory     │  │  Hooks  │   │
│  │ Orchestrator │  │    Store     │  │ System  │   │
│  └──────────────┘  └──────────────┘  └─────────┘   │
│  ┌──────────────┐  ┌──────────────┐  ┌─────────┐   │
│  │  Permission  │  │  MCP Client  │  │ Session │   │
│  │   Manager    │  │              │  │  State  │   │
│  └──────────────┘  └──────────────┘  └─────────┘   │
├────────────────────────────────────────────────────┤
│                     LLM (Model)                    │
└────────────────────────────────────────────────────┘

1. 工具执行循环(Tool Loop)

  • 接收模型的 tool_use
  • 分派到对应工具执行
  • 把结果作为 tool_result 回填
  • 循环直到模型输出最终文本

2. Context 管理

  • 窗口监控:接近上限时触发压缩
  • 摘要:把历史对话浓缩成 summary
  • 截断策略:保留系统 prompt + 近期消息
  • 缓存:Anthropic Prompt Caching / KV Cache 复用

3. Skills 加载器

  • 扫描 skill 目录
  • 注入元数据到 system prompt
  • 拦截 Skill 工具调用,读取正文
  • (详见 [[04-skills使用]])

4. Subagent 编排

  • 派发独立上下文的子任务
  • 管理生命周期、资源限制
  • 收集返回结果回传主 agent
  • 处理并发、隔离、超时

5. Memory 系统

  • 项目级:CLAUDE.md / AGENTS.md
  • 用户级:~/.claude/memory/
  • 类型化:user / feedback / project / reference
  • 每次会话自动注入

6. Hook 系统

  • 事件驱动:SessionStart、PreToolUse、PostToolUse、Stop、UserPromptSubmit
  • 可执行外部脚本
  • 修改/阻止工具调用
  • 注入额外上下文

7. Permission 管理

  • 工具白名单/黑名单
  • 危险操作确认
  • 模式:ask / allow / deny
  • 项目级 vs 用户级配置

8. MCP 客户端

  • 连接 MCP server
  • 动态发现工具/资源/prompt
  • 转发调用、返回结果

9. Session State

  • 对话历史持久化
  • 断点恢复
  • 分支切换

四、主流 Harness 一览

Harness定位特色能力
Claude CodeAnthropic 官方 CLI完整 Skills、MCP、Subagent、Hooks 生态
CursorIDE 集成深度编辑器集成、.cursorrules
WindsurfIDE + AgentCascade、多文件编辑、Memories
Codex CLIOpenAI 官方 CLIGPT 系模型专用
Aider终端 pair programmingGit 集成、diff 化编辑
deepagentsLangChain 出品Middleware 架构、多 Backend
OpenHands(原 OpenDevin)开源 SWE agent完整开发环境模拟
Continue.devIDE 插件自定义 provider 灵活

共同点:都在做同一件事 —— 用工程手段扩展 LLM 的能力边界。


五、Harness vs Framework vs Agent

三个概念常被混用,其实层次不同:

                 ┌──────────────────┐
                 │   Agent(个体)   │  ← 一个具体的智能体实例
                 │  "Code Reviewer" │
                 └────────┬─────────┘
                          │ 运行在

                 ┌──────────────────┐
                 │  Harness(外壳)  │  ← 让 LLM 变 Agent 的运行时
                 │  "Claude Code"   │
                 └────────┬─────────┘
                          │ 基于

                 ┌──────────────────┐
                 │ Framework(框架)│  ← 底层 SDK / 编排库
                 │   "LangGraph"    │
                 └────────┬─────────┘
                          │ 调用

                 ┌──────────────────┐
                 │   LLM(模型)     │  ← 智能核心
                 │   "Claude 4.7"   │
                 └──────────────────┘

关键区别

概念边界例子
Framework提供构建能力的库(API)LangChain, LangGraph, LlamaIndex
Harness面向用户的完整运行环境Claude Code, Cursor, Aider
Agent特定任务的智能体实例code-reviewer, deep-research

Framework 是零件商,Harness 是整车厂,Agent 是开出去的车。


六、Harness 的设计原则

1. 让智能归智能,让工程归工程

  • 模型负责决策(选工具、判断相关性、生成内容)
  • Harness 负责执行(读文件、调 API、管理状态)
  • 不把工程逻辑塞进 prompt,也不让模型做机械事务

2. 渐进式披露(Progressive Disclosure)

  • 元数据轻量常驻,正文按需加载
  • 应用于:Skills、MCP Tools、Files、Memory
  • 避免上下文爆炸

3. 可组合、可拔插

  • Tool、Skill、Subagent、Hook 都应能独立开发/替换
  • deepagents 的 Middleware 化是典型代表

4. 边界清晰的权限模型

  • 危险操作明确要用户确认
  • 只读 vs 写入 vs 网络 分级
  • 沙盒隔离子进程

5. 可观测、可调试

  • 完整的 tool call 日志
  • session 快照与回放
  • 中间状态可导出

6. 模型无关(Model Agnostic)

  • Harness 层不绑定特定 LLM 厂商
  • 通过 adapter 抽象不同 API 的差异
  • Claude Code 是反例(绑定 Claude),deepagents 是正例

七、Harness 的典型执行流程

[用户请求]

① Session 初始化
   ├─ 加载 Memory (CLAUDE.md, MEMORY.md)
   ├─ 扫描 Skills 元数据
   ├─ 连接 MCP servers
   └─ 触发 SessionStart hooks

② 构造首次 LLM 请求
   ├─ System prompt + Skills 列表 + Tools schema
   └─ 用户消息

③ 模型响应
   ├─ 文本 → 直接输出给用户
   └─ tool_use → 进入工具循环

④ 工具执行循环
   ├─ PreToolUse hook 检查
   ├─ Permission 检查(必要时询问用户)
   ├─ 分派执行(Read / Bash / Skill / Agent / MCP …)
   ├─ PostToolUse hook
   ├─ tool_result 回填
   └─ 回到 ③

⑤ Context 监控
   ├─ 接近上限 → 触发压缩
   └─ 持久化会话状态

⑥ 会话结束
   └─ Stop hooks(如自动 commit、通知)

八、Harness 工程的兴起

为什么”Harness”最近才成为独立概念

早期(2022-2023):

  • 大家把 Agent 直接堆在 LangChain 里
  • Prompt + Tool + Loop 混杂在业务代码
  • “框架”和”运行时”没有分层

现在(2024-2026):

  • Claude Code 定义了范式 —— Harness 是一等公民
  • deepagents 把它标准化 —— Harness 可以独立于 Framework 存在
  • Codex/Cursor/Windsurf 各自造轮子 —— 说明这是刚需
  • Agent Skills 标准(agentskills.io) —— Harness 之间开始互通

Anthropic 的贡献

Anthropic 把 Harness 工程的方法论显式化:

  1. Skills 协议 —— 方法论的模块化
  2. MCP 协议 —— 工具的标准化接入
  3. Agent SDK —— Harness 组件的开源化
  4. Sub-agent 模型 —— 上下文隔离的原语化

九、判断一个 Harness 好不好的标准

维度好 Harness差 Harness
上手成本装完就能用要写一堆胶水
扩展性加 skill/tool 只需扔文件加功能要改核心
可观测完整 trace、可回放出错只能看模型输出
模型无关一键切换 provider绑死一家
安全分级权限、明确确认默认全开
性能缓存、并发、批处理每次都全量请求
社区有生态(skills/plugins/MCP servers)孤岛

十、Harness 工程的未来方向

1. 标准化协议层

  • Skills → agentskills.io
  • Tools → MCP
  • Memory → 尚无标准(AGENTS.md 是雏形)
  • Hook → 各家自定义,未来可能统一

2. 组件市场化

  • 类似 npm/pip:一个命令安装 skill/plugin/tool
  • 已有雏形:Claude Code Plugins、Cursor Marketplace

3. Harness 互操作

  • 一份 skill 能在 Claude Code、deepagents、Cursor 之间通用
  • 一个 subagent 定义能跨 harness 派发

4. Harness 作为服务

  • 云端托管的 Harness(Devin、E2B)
  • 无需本地环境,浏览器即可跑 Agent

5. 多 Agent 编排上升到 Harness 级

  • 不再是 CrewAI 那种”业务代码里定义”
  • 而是 Harness 原生支持”团队协作模式”

十一、一句话总结

Harness 工程 = 把 LLM 从”文本函数”改造成”能干活的 Agent”所需的一切运行时能力。 它决定了 Agent 的能力上限、开发体验、扩展方式。 未来 Agent 的竞争,很大程度上是 Harness 之战:谁的 Harness 更开放、更可扩展、更好用,谁就赢得开发者。


相关文档

  • [[02-agent开发框架]] —— 主流 Agent 框架/Harness 全景
  • [[03-skills原理]] —— Skills 是 Harness 的核心组件之一
  • [[04-skills使用]] —— Harness 如何让 skills “自动”工作
  • [[05-skills跨框架实践]] —— 不同 Harness 中 skills 的实现差异

评论