第17章 Harness 是 Agent 的操作系统 —— 一个深刻的类比

上一篇我们了解了 Agent 的完整生命周期。本章我们用一个类比深化理解——Harness 就是 Agent 的操作系统。

为什么这个类比很重要

一句话定义:Harness 为 Agent 提供运行环境,就像 OS 为程序提供运行环境。

Harness = Agent 的操作系统 定位:理解 Harness 核心作用的最佳类比

图表 代码
graph LR
    subgraph OS类比
        App[应用程序] -->|运行在| OS[操作系统]
        OS -->|管理| Hardware[硬件资源]
    end
    
    subgraph Harness类比
        Agent[Agent] -->|运行在| Harness[Harness]
        Harness -->|管理| Tools[工具/MCP/Skills]
    end
    
    OS类比 -.->|类比| Harness类比
graph LR
    subgraph OS类比
        App[应用程序] -->|运行在| OS[操作系统]
        OS -->|管理| Hardware[硬件资源]
    end
    
    subgraph Harness类比
        Agent[Agent] -->|运行在| Harness[Harness]
        Harness -->|管理| Tools[工具/MCP/Skills]
    end
    
    OS类比 -.->|类比| Harness类比
graph LR
    subgraph OS类比
        App[应用程序] -->|运行在| OS[操作系统]
        OS -->|管理| Hardware[硬件资源]
    end
    
    subgraph Harness类比
        Agent[Agent] -->|运行在| Harness[Harness]
        Harness -->|管理| Tools[工具/MCP/Skills]
    end
    
    OS类比 -.->|类比| Harness类比
graph LR
    subgraph OS类比
        App[应用程序] -->|运行在| OS[操作系统]
        OS -->|管理| Hardware[硬件资源]
    end
    
    subgraph Harness类比
        Agent[Agent] -->|运行在| Harness[Harness]
        Harness -->|管理| Tools[工具/MCP/Skills]
    end
    
    OS类比 -.->|类比| Harness类比

类比价值:

  • 易于理解:用熟悉的 OS 概念解释抽象的 Harness
  • 准确映射:每个 OS 组件都有 Harness 对应
  • 指导设计:借鉴 OS 设计思想设计 Harness

OS 与 Harness 的组件对应

核心组件对比

