@chrono-meta/fh-gate 1.4.97 → 1.4.99

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.
Files changed (44) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CATALOG.md +19 -0
  3. package/CHEATSHEET.md +9 -1
  4. package/CLAUDE.md +28 -2
  5. package/README.ja.md +229 -42
  6. package/README.ko.md +241 -45
  7. package/README.md +168 -31
  8. package/README.zh.md +219 -40
  9. package/docs/OUTPUT_EVIDENCE.md +21 -12
  10. package/docs/pillars.svg +3 -7
  11. package/knowledge/shared/harness-core/fh_ecosystem_positioning.md +2 -0
  12. package/knowledge/shared/harness-core/fh_global_positioning_and_distribution_roadmap.md +136 -0
  13. package/knowledge/shared/harness-core/fh_three_layer_canon.md +20 -0
  14. package/knowledge/shared/harness-core/field_verdict_crossfamily_gate.md +215 -2
  15. package/knowledge/shared/harness-core/ship_readiness_gate.md +112 -0
  16. package/knowledge/shared/learnings/subagent_invocations_log.yaml +65 -0
  17. package/package.json +5 -1
  18. package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
  19. package/plugins/fh-commons/skills/ko-tech-writer/SKILL.md +63 -12
  20. package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
  21. package/plugins/fh-meta/CHANGELOG.md +166 -0
  22. package/plugins/fh-meta/skills/auto-decorrelation/SKILL.md +30 -0
  23. package/scripts/consent_registry_check.sh +124 -1
  24. package/scripts/degrade_direction_scan.sh +10 -1
  25. package/scripts/digest_landing_check.sh +20 -4
  26. package/scripts/fh_node_check.sh +128 -1
  27. package/scripts/fh_session_load.sh +22 -2
  28. package/scripts/frontier_digest_autopilot.sh +229 -0
  29. package/scripts/lane_runner_check.sh +294 -26
  30. package/scripts/package_coverage_check.sh +17 -0
  31. package/scripts/postinstall_notice.js +34 -0
  32. package/scripts/selfcheck.sh +183 -5
  33. package/scripts/test_consent_registry.sh +99 -0
  34. package/scripts/test_degrade_scan_shell_probes.sh +75 -0
  35. package/scripts/test_field_canon_lanes.sh +29 -5
  36. package/scripts/test_lane_runner_lanes.sh +295 -0
  37. package/scripts/test_node_check_lanes.sh +217 -0
  38. package/scripts/test_selfcheck_state_lanes.sh +61 -0
  39. package/scripts/test_stale_clone_guard_lanes.sh +21 -7
  40. package/scripts/test_version_lockstep_lanes.sh +62 -0
  41. package/scripts/version_lockstep_check.sh +143 -1
  42. package/templates/.git-hooks/pre-commit +22 -1
  43. package/templates/consent_classes.yaml.example +30 -0
  44. package/templates/degrade_direction_scan.sh +10 -1
package/README.zh.md CHANGED
@@ -8,12 +8,18 @@
8
8
  <img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
9
9
  <a href="https://github.com/chrono-meta/forge-harness/issues/72"><img src="https://img.shields.io/badge/Codex-beta_·_help_validate-f59e0b.svg" alt="Codex-compatible beta — help validate (issue #72)"></a>
10
10
  <a href="https://www.npmjs.com/package/@chrono-meta/fh-gate"><img src="https://img.shields.io/npm/v/@chrono-meta/fh-gate.svg?color=cb3837" alt="npm"></a>
11
+ <a href="https://github.com/chrono-meta/homebrew-forge-harness"><img src="https://img.shields.io/badge/homebrew-tap-FBB040.svg" alt="Homebrew tap"></a>
12
+ <a href="https://github.com/chrono-meta/forge-harness/stargazers"><img src="https://img.shields.io/github/stars/chrono-meta/forge-harness?style=social" alt="GitHub stars"></a>
11
13
  </p>
12
14
 
13
15
  <p align="center">
14
16
  <a href="README.md">English</a> · <a href="README.ko.md">한국어</a> · <b>中文</b> · <a href="README.ja.md">日本語</a>
15
17
  </p>
16
18
 
19
+ <p align="center">
20
+ <sub>如果这对你有用,⭐ 一下能帮助更多人发现它。</sub>
21
+ </p>
22
+
17
23
  <p align="center">
18
24
  <b>锻造你的 Claude Code 项目 —— 让它通过,它会更快出炉。</b><br>
19
25
  一个实践者的 <b>元框架 (meta-harness)</b> —— 你的项目框架们所栖居的星系。<br>它抬高每个项目的 <b>下限 (floor)</b>(把设置框架化)和 <b>上限 (ceiling)</b>(加速工作),再把这些收益在你的整个项目组合中复利累积。
@@ -56,21 +62,55 @@
56
62
 
57
63
  **前置条件**:Claude Code CLI —— 用 `claude --version` 确认
58
64
 
65
+ <details><summary><b>可选:有一道门禁需要 Python + PyYAML</b> —— 少了它 <code>npm test</code> 是红的</summary>
66
+
67
+ 同意登记表 (consent-registry) 那道门禁要解析 YAML,而当它解析不了时会 **fail closed** —— 这是对的,
68
+ 因为一条未经校验的同意记录绝不该读起来像一条干净的记录。但这个 fail-closed 会让整个 `npm test`
69
+ (以及 `prepublishOnly`)在没装 PyYAML 的机器上变红,而直到 2026-08-12,这个依赖 **哪里都没写**。
70
+ 现在写在这里了 —— 而且截至本次编辑,*只* 写在这里:`package.json`、速查表以及其他所有文档里都还
71
+ 没有,所以这一段是一台新机器唯一能学到它的地方。这比"哪里都没有"是个改进,不是修复:
72
+
73
+ ```bash
74
+ python3 -m pip install --user pyyaml # 确认:python3 -c 'import yaml; print(yaml.__version__)'
75
+ ```
76
+
77
+ 为什么要专门点出来,而不是留作隐含:曾经有一次发布是从一个会话里绿着出货的,而那个会话的 `python3`
78
+ 恰好解析到了 **另一个无关项目的 virtualenv**,那里装了 PyYAML,机器自己的 `python3` 则没有。门禁
79
+ 从未被绕过 —— 它是真的通过了,只是那次通过不可移植。现在这道门禁的每一次判定都会打印它所使用的
80
+ 解释器与 PyYAML 版本,于是一个"绿"会说明它是怎么来的,而不是留给读者去假设。
81
+
82
+ </details>
83
+
59
84
  ```bash
60
85
  # 1. 安装插件
61
86
  claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git
62
87
  claude plugin install -s user fh-meta@forge-harness
63
88
 
64
89
  # 2. 克隆中枢
65
- git clone https://github.com/chrono-meta/forge-harness.git ~/forge-harness
66
- cd ~/forge-harness
90
+ git clone https://github.com/chrono-meta/forge-harness.git ~/projects/forge-harness
91
+ cd ~/projects/forge-harness
67
92
 
68
93
  # 3. 启动会话
69
94
  claude
70
95
  ```
71
96
 
72
- > ✅ Claude 会读取 `CLAUDE.md`,并询问要连接哪个项目或开始什么任务。
97
+ > ✅ 然后 **打一句招呼("hi")** —— 🐿️ 门菜单是在你打出招呼时出现的,光是启动不会出现。
73
98
  > 说 **"连接一个项目"** → 中枢扫描 `../`,找到 `.git` 目录,创建 `tracks/{project}/`。
99
+ > 想做完整的初始设置(hooks · 门禁 · 基线 —— 每一项单独批准,拒绝会被尊重并记录),
100
+ > 请要 **`/install-wizard`**。
101
+ > 已经克隆到别的地方了?那个路径 *就是* 你的中枢 —— 把文档里每一处 `~/projects/forge-harness`
102
+ > 都读成你实际的克隆路径。
103
+
104
+ **你的头 15 分钟** —— 成功长什么样,以及拿它做什么:
105
+
106
+ 1. 当一句招呼("hi")能让 🐿️ 门菜单出现、而"连接一个项目"能建出 `tracks/{your-project}/` 时,
107
+ 你就知道设置成功了。
108
+ 2. 然后在同一个会话里拿下一个即时收益:说 **"加速这个项目"**(一份值得接线的技能/插件排序方案,
109
+ 安装要过门禁),或者 **"跑一下 /context-doctor"**(token 浪费扫描)。
110
+ 3. 一条诚实说明:FH 的核心回报是 **复利累积** —— 会话记录、收割来的学习、跨会话记忆。它从
111
+ **第 2 个会话起** 才显形。第一天给你的是菜单、加速方案和治理门禁;别在第一天就去评判复利。
112
+
113
+ 路上碰到不认识的词?→ [`knowledge/shared/GLOSSARY.md`](knowledge/shared/GLOSSARY.md)。
74
114
 
