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
点击任意子系统,进入对应章节。
三个参照系
Claude Code
Anthropic 官方 CLI,TypeScript 单体;本站依据本地参考快照分析
reference/claude-codeCodex CLI
OpenAI 官方 CLI,Rust 核心 + OS 级 sandbox,Apache-2.0
reference/codex-cliOpenCode
社区开源,多 provider 抽象 + client/server 架构,MIT
reference/opencode阅读路径
建议从主循环开始,依次读 context、tool gating、memory 与 subagents,最后用对比矩阵回看取舍。五章沿用相同的“概念 → 三家对比 → 代码走读 → 设计权衡 → 迁移”结构:读完你会知道一次 coding-agent 请求如何持续运行、受约束、跨窗口延续,并在多 agent 间协作,也能把这些取舍迁移到自己的 agent。
CHAPTER 1
Agent Loop · 主循环
一次用户请求如何变成一串 LLM 调用与工具执行
CHAPTER 2
Context Assembly & Compaction · 上下文组装与压缩
有限的 context window 里装什么、什么时候扔
CHAPTER 3
Tool & Permission Gating · 工具与权限门控
模型想动手时,谁来说"可以"
CHAPTER 4
Memory · 记忆
跨 session 的知识如何沉淀与召回
CHAPTER 5
Subagent Orchestration · 子代理编排
一个 agent 如何派生、指挥、回收另一些 agent
APPENDIX
对比矩阵
agents × dimensions 一页速查