AI Coding 产品常被放进一张“功能对比表”,但模型、API、Harness 和最终产品并不在同一层。把 Kimi 模型和 Claude Code 的本地文件扫描放在一起比较,或者用 API 的 Prompt Cache 解释 CLI 的 Skill 热更新,都会制造错误结论。

更稳定的比较单位是 Coding Harness:它位于模型与代码仓库之间,负责发现指令、装配上下文、暴露工具、执行 Hook、派生子 Agent,并在长会话里处理压缩与恢复。

核验日期:2026-07-17。表格只记录官方文档和官方更新日志能够支持的事实。未公开的实现统一标成“未知”,不根据相似产品补齐。

先确定比较层级

层级 主要职责 不应混入的结论
模型 推理、上下文容量、工具调用格式、多模态能力 不负责扫描本地 SKILL.md
API / Provider 请求协议、鉴权、缓存计费、托管工具 不等于 CLI 每轮如何装配上下文
Coding Harness 指令发现、Skill 目录、工具运行、compact、Hook、子 Agent 本文的主要比较对象
能力包 Rules、Skills、Commands、Plugins、MCP 配置 需要由 Harness 解释和执行
产品 IDE、终端、账户、套餐、团队治理、云端任务 同一 Harness 可能有多个产品入口

“支持 Skill”至少包含发现、目录暴露、触发、正文加载、资源访问和会话生命周期六个环节。只看到一个 SKILL.md 文件夹,无法判断正文是否已经进入模型上下文。

版本与证据锚点

不同项目的文档版本策略不一致。没有绑定单一发行版的文档,只能作为核验日的当前契约,不能反推某个历史版本已经具备同样行为。

对象 本文采用的版本锚点 可以确认的演进事实 不能从该锚点推出的事实
Claude Code 2026-07-17 官方文档快照;相关页面未绑定单一 CLI 版本 当前 Skill、compact、Hook、Plugin、Subagent 契约 各能力首次发布的准确版本
Codex 2026-07-17 Codex 官方文档快照;相关页面未绑定单一 CLI 版本 当前 AGENTS、Skill、Hook、Plugin、Subagent 契约 文档行为在旧版 CLI 中的起始时间
OpenCode 2026-07-17 官方文档快照;页面未绑定单一发行版 当前 Rules、Skills、Plugin、Agent、MCP 契约 Skill 热更新和 compact 恢复的内部细节
Cursor Agent 当前官方文档;Cursor 2.4、2.5 更新日志 2.4 引入 Skills 与 Subagents;2.5 扩展 Plugins 与嵌套异步 Subagents 当前所有细节从 2.4 起就完全一致
Kimi Code CLI 0.26.0,发布于 2026-07-16 0.1.0 完成 TypeScript/Node 重写;0.20.1 增加 Plugin 生命周期 Hook;0.24.2 重命名动态工具加载能力;0.26.0 扩展 coder 子 Agent Kimi 模型或 Kimi Agent 产品自动继承 CLI 行为

这张表表达的是证据强度,不是产品排名。当前文档回答“现在公开承诺什么”,更新日志回答“某个日期发生过什么”,两者都不能代替未公开的运行时源码。

Coding Harness 的组件结构

组件图把静态组件、运行时数据和恢复链路放在同一个边界内。不同产品会合并其中若干组件,但职责仍可分开辨认。

flowchart LR
    subgraph Sources["Instruction Sources"]
        Rules["AGENTS / CLAUDE / Rules"]
        Skills["Skill Directories"]
        Config["User / Project Config"]
        Plugins["Plugin Packages"]
    end

    subgraph Harness["Coding Harness"]
        Scanner["Discovery Scanner"]
        Catalog["Metadata Catalog"]
        Router["Trigger Router"]
        Loader["Body and Resource Loader"]
        Assembler["Context Assembler"]
        Tools["Tool Registry"]
        Hooks["Hook Dispatcher"]
        Session["Session Journal"]
        Compact["Compactor"]
        Recover["Recovery Policy"]
        Agents["Subagent Runtime"]
    end

    Model["Model Turn"]
    Runtime["Filesystem / Shell / MCP"]

    Rules --> Scanner
    Skills --> Scanner
    Config --> Scanner
    Plugins --> Scanner
    Scanner --> Catalog
    Catalog --> Router
    Router --> Loader
    Loader --> Assembler
    Rules --> Assembler
    Tools --> Assembler
    Assembler --> Model
    Model --> Tools
    Tools --> Runtime
    Hooks -.observe and gate.-> Tools
    Plugins --> Tools
    Plugins --> Hooks
    Model --> Session
    Session --> Compact
    Compact --> Recover
    Recover --> Assembler
    Model --> Agents
    Agents --> Runtime