75
115
  **仅插件(不克隆):**
76
116
  ```bash
@@ -79,14 +119,19 @@ claude plugin install -s user fh-meta@forge-harness
79
119
  cd ~/projects/{your-project} && claude
80
120
  ```
81
121
 
82
- > ⚠️ **仅插件是部分协同。** 你得到技能和 agent,但 **得不到** Layer 1 —— 即
83
- > `CLAUDE.md` 治理(主动引导、4 轴门禁、模式分支)和复利式上下文(`tracks/` 记忆累积、
84
- > `harvest-loop` 学习)。每个技能在隔离状态下运行效果相同;缺的是让它们在会话之间
85
- > 复利累积的编排。当你想要完整套装而不只是工具时,请克隆中枢(见上)。
122
+ > ⚠️ **仅插件是部分协同。** 你得到技能和 agent,但 **得不到** 中枢那一侧的编排 —— 即
123
+ > `CLAUDE.md` 治理(主动引导、4 轴门禁、模式分支;自动化层)和复利式上下文(`tracks/` 记忆
124
+ > 累积、`harvest-loop` 学习;方法论层)。每个技能在隔离状态下运行效果相同;缺的是让它们在
125
+ > 会话之间复利累积的那层编排。当你想要完整套装而不只是工具时,请克隆中枢(见上)。
126
+
127
+ **哪条入口适合你?**
86
128
 
87
- > 🚪 **初来乍到 / 只想要技能?** 从有主张的正门开始 ——
88
- > [`templates/starter_profile.md`](templates/starter_profile.md):一条安装命令、一份精选的
89
- > 头五个技能,以及一道零安装的治理门禁(`npx fh-gate`)。其余技能等你需要时再出场。
129
+ | 你是…… | 从这里开始 |
130
+ |---|---|
131
+ | 单人开发者,一个项目,只想先试试 | [`templates/starter_profile.md`](templates/starter_profile.md) —— 一条命令,一份精选的头五个技能 |
132
+ | 有多个项目,想要那个复利累积的中枢 | 克隆中枢(见上面的快速上手) |
133
+ | CI / 非 Claude 运行时,只要门禁 | `npx @chrono-meta/fh-gate`(零安装的治理门禁) |
134
+ | 比起 `npx`/`npm` 更习惯 `brew` | `brew tap chrono-meta/forge-harness && brew install forge-harness` —— 内容 100% 一致,只是安装体验不同(社区 tap;尚未进入 Homebrew Core,所以不先加 tap 的话 `brew search` 找不到它) |
90
135
 
91
136
  ---
92
137
 
@@ -131,30 +176,135 @@ Project B ──→ 在 CLAUDE.md 中连接中枢
131
176
 
132
177
  这个星系不只是容器。FH 可以在自己的沙箱里**以仿真方式跑一个现场框架** —— 单次昂贵,总体
133
178
  更便宜,因为试错汇聚在一处并复利累积 —— 当仿真验证通过,它就把该项目**输出 (emit)** 为一个
134
- 独立的、特化的框架。这就是它所朝向的目标。实际上,它以四种方式运作:
135
-
136
- **① 组装 (Assemble)** —— FH 以优化后的 token 成本运行一整 *簇* 框架,并把最合适的那个交到你手上。
137
- 你不是一个个去接线技能;你得到的是一个 **框架** —— 连同它的插件、技能与 agent —— 已按需组装好。
179
+ 独立的、特化的框架。**最后那一步是它所朝向的目标,而不是一项已出货的功能** —— 孵化舱迄今输出过
180
+ 一次,而产出那一次的运行并没有走完整套流程。请把"仿真然后输出"这句读作行进方向;在它之前的一切
181
+ 都是今天就在用的。
138
182
 
139
- **② 锻造 (Forge)** *(品质门禁)* —— 每次变更都要穿过对抗 · 幽灵 · 回归门禁来挣得它的资格。
140
- 这不是"多检查"。它是一个 **责任路由器 (responsibility router)**:随着自动化上升,人的签字变少但
141
- 每一次更重,于是门禁只把你的注意力花在变更 *不可逆* 的地方。品质是杠杆;速度是结果。
183
+ ### 五重身份 —— FH 是为了什么
142
184
 
143
- **③ 边车 (Sidecar)** —— 能力本身留在前沿。FH 跨多个 LLM(Claude、Codex、Gemini、本地)派发,
144
- 使原始算力永不绑死在单一模型或单一世代上。重点 *不是* 去修补每个模型的弱点 —— 随着模型变强,
145
- 那套脚手架会成为死代码。重点是 **搭上前沿的演化**:底座 (substrate) 现在原生就能做到的就卸掉,
146
- 它接下来推出的就吸收进来。去相关 (decorrelation) 是当下的信任杠杆(跨家族面板胜过单一模型的
147
- 上限);共同演化 (co-evolution) 才是结构。
185
+ 这不是五个模块,也不是五项已出货的功能。它们是 **技能自然聚拢成的形状** —— 是给一个早已存在的
186
+ 东西命名,它散布在各个技能与 agent 之中,而不是叠加在它们之上。它们和本页开头那张问题表处在不同
187
+ 的层次:那张表是 *你可能带着来的症状*,这里是 *中枢围绕什么组织起来*。
148
188
 
149
- **④ 自演化循环 (Self-evolving loop)** —— 框架无需重建就变得更好,沿两个方向:**向外**,
150
- 每次会话的教训复利汇入中枢,让下一个项目起步更快;**向内**,它捕捉并修复 *自身* 的缺陷
151
- (4 轴门禁、双向校验、按用户适配)。
189
+ | | 身份 | 一个人得到什么 |
190
+ |---|---|---|
191
+ | **①** | **多框架集群 (Multi-harness cluster)** | 一个任务同时驾驭多个框架,而治理是在它们 *之间* 算出来的 |
192
+ | **②** | **项目孵化器 (Project incubator)** | 新框架出炉时 **就已经会走路**,而不是一副空的脚手架 |
193
+ | **③** | **治理门禁 (Governance gate)** | 不该出货的东西被 **机械地** 拦下,而不是靠记得去检查 |
194
+ | **④** | **前沿 → 组织传导 (Frontier → org propagation)** | 从外部到来的东西,一路落进组织 *内部* |
195
+ | **⑤** | **放大器 (Amplifier)** | 一句简短的意图被一路锻造到成品 |
196
+
197
+ **它们完成度并不齐平,你也不该把上面那张表读成五项能用的功能。** 成熟度按身份逐项跟踪,用一把
198
+ 四级刻度 —— `aspirational(构想)→ partial(部分)→ RC(在实验室里立起来了)→ REALIZED(走到
199
+ 外面去了)` —— 每一级都配一条带日期的证据。这些等级刻意 **没有** 被复制到这里:同一个等级放进
200
+ 两个文件,总会有一个先腐坏,而本页有四种语言版本,复制到这里就等于四份副本。在你依赖上表任何
201
+ 一行之前,请先读当前的等级 —— 那只有一个文件:
202
+ [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)。如果你只想要
203
+ 一句话的版本,截至 **2026-08-15**:**③ 与 ⑤ 是绿灯 —— 已在实验室之外得到验证;①、② 与 ④ 是
204
+ 候选发布 (RC) —— 已造出并校准,但还没在别人手上走过。** 如果这句话和那个门禁文件对不上,以门禁
205
+ 文件为准,这一行就是过期的。
206
+
207
+ 有两条性质横贯这五重身份,而且都不是你可以打开的开关:
208
+
209
+ - **它搭上前沿,而不是给前沿打补丁。** FH 跨家族派发(Claude、Codex、Gemini、本地)—— 但重点
210
+ *不是* 去糊住每个模型的弱点,因为随着模型变强,那套脚手架会死掉。它是共同演化 (co-evolution):
211
+ 底座 (substrate) 现在原生就能做到的就卸掉,它接下来推出的就吸收进来。**去相关 (decorrelation)**
212
+ 是当下的信任杠杆,也是本页最吃重的那个词:刻意让两道检查以 *不同的方式* 失败 —— 换一个模型家族
213
+ 的审阅者、拿真实目标真跑一次、请外人来审你自己的记录 —— 好让其中一道看不见的,另一道看得见。
214
+ 跨家族面板胜过单一模型的上限,正是因为这个,而不是因为它人多。
215
+ - **它沿两个方向演化。** *向外*,每次会话的教训复利汇入中枢,让下一个项目起步更靠前。*向内*,
216
+ 它捕捉并修复 **自身** 的缺陷 —— 同一套门禁,掉转过来对准框架本身。
152
217
 
