@erzhe/harness-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +70 -0
- package/SPEC-v0.md +206 -0
- package/dist/harness-kit.cjs +17211 -0
- package/package.json +60 -0
- package/skills/erzhe-harness-init/SKILL.md +76 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MeCKodo (二哲)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# @erzhe/harness-kit
|
|
2
|
+
|
|
3
|
+
> AI-friendly repo harness —— 把工程知识变成 agent 可消费的**契约层**。
|
|
4
|
+
|
|
5
|
+
一份 `.agents/manifest.yaml` 作为单一事实源,生成各家 agent 的入口文件(`AGENTS.md` / `CLAUDE.md` / Cursor rules),并用**门禁**保证不变量、对外契约和文档不漂移。让不同的人、不同的机器上的 agent,构建出**一模一样的范式**。
|
|
6
|
+
|
|
7
|
+
> 包名 `@erzhe/harness-kit`,安装后命令行工具叫 **`harness-kit`**。
|
|
8
|
+
|
|
9
|
+
## 为什么
|
|
10
|
+
|
|
11
|
+
传统工程化(脚手架 / lint / CI)是**面向过去、面向人**的。Agent 需要的是显式、结构化、可机器消费的知识:这个仓库是什么、能跑什么、什么绝不能破、改动该看哪、哪些验证不了。`harness-kit` 把这些沉淀进 manifest,再确定性地生成与校验。
|
|
12
|
+
|
|
13
|
+
## 安装
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm i -g @erzhe/harness-kit # 或 pnpm add -g / 直接 npx @erzhe/harness-kit
|
|
17
|
+
harness-kit --help
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 命令
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
harness-kit init # 铺 .agents/ 骨架 + starter manifest
|
|
24
|
+
harness-kit sync # manifest -> AGENTS.md / CLAUDE.md / Cursor rules / routing / modules
|
|
25
|
+
harness-kit doctor # 开发态体检:补全度 / 引用路径 / 漂移 / 新鲜度 / 体量预算
|
|
26
|
+
harness-kit verify # 门禁(CI):跑不变量 + 契约 + 漂移,列出 GAPS,失败非 0 退出
|
|
27
|
+
harness-kit accept-contract # 一次预期的接口变更后,记录新的契约指纹为基线
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 心智模型
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
.agents/manifest.yaml (你 + agent 维护的唯一源)
|
|
34
|
+
|
|
|
35
|
+
harness-kit sync (确定性生成,勿手改产物)
|
|
36
|
+
v
|
|
37
|
+
AGENTS.md / CLAUDE.md / .cursor/rules / .agents/routing.md / .agents/modules.md
|
|
38
|
+
|
|
|
39
|
+
harness-kit verify (门禁:不变量 enforcement + 契约 snapshot + 生成物/知识漂移)
|
|
40
|
+
v
|
|
41
|
+
exit 0 / 非 0 + 诚实的 GAPS 清单(查不了的东西绝不谎报)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- **不变量**:声明式正则 `enforcement`(确定性、无 LLM),或标 `manual`。
|
|
45
|
+
- **契约**:协议无关——`check`(跑仓库自带工具看退出码)或 `snapshot`(打印接口指纹 → CLI 存基线并 diff)。
|
|
46
|
+
- **新鲜度**:知识条目 / 模块卡 `binds` 源文件哈希,代码一动就告警,无需人肉维护日期。
|
|
47
|
+
- **GAPS**:打包 / 真网络 / 生产上传等本地验证不了的,`verify` 显式列出,绝不假装通过。
|
|
48
|
+
|
|
49
|
+
## 让 agent 来配置:onboard skill
|
|
50
|
+
|
|
51
|
+
手写 manifest 门槛高,但对 agent 是绝配。随包附带的 [`skills/erzhe-harness-init`](skills/erzhe-harness-init/SKILL.md) 引导 agent 做仓库考古、逐块跟你确认着填 manifest、再跑 `sync/doctor/verify` 到绿。把它软链到 `~/.cursor/skills/` 或 `~/.claude/skills/` 即可被发现。
|
|
52
|
+
|
|
53
|
+
## 文档
|
|
54
|
+
|
|
55
|
+
- [`SPEC-v0.md`](SPEC-v0.md) —— manifest schema + 生成/校验契约(当前 v0.2)
|
|
56
|
+
- [`DESIGN.md`](DESIGN.md) —— 设计决策、调研与决策日志
|
|
57
|
+
|
|
58
|
+
## 开发
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
pnpm install
|
|
62
|
+
pnpm typecheck
|
|
63
|
+
pnpm test # node:test + tsx,核心逻辑单测
|
|
64
|
+
pnpm build # esbuild 打包成 dist/harness-kit.cjs 单文件可执行
|
|
65
|
+
pnpm exec tsx src/cli.ts verify --repo . # 开发态直接跑,且自托管验证本仓
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## License
|
|
69
|
+
|
|
70
|
+
MIT © [MeCKodo (二哲)](https://erzhe.me/)
|
package/SPEC-v0.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# AI-Harness SPEC v0.2
|
|
2
|
+
|
|
3
|
+
> 一套 AI-friendly 的仓库规范。定义"任何仓库要让 Agent 冷启动即可高效工作、且人人构建出一致范式,必须声明什么、怎么声明、怎么防过期"。
|
|
4
|
+
> 配套 CLI:`ai-harness`(`init` / `sync` / `doctor` / `verify`)。manifest 标签仍为 `ai-harness/v0`(v0 主线)。
|
|
5
|
+
>
|
|
6
|
+
> 设计背景与调研见 `DESIGN.md`。本文件是规范正文。
|
|
7
|
+
>
|
|
8
|
+
> **v0.2 相比 v0**:在"可执行内核"(生成 + 门禁 + 派生防腐烂)之上,叠加一层从竞品吸收来的**行为协议**——
|
|
9
|
+
> Task Brief、按改动类型路由(§8)、模块卡(§9)、验证缺口 GAPS(§5)、知识沉淀触发与 adoption 节奏。
|
|
10
|
+
> 切分原则:**能机器校验的做成数据驱动**(routing/modules/GAPS 都由 manifest 生成并被 `doctor`/`verify` 检查),
|
|
11
|
+
> **纯 agent 运行时行为的留 prose**(写进生成的 `AGENTS.md` Working agreement)。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. 目的与非目标
|
|
16
|
+
|
|
17
|
+
**目的**:让一份 `.agents/manifest.yaml`(+ 少量叙述文件)成为"人和 Agent 共享的单一真相源",由 CLI 派生出各家工具文件、并用可执行门禁保证一致性。
|
|
18
|
+
|
|
19
|
+
**非目标(明确不做,避免变成又一个重工具)**:
|
|
20
|
+
- **不是 spec-driven 工作流引擎**(不做 specify→plan→tasks 那套 per-feature 流程;那是 Spec Kit/Kiro 的活,可以骑在我们之上)。
|
|
21
|
+
- **不是文档生成器**:只沉淀"Agent 无法自行发现"的信息;能被工具从代码里算出来的(模块列表、调用图),一律**生成**,不手写。
|
|
22
|
+
- **反仪式**:宁可字段少、宁可留空,也不制造需要人肉长期维护的负担。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 2. 目录布局
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
<repo>/
|
|
30
|
+
AGENTS.md # [生成] 跨工具入口,<100 行,指路
|
|
31
|
+
CLAUDE.md # [生成] 首行 @AGENTS.md
|
|
32
|
+
.cursor/rules/00-follow-agents.mdc # [生成] 薄适配器
|
|
33
|
+
.agents/ # canonical 命名空间(唯一手写源)
|
|
34
|
+
manifest.yaml # 脊椎(本规范核心,见 §3)
|
|
35
|
+
knowledge/ # 手写叙述:domain / conventions / journal
|
|
36
|
+
domain.md
|
|
37
|
+
conventions.md
|
|
38
|
+
journal/0001-*.md # ADR:一决策一文件
|
|
39
|
+
routing.md # [生成] 按改动类型导航(见 §8)
|
|
40
|
+
modules.md # [生成] 模块卡(见 §9)
|
|
41
|
+
adoption.md # 手写:挣工具节奏账本(见 §5)
|
|
42
|
+
contracts/<id>.snapshot # 已接受的契约基线,随仓入库(见 §5)
|
|
43
|
+
playbooks/ # SKILL.md(可选,复用社区标准)
|
|
44
|
+
checks/ # invariant 的可执行脚本(可选)
|
|
45
|
+
map/ # [生成·暂缓/可选] 全量代码地图;核心地图需求已由 modules/routing 覆盖(见 §6)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
所有 `[生成]` 文件顶部带 `# GENERATED by ai-harness — DO NOT EDIT`。
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 3. `manifest.yaml` Schema
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
spec: ai-harness/v0 # 规范版本
|
|
56
|
+
|
|
57
|
+
# ── 1. Identity:这是什么 / 边界 / 上下游 ────────────────────
|
|
58
|
+
identity:
|
|
59
|
+
name: string
|
|
60
|
+
summary: string # 一句话
|
|
61
|
+
scope_in: [string] # 明确"管什么"
|
|
62
|
+
scope_out: [string] # 明确"不管什么"(防越界瞎改)
|
|
63
|
+
upstream: [string] # 依赖谁(服务 / 库 / 设计系统…)
|
|
64
|
+
downstream: [string] # 谁依赖我
|
|
65
|
+
|
|
66
|
+
# ── 2. Capabilities:机器可读、自描述命令 ───────────────────
|
|
67
|
+
# 保留动词(可选、按需声明):setup build test lint typecheck run verify
|
|
68
|
+
# 也允许自定义键(e2e / release / docs / smoke …)
|
|
69
|
+
capabilities:
|
|
70
|
+
<verb>:
|
|
71
|
+
run: string # 要执行的命令
|
|
72
|
+
desc?: string
|
|
73
|
+
example?: string # 特别用于 CLI:一个真实调用示例
|
|
74
|
+
background?: bool # dev server 等长驻进程 = true
|
|
75
|
+
mutating?: bool # release/publish/deploy 等有副作用 → Agent 须先确认
|
|
76
|
+
|
|
77
|
+
# ── 3. Environment:跑起来需要的配置(每个可运行仓库都要) ────
|
|
78
|
+
environment:
|
|
79
|
+
- name: string # 如 API_BASE_URL / DATABASE_URL
|
|
80
|
+
desc?: string
|
|
81
|
+
required?: bool # 缺了跑不起来
|
|
82
|
+
secret?: bool # 密钥类,勿硬编码/勿入库
|
|
83
|
+
|
|
84
|
+
# ── 4. Contracts:对外接口 = 契约(破坏需显式版本升级) ──────
|
|
85
|
+
# 涵盖:库的 public API、CLI 的命令/flag、前后端 API schema…
|
|
86
|
+
contracts:
|
|
87
|
+
- id: string
|
|
88
|
+
kind: public-api | cli-interface | http-api | event | other
|
|
89
|
+
desc: string
|
|
90
|
+
breaking_needs?: major | minor # 破坏它至少需要哪级版本变更
|
|
91
|
+
check?: string # 能自动校验兼容性的命令(仓库自带工具,如 buf breaking / oasdiff / api-extractor),exit 0 = 兼容
|
|
92
|
+
snapshot?: string # 打印契约当前指纹到 stdout 的命令;CLI 存基线并 diff(协议无关,见 §5)
|
|
93
|
+
manual_verify?: string # 既无 check 也无 snapshot 时的人肉验证说明(进 GAPS,见 §5)
|
|
94
|
+
|
|
95
|
+
# ── 5. Invariants:硬约束,优先声明式、可门禁 ────────────────
|
|
96
|
+
invariants:
|
|
97
|
+
- id: string
|
|
98
|
+
rule: string # 人类可读约束
|
|
99
|
+
# 三选一执行方式(按此优先级):
|
|
100
|
+
enforcement?: # (a) 声明式,确定性、无 LLM(借鉴 adr-kit)
|
|
101
|
+
forbid_pattern?: [string]
|
|
102
|
+
forbid_import?: [string]
|
|
103
|
+
require_pattern?:[string]
|
|
104
|
+
path_glob?: [string] # 限定作用范围
|
|
105
|
+
check?: string # (b) 任意命令,exit 0 = pass
|
|
106
|
+
manual?: bool # (c) 无法机器验证 → 软约定,计入技术债
|
|
107
|
+
llm_judge?: bool # 复杂语义可 opt-in 让模型判
|
|
108
|
+
|
|
109
|
+
# ── 6. Knowledge:指向叙述文件;新鲜度"派生",不手写日期 ─────
|
|
110
|
+
knowledge:
|
|
111
|
+
- path: string # .agents/knowledge/... 下的文件/目录
|
|
112
|
+
role: domain | conventions | journal | other
|
|
113
|
+
binds?: [string] # 它描述的源文件(用于算 drift)
|
|
114
|
+
# freshness 由 CLI 从 git 与 binds 的 hash 派生,不要求人肉填 verified 日期
|
|
115
|
+
|
|
116
|
+
# ── 8. Routing:按"改动类型"导航(生成 .agents/routing.md,v0.2) ──
|
|
117
|
+
# 不列举需求,而是按"改动类型"告诉 Agent:先读哪、入口在哪、别假设什么、最少跑什么验证。
|
|
118
|
+
routing:
|
|
119
|
+
- when: string # 改动类型,如 "修 bug" / "加 HTTP 接口" / "动数据源"
|
|
120
|
+
read?: [string] # 先读哪些文件/目录(repo-relative)
|
|
121
|
+
entry?: [string] # 入口点
|
|
122
|
+
dont_assume?: [string] # 别假设什么(gotchas)
|
|
123
|
+
verify?: [string] # 最少验证:capability 动词,或带空格的原始命令
|
|
124
|
+
# doctor 校验 read/entry 路径存在、verify 动词已在 capabilities 声明
|
|
125
|
+
|
|
126
|
+
# ── 9. Modules:模块卡(生成 .agents/modules.md,v0.2) ──────────
|
|
127
|
+
# 每模块固定:职责 / 入口 / 上下游 / 必须知道 / 常见错误。entry 自动参与新鲜度绑定。
|
|
128
|
+
modules:
|
|
129
|
+
- name: string
|
|
130
|
+
role: string # 职责
|
|
131
|
+
entry: [string] # 入口文件(也用于 freshness:改了 → 模块卡告警)
|
|
132
|
+
upstream?: [string]
|
|
133
|
+
downstream?: [string]
|
|
134
|
+
must_know?: [string] # Agent 必须知道
|
|
135
|
+
pitfalls?: [string] # 常见错误(最高价值的一栏)
|
|
136
|
+
|
|
137
|
+
# ── 7. Playbooks:复用 SKILL.md(可选) ──────────────────────
|
|
138
|
+
playbooks:
|
|
139
|
+
dir?: string # 默认 .agents/playbooks/
|
|
140
|
+
|
|
141
|
+
# ── 生成映射:canonical → 各工具文件 ─────────────────────────
|
|
142
|
+
generate:
|
|
143
|
+
- to: "AGENTS.md" render: "identity+capabilities+environment+invariants"
|
|
144
|
+
- to: "CLAUDE.md" content: "@AGENTS.md"
|
|
145
|
+
- to: ".cursor/rules/00-follow-agents.mdc" template: "adapter"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**保留动词说明**:`capabilities` 的保留动词全部**可选**——它是一套"共享词汇表",仓库只声明适用的子集(库通常没有 `run`;前端 `run` 是 dev server 且 `background: true`)。Agent 冷启动时能预期这些词的语义。
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 4. 生成契约(`sync`)
|
|
153
|
+
|
|
154
|
+
- `manifest.yaml` + `.agents/**` 是唯一手写源。
|
|
155
|
+
- `harness sync` 幂等地渲染出 `generate` 列出的所有工具文件,顶部写 DO-NOT-EDIT 头。
|
|
156
|
+
- 生成文件不进人工编辑;要改就改 manifest 再 sync。
|
|
157
|
+
|
|
158
|
+
## 5. 校验契约(`doctor` / `verify`)
|
|
159
|
+
|
|
160
|
+
`harness doctor`(开发期体检,尽量确定性):
|
|
161
|
+
1. manifest 结构合法(对 schema)。
|
|
162
|
+
2. 所有引用的 path / check 脚本 / binds 源文件**存在**。
|
|
163
|
+
3. `capabilities` 命令可解析(可选 dry-run)。
|
|
164
|
+
4. 生成物**无漂移**(re-render 到内存 vs 磁盘 diff)。
|
|
165
|
+
5. 新鲜度:`knowledge.binds` 的源文件 hash 变了 → 报 drift;`invariants` 里 `manual:true` 的计入"待补门禁"技术债并给出数量。
|
|
166
|
+
6. **AGENTS.md 体量预算**:生成的 `AGENTS.md` 超过 ~150 行 / ~700 词告警。渐进式披露——入口只指路,细节放 `.agents/` 按需加载,绝不让 Agent 读不完。
|
|
167
|
+
|
|
168
|
+
`harness verify`(CI 门禁,全确定性)= 所有 `invariants` 的 `enforcement`/`check` + `contracts.check` + `capabilities.verify` + "生成物无漂移"。任一失败即 fail。
|
|
169
|
+
|
|
170
|
+
**契约校验(v0.2,协议无关)**:契约的破坏检测有两条互补路径,CLI **不理解任何协议语义**,只当调度器 + 基线框架:
|
|
171
|
+
- `check`:仓库自带的破坏检测工具(HTTP → `oasdiff`;gRPC/protobuf → `buf breaking`;库 → `api-extractor`;CLI → 自写脚本),exit 0 = 兼容。CLI 只 `execSync` 看退出码。
|
|
172
|
+
- `snapshot`:仓库给一条**打印契约当前指纹到 stdout** 的命令(HTTP 打印 openapi / 抓路由;库打印 API 报告;CLI 打印 `--help`)。CLI 把 stdout 存成基线 `.agents/contracts/<id>.snapshot`,`verify` 时重新打印再 diff:一致=过,**漂移=fail**,无基线=提示先 `accept-contract`。这套 snapshot+baseline 与"生成物漂移检测"同一心智,复用于任何形态。
|
|
173
|
+
- 有意变更契约时,显式跑 `harness accept-contract [--id <id>]` 更新基线——**与 `sync` 分开**,杜绝破坏被悄悄盖章。
|
|
174
|
+
|
|
175
|
+
**GAPS 报告(v0.2)**:`verify` 末尾输出一段"这里查不了"的显式清单,把以下三类**从散落的 WARN 收拢成一等公民**:
|
|
176
|
+
- `manual: true` 的 invariant(软约定,计技术债);
|
|
177
|
+
- 没有 `check` 的 contract(附 `manual_verify` 人肉验证说明);
|
|
178
|
+
- `mutating` / `background` 的 capability(有副作用/长驻,纯 CI 跑不了)。
|
|
179
|
+
|
|
180
|
+
GAPS 不计入失败,但会打印数量(`verify: OK (N gap(s))`)。配套**铁律**(写进 `AGENTS.md` Working agreement):**Agent 绝不许把 GAPS 里的项谎报成"已验证通过"**——查不了就如实说查不了。这直接治"把没跑的验证说成跑过了"。
|
|
181
|
+
|
|
182
|
+
**行为协议(v0.2,纯 prose,生成进 `AGENTS.md`)**:
|
|
183
|
+
- **Task Brief**:动手前先在对话里声明"改什么/属哪类/碰哪些层/怎么验证",治"上来就全仓 grep + 瞎猜"。
|
|
184
|
+
- **先路由后编辑**:改代码前先在 `routing.md` 里找到对应改动类型、按它指的文件读,别全仓搜。
|
|
185
|
+
- **知识沉淀触发 + 反沉淀**:学到"代码里推不出来的"(坑/决策/修复)才沉淀到 `knowledge/`(决策走 journal ADR);一次性噪音、代码里显而易见的,**不要沉淀**。
|
|
186
|
+
- **adoption 节奏**(`.agents/adoption.md`,手写账本):默认用最轻的方案;同一错误漏 3 次以上、或一个软约定用满一周确实值得,才把它升级成 `verify` 的机器门禁。反仪式,"挣来"更重的工具。
|
|
187
|
+
|
|
188
|
+
## 6. 防腐烂(anti-rot)
|
|
189
|
+
|
|
190
|
+
- **结构地图(暂缓 / 可选)**:核心"该看哪、别假设什么"已由 `modules`(模块卡,§9)+ `routing`(§8)用**高信噪比精选**覆盖。全量代码 dump(repomix `--compress`)不是必做项——它面向"喂给无文件访问的外部 LLM",与 IDE agent 场景 + 渐进式披露原则不对口,且腐烂最快。真需要时**按需生成、不入库**(放 .gitignore),不当 CI/hook 固定产物。见 DESIGN 决策日志(2026-07-03)。
|
|
191
|
+
- **新鲜度派生、不手写**:知识条目通过 `binds` 绑定源文件,CLI 存其内容 hash;源文件变化 → reliability 下降 → drift 告警。**不要求人肉维护 `verified` 日期**(那是 ceremony)。
|
|
192
|
+
- **两档 guardian**:
|
|
193
|
+
- 便宜档(`doctor`,可每日/每次会话跑,确定性):drift、过期候选、`manual` 技术债。
|
|
194
|
+
- LLM 档(可选、偶发、须先确认花费):找缺失的知识/ADR、语义审计。
|
|
195
|
+
|
|
196
|
+
## 7. CLI 命令面
|
|
197
|
+
|
|
198
|
+
| 命令 | 作用 |
|
|
199
|
+
| --- | --- |
|
|
200
|
+
| `harness init` | 往当前 repo 注入 `.agents/` 骨架 + 交互式填 manifest 关键字段 |
|
|
201
|
+
| `harness sync` | manifest → 生成各工具文件(幂等,带 DO-NOT-EDIT 头) |
|
|
202
|
+
| `harness doctor` | 开发期体检:完整性 + 漂移 + 新鲜度 + 技术债 |
|
|
203
|
+
| `harness verify` | CI 门禁:跑全部可执行 checks,任一失败即 fail |
|
|
204
|
+
| `harness accept-contract [--id]` | 把当前契约指纹记为已接受基线(有意变更后显式跑,与 sync 分开) |
|
|
205
|
+
|
|
206
|
+
(未来:`harness map` 生成代码地图、`harness new-adr` 起草决策记录。)
|