Harness Anatomy
解码 Coding Agent 的骨架
模型之外那层让它能读、写、调用工具、记住历史并协作的运行时,就是 harness。 本站以 Claude Code、Codex CLI 与 OpenCode 的已核查实现为参照,拆解五个相互咬合的子系统;重点不是给产品排位,而是看同一个问题如何被三套 runtime 具体回答。
范围与证据
每章只讨论已经核查的参考实现:三份源码引用都固定到已审阅的 commit,避免内容随主分支漂移。Claude Code 链接指向与本地快照一致的公开镜像;本站只描述其机制并提供定位引用,不大段复制其专有实现。
一张图看懂 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 一页速查