OS 组件OS 功能Harness 对应Harness 功能
内核资源管理、进程调度Agent Loop循环调度、状态管理
文件系统文件存储与管理工具层(Read/Write/Edit)文件操作工具
设备驱动外设访问接口MCP 服务器外部系统连接
权限管理用户权限控制权限系统操作审批边界
内存管理内存分配回收上下文管理messages 数组管理
进程调度多进程并发多 Agent 协作主/子 Agent 协作
系统调用用户态→内核态接口工具调用Agent→工具接口
环境变量运行环境配置CLAUDE.md项目约定配置
图表 代码
graph TB
    subgraph OS["操作系统"]
        Kernel[内核
进程调度] FileSystem[文件系统
文件管理] DeviceDriver[设备驱动
外设访问] Permission[权限管理
用户控制] Memory[内存管理
分配回收] Process[进程调度
并发管理] SysCall[系统调用
用户态接口] EnvVar[环境变量
运行配置] end subgraph Harness["Harness"] AgentLoop[Agent Loop
循环调度] FileTools[Read/Write/Edit
文件操作] MCP[MCP 服务器
外部连接] PermSystem[权限系统
审批边界] Context[上下文管理
messages 管理] MultiAgent[多 Agent
主/子协作] ToolCall[工具调用
调用接口] CLAUDEmd[CLAUDE.md
项目约定] end Kernel -.->|对应| AgentLoop FileSystem -.->|对应| FileTools DeviceDriver -.->|对应| MCP Permission -.->|对应| PermSystem Memory -.->|对应| Context Process -.->|对应| MultiAgent SysCall -.->|对应| ToolCall EnvVar -.->|对应| CLAUDEmd style OS fill:#E0E0FF style Harness fill:#FFE0E0
graph TB
    subgraph OS["操作系统"]
        Kernel[内核
进程调度] FileSystem[文件系统
文件管理] DeviceDriver[设备驱动
外设访问] Permission[权限管理
用户控制] Memory[内存管理
分配回收] Process[进程调度
并发管理] SysCall[系统调用
用户态接口] EnvVar[环境变量
运行配置] end subgraph Harness["Harness"] AgentLoop[Agent Loop
循环调度] FileTools[Read/Write/Edit
文件操作] MCP[MCP 服务器
外部连接] PermSystem[权限系统
审批边界] Context[上下文管理
messages 管理] MultiAgent[多 Agent
主/子协作] ToolCall[工具调用
调用接口] CLAUDEmd[CLAUDE.md
项目约定] end Kernel -.->|对应| AgentLoop FileSystem -.->|对应| FileTools DeviceDriver -.->|对应| MCP Permission -.->|对应| PermSystem Memory -.->|对应| Context Process -.->|对应| MultiAgent SysCall -.->|对应| ToolCall EnvVar -.->|对应| CLAUDEmd style OS fill:#E0E0FF style Harness fill:#FFE0E0
graph TB
    subgraph OS["操作系统"]
        Kernel[内核
进程调度] FileSystem[文件系统
文件管理] DeviceDriver[设备驱动
外设访问] Permission[权限管理
用户控制] Memory[内存管理
分配回收] Process[进程调度
并发管理] SysCall[系统调用
用户态接口] EnvVar[环境变量
运行配置] end subgraph Harness["Harness"] AgentLoop[Agent Loop
循环调度] FileTools[Read/Write/Edit
文件操作] MCP[MCP 服务器
外部连接] PermSystem[权限系统
审批边界] Context[上下文管理
messages 管理] MultiAgent[多 Agent
主/子协作] ToolCall[工具调用
调用接口] CLAUDEmd[CLAUDE.md
项目约定] end Kernel -.->|对应| AgentLoop FileSystem -.->|对应| FileTools DeviceDriver -.->|对应| MCP Permission -.->|对应| PermSystem Memory -.->|对应| Context Process -.->|对应| MultiAgent SysCall -.->|对应| ToolCall EnvVar -.->|对应| CLAUDEmd style OS fill:#E0E0FF style Harness fill:#FFE0E0
graph TB
    subgraph OS["操作系统"]
        Kernel[内核<br/>进程调度]
        FileSystem[文件系统<br/>文件管理]
        DeviceDriver[设备驱动<br/>外设访问]
        Permission[权限管理<br/>用户控制]
        Memory[内存管理<br/>分配回收]
        Process[进程调度<br/>并发管理]
        SysCall[系统调用<br/>用户态接口]
        EnvVar[环境变量<br/>运行配置]
    end
    
    subgraph Harness["Harness"]
        AgentLoop[Agent Loop<br/>循环调度]
        FileTools[Read/Write/Edit<br/>文件操作]
        MCP[MCP 服务器<br/>外部连接]
        PermSystem[权限系统<br/>审批边界]
        Context[上下文管理<br/>messages 管理]
        MultiAgent[多 Agent<br/>主/子协作]
        ToolCall[工具调用<br/>调用接口]
        CLAUDEmd[CLAUDE.md<br/>项目约定]
    end
    
    Kernel -.->|对应| AgentLoop
    FileSystem -.->|对应| FileTools
    DeviceDriver -.->|对应| MCP
    Permission -.->|对应| PermSystem
    Memory -.->|对应| Context
    Process -.->|对应| MultiAgent
    SysCall -.->|对应| ToolCall
    EnvVar -.->|对应| CLAUDEmd
    
    style OS fill:#E0E0FF
    style Harness fill:#FFE0E0

详细类比:逐层剖析

1. 内核 ↔ Agent Loop

OS 内核:

  • 进程调度(时间片轮转)
  • 资源管理(CPU、内存、I/O)
  • 中断处理(硬件中断、软中断)
  • 系统调用入口

Harness Agent Loop:

  • 循环调度(observe→think→act→feedback)
  • 状态管理(messages 数组、任务系统)
  • 工具调用处理(tool_use 事件)
  • Model API 入口
图表 代码
graph LR
    subgraph OSKernel["OS 内核"]
        K1[进程调度
时间片轮转] K2[资源管理
CPU/内存/IO] K3[中断处理
硬件/软中断] K4[系统调用
syscall入口] end subgraph AgentLoop["Agent Loop"] L1[循环调度
observe→think→act] L2[状态管理
messages/tasks] L3[工具处理
tool_use事件] L4[Model入口
API调用] end OSKernel -.->|类比| AgentLoop
graph LR
    subgraph OSKernel["OS 内核"]
        K1[进程调度
时间片轮转] K2[资源管理
CPU/内存/IO] K3[中断处理
硬件/软中断] K4[系统调用
syscall入口] end subgraph AgentLoop["Agent Loop"] L1[循环调度
observe→think→act] L2[状态管理
messages/tasks] L3[工具处理
tool_use事件] L4[Model入口
API调用] end OSKernel -.->|类比| AgentLoop
graph LR
    subgraph OSKernel["OS 内核"]
        K1[进程调度
时间片轮转] K2[资源管理
CPU/内存/IO] K3[中断处理
硬件/软中断] K4[系统调用
syscall入口] end subgraph AgentLoop["Agent Loop"] L1[循环调度
observe→think→act] L2[状态管理
messages/tasks] L3[工具处理
tool_use事件] L4[Model入口
API调用] end OSKernel -.->|类比| AgentLoop
graph LR
    subgraph OSKernel["OS 内核"]
        K1[进程调度<br/>时间片轮转]
        K2[资源管理<br/>CPU/内存/IO]
        K3[中断处理<br/>硬件/软中断]
        K4[系统调用<br/>syscall入口]
    end
    
    subgraph AgentLoop["Agent Loop"]
        L1[循环调度<br/>observe→think→act]
        L2[状态管理<br/>messages/tasks]
        L3[工具处理<br/>tool_use事件]
        L4[Model入口<br/>API调用]
    end
    
    OSKernel -.->|类比| AgentLoop