这里有三个容易混淆的边界:

  • Scanner 读到了文件,不代表 Loader 已经把全文送进模型。
  • Tool Registry 保存了工具,不代表每个工具的完整 schema 都常驻上下文。
  • Compactor 生成了摘要,不代表被加载过的 Skill 正文一定会自动恢复。

指令来源与发现范围

Harness 常规指令来源 Skill 来源 发现与优先级的公开契约
Claude Code CLAUDE.md 家族及受管配置 项目 .claude/skills、用户 ~/.claude/skills、Plugin、Enterprise 启动时暴露 Skill 名称与描述;处理嵌套目录文件时可发现更深层 Skill
Codex 全局 ~/.codex/AGENTS.override.mdAGENTS.md;项目根到当前目录的 AGENTS.md 项目层级的 .agents/skills、用户 $HOME/.agents/skills、管理员 /etc/codex/skills、内置 Skill 每次运行构建指令链;项目指令由根到当前目录叠加,离当前目录更近的文件优先
OpenCode 项目与全局 AGENTS.mdCLAUDE.md 回退、配置中的 instructions 项目和全局的 .opencode/skills.claude/skills.agents/skills 从当前目录向 Git worktree 根查找;可通过权限规则限制具体 Skill
Cursor Agent .cursor/rules/*.mdcAGENTS.md 项目和用户的 .agents/skills.cursor/skills,兼容 .claude/skills.codex/skills 先发现并呈现可用 Skill;Rules 可按 Always、Auto Attached、Agent Requested、Manual 应用
Kimi Code CLI $KIMI_CODE_HOME/AGENTS.md~/.agents/AGENTS.md、项目 .kimi-code/AGENTS.mdAGENTS.md Project、User、Extra、Built-in 四层;项目 .kimi-code/skills.agents/skills,用户目录同理 优先级为 Project > User > Extra > Built-in;支持自动匹配和 /skill:name 手动调用

目录兼容只解决了可移植性的第一步。即使几个 Harness 都识别 .agents/skills,它们对元数据预算、重复调用、热更新和 compact 恢复的处理仍可能不同。

目录、触发与正文加载

Harness 模型先看到什么 触发方式 正文与资源怎样进入运行时
Claude Code 可用 Skill 的名称和描述 模型自动选择或用户 /skill;可用 disable-model-invocation 禁止自动触发 触发后把渲染后的正文作为一条消息加入会话;可按引用读取脚本、参考资料和资源
Codex 名称、描述和路径;初始 Skill 列表有上下文预算 $skill/skills 或依据描述隐式选择 选择后读取完整 SKILL.md;脚本与 references 按需使用
OpenCode skill 工具描述中的可用 Skill 元数据 模型调用原生 skill 工具,权限可设为 allow、deny、ask 调用后加载正文;支持随 Skill 保存脚本和资源
Cursor Agent 发现后的可用 Skill 目录 Agent 依据描述选择或用户通过 / 手动触发;可禁止模型调用 SKILL.md 正文及 scripts、references、assets 渐进加载
Kimi Code CLI 已发现 Skill 的目录信息 依据 description、whenToUse 自动匹配,或 /skill:name 手动调用 展开占位符后把正文发送给模型;Skill 可嵌套调用,公开上限为三层

Codex 的初始 Skill 列表预算值得单独标注:官方文档规定,列表最多占模型上下文的 2%;无法得知上下文大小时使用 8,000 字符上限。超出预算时先缩短描述,仍超出则可能省略部分 Skill 并发出警告。这是目录预算,不是 Skill 正文的大小上限。

Claude Code 的“正文作为一条消息加入会话”也比“按需读取文件”更具体。它说明正文进入了对话历史,因此重复调用和 compact 恢复都需要独立规则。

会话生命周期:热更新、重复调用与压缩恢复

这一组行为经常被“其他产品也是这样”的推断替代。只有 Claude Code 公开了较完整的三段式契约;其余产品存在的空白需要保留。

Harness Skill 热更新 同一 Skill 再次调用 compact 后恢复
Claude Code 监视已存在的 Skill 目录,可在当前会话识别增删改;会话启动时不存在的顶层目录需要重启;Plugin 的 Hook、MCP、Agent 需 /reload-plugins 渲染内容相同只追加简短的 already loaded 提示;内容变化则追加完整正文 最近一次调用的每个 Skill 可重新附着,单个最多 5K tokens,共享 25K tokens 预算,按新到旧处理
Codex 自动检测 Skill 变化;未出现更新时官方建议重启 未公开去重、替换或追加规则 支持 /compact,但 Skill 正文是否单独恢复、恢复预算多少未公开
OpenCode 文档公开通用文件 watcher,但未承诺 Skill 文件的热更新语义 未公开 支持自动 compact 与预留 token 配置,但被调用 Skill 如何进入摘要或恢复未公开
Cursor Agent 当前 Skill 文档未公开热更新语义 未公开 当前公开文档未说明 Skill 正文在压缩后的保留或重挂规则
Kimi Code CLI Skill 文档未公开专用热更新语义;Plugin MCP 可通过 /reload 或新会话刷新 未公开 支持自动 compact 和 /compact,但 Skill 正文的保留、摘要或重挂规则未公开

“有 compact”只能证明 Harness 会压缩会话。要判断一个 Skill 在压缩后是否仍然有效,还需要知道:

  • 正文是否被普通摘要吸收;
  • 是否保存独立的 Skill 调用记录;
  • 是否在恢复阶段重新注入;
  • 是否有单 Skill 和总量预算;
  • 内容变化后采用旧版本还是新版本。

除 Claude Code 外,当前官方材料无法完整回答这些问题。

工具发现、缓存与扩展系统

Skill 解决“如何做”,Tool 解决“能够调用什么”。两者都可能渐进披露,但缓存对象并不相同。

Harness 工具发现与缓存的公开事实 Hooks Plugins Subagents
Claude Code MCP 工具可接入;工具搜索可先暴露名称、再按需取得完整定义 支持生命周期 Hook Plugin 可打包 Skill、Hook、MCP、Agent 等 支持独立上下文、工具与权限配置
Codex 支持内置工具和 MCP;公开文档没有完整定义工具目录裁剪、schema 缓存和失效算法 支持 hooks.json 或配置中的 Hook Plugin 可组合 Skills、MCP 应用或配置、Hooks 支持派生 Agent 和专门角色
OpenCode MCP 工具加入后自动可用且会增加上下文;Plugin 的 npm 依赖缓存于 ~/.cache/opencode/node_modules,这不等于模型 Prompt Cache 通过 Plugin 事件 Hook 扩展 支持本地 JS/TS 和 npm Plugin 支持 primary agent、subagent 与 task 工具
Cursor Agent 支持 MCP;完整工具 schema 的渐进披露和缓存失效细节未公开 当前文档支持 Hooks 2.5 起 Plugin 可打包 Skills、Subagents、MCP、Hooks、Rules 2.4 起支持;2.5 增加异步和嵌套能力
Kimi Code CLI MCP 工具与内置工具共同暴露;0.24.2 将动态工具加载能力名由 select_tools 改为 dynamically_loaded_tools;0.26.0 记录模型或 effort 切换会使现有 Prompt Cache 失效 支持工具、会话、compact、subagent 等生命周期 Hook 可打包 Skills、sessionStart Skill、MCP、Hooks、Commands 内置 coder、explore、plan;0.26.0 扩展 coder 的后台任务、计划、Skill 调用与嵌套 Agent

至少要区分四类“缓存”:

缓存对象 典型用途 不能直接说明什么
Prompt Cache 复用请求前缀的模型计算 Skill 文件是否被重新扫描
Skill Catalog Cache 避免反复扫描目录和元数据 正文是否常驻模型上下文
Tool Schema Cache 延迟或复用工具定义 工具执行结果是否缓存
Plugin Package Cache 复用已下载依赖 模型请求是否命中 Prompt Cache

OpenCode 的 npm Plugin 缓存与 Kimi Code 的 Prompt Cache 失效属于不同层。把两者写成同一个“缓存管理能力”,比较结果没有可解释性。

Kimi 必须拆成四层

Kimi 相关材料容易发生层级串线。Kimi Code CLI 的更新日志不能证明 Kimi 模型具备 Skill 扫描能力;Kimi Agent 的帮助页也不能直接替代 CLI 文档。

flowchart TB
    Model["Model Layer<br/>K3 / K2.7 Code<br/>reasoning and context"]
    API["API and Provider Layer<br/>Kimi / OpenAI / Responses / Anthropic / Google / Vertex protocols"]
    Harness["Harness Layer<br/>Kimi Code CLI 0.26.0<br/>Skills, AGENTS, sessions, compact, tools, hooks, plugins, subagents"]
    Product["Product Layer<br/>Kimi Code service, CLI, VS Code<br/>Kimi Agent is a separate product surface"]

    Product --> Harness
    Harness --> API
    API --> Model
Kimi 层级 2026-07-17 可确认事实 不应归到这一层的能力
模型 Kimi Code 文档列出 K3,最长 1M 上下文;K2.7 Code 为 256K 本地 Skill 扫描、Plugin 重载、AGENTS 优先级
API / Provider Kimi Code CLI 可配置 Kimi、OpenAI、Responses、Anthropic、Google、Vertex 等 Provider 类型 项目目录发现和会话 compact 策略
Harness Kimi Code CLI 0.26.0 负责 Skills、AGENTS、session、compact、MCP、Hooks、Plugins、Subagents 模型套餐、IDE 账户和通用 Kimi Agent 行为
产品 Kimi Code 服务提供 CLI、VS Code 等入口;Kimi Agent 有独立的 Skill 产品说明 不能用 Kimi Agent 帮助页填补 CLI 未公开的重复调用语义

Kimi Code CLI 0.1.0 在 2026 年 5 月转向 TypeScript/Node 基础并包含子 Agent。之后的变化显示,能力扩展已经从单个命令转向插件生命周期、动态工具目录和可嵌套子 Agent。这个演进属于 Harness,不是模型架构演进。

能力演进不是功能清单变长

Coding Harness 的演进可以按控制面拆成六个阶段。产品可能跨阶段实现,也可能只公开其中一部分,因此这张图仍然不是成熟度排名。

flowchart LR
    A["Static Instructions<br/>whole-file prompt"]
    B["Scoped Rules<br/>directory and path precedence"]
    C["Skill Catalog<br/>metadata first"]
    D["Progressive Loading<br/>body and resources on demand"]
    E["Context Lifecycle<br/>hot reload, reinvoke, compact recovery"]
    F["Execution Ecosystem<br/>hooks, plugins, MCP, subagents"]
    G["Dynamic Control Plane<br/>tool search, budgets, cache invalidation"]

    A --> B --> C --> D --> E --> F --> G

静态指令阶段主要回答“模型应遵守什么”。Scoped Rules 增加目录作用域和覆盖关系。Skill Catalog 将可用能力的元数据与正文分离,避免启动时塞入全部操作手册。

渐进加载把 Skill 进一步拆成入口正文、脚本、参考资料和资源。上下文生命周期阶段开始处理文件变更、重复调用和压缩恢复;Claude Code 当前公开契约在这一段最具体。

Hook、Plugin、MCP 和 Subagent 将 Harness 从单循环执行器变成扩展平台。动态控制面继续处理工具目录预算、按需 schema、缓存失效和多 Agent 调度。Kimi Code 0.24.2 与 0.26.0、Cursor 2.4 与 2.5 提供了带日期的演进锚点。

Claude Code、Codex 和 OpenCode 的当前文档能够证明它们已经覆盖多个阶段,但公开材料不足以精确还原每个能力的首次发布时间。缺失的时间点保持未知,比用文档更新时间猜测发布历史更可靠。

当前仍然未知的关键实现

问题 Claude Code Codex OpenCode Cursor Agent Kimi Code CLI
Skill 目录是否有进程内缓存 公开热更新行为,但底层缓存结构未知 未完整公开 未公开 未公开 未公开
重复调用采用去重、替换还是追加 已公开:相同内容短提示,变化内容追加全文 未公开 未公开 未公开 未公开
compact 后是否专门重挂 Skill 已公开,且有 5K / 25K 预算 未公开 未公开 未公开 未公开
工具 schema 的目录预算与淘汰算法 部分工具搜索行为公开,完整算法未知 未公开 未公开 未公开 动态加载存在,完整算法未知
Prompt Cache 与 Skill 变更如何联动 未形成完整公开契约 未公开 未公开 未公开 已公开模型或 effort 切换失效;Skill 变更联动未知
子 Agent 是否继承父会话已加载 Skill 取决于 Agent 配置,通用继承规则未完整公开 未完整公开 未公开 未公开 coder 可调用 Skill,但通用继承规则未公开

这些空白不是待填充的产品缺陷,而是公开可验证边界。源码、运行日志或后续官方文档可以缩小边界;在证据出现前,矩阵不应替实现做决定。

读取这张图谱的方法

评估一个 Coding Harness 时,可以沿一条 Skill 的生命周期逐项核验:

  1. 哪些目录被扫描,作用域和优先级是什么;
  2. 模型初始只看到元数据,还是已经拿到正文;
  3. 自动触发、显式触发和权限控制如何组合;
  4. 脚本、参考资料和资源在何时读取;
  5. 文件变化后目录与正文如何刷新;
  6. 重复调用如何处理相同或变化的内容;
  7. compact 后依靠摘要、重挂还是重新读取;
  8. 子 Agent、Plugin、Hook 和 MCP 是否共享同一上下文边界;
  9. 所谓缓存到底缓存请求前缀、Skill 目录、工具 schema 还是依赖包。

这条核验链把“支持 Skill”拆成可验证行为,也能避免用 UI 上的同名功能推断底层实现。长任务稳定性通常取决于目录预算、恢复策略和扩展边界,而不是 UI 中是否存在一个 Skill 菜单。

系列文章

参考资料

Claude Code:

Codex:

OpenCode:

Cursor:

Kimi: