AI Coding Agent 每次调用模型,都要临时拼出一份工作集。系统指令、用户需求、仓库规则、Skill、工具定义、检索结果、历史消息和外部记忆,经过筛选和排序后进入模型上下文。工具返回的新事实又会写回消息历史或外部状态,供下一轮使用。

这套机制分散在 Harness 的多个组件里,却承担着类似操作系统的职责:发现信息源,解析作用域和优先级,分配有限的 token 空间,调度外部能力,保存执行状态,在压缩或换会话后恢复工作集。

AI Coding Agent 上下文操作系统的组件与生命周期

“上下文操作系统”是一个分析框架,不对应某个产品里的单一模块。它把 Coding Agent 中所有影响模型可见内容的机制放在同一张图上,便于讨论组件边界、运行时生命周期和故障位置。

上下文操作系统管理六类动作

上下文管理可以拆成六类相互独立的动作:

  • 发现:扫描仓库指令、Skill、工具、插件和可检索的数据源。
  • 裁决:按照来源、作用域和优先级解决指令冲突。
  • 选择:从候选信息里挑出本轮需要的内容。
  • 编排:把内容放进 system、tools、messages 或外部引用的合适位置。
  • 改写:追加、截断、裁剪、压缩、外置或重放历史。
  • 持久化:把任务状态、证据和检查点保存到上下文窗口之外。

这六类动作覆盖了从会话启动到任务结束的主要变化。具体产品可以采用不同文件名、角色映射和加载时机,但都绕不开同一组资源约束:有限窗口、指令冲突、信息时效、工具副作用和验证成本。

组件结构

flowchart TB
    subgraph Sources["上下文来源"]
        I["系统与项目指令"]
        U["用户意图"]
        K["Skill 目录与正文"]
        M["外部记忆与检索索引"]
        T["工具 / MCP / 插件能力目录"]
    end

    subgraph Harness["Harness 控制面"]
        P["作用域与优先级解析器"]
        R["能力路由与检索器"]
        A["Context Assembler"]
        C["缓存、裁剪与压缩器"]
        S["会话状态与检查点"]
    end

    subgraph Runtime["模型与执行循环"]
        L["LLM API"]
        G["Agent Loop"]
        E["工具执行环境"]
        V["测试、权限与验收门"]
    end

    I --> P
    U --> P
    K --> R
    M --> R
    T --> R
    P --> A
    R --> A
    C <--> A
    S <--> A
    A --> L
    L --> G
    G --> E
    E --> V
    V -->|"结果与证据"| A
    G -->|"进度与决策"| S

这张图划出了三个边界。上下文来源负责保存候选信息;Harness 控制面决定本轮模型能看到什么;执行循环负责调用模型和工具,并把结果送回控制面。工具的 schema 可以进入上下文,工具本身仍在外部环境执行。外部记忆也不会自动影响模型,只有被检索和装配的片段才会进入本轮工作集。

组件职责

组件 负责的问题 常见故障
作用域与优先级解析器 哪条指令生效,冲突时听谁的 规则互相覆盖、目录作用域误判
能力路由与检索器 本轮需要哪个 Skill、工具或记忆片段 能力未发现、描述误触发、召回噪声
Context Assembler 哪些内容以什么顺序进入模型调用 重复注入、重要信息落入低利用区
会话状态 保存消息、任务进度和当前决策 历史膨胀、旧假设长期滞留
缓存与压缩器 控制成本,并在窗口不足时重写工作集 缓存失效、摘要丢约束、恢复不完整
外部状态 保存可跨压缩、跨会话读取的事实和检查点 状态过期、来源不明、无法追溯
工具执行环境 读取文件、运行命令、调用外部系统 权限越界、副作用不可回滚
验收门 用测试、规则和审批拒绝错误结果 验证缺失、检查结果未回灌

一次任务的上下文生命周期

flowchart LR
    D["发现<br/>指令、Skill、工具、记忆"] --> P["解析<br/>作用域与优先级"]
    P --> A["装配<br/>稳定前缀与本轮工作集"]
    A --> L["模型调用"]
    L -->|"需要外部能力"| E["加载 Skill 或执行工具"]
    E --> W["写回<br/>结果、证据、进度"]
    W --> A
    L -->|"形成候选结果"| V["验证"]
    V -->|"继续迭代"| A
    V -->|"阶段完成"| X["外置检查点"]
    A -->|"窗口或成本触发"| C["裁剪 / Compact"]
    C --> H["重建工作集"]
    H --> A