类比要点:

  • 调度中心:内核调度进程,Agent Loop 调度工具
  • 状态管理:内核管理进程状态,Agent Loop 管理 messages
  • 事件响应:内核响应中断,Agent Loop 响应 tool_use

2. 文件系统 ↔ 工具层

OS 文件系统:

  • 文件读写(open、read、write、close)
  • 目录管理(mkdir、rmdir、list)
  • 权限控制(chmod、chown)
  • 文件锁定(lock、unlock)

Harness 工具层:

  • Read/Write/Edit(文件读写编辑)
  • Glob/Grep(文件搜索)
  • Bash(命令执行)
  • 权限检查(deny/ask/allow)
图表 代码
graph TB
    subgraph FileSystem["文件系统"]
        F1[open/read/write
文件读写] F2[mkdir/rmdir
目录管理] F3[chmod/chown
权限控制] F4[lock/unlock
文件锁定] end subgraph ToolLayer["工具层"] T1[Read/Write/Edit
文件操作] T2[Glob/Grep
文件搜索] T3[Bash
命令执行] T4[Permissions
权限检查] end FileSystem -.->|类比| ToolLayer
graph TB
    subgraph FileSystem["文件系统"]
        F1[open/read/write
文件读写] F2[mkdir/rmdir
目录管理] F3[chmod/chown
权限控制] F4[lock/unlock
文件锁定] end subgraph ToolLayer["工具层"] T1[Read/Write/Edit
文件操作] T2[Glob/Grep
文件搜索] T3[Bash
命令执行] T4[Permissions
权限检查] end FileSystem -.->|类比| ToolLayer
graph TB
    subgraph FileSystem["文件系统"]
        F1[open/read/write
文件读写] F2[mkdir/rmdir
目录管理] F3[chmod/chown
权限控制] F4[lock/unlock
文件锁定] end subgraph ToolLayer["工具层"] T1[Read/Write/Edit
文件操作] T2[Glob/Grep
文件搜索] T3[Bash
命令执行] T4[Permissions
权限检查] end FileSystem -.->|类比| ToolLayer
graph TB
    subgraph FileSystem["文件系统"]
        F1[open/read/write<br/>文件读写]
        F2[mkdir/rmdir<br/>目录管理]
        F3[chmod/chown<br/>权限控制]
        F4[lock/unlock<br/>文件锁定]
    end
    
    subgraph ToolLayer["工具层"]
        T1[Read/Write/Edit<br/>文件操作]
        T2[Glob/Grep<br/>文件搜索]
        T3[Bash<br/>命令执行]
        T4[Permissions<br/>权限检查]
    end
    
    FileSystem -.->|类比| ToolLayer

类比要点:

  • 存储操作:文件系统管理磁盘,工具层管理代码库
  • 抽象接口:文件系统抽象磁盘,工具层抽象操作系统
  • 权限控制:文件系统有文件权限,工具层有操作权限

3. 设备驱动 ↔ MCP 服务器

OS 设备驱动:

  • 硬件抽象(显卡、网卡、声卡)
  • 标准接口(统一设备接口)
  • 动态加载(按需加载驱动)
  • 厂商定制(厂商提供驱动)

Harness MCP 服务器:

  • 外部系统抽象(数据库、云服务、企业 API)
  • 标准协议(统一的 MCP 协议)
  • 动态注册(按需连接 MCP)
  • 第三方定制(开源/企业 MCP)
