@chrono-meta/fh-gate 1.1.0 → 1.2.1
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/.claude/agents/challenger.md +169 -0
- package/AGENTS.md +160 -0
- package/CATALOG.md +256 -0
- package/CHEATSHEET.md +367 -0
- package/CLAUDE.md +331 -0
- package/CONTRIBUTING.md +198 -0
- package/LICENSE +21 -0
- package/README.md +61 -8
- package/bin/fh-goal.js +9 -0
- package/bin/fh-run.js +9 -0
- package/docs/codex-compat.md +123 -0
- package/docs/pillars.svg +70 -0
- package/knowledge/shared/harness-core/fh_integration_contract.md +45 -28
- package/package.json +30 -6
- package/plugins/fh-commons/README.md +37 -0
- package/plugins/fh-commons/agents/quench-challenger.md +373 -0
- package/plugins/fh-commons/skills/convergence-loop/SKILL.md +155 -0
- package/plugins/fh-commons/skills/deliberation/SKILL.md +288 -0
- package/plugins/fh-commons/skills/mcp-circuit-breaker/SKILL.md +196 -0
- package/plugins/fh-commons/skills/token-budget-gate/SKILL.md +175 -0
- package/plugins/fh-meta/agents/fact-checker.md +121 -0
- package/plugins/fh-meta/agents/hub-persona-auditor.md +109 -0
- package/plugins/fh-meta/agents/persona-innovator.md +195 -0
- package/plugins/fh-meta/skills/agent-composer/SKILL.md +461 -0
- package/plugins/fh-meta/skills/agent-composer/SKILL_detail.md +464 -0
- package/plugins/fh-meta/skills/apex-review/SKILL.md +185 -0
- package/plugins/fh-meta/skills/asset-placement-gate/SKILL.md +135 -0
- package/plugins/fh-meta/skills/contention-layer/SKILL.md +127 -0
- package/plugins/fh-meta/skills/context-bridge-dispatch/SKILL.md +30 -0
- package/plugins/fh-meta/skills/context-bridge-dispatch/SKILL_detail.md +144 -0
- package/plugins/fh-meta/skills/context-doctor/SKILL.md +341 -0
- package/plugins/fh-meta/skills/cross-ecosystem-synergy-detection/SKILL.md +202 -0
- package/plugins/fh-meta/skills/deep-clarify/SKILL.md +144 -0
- package/plugins/fh-meta/skills/edit-manifest/SKILL.md +210 -0
- package/plugins/fh-meta/skills/field-harvest/SKILL.md +384 -0
- package/plugins/fh-meta/skills/frontier-digest/SKILL.md +272 -0
- package/plugins/fh-meta/skills/goal-quench/SKILL.md +509 -0
- package/plugins/fh-meta/skills/harness-doctor/SKILL.md +277 -0
- package/plugins/fh-meta/skills/harness-doctor/SKILL_detail.md +484 -0
- package/plugins/fh-meta/skills/harvest-loop/SKILL.md +231 -0
- package/plugins/fh-meta/skills/harvest-loop/SKILL_detail.md +201 -0
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL.md +129 -0
- package/plugins/fh-meta/skills/hub-cc-pr-reviewer/SKILL_detail.md +158 -0
- package/plugins/fh-meta/skills/install-doctor/SKILL.md +207 -0
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +613 -0
- package/plugins/fh-meta/skills/marketplace-gate/SKILL.md +193 -0
- package/plugins/fh-meta/skills/memory-hygiene/SKILL.md +143 -0
- package/plugins/fh-meta/skills/meta-prompt-builder/SKILL.md +167 -0
- package/plugins/fh-meta/skills/meta-prompt-builder/SKILL_detail.md +37 -0
- package/plugins/fh-meta/skills/pipeline-conductor/SKILL.md +430 -0
- package/plugins/fh-meta/skills/plugin-recommender/SKILL.md +221 -0
- package/plugins/fh-meta/skills/plugin-recommender/SKILL_detail.md +220 -0
- package/plugins/fh-meta/skills/prompt-regression/SKILL.md +178 -0
- package/plugins/fh-meta/skills/public-surface-audit/SKILL.md +224 -0
- package/plugins/fh-meta/skills/return-path-gate/SKILL.md +257 -0
- package/plugins/fh-meta/skills/self-marketing-lint/SKILL.md +129 -0
- package/plugins/fh-meta/skills/sim-conductor/SKILL.md +364 -0
- package/plugins/fh-meta/skills/sim-conductor/SKILL_detail.md +337 -0
- package/plugins/fh-meta/skills/skill-splitter/SKILL.md +126 -0
- package/plugins/fh-meta/skills/skill-splitter/SKILL_detail.md +185 -0
- package/plugins/fh-meta/skills/source-grounding-audit/SKILL.md +230 -0
- package/plugins/fh-meta/skills/source-grounding-audit/SKILL_detail.md +182 -0
- package/plugins/fh-meta/skills/steel-quench/SKILL.md +226 -0
- package/plugins/fh-meta/skills/steel-quench/SKILL_detail.md +453 -0
- package/plugins/fh-meta/skills/verify-bidirectional/SKILL.md +238 -0
- package/scripts/fh-gate.sh +175 -40
- package/scripts/fh-goal.sh +182 -0
- package/scripts/fh-run.sh +269 -0
package/README.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="docs/banner.png" alt="forge-harness — A forkable Claude Code meta-harness for multi-project teams" width="680">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/chrono-meta/forge-harness/main/docs/banner.png" alt="forge-harness — A forkable Claude Code meta-harness for multi-project teams" width="680">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
6
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-22c55e.svg" alt="MIT License"></a>
|
|
7
|
-
<img src="https://img.shields.io/badge/
|
|
7
|
+
<img src="https://img.shields.io/badge/fh--gate-v1.2.0-3b82f6.svg" alt="fh-gate v1.2.0">
|
|
8
8
|
<a href="https://zenodo.org/records/20397566"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20397566-blue.svg" alt="DOI"></a>
|
|
9
9
|
<img src="https://img.shields.io/badge/Claude_Code-compatible-a855f7.svg" alt="Claude Code">
|
|
10
|
+
<img src="https://img.shields.io/badge/Codex-beta-f59e0b.svg" alt="Codex-compatible beta">
|
|
10
11
|
<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
12
|
</p>
|
|
12
13
|
|
|
@@ -55,6 +56,7 @@ claude
|
|
|
55
56
|
|
|
56
57
|
**Plugin only (no clone):**
|
|
57
58
|
```bash
|
|
59
|
+
claude plugin marketplace add https://github.com/chrono-meta/forge-harness.git # once
|
|
58
60
|
claude plugin install -s user fh-meta@forge-harness
|
|
59
61
|
cd ~/projects/{your-project} && claude
|
|
60
62
|
```
|
|
@@ -88,18 +90,36 @@ Project B ──→ connect hub in CLAUDE.md
|
|
|
88
90
|
FH wraps any coding agent (OpenCode, Codex, etc.) as a **post-generation governance gate**.
|
|
89
91
|
|
|
90
92
|
```bash
|
|
91
|
-
npx @chrono-meta/fh-gate #
|
|
92
|
-
npx @chrono-meta/fh-gate
|
|
93
|
+
npx --package @chrono-meta/fh-gate fh-gate # default: Claude backend
|
|
94
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate # Codex backend
|
|
95
|
+
FH_BACKEND=auto npx --package @chrono-meta/fh-gate fh-gate "src/foo.ts" full
|
|
93
96
|
# → FH_GATE_VERDICT: PASS | PENDING | BLOCKED | ESCALATE
|
|
94
97
|
```
|
|
95
98
|
|
|
96
|
-
|
|
99
|
+
`fh-gate` uses the same FH governance prompt for both runtimes. `FH_BACKEND=claude` runs `claude --print`; `FH_BACKEND=codex` runs `codex exec`; `FH_BACKEND=auto` prefers Codex when both CLIs are present.
|
|
100
|
+
|
|
101
|
+
For direct skill or agent execution outside Claude Code, use `fh-run`:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run --skill source-grounding-audit --file docs/foo.md
|
|
105
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run --agent fh-commons:quench-challenger --file plugins/fh-meta/skills/foo/SKILL.md
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
For Codex-primary work, keep using Codex's native goal/session features when available. `fh-goal` is only a portable wrapper for one-off non-interactive runs that should be followed by FH governance:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-goal --prompt "Implement X and update tests" --gate quick
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
The broader FH automation layer still depends on Claude Code for sub-agents, hooks, and slash commands. The portable path is shared documents plus runtime adapters, not separate Codex and Claude forks.
|
|
115
|
+
|
|
116
|
+
**Empirical result (2026-05-31)**: Applied to OpenCode's AI-generated `permission/arity.ts` (163 lines, CI green). Current gate semantics classify this as BLOCKED: 2 A-grade findings CI didn't catch (short-token overflow in allowlist, executor tools absent from arity table).
|
|
97
117
|
|
|
98
118
|
Full spec: [`fh_integration_contract.md`](knowledge/shared/harness-core/fh_integration_contract.md)
|
|
99
119
|
|
|
100
120
|
---
|
|
101
121
|
|
|
102
|
-
##
|
|
122
|
+
## 35 skill files, 5 agents
|
|
103
123
|
|
|
104
124
|
<details>
|
|
105
125
|
<summary>Full asset activation check</summary>
|
|
@@ -129,7 +149,7 @@ Full spec: [`fh_integration_contract.md`](knowledge/shared/harness-core/fh_integ
|
|
|
129
149
|
| `token-budget-gate` *(fh-commons)* | Pre-task token cost estimate | "How expensive is this?" |
|
|
130
150
|
| `mcp-circuit-breaker` *(fh-commons)* | MCP tool failure pattern detection | "MCP keeps failing" |
|
|
131
151
|
| `quench-challenger` *(fh-commons)* | Adversarial pressure-test agent | "Challenge this with a devil" |
|
|
132
|
-
| *(+
|
|
152
|
+
| *(+ additional assets)* | marketplace-gate · contention-layer · edit-manifest · fact-checker · goal-quench · hub-persona-auditor · install-doctor · memory-hygiene · persona-innovator · prompt-regression · public-surface-audit · skill-splitter | |
|
|
133
153
|
|
|
134
154
|
| Active count | Diagnosis |
|
|
135
155
|
|:---:|---|
|
|
@@ -137,10 +157,43 @@ Full spec: [`fh_integration_contract.md`](knowledge/shared/harness-core/fh_integ
|
|
|
137
157
|
| **10–27** | Activation stage — gradually enable unchecked assets |
|
|
138
158
|
| **0–9** | Early stage — start with `install-wizard` |
|
|
139
159
|
|
|
160
|
+
**Find a skill by what you're trying to do:**
|
|
161
|
+
|
|
162
|
+
| Cluster | Skills |
|
|
163
|
+
|---|---|
|
|
164
|
+
| Verification | `steel-quench` · `source-grounding-audit` · `convergence-loop` · `prompt-regression` · `return-path-gate` |
|
|
165
|
+
| Orchestration | `agent-composer` · `pipeline-conductor` · `goal-quench` · `deliberation` |
|
|
166
|
+
| Diagnosis | `harness-doctor` · `context-doctor` · `install-doctor` · `mcp-circuit-breaker` |
|
|
167
|
+
| Harvesting / Learning | `harvest-loop` · `field-harvest` · `edit-manifest` · `memory-hygiene` |
|
|
168
|
+
| Gate / Guard | `token-budget-gate` · `asset-placement-gate` · `marketplace-gate` |
|
|
169
|
+
| Discovery | `plugin-recommender` · `cross-ecosystem-synergy-detection` · `frontier-digest` · `verify-bidirectional` |
|
|
170
|
+
| Content / Simulation | `sim-conductor` · `apex-review` · `meta-prompt-builder` · `deep-clarify` |
|
|
171
|
+
| Setup | `install-wizard` · `hub-cc-pr-reviewer` · `skill-splitter` |
|
|
172
|
+
|
|
140
173
|
</details>
|
|
141
174
|
|
|
142
175
|
---
|
|
143
176
|
|
|
177
|
+
## Model setup
|
|
178
|
+
|
|
179
|
+
Claude Code does not auto-select models by task complexity — you configure this once.
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
/model opusplan # recommended for forge-harness
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
| Command | Who runs what | Best for |
|
|
186
|
+
|---|---|---|
|
|
187
|
+
| `/model sonnet` | Sonnet handles everything | Fast coding, simple tasks |
|
|
188
|
+
| `/model opus` | Opus handles everything | Complex reasoning, architecture |
|
|
189
|
+
| `/model opusplan` | **Opus plans · Sonnet executes** | FH orchestration + sub-agents |
|
|
190
|
+
|
|
191
|
+
**Why `opusplan` for FH**: CC switches models per-turn based on task weight — Opus activates for plan-mode turns (complex reasoning, decomposition decisions), Sonnet handles execution turns (tool calls, file edits, bash). forge-harness orchestration leans on both: Opus for design decisions in agent-composer / goal-quench / steel-quench, Sonnet for the actual file edits and sub-agent execution contexts. Sub-agent token costs are CC-visible and appear in the session jsonl under `message.model`.
|
|
192
|
+
|
|
193
|
+
If you use external CLIs (Gemini, Codex, `gh copilot`) as sidecars, their costs are billed to their own quota and not visible in CC's token display.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
144
197
|
## Multi-Model Sidecar (v1.3)
|
|
145
198
|
|
|
146
199
|
Run Gemini, Codex, or `gh copilot` as independent peer reviewers alongside Claude.
|
|
@@ -161,7 +214,7 @@ Claude-side token cost: **zero increase** C2→C3.
|
|
|
161
214
|
> Documents 2-layer design, 6-axis framework, 4-agent orchestration, and compounding loop with empirical evidence.
|
|
162
215
|
|
|
163
216
|
External convergence:
|
|
164
|
-
-
|
|
217
|
+
- ["Dive into Claude Code: The Design Space of Today's and Future AI Agent Systems"](https://arxiv.org/abs/2604.14228) — arXiv April 2026
|
|
165
218
|
- ["Code as Agent Harness"](https://arxiv.org/abs/2605.18747) — arXiv May 2026
|
|
166
219
|
- Stanford IRIS Lab: ["Meta-Harness"](https://arxiv.org/abs/2603.28052) — +7.7pts at 4× fewer tokens
|
|
167
220
|
|
package/bin/fh-goal.js
ADDED
package/bin/fh-run.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Codex Compatibility — Known Limitations & Validated Patterns
|
|
2
|
+
|
|
3
|
+
> Status: **beta**. This document is beta-removal condition #2 (see `AGENTS.md` → Codex Compatibility → Beta removal conditions). It lists what works, what breaks, and what to expect when applying forge-harness (FH) methodology through OpenAI Codex (`codex exec`) instead of Claude Code.
|
|
4
|
+
|
|
5
|
+
FH is a 2-layer system: a **methodology layer** (`tracks/`, `knowledge/`, `SKILL.md` docs) that is model-agnostic, and an **automation layer** (Claude Code hooks, `.claude/agents/`, `/model`, settings.json) that is Claude-native. Codex users run the methodology layer by reading `SKILL.md` files directly; automation steps either run through runtime adapters (`fh-gate`, `fh-run`) or require manual substitution.
|
|
6
|
+
|
|
7
|
+
## Validated invocation pattern
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# headless, stdin — codex-cli >= 0.135.0
|
|
11
|
+
cat plugins/fh-meta/skills/<skill>/SKILL.md path/to/artifact \
|
|
12
|
+
| codex exec -m gpt-5.5 -
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- `codex exec -m gpt-5.5 -` reads the combined prompt from stdin and runs headless.
|
|
16
|
+
- `npx @openai/codex` (interactive) requires a TTY and is **not** suitable for piped skill application.
|
|
17
|
+
- Inside a git repository (e.g. a clone of this repo) no extra flag is needed. **Outside** a git repo (e.g. running from `/tmp`), add `--skip-git-repo-check`.
|
|
18
|
+
- `codex exec` has its own file-read tools, so a skill that back-traces claims to source files (e.g. `source-grounding-audit`) can verify paths itself — it produced real `file:line` citations in validation.
|
|
19
|
+
|
|
20
|
+
## Runtime adapters
|
|
21
|
+
|
|
22
|
+
### `fh-gate`
|
|
23
|
+
|
|
24
|
+
`fh-gate` supports both Claude and Codex backends with the same governance prompt and verdict parser:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Default, backward-compatible Claude path
|
|
28
|
+
npx --package @chrono-meta/fh-gate fh-gate "src/foo.ts" quick ci
|
|
29
|
+
|
|
30
|
+
# Codex as the primary reviewer
|
|
31
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate "src/foo.ts" quick ci
|
|
32
|
+
|
|
33
|
+
# Prefer Codex if installed, otherwise fall back to Claude
|
|
34
|
+
FH_BACKEND=auto npx --package @chrono-meta/fh-gate fh-gate "src/foo.ts" quick ci
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Backend defaults:
|
|
38
|
+
|
|
39
|
+
| `FH_BACKEND` | Command | Default model |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `claude` | `claude --print --model "$FH_MODEL"` | `claude-sonnet-4-6` |
|
|
42
|
+
| `codex` | `codex exec -m "$FH_MODEL" -` | `gpt-5.5` |
|
|
43
|
+
| `auto` | `codex` if present, otherwise `claude` | backend default |
|
|
44
|
+
|
|
45
|
+
### `fh-run`
|
|
46
|
+
|
|
47
|
+
`fh-run` bridges skill and agent execution that previously assumed Claude Code slash commands or `Agent(...)` dispatch:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run \
|
|
51
|
+
--skill source-grounding-audit \
|
|
52
|
+
--file docs/foo.md
|
|
53
|
+
|
|
54
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run \
|
|
55
|
+
--agent fh-commons:quench-challenger \
|
|
56
|
+
--file plugins/fh-meta/skills/foo/SKILL.md
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Resolution order:
|
|
60
|
+
|
|
61
|
+
| Unit type | Lookup |
|
|
62
|
+
|---|---|
|
|
63
|
+
| `--skill name` | `plugins/fh-meta/skills/name/SKILL.md`, then `plugins/fh-commons/skills/name/SKILL.md` |
|
|
64
|
+
| `--agent name` | `.claude/agents/name.md`, then `plugins/fh-meta/agents/name.md`, then `plugins/fh-commons/agents/name.md` |
|
|
65
|
+
| `--agent plugin:name` | `plugins/plugin/agents/name.md` first |
|
|
66
|
+
| `--unit path` | explicit file path |
|
|
67
|
+
|
|
68
|
+
### `fh-goal`
|
|
69
|
+
|
|
70
|
+
Codex has native goal/session features. Use those directly when they fit. `fh-goal` is not a replacement for Codex goal; it is a non-interactive wrapper for "run backend task, then run FH governance on changed files":
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-goal \
|
|
74
|
+
--prompt "Implement X and update tests" \
|
|
75
|
+
--gate quick
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Author-run M1 validations (2026-06-04)
|
|
79
|
+
|
|
80
|
+
These are **author** runs — they confirm the M1 tier assignments are accurate and ground the limitations below. They do **not** count toward the external-validation gate (conditions #1 and #3 below), which by definition requires non-author users.
|
|
81
|
+
|
|
82
|
+
| Skill | Tier | Method | Result |
|
|
83
|
+
|---|---|---|---|
|
|
84
|
+
| `source-grounding-audit` | M1 | Fed a fixture with 2 real + 2 phantom claims (a non-existent skill path, a fabricated "47 M1 skills" count) | **4/4 correct** — both real claims Grounded with `file:line` citations, both phantoms caught (the fabricated count corrected against the actual `AGENTS.md`) |
|
|
85
|
+
| `asset-placement-gate` | M1 | Fed a proposed `phantom-checker` skill that duplicates `source-grounding-audit` | **Correct** — applied the 4-criteria bar, flagged criterion ④ overlap, routed to **Drop** with "route intent to source-grounding-audit" |
|
|
86
|
+
|
|
87
|
+
Both ran end-to-end with no Claude-native dependency. The M1 tier claim holds for the two skills tested.
|
|
88
|
+
|
|
89
|
+
## Known limitations
|
|
90
|
+
|
|
91
|
+
### 1. CC-native hooks fire and fail (noise, not breakage)
|
|
92
|
+
When `codex exec` runs **inside this repo**, FH's Claude-native git/Stop/PostToolUse hooks attempt to fire and emit `hook: Stop Failed` / `hook: PostToolUse Failed` lines interleaved with output. These are **harmless to the skill result** — the skill's verdict is produced correctly — but they are visible noise. Running from a directory **without** FH's `.claude/settings.json` (the normal Codex-user case) avoids them entirely. Filter with `grep -vE "^hook:"` if needed.
|
|
93
|
+
|
|
94
|
+
### 2. M2 skills need manual agent substitution
|
|
95
|
+
M2 skills (`steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop`) have a core workflow that runs under Codex, but any step that dispatches `Agent(subagent_type=...)` or a slash command must be replaced by `fh-run` or a direct `codex exec` call reading the sub-agent's `SKILL.md`/agent `.md` — same workflow, different runtime (the "M2 adaptation pattern" in `AGENTS.md`). Example: `steel-quench` Waves 1–3 run; the `quench-challenger` agent step becomes `fh-run --agent fh-commons:quench-challenger`.
|
|
96
|
+
|
|
97
|
+
### 3. M3 skills do not run automatically under Codex
|
|
98
|
+
M3 skills (`goal-quench` Phase-3 Stop hook, `hub-cc-pr-reviewer` CC session context, `install-wizard` settings.json write) require Claude-Code-native runtime and are **methodology reference only** under Codex unless a dedicated adapter exists. Use Codex's native goal/session features for goal control, and use `fh-gate` after completion for FH quality gating.
|
|
99
|
+
|
|
100
|
+
### 4. No token accounting
|
|
101
|
+
Codex token usage is billed in the Codex CLI quota and is **not** recorded in any FH session log or orchestrator measurement. Cross-family runs (Gemini/Codex) are invisible to FH's token-budget tooling by construction.
|
|
102
|
+
|
|
103
|
+
### 5. Cross-family sibling note (Gemini)
|
|
104
|
+
The sibling pattern for Gemini is `gemini -p "$(cat <skill+artifact>)"`. Outside a trusted directory Gemini requires `--skip-trust` (or `GEMINI_CLI_TRUST_WORKSPACE=true`). Gemini's headless output may bracket identifiers (`[ID]:`) where Codex does not — parse tolerantly.
|
|
105
|
+
|
|
106
|
+
## Per-tier expectation summary
|
|
107
|
+
|
|
108
|
+
| Tier | Under Codex | Action |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| **M1** | Runs fully | `cat SKILL.md artifact \| codex exec -m gpt-5.5 -` |
|
|
111
|
+
| **M2** | Core runs; agent/slash steps via adapter | Substitute each dispatch with `fh-run` or a direct `codex exec` on the sub-agent's `.md` |
|
|
112
|
+
| **M3** | Does not run automatically | Use native Codex session features where available; otherwise read as methodology reference or use a dedicated adapter |
|
|
113
|
+
|
|
114
|
+
## Beta removal — remaining (external-blocked)
|
|
115
|
+
|
|
116
|
+
| Condition | Status |
|
|
117
|
+
|---|---|
|
|
118
|
+
| Known limitation list published (this doc) | ✅ done (2026-06-04) |
|
|
119
|
+
| 5+ externally validated M1 skill runs (not FH author) | ⬜ pending — needs external Codex users |
|
|
120
|
+
| At least 1 external Codex user confirms methodology reproduces | ⬜ pending — needs external Codex users |
|
|
121
|
+
| README badge updated (`Codex-compatible` without `beta`) | ⬜ blocked on the two above |
|
|
122
|
+
|
|
123
|
+
To report a validated run, open an issue at `chrono-meta/forge-harness` with label `codex-validation`.
|
package/docs/pillars.svg
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<svg viewBox="0 0 680 100" width="680" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0" y1="0" x2="0" y2="1">
|
|
4
|
+
<stop offset="0%" stop-color="#1e1108"/>
|
|
5
|
+
<stop offset="100%" stop-color="#0d0803"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="cd" x1="0" y1="0" x2="0" y2="1">
|
|
8
|
+
<stop offset="0%" stop-color="#2c1c0c"/>
|
|
9
|
+
<stop offset="100%" stop-color="#181005"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<filter id="glow">
|
|
12
|
+
<feGaussianBlur stdDeviation="1.5" result="blur"/>
|
|
13
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
14
|
+
</filter>
|
|
15
|
+
</defs>
|
|
16
|
+
|
|
17
|
+
<!-- Background -->
|
|
18
|
+
<rect width="680" height="100" fill="url(#bg)"/>
|
|
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
|
+
<!-- ═══ FORK (x=8, cx=88) ═══ -->
|
|
25
|
+
<rect x="8" y="10" width="160" height="84" rx="5" fill="url(#cd)" stroke="#c46820" stroke-width="0.8"/>
|
|
26
|
+
<!-- Chain link icon -->
|
|
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)"/>
|
|
29
|
+
<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">FORK</text>
|
|
30
|
+
<text x="88" y="76" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">Fork the harness</text>
|
|
31
|
+
<text x="88" y="88" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">for your team</text>
|
|
32
|
+
|
|
33
|
+
<!-- ═══ ADAPT (x=176, cx=256) ═══ -->
|
|
34
|
+
<rect x="176" y="10" width="160" height="84" rx="5" fill="url(#cd)" stroke="#c46820" stroke-width="0.8"/>
|
|
35
|
+
<!-- Gear icon (hexagon + inner circle) -->
|
|
36
|
+
<polygon points="256,25 267,31 267,43 256,49 245,43 245,31" fill="none" stroke="#e07d2a" stroke-width="2" stroke-linejoin="round"/>
|
|
37
|
+
<circle cx="256" cy="37" r="6" fill="none" stroke="#e07d2a" stroke-width="2"/>
|
|
38
|
+
<circle cx="256" cy="37" r="1.5" fill="#e07d2a"/>
|
|
39
|
+
<text x="256" y="63" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="13" font-weight="bold" fill="#f5943a" letter-spacing="2">ADAPT</text>
|
|
40
|
+
<text x="256" y="76" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">Rename, configure,</text>
|
|
41
|
+
<text x="256" y="88" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">and extend</text>
|
|
42
|
+
|
|
43
|
+
<!-- ═══ COLLABORATE (x=344, cx=424) ═══ -->
|
|
44
|
+
<rect x="344" y="10" width="160" height="84" rx="5" fill="url(#cd)" stroke="#c46820" stroke-width="0.8"/>
|
|
45
|
+
<!-- Two people -->
|
|
46
|
+
<circle cx="416" cy="29" r="7" fill="none" stroke="#e07d2a" stroke-width="1.8"/>
|
|
47
|
+
<path d="M404,49 C404,39 428,39 428,49" fill="none" stroke="#e07d2a" stroke-width="1.8" stroke-linecap="round"/>
|
|
48
|
+
<circle cx="432" cy="32" r="6" fill="none" stroke="#e07d2a" stroke-width="1.5"/>
|
|
49
|
+
<path d="M421,50 C421,42 443,42 443,50" fill="none" stroke="#e07d2a" stroke-width="1.5" stroke-linecap="round"/>
|
|
50
|
+
<text x="424" y="63" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="11" font-weight="bold" fill="#f5943a" letter-spacing="0.8">COLLABORATE</text>
|
|
51
|
+
<text x="424" y="76" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">Multi-project teams.</text>
|
|
52
|
+
<text x="424" y="88" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">One shared backbone.</text>
|
|
53
|
+
|
|
54
|
+
<!-- ═══ EMPOWER (x=512, cx=592) ═══ -->
|
|
55
|
+
<rect x="512" y="10" width="160" height="84" rx="5" fill="url(#cd)" stroke="#c46820" stroke-width="0.8"/>
|
|
56
|
+
<!-- Shield + checkmark -->
|
|
57
|
+
<path d="M592,24 L605,30 L605,41 L592,50 L579,41 L579,30 Z" fill="none" stroke="#e07d2a" stroke-width="2" stroke-linejoin="round"/>
|
|
58
|
+
<path d="M585,37 L590,43 L599,33" fill="none" stroke="#e07d2a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
59
|
+
<text x="592" y="63" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="12" font-weight="bold" fill="#f5943a" letter-spacing="1">EMPOWER</text>
|
|
60
|
+
<text x="592" y="76" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">Build, ship, and</text>
|
|
61
|
+
<text x="592" y="88" text-anchor="middle" font-family="Georgia,'Times New Roman',serif" font-size="9.5" fill="#9e7040">iterate faster.</text>
|
|
62
|
+
|
|
63
|
+
<!-- Subtle vertical dividers -->
|
|
64
|
+
<line x1="176" y1="18" x2="176" y2="86" stroke="#c46820" stroke-width="0.5" stroke-opacity="0.35"/>
|
|
65
|
+
<line x1="344" y1="18" x2="344" y2="86" stroke="#c46820" stroke-width="0.5" stroke-opacity="0.35"/>
|
|
66
|
+
<line x1="512" y1="18" x2="512" y2="86" stroke="#c46820" stroke-width="0.5" stroke-opacity="0.35"/>
|
|
67
|
+
|
|
68
|
+
<!-- Bottom ember line -->
|
|
69
|
+
<rect y="97" width="680" height="3" fill="#c46820" fill-opacity="0.45"/>
|
|
70
|
+
</svg>
|
|
@@ -9,7 +9,7 @@ tags: [integration-contract, governance, opencode, hermes, openhuman, bridge-lay
|
|
|
9
9
|
|
|
10
10
|
## Status
|
|
11
11
|
|
|
12
|
-
**v1.
|
|
12
|
+
**v1.2 — Binary available.** `scripts/fh-gate.sh` executes governance review end-to-end via a selectable backend: `claude --print` or `codex exec`.
|
|
13
13
|
CI-ready: machine-parseable verdict + exit codes (0=PASS / 1=PENDING / 2=BLOCKED / 3=ESCALATE / 10=harness error).
|
|
14
14
|
Backward-compatible: `FH_DRY_RUN=1` restores prompt-only (v0.1) behavior.
|
|
15
15
|
|
|
@@ -45,9 +45,11 @@ Caller reads verdict, decides: merge / hold / escalate
|
|
|
45
45
|
|
|
46
46
|
| Input | Form | Description |
|
|
47
47
|
|---|---|---|
|
|
48
|
-
| `FH_DIFF_PATH` | file path | Pre-generated diff file
|
|
48
|
+
| `FH_DIFF_PATH` | file path | Pre-generated diff file included as additional caller context |
|
|
49
49
|
| `FH_TASK_DESCRIPTION` | string | What the caller was trying to accomplish (context for adversarial pass) |
|
|
50
50
|
| `FH_SECURITY_LENS` | `on` or `off` (default `off`) | Force security-adjacent focus in steel-quench |
|
|
51
|
+
| `FH_BACKEND` | `claude`, `codex`, or `auto` (default `claude`) | Runtime backend. `auto` prefers Codex if installed, otherwise Claude |
|
|
52
|
+
| `FH_MODEL` | model id | Overrides backend default (`claude-sonnet-4-6` for Claude, `gpt-5.5` for Codex) |
|
|
51
53
|
|
|
52
54
|
### Capture pattern (caller's responsibility)
|
|
53
55
|
|
|
@@ -158,7 +160,7 @@ Steps:
|
|
|
158
160
|
|
|
159
161
|
set -euo pipefail
|
|
160
162
|
|
|
161
|
-
FH_TARGET_FILES="${1:-$(git diff main..HEAD --name-only
|
|
163
|
+
FH_TARGET_FILES="${FH_TARGET_FILES:-${1:-$(git diff main..HEAD --name-only)}}"
|
|
162
164
|
FH_GATE_LEVEL="${2:-quick}"
|
|
163
165
|
FH_CALLER="${3:-unknown}"
|
|
164
166
|
|
|
@@ -176,6 +178,30 @@ EOF
|
|
|
176
178
|
|
|
177
179
|
Usage: `./scripts/fh-gate.sh "src/permission/arity.ts" quick opencode`
|
|
178
180
|
|
|
181
|
+
### Pattern 2-b — Binary wrapper with runtime backend
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Claude backend, backward-compatible default
|
|
185
|
+
npx --package @chrono-meta/fh-gate fh-gate "src/permission/arity.ts" quick ci
|
|
186
|
+
|
|
187
|
+
# Codex backend as primary reviewer
|
|
188
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate "src/permission/arity.ts" quick ci
|
|
189
|
+
|
|
190
|
+
# Portable wrapper: prefer Codex when installed, otherwise Claude
|
|
191
|
+
FH_BACKEND=auto npx --package @chrono-meta/fh-gate fh-gate "src/permission/arity.ts" quick ci
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
All backends must produce the same `FH_STATUS` / `FH_GATE_VERDICT` header. Missing or malformed output is a harness failure and must be treated as blocked by the caller.
|
|
195
|
+
|
|
196
|
+
### Pattern 2-c — Direct skill or agent run
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run --skill source-grounding-audit --file docs/foo.md
|
|
200
|
+
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run --agent fh-commons:quench-challenger --file plugins/fh-meta/skills/foo/SKILL.md
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Use `fh-run` when a FH workflow references a Claude Code slash command or `Agent(...)` dispatch and the current orchestrator is Codex.
|
|
204
|
+
|
|
179
205
|
### Pattern 3 — Stop hook (automated post-session)
|
|
180
206
|
|
|
181
207
|
Add to project's `.claude/settings.json`:
|
|
@@ -187,7 +213,7 @@ Add to project's `.claude/settings.json`:
|
|
|
187
213
|
"matcher": "",
|
|
188
214
|
"hooks": [{
|
|
189
215
|
"type": "command",
|
|
190
|
-
"command": "
|
|
216
|
+
"command": "FH_BACKEND=auto FH_TARGET_FILES=\"$(git diff main..HEAD --name-only)\" bash ~/projects/forge-harness/scripts/fh-gate.sh \"\" quick stop-hook >> /tmp/fh-governance-queue.txt"
|
|
191
217
|
}]
|
|
192
218
|
}]
|
|
193
219
|
}
|
|
@@ -206,7 +232,7 @@ OpenCode generates code fast. FH governance runs after generation, before review
|
|
|
206
232
|
|
|
207
233
|
```bash
|
|
208
234
|
# After opencode run completes:
|
|
209
|
-
FH_TARGET_FILES=$(git diff main..HEAD --name-only
|
|
235
|
+
FH_TARGET_FILES=$(git diff main..HEAD --name-only)
|
|
210
236
|
FH_SECURITY_LENS=on # OpenCode touches broad surfaces; security lens default on
|
|
211
237
|
FH_GATE_LEVEL=quick
|
|
212
238
|
```
|
|
@@ -257,52 +283,42 @@ jobs:
|
|
|
257
283
|
- uses: actions/checkout@v4
|
|
258
284
|
- name: FH governance gate
|
|
259
285
|
run: |
|
|
260
|
-
|
|
261
|
-
|
|
286
|
+
FH_TARGET_FILES="$(git diff origin/main..HEAD --name-only)" \
|
|
287
|
+
bash scripts/fh-gate.sh "" quick ci
|
|
262
288
|
```
|
|
263
289
|
|
|
264
290
|
---
|
|
265
291
|
|
|
266
292
|
## Record Specification
|
|
267
293
|
|
|
268
|
-
Every governance pass writes a record entry
|
|
294
|
+
Every binary governance pass writes a compact record entry for calibration and audit indexing. The complete findings block remains in stdout and should be captured by the caller or CI artifact when full detail is required.
|
|
269
295
|
|
|
270
296
|
```yaml
|
|
271
297
|
# tracks/_meta/governance_log_YYYY-MM-DD.yaml
|
|
272
298
|
- timestamp: 2026-05-31T12:00:00Z
|
|
273
299
|
caller: opencode
|
|
300
|
+
backend: codex
|
|
301
|
+
model: gpt-5.5
|
|
274
302
|
gate_level: quick
|
|
275
|
-
|
|
303
|
+
verdict: BLOCKED
|
|
304
|
+
findings_total: 3
|
|
305
|
+
findings_a: 2
|
|
306
|
+
findings_b: 1
|
|
307
|
+
files:
|
|
276
308
|
- packages/opencode/src/permission/arity.ts
|
|
277
|
-
verdict: PENDING
|
|
278
|
-
findings:
|
|
279
|
-
- grade: A
|
|
280
|
-
location: "prefix() lines 1-9"
|
|
281
|
-
title: "Short-token overflow"
|
|
282
|
-
- grade: A
|
|
283
|
-
location: "ARITY table lines 24-161"
|
|
284
|
-
title: "npx/opencode/claude absent"
|
|
285
|
-
- grade: B
|
|
286
|
-
location: "ARITY table + generation comment"
|
|
287
|
-
title: "No maintenance protocol"
|
|
288
|
-
calibration:
|
|
289
|
-
predicted_findings: 2
|
|
290
|
-
actual_findings: 3
|
|
291
|
-
delta: +1
|
|
292
309
|
```
|
|
293
310
|
|
|
294
|
-
Record path is included in every verdict output as `FH_RECORD_PATH`. This feeds `harvest-loop` calibration.
|
|
311
|
+
Record path is included in every verdict output as `FH_RECORD_PATH`. This feeds `harvest-loop` calibration; full finding text should be retained from stdout when needed.
|
|
295
312
|
|
|
296
313
|
---
|
|
297
314
|
|
|
298
|
-
## What This Contract Does NOT Specify (Bridge Layer
|
|
315
|
+
## What This Contract Does NOT Specify (Bridge Layer)
|
|
299
316
|
|
|
300
|
-
The following require
|
|
317
|
+
The following require a bridge/runtime layer beyond the file-based gate:
|
|
301
318
|
|
|
302
319
|
| Feature | Why deferred |
|
|
303
320
|
|---|---|
|
|
304
321
|
| REST API or webhook | Would require a server process — FH is file-based |
|
|
305
|
-
| REST API or webhook | Would require a server process — FH is file-based |
|
|
306
322
|
| Streaming verdict updates | Requires runtime; methodology layer is synchronous |
|
|
307
323
|
| Multi-file parallel governance | Possible via agent dispatch today; not formalized here |
|
|
308
324
|
| Verdict caching | No state store beyond `tracks/`; governance runs fresh each time |
|
|
@@ -318,6 +334,7 @@ The bridge layer (v1.0) will implement these. This contract is the specification
|
|
|
318
334
|
| v0.1 | 2026-05-31 | Initial specification. Bash invocation patterns + structured verdict format. Empirical basis: arity.ts controlled trial. |
|
|
319
335
|
| v1.0 | 2026-06-01 | Binary available as `@chrono-meta/fh-gate` on npm. JS wrapper + fh-gate.sh CI-ready binary. |
|
|
320
336
|
| v1.1 | 2026-06-03 | Large-scale harness improvements. Banner update. Version alignment. |
|
|
337
|
+
| v1.2 | 2026-06-04 | Selectable Claude/Codex backend, `fh-run`/`fh-goal` runtime adapters, newline-preserving `FH_TARGET_FILES`, and implemented task/diff/security-lens inputs. |
|
|
321
338
|
|
|
322
339
|
---
|
|
323
340
|
|
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "1.1
|
|
4
|
-
"description": "FH
|
|
3
|
+
"version": "1.2.1",
|
|
4
|
+
"description": "FH runtime adapters — run FH governance, skills, and agents via Claude or Codex with machine-parseable gates.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"ai-governance",
|
|
8
8
|
"code-review",
|
|
9
9
|
"claude",
|
|
10
10
|
"claude-code",
|
|
11
|
+
"codex",
|
|
12
|
+
"openai-codex",
|
|
11
13
|
"ci",
|
|
12
14
|
"harness"
|
|
13
15
|
],
|
|
@@ -16,25 +18,47 @@
|
|
|
16
18
|
"url": "git+https://github.com/chrono-meta/forge-harness.git"
|
|
17
19
|
},
|
|
18
20
|
"bin": {
|
|
19
|
-
"fh-gate": "bin/fh-gate.js"
|
|
21
|
+
"fh-gate": "bin/fh-gate.js",
|
|
22
|
+
"fh-run": "bin/fh-run.js",
|
|
23
|
+
"fh-goal": "bin/fh-goal.js"
|
|
20
24
|
},
|
|
21
25
|
"scripts": {
|
|
22
|
-
"prepare": "chmod +x bin/fh-gate.js scripts/fh-gate.sh"
|
|
26
|
+
"prepare": "chmod +x bin/fh-gate.js bin/fh-run.js bin/fh-goal.js scripts/fh-gate.sh scripts/fh-run.sh scripts/fh-goal.sh"
|
|
23
27
|
},
|
|
24
28
|
"engines": {
|
|
25
29
|
"node": ">=16"
|
|
26
30
|
},
|
|
27
31
|
"peerDependencies": {
|
|
28
|
-
"@anthropic-ai/claude-code": "*"
|
|
32
|
+
"@anthropic-ai/claude-code": "*",
|
|
33
|
+
"@openai/codex": "*"
|
|
29
34
|
},
|
|
30
35
|
"peerDependenciesMeta": {
|
|
31
36
|
"@anthropic-ai/claude-code": {
|
|
32
|
-
"optional":
|
|
37
|
+
"optional": true
|
|
38
|
+
},
|
|
39
|
+
"@openai/codex": {
|
|
40
|
+
"optional": true
|
|
33
41
|
}
|
|
34
42
|
},
|
|
35
43
|
"files": [
|
|
44
|
+
".claude/agents/challenger.md",
|
|
45
|
+
"AGENTS.md",
|
|
46
|
+
"CATALOG.md",
|
|
47
|
+
"CHEATSHEET.md",
|
|
48
|
+
"CLAUDE.md",
|
|
49
|
+
"CONTRIBUTING.md",
|
|
36
50
|
"bin/fh-gate.js",
|
|
51
|
+
"bin/fh-run.js",
|
|
52
|
+
"bin/fh-goal.js",
|
|
53
|
+
"docs/codex-compat.md",
|
|
54
|
+
"docs/pillars.svg",
|
|
37
55
|
"scripts/fh-gate.sh",
|
|
56
|
+
"scripts/fh-run.sh",
|
|
57
|
+
"scripts/fh-goal.sh",
|
|
58
|
+
"plugins/fh-meta/skills",
|
|
59
|
+
"plugins/fh-meta/agents",
|
|
60
|
+
"plugins/fh-commons/skills",
|
|
61
|
+
"plugins/fh-commons/agents",
|
|
38
62
|
"knowledge/shared/harness-core/fh_integration_contract.md",
|
|
39
63
|
"README.md"
|
|
40
64
|
]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# fh-commons — Contention-Born Skill Habitat
|
|
2
|
+
|
|
3
|
+
**A different layer of plugin from fh-meta.**
|
|
4
|
+
|
|
5
|
+
fh-meta = meta-engineering skills for operating, diagnosing, and improving the harness itself
|
|
6
|
+
fh-commons = general-purpose utility skills born from the contention layer, transplantable to any project
|
|
7
|
+
|
|
8
|
+
## Placement Criteria
|
|
9
|
+
|
|
10
|
+
When the `contention-layer` skill harvests contentions and generates new skill candidates:
|
|
11
|
+
|
|
12
|
+
| Determination | Destination |
|
|
13
|
+
|---|---|
|
|
14
|
+
| Harness engineering in nature | `fh-meta` |
|
|
15
|
+
| Project-general · domain-agnostic | **`fh-commons`** (this plugin) |
|
|
16
|
+
| Domain/team specific | field harvest (decided by the field team) |
|
|
17
|
+
|
|
18
|
+
## Skill List
|
|
19
|
+
|
|
20
|
+
| Skill | Description | Contention Parent |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| `convergence-loop` | General-purpose gate reinforcement that replaces single-pass structures with a convergence loop of up to N rounds | harvest-loop (recurring single-pass-distrust pattern across hub gates) |
|
|
23
|
+
| `deliberation` | Innovator → Devil-Advocate → Mediator 3-layer multi-perspective synthesis. Generates conditional verdicts without binary win/loss | Migrated from fh-meta (2026-05-23 — domain-agnostic general decision structure) |
|
|
24
|
+
|
|
25
|
+
## The `origin` Field
|
|
26
|
+
|
|
27
|
+
Commons skills include the following fields in their SKILL.md frontmatter:
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
# Contention-born (extracted by contention-layer)
|
|
31
|
+
origin: contention-layer
|
|
32
|
+
contention-parents: [skill-A, skill-B]
|
|
33
|
+
|
|
34
|
+
# Migrated from fh-meta (reclassified as general-purpose)
|
|
35
|
+
origin: fh-meta
|
|
36
|
+
migration: "YYYY-MM-DD — reason for migration"
|
|
37
|
+
```
|