启动阶段建立能力目录和基础约束。每轮调用前,Assembler 读取当前任务状态,把稳定指令、最近消息和按需材料组合起来。模型需要外部信息时,Harness 加载 Skill 正文或执行工具;返回结果进入消息历史,同时把长期有效的事实写到外部状态。

消息增长到预算边界后,裁剪或 compact 会重写历史。恢复质量取决于检查点是否包含未完成目标、关键约束、已有证据、当前进度和下一步验证方式。缺少其中任意一项,压缩后的 Agent 都可能继续执行,却已经偏离原任务。

阶段完成时还要决定继续同一会话、compact、委托子 Agent,还是从 checkpoint 启动新会话。《Agent 会话边界设计》专门讨论 durable session、active context、工作阶段和 Agent 边界怎样组合。

哪些内容进入模型调用

信息类型 默认位置 生命周期
基础行为与安全约束 稳定指令前缀 会话内长期存在
仓库和目录规则 按作用域选出的指令区 随工作目录变化
工具定义与能力目录 tools 或能力索引 随启用能力变化
用户需求与近期交互 messages 尾部 持续追加,可能被压缩
Skill 正文与参考资料 按需加载区 任务需要时进入,可再次加载
检索结果与工具输出 tool result 或等价消息 短期有效,适合裁剪或外置
计划、证据与检查点 外部状态,需要时重新读取 跨压缩、跨会话保存

同一份信息可以在不同产品里映射到不同协议位置。稳定的分析单位应当是“来源、作用域、注入位置、存活时间和恢复方式”,具体字段名和目录名放在带版本日期的实现文章中维护。

五个工程问题

指令怎样解决冲突

系统级约束、用户需求、项目规则、目录规则和 Skill 指令可能同时出现。优先级只解决一部分问题,作用域和时效同样重要。离当前文件最近的规则未必拥有最高协议权重;协议位置更高的规则也可能因为过于宽泛而缺少执行细节。

这部分需要同时观察静态文件继承关系和最终 API 请求。只读配置文件无法确认实际注入位置,只抓请求也无法解释规则从哪个目录被选中。

能力怎样从目录变成工作集

Skill、工具和 MCP server 都有“目录规模大于本轮需求”的问题。能力目录负责发现,路由器负责缩小候选集,加载器负责取回正文或 schema,执行器负责产生结果。把完整能力池长期塞进 prompt 会挤占任务空间;只保留名字又可能让路由失去判断依据。

可调试的实现需要记录候选能力、命中原因、实际加载内容和执行结果。没有这条证据链,Skill 未生效时很难区分发现失败、路由失败、加载失败和执行偏差。

历史怎样增长和收缩

消息数组同时承担对话记录、工具轨迹和短期工作记忆。追加对结构影响最小,但历史会持续膨胀;截断成本低,却可能破坏依赖;裁剪工具输出适合可重复获取的数据;compact 能释放大块空间,但摘要会丢失细节;外置和重放把状态移到窗口之外,恢复时必须重新取数。

Prompt cache 又给这组操作增加了一层成本约束。稳定前缀有利于复用,频繁改写前部内容会扩大缓存失效范围。缓存、注意力和信息完整性需要分开衡量。

状态怎样跨越 Compact 和会话

对话历史适合保存近期因果,外部文件和存储适合保存长期事实。任务计划、关键决策、证据来源和验收结果都应有明确的写入位置。外部记忆如果没有来源、更新时间和淘汰规则,会把旧结论重新带回工作集。

恢复过程应重新读取事实源,并检查检查点是否仍然成立。摘要负责缩短历史,不能替代事实数据库、代码仓库和测试结果。

执行怎样形成闭环

模型输出只是候选动作。权限系统限制副作用,工具执行产生事实,测试和静态检查判断结果,日志记录每次装配与调用。验证结果必须回到上下文,Agent 才能依据失败证据调整下一轮动作。

这条闭环决定 Harness 是否可调试。一次执行至少要能追溯本轮注入了什么、为何选择这些内容、调用了哪些外部能力、压缩时丢弃了什么,以及哪个验证器接受或拒绝了结果。

文章矩阵

系列按“稳定机制”和“实现快照”分开。稳定机制文章解释长期不变的组件与操作;实现文章记录具体产品在某个版本里的目录、协议位置和加载时机。