图表 代码
graph TB
    subgraph DeviceDriver["设备驱动"]
        D1[硬件抽象
显卡/网卡/声卡] D2[标准接口
统一设备API] D3[动态加载
按需加载驱动] D4[厂商定制
厂商提供驱动] end subgraph MCPServer["MCP 服务器"] M1[系统抽象
数据库/云服务/API] M2[标准协议
MCP协议] M3[动态注册
按需连接] M4[第三方定制
开源/企业MCP] end DeviceDriver -.->|类比| MCPServer
graph TB
    subgraph DeviceDriver["设备驱动"]
        D1[硬件抽象
显卡/网卡/声卡] D2[标准接口
统一设备API] D3[动态加载
按需加载驱动] D4[厂商定制
厂商提供驱动] end subgraph MCPServer["MCP 服务器"] M1[系统抽象
数据库/云服务/API] M2[标准协议
MCP协议] M3[动态注册
按需连接] M4[第三方定制
开源/企业MCP] end DeviceDriver -.->|类比| MCPServer
graph TB
    subgraph DeviceDriver["设备驱动"]
        D1[硬件抽象
显卡/网卡/声卡] D2[标准接口
统一设备API] D3[动态加载
按需加载驱动] D4[厂商定制
厂商提供驱动] end subgraph MCPServer["MCP 服务器"] M1[系统抽象
数据库/云服务/API] M2[标准协议
MCP协议] M3[动态注册
按需连接] M4[第三方定制
开源/企业MCP] end DeviceDriver -.->|类比| MCPServer
graph TB
    subgraph DeviceDriver["设备驱动"]
        D1[硬件抽象<br/>显卡/网卡/声卡]
        D2[标准接口<br/>统一设备API]
        D3[动态加载<br/>按需加载驱动]
        D4[厂商定制<br/>厂商提供驱动]
    end
    
    subgraph MCPServer["MCP 服务器"]
        M1[系统抽象<br/>数据库/云服务/API]
        M2[标准协议<br/>MCP协议]
        M3[动态注册<br/>按需连接]
        M4[第三方定制<br/>开源/企业MCP]
    end
    
    DeviceDriver -.->|类比| MCPServer

类比要点:

  • 扩展能力:驱动扩展硬件,MCP 扩展外部系统
  • 标准接口:驱动统一设备接口,MCP 统一工具协议
  • 生态丰富:驱动由厂商提供,MCP 由开源/企业提供

4. 权限管理 ↔ 权限系统

OS 权限管理:

  • 用户权限(root、user、guest)
  • 文件权限(r、w、x)
  • 操作审批(sudo 密码)
  • 权限继承(进程继承用户权限)

Harness 权限系统:

  • 操作权限(deny、ask、allow)
  • 工具权限(Read、Write、Bash)
  • 操作审批(ask 用户确认)
  • 权限继承(子 Agent 继承权限)
图表 代码
graph TB
    subgraph OSPermission["OS 权限管理"]
        P1[用户权限
root/user/guest] P2[文件权限
r/w/x] P3[操作审批
sudo密码] P4[权限继承
进程继承权限] end subgraph HarnessPerm["Harness 权限系统"] H1[操作权限
deny/ask/allow] H2[工具权限
Read/Write/Bash] H3[操作审批
用户确认] H4[权限继承
子Agent继承] end OSPermission -.->|类比| HarnessPerm
graph TB
    subgraph OSPermission["OS 权限管理"]
        P1[用户权限
root/user/guest] P2[文件权限
r/w/x] P3[操作审批
sudo密码] P4[权限继承
进程继承权限] end subgraph HarnessPerm["Harness 权限系统"] H1[操作权限
deny/ask/allow] H2[工具权限
Read/Write/Bash] H3[操作审批
用户确认] H4[权限继承
子Agent继承] end OSPermission -.->|类比| HarnessPerm
graph TB
    subgraph OSPermission["OS 权限管理"]
        P1[用户权限
root/user/guest] P2[文件权限
r/w/x] P3[操作审批
sudo密码] P4[权限继承
进程继承权限] end subgraph HarnessPerm["Harness 权限系统"] H1[操作权限
deny/ask/allow] H2[工具权限
Read/Write/Bash] H3[操作审批
用户确认] H4[权限继承
子Agent继承] end OSPermission -.->|类比| HarnessPerm
graph TB
    subgraph OSPermission["OS 权限管理"]
        P1[用户权限<br/>root/user/guest]
        P2[文件权限<br/>r/w/x]
        P3[操作审批<br/>sudo密码]
        P4[权限继承<br/>进程继承权限]
    end
    
    subgraph HarnessPerm["Harness 权限系统"]
        H1[操作权限<br/>deny/ask/allow]
        H2[工具权限<br/>Read/Write/Bash]
        H3[操作审批<br/>用户确认]
        H4[权限继承<br/>子Agent继承]
    end
    
    OSPermission -.->|类比| HarnessPerm

类比要点:

  • 安全边界:OS 保护系统,Harness 保护用户环境
  • 分级控制:OS 有用户分级,Harness 有操作分级
  • 审批机制:OS 有 sudo,Harness 有 ask

5. 内存管理 ↔ 上下文管理

OS 内存管理:

  • 内存分配(malloc、free)
  • 虚拟内存(页表、换页)
  • 内存压缩(swap、压缩内存)
  • 进程隔离(每个进程独立内存)

