Harness Anatomy
解码 Coding Agent 的骨架

模型之外那层让它能读、写、调用工具、记住历史并协作的运行时,就是 harness。 本站以 Claude Code、Codex CLI 与 OpenCode 的已核查实现为参照,拆解五个相互咬合的子系统;重点不是给产品排位,而是看同一个问题如何被三套 runtime 具体回答。

范围与证据

每章只讨论已经核查的参考实现:Claude Code 是本地 snapshot;Codex CLI 与 OpenCode 是固定到 commit SHA 的 pinned revisions,并把结论落到源码位置。Claude Code 只标 file:line、不提供外链也不大段复制源码;两个开源仓库的链接则固定到对应 SHA,避免文档随主分支漂移。

一张图看懂 harness

点击任意子系统,进入对应章节。

Memory 记忆 · CLAUDE.md / AGENTS.md Context Assembly & Compaction 上下文组装与压缩 User / Terminal 一次请求 Agent Loop 主循环 · LLM ↔ tool dispatch stream → tool call → result → stream Tool & Permission Gating 工具与权限门控 Subagent Orchestration 子代理编排 tool call result spawn / collect

三个参照系

Claude Code
Anthropic 官方 CLI,TypeScript 单体;本站依据本地参考快照分析
reference/claude-code
Codex CLI
OpenAI 官方 CLI,Rust 核心 + OS 级 sandbox,Apache-2.0
reference/codex-cli
OpenCode
社区开源,多 provider 抽象 + client/server 架构,MIT
reference/opencode

阅读路径

建议从主循环开始,依次读 context、tool gating、memory 与 subagents,最后用对比矩阵回看取舍。五章沿用相同的“概念 → 三家对比 → 代码走读 → 设计权衡 → 迁移”结构:读完你会知道一次 coding-agent 请求如何持续运行、受约束、跨窗口延续,并在多 agent 间协作,也能把这些取舍迁移到自己的 agent。