层次 主读文章 解决的问题
总入口 本文 组件、边界、生命周期与阅读顺序
上下文栈 《AI Coding Agent 的上下文栈:组件边界与装配顺序》 指令、能力目录、消息、运行时状态的边界与装配关系
能力演变 《从 Rules 到 Agent Skills:能力加载机制的演变》 Rules、Commands、Skills、Hooks、Plugins 的边界与时间线
动态消息 《Agentic Coding 上下文管理全景:Messages 数组的六种操纵策略》 append、truncate、prune、compact、externalize、replay
Skill 生命周期 《AI Coding Agent 的 Skill 加载机制深度解析》 发现、路由、加载、执行与恢复
会话边界 《Agent 会话边界设计:Session、Context Window 与工作状态转移》 阶段退出、状态转移契约、reset、compact 与 Agent 边界
Context Paging 《上下文换入换出:下一代 Scaling》 工作集、compact 和重建
外部记忆 《智能体外部记忆的文件标准与用途全景》 持久化层次、生命周期和治理
Turn 生命周期 《一次 AI Coding Agent Turn 的上下文生命周期》 装配、工具循环、Hook、权限、Compact 和 Subagent
外部协议 《Agent 互操作协议全景》 MCP、A2A、AG-UI 与 Runtime 的边界
产品实现 《2026 Coding Harness 实现图谱》 Claude Code、Codex、OpenCode、Cursor 与 Kimi Code 的版本化事实表

Skill 与项目规则

《Anthropic Skill 半年演化史》记录 Skill 标准、渐进披露和评测方法。《Superpowers Skill 体系》展示流程型 Skill 怎样改变 Agent 行为。《如何写好 AGENTS.md》讨论常驻项目地图的内容边界和治理方式。跨工具载体分类统一放在《上下文栈:组件边界与装配顺序》

Skill 的生产与分发属于另一条链路。《从一个 Git 仓到 Skill Hub》讨论镜像、索引、原子同步和部署,不与运行时加载混在一起。

产品和生态案例

《Claude Code 源码深度解析》覆盖 prompt、cache、compact、tools、MCP、Skills 和 memory。《OpenCode 自研 SDD 流程注入方案》展示不同协议位置怎样影响指令强度。《OMC vs OmO 深度对比》记录 session、fork、memory、Skills 和 MCP 的生态差异。

这些文章适合回答“某个实现如何工作”,不适合承担永久规范。目录路径、默认加载时机、注入角色、token 数字和缓存策略都可能随版本变化。

上下文隔离

《子 Agent 的本质:上下文隔离与专门化》解释独立工作集的价值。《Agent Teams 为什么有效》讨论任务拆分、信息隔离和合并成本。《Multi-Agent 架构深度解析》补充拓扑、通信和编排结构。

阅读路径

  • 排查“规则为什么没生效”:上下文栈 → 能力演变 → Skill 生命周期 → 对应产品实现。
  • 排查“长任务为什么失忆”:Messages 六策略 → 会话边界 → Context Paging → 外部记忆 → 子 Agent 上下文隔离。
  • 设计工具和插件:组件结构 → Hook Loop → Agent 互操作协议 → Context7 MCP Server 深度解析
  • 建设长程 Harness:会话边界 → Context Paging → 《Harness 的本质》 → Hook Loop → Spec 与测试体系。

原路线图的外围工程

原来的 Harness 路线仍然保留,只是不再与上下文机制挤在同一条主线里。

《裸模型为什么像抽卡》解释概率输出和验证边界。《环境可供性:智能的一半是取到正确数据》讨论检索、工具和数据入口。《Harness 的本质:把随机模型锁进可验证的箱体》连接 Spec、测试、权限和循环。《AI 不会吞掉软件,只会吞掉入口》把 Agent 放回软件入口的演化中。

工程手册仍可参考 《Harness Engineering 完整指南》《Harness Engineering:长程 Agent 的工程化底座》。流程与验收层可继续阅读 《SDD 与超级个体》《OpenSpec 实战指南》

稳定结论与版本事实

适合长期保留在总入口里的内容包括组件职责、信息生命周期、上下文操作类型和验证闭环。具体产品的目录、字段、默认行为、模型窗口、token 成本和缓存实现属于版本事实,应在实现文章里标注验证日期和证据来源。

这种分层可以减少两类维护问题:产品升级不会迫使整组原理文章一起改动;同一个机制也不必在多篇产品文章里重复解释。总入口负责坐标系,机制文章负责原理,实现文章负责事实快照,案例文章负责工程取舍。