Harness 上下文管理:

  • messages 分配(追加消息)
  • 上下文窗口(200K tokens)
  • 上下文压缩(四层压缩)
  • Agent 隔离(子 Agent 独立上下文)
图表 代码
graph TB
    subgraph MemoryMgmt["OS 内存管理"]
        M1[内存分配
malloc/free] M2[虚拟内存
页表/换页] M3[内存压缩
swap/压缩] M4[进程隔离
独立内存空间] end subgraph ContextMgmt["Harness 上下文管理"] C1[messages分配
追加消息] C2[上下文窗口
200K tokens] C3[上下文压缩
四层压缩] C4[Agent隔离
独立上下文] end MemoryMgmt -.->|类比| ContextMgmt
graph TB
    subgraph MemoryMgmt["OS 内存管理"]
        M1[内存分配
malloc/free] M2[虚拟内存
页表/换页] M3[内存压缩
swap/压缩] M4[进程隔离
独立内存空间] end subgraph ContextMgmt["Harness 上下文管理"] C1[messages分配
追加消息] C2[上下文窗口
200K tokens] C3[上下文压缩
四层压缩] C4[Agent隔离
独立上下文] end MemoryMgmt -.->|类比| ContextMgmt
graph TB
    subgraph MemoryMgmt["OS 内存管理"]
        M1[内存分配
malloc/free] M2[虚拟内存
页表/换页] M3[内存压缩
swap/压缩] M4[进程隔离
独立内存空间] end subgraph ContextMgmt["Harness 上下文管理"] C1[messages分配
追加消息] C2[上下文窗口
200K tokens] C3[上下文压缩
四层压缩] C4[Agent隔离
独立上下文] end MemoryMgmt -.->|类比| ContextMgmt
graph TB
    subgraph MemoryMgmt["OS 内存管理"]
        M1[内存分配<br/>malloc/free]
        M2[虚拟内存<br/>页表/换页]
        M3[内存压缩<br/>swap/压缩]
        M4[进程隔离<br/>独立内存空间]
    end
    
    subgraph ContextMgmt["Harness 上下文管理"]
        C1[messages分配<br/>追加消息]
        C2[上下文窗口<br/>200K tokens]
        C3[上下文压缩<br/>四层压缩]
        C4[Agent隔离<br/>独立上下文]
    end
    
    MemoryMgmt -.->|类比| ContextMgmt

类比要点:

  • 资源限制:内存有上限,上下文窗口有上限
  • 压缩机制:内存可 swap,上下文可压缩
  • 隔离保护:进程内存隔离,Agent 上下文隔离

6. 进程调度 ↔ 多 Agent 协作

OS 进程调度:

  • 多进程并发(时间片轮转)
  • 进程通信(管道、共享内存、消息队列)
  • 父子进程(fork、exec)
  • 进程状态(运行、阻塞、结束)

Harness 多 Agent 协作:

  • 多 Agent 并发(主/子 Agent)
  • Agent 通信(Agent 工具、消息传递)
  • 主子 Agent(派发子 Agent)
  • Agent 状态(初始化、循环、完成)
图表 代码
graph TB
    subgraph ProcessSched["OS 进程调度"]
        P1[多进程并发
时间片轮转] P2[进程通信
管道/共享内存] P3[父子进程
fork/exec] P4[进程状态
运行/阻塞/结束] end subgraph MultiAgent["Harness 多 Agent"] A1[多Agent并发
主/子Agent] A2[Agent通信
消息传递] A3[主子Agent
派发子Agent] A4[Agent状态
初始化/循环/完成] end ProcessSched -.->|类比| MultiAgent
graph TB
    subgraph ProcessSched["OS 进程调度"]
        P1[多进程并发
时间片轮转] P2[进程通信
管道/共享内存] P3[父子进程
fork/exec] P4[进程状态
运行/阻塞/结束] end subgraph MultiAgent["Harness 多 Agent"] A1[多Agent并发
主/子Agent] A2[Agent通信
消息传递] A3[主子Agent
派发子Agent] A4[Agent状态
初始化/循环/完成] end ProcessSched -.->|类比| MultiAgent
graph TB
    subgraph ProcessSched["OS 进程调度"]
        P1[多进程并发
时间片轮转] P2[进程通信
管道/共享内存] P3[父子进程
fork/exec] P4[进程状态
运行/阻塞/结束] end subgraph MultiAgent["Harness 多 Agent"] A1[多Agent并发
主/子Agent] A2[Agent通信
消息传递] A3[主子Agent
派发子Agent] A4[Agent状态
初始化/循环/完成] end ProcessSched -.->|类比| MultiAgent
graph TB
    subgraph ProcessSched["OS 进程调度"]
        P1[多进程并发<br/>时间片轮转]
        P2[进程通信<br/>管道/共享内存]
        P3[父子进程<br/>fork/exec]
        P4[进程状态<br/>运行/阻塞/结束]
    end
    
    subgraph MultiAgent["Harness 多 Agent"]
        A1[多Agent并发<br/>主/子Agent]
        A2[Agent通信<br/>消息传递]
        A3[主子Agent<br/>派发子Agent]
        A4[Agent状态<br/>初始化/循环/完成]
    end
    
    ProcessSched -.->|类比| MultiAgent

