Agent Harness 与操作系统(OS)的高度类比:一份深度研究报告
研究主体:DeepThink 企业级 Agent SaaS 自进化平台 研究视角:把"Agent Harness(代理脚手架/运行时)"当作一种新型操作系统来审视,系统性地建立它与经典操作系统(OS)之间的结构对应关系,并厘清类比的边界与失真之处。 研究方法:公开技术拆解 + 源码逆向分析 + 学术论文(AIOS / LLM OS / Karpathy 构想)+ 产业实践交叉验证。关键结论以原始信源为准,部分数据因时效可能变化。 日期:2026-07-11 篇幅:约 3 万字
DeepThink 是你的私有AI 操作系统 (AI Agent Platform),在安全隔离的沙箱环境中,自主执行代码、管理文件、完成超复杂长程任务。自托管的多用户本地 AI Agent Loop Engineering 系统 (支持桌面端+浏览器+移动端) —— 让 DeepThink 成为你的全能数字助手。 —— Powered By AI Genius Institute & 光剑AI
DeepThink 项目开源代码: Gitcode: gitcode.com/AIGeniusIns… Github: github.com/AIGeniusIns…
〇、执行摘要(TL;DR)
过去三年,AI 编程工具的形态经历了三次跃迁:从 GitHub Copilot 的"行内补全",到 Cursor 的"编辑器内对话",再到 Claude Code 的"终端常驻 Agent"。每一次跃迁,人与 AI 之间的关系都在重构——而第三次跃迁真正改变的不是"技术有多先进",而是程序的外部脚手架本身开始具有操作系统的形态。
本报告论证一个核心命题:一个成熟的 Agent Harness(以 Claude Code 为典型代表,OpenCode / Codex / OpenClaw 各为其变体)在结构上与一个经典操作系统高度同构。这并非修辞上的比喻,而是可逐层验证的结构对应:
- Agent Loop ≈ CPU 指令周期 + 内核调度循环:
queryLoop()的"观察-推理-行动-反馈"七步循环,本质是一个用户态进程在内核调度下的指令周期在语义层的高维投影。 - 上下文窗口 ≈ RAM:有限、昂贵、需被换页/压缩/分页管理;Claude Code 的"五层上下文压缩管道"对应的是操作系统的虚拟内存、内存压缩与磁盘交换机制。
- 工具调用 ≈ 系统调用(syscall):模型不能直接操作世界,必须通过受权限管控的工具调用访问文件、网络、子进程——正如用户态进程不能直接访存硬件,必须通过 syscall 进入内核态。
- 权限四层防御 + Hooks ≈ CPU 保护环(Ring 0–3)+ capability 模型:Prompt 是软约束,代码是硬约束,安全边界必须落在工具执行之前。
- 子代理 ≈ 进程/线程,多 Agent 编排 ≈ 进程调度与 IPC:虚拟公司式的多 Agent 协作,对应的是进程间通信、管道、消息队列与调度器。
- CLAUDE.md / AGENTS.md / SOUL.md ≈ 配置文件系统与 init 脚本:磁盘上的 Markdown 文件作为 Agent 行为的事实来源,对应
/etc下的配置与 systemd 单元。 - MCP ≈ VFS / 设备驱动接口:统一了"Agent 如何连接外部数据源/工具"的接口,正如 VFS 统一了文件系统接口、设备驱动统一了外设访问。
- Skills / 包生态 ≈ 包管理器(apt / npm):能力的发现、安装、版本、依赖管理正在沉淀为标准栈。
- 日志 / 可观测性 ≈ dmesg / perf / eBPF:Agent 的 telemetry 与 CEE 调度对应内核观测与性能分析子系统。
但本报告同样严肃地指出类比的失真边界:LLM 是概率性的、无状态的、非确定性的"湿 CPU";上下文窗口不是随机访问内存而是"只追加的语义磁带";Agent 的"调度"由语义而非时钟节拍驱动;安全模型无法依赖硬件隔离,只能退而求其次地用 OS 沙箱与权限管线叠加行为约束。理解这些失真,比理解类比的成立更重要——它决定了哪些 OS 工程经验可以平移,哪些必须重造。
本报告最终落到 DeepThink 的工程启示:企业级 Agent 平台应当被当作"Agent 操作系统"来设计——内核层(Loop/工具/权限/上下文)、编排层(多 Agent 调度/IPC)、能力层(Skills/MCP/包生态)、可观测层(日志/自修复闭环)四层分立,多租户隔离、权限分级、计费弹性、企业集成,最终走向"超级智能体孵化器"。
graph TB
subgraph "经典操作系统"
K1[CPU 指令周期] --> S1[进程调度]
S1 --> M1[内存管理/虚拟内存]
M1 --> F1[文件系统 VFS]
F1 --> D1[设备驱动]
D1 --> P1[保护环/权限]
P1 --> I1[IPC/网络栈]
I1 --> O1[dmesg/perf 可观测]
end
subgraph "Agent Harness"
K2[Agent Loop queryLoop] --> S2[子代理/多Agent编排]
S2 --> M2[上下文窗口/五层压缩]
M2 --> F2[CLAUDE.md/AGENTS.md 文件事实]
F2 --> D2[MCP 工具协议]
D2 --> P2[权限四层+Hooks]
P2 --> I2[子代理消息/A2A]
I2 --> O2[日志/CEE/自修复闭环]
end
K1 -. 对应 .-> K2
S1 -. 对应 .-> S2
M1 -. 对应 .-> M2
F1 -. 对应 .-> F2
D1 -. 对应 .-> D2
P1 -. 对应 .-> P2
I1 -. 对应 .-> I2
O1 -. 对应 .-> O2
一、引言:为什么"Agent Harness 即 OS"是一个严肃命题
1.1 从"模型即程序"到"模型即 CPU"的认知跃迁
2023 年 11 月,Andrej Karpathy 在一条广为流传的推文中提出了"LLM OS"的最初构想:大语言模型是新兴操作系统的 CPU。这一构想把"LLM 只是又一个软件组件"的直觉击碎了——它指出,LLM 不是一个库、不是一个函数,而是一个能调度其他工具、能读写"文件系统"、能通过"外设 I/O"看听世界、能与其他"LLM CPU"互联的计算核心。
这一构想的核心洞察在于:LLM 本身是无状态的、非确定性的、概率性的。它的"智能"并不驻留在权重里像数据一样被查询,而是在每次前向传播中被即时计算出来。这意味着,围绕 LLM 要做出任何有用的、可靠的、可控的系统,都必须在外部搭建一层又一层的"脚手架"——这层脚手架负责状态管理、上下文维护、工具调度、权限边界、错误恢复、并发协调。这层脚手架,就是 Agent Harness。
而当我们把这层脚手架一层层剥开,会惊讶地发现:它的每一个子系统,都几乎可以在经典操作系统里找到结构对应物。这不是巧合。OS 在过去六十年里解决的正是同一类问题——如何在一个有限、昂贵、共享、不可靠的计算核心上,可靠地调度多个相互竞争的任务、隔离它们的副作用、管理稀缺的内存与 I/O、提供可观测与可恢复的执行环境。LLM 这颗"湿 CPU"把 OS 工程师六十年积累的全部问题重新问了一遍,只是问题的尺度从纳秒变成了秒、从字节变成了 token、从硬件中断变成了语义中断。
1.2 三次跃迁:为什么是 Claude Code 这一代才让类比成立
AI 编程工具三年三变。2022 年 GitHub Copilot 把 LLM 做成"输入法"——它补全你写了一半的代码,但本质没变,你还是那个写代码的人。2024 年 Cursor 把 LLM 做成"编辑器内的对话伙伴"——它能改文件、跑命令,但它始终长在 IDE 里,是编辑器的延伸。这两代工具都没有"操作系统的形态"——它们是单进程的应用程序,LLM 是其中的一个模块。
2025 年起 Claude Code 这一代终端常驻 Agent 出现,形态才根本改变。它不住在任何编辑器里,直接运行在终端,是一个长期常驻、自循环、能自主调用工具、能派生子代理、能管理自身上下文、能被权限约束、能被 Hooks 拦截、能通过 MCP 连接任意外部系统的运行时。源码约 1900+ TypeScript 文件,覆盖工具系统、权限、多 Agent 协作、MCP、上下文管理——这已经不是一个"应用",而是一个"运行时"。
而一个长期常驻、自循环、调度资源、隔离副作用、管理稀缺内存、提供可观测性的运行时,正是操作系统的定义。
1.3 本报告的论证策略
本报告不把"Agent Harness 即 OS"当作口号来宣讲,而是采取一个严格的、可证伪的论证策略:
- 概念对齐(第二部分):先精确定义 Agent Harness 与 OS 各自的内涵,避免概念滑动。
- 核心类比映射(第三部分):建立一个系统化的逐层对应表,让每个 OS 子系统都能在 Harness 里找到对应物,反之亦然。
- 逐层深度拆解(第四部分):对每一个对应关系做深度论证——既要讲清楚 OS 侧的工程原理,也要讲清楚 Harness 侧的实现机制,并指出二者在何种意义上"同构"。
- 类比的失真边界(第五部分):严肃地列出类比失效的地方。这是本报告最有价值的部分——它决定了哪些经验可以平移、哪些必须重造。
- 实现谱系(第六部分):盘点现有"Agent OS"实现(AIOS、LLM OS、Mistral、Claude Code、OpenCode、OpenClaw),看它们在多大程度上自觉或不自觉地复刻了 OS 结构。
- 工程启示(第七部分):落到 DeepThink 的企业架构设计,给出"把 Agent 平台当 OS 设计"的可操作建议。
- 未来演进(第八部分):从 Harness 走向真正的 Agent OS 还差什么。
一个类比若只能讲"成立"而不能讲"失真",它就是修辞而非分析。本报告把二者都讲透。
二、概念对齐:Agent Harness 是什么,OS 是什么
2.1 何谓 Agent Harness
Agent Harness(代理脚手架 / 代理运行时)指的是围绕一个无状态的大语言模型,为其提供状态管理、上下文维护、工具调度、权限管控、并发协调、错误恢复、可观测性的那一层外部软件系统。它是一个反复被强调的等式:
Agent ≠ Model Agent = Model + Loop + Tools + Context + Permissions + Memory
这个等式是理解一切的关键。LLM 本身只是一个函数 f: prompt → token stream,它没有记忆、没有工具、没有意志、没有持续运行的能力。把这样一个函数变成一个能"自主完成任务"的 Agent,需要在外部搭建:
- Loop(循环):反复调用
f,把它的输出和工具执行结果回填进 prompt,再调用f,直到任务完成。这个循环是 Agent 的"心跳"。 - Tools(工具):一组受控的能力接口(文件读写、shell 执行、网络请求、子代理派生、MCP 调用),让模型能作用于世界。
- Context(上下文):一个有限但需要被精心管理的"工作内存",承载历史对话、工具结果、项目知识、配置注入。
- Permissions(权限):一组在工具执行之前生效的硬约束,决定模型能做什么、不能做什么。
- Memory(记忆):跨会话的持久化结构,让 Agent 能"记住"用户偏好、项目上下文、过去的决策。
这五者合起来就是 Harness。Claude Code 的 1900+ 文件源码,绝大部分都在实现这五者。一句话:Harness 是把无状态模型变成有状态 Agent 的那一层软件。
2.2 何谓操作系统
操作系统(Operating System, OS)的经典定义是:管理计算机硬件与软件资源、为程序提供通用服务的系统软件。它的核心职责被反复总结为六大子领域:
- 进程管理:创建、调度、销毁进程与线程,分配 CPU 时间,处理并发与同步。
- 内存管理:分配回收内存,提供虚拟内存、分页/交换、内存保护与隔离。
- 文件系统:持久化存储的抽象,目录树、权限、并发访问、缓存。
- I/O 与设备驱动:统一外设访问接口,缓冲、中断、设备无关性。
- 安全与保护:保护环(Ring 0–3)、capability、访问控制、隔离与沙箱。
- 网络与 IPC:进程间通信(管道、消息队列、共享内存、socket)、网络栈。
这六者之上,还叠着一层可观测性(dmesg、perf、eBPF、systemtap)与引导/初始化(bootloader、init/systemd、配置加载)。
OS 的本质是资源抽象与仲裁者:在一颗有限、昂贵、共享、不可靠的 CPU 上,让多个相互竞争的程序公平、安全、高效地运行。它的全部设计智慧,都围绕"稀缺"与"隔离"两个关键词。
2.3 为什么二者的内涵会重合
把 2.1 的五要素与 2.2 的六子领域并排放,重合是显而易见的:
| Harness 概念 | OS 对应概念 | 重合的本质 |
|---|---|---|
| Loop(循环) | CPU 指令周期 + 内核调度循环 | 都是"反复取指-执行"的引擎 |
| Context(上下文窗口) | RAM(主存) | 都是有限、昂贵、需管理的稀缺资源 |
| Tools(工具调用) | syscall(系统调用) | 都是"受控的能力访问接口" |
| Permissions(权限) | 保护环 / capability / 访问控制 | 都是"在执行前生效的硬约束" |
| Memory(长期记忆) | 磁盘 / swap / 持久化 | 都是"主存之外的慢速持久层" |
| 子代理 / 多 Agent | 进程 / 线程 / 调度 | 都是"并发任务的拆分与协调" |
重合的根源在于:LLM 是一颗有限、昂贵、共享、不可靠、概率性的 CPU。OS 六十年解决的全部问题,在 LLM 这颗"CPU"上重新出现了。稀缺——上下文窗口有限、token 贵;隔离——多个任务、多个用户的副作用必须隔离;不可靠——模型会幻觉、会失败、会超时;概率性——同样的输入不保证同样的输出。OS 的全部智慧,几乎是为这些关键词量身定做的。
因此,"Agent Harness 即 OS"不是修辞,是问题结构的同构。下文我们逐层拆解这种同构。
三、核心类比映射:一张系统化的对应表
在逐层深拆之前,先把全部对应关系压缩成一张总表,供后文反复参照。这张表是本报告的"地图"。
| # | OS 子系统 | OS 代表机制 | Agent Harness 对应 | Harness 代表实现 | 同构的"意义" |
|---|---|---|---|---|---|
| 1 | CPU / 指令周期 | 取指-译码-执行-写回 | Agent Loop | queryLoop() 七步循环 | 反复"观察-推理-行动-反馈"的执行引擎 |
| 2 | 内核调度器 | CFS / O(1) 调度 / 上下文切换 | 监督者 Loop / 多 Agent 编排 | Ralph Loop、Plan/Build、虚拟公司 | 决定哪个 Agent 何时运行、运行多久 |
| 3 | 进程 / 线程 | task_struct / 线程栈 | 子代理 / Agent 实例 | Subagents、Workflow agents | 并发任务的拆分单位 |
| 4 | 内存管理 | 虚拟内存 / 分页 / swap | 上下文窗口 + 压缩管道 | 五层上下文压缩、compact 检查点 | 稀缺工作内存的扩展与回收 |
| 5 | 主存容量 | RAM 字节 | 上下文窗口 token 数 | 200K / 1M token | "工作内存"的物理上限 |
| 6 | 配置 / 引导 | /etc、systemd、init 脚本 | 行为事实文件 | CLAUDE.md / AGENTS.md / SOUL.md | 启动时注入的持久配置 |
| 7 | 文件系统 | VFS / inode / 目录树 | 知识注入与项目文件 | CLAUDE.md 四层、@import | 持久化的语义存储 |
| 8 | 系统调用 | syscall table、int 0x80 / syscall | 工具调用 | Read/Write/Bash/Edit/Grep | 用户态访问内核能力的受控接口 |
| 9 | 设备驱动 | driver、设备文件 | MCP server / 浏览器 / computer use | MCP registry、browser tool | 统一外设/外部系统的访问 |
| 10 | 保护环 / 安全 | Ring 0–3、capability | 权限四层 + Hooks | 权限管线、Hooks 拦截 | 工具执行前的硬约束 |
| 11 | 沙箱 / 隔离 | Seatbelt / Landlock / 容器 | OS 级沙箱 + 行为约束 | Codex 沙箱、SOUL 约束 | 限制副作用爆炸半径 |
| 12 | IPC | 管道 / 消息队列 / 共享内存 | 子代理消息 / A2A 协议 | Agent 消息传递、SendMessage | 并发 Agent 间的数据交换 |
| 13 | 包管理 | apt / npm / 包仓库 | Skills / MCP registry | Claude Skills、MCP marketplace | 能力的发现、安装、版本、依赖 |
| 14 | 可观测性 | dmesg / perf / eBPF | 日志 / telemetry / CEE | run log、token 用量、CEE 调度 | 运行时的观测与诊断 |
| 15 | 容错 / 恢复 | journal / 检查点 / 进程重启 | 自修复闭环 / 会话恢复 | Bug Auto-Fix Loop、session resume | 失败的检测、定位、修复、恢复 |
| 16 | 多用户 / 租户 | UID / cgroup / namespace | 多租户隔离 | DeepThink 多租户 | 资源隔离与公平分配 |
| 17 | 计费 / 配额 | ulimit / cgroup 限额 | token 预算 / 计费弹性 | budget、token 配额 | 稀缺资源的配额与计价 |
这张表是后文全部深拆的索引。第四部分将逐行展开。
四、逐层深度拆解:每一个对应关系的完整论证
本部分是报告主体。我们对第三部分的每一行对应表做深度论证:先讲 OS 侧的工程原理,再讲 Harness 侧的实现机制,最后点明二者在何种意义上同构、在何处开始失真。
4.1 Agent Loop ≈ CPU 指令周期 + 内核调度循环
4.1.1 OS 侧:指令周期与内核主循环
CPU 的本质是一个冯·诺依曼循环:取指(fetch)→ 译码(decode)→ 执行(execute)→ 写回(write-back),周而复始。这个循环由时钟节拍驱动,每个节拍从 PC(程序计数器)指向的内存地址取出一条指令,译码后驱动 ALU/访存单元执行,结果写回寄存器或内存,PC 自增(或跳转)。整个循环在硬件里以 GHz 速度运行,是计算机一切计算的最底层"心跳"。
操作系统内核自己也有一个高层循环:调度循环。内核不是被动等待中断,而是反复执行"从就绪队列选一个进程→上下文切换到它→让它运行直到时间片耗尽或阻塞→保存它的上下文→回到调度→选下一个"。Linux 的 schedule() 函数就是这个循环的核心实现。这个循环在 OS 层把 CPU 指令周期抽象成了"进程时间片"的轮转。
两层循环的关键特征:
- 有限节拍:CPU 有固定时钟频率,OS 调度有固定时间片(Linux 默认 1–10ms)。
- 状态机:每一步都改变寄存器/进程上下文,为下一步做准备。
- 可中断:中断/异常会打断当前执行,转入处理程序。
- 可恢复:保存上下文后,可在未来恢复继续执行。
4.1.2 Harness 侧:queryLoop() 七步循环
Claude Code 的全部执行路径——终端交互、headless CLI、Agent SDK——最终收束于 query.ts 的 queryLoop() 异步生成器。这是一个"while-true"语义的循环,每个 turn 固定七步:
- Settings resolution(配置解析):解构不可变配置(system prompt、权限回调、模型选择),turn 内不变。
- State initialization(状态初始化):创建可变 State(消息列表、工具调用队列、token 用量),每 turn 新建,不跨 turn 复用。
- Context assembly(上下文装配):从最近的 compact 检查点向后取历史,拼接 CLAUDE.md 四层知识。
- Model invocation(模型调用):把装配好的上下文送入 LLM,等待流式返回。
- Tool call detection(工具调用检测):解析模型输出,判断是直接回复用户,还是发起工具调用。
- Tool execution(工具执行):在权限管线约束下执行工具,结果回填。
- Loop or halt(循环或停止):若模型仍在发起工具调用,回到第 1 步;若模型停止,结束 turn。
把这七步与指令周期对照:
| 指令周期 | queryLoop 步骤 | 同构点 |
|---|---|---|
| 取指 | Context assembly + Model invocation | 从"内存"取历史 + 调用"CPU" |
| 译码 | Tool call detection | 解析输出是什么动作 |
| 执行 | Tool execution | 调用 ALU/外设 |
| 写回 | 结果回填 + Loop or halt | 结果写回上下文,PC 推进 |
类比的深层意义在于:queryLoop 是一个语义层的高维指令周期。它的"节拍"不是纳秒而是秒(一次 LLM 调用),它的"指令"不是机器码而是自然语言 + 工具调用,它的"寄存器"是上下文窗口,它的"PC"是循环计数与消息指针。但结构同构——反复取指-译码-执行-写回,直到"停机"。
4.1.3 Claude Code 的"12 层渐进式工程包装"
理解 Agent Loop 的工程深度,关键在于看 Claude Code 如何在一个极简 while-true 循环外围,一层层补上"工具边界、上下文边界、记忆边界、权限边界、验证边界"——整整 12 层。这 12 层包装,对应的是 OS 内核在裸 CPU 指令周期之外搭建的"中断处理、系统调用门、权限检查、上下文切换、内存保护"等层层设施。
裸 CPU 只会跑指令,OS 让它能跑"可靠的多个程序"。裸 while-true 只会调模型,Harness 让它能做"可靠的多个任务"。二者都是在同一个引擎外围,一圈圈补上工程化的护城河。
4.1.4 失真:节拍、确定性、停机
类比的失真在这里就开始显现:
- 节拍:CPU 节拍纳秒级且严格固定;queryLoop 的"节拍"是秒级且高度可变(一次推理可能 1 秒也可能 30 秒)。OS 的"时间片调度"在 Harness 里没有直接对应——没有"给这个 Agent 50ms 后强制切换"的机制。
- 确定性:CPU 指令是确定性的(相同输入相同输出);LLM 推理是概率性的。这是最根本的失真——OS 假设"硬件可靠",Harness 不能做这个假设。
- 停机:进程有明确的退出码;Agent 的"任务完成"是语义判断,没有确定性的停机判定。这逼出了"监督者 Loop / 二选一结论"这种 OS 里没有的机制。
这些失真将在第五部分统一处理。这里先记住:Loop 的同构在"反复取指-执行"的结构层面成立,在"节拍、确定性、停机"的物理层面失真。
4.2 监督者 Loop 与多 Agent 编排 ≈ 内核调度器
4.2.1 OS 侧:调度器的职责
OS 调度器决定"哪个进程何时运行、运行多久"。它的核心难题是公平、吞吐、延迟的权衡:
- 公平:不能让一个进程饿死其他进程。
- 吞吐:CPU 利用率要高,不要在切换上浪费。
- 延迟:交互式进程要快速响应。
Linux 的 CFS(完全公平调度器)用红黑树按 vruntime 排序,O(1) 调度器用多级优先级队列。调度的核心动作是上下文切换:保存当前进程的寄存器/栈指针到其 task_struct,加载下一个进程的上下文,跳转执行。一次上下文切换在纳秒到微秒级。
调度器还要处理优先级、抢占、阻塞 I/O 时的让出、多核负载均衡。这些机制让 OS 能在一颗 CPU 上"同时"运行成百上千个进程。
4.2.2 Harness 侧:监督者 Loop 与多 Agent 编排
Claude Code 的单个 Agent Loop 解决的是"一个任务怎么跑",但当任务复杂——比如"审计这个代码库的所有潜在 bug"——单 Agent 单 Loop 不够用。于是出现了监督者 Agent(Supervisor Agent)和多 Agent 编排。
DeepThink 的 CLAUDE.md 里明确要求一个"Ralph Loop E2E 监督者 Agent"模式:Code Agent 不是一次性执行者,而是由监督者 Agent 驱动的持续闭环。监督者负责:
- 客观验证:每个结论必须有截图、日志、测试结果支撑。
- 持续迭代:直到达到明确的退出条件。
- 二选一结论:要么"真正修复",要么"无法修复(需人工介入)"。
- 完整记录:每轮测试结果、修复记录、失败原因全部留存。
这本质就是一个调度器 + 看门狗(watchdog):监督者不直接写代码,而是调度 Code Agent 反复跑、检查结果、决定继续还是终止。它对应的是 OS 里 init(PID 1)对子进程的监管——init 会在子进程退出时回收资源、在子进程崩溃时重启它(respawn)。
更复杂的多 Agent 编排形态:
- Claude Code 动态工作流:Claude 根据当前任务,动态生成一段 JavaScript 工作流来调度多个子 Agent、分配上下文、选择模型、运行验证流程、汇总结果。这是"运行时生成调度程序"——对应 OS 里"动态加载内核模块"。
- OpenClaw 虚拟公司:CEO / PM / 工程师 / 测试 / 财务等多角色 Agent 来回"开会/讨论/审批"。这是消息驱动的多进程协作模型——对应 OS 里通过 IPC 消息传递协调多个进程的协作式调度(cooperative scheduling)。
- OpenCode 的 Plan/Build 双 Agent:Plan Agent 规划、Build Agent 构建。这是角色分工的调度——对应 OS 里"前台进程做 I/O、后台进程做计算"的分工。
4.2.3 同构与失真
同构成立:监督者/编排器 = 调度器,子 Agent = 进程,角色分工 = 优先级/类型调度,动态工作流 = 动态加载调度策略。
但失真严重:
- OS 调度是抢占式的(preemptive):内核能强制打断一个进程;Agent 编排几乎全是协作式(cooperative)——监督者只能等子 Agent 自己返回,无法"抢占"一个正在推理的 LLM 调用。这是 LLM 推理不可中断的物理约束导致的。
- OS 有明确的"时间片"概念;Agent 调度没有"给这个子 Agent 50 个 token 后强制切换"的机制(虽然有 token budget,但那是预算不是抢占)。
- OS 上下文切换纳秒级;Agent 的"上下文切换"是重新装配上下文窗口,秒级且昂贵——每次切换都可能丢失"寄存器"(上下文窗口里的中间状态)。这逼出了子代理"独立上下文 + 结果汇总"的设计,而非 OS 风格的"共享内存 + 频繁切换"。
4.3 子代理与 Agent 实例 ≈ 进程与线程
4.3.1 OS 侧:进程、线程、地址空间
进程是 OS 里"正在运行的程序的实例",核心是独立的地址空间——每个进程有自己的虚拟内存,互不干扰,一个进程崩溃不影响另一个。线程是进程内的执行单元,共享地址空间但各有独立栈。OS 通过 task_struct(Linux)描述一个进程/线程的全部状态:PID、地址空间、打开的文件描述符表、信号处理表、调度信息。
fork/exec 是创建进程的经典模式:fork 复制父进程地址空间(写时复制),exec 把新程序载入地址空间运行。这种"复制-改造"模型让进程间天然隔离。
4.3.2 Harness 侧:子代理与 Agent 实例
Claude Code 的子代理(Subagents)是独立上下文窗口的 Agent 实例。父 Agent 通过 Task 工具派生一个子代理,传入任务描述;子代理在自己独立的上下文窗口里运行,完成后返回最终结果给父 Agent。
这是惊人的对应:子代理 = 进程。子代理的"独立上下文窗口"对应进程的"独立地址空间"。父 Agent 不能直接读子代理的中间上下文(只能拿到最终结果),正如一个进程不能直接读另一个进程的内存(只能通过 IPC)。
Claude Code 的 Agent 工具支持 subagent_type(Explore、general-purpose、Plan、code-reviewer 等)——这对应 OS 里不同进程类型/能力集:Explore 是只读搜索 agent(受限权限),code-reviewer 只有 Read/Glob/Grep(最小权限原则),general-purpose 有全部工具。
更精妙的是 Workflow 工具:它能用 JavaScript 脚本确定性编排多个子 Agent,有 pipeline()(流水线,无 barrier)、parallel()(并行,barrier)、agent()(派生)等原语。这几乎是在用脚本写一个调度器:
parallel()对应 OS 的 fork + wait(屏障式并行)。pipeline()对应流水线调度,每个 item 独立流过所有 stage,无屏障——对应 OS 的"每个请求流过处理流水线"。- 并发上限(min(16, cpu cores - 2))对应 OS 的进程并发上限 / 线程池大小。
- 总 agent 数上限 1000 对应 OS 的 max PID / max threads。
这种结构上的精确对应,说明 Harness 设计者已经在不自觉(或自觉)地复刻 OS 的进程模型。
4.3.3 失真:fork/exec、地址空间、隔离强度
失真在于:
- OS 的 fork/exec 是原语,纳秒级;Harness 的"派生子代理"是秒级且昂贵(要重新装配上下文、重新发起 LLM 调用)。所以 Harness 不会像 OS 那样"fork 一切"——它慎用子代理,只在任务确实可拆分时用。
- OS 的进程隔离是硬件级的(MMU 页表);子代理的"隔离"是协议级的——父代理拿不到子代理的中间状态,只是因为子代理不返回中间状态而已。子代理理论上可以共享父代理的文件描述符(工作目录、CLAUDE.md)。
- OS 进程有明确 PID 和生命周期;子代理的"ID"和"生命周期"由编排脚本管理,没有 OS 级别的僵尸进程/孤儿进程回收机制——这逼出了 Workflow 的"auto-cleaned if unchanged"等约定。
4.4 上下文窗口与五层压缩管道 ≈ RAM 与虚拟内存管理
这是全部类比里最深刻、最有生产力的一条。
4.4.1 OS 侧:内存管理的全部智慧
OS 内存管理的核心命题:RAM 有限且昂贵,但程序想要"无限"的内存。解决方案是一整套被称为"虚拟内存"的体系:
- 地址抽象:每个进程看到连续的虚拟地址空间,物理内存可以碎片化。
- 分页(paging):把内存分成固定大小的页(通常 4KB),按需映射到物理页框。
- 按需调页(demand paging):页只有在被访问时才真正载入物理内存,未访问的页可以只存在于磁盘。
- 交换(swap):物理内存不够时,把不活跃的页换出到磁盘的 swap 区,腾出 RAM 给活跃页。
- 内存压缩:macOS 的 memory compressor,把冷页压缩存放在内存里而非直接换到磁盘(比 swap 快)。
- 页面置换算法:LRU、Clock、LFU 决定换出哪个页。
- 写时复制(COW):fork 时子进程共享父进程页框,只在写时才复制。
- mmap:把文件"映射"进地址空间,按需读取,像访问内存一样访问文件。
这一整套体系的目标是:让程序以为自己有很大的内存,而 OS 在背后用稀缺的 RAM + 慢速磁盘 + 聪明的策略把它变出来。
4.4.2 Harness 侧:上下文窗口与五层压缩管道
上下文窗口 = RAM。这是本报告最重要的一句类比。上下文窗口:
- 有限:200K、1M token 是物理上限,就像服务器装了 64GB RAM。
- 昂贵:token 是计费单位,就像内存是硬件成本。
- 稀缺:任务复杂时历史 + 工具结果 + 项目文件很容易撑爆窗口,就像内存不够用。
- 需要被管理:必须有人决定"什么留在窗口里、什么被换出去、什么被压缩"。
Claude Code 的"五层上下文压缩管道"对应的是 OS 的"虚拟内存管理",几乎是逐条对应:
| OS 内存机制 | Claude Code 上下文机制 | 对应意义 |
|---|---|---|
| 物理内存上限 | 上下文窗口 token 上限 | 工作内存的硬顶 |
| 按需调页 | 工具结果按需读取(不全部塞进窗口) | 只在需要时载入 |
| 内存压缩 | compact 检查点(上下文压缩) | 把冷内容压缩存放 |
| swap 到磁盘 | 超长内容写入临时文件 / 子代理独立窗口 | 主存不够时溢出到慢速层 |
| 页面置换 LRU | 五层压缩策略(哪些先被压缩) | 决定丢什么留什么 |
| mmap 文件 | Read 工具按行读文件 / Grep | 像访问内存一样访问文件 |
| 写时复制 | 子代理共享 CLAUDE.md 但各自上下文独立 | 共享只读页,写时分离 |
Claude Code 的五层压缩管道的具体形态(基于源码分析):
- 第一层:工具结果截断——超长工具输出(如大文件读取、长命令输出)被截断,只保留头尾或关键片段。对应 OS 的"大块 I/O 缓冲 + 按需读取"。
- 第二层:历史消息压缩——早期对话被摘要压缩,保留语义丢掉细节。对应 OS 的"内存压缩"。
- 第三层:compact 检查点——当整体上下文接近上限时,触发一次 compact,把全部历史压成摘要检查点,后续从检查点继续。对应 OS 的"全局压缩 + swap"。
- 第四层:子代理分流——把大任务拆给子代理,子代理在独立窗口里处理,只把最终结果回传,不占用父上下文。对应 OS 的"用独立地址空间的进程处理大任务,只通过 IPC 回传结果"。
- 第五层:外部持久化——把不需要即时访问的内容写入文件(MEMORY.md、临时笔记),只在需要时 Read 回来。对应 OS 的"swap 到磁盘 + mmap 按需读"。
4.4.3 这条类比的工程生产力
这条类比不是装饰,它直接给出工程指导:
- 像 OS 管理内存一样管理上下文:不要无脑往窗口里塞东西,要分层、按需、可压缩、可溢出。
- compact = 全局压缩 + swap:理解了这一点,就理解了为什么 compact 是"检查点"而非"删除"——它是可恢复的,对应 swap 页可以被重新换入。
- 子代理 = 独立地址空间进程:理解了这一点,就理解了为什么"大任务该拆给子代理"——不是为了并行,而是为了隔离地址空间,让父上下文不被撑爆。
- MEMORY.md = swap 区 / 持久化磁盘:理解了这一点,就理解了长期记忆该放什么——只放"下次会话还可能用到"的,就像 swap 区只放"可能再次被访问"的页。
4.4.4 失真:随机访问 vs 只追加
最深的失真:RAM 是随机访问的(任何地址 O(1) 可达),上下文窗口是只追加的语义磁带。OS 可以 O(1) 跳到任何页框;LLM 不能 O(1) 跳到上下文窗口的某一行重新读取——它只能顺序消费整个窗口。这意味着:
- OS 的"页面置换"可以精确到页;Harness 的"压缩"只能粗粒度地摘要整段。
- OS 的 swap 是无损的(页原样换出换入);Harness 的 compact 是有损的(摘要丢掉细节,不可逆)。这是最根本的失真——LLM 的"内存"是有损内存。
这个失真逼出了 Harness 独有的设计:把不能丢的写到磁盘(文件),把可以丢的压缩进窗口。OS 不需要这么区分,因为 swap 无损;Harness 必须区分,因为 compact 有损。
4.5 配置与行为事实文件 ≈ /etc、systemd、init 脚本
4.5.1 OS 侧:配置文件系统与引导
Linux 的 /etc 目录是"系统级配置的事实来源"——/etc/passwd 定义用户、/etc/fstab 定义挂载、/etc/ssh/sshd_config 定义 SSH、/etc/systemd/system/ 定义服务单元。系统启动时,bootloader 载入内核 → 内核挂载根文件系统 → 启动 init(systemd)→ systemd 读取单元文件依次启动各服务。整个引导过程是"从持久化配置恢复运行时状态"。
配置的关键特征:纯文本、版本可控、人类可读、启动时注入。这是 Unix 哲学的核心——一切配置都是文本文件,可以用 cat/edit/git 管理。
4.5.2 Harness 侧:Markdown 作为行为事实来源
2026 年所有严肃的 Agent 系统都收敛到一个通用模式:磁盘上的 Markdown 文件作为 Agent 行为的事实来源。Claude Code 的 CLAUDE.md、OpenCode 的 AGENTS.md、OpenClaw 的 SOUL.md + USER.md + MEMORY.md、Cursor 的 .cursorrules——全部是纯文本 Markdown,启动时注入。
Claude Code 的 CLAUDE.md 四层知识注入尤其精妙,它几乎复刻了 OS 的配置层级:
| CLAUDE.md 层级 | OS 对应 | 注入时机 |
|---|---|---|
系统级全局(~/.claude/CLAUDE.md) | /etc/ 全局配置 | 每次启动 |
| 用户项目全局(@import 聚合) | 用户级 ~/.config/ | 项目加载时 |
| 项目级(git 追踪,团队共享) | 仓库内 .editorconfig / .env.example | git 检出即生效 |
本地私有(.claude/CLAUDE.local.md) | .local 覆盖 / gitignore 的本地配置 | 个人覆盖 |
四层叠加 + @import 聚合,对应 OS 的"全局配置覆盖默认、用户配置覆盖全局、项目配置覆盖用户、本地配置覆盖项目"的覆盖优先级链。
OpenClaw 的三文件分工更接近"配置语义化":
- SOUL.md:Agent"如何思考与交流"——语气、回复优先级、行为边界、个性。对应 OS 的"系统服务行为配置 + 内核参数 sysctl"。
- USER.md:用户画像与偏好。对应 OS 的"用户主目录 profile + 环境变量"。
- MEMORY.md:长期记忆。对应 OS 的"用户数据 + 历史日志"。
4.5.3 同构的深层意义
这个对应揭示了 Agent 系统的一个本质:它的"个性"与"边界"不在权重里,而在配置文件里。LLM 的权重是通用的、共享的、不可定制的(除非微调);Agent 的"它是谁、它听谁的、它记得什么"全部由磁盘上的文本文件定义。这与 OS 的"内核是共享的、配置是每台机器各自的"完全同构。
这也解释了为什么 2026 年严肃 Agent 系统都收敛到这个模式——它把"可版本控制、可团队协作、可审计"的工程性赋予了 Agent。CLAUDE.md 进 git,团队共享,code review,这与把 /etc 纳入配置管理(Ansible/Puppet)是同一个工程实践。
4.5.4 失真:动态性、热加载
失真在于:
- OS 配置大多支持热加载(
sysctl -w、systemctl reload);Harness 的 CLAUDE.md 主要在会话启动时注入,会话中改 CLAUDE.md 不会即时生效(需要新会话或显式重载)。这是"引导时注入"模型的局限。 - OS 配置是结构化的(key=value、INI、YAML);Harness 的 CLAUDE.md 是自然语言散文——这带来表达力但也带来不可预测性(模型对自然语言指令的遵循是概率性的,不像 sysctl 那样精确生效)。这是"Prompt 是软约束"的根源。
4.6 工具调用 ≈ 系统调用(syscall)
4.6.1 OS 侧:syscall 作为用户态访问内核能力的受控接口
现代 CPU 有特权级(x86 的 Ring 0–3)。用户态程序运行在 Ring 3,不能直接访问硬件、不能直接执行特权指令、不能直接读写其他进程内存。它要做这些事,必须通过 syscall 主动"陷入"内核态(Ring 0)——内核代为执行,执行完返回用户态。
syscall 是 OS 安全模型的基石:它是用户态访问内核能力的唯一合法通道。每个 syscall 有编号(syscall number),内核维护一张 syscall table(系统调用表)把编号映射到处理函数。open/read/write/close 是文件 syscall,fork/exec/wait 是进程 syscall,socket/bind/connect 是网络 syscall。用户态程序不能绕过这张表直接调用内核函数——这就是受控的能力访问。
4.6.2 Harness 侧:工具调用作为模型访问世界能力的受控接口
LLM 本身(在 Harness 语境下)是"用户态"的——它只是一段在模型服务里执行的推理,不能直接读你的文件、不能直接跑 shell、不能直接发网络请求。它要作用于世界,必须通过工具调用(tool call),由 Harness 代为执行,执行完把结果回填进上下文。
工具调用是 Harness 安全模型的基石:它是模型访问世界能力的唯一合法通道。每个工具有名字和 schema(Read、Write、Bash、Edit、Grep、Agent、WebFetch……),Harness 维护一张"工具表"把名字映射到处理函数。模型输出的工具调用请求,Harness 在权限管线约束下执行——没有权限就拒绝,正如内核在权限检查失败时从 syscall 返回 EACCES。
4.6.3 精确对应
| syscall 概念 | 工具调用对应 | 同构点 |
|---|---|---|
| Ring 0 / Ring 3 | Harness 执行层 / 模型推理层 | 特权级隔离 |
| syscall table | 工具表(tool registry) | 能力入口注册表 |
| syscall number | 工具名 + 参数 schema | 入口标识 |
| 内核态执行 | Harness 执行工具 | 代为执行 |
| 权限检查(capability) | 权限管线 + Hooks | 执行前硬约束 |
| 返回值写入用户寄存器/内存 | 结果回填上下文窗口 | 结果回传 |
| errno | 工具执行错误回填 | 失败信号 |
Claude Code 的工具表是高度工程化的:Read/Write/Edit 做文件、Bash 做 shell、Grep/Glob 做搜索、Agent 派生子代理、WebFetch/WebSearch 做网络、NotebookEdit 做 Jupyter、Task/Create/Update/List 做任务管理。这张表对应一个完整的 syscall table——一个 Agent 的"能力面"就是它的工具表。
4.6.4 失真:参数验证、确定性
失真在于:
- OS syscall 的参数是结构化的(整数、指针、长度),内核做严格验证;工具调用的参数是模型生成的自然语言 + JSON,验证依赖 schema 校验,但参数的语义正确性无法在执行前确定(模型可能传一个不存在的文件路径,只能执行后才知道 ENOENT)。
- syscall 行为是确定性的(同参数同结果);工具调用可能涉及非确定性外部系统(网络请求、shell 命令的副作用)。
- syscall 是同步阻塞的;工具调用大多是同步的,但有些(子代理、后台任务)是异步的——这反而比传统 syscall 更接近 OS 的异步 I/O(io_uring/aio)。
4.7 MCP 与设备驱动 ≈ VFS 与驱动模型
4.7.1 OS 侧:VFS、设备驱动、统一接口
OS 的设备驱动模型解决了"如何让内核不关心具体硬件细节"的问题。VFS(虚拟文件系统)提供统一接口(open/read/write/close),底层可以是 ext4、XFS、NFS、tmpfs。设备文件把外设抽象成文件(/dev/sda 是磁盘、/dev/null 是黑洞、/dev/random 是随机源)——"一切皆文件"让程序不需要为每种设备写专门代码。
驱动的特征:统一接口 + 可插拔 + 注册制。一个新设备插进来,装上驱动就能用,上层程序无感。这是 OS 扩展性的根基。
4.7.2 Harness 侧:MCP 作为统一工具协议
MCP(Model Context Protocol) 在 Agent 世界里扮演的就是 VFS + 设备驱动模型的角色。MCP 是 Anthropic 提出的开放协议,统一了"Agent 如何连接外部数据源/工具"。在 MCP 之前,每个 Agent 框架都自己定义工具接口,互不兼容;MCP 出现后,一个 MCP server(如 GitHub MCP、Slack MCP、Postgres MCP)可以被任何支持 MCP 的 Agent 调用——"写一次驱动,到处运行"。
Claude Code、OpenAI Codex、OpenCode、OpenClaw 四款工具全部支持 MCP——它成了行业公约数。这与 USB 在硬件世界、PCIe 在主板世界的地位一致:一个让生态可插拔的标准接口。
4.7.3 对应关系
| OS 概念 | MCP 对应 | 同构点 |
|---|---|---|
| VFS 统一接口 | MCP 协议规范 | 统一的访问契约 |
| 设备驱动 | MCP server | 具体能力的实现 |
| 设备文件 | MCP 工具名 | 能力入口 |
| 驱动注册 | MCP server 注册 | 启动时挂载能力 |
| 可插拔 | MCP server 可热加 | 生态可扩展 |
| /dev/null 等特殊设备 | 内置特殊工具(WebFetch 等) | 内核内置能力 |
浏览器工具(browser_navigate、browser_click、browser_snapshot)和 computer use 是更高维的"驱动"——它们把"整个 GUI 桌面"抽象成一组可调用的工具,对应 OS 把显卡/键鼠抽象成设备。当 Claude Code 通过 browser 工具操作一个真实浏览器时,它在结构上就是"内核通过驱动操作外设"。
4.7.4 失真:发现性、热插拔
失真在于:
- OS 的设备有热插拔检测(udev);MCP server 的发现和连接需要显式配置,没有真正的"热插拔"。
- OS 驱动与内核 ABI 紧绑定;MCP server 跨进程(甚至跨机器)通信,有协议开销和失败模式(MCP server 崩溃、超时)——这更像 OS 的"网络文件系统 NFS"而非本地驱动。
4.8 权限四层 + Hooks ≈ 保护环与 capability
4.8.1 OS 侧:保护环、capability、访问控制
OS 安全的核心是特权级与访问控制:
- Ring 0–3:x86 的四个特权级,内核 Ring 0、驱动 Ring 1–2、用户程序 Ring 3。低特权级不能直接执行高特权级指令。
- Unix 权限模型:rwx 三元组 × owner/group/other,配 UID/GID。
- capability(Linux capabilities):把 root 的特权拆成 40+ 个细粒度能力(CAP_NET_BIND_SERVICE、CAP_SYS_ADMIN...),按需授予。
- SELinux / AppArmor:强制访问控制(MAC),基于策略标签。
- seccomp:限制进程能调用哪些 syscall,把能力面缩到最小。
核心理念:安全是默认拒绝,能力是显式授予。
4.8.2 Harness 侧:权限四层 + Hooks 拦截
Claude Code 的安全哲学可以浓缩成一句话:Prompt 是软约束,代码是硬约束——安全边界必须在工具执行之前。这与 OS 的"不能依赖用户态自觉,必须靠内核强制"完全同构。
权限四层防御(基于源码拆解):
- 工具 schema 约束:工具的参数 schema 本身是第一道(Read 工具不能写)。
- 权限模式:default/acceptEdits/plan/bypassPermissions 等模式决定整体严格度——对应 OS 的"运行级别"(runlevel)或"安全策略 profile"。
- 权限回调检查:每次工具执行前调用权限回调,按规则允许/拒绝/询问——对应 OS 的 capability 检查。
- Hooks 拦截:在工具执行前后插入用户自定义的 shell 命令(PreToolUse / PostToolUse),可阻止、可修改、可审计——对应 OS 的 LSM(Linux Security Modules)钩子或 seccomp filter。
Hooks 是尤其精妙的对应。Claude Code 的 Hooks 允许在工具执行之前运行一段代码,根据代码返回值决定放行、阻止、或修改——这几乎就是内核 LSM 钩子的翻版。你可以写一个 Hook:"任何 rm -rf 之前必须人工确认",这对应 OS 的"在 unlink syscall 入口插一个 LSM 钩子强制审计"。
OpenCode 的 OPENCODE_PERMISSION 环境变量、OpenClaw 的 SOUL 行为约束,都是同一思路的变体。
4.8.3 失真:硬件隔离 vs 协议约束
最关键的失真在这里:
- OS 的 Ring 隔离是硬件强制的(MMU + 特权指令),用户态物理上无法执行内核指令;Harness 的权限隔离是协议层的——模型输出的工具调用被 Harness 拦下检查,但如果 Harness 实现有 bug、或模型找到了绕过 schema 的方式(prompt injection),隔离可能被突破。
- OS 的安全边界是二值的(要么允许要么拒绝);Harness 的安全是概率性的——Prompt 约束("不要做 X")对模型是软的,模型可能在某些情况下不遵守。这就是为什么必须"代码是硬约束"——把能在代码层强制的全部强制掉,把不能强制的留给 prompt 并接受其概率性。
- 这逼出了 Harness 独有的设计:分层防御 + 最小权限子代理。code-reviewer 子代理只有 Read/Glob/Grep——这是 OS 的"最小权限进程"思想,但用工具表裁剪实现,而非 capability。
4.9 沙箱与隔离 ≈ 容器与 OS 级沙箱
4.9.1 OS 侧:沙箱技术谱系
OS 沙箱的目的是限制一个程序的副作用爆炸半径。谱系:
- chroot(1979):改根目录,最古老的隔离。
- jails(FreeBSD)/ zones(Solaris):在 chroot 基础上加进程/网络隔离。
- cgroup + namespace(Linux):资源限制 + 视图隔离,容器的基石。
- Seatbelt(macOS sandbox-exec)/ Landlock(Linux):基于路径的细粒度沙箱,限制文件/网络访问。
- seccomp-bpf:限制 syscall 调用面。
- 容器/微 VM:Docker、Firecracker,完整 OS 级隔离。
核心理念:默认拒绝,最小暴露,失败可回滚。
4.9.2 Harness 侧:多手段叠加的沙箱
四款工具的沙箱策略各有取舍,但都拒绝"把安全完全委托给模型判断":
- Codex 用 OS 级沙箱(macOS Seatbelt、Linux Landlock),默认网络禁用 + 目录沙箱化。这是最 OS 原生的做法——直接复用 OS 的沙箱原语,限制爆炸半径。对应 OS 的"在容器里跑不可信代码"。
- Claude Code 用权限四层 + Hooks + 子代理最小权限。这是协议层为主、OS 层为辅的做法——它依赖 Harness 的权限管线,但也在 OS 层做了一定隔离(如子代理的工作目录隔离)。
- OpenCode 用权限模式 + 沙箱配置。
- OpenClaw 继承 OpenCode + SOUL 行为约束——用自然语言约束做"软沙箱"。
这个谱系对应 OS 沙箱的"硬隔离 vs 软隔离"光谱:Codex 偏硬(OS 级),OpenClaw 偏软(行为约束),Claude Code 居中。
4.9.3 失真:沙箱强度 vs 易用性
失真在于 Harness 沙箱的"硬度"普遍不如 OS 容器:
- Codex 的 OS 级沙箱是最硬的,但也最不灵活(网络禁用让很多任务做不了)。
- Claude Code 的权限管线灵活但依赖 Harness 实现正确性。
- 没有任何 Harness 做到了 Firecracker 微 VM 级别的硬件强隔离——因为 Agent 要操作的恰恰是用户的真实环境(文件、git、shell),过度隔离会让它丧失生产力。这是 Agent 沙箱的根本张力:隔离越强,能力越弱。OS 容器没有这个张力(容器里的服务本来就不该碰宿主),Agent 沙箱有(Agent 的价值就在于能碰宿主)。
4.10 子代理消息与 A2A ≈ IPC
4.10.1 OS 侧:进程间通信
进程隔离了地址空间后,要协作就得靠 IPC(Inter-Process Communication):
- 管道(pipe):父子进程间的字节流。
- 命名管道 / FIFO:无亲缘关系进程间。
- 消息队列:结构化消息。
- 共享内存 + 信号量:最高性能的 IPC,直接共享页。
- socket(Unix domain / TCP):最通用,可跨机器。
- 信号(signal):异步通知。
IPC 的核心难题是同步与一致性——谁等谁、谁唤醒谁、如何避免死锁。
4.10.2 Harness 侧:子代理消息与 A2A 协议
Claude Code 的子代理通信模型是请求-结果式:父 Agent 通过 Task/Agent 工具派生子代理,传入任务 prompt,子代理跑完返回最终文本。这对应 OS 的"管道 + fork/exec/wait"——父进程写管道、fork 子进程读管道、wait 回收。Workflow 工具的 parallel()/pipeline() 编排,对应 OS 的"并行 fork 多个进程 + wait 全部"或"流水线 fork"。
更复杂的 Agent 间通信正在标准化为 A2A(Agent-to-Agent)协议——让不同框架的 Agent 互相发现、协商、协作。这对应 OS 的"网络 socket + RPC"——跨"机器"(跨 Agent 框架)的通信需要标准协议。
OpenClaw 的虚拟公司"开会/讨论/审批"模式,是更高层的 IPC 语义化——多 Agent 通过结构化消息(而非共享内存)协调,对应 OS 里"基于消息传递的微内核"架构(如 Mach、L4)。
4.10.3 失真:共享内存
最显著的失真:Harness 几乎没有"共享内存"式 IPC。子代理不能与父代理共享上下文窗口的某一段(那是"地址空间",天然隔离)。所有协作都必须通过消息传递——父传 prompt、子回结果。这逼出了 Harness 的"上下文边界即安全边界"设计,但也让"高频细粒度协作"很贵(每次都要重新装配上下文)。这对应 OS 里"共享内存 IPC 比消息传递快几个数量级"——Harness 选择了慢但安全的模型。
4.11 Skills 与包生态 ≈ 包管理器
4.11.1 OS 侧:包管理
apt(Debian)、yum/dnf(Red Hat)、npm(Node)、cargo(Rust)、pip(Python)——包管理器解决了"能力发现、安装、版本、依赖"的问题。它的核心抽象:
- 仓库(repository):集中索引可用包。
- 清单(manifest):包的元数据(名称、版本、依赖、入口)。
- 依赖解析:自动解决版本冲突。
- 签名验证:防篡改。
4.11.2 Harness 侧:Skills 与 MCP registry
Claude Code 的 Skills 是"可安装的能力包"——一个 Skill 是一个目录,包含 SKILL.md(描述)+ 实现,可以被 mcp__deepthink__install_skill 这样的工具从 registry 安装。这几乎就是 apt/npm 的翻版:
- skills.sh 是"registry"(对应 npmjs.org)。
anthropic/memory、anthropic/think是包名(对应express、lodash)。- install/uninstall 对应
npm install/uninstall。 - 项目级 skill(
.claude/skills/)对应node_modules(项目本地依赖)。 - 用户级 skill 对应
npm install -g(全局安装)。
MCP server 的 registry 走的是同一逻辑——一个 MCP server 是一个"能力包",注册到某个目录,Agent 启动时挂载。
OpenClaw "预装 Claude Skills"被称为"最大的巧思"——直接复用 Anthropic Skills 生态。这对应 OS 发行版"预装常用包"(如 Ubuntu 预装 vim、curl)。
4.11.3 失真:依赖地狱、签名
失真在于 Skills/MCP 生态还远未成熟:
- 没有真正的依赖解析(一个 Skill 依赖另一个 Skill 怎么办?)。
- 签名验证弱(安装一个恶意 MCP server 能读你的环境变量、外传数据)——这对应 npm 早期没有签名的问题,但 Agent 场景后果更严重(MCP server 有工具执行能力)。这正是 DeepThink CLAUDE.md 强制要求"安装任何外部 Skill 或 MCP Server 前必须检查源代码、扫描可疑指令、等待明确批准"的根源。
4.12 可观测性 ≈ dmesg / perf / eBPF
4.12.1 OS 侧:内核可观测性
OS 的可观测性栈:
- dmesg / journal:内核日志环形缓冲。
- perf / ftrace:性能计数与函数跟踪。
- eBPF:可编程的内核观测,安全地在内核态运行沙箱程序采集指标。
- /proc / /sys:运行时状态的伪文件系统视图。
- top / ps / netstat:进程/网络快照。
可观测性的核心价值:让黑盒变白盒——当系统出问题时,能看到"发生了什么、谁在占用、卡在哪里"。
4.12.2 Harness 侧:日志、telemetry、CEE
Claude Code 的可观测性:
- run log:每轮工具调用、每条消息都记入日志(JSONL 格式)——对应 dmesg/journald。
- token 用量统计:每个 turn、每个子代理的 token 消耗——对应 perf 的 CPU/内存占用统计。
- Task 系统状态:TaskList/TaskGet/TaskUpdate 跟踪任务状态机——对应 /proc 里进程状态。
- CEE(中央执行引擎)调度:DeepThink 的"CEE 中央调度防止并发冲突"——对应 OS 的 cgroup 资源限额与调度审计。
Claude Code 的 analysis 仓库(如 yanyycc/claude-code-analysis)把整个 Harness 的子系统拆成架构总览、安全分析、上下文管理、工具调用、Skills、MCP、沙箱、多 Agent、会话存储等独立文档——这本身就是"给内核写文档"的工程实践。
4.12.3 失真:黑盒推理
最痛的失真:OS 内核是白盒(开源、可读源码、可插桩),LLM 推理是黑盒(权重不可读、中间激活不可外部访问)。当 Agent 出错时,你能看到工具调用的日志,但看不到模型为什么这么决策——这比 OS debug 难一个量级。这逼出了"监督者 Loop + 客观验证"——既然不能看穿模型,就靠反复跑 + 外部证据收敛。
4.13 自修复闭环与会话恢复 ≈ 容错与恢复
4.13.1 OS 侧:容错与恢复
OS 的容错:
- journal / 日志:崩溃后可回放定位。
- 检查点(checkpoint):定期保存进程状态,崩溃后恢复。
- 进程重启:init 对关键进程 respawn。
- 文件系统 journal:ext4/xfs 的日志,保证崩溃后一致性。
- OOM killer:内存耗尽时杀进程保系统。
4.13.2 Harness 侧:Bug 自修复闭环与会话恢复
DeepThink 的 Bug Auto-Fix Loop(Bug 自修复闭环) 是 Harness 独有的容错范式:当测试失败时,不是简单重试,而是进入"检测-定位-修复-验证"的闭环循环,直到修复或判定无法修复。这对应 OS 的"服务崩溃 → 自动重启 + 告警",但更主动——它不只是重启,而是尝试修复根因。
Claude Code 的 session resume(会话恢复)对应 OS 的检查点:会话状态(消息历史、任务列表、上下文检查点)可持久化,崩溃或主动退出后可恢复继续——这对应 OS 的"挂起进程(SIGSTOP)后恢复(SIGCONT)"或 CRIU(checkpoint/restore in userspace)。
Workflow 的 resumeFromRunId 机制——"最长不变前缀的 agent() 调用返回缓存结果,从第一个改变处重新运行"——这是增量检查点恢复,对应数据库的 WAL(write-ahead log)重放:已完成的子任务不重跑,只重跑改变的部分。
4.13.3 失真:根因修复 vs 重启
失真在于 OS 容错主要是"重启 + 恢复状态"——它不修根因(那是开发者的事)。Harness 的自修复闭环尝试修根因(改代码让测试过),这是 OS 没有的能力——因为 OS 不知道"程序为什么错",而 LLM 能"理解"代码语义并尝试修复。这是 Harness 相对 OS 的超越点,而非失真点。
4.14 多租户与计费 ≈ UID/cgroup 与配额
4.14.1 OS 侧:多用户与配额
- UID/GID + namespace:用户隔离。
- cgroup:资源限额(CPU、内存、IO)。
- ulimit:进程级资源上限。
- quota:磁盘配额。
4.14.2 Harness 侧:多租户与 token 计费
DeepThink 作为企业级 Agent SaaS,其多租户隔离对应 OS 多用户:
- 多租户隔离 = namespace + UID。
- 权限分级 = 用户组 + sudoers。
- 计费弹性 = cgroup 限额 + 云计费。
- 企业集成 = LDAP/SSO = PAM 认证。
Token 预算是 Harness 独特的"资源限额"维度——Workflow 的 budget 对象(total/spent/remaining)让一个任务有 token 上限,超额时 agent() 抛异常停止。这几乎就是 cgroup 的"内存硬上限触发 OOM kill"的翻版,只是计量单位从字节变成 token。
4.14.3 失真:弹性 vs 硬限
失真不大,这条类比相对干净。唯一的失真:OS 配额是确定性的(超了就 kill);token 预算在 Agent 跑到一半时超了,可能产生半成品(不像进程被 kill 那样干净)。这要求 Harness 设计"预算耗尽的优雅降级"——OS 不需要。
五、类比的失真边界:哪些地方类比会失效
一个严肃的类比,必须讲清楚它在何处失效。本部分系统化地总结前文各层零散提到的失真点,把它们组织成一个统一的"失真地图"。理解失真地图,比理解类比的成立更重要——它决定哪些 OS 经验可以直接平移、哪些必须重造、哪些根本不适用。
5.1 物理层失真:湿 CPU 与干 CPU 的根本差异
| 物理属性 | 经典 OS CPU | LLM "CPU" | 失真后果 |
|---|---|---|---|
| 确定性 | 完全确定(同输入同输出) | 概率性(同输入不同输出) | 不能假设硬件可靠,要靠循环+验证收敛 |
| 节拍 | 纳秒级固定时钟 | 秒级可变(一次推理 1–30 秒) | 没有"时间片"概念,调度无法抢占 |
| 频率 | GHz(10⁹ ops/s) | ~10 tok/s(10¹ ops/s) | 差 8 个数量级,"并发"的意义完全不同 |
| 中断 | 硬件中断可抢占 | LLM 推理一旦开始不可中断 | 协作式调度而非抢占式 |
| 状态 | 寄存器是持久态 | 无状态(每次前向重新计算) | 状态必须全在外部维护 |
| 可读性 | 源码开源、可插桩 | 权重黑盒、中间激活不可访问 | debug 困难一个量级 |
| 成本 | CPU 时间廉价 | token 昂贵(按量计费) | "并发 fork 一切"不可行,要慎用 |
| 错误模式 | 崩溃(crash)或挂起(hang) | 幻觉(hallucination)或偏题 | 错误是"语义错"而非"执行错" |
这张表是全部失真的根源。一句话概括:LLM 是一颗慢 8 个数量级、贵几个数量级、概率性、不可中断、不可读、会幻觉的 CPU。OS 的全部工程优化(高并发、抢占调度、精确配额、确定性 debug)都建立在那张表左列的假设上;当右列成立时,这些优化要么失效、要么必须改造。
最深的失真:确定性。OS 的每一层都假设"硬件可靠"——内存写进去读出来一样、指令执行结果确定。LLM 这个假设破灭了。同样的 prompt 不保证同样的输出、同样的工具调用不保证同样的副作用。这逼出了 Harness 独有的设计范式:靠循环和外部证据收敛不确定性(监督者 Loop、二选一结论、客观验证、截图/日志/测试结果支撑)——OS 不需要这套,因为 OS 的底层是确定的。
5.2 内存模型失真:随机访问 vs 只追加的语义磁带
这是第二条根本失真,已在 4.4 详述,这里系统化:
| 内存属性 | RAM | 上下文窗口 | 失真后果 |
|---|---|---|---|
| 访问模式 | 随机访问(O(1) 任意地址) | 只追加 + 顺序消费 | 不能 O(1) 跳读,只能顺序处理 |
| 换页 | 无损(页原样换出换入) | 有损(compact 是摘要) | 不可逆,必须区分"可丢"与"不可丢" |
| 寻址 | 精确地址(字节级) | 语义位置(消息 ID) | 不能精确到"某一行",只能粗粒度摘要 |
| 共享 | 共享内存 IPC 可行 | 不能共享窗口片段 | 所有协作必须消息传递,无"共享内存"快通道 |
| 容量 | 可扩展(加 RAM/swap) | 硬上限(模型决定) | 不能靠加硬件解决,只能靠压缩 |
这条失真直接决定 Harness 的内存管理不能照搬 OS:
- OS 的 LRU 页面置换可以精确到页;Harness 的压缩只能粗粒度摘要整段。
- OS 的 swap 无损,所以可以激进换出;Harness 的 compact 有损,所以必须保守——能写文件的不摘要,能摘要的不删,能子代理分流的不挤父上下文。
- OS 的"共享内存"高性能 IPC 在 Harness 不存在,所以多 Agent 协作必须走"消息传递"模型,性能上限低。
5.3 调度模型失真:抢占式 vs 协作式
| 调度属性 | OS | Harness | 失真后果 |
|---|---|---|---|
| 抢占 | 内核可强制打断 | 几乎不可抢占 | 长 Agent 跑飞了无法强制叫停 |
| 时间片 | 固定(1–10ms) | 无(一次推理几秒到几十秒) | 无法做"公平轮转" |
| 优先级 | 数值化 nice/优先级 | 语义化(任务描述) | 优先级是模糊的 |
| 上下文切换 | 纳秒级无损 | 秒级有损(丢中间状态) | 切换很贵,要少切 |
| 死锁 | 可检测(资源分配图) | 难检测(语义死锁) | 两个 Agent 互相等对方结果,无法自动检测 |
这条失真决定:Harness 的多 Agent 编排几乎必然是协作式的,而非 OS 式的抢占式。监督者只能等子 Agent 返回,不能强制切换。这意味着 Harness 必须有"超时 + 强制终止"机制(TaskStop 工具)来应对子 Agent 跑飞——这是 OS 的 kill -9 在 Harness 里的对应物。
5.4 安全模型失真:硬件隔离 vs 协议约束
已在 4.8 详述,系统化:
| 安全属性 | OS | Harness | 失真后果 |
|---|---|---|---|
| 隔离强度 | 硬件强制(MMU/Ring) | 协议层(Harness 拦截) | 有被 prompt injection 绕过的可能 |
| 边界二值性 | 严格(允许/拒绝) | 概率性(prompt 是软约束) | 不能 100% 依赖 prompt 约束 |
| 攻击面 | syscall 参数 | 自然语言输入 | 无法在执行前验证"语义正确性" |
| 提权 | 有限且可控 | prompt injection 可能让模型"自愿"越权 | 攻击向量是"说服模型"而非"利用漏洞" |
最痛的是 prompt injection:模型把"数据"当"指令"执行。这在 OS 里没有对应物——OS 的数据与指令有明确的内存段分离(NX bit)。Harness 里"指令"(system prompt/工具结果)和"数据"(用户输入/文件内容)混在同一个上下文窗口里,模型无法可靠区分。这逼出了 Hooks 硬约束——既然不能让模型自觉,就用代码在工具执行前强制。
5.5 停机与判定失真:确定性停机 vs 语义停机
| 停机属性 | OS | Harness | 失真后果 |
|---|---|---|---|
| 进程结束 | 明确 exit code | 语义判断"任务完成" | 无确定停机判定 |
| 成功标准 | 退出码 0 | "测试通过 + 代码正确"等语义 | 要 Loop 到外部证据满足 |
| 失败标准 | 非零退出码 | "无法修复需人工介入" | 要二选一结论 |
这条失真逼出了 DeepThink CLAUDE.md 强制的"监督者 Loop + 二选一结论"——既然没有确定停机,就靠 Loop 收敛到"修复"或"无法修复"两个明确状态。这是 OS 不需要的工程范式(OS 进程自然退出),但 Harness 必须有。
5.6 失真地图总结:哪些经验可平移,哪些要重造
把上述失真压缩成一张可操作的"经验迁移地图":
| OS 经验 | 可否平移到 Harness | 说明 |
|---|---|---|
| 分层架构(内核/用户态) | ✅ 可平移 | 模型=用户态,工具=syscall,Harness=内核,天然对应 |
| 虚拟内存思想(按需/压缩/换页) | ✅ 可平移(需改造) | 五层压缩管道已实现,但需改"有损压缩"语义 |
| 最小权限 / capability | ✅ 可平移 | 子代理工具表裁剪已是实践 |
| 沙箱 / 容器 | ✅ 可平移 | Codex 已用 Seatbelt/Landlock |
| 包管理 | ✅ 可平移 | Skills/MCP registry 已成型 |
| 抢占式调度 | ❌ 不可平移 | LLM 推理不可中断,只能协作式 |
| 共享内存 IPC | ❌ 不可平移 | 上下文窗口天然隔离,只能消息传递 |
| 确定性 debug | ❌ 不可平移 | 模型黑盒,要靠外部证据 |
| 高并发 fork 一切 | ⚠️ 要改造 | 太贵,要慎用子代理 |
| 确定性停机 | ❌ 不可平移 | 要监督者 Loop + 二选一结论 |
| 硬件强隔离 | ❌ 不可平移 | 只能协议层 + OS 沙箱叠加 |
这张表是本报告对工程师最直接的交付物。它把"Agent Harness 即 OS"从一个口号变成了一个可操作的工程检查清单:你想建一个 Agent 平台?照着 OS 的分层架构、虚拟内存思想、最小权限、沙箱、包管理去建(这些能平移);但别指望抢占调度、共享内存、确定性 debug、确定性停机(这些要么重造要么放弃)。
六、现有"Agent OS"实现谱系:谁在自觉复刻 OS 结构
本部分盘点现有实现,看它们在多大程度上自觉或不自觉地复刻了 OS 结构。这既是对前文类比的实证检验,也是一张产业地图。
6.1 学术谱系:AIOS 与 LLM OS
6.1.1 AIOS: LLM Agent Operating System(Rutgers,2024)
AIOS 是学术界最自觉地把"Agent OS"当命题来做的系统。论文明确把 LLM 嵌入 OS 作为"OS 的大脑",目标是"优化资源分配、促进 Agent 间上下文切换、实现 Agent 并发执行、提供工具服务、维护访问控制"——这几乎逐条对应 OS 的五大职责。
AIOS 架构分三层:
- 应用程序层:各种 Agent 应用。
- 内核层:LLM 内核 + Agent 调度器 + 内存管理 + 工具管理 + 访问控制 + LLM 系统调用接口。
- 硬件层:物理资源。
它甚至设计了"LLM 系统调用接口(LLM syscall)"和"AIOS SDK"——这是把 OS 的 syscall 抽象直接搬到 LLM 之上。Agent 通过 LLM syscall 透明地利用内核服务,正如进程通过 syscall 利用内核服务。AIOS 是本报告类比的最自觉的学术实证。
但 AIOS 的局限在于:它是研究原型,没有工业级 Agent Loop、没有工业级上下文压缩、没有工业级权限模型——它论证了"可以这么做",但没有在工业压力下验证"这么做够不够"。
6.1.2 Karpathy 的 LLM OS 构想(2023)
Karpathy 的最初构想把 LLM OS 拆成 7 部分:
- LLM 作为 CPU(GPT-4 Turbo,"256 核"= batch size,"@ 20Hz"= tok/s)。
- 上下文窗口作为 RAM(128K token)。
- 嵌入工具作为文件系统。
- 外设 I/O(视频、音频)。
- 以太网(浏览器)。
- 软件 1.0 工具(计算器、代码解释器、终端)。
- 与其他 LLM 互联。
这个构想比 AIOS 更早、更直觉、更传播性。它的每一条对应都能在本报告的映射表里找到。Karpathy 的贡献是第一次把 LLM OS 当一个严肃命题讲给工程界听,尽管他本人也承认这是"构想"而非实现。
6.1.3 2025 更新:LLM OS 技术栈
2025 年产业界对 LLM OS 构想做了更新,核心模块标准化为:
- 代码执行(Python 沙箱)。
- Web 搜索(Brave 等)。
- 文档库 / RAG 系统。
- 图像生成(FLUX 等)。
- Model Context Protocol(MCP)——统一上下文管理。
- Memory 与 Orchestrator(Temporal、LangGraph)。
- 跨对话记忆(Mistral 等)。
这个"OS 栈"的标准化,意味着产业界已经在不自觉中复刻 OS 结构——每个模块对应 OS 的一个子系统。MCP 对应驱动模型,Memory 对应文件系统,Orchestrator 对应调度器,代码执行对应 syscall 服务。这是类比成立的产业实证。
6.2 工业谱系:四款工具的 OS 性
基于本报告前文的架构对比,我们可以给四款工具打一个"OS 性"评分——它们在多大程度上是"一个 OS"而非"一个应用":
| 工具 | OS 性评分 | 核心判断 |
|---|---|---|
| Claude Code | ★★★★★ | 最接近"Agent OS":常驻运行时 + 完整 Loop + 五层上下文管理 + 权限四层 + 子代理 + Hooks + MCP + Skills + 会话恢复。12 层工程包装让它从"应用"变成"运行时"。 |
| OpenCode | ★★★★ | 自觉定位为"内核"("the open source coding agent"),模型自由 + 多前端 + Plan/Build 双 Agent + 可 fork 二次开发。它明确把自己当"内核底座"卖。 |
| Codex | ★★★☆ | OS 级沙箱是最 OS 原生的部分,但受控循环 + 审批卡点让它更像"受监管的 Agent"而非"通用 OS"。云形态让它像"云端容器平台"。 |
| OpenClaw | ★★★ | 多 Agent 虚拟公司 + SOUL/USER/MEMORY 是高层编排,但构建在 OpenCode 之上,自己是"编排层"而非"内核"。更像"桌面环境"(如 GNOME)而非 OS。 |
这个评分印证了一个判断:Claude Code 是目前工业上最接近"Agent OS"的实现。它的 1900+ 文件、12 层包装、五层压缩、四层权限、子代理、Hooks、MCP、Skills、会话恢复,构成了一个相对完整的"运行时"。而 OpenCode 自觉做"内核",是开源世界的对应物。
6.3 谱系的位置图
把学术与工业实现放在一张"OS 化程度"坐标上:
graph LR
A[应用层<br/>Copilot/Cursor] --> B[运行时层<br/>Claude Code/OpenCode]
B --> C[内核层<br/>OpenCode 内核/AIOS]
C --> D[学术构想<br/>Karpathy LLM OS]
style B fill:#ffe
style C fill:#efe
- 应用层(Copilot、Cursor):LLM 是应用的一个模块,不是 OS。
- 运行时层(Claude Code、OpenCode):LLM 是核心,外围有完整 Harness,已是"运行时"。
- 内核层(OpenCode 内核、AIOS):自觉做"可复用的 Agent 内核底座"。
- 学术构想(Karpathy LLM OS):指明方向,尚未工业实现。
DeepThink 作为企业级 Agent SaaS,定位在"运行时层 + 内核层"之上叠加"多租户 + 计费 + 企业集成 + 自进化"——它要做的是企业级 Agent OS 的发行版,正如 Red Hat Enterprise Linux 之于 Linux 内核。
七、工程启示:把 Agent 平台当 OS 来设计
本部分把前文全部论证落到 DeepThink 的工程实践,给出可操作的设计建议。这是本报告的最终交付物。
7.1 四层架构:内核 / 编排 / 能力 / 可观测
DeepThink 应当按 OS 的分层思路,把 Agent 平台显式分成四层:
graph TB
subgraph L4[可观测层 Observability]
L4A[日志/telemetry] --> L4B[CEE 调度] --> L4C[Bug 自修复闭环]
end
subgraph L3[能力层 Capability]
L3A[Skills 包生态] --> L3B[MCP registry] --> L3C[企业集成 飞书/钉钉/企微/LDAP]
end
subgraph L2[编排层 Orchestration]
L2A[监督者 Loop] --> L2B[多 Agent 调度] --> L2C[子代理/Workflow]
end
subgraph L1[内核层 Kernel]
L1A[Agent Loop queryLoop] --> L1B[工具系统 syscall] --> L1C[上下文管理 五层压缩] --> L1D[权限四层+Hooks]
end
L1 --> L2 --> L3 --> L4
这四层各自独立演进,接口稳定:
- 内核层:稳定的核心,对应 Linux 内核。Agent Loop、工具表、上下文管理、权限管线。这一层要"工业级 12 层包装",慢工出细活。
- 编排层:对应 OS 调度器 + init。监督者 Loop、多 Agent 编排、子代理派生、Workflow 脚本。这一层决定"多 Agent 怎么协作"。
- 能力层:对应 OS 包生态 + 驱动。Skills、MCP、企业集成。这一层是生态扩展点,要做开放标准。
- 可观测层:对应 OS 可观测子系统。日志、CEE、自修复闭环、telemetry。这一层让黑盒变白盒。
分层的好处是每层可独立替换:内核层换底层模型(Claude→国产模型)、能力层加新集成(加飞书)、可观测层换监控栈,互不干扰。这是 OS 六十年验证过的工程智慧。
7.2 内核层设计清单
内核层照搬 OS 内核的成熟经验(这些是"可平移"的):
- Agent Loop 显式化:把 queryLoop 的七步循环做成显式的、可观测的、可插桩的状态机,而非隐式的 while-true。每一步可打 telemetry。对应 OS 内核的可观测设计。
- 工具表 = syscall table:工具注册成表,每个工具有 schema(参数、返回值、权限要求)。工具调用走统一入口,入口处做权限检查。对应 OS syscall 统一门面 + 权限检查。
- 上下文管理 = 虚拟内存管理:实现五层压缩管道,明确每层的触发阈值、压缩策略、有损/无损边界。把"可丢"与"不可丢"显式区分——不可丢的写文件(swap 到磁盘),可丢的摘要(内存压缩)。
- 权限管线 = capability + LSM:工具执行前的多层检查(schema → 模式 → 回调 → Hooks),对应 OS 的 syscall 入口权限检查链。Hooks 可插拔,对应 LSM 模块。
- 会话恢复 = 检查点:会话状态可序列化、可恢复。对应 CRIU。Workflow 的 resumeFromRunId 是增量检查点恢复,要做进内核层。
7.3 编排层设计清单
编排层要处理 OS 不能直接平移的部分(抢占式 → 协作式的改造):
- 监督者 Loop 必选:每个非平凡任务都套监督者,强制"客观验证 + 持续迭代 + 二选一结论 + 完整记录"。这是对抗 LLM 概率性的核心机制。对应 OS 的 init 监管 + watchdog,但更主动。
- 超时 + 强制终止:因为协作式不可抢占,必须有 TaskStop 机制应对子 Agent 跑飞。对应 OS 的
kill -9+ OOM killer。超时阈值按任务类型分档。 - Token 预算 = cgroup 配额:每个任务/子代理有 token 上限,超额优雅降级(不是硬 kill 而是收尾)。对应 OS cgroup,但要处理"半成品"问题 OS 没有。
- 消息传递 IPC:多 Agent 协作走消息传递(prompt → result),不走共享上下文。明确"上下文边界即安全边界"。对应微内核的 IPC 模型。
- 死锁检测:监控"两个 Agent 互相等对方结果"的语义死锁,超时则强制打破。OS 的资源分配图检测在 Harness 要语义化,这是新工程。
7.4 能力层设计清单
能力层照搬 OS 包管理与驱动模型:
- MCP 作为驱动标准:所有外部集成都走 MCP 协议,写一次驱动到处用。对应 OS 设备驱动统一接口。
- Skills 作为包生态:能力打包成 Skill(SKILL.md + 实现),有 registry、版本、依赖。对应 apt/npm。
- 安装审查 = 包签名验证:DeepThink CLAUDE.md 已强制"安装外部 Skill/MCP 前必须检查源代码、扫描可疑指令、等待批准"——这是对 prompt injection 和供应链攻击的防御,对应 OS 包签名(GPG)+ 沙箱安装。
- 企业集成作为预装包:飞书/钉钉/企微/LDAP 打包成"预装 Skill",开箱即用。对应 OS 发行版预装常用包。
7.5 可观测层设计清单
可观测层应对 LLM 黑盒的挑战(确定性 debug 不可平移):
- 结构化日志:每轮工具调用、每条消息记 JSONL,可检索可回放。对应 journald。
- Token 审计:每个 Agent/子代理/任务的 token 消耗可追溯,支持计费与优化。对应 perf 的资源占用统计。
- Bug 自修复闭环:测试失败自动进入"检测-定位-修复-验证"循环,这是 OS 没有的超越能力,要做强。
- CEE 中央调度:防止并发冲突,对应 OS 的 cgroup + 调度审计,但要做多租户版。
7.6 安全红线:哪些绝不能让模型自觉
基于 4.8 的失真分析,安全设计的原则是代码是硬约束,prompt 是软约束。DeepThink CLAUDE.md 已列出的红线操作(破坏性命令、凭据篡改、数据外泄、持久化机制、远程代码执行、私钥助记词)必须全部走 Hooks 硬拦截,而非依赖 prompt 约束——因为 prompt 是概率性的,模型在某些情况下会不遵守。这一点比 OS 更严格,因为 OS 不担心"用户态自愿越权",Harness 担心。
7.7 多租户与计费
照搬 OS 多用户 + 配额模型:
- 多租户隔离 = namespace + UID(租户间数据、上下文、权限隔离)。
- 权限分级 = 用户组 + sudoers(租户内角色:管理员/开发者/观察者)。
- 计费弹性 = cgroup 限额(token 预算、子代理并发数、会话时长)。
- 企业集成 = PAM/LDAP/SSO(对接企业身份系统)。
这条类比相对干净,可直接平移云原生多租户的成熟实践。
八、未来演进:从 Harness 走向真正的 Agent OS
本报告论证了"Agent Harness 即 OS",但也要诚实:当前的 Harness 还只是"OS 的雏形",距离一个真正的 Agent OS 还差几个关键跨越。本部分前瞻性地描绘这条路。
8.1 当前 Harness 相对真正 OS 的差距
对照一个成熟 OS(Linux)的完备性,当前 Harness 的差距:
| OS 子系统 | 成熟度 | Harness 现状 | 差距 |
|---|---|---|---|
| 内核调度 | 成熟(CFS/EAS) | 协作式、无抢占 | 不能强制调度,长任务无法打断 |
| 内存管理 | 成熟(虚拟内存/swap) | 五层压缩已较好 | 有损压缩、无随机访问、无共享内存 |
| 文件系统 | 成熟(VFS/ext4) | Markdown + 项目文件 | 无统一语义文件系统、无事务 |
| 驱动模型 | 成熟(USB/PCIe/设备树) | MCP 协议成型 | 无热插拔、无驱动签名验证 |
| 安全模型 | 成熟(capability/SELinux) | 权限四层 + Hooks | 协议层为主、prompt 是软约束 |
| IPC | 成熟(pipe/shm/socket) | 消息传递为主 | 无共享内存、无标准 A2A |
| 包管理 | 成熟(apt/npm/cargo) | Skills/MCP registry | 无依赖解析、弱签名 |
| 可观测 | 成熟(eBPF/perf) | 日志 + telemetry | 不能看穿模型推理黑盒 |
| 容错 | 成熟(journal/CRIU) | 自修复闭环 | 修复能力依赖模型理解力 |
差距集中在三类:(1) 物理层失真带来的不可平移部分(抢占调度、共享内存、确定性 debug);(2) 生态未成熟部分(包依赖解析、驱动签名、标准 A2A);(3) 新范式待发明部分(有损内存管理、语义死锁检测、黑盒可观测)。
8.2 从雏形到成熟:五个关键跨越
跨越一:标准化的 Agent 系统调用(Agent syscall)
当前每个 Harness 自己定义工具表,互不兼容。下一步是标准化 Agent syscall——像 POSIX 那样定义一套跨 Harness 的工具调用规范(read/write/exec/spawn/wait/sense),任何 Agent 实现这套规范就能跑在"Agent OS"上。AIOS 的"LLM syscall"是早期探索,但缺乏工业共识。MCP 在工具协议层做了部分标准化,但还不是完整的 syscall 语义。这条路走通,就是"Agent 世界的 POSIX 时代"。
跨越二:语义文件系统
当前"文件系统"是项目目录 + Markdown。下一步是语义文件系统——按语义而非路径索引的能力存储。Agent 不再 Read("docs/prd/x.md"),而是 Read(语义查询="最近的需求文档")。RAG/向量数据库是雏形,但还远未与 Agent Loop 深度集成。Karpathy 构想里"嵌入工具作为文件系统"指的就是这个方向。
跨越三:抢占式调度的近似——可中断推理
LLM 推理不可中断是物理约束,但可以做近似:流式推理 + 语义中断点。让模型在推理流式输出的"自然停顿点"(段落结束、工具调用边界)可被监督者检查并决定是否继续。这把"不可中断的 30 秒推理"切成"可检查的多个语义段",近似抢占。这是 Harness 独有的工程创新,OS 不需要(OS 直接硬件中断)。
跨越四:跨框架 A2A 通信标准
当前 Agent 框架各自为政(Claude Code 子代理、OpenCode、OpenClaw 虚拟公司互不互通)。下一步是A2A 标准协议——让不同框架的 Agent 互相发现、协商、委托任务。对应 OS 的网络协议栈(TCP/IP 让不同机器通信)。Google 的 A2A 协议提案是这个方向的早期努力。走通这条路,才有"Agent 互联网"。
跨越五:有损内存管理的成熟范式
当前 compact 是粗粒度摘要,有损且不可控。下一步是可控有损压缩——明确标注每段上下文的"可丢度"(lossiness),压缩时按可丢度优先级取舍,关键事实标记为"不可丢"(强制写文件而非摘要)。这是 OS 没有的新范式(OS 内存无损),是 Harness 必须自己发明的工程。一个可能的形态:把上下文组织成"事实块 + 推理链 + 工具结果"三类,每类不同压缩策略。
8.3 DeepThink 的定位:企业级 Agent OS 发行版
把上述演进与 DeepThink 的定位结合,DeepThink 的终局是企业级 Agent OS 的发行版——正如 RHEL 之于 Linux 内核:
- 内核:Claude Code / OpenCode 级的 Agent Loop + 工具 + 上下文 + 权限(自研或集成)。
- 发行版增值:多租户、权限分级、计费弹性、企业集成、合规审计、SLA 保障——这些是"发行版"而非"内核"的活。
- 包生态:企业 Skills 市场(财务 Agent、HR Agent、法务 Agent 预装包)。
- 可观测:企业级 telemetry + 自修复闭环 + 全栈可观测性。
- 自进化:Agent 持续从错误中学习、从代码库吸收知识、从用户反馈进化——这是 OS 没有的"会成长的系统",是 DeepThink 的核心差异化。
"让每一家企业都拥有一支永不停歇、持续进化的 AI 超级研发团队——从工具使用者,到代码创造者,最终成长为可自我繁衍的超级智能体。"这个愿景,在 OS 类比的视角下,就是把 Agent OS 发到每家企业,让它在企业里自进化成超级智能体。OS 不进化,但 Agent OS 会——这是它超越经典 OS 的根本之处。
九、结论
本报告系统性地建立并论证了一个命题:一个成熟的 Agent Harness 在结构上与一个经典操作系统高度同构。
这个类比不是修辞。我们从 Agent Loop 与 CPU 指令周期、上下文窗口与 RAM、工具调用与 syscall、权限四层与保护环、子代理与进程、CLAUDE.md 与 /etc、MCP 与设备驱动、Skills 与包管理、监督者 Loop 与调度器、自修复闭环与容错恢复——逐层做了可验证的结构对应。每一个对应都既有 OS 侧的工程原理,也有 Harness 侧的实现证据(Claude Code 源码、AIOS 论文、Karpathy 构想、Mistral 栈、四款工具对比)。
但本报告同样严肃地刻画了类比的失真边界:LLM 是一颗慢 8 个数量级、贵几个数量级、概率性、不可中断、不可读、会幻觉的"湿 CPU";上下文窗口是只追加的语义磁带而非随机访问内存;调度是协作式而非抢占式;安全是协议层而非硬件层;停机是语义而非确定。这些失真不是类比的反驳,而是它的使用说明书——它们精确地标出哪些 OS 经验可以直接平移(分层架构、虚拟内存思想、最小权限、沙箱、包管理)、哪些必须重造(有损内存管理、语义死锁检测、可中断推理)、哪些根本不适用(抢占调度、共享内存、确定性 debug)。
落到工程实践,这意味着:企业级 Agent 平台应当被当作 Agent OS 来设计。DeepThink 的四层架构(内核/编排/能力/可观测)直接对应 OS 的分层;监督者 Loop + 二选一结论是对抗概率性的核心机制;权限四层 + Hooks 硬约束是对抗 prompt injection 的安全基石;五层上下文压缩是有损内存管理的成熟范式;Skills/MCP 是包生态与驱动模型;Bug 自修复闭环是 OS 没有的超越能力。
从更长的时间尺度看,Agent Harness 正站在"应用 → 运行时 → 内核 → OS 发行版"演进路径的"运行时→内核"过渡点。Claude Code 这一代让 Harness 从应用变成了运行时;下一步是标准化的 Agent syscall(POSIX 时刻)、语义文件系统、A2A 协议(TCP/IP 时刻),最终沉淀出真正的 Agent OS。DeepThink 的定位,是这条路上的企业级 Agent OS 发行版——它做内核之上的发行版增值(多租户、计费、企业集成、自进化、可观测),让 Agent OS 落地到每一家企业。
OS 不进化,但 Agent OS 会。这是它超越经典操作系统的根本之处,也是"超级智能体孵化器"这一愿景的工程根基。从工具使用者,到代码创造者,最终成长为可自我繁衍的超级智能体——这条进化的路,恰恰是一个"会成长的操作系统"的宿命。
附录 A:术语对照表
| Agent Harness 术语 | OS 对应术语 | 一句话解释 |
|---|---|---|
| Agent Harness | Operating System | 围绕无状态模型搭建的运行时系统 |
| Agent Loop | CPU 指令周期 + 调度循环 | 反复观察-推理-行动的执行引擎 |
| queryLoop() | schedule() / fetch-decode-execute | 具体的循环实现 |
| 上下文窗口 | RAM | 有限昂贵的工作内存 |
| compact 检查点 | swap / 内存压缩 | 上下文压缩的恢复点 |
| 五层压缩管道 | 虚拟内存管理 | 上下文分层管理策略 |
| 工具调用 | syscall | 受控的能力访问接口 |
| 工具表 | syscall table | 能力入口注册表 |
| 权限四层 | Ring 0-3 / capability | 执行前的硬约束 |
| Hooks | LSM 钩子 / seccomp | 工具执行前后的可插拔拦截 |
| 子代理 | 进程 | 独立上下文的 Agent 实例 |
| 子代理类型 | 进程类型/能力集 | 不同权限的子代理 |
| Workflow pipeline/parallel | fork/wait/流水线调度 | 多子代理编排原语 |
| 监督者 Loop | init + watchdog | 持续闭环的监管者 |
| 虚拟公司 | 协作式多进程 | 多角色 Agent 协作 |
| CLAUDE.md | /etc / systemd 单元 | 行为事实配置 |
| CLAUDE.md 四层 | 配置覆盖优先级链 | 全局→用户→项目→本地 |
| SOUL.md | sysctl / 服务行为配置 | Agent 个性与边界 |
| MEMORY.md | 用户数据 + 历史日志 | 长期记忆 |
| MCP | VFS + 设备驱动 | 统一工具协议 |
| MCP server | 设备驱动 | 具体能力实现 |
| Skills | apt/npm 包 | 可安装能力包 |
| Skills registry | 包仓库 | 能力发现目录 |
| 会话恢复 | CRIU / 检查点 | 状态持久化与恢复 |
| resumeFromRunId | WAL 重放 | 增量检查点恢复 |
| Token 预算 | cgroup 配额 | 资源限额 |
| 多租户 | namespace + UID | 租户隔离 |
| 权限分级 | 用户组 + sudoers | 租户内角色 |
| Bug 自修复闭环 | 服务自动重启 + 修复 | 失败检测与根因修复 |
| telemetry | dmesg / perf | 运行时观测 |
| CEE 调度 | cgroup 调度审计 | 中央执行调度 |
| TaskStop | kill -9 | 强制终止 |
| 子代理独立上下文 | 独立地址空间 | 上下文隔离 |
| 消息传递 IPC | 管道/socket | Agent 间数据交换 |
| A2A 协议 | TCP/IP | 跨框架 Agent 通信 |
| prompt 软约束 | —(OS 无对应,约束是硬的) | 概率性约束 |
| prompt injection | —(OS 无对应,数据/指令分离) | 数据被当指令执行 |
| 幻觉 | —(OS 无对应,硬件可靠) | 语义错误 |
| 有损压缩 | —(OS swap 无损) | 不可逆内存管理 |
附录 B:参考资料与信源
一手源码与官方文档
- Claude Code 源码分析(1900+ TypeScript 文件,query.ts/queryLoop)。社区拆解:
yanyycc/claude-code-analysis仓库(架构总览、安全分析、上下文管理、工具调用、Skills、MCP、沙箱、多 Agent、会话存储等独立文档)。 - OpenAI Codex CLI(MIT 开源,2025-04 发布)官方文档与源码(Seatbelt/Landlock 沙箱、三档审批、Agent Loop)。
- sst/opencode 官方文档(opencode.ai,Bun + TS monorepo,Plan/Build 双 Agent,AGENTS.md)。
- OpenClaw(Peter Steinberger,2026 加入 OpenAI)官方文档与社区拆解(SOUL.md/USER.md/MEMORY.md,虚拟公司,预装 Claude Skills)。
- Anthropic 官方:Model Context Protocol(MCP)规范、Claude Skills 文档、Agent SDK(TS/Python)。
学术论文 6. AIOS: LLM Agent Operating System(Rutgers University,2024-03,arXiv:2403.16971)。把 LLM 嵌入 OS 作为大脑,三层架构,LLM syscall。
- AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation(Microsoft Research,2023-10,arXiv:2308.08155)。多 Agent 对话框架。
产业构想与拆解 8. Andrej Karpathy,"LLM OS" 构想推文(2023-11-11)。LLM 作为 CPU、上下文作为 RAM、嵌入作为文件系统等 7 部分。
- 2025 LLM OS 技术栈更新(代码执行/Web 搜索/RAG/图像生成/MCP/Memory/Orchestrator)。
- Mistral Agents API(2025)——可行动、可记忆、可协同的 Agent,跨对话记忆。
- Claude Code 动态工作流(Dynamic Workflows,2026)——运行时生成多 Agent Harness 调度脚本。
OS 经典参考 12. Linux 内核文档(CFS 调度器、cgroup、namespace、capability、seccomp、LSM、VFS、设备驱动模型)。
- Operating Systems: Three Easy Pieces(系统化讲虚拟内存、并发、持久化)。
- macOS Seatbelt / Linux Landlock 沙箱文档。
产业实践交叉验证 15. "Claude Code 从入门到精通 v2.0.0"(2026-04 第 2 版,基于 Anthropic 官方 + Boris Cherny 公开分享 + 源码分析)。
- 多篇 Claude Code / Codex / OpenCode / OpenClaw 架构对比公开拆解(共 20+ 篇交叉验证)。
注:部分数据因时效可能变化(如 OpenClaw star 数、模型版本、各工具能力更新),关键结论以原始信源为准。本报告聚焦"结构与类比的稳定性",这类结论对工具版本变化有较强鲁棒性。
报告完。本文为 DeepThink 内部研究,用于指导企业级 Agent 平台的架构设计。