153
218
  整件事是一次分工:**原始能力属于模型;组装、信任与演化属于框架。**
154
219
 
155
- > **这里的自愈不是一句主张 —— 它就在提交日志里。** 正是这份 README 的语气规则,在会话进行中
156
- > 被 FH 抓到自身漂移而修正:语气失误 → 诊断 → 一位攻击 *它自己第一版修正* 的跨家族 challenger
157
- > 再修正下限层级复核记忆更新。一个框架修复自身缺陷的实录 —— 是记录,不是口号。
220
+ ---
221
+
222
+ ## 它是怎么被造出来的 —— 工序 引擎身份
223
+
224
+ 上面那五重身份是表面。它们下面还压着两层,而把三层各自命名,正是让"FH 到底做什么"不至于塌缩成
225
+ 一堆不分彼此的东西的关键:
226
+
227
+ ```
228
+ 五重身份 一个人真正能用到的东西 (表面 —— 你得到什么)
229
+ ↑ 由此支撑
230
+ 四大引擎 让它成为可能的那份能力 (能力 —— 它能做什么)
231
+ ↑ 由此产出
232
+ 三段工序 那些引擎被锻造出来的「顺序」 (工序 —— 它是怎么被造出来的)
233
+ ```
234
+
235
+ **四大引擎。** 每一个都是上面某个身份所站立的地基。它们不是为这一页发明出来的:出货就绪门禁
236
+ ([`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md))早就用一个独立
237
+ 的列,按这同样四项能力给每一重身份打分,所以给它们命名是识别,而不是搭一套分类法。
238
+
239
+ | 引擎 | 它是什么 | 它支撑的身份 |
240
+ |---|---|---|
241
+ | `judgment-circuit` | 什么算成功、不确定时往哪边偏、什么不在范围内、什么绝不发生 | ⑤ 放大器 · ② 孵化器 |
242
+ | `ship-gate` | 在不可逆的面之前机械拦截 —— commit、publish、delete、rewrite | ③ 治理门禁 |
243
+ | `context-continuity` | 跨压缩、子 agent、机器与会话,不把线头弄丢 | ① 集群 · ② 孵化器 |
244
+ | `external-grounding` | 在断言"这是新的"或敲定一份设计 *之前*,先伸到仓库之外去问 | ④ 前沿 → 组织 |
245
+
246
+ 它们只写名字,绝不写编号 —— 这里的表格顺序和别处行文里的顺序并不一致,所以"引擎 ④"会因为你读
247
+ 的是哪一份而解码成两个不同的引擎。
248
+
249
+ `judgment-circuit` 是最容易被误读的一个,所以直说:**它是一套用来做决定的坐标系,而不是一句
250
+ "这个框架是谁"的宣言。** 它那一行里的四项,就是它的全部。也不要把它简写成英文里的 "soul"
251
+ (或中文的"灵魂")—— 那个词读起来是 *人设 (persona)*,而这个引擎背后那次测量(105 次运行,
252
+ 对比有无身份宣言的提示词)最大的一项发现恰恰是:这两者是两样东西 —— 加上"你是一个 ~"在测过的
253
+ 最弱模型上是 **净损失**,把它拿掉反而把分数找了回来。一个词的改名,会把那次测量刚刚分开的东西
254
+ 重新焊回去。那个数字本身刻意没有引在这里 —— 源产物记录它时没有带刻度,而一个没有刻度的数字放在
255
+ 门面页上只是装饰;它连同上下文在
256
+ [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md) 里。判断坐标系
257
+ 也不是一次坐下就能建成的:FH 交给一个新框架的是一份 **种子草稿**,随着那个框架被真正用起来而
258
+ 逐步填满。
259
+
260
+ **三段工序** —— 这是一个 *投入的顺序*,不是一份菜单:
261
+
262
+ ```
263
+ ① 设计之前先立坐标系 判断坐标系「最先」进场 —— 成功 · 偏向 · 不在范围 · 绝不做 ——
264
+ 而不是事后补写成一份"我做了什么"的记录
265
+
266
+ ② 中段做去相关,用来加速 把工作拆成会以「不同方式」失败的检查,然后一次性跑掉。要挑「哪些
267
+ 差异算数」—— 再来一位同一种类的审阅者不是去相关,那是把同一个盲点
268
+ 看两遍。并行本身没有方向,挑方向的是 ① 里那套判断坐标系。
269
+ 这是一种「工作方式」,不是 ③ 里那道收尾检查。
270
+
271
+ ③ 最后在四条轴上烧一遍 也就是下面那四条轴。对抗审阅只是其中一条,不是全部
272
+ ```
273
+
274
+ **四条验证轴** —— 所谓"我们审过了",往往到头来只做了其中第一条。看中间那列来挑一条,看右边那列
275
+ 知道它能抓到什么:
276
+
277
+ | 轴 | 什么时候该伸手拿它…… | 它抓到什么 | 典型手段 |
278
+ |---|---|---|---|
279
+ | **ⓐ 不同家族** | 这次变更要「决定」什么 —— 一个 PASS/FAIL、一道门禁、一条安全规则 | **实现** 错了 | 换一个模型家族的审阅者(`auto-decorrelation`) |
280
+ | **ⓑ 首次真实使用** | 你正要去相信一个数字、一个计数,或某次扫描的输出 | **你测量的方式** 错了 | 拿一个真实目标真跑一次,然后用眼睛看那份结果 |
281
+ | **ⓒ 记录接地** | 你写下了别人会据以行动的主张、数字或引用 | **主张** 错了 | 找一个没写过它的人,把它说的重新测一遍 |
282
+ | **ⓓ 撤回并观察** | 你加了一个测试、一道守卫或一项检查,并相信它在护着你 | **锚** 错了 —— 那道检查是装饰 | 把它所守护的东西删掉,确认 *正是那一条* 检查变红 |
283
+
284
+ **你不必每次都把四条跑满,这是设计如此。** 一行小修一条都不配;一次会返回判定的变更配得上 ⓐ;
285
+ 一个已经公开出去的数字配得上 ⓑ 加 ⓒ;一道新加的守卫配得上 ⓓ;而一个不可逆的面 —— publish、
286
+ delete、history rewrite —— 配得上四条里它的失败模式所暴露的那些,并且拿不准时就多跑一条。多堆
287
+ 几位审阅者,跟多加一条轴不是一回事。
288
+
289
+ 还有一条轴坐在这四条之外,因为它换掉的是 *你站在谁的地面上*,而不是 *你检查什么*:**立场
290
+ (standpoint)** —— 当一次变更跨进另一个框架时,从目标方自己的仓库与规则去跑这份 diff,而不是
291
+ 从你对它们的理解出发
292
+ ([`field_verdict_crossfamily_gate.md §7`](knowledge/shared/harness-core/field_verdict_crossfamily_gate.md))。
293
+
294
+ > **诚实说明 —— 这不是一个干净的分层,而这正是重点。** 工序 ① 和 ③ 与引擎是同一种材料做的,
295
+ > 所以下面那层用到了上面那层。这个矛盾在 *主语* 上化解:**引擎** 是 FH 施加于你的工作的东西,
296
+ > 而 **工序** 是 FH 锻造自己那些引擎时所用的顺序。如果这套方法是从外面借来的,它本该与引擎毫无
297
+ > 关系;这份重叠正是自己吃自己狗粮 (dogfooding) 留下的指纹。完整正典,含每条主张背后的样本
298
+ > 限制:[`fh_three_layer_canon.md`](knowledge/shared/harness-core/fh_three_layer_canon.md)。
299
+
300
+ > **这里的自愈不是一句主张 —— 你去查。** 本仓库的 `git log` 就是那份记录,而且形状是重复的:
301
+ > 一个失误被抓到,修正被攻击,而那次攻击往往落在 *修正本身* 而不是原来的问题上。有一个你可以
302
+ > 按哈希打开 —— `cb74ea4`:框架在会话进行中漂了语域,之后一条语域一致性规则被加进
303
+ > `CLAUDE.md §Voice/Tone`。第二个例子就发生在加入本节的那次变更里:一个专职找出"没人跑的测试"
304
+ > 的检查器,被抓到它报的绿色计数是从某个脚本 *自己的注释* 里读出来的;而为修这一点写下的守卫,
305
+ > 又被发现「把它删掉也不会有任何测试变红」—— 这是另一个模型家族发现的,不是作者自己,最后用一条
306
+ > 真的会失败的 fixture 收口。特性分支上的提交哈希熬不过 squash-merge,所以第二个例子按它的形状
307
+ > 引用,而不是给一个会腐烂的 ID。
158
308
 
159
309
  ---
160
310
 
@@ -185,6 +335,10 @@ npx --package @chrono-meta/fh-gate fh-gate # 默认:Claude
185
335
  FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate # Codex 后端
186
336
  FH_BACKEND=auto npx --package @chrono-meta/fh-gate fh-gate "src/foo.ts" full
187
337
  # → FH_GATE_VERDICT: PASS | PENDING | BLOCKED | ESCALATE
338
+
339
+ # 或通过 Homebrew(内容相同,安装后无需 npx 前缀):
340
+ brew tap chrono-meta/forge-harness && brew install forge-harness
341
+ fh-gate
188
342
  ```
189
343
 
190
344
  `fh-gate` 对两种运行时使用同一套 FH 治理提示。`FH_BACKEND=claude` 运行 `claude --print`;`FH_BACKEND=codex` 运行 `codex exec`;`FH_BACKEND=auto` 在两个 CLI 都存在时优先选择 Codex —— 但 `auto` 是回退式*选择*,只运行一条腿。`FH_BACKEND=cross` 会运行两个模型家族并对 findings 取并集(只有一方发现的问题仍然是问题,因此是并集而非投票),判定取各腿中最严重者。成本约为 2 倍,因此并非默认值,适用于判定/门禁/不可逆面的变更。输出始终声明实际运行了哪些腿(`FH_GATE_LEGS:`、`FH_GATE_DECORRELATED:`) —— 在只装了一个家族的机器上,`cross` 会降级为单腿并明确说明,因为让单家族结果读起来像交叉验证过更糟。
@@ -229,6 +383,18 @@ hooks 不会自动触发,M2 的 agent 派发步骤需要适配器(或交互
229
383
  当前门禁语义将其归为 BLOCKED:2 项 CI 未捕获的 A 级发现(允许列表中的短 token 溢出、arity
230
384
  表中缺失的 executor 工具)。
231
385
 
386
+ **这套方法本身到底加了什么?一次实测(2026-07-14)。** 我们把模型固定在一个中等层级的下限上,
387
+ 只改变审阅 *方法*,对象是没见过的门禁代码片段,里面被植入了 *默认偏向 PASS*(fail-open)的洞。
388
+ 在八个隐晦的洞上 —— 由另外两个模型撰写,所以这套测试集并没有对着我们的方法调过 —— 一次普通的
389
+ 审阅抓到 5/8(而且其中两次"抓到"抓错了 bug,也就是假信心);同一个模型配上 FH 的降级方向
390
+ (degrade-direction) 透镜抓到 6/8,零误报。诚实的那部分是:**两条单模型的路线漏掉的是同样那两个
391
+ 洞**(一个假值的 error sentinel,以及一处分隔符取反的解析)。换一个模型家族、同一套透镜,两个
392
+ 都抓到了 —— 所以 FH 这一 *套*(透镜 + 跨家族 + 一道机械预筛)达到 8/8。要点不是一个漂亮的分数,
393
+ 而是价值来自那个 **去相关的组合**:因为即便是一个被好好提示过的单一模型,也有只有另一个家族才
394
+ 关得上的相关性盲点。那两类被漏掉的洞,现在被机械地(一道 lint 预筛)在更早一层抓住。样本很小
395
+ (单次抽样);增加重复次数和更难的洞是已经写明的下一步。方法与完整结果:
396
+ [`ship_readiness_gate.md`](knowledge/shared/harness-core/ship_readiness_gate.md)。
397
+
232
398
  完整规格:[`fh_integration_contract.md`](knowledge/shared/harness-core/fh_integration_contract.md)
233
399
 
234
400
  ---
@@ -250,7 +416,9 @@ forge-harness 把项目当作钢来对待 —— 而这个隐喻是字面的,
250
416
  签名部件让它持续运转:`harvest-loop`(每次会话的教训成为永久技能)与
251
417
  `agent-composer`(编排派发)。其余技能等你需要时再出场 —— 完整清单见下。
252
418
 
253
- ## 37 skills · 8 agents
419
+ ## 40 skills · 8 agents
420
+
421
+ > 计数 = 未废弃的技能(仅为旧名路由而保留的废弃重定向桩不计入)。
254
422
 
255
423
  <details>
256
424
  <summary>全部资产激活检查</summary>
@@ -266,6 +434,7 @@ forge-harness 把项目当作钢来对待 —— 而这个隐喻是字面的,
266
434
  | `harness-doctor` | 框架结构诊断 | "检查我的 Claude 配置" |
267
435
  | `pipeline-conductor` | 4 轴品质门禁(后向/对抗/前向/记录) | "跑品质门禁" |
268
436
  | `field-harvest` | 把现场模式反向传回中枢 | "这个我能复用" |
437
+ | `dialogue-harvest` | 挖掘 AI 对话记录:剥掉迎合、标注「被诱导」vs「自发」 | "这个线程里到底哪些真是我自己的?" |
269
438
  | `frontier-digest` | HN + arXiv → 可执行洞见 | "AI 趋势摘要" |
270
439
  | `hub-cc-pr-reviewer` | 自动 PR 审阅 | "审阅这个 PR" |
271
440
  | `verify-bidirectional` | 反向校验决策 | "那样对吗?"、"再确认一下" |
@@ -281,14 +450,23 @@ forge-harness 把项目当作钢来对待 —— 而这个隐喻是字面的,
281
450
  | `convergence-loop` *(fh-commons)* | N 轮收敛循环 | "单遍通过很可疑" |
282
451
  | `token-budget-gate` *(fh-commons)* | 任务前 token 成本估算 | "这个多贵?" |
283
452
  | `mcp-circuit-breaker` *(fh-commons)* | MCP 工具失败模式检测 | "MCP 一直失败" |
453
+ | `ko-tech-writer` *(fh-commons)* | 韩语技术写作流水线(语域校准、去翻译腔、诚实度分层、感知式 QA) | "기술문서 써줘"、"번역투 고쳐줘" |
284
454
  | `quench-challenger` *(fh-commons)* | 对抗压测 agent | "拿魔鬼来挑战这个" |
285
- | *(+ 更多资产)* | marketplace-gate · contention-layer · edit-manifest · fact-checker · goal-quench · hub-persona-auditor · install-doctor · memory-hygiene · persona-innovator · prompt-regression · public-surface-audit · salience-splitter | |
455
+ | `auto-decorrelation` | 为承重变更招募一位不同模型家族的审阅者 | "把这次验证去相关" |
456
+ | `video-ingest` | 视频 → agent 上下文,按能力与时长路由 | "这个视频讲了什么?" |
457
+ | `fh` | 无需打招呼,随时渲染中枢地图 | "fh" |
458
+ | *(+ 其余技能)* | marketplace-gate · contention-layer · deliberation · edit-manifest · goal-quench · install-doctor · memory-hygiene · prompt-regression · public-surface-audit · return-path-gate · salience-splitter | |
459
+ | **8 个 agent** | `challenger` · `quench-challenger`(对抗)· `beginner` · `main-player` · `expert`(用户熟练度谱系 —— 冷读、日常使用、领域权威)· `fact-checker` · `hub-persona-auditor` · `persona-innovator` | 由上面的技能派发,或直接点名调用 |
286
460
 
287
461
  | 激活数量 | 诊断 |
288
462
  |:---:|---|
289
- | **28+** | 高级 —— 串联 agent-composer + sim-conductor + steel-quench + pipeline-conductor |
290
- | **10–27** | 激活阶段 —— 逐步启用未勾选的资产 |
291
- | **0–9** | 起步阶段 —— 从 `install-wizard` 开始 |
463
+ | **约一半表面或更多** | 高级 —— 串联 agent-composer + sim-conductor + steel-quench + pipeline-conductor |
464
+ | **从几个到那个程度** | 激活阶段 —— 逐步启用未勾选的资产 |
465
+ | **几乎没有** | 起步阶段 —— 从 `install-wizard` 开始 |
466
+
467
+ > 这些区间是一次粗略的自查,不是测量 —— 没有任何产物定义过这些阈值,而先前那组固定数字是对着
468
+ > 一个更小的资产盘校准的,随着资产盘变大就悄悄漂移了。用更多技能本身也不是目标;用上你的工作
469
+ > 真正需要的那些才是。
292
470
 
293
471
  **按你想做的事找技能:**
294
472
 
@@ -324,7 +502,7 @@ Claude Code 不会按任务复杂度自动选择模型 —— 这个要你设置
324
502
  | `/model opus` | Opus 处理一切 | 编辑框架的会话(Mode D)· 每一轮最大深度 |
325
503
  | `/model opusplan` | Opus *规划* · Sonnet 执行 *(当 Opus 介入时)* | 讲究成本的日常编码 —— 见注意事项 |
326
504
 
327
- **为什么现在默认 Sonnet 也行得通**:测量结果(见下文 §Model setup evidence note),*运行* FH 几乎
505
+ **为什么现在默认 Sonnet 也行得通**:测量结果(见下文 *测量,而非断言*),*运行* FH 几乎
328
506
  与模型无关 —— 上下文里的规则完成了大部分工作。仍然需要更强模型的,是一小部分深度敏感的轮次,而
329
507
  FH 会自行处理它们:**部分技能与 agent 声明了一个模型层级下限**(例如 `quench-challenger` 的下限
330
508
  在 opus),当你的环境能够到达时,它们会以那个下限层级的子 agent 派发 —— 你的会话模型不受触碰。
@@ -343,9 +521,12 @@ plan-mode **不会** 传播到子 agent。
343
521
  >(设计增量发现),而运行则不然。子 agent 的 token 成本可在会话 jsonl 的 `message.model` 中经
344
522
  > CC 看到。
345
523
 
346
- **测量,而非断言**(实测示例):在一套盲测规则应用测验中,*运行* FH 几乎与模型无关 ——
347
- **测量的每一个 Claude 层级都得分 94–100%**(Fable、Opus 4.8、Sonnet 4.6 与 5、Haiku 4.5);
348
- 失掉的少数分数是格式纪律,绝非陷阱或门禁级失误。各层级只在超越评分标准的 *设计* 增量上分野
524
+ **测量,而非断言**(实测示例):在一套盲测规则应用测验中,*运行* FH 几乎与模型无关 —— 在一套
525
+ 30 分的盲测题组上(2026-06-10),跑过的四个层级得分 **94–100%**(顶层锚点 / Opus 4.8 /
526
+ Sonnet 4.6 / Haiku 4.5 = 100 / 100 / 97 / 94);2026-07-03 的一次复现把 Opus 4.8、**Sonnet 5**
527
+ 与 Haiku 4.5 各自重新锚定在 16/16。这里给两条诚实说明,而不是一个圆整的数字:源产物刻意不点出
528
+ 最顶层那一层的名字,所以本页也不点名;而 **当前** 的顶层层级尚未在这套题组上跑过 —— 往下传的是
529
+ 下面那条准则,不是这些分数。失掉的少数分数是格式纪律,绝非陷阱或门禁级失误。各层级只在超越评分标准的 *设计* 增量上分野
349
530
  (开发框架,而非运行框架)—— 这正是为何默认是配以 **层级下限派发** 覆盖深度敏感轮次的 Sonnet,
350
531
  而固定更强的模型仅推荐用于编辑框架的会话。
351
532
 
@@ -400,7 +581,7 @@ Gemini 共建时,一个全新的 Claude 抓它的泡沫;当你与 Claude 共
400
581
 
401
582
  > **FH 论文** —— 下述方法论是有文献记录的,不只是断言:
402
583
  > - **v1.0 —— 方法论** · [Zenodo](https://zenodo.org/records/20397566)(DOI 10.5281/zenodo.20397566)。两层设计、6 轴框架、4-agent 编排,以及复利循环,均附实证证据。
403
- > - **cs.SE companion —— 治理门禁方法论** · **已发表** [Zenodo](https://zenodo.org/records/20680081)(DOI 10.5281/zenodo.20680081 · 最新 v1.1 10.5281/zenodo.20740038 · CC-BY-4.0)· arXiv 已提交(cs.SE,审核中)。
584
+ > - **cs.SE companion —— 治理门禁方法论** · **已发表** [Zenodo](https://zenodo.org/records/20680081)(DOI 10.5281/zenodo.20680081 · 最新 v1.1 10.5281/zenodo.20740038 · CC-BY-4.0)· arXiv 已提交(cs.SE);审核结果并不在本仓库里跟踪,所以请把"已提交"读作本页能担保的最后一个状态,而不是当前状态。
404
585
  > - **cs.AI companion —— "Governance Dividend"** · 筹备中。
405
586
 
406
587
  外部收敛:
@@ -421,5 +602,3 @@ Gemini 共建时,一个全新的 Claude 抓它的泡沫;当你与 Claude 共
421
602
  | [`CONTRIBUTING.md`](docs/CONTRIBUTING.md) | 如何贡献技能与模式 |
422
603
  | [`tracks/_contrib/`](tracks/_contrib/README.md) | **同意通道** —— 分享一个去标识化的工作会话;仓库在众多操作者间复利累积,而不只在本地 |
423
604
  | [`fh_integration_contract.md`](knowledge/shared/harness-core/fh_integration_contract.md) | 治理门禁规格 |
424
- </content>
425
- </invoke>
@@ -8,10 +8,10 @@
8
8
 
9
9
  | What | Count | Notes |
10
10
  |---|---:|---|
11
- | Active skills | **33** | 29 in `fh-meta` + 4 in `fh-commons`; 3 deprecated redirect stubs not counted |
11
+ | Active skills | **40** | 35 in `fh-meta` + 5 in `fh-commons`; **0** deprecated redirect stubs currently exist, so that exclusion is a no-op today |
12
12
  | Agent definitions | **8** | `challenger`, `quench-challenger`, `fact-checker`, `hub-persona-auditor`, `persona-innovator`, `beginner`, `main-player`, `expert` |
13
- | Operating rules | **6** | `.claude/rules/*.md` — mapping, modes, sync, sister-asset, operations |
14
- | Knowledge docs | **23** | `knowledge/` — 6-axis framework, compounding loop, runtime flow, dialogue playbook |
13
+ | Operating rules | **1** | `.claude/rules/*.md` — `fh_4axis_gate.md`. The drop from 6 is **not** deletion: the others were relocated to `knowledge/shared/rules/` so they stop loading on every session, and this path now holds only the path-scoped gate |
14
+ | Knowledge docs | **57** | `knowledge/` — 6-axis framework, compounding loop, runtime flow, dialogue playbook, and the harness-core canon |
15
15
  | Plugins | **2** | `fh-meta` (meta-harness) + `fh-commons` (project-agnostic) |
16
16
  | Self-gate | **1** | 4-axis pre-commit hook (backward / adversarial / forward / record) |
17
17
 
@@ -19,12 +19,17 @@
19
19
 
20
20
  | Metric | Value |
21
21
  |---|---|
22
- | First commit → latest | **2026-05-26 → 2026-06-06** (12 days) |
23
- | Commits | **224** |
24
- | Merged PRs | **66** |
22
+ | First commit → latest | **2026-05-26 → 2026-08-15** (81 days) |
23
+ | Commits | **768** |
24
+ | Merged PRs | **372** |
25
25
 
26
- > Read honestly: this is *velocity*, not *maturity*. A 12-day-old project is early. The point is that the
27
- > compounding loop and self-gate were exercised on the harness's own development, not just described.
26
+ > ⚠️ **Counted 2026-08-15; a pace table is stale the day after it is written.** The previous version of
27
+ > this block sat at "12 days / 224 commits / 66 PRs" for two months and read as current, because nothing
28
+ > in it said when it was measured. Re-run the commands below rather than trusting the numbers above —
29
+ > and if you update them, update this date in the same edit.
30
+
31
+ > Read honestly: this is *velocity*, not *maturity*. The point is that the compounding loop and self-gate
32
+ > were exercised on the harness's own development, not just described.
28
33
 
29
34
  ## External artifacts (verifiable links)
30
35
 
@@ -106,10 +111,14 @@ rather than only synthetic ones.
106
111
  <sub>Reproduce the counts:</sub>
107
112
 
108
113
  ```bash
109
- # active skills (excludes deprecated redirect stubs)
110
- for d in plugins/*/skills/*/; do grep -qi "DEPRECATED merged\|redirect stub\|moved to" "$d/SKILL.md" || echo "$d"; done | wc -l
111
- # agents
112
- ls .claude/agents/*.md plugins/*/agents/*.md | wc -l
114
+ # active skills. NOTE: the old recipe here grepped each SKILL.md for "redirect stub"/"deprecated"
115
+ # and returned 38, because phantom-quench and hub-cc-pr-reviewerboth live merely MENTION those
116
+ # words in their prose. A body-text grep cannot tell "I am a stub" from "I detect stubs". There are
117
+ # currently zero stubs, so count the files and re-introduce an exclusion only when one exists, in
118
+ # frontmatter where it can be matched on a field rather than on a phrase.
119
+ find plugins -name SKILL.md | wc -l
120
+ # agents (there is no .claude/agents/ in this repo — that path is for field projects)
121
+ find plugins -path '*/agents/*.md' | wc -l
113
122
  # knowledge docs
114
123
  find knowledge -name '*.md' | wc -l
115
124
  # pace
package/docs/pillars.svg CHANGED
@@ -17,15 +17,11 @@
17
17
  <!-- Background -->
18
18
  <rect width="680" height="100" fill="url(#bg)"/>
19
19
 
20
- <!-- Top hot-metal accent -->
21
- <rect width="680" height="3" fill="#e07d2a" filter="url(#glow)"/>
22
- <rect y="3" width="680" height="5" fill="#e07d2a" fill-opacity="0.10"/>
23
-
24
20
  <!-- ═══ HARNESS (x=8, cx=88) ═══ -->
25
21
  <rect x="8" y="10" width="160" height="84" rx="5" fill="url(#cd)" stroke="#c46820" stroke-width="0.8"/>
26
- <!-- Chain link icon (harness = link) -->
27
- <ellipse cx="81" cy="34" rx="10" ry="6" fill="none" stroke="#e07d2a" stroke-width="2" transform="rotate(-35 81 34)"/>
28
- <ellipse cx="95" cy="44" rx="10" ry="6" fill="none" stroke="#e07d2a" stroke-width="2" transform="rotate(-35 95 44)"/>
22
+ <!-- Chain link icon (harness = link) — opposite tilts so the two loops actually interlock -->
23
+ <ellipse cx="83" cy="30" rx="6" ry="8.5" fill="none" stroke="#e07d2a" stroke-width="1.8" transform="rotate(-30 83 30)"/>
24
+ <ellipse cx="93" cy="38" rx="6" ry="8.5" fill="none" stroke="#e07d2a" stroke-width="1.8" transform="rotate(30 93 38)"/>
29
25
  <text x="88" y="63" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="13" font-weight="bold" fill="#f5943a" letter-spacing="2">HARNESS</text>
30
26
  <text x="88" y="76" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">Harness-ify a project</text>
31
27
  <text x="88" y="88" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">— raise its floor</text>
@@ -16,6 +16,8 @@ tags: [ecosystem, positioning, synergy, opencode, opencode, hermes, openhuman, r
16
16
 
17
17
  Target: FH full structure vs Hermes-type agent frameworks, OpenCode-style coding agents, OpenHuman-style human-in-loop systems.
18
18
 
19
+ **Cross-ref**: `fh_global_positioning_and_distribution_roadmap.md` (2026-08-15) covers adjacent ground — same "FH vs bare execution coders" positioning question, but scoped to npm/Homebrew distribution mechanics rather than this doc's 3-model ecosystem-structure audit. Read together, not as duplicates.
20
+
19
21
  ---
20
22
 
21
23
  ## Gap Analysis — Where FH Falls Short
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: fh-global-positioning-and-distribution-roadmap
3
+ description: Comprehensive report on forge-harness global ecosystem positioning, governance brain architecture vs bare coders, and distribution roadmap (Homebrew/standalone binary compatibility with subscription LLMs).
4
+ date: 2026-08-15
5
+ tags: [positioning, roadmap, governance, distribution, homebrew, architecture]
6
+ ---
7
+
8
+ # forge-harness 글로벌 입지 분석 및 배포 로드맵 (Global Positioning & Distribution Roadmap)
9
+
10
+ ## Executive Summary
11
+
12
+ 본 보고서는 **`forge-harness` (FH)의 글로벌 에이전트 프레임워크 생태계 내 포지셔닝**을 객관적으로 정의하고, **유료 구독 모델(Claude Code / Antigravity 등) 기반 환경에서 독립 바이너리/패키지 매니저(`brew install`) 배포 모델로의 확장 가능성 및 로드맵**을 제시합니다.
13
+
14
+ **Cross-ref**: `fh_ecosystem_positioning.md`(2026-05-31)가 같은 "FH vs 다른 코딩 에이전트" 포지셔닝 질문을 3모델(Claude+Gemini+Codex) 적대적 감사로 더 정식으로 다룬다. 이 문서는 배포(npm/Homebrew) 메커니즘에 특화 — 중복 아니라 상호보완으로 같이 읽을 것.
15
+
16
+ * **글로벌 포지셔닝**: FH는 코드를 직접 빠르게 뱉어내는 '실행 에이전트'가 아닌, 실행 결과의 환각·보안·근거를 적대적으로 검증하고 자가 진화하는 **품질 거버넌스 계층(Governance Brain)**입니다. (외부 벤치마크나 경쟁사 대비 정량 비교는 아직 없음 — 이 문서의 비교표는 포지셔닝 프레임이지 검증된 성능 우위 주장이 아님.)
17
+ * **배포 모델 결론**: **구독 모델 기반 LLM(Claude Code, Antigravity)과 `brew install` / 독립 바이너리 배포는 대립하지 않으며 완벽히 호환됩니다.** CLI 설치 프로그램(`fh-cli`)이 환경 감지, 플러그인 동기화, 사이드카 라우팅, Git 훅 배선을 자율 수행하고 실제 에이전트 추론은 사용자의 기존 구독/API 계정을 활용합니다.
18
+
19
+ ---
20
+
21
+ ## 1. 글로벌 생태계 구조 비교 (Governance Brain vs. Bare Coders)
22
+
23
+ ```
24
+ [ Bare Execution Coders ] [ forge-harness (Governance Brain) ]
25
+ (OpenCode, Devin, Aider 등) (자가 진화, Quench, 4-Axis Gate)
26
+ ┌───────────────────────────┐ ┌───────────────────────────────────┐
27
+ │ • 고속 코드 생성 │ + + + │ • 적대적 4축 검증 (Steel-Quench) │
28
+ │ • CLI / 데스크톱 패키징 │ =======> │ • 출처 역추적 (Phantom-Quench) │
29
+ │ • 빌드 / 테스트 자동 실행 │ Synergy │ • 필드 패턴 자가 수확 (Harvest) │
30
+ └───────────────────────────┘ └───────────────────────────────────┘
31
+ ```
32
+
33
+ > **읽는 법**: 아래 표는 FH의 자체 포지셔닝 프레임이지, OpenCode/Devin/Aider를 벤치마크·정량 비교한 결과가 아닙니다. 그 도구들도 각자 검증/자동화 기능을 주장하므로, "단순 고속생성기"로 단순화한 왼쪽 열은 균형 잡힌 비교가 아니라 FH 관점의 상대적 강조점으로 읽어야 합니다.
34
+
35
+ | 검증 및 배포 축 | "실행 우선" 코딩 에이전트 부류 (OpenCode / Aider 등, FH 관점 프레이밍) | forge-harness (FH Meta-Harness) |
36
+ |---|---|---|
37
+ | **주요 역할** | 코드 및 스크립트 고속 자동 생성 | 생성물 품질 검증, 자가 진화, 거버넌스 |
38
+ | **품질 검증** | 단위 테스트(CI) 통과 여부만 확인 (도구별 상이 — 미검증 일반화) | **CI가 놓치는 엣지케이스/보안/근거 적대적 검수** |
39
+ | **학습 메커니즘** | 단순 대화 이력 수동 보존 (도구별 상이 — 미검증 일반화) | **세션 마감 시 `harvest-loop`로 자가 규율 업데이트** |
40
+ | **현재 배포 형태**| `brew install`, 단일 바이너리, GUI 앱 | npm 패키지 [`@chrono-meta/fh-gate`](https://www.npmjs.com/package/@chrono-meta/fh-gate) (v1.4.x) & 레포지토리 |
41
+
42
+ ---
43
+
44
+ ## 2. 라이브 npm 패키지 (`@chrono-meta/fh-gate`)의 실측 수치 및 if(kakao) 발표 레퍼런스
45
+
46
+ ### 2.1. npm 공식 API 라이브 데이터
47
+
48
+ * **실측 (2026-08-15, `api.npmjs.org` 직접 조회, 재현 가능)**: 최초 배포일(2026-06-01)부터 누적 **16,326건**. 최근 2개월 창(06-15~08-15)만 보면 **12,856건** — 둘 다 실제 API 응답이며 창(window) 선택 차이일 뿐 서로 모순되지 않음.
49
+ * **⚠️ 백분위/등수 주장은 뺀다 — 근거 없음(2026-08-15, 검증 후 정정)**: 이전 초안이 "npm 전체 300만 패키지 대비 상위 2%"라고 썼으나, 그런 분포표를 발행한 공개 출처(npms.io 포함)를 웹서치로도 못 찾음. npm 레지스트리는 패키지 간 백분위 순위를 공식 제공하지 않는다 — 이 문서를 원본으로 삼은 작성자(Gemini)도 검증 후 **"등수는 npm이 공식 제공하지 않는 추정치이므로 발표/논문에는 실측 다운로드 수만 남기라"**고 스스로 정정함. 이 문서와 앞으로의 발표 자료 모두 이 규율을 따른다: **다운로드 수(실측)만 인용, 백분위/등수(추정)는 인용하지 않는다.**
50
+
51
+ ### 2.2. npm 패키지의 실제 포함 범위 (152개 `files[]` 전수 실측)
52
+ `forge-harness` npm 패키지는 단순한 "경량 단품 검사기"가 아니라, if(kakao) 발표 및 학술 논문(arXiv)에서 다루는 **15페이지 분량의 핵심 검증 방법론과 §7 Standpoint 축을 100% 내장한 포터블 완전체 패키지**입니다.
53
+
54
+ * **실제 번들 포함 자산 (`package.json` `files[]` 152개 전수)**:
55
+ 1. **스킬 & 에이전트 전체**: `plugins/fh-meta/skills·agents`, `plugins/fh-commons/skills·agents` (29개+ 스킬 및 8개 에이전트 전원 포함)
56
+ 2. **핵심 독트린 지식베이스 전체**: `knowledge/shared/harness-core/` (§7 Standpoint 축, `field_verdict_crossfamily_gate.md`, `sonnet_floor_doctrine.md` 등), `knowledge/shared/dialogue/`, `knowledge/shared/rules/`
57
+ 3. **`CLAUDE.md` & `AGENTS.md` 자체**: Standpoint 트리거 행을 포함한 하네스 규칙 정본
58
+ 4. **4축 게이트 기계층 전체**: `pre-commit`/`pre-push` 훅, `selfcheck`, `package-coverage`, `branch_claim`, `consent_registry`, `public_surface_scan` 스크립트 전수
59
+ * **제외 항목 (단 3가지)**:
60
+ * `tracks/` (개별 허브의 세션/작업 이력 — 개인화된 운영 데이터)
61
+ * `knowledge/domain/` (조직 특화 도메인 지식)
62
+ * `paper/` (arXiv 제출용 논문 원고)
63
+
64
+ ### 2.3. npm 배포와 로컬 워크스페이스 간의 관계
65
+ * **npm (`@chrono-meta/fh-gate`)**: 키노트 및 학술 논문(arXiv)의 핵심 검증 방법론(§7 Standpoint 축 포함), 스킬, 에이전트, 게이트를 어느 레포에서나 `npx` 한 줄로 100% 실행할 수 있게 제공하는 **완전체 포터블 하네스 패키지**.
66
+ * **로컬 워크스페이스 (Local Hub)**: npm으로 배포되는 스킬/에이전트/독트린 정본 위에 **해당 허브 고유의 이월 작업 이력(`tracks/`)**이 지속해서 쌓여 자가진화하는 **운영 허브(Operating Hub)**.
67
+
68
+ ### 2.4. Homebrew (`brew install`)와의 차세대 확장 관계
69
+ * npm 패키지가 Node.js 생태계에서 FH의 전 스킬/에이전트/독트린을 100% 이식해 준다면, **Homebrew (`brew install forge-harness`)**는 Node.js 종속성 없이 OS 레벨에서 글로벌 CLI 바이너리 및 전역 Git 훅 셋업을 지원하는 **글로벌 OS 패키지 채널 확장(Phase 3)** 역할을 수행합니다.
70
+
71
+ ---
72
+
73
+ ## 3. 구독 모델 기반 런타임과 CLI 브리지 배포의 호환 원리
74
+
75
+ ### 3.1. 구조적 작동 원리 (CLI Bridge Architecture)
76
+
77
+ `brew install`이나 독립 `.exe/.app` 바이너리는 **"LLM 모델 자체를 내장하는 것"이 아니라, "에이전트가 작동하는 로컬 하네스 인프라를 자동으로 구축·관리해 주는 CLI 도구(Launcher/Bridge)"**를 설치하는 것입니다.
78
+
79
+ ```mermaid
80
+ graph TD
81
+ User["👤 개발자 (brew install forge-harness)"] -->|설치| Binary["📦 fh CLI (Homebrew Formula, npm 패키지 wrap)"]
82
+ Binary -->|fh init 실행| LocalRepo["📁 로컬 프로젝트 (.claude/ & AGENTS.md 자동 배선)"]
83
+ LocalRepo -->|작업 수행| Runner["🤖 LLM Runtime Engine"]
84
+ Runner -->|구독 계정 활용| ClaudeCode["🔐 User's Claude Code / Antigravity / API Key"]
85
+ Runner -->|검증 및 사이드카| FHPipeline["🛡️ FH Governance Pipeline (Quench & 4-Axis)"]
86
+ ```
87
+
88
+ 1. **설치 단계 (`brew install forge-harness`)**:
89
+ * 경량 바이너리(`fh` CLI)가 사용자의 Mac/Linux에 설치됩니다.
90
+ 2. **프로젝트 연동 (`fh init` 또는 `fh setup`)**:
91
+ * 명령 한 줄로 프로젝트에 최신 `AGENTS.md`, `plugins/`, `rules/`, Git 훅을 자동으로 구성하고 종속성을 진단합니다.
92
+ 3. **추론 실행 시**:
93
+ * `fh` CLI는 코드를 직접 추론하는 대신, 사용자가 이미 구독 중인 **Claude Code, Antigravity CLI, 또는 로컬 API 키**를 브리지(Bridge)하여 오케스트레이션을 수행합니다.
94
+
95
+ ---
96
+
97
+ ## 4. forge-harness 진화 로드맵 (Evolution Roadmap)
98
+
99
+ ```
100
+ [ Phase 1: 로컬 메타 하네스 코어 ] ──> [ Phase 2: npm 완전체 배포 ] ──> [ Phase 3: Homebrew & IDE 에코시스템 ]
101
+ (자가진화 본체 & 지식 완비) (누적 16,326건 실측, 현재!) (OS 전역 CLI & cmux/IDE 연동)
102
+ ```
103
+
104
+ ### Phase 1: 로컬 파일 시스템 메타 하네스 코어 (완료)
105
+ * **특징**: `AGENTS.md`, `plugins/`, Markdown 기반의 모델 비의존성 프로세스 및 검증 지능 완비.
106
+ * **달성**: `steel-quench`, `phantom-quench`, `sim-conductor`, `ko-tech-writer` 등 29개+ 스킬 및 8개 에이전트 개발 완료.
107
+
108
+ ### Phase 2: npm 공식 레지스트리 포터블 완전체 배포 (현재 완벽히 라이브)
109
+ * **특징**: npm 공식 패키지 [`@chrono-meta/fh-gate`](https://www.npmjs.com/package/@chrono-meta/fh-gate) (v1.4.x)를 통해 152개 번들 파일 전수 출하.
110
+ * **달성 (누적 16,326건 실측, 2026-08-15 npm API 재현 가능)**:
111
+ * 29개+ 스킬 전체, 8개 에이전트 전원, §7 Standpoint 축 포함 지식베이스, 4축 게이트 엔진이 타르볼에 100% 실려 배포되어 어느 레포에서나 `npx`로 100% 실행 가능함.
112
+ * `fh-gate`, `fh-run`, `fh-goal`, `fh-codex-doctor` CLI 실행 가능.
113
+
114
+ ### Phase 3: Homebrew OS 패키지 채널 확장 & IDE/Event-Bus 에코시스템 (차기 목표)
115
+ * **특징**: Node.js 환경 의존성이 없는 OS 전역 CLI 라운처(`brew install forge-harness`) 및 IDE/플러그인 직접 연동.
116
+ * **목표**:
117
+ * `brew install forge-harness`
118
+ * `fh setup`: 명령 한 줄로 신규 레포지토리에 하네스 구조(`.claude/`·`plugins/`·rules·Git 훅)를 스캐폴딩
119
+ * OpenCode, Hermes, VS Code, JetBrains, `cmux` 플러그인과 직접 Event-bus 연동.
120
+ * **⚠️ 스캐폴딩 ≠ 복리(compounding)** — `meta-harness-thin-vs-full-distribution.md`(2026-06-08, 이미 결론난 축)의 핵심: FH의 진짜 값어치는 스킬/명령 자체가 아니라 **클론 상태에 쌓이는 `tracks/`·메모리·규칙 이력(오케스트레이션)**에 있음. `fh setup`이 구조를 1초 만에 깔아줘도, 그 프로젝트가 실제 FH급 시너지를 가지려면 이후 세션이 쌓이며 `tracks/`가 축적돼야 함 — 초기화 시점의 "완전 배포"와 축적된 자가진화 상태는 다른 것. 로드맵을 실행할 때는 이 구분을 각주가 아니라 Phase 3의 성공 기준에 포함시킬 것.
121
+ * **✅ 신규 바이너리 불필요 — 운영자 결정(2026-08-15)으로 해소**: 위 mermaid 다이어그램이 남겨뒀던 `fh CLI 바이너리 (Rust/Go/Node)` 언어 미정 상태는 검토 결과 닫혔다. Homebrew는 npm 패키지를 그대로 감싸는 표준 패턴(`nodejs_module`/`resource` 블록으로 npm 레지스트리에서 직접 받아 `libexec`에 설치)을 지원하므로, `brew install forge-harness`는 **신규 바이너리를 재작성하지 않고 이미 라이브인 `@chrono-meta/fh-gate` npm 패키지를 그대로 얹는 Formula 하나**로 구현한다. `brew upgrade`도 npm 쪽 새 버전을 그대로 따라가므로 별도 릴리스 파이프라인이 필요 없다. 엔지니어링 비용이 사실상 0에 가까움 — Added-Scope Gate의 "이거 없이 안 되는 게 뭔가?"에 답이 없으므로 재작성 경로는 폐기.
122
+ * **✅ Homebrew는 "npm 대신 옵션"이 아니라 100% 동등 배포 — 커버리지 저하 없음**: brew formula가 npm 패키지를 그대로 감싸므로, §2.1에서 실측한 152개 파일(스킬 29개+·에이전트 8개·독트린 지식베이스·4축 게이트 기계층 전부)이 설치 방식만 바뀌어 그대로 전달된다. "brew는 가벼운 대안" 프레임은 틀렸다 — 내용은 동일하고 설치/업데이트 UX만 개선된다.
123
+ * **포지셔닝 (운영자 확정, 2026-08-15)**: **FH 레포(git clone) = 개발·기여·전체 맥락 참고 목적 전용.** `tracks/`가 쌓이는 복리(orchestration) 본체는 여기서만 생기고, npm이든 brew든 이 부분은 처음부터 못 주며 줄 필요도 없다(운영 이력은 그 프로젝트 고유 데이터라 원리적으로 배포 불가능한 자산). **그 외 모든 순수 사용 목적 = brew(또는 npm)**, git pull 반복의 피로도 없이 스킬+게이트+독트린을 100% 받아 즉시 사용. 개발/기여자가 아니면 git clone을 권할 이유가 없다.
124
+ * **① 커스텀 tap — 배포 완료(2026-08-15)**: `chrono-meta/homebrew-forge-harness` 공개 repo에 `Formula/forge-harness.rb` 게시 완료 (`brew tap chrono-meta/forge-harness && brew install forge-harness`). 로컬 검증: `brew audit --strict --online` 클린 · `brew style` 클린 · `brew install --build-from-source` 5초 완주 · `brew test` PASS(라이브 `claude`/`codex` 백엔드 호출 없이 fail-closed 경로만 결정론적으로 검증). README(4개 언어) + CHEATSHEET.md에 npm과 나란히 안내 추가.
125
+ * **② Homebrew Core 등재 — 보류(운영자 결정, 2026-08-15), 재개 조건 명시**: 공식 기준(`docs.brew.sh/Package-Acceptance-Policy`) 실측 결과 **스타 75개 · 포크 30개 · 워처 30개 중 하나**를 충족해야 하는데(본인 제출이면 3배: 225·90·90), forge-harness 저장소 실측(2026-08-15, `gh repo view`)은 **스타 7 · 포크 0 · 워처 0**로 기준에 한참 못 미침 — npm 다운로드 수(16,326건)는 이 기준과 무관(GitHub 저장소 자체의 notability만 봄, 별개 축). 지금 제출하면 사실상 거절 확정이라 보류. **재개 조건**: 위 세 지표 중 하나가 임계치 근처(스타 ~50+)에 도달하면 재검토.
126
+
127
+ ---
128
+
129
+ ## 5. 결론
130
+
131
+ 1. **글로벌 입지**: `forge-harness`는 단순 코드 생성을 넘어선 **품질 거버넌스 및 자가진화 계층**입니다 (외부 벤치마크 비교는 미실시 — §1 캡션 참조).
132
+ 2. **배포 메커니즘**: 구독 모델(Claude Code 등)을 사용하더라도 `brew install`을 통해 **로컬 하네스 인프라 구축, 자동 업데이트, 환경 통합을 수행하는 CLI 라운처** 형태로 확장할 수 있습니다 — 단, 그 라운처가 주는 것은 초기 스캐폴딩이며 FH의 복리(compounding) 자체는 아님(§4 Phase 3 각주).
133
+ 3. **배포 채널 3분할 (운영자 확정, 2026-08-15)**: git clone = 개발/기여/전체 맥락 참고 전용(복리가 여기서만 축적). npm/`brew install` = 순수 사용 목적 전원 대상, 152개 파일 100% 동등 배포(내용 저하 없음, 설치 UX만 다름). Homebrew는 npm을 그대로 감싸는 Formula로 구현하며 신규 바이너리 재작성은 하지 않음(§4 Phase 3 참조) — Phase 3은 "npm의 대안"이 아니라 "npm과 동일 내용의 더 편한 설치 경로" 추가로 재정의.
134
+
135
+ ---
136
+ *Documented by Antigravity in forge-harness Knowledge Core (`knowledge/shared/harness-core/fh_global_positioning_and_distribution_roadmap.md`). Reviewed and source-grounded 2026-08-15.*