类比要点:

  • 并发协作:OS 多进程,Harness 多 Agent
  • 通信机制:OS 进程通信,Agent 消息传递
  • 层级关系:OS 父子进程,Harness 主子 Agent

7. 系统调用 ↔ 工具调用

OS 系统调用:

  • 用户态→内核态(syscall)
  • 标准接口(read、write、open)
  • 参数传递(寄存器、栈)
  • 返回值(错误码、结果)

Harness 工具调用:

  • Agent→工具层(tool_use)
  • 标准接口(Read、Write、Bash)
  • 参数传递(JSON 参数)
  • 返回值(工具输出)
图表 代码
graph LR
    subgraph SysCall["系统调用"]
        S1[用户态程序]
        S2[syscall接口]
        S3[内核态执行]
        S4[返回结果]
    end
    
    subgraph ToolCall["工具调用"]
        T1[Agent推理]
        T2[tool_use接口]
        T3[工具层执行]
        T4[返回输出]
    end
    
    S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
    T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
    
    SysCall -.->|类比| ToolCall
graph LR
    subgraph SysCall["系统调用"]
        S1[用户态程序]
        S2[syscall接口]
        S3[内核态执行]
        S4[返回结果]
    end
    
    subgraph ToolCall["工具调用"]
        T1[Agent推理]
        T2[tool_use接口]
        T3[工具层执行]
        T4[返回输出]
    end
    
    S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
    T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
    
    SysCall -.->|类比| ToolCall
graph LR
    subgraph SysCall["系统调用"]
        S1[用户态程序]
        S2[syscall接口]
        S3[内核态执行]
        S4[返回结果]
    end
    
    subgraph ToolCall["工具调用"]
        T1[Agent推理]
        T2[tool_use接口]
        T3[工具层执行]
        T4[返回输出]
    end
    
    S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
    T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
    
    SysCall -.->|类比| ToolCall
graph LR
    subgraph SysCall["系统调用"]
        S1[用户态程序]
        S2[syscall接口]
        S3[内核态执行]
        S4[返回结果]
    end
    
    subgraph ToolCall["工具调用"]
        T1[Agent推理]
        T2[tool_use接口]
        T3[工具层执行]
        T4[返回输出]
    end
    
    S1 -->|调用| S2 -->|切换| S3 -->|返回| S4
    T1 -->|调用| T2 -->|执行| T3 -->|返回| T4
    
    SysCall -.->|类比| ToolCall

类比要点:

  • 边界跨越:syscall 跨用户/内核态,tool_use 跨 Agent/工具层
  • 标准接口:syscall 有标准 API,tool_use 有标准 Schema
  • 参数返回:syscall 有参数返回,tool_use 有参数输出

8. 环境变量 ↔ CLAUDE.md

OS 环境变量:

  • 运行环境配置(PATH、HOME)
  • 进程继承(子进程继承环境变量)
  • 动态修改(export、unset)
  • 项目特定(.env 文件)

Harness CLAUDE.md:

  • 项目约定配置(架构、约定)
  • Agent 继承(注入 System Prompt)
  • 动态修改(修改 CLAUDE.md)
  • 项目特定(每个项目不同)
图表 代码
graph TB
    subgraph EnvVar["环境变量"]
        E1[运行环境配置
PATH/HOME] E2[进程继承
子进程继承] E3[动态修改
export/unset] E4[项目特定
.env文件] end subgraph CLAUDEmd["CLAUDE.md"] C1[项目约定配置
架构/约定] C2[Agent继承
注入Prompt] C3[动态修改
编辑文件] C4[项目特定
每个项目不同] end EnvVar -.->|类比| CLAUDEmd
graph TB
    subgraph EnvVar["环境变量"]
        E1[运行环境配置
PATH/HOME] E2[进程继承
子进程继承] E3[动态修改
export/unset] E4[项目特定
.env文件] end subgraph CLAUDEmd["CLAUDE.md"] C1[项目约定配置
架构/约定] C2[Agent继承
注入Prompt] C3[动态修改
编辑文件] C4[项目特定
每个项目不同] end EnvVar -.->|类比| CLAUDEmd
graph TB
    subgraph EnvVar["环境变量"]
        E1[运行环境配置
PATH/HOME] E2[进程继承
子进程继承] E3[动态修改
export/unset] E4[项目特定
.env文件] end subgraph CLAUDEmd["CLAUDE.md"] C1[项目约定配置
架构/约定] C2[Agent继承
注入Prompt] C3[动态修改
编辑文件] C4[项目特定
每个项目不同] end EnvVar -.->|类比| CLAUDEmd
graph TB
    subgraph EnvVar["环境变量"]
        E1[运行环境配置<br/>PATH/HOME]
        E2[进程继承<br/>子进程继承]
        E3[动态修改<br/>export/unset]
        E4[项目特定<br/>.env文件]
    end
    
    subgraph CLAUDEmd["CLAUDE.md"]
        C1[项目约定配置<br/>架构/约定]
        C2[Agent继承<br/>注入Prompt]
        C3[动态修改<br/>编辑文件]
        C4[项目特定<br/>每个项目不同]
    end
    
    EnvVar -.->|类比| CLAUDEmd

