deepseek-harness 学习手册
工程文化M8 · 为 AI 协作而设计的仓库
最普适55 min

为 AI 协作而设计的仓库

AGENTS.md 逐条精读、四态 Agent Note、把工程约定写成 AI 可执行的 skill、质量门禁矩阵。

最后核对于 v0.1.1-rc.2 · commit b150a551b8 · 2026-08-22

如果你只打算读本站的一页,读这一页。

前面七个模块讲的都是「dsh 这个软件是怎么建的」,只有这一页讲的东西完全不依赖 dsh:一份为「主要由 agent 写代码」这个前提重新设计过的仓库规范,包括它怎么写规则、怎么留决策、怎么把约定变成可执行的东西、以及怎么用门禁把这一切钉住。

8.1 AGENTS.md 精读:几条最值得偷的规则

根目录的 AGENTS.mdCLAUDE.md 是它的软链)是这个仓库的宪法。它不长,但密度极高。挑几条讲。

还有几条,值得连读

8.2 Agent Notes:一个可以直接搬走的 ADR 变体

.agents/notes/ 下有 742 篇决策记录,其中 739 篇有中文对照。它跟常见的 ADR 有几处很聪明的差别。

路径就是状态:{生命周期}/{类别}/yyyy-mm-dd-题目.md

生命周期篇数含义
proposed/26实现前先 review 的提案,尚未(或只部分)建成
implemented/561决策已落地,并且持续与实际代码保持同步
rejected/11考虑过并否决。只在它的理由还能挡住一个诱人的错误时才保留,否则整套删掉
archived/144已实现且未来指导价值不大的,移进一棵永久冻结的树

表 8.2 英文正本计数,核对于 commit b150a55。{类别} 是一个封闭集合:feature / bug-fix / simplification / architecture / process / testing,由 verify-agent-note-classification 强制,加别的目录会被拒。

几个设计细节:

为什么这套值得抄

常规 ADR 的最大问题是会烂:写的时候很认真,半年后没人知道哪几篇还算数。dsh 的解法是给「还算不算数」一个物理位置——文件在哪个文件夹里,就是它的状态;状态变了,文件就得移动,而移动是 PR 里看得见的动作。

再配上「非平凡改动必须在同一个 PR 里加或更新一篇」这条硬规则,决策记录就从「有空再写的文档」变成了「改动的一部分」。

8.3 把工程约定写成 AI 可执行的形式

.agents/skills/ 下有 11 个 skill,全部是「什么时候该用我」开头的触发式描述:

Skill它替你执行什么判断
dsh-pre-push-checks「这次 push 该跑哪些检查」——挑最小的、能覆盖这次 diff 的那一组,而不是反射式地跑全套
dsh-code-review把 reviewer 定位到本仓库的标准:AGENTS.md 约定、防御性模式、决策记录、质量门禁,以及那些「光看代码看不出来」的检查
dsh-archive-agent-notes新 note 有没有让某篇活跃记录过时?某篇 implemented 还有没有未来价值?——按价值判断,不按字数、年龄或配额
dsh-find-simplifications找死代码、重复、投机性抽象、过度构建、加了又删的表面、以及「本可以用现成依赖却手搓」的地方
dsh-prose-standard散文标准:哪里必须有文档、注释、诊断信息、CLI 文案
dsh-doc-standards层级与详略、教程与参考的分离、doc slop 的裁剪、verify-doc-budgets 失败时怎么办
dsh-trim-cot-leakage本站最喜欢的一个,下面单讲
dsh-merging-stacked-prs依赖 PR 栈的落地顺序与规则
dsh-doc-site-sync / dsh-translate-docs文档站投影同步 / 双语工作流(后者只允许用户显式调用
record-browser-gif录 GUI 演示 GIF——而且规定:每个改动了产品可见 GUI 行为的 PR 都必须附一个,从这个 PR 真实的服务端与模型流程里录

dsh-trim-cot-leakage:一个只有 AI 时代才会存在的 skill

它处理的问题是:模型写出来的散文,经常读起来像一段泄漏出来的思考记录。要清理的模式包括——

这几类文字有个共同点:它们对写的那一刻的人有意义,对半年后读代码的人完全没有意义,而且会误导——「不再 X」会让读者以为 X 曾经是个重要概念,实际上它可能只在某个 PR 的中间版本里存在过两小时。

AGENTS.md 里对应的原则写得更狠:「注释和文档陈述完整的契约与上下文,不是推理记录。」

8.4 质量门禁矩阵

门禁按聚合分组,scripts/run-gates.ts 是它们的调度器。四个本地常用的聚合:

聚合盖住什么
pnpm run doc-sync28 个叶子检查:文档构建、文档图、markdown 链接与换行、类型等价、五份生成式 catalog 的新鲜度、mermaid、scoped events、双语配对、导出 JSDoc、包路径、配置来源归属、包 README 的 Model Experience 与已知限制、Agent Note 的分类 / 格式 / 归档、skill 调用元数据、翻译提示词、文档字数预算、文档站投影
pnpm run hygieneknip(无用导出与依赖)+ publint + workspace 约束 + NodeNext consumer 检查
pnpm run test:coverage逐文件 100%(statements / branches / functions / lines)on packages/*/*/src
pnpm run duplicationjscpd 跨文件克隆检测

加上快照层:keyless 的 ACP / headless 回放、Chromium 浏览器快照(Linux PR 必过门禁,CI 强制只读 DSH_SNAPSHOT=replay,绝不写期望输出),以及两个 SDK 各自的期望输出。

别只看到严格,也看看它在哪儿松

同一份 testing.md 里有一节叫「with-key policy: inference is cheap here」,原话是:「我们是 DeepSeek——不要节省真 API 测试。」无 key 的测试只证明管道通,只有带 key 的运行才证明 agent 对着真模型是好使的。

这个组合值得琢磨:在「结构与完整性」上极严(门禁全自动),在「花钱验证真实行为」上极松(明确要求别省)。严和松都指向同一个目的——把有限的人类注意力,留给机器判断不了的东西。

目录

本页

M8 · 为 AI 协作而设计的仓库