Harness Engineering 落地实践指南
以 gewoox-sleepal-app(一个真实运行的 Go 后端服务)为样板,分析其 Harness 落地的 12 项关键优势和 10 项实际不足,并沉淀 Harness Engineering 在工程项目中的落地方法论、关键取舍与渐进步骤。给只用过 Cursor / Codex / Claude Code 这类 IDE 的人看 — 让你理解每个组件的方法论、取舍,并能自行判断如何在自己项目中落地。评判维度只看实际效果,不看是否引入特定工具。
Part 0 · 三分钟摘要
- Harness Engineering ≠ 更长的 prompt,也 ≠ 一个向量库。它是把 LLM Agent 的工作环境(项目知识、任务流程、工具权限、反馈检查、状态恢复、人类决策点)当成一套显式的工程系统来设计,让 Agent 在真实代码库中少猜、少跑偏、可验证、可恢复。LangChain 公式定型为
Agent = Model + Harness,Mitchell Hashimoto 2026-02 命名这一学科,Martin Fowler 把它进一步定义为给 coding-agent 用户侧的外部工作台。 - 2026-Q1 → Q2 几件事让它成为独立学科:OpenAI 公开 "5 个月、3 个工程师、1M+ LOC、零人写代码" 的 Codex 实验;Anthropic 系列长任务 Harness 文章;Claude Code 源码 3-31 意外泄漏;Fowler 4-2 完整文章;Karpathy 4 月 LLM Wiki gist;Graphify 4 月发布 2 周 28k stars;AgentLint 推出;Thoughtworks 5 月 sensors 专文。
- Harness 至少回答 9 个职责:入口与意图、上下文选择、项目知识、任务生命周期、工具与权限、过程能力、反馈传感器、状态与恢复、学习与健康。Fowler 给出两条最有用的二分:guides(feedforward)+ sensors(feedback);computational + inferential。
- 2026-Q2 涌现的一个重要新方向:把项目知识当 graph 而不是 vector。Graphify(Tree-sitter AST + LLM subagent + Leiden 社区检测 + PreToolUse hook 拦 grep)实测 71.5× 减少 token;GraphRAG 在多跳问题上准确率 86% vs vector RAG 32%;Karpathy 的 LLM Wiki 模式:不要让 LLM 当 search engine,让它当 wiki maintainer,三层架构
raw/+wiki/+CLAUDE.md;这些方法论跟传统 PARA + Zettelkasten 收敛——AI 时代图结构的知识库价值飙升。 - 样板项目
gewoox-sleepal-app把 9 职责物理化为三层 Tier:AGENTS.md+HARNESS_DESIGN.md是入口;.codex/+openspec/是外部工具协议层(硬绑定);.harness/是仓库自有的 8 个内部层。Phase A→H 演进,42 个 active owner,36 个 archived change,12 个 capabilities SKILL,2 个 packet-only 子代理。 - 参考项目按"实际效果"做了对的 12 件事,也有 10 项实际不足(Part 6 / 7)。本文评判标准只看实际效果,不看是否引入特定工具——如果自建机制达到了同等效果,"未引入业界工具"本身不构成不足。
- 落地不是"一次抄全套"。Part 8 给三阶段渐进式落地路线 + 6 个判断模型(M1 规模决定形态 / M2 guides vs sensors / M3 computational vs inferential / M4 file vs runtime / M5 何时跳过 / M6 何时 re-simplify)。不要从 GraphRAG 起步(Microsoft 自己的 LazyGraphRAG benchmark 显示传统 GraphRAG indexing 贵 1000×)。Harness 是手段,项目本身才是目的——花在 Harness 上的时间超过业务代码就是出了问题。
Part 1 · 从 IDE 体验出发,理解 Harness Engineering
1.1 你其实已经在做 Harness Engineering,只是没系统化
打开你用 Cursor / Codex / Claude Code 的项目,看看是不是出现过这些文件或行为:
| 你的做法 | 它在 Harness 体系里叫什么 |
|---|---|
写过 .cursorrules / .cursor/rules/*.md / CLAUDE.md | 入口指南 + 行为约束 |
| 在 README 里写"先看 X 再做 Y"的执行约定 | 过程指南(口头版) |
| 在 prompt 里要 Agent 跑 lint / typecheck 再回报 | 反馈传感器(手动版) |
用 @file 把范例文件拽进 context | JIT 上下文加载(手动版) |
把 API 描述放进 docs/api.md 然后让 Agent 读它 | 项目知识管道(轻量版) |
| 复制粘贴 prompt 模板复用 | 过程能力 / Skill(口头版) |
| 让一个 Agent review 另一个 Agent 的输出 | 子代理 + 反馈 |
| 让 Agent 写 task list 然后逐条执行 | 任务生命周期(轻量版) |
| 在 prompt 里贴上次错误的截屏 | 事件记忆(手动版) |
如果你撞上下面这些场景,就是缺特定 Harness 组件的信号:
| 你遇到的问题 | 你缺的 Harness 组件 |
|---|---|
写了 200 行 .cursorrules,Agent 反而忽略关键规则 | 缺路由 / 上下文选择——所有规则一次进 context,关键信号被噪声淹没("context rot" / "lost in the middle") |
| 改了三遍 prompt,下次会话又忘了 | 缺项目知识 / 跨会话记忆 |
| Agent 跑了一会儿就跑偏,自评说"完成"实际没改对 | 缺反馈传感器(机械检查)和完成定义 |
| 长任务中断后重启全靠聊天记录猜 | 缺状态与恢复(checkpoint / resume) |
| 同样的错误反复犯 | 缺学习与沉淀机制(archive → owner 抽取) |
| 多人同时让 Agent 改这个仓库,规则漂移 | 缺显式 owner 边界 + 健康检查 |
| 一个 Agent 干所有事,context 越攒越脏 | 缺子代理 packet-only 隔离 |
| Agent 每次问问题都要把整个仓库 grep 一遍 | 缺结构化检索(知识图谱 / LLM Wiki) |
| 模型升级了你的项目反而出更多 bug | 缺re-simplify on model upgrade 的纪律 |
1.2 Harness Engineering 的一句话定义
来自 LangChain 的简洁公式:
Agent = Model + Harness
Vivek Trivedy(LangChain)把它推到更绝对:"If you're not the model, you're the harness."
Martin Fowler 把这个边界进一步限定到 coding agent 用户侧:Cursor / Codex / Claude Code 这些产品已经提供了内部 Harness(系统 prompt、工具调用、内置 RAG、token 计费策略),但你仍然需要为你自己的项目构建一层外部 Harness。
1.3 它不是什么(避免常见误解)
| 容易误解 | 为什么不准确 |
|---|---|
| "就是写一个超长 prompt" | 超长 prompt 只解决入口指引,无法处理验证、状态、权限、长期维护,且会触发 context rot |
| "就是上一个向量库做 RAG" | 检索只是"上下文选择"这一职责的一种实现;Harness 还覆盖生命周期、工具、反馈、状态、学习;且 2026-Q2 业界已经在用图谱(GraphRAG / Graphify)取代部分 vector RAG |
| "就是搭一个多 Agent 平台" | 多 Agent runtime 是实现手段而非全部;很多场景文件 + git 就够了 |
| "就是 OpenSpec 或 Spec Kit" | Spec lifecycle 只覆盖"需求到实现",无法单独承担项目知识、工具权限、资产健康 |
| "就是目录规范 / 起名好看" | 目录是可维护载体,核心是 guides、sensors、state、gates、extraction 五件事的工程化 |
| "等模型变强就不需要了" | 模型再强也无法替你做:项目知识有 owner、行为变更要 review、归档后经验要可检索 |
1.4 为什么 2026 年它变成一个独立话题
几件事在 2025-Q4 → 2026-Q2 密集发生(完整时间线见 .harness/knowledge/industry/HPI-KNW-002):
Agent = Model + Harness 成业界共识;Birgitta Böckeler 在 Martin Fowler 站点发布 memo 建立 guides/sensors 词汇。- 4-2 Fowler 发完整文章:guides+sensors / computational+inferential / 3 类调节目标
- 4-3 Graphify 发布:Tree-sitter AST + LLM subagent + Leiden 社区检测 + PreToolUse hook 拦 grep;2 周 GitHub 28k stars / 71.5× 减少 token
- 4 月 Karpathy 发 LLM Wiki gist:LLM 自己 build + maintain wiki;三层架构
raw//wiki//CLAUDE.md - 4 月 AgentLint 推出,第一个 harness-level linter(现 58 checks / 6 dimensions)
- 4-8 Anthropic 发《Scaling Managed Agents》:提出 brain / hands / session 三分与 meta-harness,把"harness 不应 static"推进到平台级解耦
- 4-16 Ryan Lopopolo 在 AI Engineer Europe Keynote 给出 OpenAI Codex 工程细节
- 4-28 Addy Osmani 综述 Long-running Agents,并排提炼 Anthropic / Cursor / Google 三家收敛模式
这条线背后的趋势:模型在快速商品化,差异化越来越集中在 Harness 这一层。把 prompt engineering / context engineering / agent engineering 看做三个上一代关键词,harness engineering 把前三者吸纳为子模块。2026-Q2 又出现三个新方向:harness 被平台级解耦(brain / hands / session)、被产品化(verification / memory / orchestration 各成 SKU)、甚至开始自动进化(base model 冻结、agent 自己改 harness 并对每次改动做可证伪预测)。
Part 2 · 9 职责 + Fowler 二分法(核心方法论)
2.1 9 个职责
不看具体目录,一个能让 coding agent 真正干活的 Harness,至少回答 9 个职责。用 card-grid 一图就明白:
缺:一启动就乱读 / 过度读全仓库
缺:关键 owner 被噪声淹没(context rot)
缺:新会话像新人重复犯错
缺:"顺手改"无法追溯,完成标准漂移
缺:写得动但不能安全验证,或权限过宽
缺:每次从零摸索,质量靠个人记忆
缺:错误要到人工 review 才发现
缺:长任务中断后只能靠聊天记录猜
缺:Harness 越用越厚,信号密度下降
2.2 Fowler 的两条二分法
2.2.1 Guides(feedforward)vs Sensors(feedback)
| 控制方向 | 时机 | 9 职责中的对应 |
|---|---|---|
| Feedforward guides(预防) | Agent 行动之前 | 入口、上下文选择、项目知识、过程能力、生命周期前半段 |
| Feedback sensors(纠正) | Agent 行动之后 | 反馈传感器、生命周期后半段 |
| Continuous drift sensors(健康) | 跨任务累积 | 学习与健康 |
- Agent 经常违规但你没察觉 → 缺 sensors
- Agent 频繁犹豫 / 重新发明轮子 → 缺 guides
- 单次任务都做对了但仓库越用越乱 → 缺 drift sensors
2.2.2 Computational vs Inferential Controls
| 类型 | 适合做什么 | 例子 |
|---|---|---|
| Computational controls | 可确定判断、低成本、每次跑 | line budget、frontmatter schema、route anchor、tests |
| Inferential controls | 语义判断、架构 review、产品取舍 | reviewer agent、human design review、LLM-as-judge |
2.2.3 三类调节目标
| 调节目标 | 当前成熟度 | 推荐手段 |
|---|---|---|
| Maintainability harness(代码质量) | 最成熟 | lint、tests、convention、命名 / 分层规则 |
| Architecture fitness harness(架构对齐) | 部分成熟 | boundary gate、owner files、route table、reviewer subagent |
| Behaviour harness(业务行为对齐) | 仍是行业难题 | spec scenarios、focused tests、product docs、人工 review |
Part 3 · 知识组织、维护、检索方法论(2026 完整谱系)
.harness/knowledge/industry/HPI-KNW-004。
3.1 知识组织:三大方法论流派
3.1.1 PARA(Tiago Forte,"Building a Second Brain")
四类 folder:Projects(有 deadline 的活跃任务)/ Areas(持续性责任)/ Resources(兴趣 / 参考)/ Archive(已完结)。
- 优点:低学习曲线,结构清晰,面向"完成事情"
- 局限:扁平 folder,跨类别检索弱,不强调原子化与互联
- 2026 AI 集成评分:7/10——AI 把"知道东西在哪个 folder"的弱点削平了
3.1.2 Zettelkasten(Niklas Luhmann,1950s)
四条核心规则:Atomic notes(一 note 一想法)/ Own words(用自己的话)/ Dense linking(密集互联)/ Unique ID(唯一标识)。
- 优点:天然形成知识图谱;AI 时代图结构正好是 LLM retrieval 的理想 fodder
- 局限:高学习曲线,要求持续维护链接
- 2026 AI 集成评分:9/10——MCP servers for Obsidian vault 让 LLM 沿 wikilink 链做 multi-hop reasoning
3.1.3 LLM Wiki(Karpathy 2026-04 提出 ⭐)
关键转变:不是 "你写 wiki,LLM 偶尔问",而是 "LLM build & maintain wiki,你只 sourcing & 问问题"。出处:Karpathy 的 gist 2026-04。他自己用这个模式建了 100+ 文章、400k 字的研究 wiki,全由 agent 写成。
raw/) · 你扔东西,immutablewiki/) · LLM 完全拥有CLAUDE.md / AGENTS.md) · 配置 wiki 结构典型 wiki 目录(来自 llm-wiki-agent):
Ingestion 工作流:你扔 source → LLM 读 → 更新 index → 更新 overview → 更新 / 创建 entity & concept page → 加 wikilink → append log → 标矛盾。
3.1.4 业界主流 = PARA + Zettelkasten + LLM Wiki 三合一
2026 年最广泛复现的实践(educalvolopez 2026、Riz 的 second brain):
3.2 检索方法论:从 RAG 到 Agentic RAG
"检索"本身在 2026 年也独立成了一个方法论谱系。每加一层都要测量收益,业界 2026 production 默认顺序:
| 技术 | 一句话 | 何时用 | 代价 |
|---|---|---|---|
| Hybrid Search (BM25 + dense + RRF) | 关键词 + 语义混合,Reciprocal Rank Fusion 合并 | 2026 production 起点,目标 recall@10 ≥ 91%(VectorHub 基线) | 维护两个索引 |
| Cross-encoder Re-ranking | top-N 用 cross-encoder 重排取 top-K | 提高 precision;hybrid 之后必加 | 加延迟 |
| HyDE (Hypothetical Document Embeddings) | LLM 先生成"假设答案",用假设答案 embedding 检索 | 用户 query 跟文档语言风格差异大时 | 1 次额外 LLM 调用 |
| RAPTOR | 递归聚类摘要,多级查询 | 既要事实又要主题概览 | indexing 成本 |
| Self-RAG / CRAG | retrieval 后自评,不行回头重检索 | 容错与多策略 | 多次 LLM 调用 |
| Agentic RAG | retrieval-as-tool;agent 选择何时检索 / 用哪个工具 / 评估结果 / 换策略 | 多跳、复杂 query 主流 | 多次 LLM 调用,调度复杂 |
| Query Router | 小模型分类(单跳 / 多跳 / 结构)分发到不同管道 | 混合 query 场景 | 一次 ~50ms 分类,误路由率 < 5% |
| GraphRAG / LazyGraphRAG | 结构化导航,跨文档多跳 | vector RAG 失败的 case | 详见 4.3 |
max_iterations=1 跑,证明 routing 工作;之后才考虑 HyDE / RAPTOR / GraphRAG,且只对失败 case 加。
3.3 上下文工程:在 context window 里管理信息
3.3.1 Lost in the Middle 问题
应对:把关键约束放 prompt 开头 + 结尾;中间放低信号文档;用结构化 summary 而不是流水账。
延伸:Chroma 对 18 个 LLM 的实测证实 context rot——性能在触到 token 上限之前就开始退化,且非均匀、任务相关。是架构问题(可预防),不是模型缺陷。
3.3.2 Token Budget 分配(业界标准)
| 内容 | 大致预算(tokens) |
|---|---|
| System prompt | 500 - 2,000 |
| Retrieved documents (RAG) | 2,000 - 20,000 |
| Conversation history (compressed) | 1,000 - 5,000 |
| Tool schemas | 500 - 3,000 |
| Current task state | 500 - 2,000 |
| Output headroom | 2,000 - 8,000 |
3.3.3 Compaction(压缩)vs SubAgents(分发)
| 维度 | Compaction(顺序) | SubAgents(并行) |
|---|---|---|
| 谁触发 | 系统 reactive 或 model 自己(Tape) | 父代理调度 |
| 信息流 | 老 context → summary → 新 context 头部 | 子任务 → 子 context → 返回 summary |
| Cache 影响 | 一次性 KV cache miss,之后稳定 | 子代理独立 KV cache |
| 何时用 | 单线对话连续 | 多个独立子任务并行 |
3.3.4 2026 新增的几个上下文管理手段
| 手段 | 做法 |
|---|---|
| Tool-result clearing | 抓取后把原始工具输出替换成占位符,保持窗口精简 |
| Context folding | agent 分叉处理子任务,完成后"折叠"——折掉中间步骤、只留结果摘要 |
| ARC(arXiv 2601.12030) | 把 context 当动态内部状态而非 append-only 记录,解耦"动作执行"与"上下文管理",检测到错位就主动重组;BrowseComp-ZH 上比被动压缩 +11% |
3.4 给读者的选型路线
| 你的项目 | 推荐起步 |
|---|---|
| 个人 / 小团队 / 文档项目 | PARA folder + 偶尔 Zettelkasten 链接 + 主动 git 提交,不必上 LLM Wiki |
| 中型代码库(10K-50K LOC) | 文件型 owner(markdown + git)+ grep 检索,够用 |
| 代码 + 文档混合,想减 token | + Graphify(一次性 setup)+ PreToolUse hook 拦 grep |
| 跨多 source 持续做研究 | Karpathy LLM Wiki + Obsidian + Claude Code |
| 企业级 multi-hop 问答 / 客服 | Hybrid RAG → 加 Re-ranker → 加 Query Router → 最后才 LazyGraphRAG |
| 长会话 agent / 客服 bot | + memsearch 或 claude-mem 做跨 session 记忆 |
Part 4 · 业界工具与项目地图
按职责分组,覆盖 30+ 主流方案。完整盘点见 .harness/knowledge/industry/HPI-KNW-003。
4.1 入口与跨工具标准
- AGENTS.md:跨工具中立入口;Codex / Cursor / Windsurf / Aider 等都识别
- Claude Code Memory:工具内置、自动分层
- OpenAI Codex 实践:AGENTS.md as TOC, not encyclopedia
4.2 Spec / Lifecycle 工具
| 工具 | 强项 | 链接 |
|---|---|---|
| OpenSpec(~51.6k stars) | OPSX 已成默认工作流:core(propose/explore/apply/sync/archive)+ expanded;schema-driven 自定义 artifact;delta spec 适合 brownfield | openspec.dev |
| GitHub Spec Kit | constitution / specify / plan / tasks / implement;偏 greenfield、较重 | github.com/github/spec-kit |
| Superpowers(Anthropic 官方 plugin,~40.9k stars) | 把 SDLC 编排成可组合 skill:brainstorm → write-plan → execute-plan;subagent 两段 review + TDD ratchet | obra/superpowers |
4.3 知识图谱型工具(2026-Q2 爆款)⭐
| 系统 | 关键设计 | 链接 |
|---|---|---|
| Graphify ⭐ 截至 2026-06 约 57.6k stars / v0.8.27 | Tree-sitter AST + LLM subagent + NetworkX + Leiden 社区检测;PreToolUse hook 拦 grep;71.5× 减少 token;支持 16+ 工具 | safishamsi/graphify |
| code-review-graph | blast-radius 分析;SQLite + Tree-sitter;34 MCP tools;6.8-49× 减少 token | tirth8205/code-review-graph |
| Microsoft GraphRAG | knowledge graph + community summaries + 4 query 模式 | microsoft.github.io/graphrag |
| LazyGraphRAG | GraphRAG 的 1000× 便宜版本 | benchmark |
4.4 Memory / Knowledge 系统
| 系统 | 关键设计 |
|---|---|
| Karpathy LLM Wiki ⭐ | 三层 raw / wiki / schema;LLM 自己 build + maintain;2026-Q2 跟进出 .brain/ 文件夹、hot.md 热缓存、LLM Wiki v2(typed knowledge graph) |
| llm-wiki-agent | Karpathy gist 的可运行实现 |
| memsearch ccplugin | 4 shell hook + markdown,跨工具 |
| claude-mem | Node Worker + SQLite + Chroma + Web UI + MCP;progressive disclosure 3 层 |
| claude-context | Milvus + BM25 + 向量 hybrid 代码搜索 MCP |
| Letta / MemGPT(2026 Letta V1) | Memory blocks(核心 + 档案);多 agent 共享 block;sleep-time agents(后台 agent 闲时整理记忆) |
| mem0 | LLM extraction + vector + entity + graph 混合 |
| Zep / Graphiti | Temporal knowledge graph |
| Cognee | Ontology + vector + graph + relational |
| Hermes Agent | MEMORY.md + USER.md + SQLite FTS5 + skills |
4.5 Agent Harness 库 / Runtime
| 库 | 定位 |
|---|---|
| LangChain DeepAgents | "batteries-included agent harness" |
| LangGraph | State graph + checkpointer + supervisor/handoff |
| CrewAI Flows | Flow state + persistence |
| AutoGen | Multi-agent with termination conditions |
| OpenAI Agents SDK | Handoffs / input filters / run context |
| Anthropic Claude Agent SDK | Initializer + Coding agent 长任务模板 |
| Anthropic Managed Agents(meta-harness,2026-04-08) | brain / hands / session 三分;托管 long-horizon runtime;Outcomes / Multi-Agent / Webhooks / Dreams 把 harness 层产品化 |
4.6 Lint / 反馈传感器
| 工具 | 关键设计 |
|---|---|
| AgentLint(agentlint.app / 0xmariowu) | 第一个 harness-level linter;现 58 checks(51 core / 6 dimensions + 7 opt-in);40,000-char 硬上限;每条 check 引一手 source;可 auto-fix |
| agentlint (pypi, AgentChute) — ⚠️ 同名不同项目 | runtime guardrail + 跨平台事件归一化(非 harness 配置审计);v2.4.0 76 rules / 8 packs |
4.7 Claude Code 上下文管理工具生态(2026 涌现)
来源:Milvus 2026 综述。
| 层 | 工具 | 解决 |
|---|---|---|
| 压缩命令输出 | RTK | terminal 高频输出在进入 Claude 前压缩 |
| 沙箱原始工具输出 | Context Mode | 大型 log / DOM 隔离主对话 |
| 代码结构图 | code-review-graph | 依赖、blast radius 问题不靠 blind 文件读 |
| 渐进式读代码 | Token Savior | 先 symbol 摘要再展开 |
| 压缩 Claude 输出 | Caveman | 防 agent 自己的输出污染未来上下文 |
| 检索相关代码 | claude-context | 语义 / hybrid 代码搜索取代 grep |
| 跨 session 记忆 | memsearch | 跨 session / agent / 模型 |
Part 5 · gewoox-sleepal-app 的 Harness 解剖
本节带你走一遍 gewoox-sleepal-app 项目的 Harness 设计——不是复述 HARNESS_DESIGN.md,而是从 Harness 真实流程切入。详细物理布局见 .harness/knowledge/reference-project/HPI-KNW-101。
5.1 项目背景
| 维度 | 现状 |
|---|---|
| 语言 / 框架 | Go 1.26 + Gin + GORM + Redis + Nacos + Zap + Google Wire + Kafka/CloudEvents + Dify (AI) + AWS IoT (MQTT) |
| 业务复杂度 | HTTP API + WebSocket 实时 + AI 对话 + MCP 工具 + 多区域部署 + 多设备同步 |
| Harness 阶段 | 2026-05-16 起系统化建设;截至 2026-05-23 已 archived 36 次 OpenSpec change、42 active owner、12 capabilities SKILL、2 packet-only 子代理;经历 8 个 Phase(A→H) |
5.2 物理拓扑:三层 Tier
AGENTS.md(27 行)— 跨工具 Agent 入口;HARNESS_DESIGN.md(~580 行)— 人类设计文档。.codex/agents/*.toml — Codex CLI 子代理;.codex/skills/*/SKILL.md — Codex Skills;openspec/ — OpenSpec CLI 工作区。搬这些目录直接 break 外部 CLI。.harness/STARTUP.md(§1 路由 §2 健康 §3 完成)+ 8 个子目录(governance / knowledge / cognition / capabilities / adapters / scripts / state)。.codex/skills/openspec-propose/SKILL.md 不能搬到 .harness/capabilities/ 下,因为 Codex CLI 启动时按固定路径读取这个文件。
.harness/ 内部 8 层职责
| 层 | 位置 | 唯一职责 | 不能装什么 |
|---|---|---|---|
| Entry | AGENTS.md + STARTUP.md | 启动顺序、任务分类、完成检查 | 长记忆、历史叙事 |
| Governance | governance/{catalog,lifecycle,discipline,standards} | Harness 操作契约 | 业务事实、patch 日志 |
| Knowledge | knowledge/{architecture,conventions,domain} | 项目架构 + Go 约定 + 业务域 | Harness 治理契约、当前阻塞 |
| Cognition | cognition/{decision,routing,graph,lifecycle,judgment} | 决策优先级、路由、关系图、抽取、判断模型 | 项目事实、启动 checklist |
| Capabilities | capabilities/{project,harness}/*/SKILL.md | 可重复 SOP | 通用记忆 |
| Adapters | adapters/{openai,codex,...} | 把 capability SKILL 适配到具体工具 | capability 流程定义 |
| Scripts | scripts/ | 验证 + 索引工具(stdlib only) | 流程工作流 |
| State | state/* | 当前 checkpoint | 历史叙事 |
5.4 OpenSpec lifecycle:10 件 artifact
项目当前 active change refresh-harness-design-methodology 的目录结构(按依赖顺序):
| # | Artifact | 解决什么问题 |
|---|---|---|
| 1 | intake.md + Prior Archive Search | 不查先例就重新发明 |
| 2 | proposal.md + Alternatives ≥ 2 (含"不做") | 一上来只给单一方案 |
| 3 | specs/*/spec.md | 需求不可验证 |
| 4 | design.md | 实现细节无取舍 |
| 5 | boundary.md + Implementation Gate | 不读 owner 就改 |
| 6 | design-review.md(人工审批 / 强 waiver) | 未经设计审查就实现 |
| 7 | tasks.md | 执行无法分步验证 |
| 8 | review.md + Reviewer Identity | 主代理自评冒充 review |
| 9 | verification.md + Plan-Phase Activation Evidence | "看起来完成"无证据 |
| 10 | knowledge-extraction.md + Reduction Proof | archive 变黑洞 |
- Prior Archive Search:intake 必须先 grep 历史是否做过类似 change
- Boundary Human Review Gate:boundary 完成后必须等用户明确 approval 或强 waiver "不需要我审核,你自动执行",沉默 / 模糊委托都不算
- Reduction Proof:归档时不只是"把目录移到 archive",要给出 owner merge 证据表(Archive Section → Merged Into → Status),机器化堵死"archive 黑洞"
5.5 路由系统:27 个 Route Family
.harness/cognition/routing/GSA-COG-100 定义大约 27 个 Route Family。举几个:
| Route | 触发信号 | Read Order(默认读包) | Execution Gate |
|---|---|---|---|
intake-gate | 任何不是简单问题 / 小修补 | STARTUP §1 + GSA-GOV-100 + openspec/README | 证明 fast path 或路由到 OpenSpec |
go-code | 在 internal/ / cmd/ 改 Go 代码 | GSA-KNW-001 + GSA-KNW-104 + go-service-workflow SKILL | Pre-Impl Evidence Gate;Automatic Quick Gate |
change-lifecycle | 业务需求 / 多步骤 / 高风险 | openspec README + GSA-GOV-100 + GSA-COG-300 | Intake Gate 后创建 OpenSpec change |
episodic-search | 用户说"上次怎么决定 X" | episodic-search SKILL + GSA-GOV-300 | make episodic-search QUERY="..." |
GSA-COG-100 触发 route-table-review capability,必须跑一遍专门的 packet-only review。把"路由"当一等工程对象。
5.6 Frontmatter + Plan-Phase Activation:渐进式披露
每个 owner 文件都有一段 YAML frontmatter,8 必填 + 4 可选:
---
id: GSA-COG-100
layer: cognition/routing
owner_role: Route families mapping task signals to owner files
decision_role: route
load_condition: Loaded after GSA-COG-001 identified active layers
route_family: [general-decision, correction-learning]
triggers: [route family, knowledge routing, task signal]
max_lines: 120
paths: ["internal/**/*.go"] # 可选
supersedes: [GSA-LRN-002] # 可选
---
Plan-Phase Activation Rules:非 fast-path 任务在 plan 阶段,Agent 先按 description → triggers → paths → route_family 顺序匹配 SKILL 和 owner,只读匹配到的。这是 Claude Skills 风格的渐进式披露在本地 markdown 上的实现。
5.7 子代理:packet-only 模式
.codex/agents/packet_reviewer.toml(只有 11 行):
name = "packet_reviewer"
description = "Packet-only no-startup reviewer..."
model_reasoning_effort = "low"
project_doc_max_bytes = 0
sandbox_mode = "read-only"
developer_instructions = """
You are a packet-only reviewer...
Do not run repository startup, do not inspect AGENTS.md,
do not read files, and do not call tools.
"""
5.8 三件脚本工具:lint / index / episodic
.harness/scripts/ 严守一个原则:Python 3.10+ stdlib only,不调 LLM,不动 owner 文件正文。
| 工具 | 产出 | 边界 |
|---|---|---|
harness-index | state/index.json + STARTUP Budget Header | 不动 lint 输出 |
harness-lint | exit 0/1/2 + JSON/text 报告 | 不动 index / episodic |
harness-episodic | state/episodic.db (SQLite + FTS5) | 只读 archive,不读 active |
三件互不调用、各自只写自己的输出文件。这是把"软件工程"形态用到 scripts 层而非"脚本拼盘"。
5.9 知识抽取:archive → owner
完成一次 change 后,durable 经验通过 knowledge-extraction.md 流向 active owner:
Part 6 · 参考项目 12 项关键优势(按实际效果评估)
.harness/knowledge/reference-project/HPI-KNW-102。
harness-lint --pointer-only / --duplicate-only 实际拦截到 N 次粘贴重复project_doc_max_bytes = 0);review 是纯函数无副作用;主代理始终拥有最终判断 / 文件写入 / 状态更新所有权make episodic-search QUERY="...");与 git 友好(数据库 gitignored,事实文件版本化);不引入外部依赖route-table-review capability 专门 review 路由变更;避免"路由越改越乱"的渐进退化harness-lint --check-migration-coverage 硬强制Agent = Model + Harness 的实质就是这个:模型可以变,但你这套机械化经验是项目的真正资产,模型升级后还能用。
Part 7 · 参考项目 10 项实际不足(按可观察影响,非工具兼容性)
当前痛(现在用就会感到)
实际影响:跨项目复用受限(知识只能由 1-2 人维护);团队扩张时新人前两周大概率不敢动
.harness/;外部 contributor 几乎不可能参与。何时不痛:稳定 2-3 人核心团队、Harness 演进基本完成、不追求外部贡献。
实际影响:owner 文件可读性低(外部读者读 30 行不知道在说什么);跨项目迁移 ramp-up 慢;内部新 reviewer 难加入。
何时不痛:内部稳定团队、术语已经内化、不追求对外解释。
harness-lint 输出形如 ERROR missing-frontmatter file:1 owner file is missing required YAML frontmatter。告诉了什么错,没告诉怎么修。实际影响:agent 看到 lint error 后必须自己 reason(重新读 frontmatter 标准、参考其他 owner 模仿),每次浪费几百到几千 token;自动修复成功率明显低于"先 read 标准再 fix"。
何时不痛:lint 主要给人看、agent 出错后人介入修。
实际影响:AI 生成的测试 pass 不代表产品行为对齐用户意图;任何"用户体验是否更好"的判断都必须有真实用户 / 产品经理介入;高风险变更的 boundary review 时间长。
注:这是行业难题,不是参考项目特有不足。所有面向用户产品都共享。
未来痛(特定条件下才显现)
实际影响:6+ 小时 autonomous 任务(如大型 refactor)超出当前架构能力——主代理 context 会爆炸。
当前场景:本项目定位是 IDE-driven 短任务(30 分钟到 2 小时一个 session),此不足在当前场景完全不痛。
实际影响:可能 lint warning 累积到 9 个时还没触发,第 10 个时才触发 gardening——期间 drift 已经发生 N 个 change;跨 change 累积熵增没有自动指标。
何时痛:高频 change 项目(每周 5+ archived)、多人并行 agent 改同一仓库。
实际影响:难判断哪些 owner 是"高维护成本低收益"的;累积冗余难发现(owner 可能从来没被路由命中、agent 从来没读过,但还在那里)。
何时痛:Harness 已经存活 1+ 年、accumulated 多次 phase、想做 ROI 评估。
实际影响:archive 数量多了后(>50),"上次我们在某个相似但用不同关键词描述的场景怎么决定的"很难被自动发现;Prior Archive Search 段的填写质量依赖主代理的查询能力。
何时痛:archive > 50 个、跨业务域共享决定。
实际影响:Plan-Phase Activation 准确性可能随 owner 数增加渐进下降但无法量化;长期可能某些 owner 实际不再被任何 route 命中("死 owner")但行数 / lint 不会报警。
何时痛:Harness 已经存活 6+ 个月、owner 数 ≥ 40。
实际影响:某些为旧模型设计的规则(如显式 context reset 提示、明确防 hallucination 检查)可能在 Opus 4.5 / GPT-5.2 时代已多余但还在;Harness 越用越厚,其中一部分是"对当前模型已经无效的脚手架"。
何时痛:项目周期长(>6 个月)跨过 1+ 次模型大升级、token 成本敏感。
综合评价
| # | 不足 | 类别 | 实际影响范围 |
|---|---|---|---|
| W1 | Onboarding 成本高 | 当前痛 | 跨项目复用、新人扩张 |
| W2 | 内部术语过多 | 当前痛 | 文档可读性、外部 contributor |
| W3 | Lint 输出对 agent 不友好 | 当前痛 | agent 自动修复率、token 浪费 |
| W4 | Behaviour harness 依赖人工 | 当前痛 | 行业共性,非参考项目特有 |
| W5 | 跨 context window 长任务无支持 | 未来痛 | 当前场景不痛(IDE 短任务) |
| W6 | 跨 change drift 监控被动 | 未来痛 | 高频 change 项目 |
| W7 | 没有"成本可见性" | 未来痛 | Harness 存活 1+ 年 |
| W8 | Archive surprising connections 没自动暴露 | 未来痛 | archive > 50 个 |
| W9 | 累积 entropy 没量化指标 | 未来痛 | Harness 存活 6+ 个月 |
| W10 | 无 re-simplify 演练 | 未来痛 | 跨过模型大升级 |
- 团队预期 3 → 10 人 → 防 W1 / W2
- 希望开源 / 跨项目复用 → 防 W1 / W2 / W7
- Agent 自动修复程度要求高 → 防 W3
- 6h+ autonomous 任务 → 防 W5
- 多人并行高频 change → 防 W6 / W9
- 项目周期 > 1 年 → 防 W7 / W9 / W10
- Archive 数将 > 50 → 防 W8
- 面向用户产品 → 防 W4
Part 8 · 落地路径与取舍判断框架
8.1 第一步:自检
不要看到 gewoox-sleepal-app 有 42 个 owner、36 个归档就想立刻照抄。先做自检:
| 自检问题 | 如果回答"是",说明你需要 |
|---|---|
| 同一个仓库被 Agent 改超过 50 次(不只 1 次跑通) | 入口 + 路由 + state |
| 同一种错误 Agent 反复犯 | 项目知识 + 学习沉淀 |
| 长任务中断后无法恢复 | 状态与恢复 |
| 多人同时让 Agent 改这个仓库 | 显式 owner 边界 |
| 你想把同一套规则应用到第二个仓库 | capabilities + adapters |
| review 时反复发现同类问题 | computational sensor + inferential reviewer |
| Agent 自评说"完成"实际没做对 | 完成定义 + verification |
| 同一个文件被反复改回原样 | git history 不够,需要 owner + archive |
| 经验只在某个工程师脑子里 | system of record(项目知识) |
| Agent 每次跨 session 都要 grep 一遍仓库 | Graphify / LLM Wiki / 持久 memory |
| 模型升级了但还是同样烂 | Harness 问题,不是模型问题 |
8.2 渐进式落地路径(三阶段)
- 创建
AGENTS.md(≤ 50 行):项目一句话定位 + 启动顺序 + 高风险命令 + 完成定义 docs/architecture.md(≤ 100 行):分层、命名约定、生成文件列表AGENTS.md指向docs/architecture.md
达标信号:Agent 接到陌生需求时不再上来就乱读全仓库
docs/拆 3-5 个 owner 文件- 加 frontmatter(至少
id/triggers/paths/max_lines) .harness/capabilities/<workflow>/SKILL.md(≤ 150 行)- 任务分类:fast path vs lifecycle
- 5 件 artifact 模板:intake / tasks / review / verification / extraction
- 5-10 行 shell 脚本做最小 lint
- 正式 lifecycle 工具(OpenSpec)+ 自定义 schema
- 正式路由表(≥ 5 个 route family)
- packet-only 子代理做 Quick Gate review
- 项目级 lint 用 Python/shell 实现(最关键 3-5 条规则)
state/current-status.md+state/resume.md(≤ 60 行)- 全部 SKILL / owner / route table 加 frontmatter
- 简单 episodic search(grep / ripgrep)
- CI 加
agentlint scan(2026-Q2 新工具) - 代码库 ≥ 30K LOC 且常 grep 时:跑 Graphify 试一次
8.3 六个判断模型(取舍判断框架)
遇到新组件 / 新工具 / 新方法时不用从头思考,按这 6 个模型筛一遍就能做决策:
- M1:我项目规模匹配吗?不匹配 → 跳过
- M5:跳过代价大吗?代价小 → 推迟
- M2:我现在最痛是缺 guide 还是 sensor?不是这个解决的 → 推迟
- M3:computational 还是 inferential?选合适形态
- M4:file 还是 runtime?选合适存储
- 落地后:用 M6 反思是否到了 re-simplify 时机
8.4 不要犯的常见错误
| 错误 | 后果 | 怎么避免 |
|---|---|---|
把所有规则塞进 AGENTS.md | context rot,关键 rule 被淹 | AGENTS.md 只做指针 |
| 复制粘贴同一规则到多个 owner | drift | 一个 canonical owner,其它指针 |
| 让 owner 自己长上千行 | 维护成本爆炸 | max_lines 预算 + lint 强制 |
| state 写成历史流水账 | 启动浪费 token | 每行必须改变下一步动作 |
| 把 archive 当 owner | 经验永远不会被检索 | knowledge-extraction.md + Reduction Proof |
| 子代理跑仓库 startup | 浪费 token、误读父代理状态 | packet-only |
| 完成定义靠"看起来对" | 自评通过实际跑偏 | acceptance ↔ verification 一对一映射 |
| 路由表越加越多 | 检索负担上升 | 加新 route 前看能不能扩展现有 route |
| Harness 越来越厚没 GC | 信号密度下降 | Asset Health triggers + gardening |
| 一开始就抽 meta-skill | 局部形态当通用规则 | 至少 2-3 个仓库验证后再抽 |
| 从 GraphRAG 起步 | indexing 贵 1000× | 先 Hybrid + Rerank,再加图 |
| 模型升级后 harness 一动不动 | 不必要的复杂度累积 | 每次升级跑 re-simplify sweep |
8.5 什么时候该 stop(不做 Harness 反而对)
- 项目还是 demo / POC,3 天就废:用最小
AGENTS.md就够 - 项目只有 1 工程师 + 1 Agent,没有跨人 / 跨会话复用需求:state 文件可能就够
- 项目没有清晰"完成定义"(创意类、研究类):先把完成定义想清楚再谈 Harness
- 团队对 Agent 还没建立工作流:Harness 是"放大器",没有工作流的话只会放大混乱
附录 A · 一手资料与开源项目链接
A.1 核心方法论文章
- Martin Fowler / Thoughtworks (2026-04):Harness engineering for coding agent users
- Thoughtworks (2026-05):Harness engineering and agent feedback: Exploring AI coding sensors
- LangChain (2026-03):The Anatomy of an Agent Harness
- OpenAI (2026-02):Harness engineering: leveraging Codex in an agent-first world
- Anthropic (2025-11):Effective harnesses for long-running agents
- Anthropic (2026-03):Harness design for long-running application development
- Anthropic (2026-04-08):Scaling Managed Agents: Decoupling the brain from the hands
- Addy Osmani (2026-04-28):Long-running Agents
- AHE 论文 (2026-Q2):Agentic Harness Engineering: Observability-Driven Automatic Evolution of Coding-Agent Harnesses
- Andrej Karpathy (2026-04):LLM Wiki gist
A.2 知识图谱型工具(2026-Q2 ⭐)
- Graphify:github.com/safishamsi/graphify
- code-review-graph:github.com/tirth8205/code-review-graph
- llm-wiki-agent:github.com/SamurAIGPT/llm-wiki-agent
- Microsoft GraphRAG:microsoft.github.io/graphrag
- LazyGraphRAG benchmark:dev.to benchmark
A.3 检索方法论
- HyDE 论文:arxiv.org/abs/2212.10496
- Lost in the middle 论文:arxiv.org/abs/2307.03172
- Agentic RAG 2026 production guide:bestaiweb.ai
- Context engineering 2026 guide:tutorials.technology
- Effective context engineering(Chroma context rot + compaction 阈值):vorstel.com
- Context folding 深潜:code.likeagirl.io
- ARC(active reflection-driven context):arxiv.org/abs/2601.12030
A.4 知识管理方法论
- PARA vs Zettelkasten 2026:trendix.tech
- Riz Second Brain setup:dreamsaicanbuy.com
- Obsidian + Claude Code agents:educalvolopez.com
A.5 文件型 / coding-agent 实践
- AGENTS.md 标准:agents.md
- Claude Code Memory / Skills / Subagents / Hooks / /goal Loop
- Anthropic cwc-long-running-agents:github.com/anthropics/cwc-long-running-agents
- Hermes Agent:github.com/NousResearch/hermes-agent
- AgentLint:agentlint.app
- Stripe Minions Part 1 / Part 2
A.6 Memory / Spec / Runtime
- LangChain DeepAgents:github.com/langchain-ai/deepagents
- LangGraph persistence:docs.langchain.com
- OpenAI Agents SDK handoffs:openai.github.io
- Letta memory blocks:docs.letta.com
- mem0:docs.mem0.ai
- Zep / Graphiti:github.com/getzep/graphiti
- Cognee:cognee.ai
- memsearch:milvus.io
- claude-mem:docs.claude-mem.ai
- 7 best Claude Code context tools 综述:milvus.io 综述
- OpenSpec(OPSX 工作流):openspec.dev
- GitHub Spec Kit:github.com/github/spec-kit
- Superpowers(Anthropic 官方 plugin):github.com/obra/superpowers
- Anthropic Managed Agents:anthropic.com/engineering/managed-agents
- AHE / Agentic Harness Engineering:arxiv.org/abs/2604.25850
— Harness Engineering 落地方案专家
2026-06-01