类比要点:

  • 环境配置:环境变量配置运行环境,CLAUDE.md 配置项目环境
  • 继承机制:子进程继承环境变量,Agent 继承 CLAUDE.md
  • 项目特定:每个项目有不同环境,每个项目有不同 CLAUDE.md

类比的深层含义

Harness 的"操作系统"角色

图表 代码
graph TB
    subgraph AgentRunsOn["Agent 运行在 Harness 上"]
        Agent[Agent
推理决策] Harness[Harness
执行环境] Tools[工具系统
能力边界] Agent -->|运行| Harness -->|管理| Tools end subgraph AppRunsOn["程序运行在 OS 上"] App[应用程序
业务逻辑] OS[操作系统
运行环境] Hardware[硬件资源
能力边界] App -->|运行| OS -->|管理| Hardware end AgentRunsOn -.->|类比| AppRunsOn
graph TB
    subgraph AgentRunsOn["Agent 运行在 Harness 上"]
        Agent[Agent
推理决策] Harness[Harness
执行环境] Tools[工具系统
能力边界] Agent -->|运行| Harness -->|管理| Tools end subgraph AppRunsOn["程序运行在 OS 上"] App[应用程序
业务逻辑] OS[操作系统
运行环境] Hardware[硬件资源
能力边界] App -->|运行| OS -->|管理| Hardware end AgentRunsOn -.->|类比| AppRunsOn
graph TB
    subgraph AgentRunsOn["Agent 运行在 Harness 上"]
        Agent[Agent
推理决策] Harness[Harness
执行环境] Tools[工具系统
能力边界] Agent -->|运行| Harness -->|管理| Tools end subgraph AppRunsOn["程序运行在 OS 上"] App[应用程序
业务逻辑] OS[操作系统
运行环境] Hardware[硬件资源
能力边界] App -->|运行| OS -->|管理| Hardware end AgentRunsOn -.->|类比| AppRunsOn
graph TB
    subgraph AgentRunsOn["Agent 运行在 Harness 上"]
        Agent[Agent<br/>推理决策]
        Harness[Harness<br/>执行环境]
        Tools[工具系统<br/>能力边界]
        
        Agent -->|运行| Harness -->|管理| Tools
    end
    
    subgraph AppRunsOn["程序运行在 OS 上"]
        App[应用程序<br/>业务逻辑]
        OS[操作系统<br/>运行环境]
        Hardware[硬件资源<br/>能力边界]
        
        App -->|运行| OS -->|管理| Hardware
    end
    
    AgentRunsOn -.->|类比| AppRunsOn

类比揭示的深层含义:

含义说明启示
Harness 是基础设施Agent 需要 Harness 才能工作Harness 设计要稳固
Harness 提供抽象工具层抽象复杂操作Harness 要易用
Harness 管理资源上下文、权限、工具都是资源Harness 要高效
Harness 保护安全权限系统保护用户环境Harness 要安全
Harness 可扩展MCP/Skills 扩展能力Harness 要灵活

类比的局限性

不完全类比的部分

OS 概念Harness 不对应的部分原因
硬件直接管理Harness 不管理硬件Harness 管理工具,不是硬件
实时性保证Harness 无实时要求Agent Loop 不是实时系统
多用户并发Harness 单用户为主Agent 通常单用户工作
持久化存储Harness 不负责持久化文件系统负责持久化
图表 代码
graph TB
    subgraph NotAnalogy["不完全类比"]
        N1[硬件直接管理
Harness管理工具] N2[实时性保证
无实时要求] N3[多用户并发
单用户为主] N4[持久化存储
文件系统负责] end style NotAnalogy fill:#FFE0E0
graph TB
    subgraph NotAnalogy["不完全类比"]
        N1[硬件直接管理
Harness管理工具] N2[实时性保证
无实时要求] N3[多用户并发
单用户为主] N4[持久化存储
文件系统负责] end style NotAnalogy fill:#FFE0E0
graph TB
    subgraph NotAnalogy["不完全类比"]
        N1[硬件直接管理
Harness管理工具] N2[实时性保证
无实时要求] N3[多用户并发
单用户为主] N4[持久化存储
文件系统负责] end style NotAnalogy fill:#FFE0E0
graph TB
    subgraph NotAnalogy["不完全类比"]
        N1[硬件直接管理<br/>Harness管理工具]
        N2[实时性保证<br/>无实时要求]
        N3[多用户并发<br/>单用户为主]
        N4[持久化存储<br/>文件系统负责]
    end
    
    style NotAnalogy fill:#FFE0E0

类比的适用边界

适用场景:

  • ✅ 理解 Harness 的基础设施角色
  • ✅ 理解 Harness 的组件职责
  • ✅ 理解 Harness 的设计思想

不适用场景:

  • ❌ 理解 Harness 的实现细节
  • ❌ 理解 Agent 的推理机制
  • ❌ 理解 Model 的能力边界

设计启示:借鉴 OS 设计思想

从 OS 学到的设计原则

OS 设计原则Harness 应用说明
分层设计Harness 四层架构Loop层→工具层→管理层→扩展层
抽象接口工具统一接口所有工具统一 Schema
权限分离三级权限系统deny→ask→allow
资源管理上下文管理四层压缩策略
并发协作多 Agent 协作主/子 Agent 机制
动态加载MCP/Skills 按需加载按需注册,按需注入
环境隔离子 Agent 上下文隔离独立上下文,不污染
图表 代码
graph TB
    subgraph OSDesign["OS 设计原则"]
        O1[分层设计]
        O2[抽象接口]
        O3[权限分离]
        O4[资源管理]
        O5[并发协作]
        O6[动态加载]
        O7[环境隔离]
    end
    
    subgraph HarnessApply["Harness 应用"]
        H1[四层架构]
        H2[工具Schema]
        H3[三级权限]
        H4[上下文压缩]
        H5[多Agent]
        H6[MCP/Skills]
        H7[子Agent隔离]
    end
    
    OSDesign -->|借鉴| HarnessApply
graph TB
    subgraph OSDesign["OS 设计原则"]
        O1[分层设计]
        O2[抽象接口]
        O3[权限分离]
        O4[资源管理]
        O5[并发协作]
        O6[动态加载]
        O7[环境隔离]
    end
    
    subgraph HarnessApply["Harness 应用"]
        H1[四层架构]
        H2[工具Schema]
        H3[三级权限]
        H4[上下文压缩]
        H5[多Agent]
        H6[MCP/Skills]
        H7[子Agent隔离]
    end
    
    OSDesign -->|借鉴| HarnessApply
graph TB
    subgraph OSDesign["OS 设计原则"]
        O1[分层设计]
        O2[抽象接口]
        O3[权限分离]
        O4[资源管理]
        O5[并发协作]
        O6[动态加载]
        O7[环境隔离]
    end
    
    subgraph HarnessApply["Harness 应用"]
        H1[四层架构]
        H2[工具Schema]
        H3[三级权限]
        H4[上下文压缩]
        H5[多Agent]
        H6[MCP/Skills]
        H7[子Agent隔离]
    end
    
    OSDesign -->|借鉴| HarnessApply
graph TB
    subgraph OSDesign["OS 设计原则"]
        O1[分层设计]
        O2[抽象接口]
        O3[权限分离]
        O4[资源管理]
        O5[并发协作]
        O6[动态加载]
        O7[环境隔离]
    end
    
    subgraph HarnessApply["Harness 应用"]
        H1[四层架构]
        H2[工具Schema]
        H3[三级权限]
        H4[上下文压缩]
        H5[多Agent]
        H6[MCP/Skills]
        H7[子Agent隔离]
    end
    
    OSDesign -->|借鉴| HarnessApply

本章小结

  • 类比定义:Harness 是 Agent 的操作系统,提供运行环境和管理能力
  • 组件对应:内核→Agent Loop、文件系统→工具层、设备驱动→MCP、权限管理→权限系统、内存管理→上下文、进程调度→多Agent、系统调用→工具调用、环境变量→CLAUDE.md
  • 类比价值:易于理解、准确映射、指导设计
  • 深层含义:Harness 是基础设施、提供抽象、管理资源、保护安全、可扩展
  • 局限性:不管理硬件、无实时性、单用户为主、不负责持久化
  • 设计启示:借鉴 OS 分层设计、抽象接口、权限分离、资源管理、并发协作、动态加载、环境隔离

预告:下一篇我们深入 Agent 与 Harness 的协作模式——两者如何配合完成任务。



相关内容

如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
Cygnus Yang 支付宝支付宝
Cygnus Yang 微信微信