@chrono-meta/fh-gate 1.4.76 → 1.4.78
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/rules/fh_4axis_gate.md +63 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +96 -260
- package/docs/codex-compat.md +4 -1
- package/knowledge/shared/harness-core/agents_md_runtime_details.md +233 -0
- package/knowledge/shared/harness-core/multi_model_sidecar_strategy.md +1 -1
- package/knowledge/shared/learnings/subagent_invocations_log.yaml +14 -0
- package/package.json +8 -2
- package/plugins/fh-commons/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/.claude-plugin/plugin.json +1 -1
- package/plugins/fh-meta/skills/install-doctor/SKILL.md +88 -0
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +1 -1
- package/plugins/fh-meta/skills/install-wizard/SKILL_detail.md +117 -3
- package/scripts/fh_node_check.sh +184 -0
- package/scripts/fh_session_load.sh +59 -28
- package/scripts/package_coverage_check.sh +22 -0
- package/scripts/selfcheck.sh +45 -0
- package/scripts/sidecar_calibrate.sh +190 -0
- package/scripts/sidecar_wait.sh +55 -5
- package/scripts/test_node_check_lanes.sh +179 -0
- package/scripts/test_sidecar_calibrate_lanes.sh +218 -0
- package/scripts/test_sidecar_wait_stdin.sh +169 -0
- package/templates/settings.SessionStart.snippet.json +54 -0
|
@@ -114,6 +114,69 @@ no runnable path exists (run-first, ask-last — sonnet_floor_doctrine.md §Auto
|
|
|
114
114
|
|
|
115
115
|
Record sim results in the Axes 2–3 marker + sub-agent invocation log.
|
|
116
116
|
|
|
117
|
+
### Reviewer-visible evidence — the marker is not readable from the other side
|
|
118
|
+
|
|
119
|
+
**Rule**: a PR touching FH assets carries a **sanitized evidence capsule** in its body — what was
|
|
120
|
+
run, what it returned, what was found and closed — plus, for any verdict reported as a **grade, tier
|
|
121
|
+
or code**, both the **inline expansion** and the **canonical definition's location**
|
|
122
|
+
(`sim grade F = Functional/PASS — scale: sim-conductor SKILL.md §Area-D`). A bare letter is not a
|
|
123
|
+
verdict to anyone outside the author's vocabulary, and a decoded letter is still only *semantics* —
|
|
124
|
+
it says what the grade means, never that the run produced it. Keep those two separate.
|
|
125
|
+
|
|
126
|
+
**Never paste the raw marker.** Write the capsule; do not copy the file. The marker is a local
|
|
127
|
+
artifact that may quote paths, hostnames, internal asset names, or unredacted findings, and
|
|
128
|
+
**§Company residency forbids those reaching a log, comment, or paste** (`CLAUDE.md` — "not into a
|
|
129
|
+
log, comment, or paste"). A PR body is a paste on a public surface. This matters mechanically, not
|
|
130
|
+
just in principle: the pre-commit confidentiality guard scans **staged tracked content** and has no
|
|
131
|
+
view of PR-body text, so a body is *outside* the repo's mechanical privacy floor. Run the
|
|
132
|
+
public-surface scan over the capsule text before creating or editing the body. (Cross-family review
|
|
133
|
+
2026-07-30 caught this: the first draft of this rule said "inline the evidence itself", which pointed
|
|
134
|
+
authors straight through that gap — the residency floor and the reviewer-visibility goal were pulling
|
|
135
|
+
in opposite directions and only one of them had a hook.)
|
|
136
|
+
|
|
137
|
+
**Why this is structural, not politeness**: the marker file itself is **gitignored by design**
|
|
138
|
+
(`.gitignore` `tracks/**` — verify per file with `git check-ignore -v <marker>`; a couple of
|
|
139
|
+
force-added files elsewhere under `tracks/_meta/` do not change it for markers). So the
|
|
140
|
+
machine-checkable evidence for a change exists only on the author's machine — a reviewer on another
|
|
141
|
+
session, another worktree, or another runtime **cannot reach it**.
|
|
142
|
+
The gate is satisfied and the reviewer still has nothing but prose. This is the same shape as the
|
|
143
|
+
gate-locality defect (a gate placed where the actor that needs it cannot read it), one layer over:
|
|
144
|
+
**evidence placed where the reviewer cannot read it**.
|
|
145
|
+
|
|
146
|
+
**Measured 2026-07-30 (PR #205, a Codex-authored change reviewed by Claude)**: the PR body reported
|
|
147
|
+
`salience cold-start simulation: grade F`. The reviewer could not resolve it — the marker was in a
|
|
148
|
+
gitignored path inside the author's worktree — and recorded it as UNVERIFIED. `F` in fact meant
|
|
149
|
+
**Functional**, the PASS grade of sim-conductor's Area-D consumer scale
|
|
150
|
+
(`plugins/fh-meta/skills/sim-conductor/SKILL.md` §Area-D — `F` functional / `P` partial / `B` broken),
|
|
151
|
+
i.e. the sim had *passed*. Two failures, one on each side, and the rule addresses both: the author
|
|
152
|
+
reported a coded verdict without its scale, and the reviewer's own grep surfaced the defining file
|
|
153
|
+
and the reviewer did not open it. **A pointer your instrument hands you is not optional reading.**
|
|
154
|
+
|
|
155
|
+
**Degrade direction — and it does NOT satisfy the rule.** Evidence that cannot be sanitized into a
|
|
156
|
+
capsule is declared, never dropped, and never silently counted as met:
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
LOCAL-ONLY ATTESTATION — UNVERIFIED: <one-line result> (record: local marker <name>)
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
That line is **an author's claim, not reviewer-visible evidence**. It leaves the requirement
|
|
163
|
+
*unmet*, and the PR proceeds only by one of: a sanitized reproducible capsule · an authorized
|
|
164
|
+
independent review on a machine that can read the record · explicit operator acceptance of the
|
|
165
|
+
unverified state. Silence reads as verified, which is why the label is mandatory — but the label is
|
|
166
|
+
an honest gap, not a way to close one. **Never restate a local-only result as though the reviewer
|
|
167
|
+
confirmed it**, and note that inlining a marker field proves nothing about provenance either: the
|
|
168
|
+
marker's own scope is form + non-vacuity + auditability, **not** that the run happened (see the
|
|
169
|
+
marker-scope note above).
|
|
170
|
+
|
|
171
|
+
**Enforcement boundary — say which half is mechanical.** An earlier draft of this rule claimed no
|
|
172
|
+
hook could enforce any of it. That was overbroad: **presence and syntax are mechanizable** — a
|
|
173
|
+
`pull_request` CI status can check that an applicable PR carries a capsule, that graded verdicts are
|
|
174
|
+
expanded, and that a local-only attestation is labelled; a local `gh pr create/edit` wrapper can run
|
|
175
|
+
the private-pattern scan that public CI cannot (public CI must never hold the private patterns).
|
|
176
|
+
What stays un-mechanizable is **truth and provenance** — whether the capsule describes a run that
|
|
177
|
+
actually happened. Neither anchor is built today; that is a named residual, and a rule that
|
|
178
|
+
over-claims its own floor is the defect this file exists to prevent.
|
|
179
|
+
|
|
117
180
|
> **Detail**: See `knowledge/shared/harness-core/claude_md_gate_details.md §Sim-Dispatch-Fallback` — the
|
|
118
181
|
> headless `claude -p --model` fallback when in-session model-pin is unavailable, the saturation-disguise
|
|
119
182
|
> retry (compact-then-retry once), and the credit-pool caveat — read when a model-pinned dispatch fails.
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
13
13
|
"name": "fh-meta",
|
|
14
|
-
"version": "1.4.
|
|
14
|
+
"version": "1.4.78",
|
|
15
15
|
"description": "Hub meta-operations toolkit — 35 skills + 7 agents. New in 1.4.53: `fh-codex-doctor` (npm bin) — Codex adapter drift scanner; reads the documented M1/M2/M3 skill tier map + skill/agent source and reports codex-native/adapter-required/claude-native/unclassified per unit, wired into `npm test`/`prepublishOnly` (fail-closed on unclassified Claude-native primitives). New in 1.4.49: steel-quench gains Step 0.6 Verdict-Invariance Probe (groundedness axis — a load-bearing judged gate's verdict must track behavior, not rubric phrasing; measured flip-count over cross-family paraphrases; arXiv:2605.06161 Policy Invariance anchor); multi_model_sidecar_strategy §Vendor-native harness (a model is strongest in its own vendor CLI — Claude/CC, GPT/codex, Gemini/Antigravity; a universal router degrades all of them, so it stays an autocomplete/QA sidecar, never orchestration); predelete_check.sh fail-closed rewrite; memory-hygiene A-TMA anchor. New in 1.4.48: phantom-quench + steel-quench gain external frontier anchors (arXiv:2607.02052 package-hallucination; arXiv:2607.02057 prompt-coverage-adequacy); README model-flat claim reframed from a per-release point-curve to structural invariants (operation flattens across tiers; depth tier-order fixed within a generation). New in 1.4.47: onboarding step ① surfaces the Mode D companion-store session-start load in the auto-read salience anchor (previously only in the local binding + rules, so a greeting could skip the load). New in 1.4.46: context-doctor command-output axis (route to rtk/proxy for verbose CLI stdout, complementing .claudeignore; risk-gated to token-scarce envs). New in 1.4.41: context-doctor 2026 trigger vocab (context engineering/rot/collapse) + phantom-citation hardening; hub measurement-integrity-checklist (cross-model measurement pre-flight: display-name pin/reps≥3/discriminating probe). New in 1.4.40: install-wizard queryable-wiki scaffold (INDEX + session-start read + R/W/C ingest). New in 1.4.39: auto-decorrelation (cross-family verifier sidecar recruitment) + video-ingest (capability-routed video ingestion). New in 1.4.x: verify-axis check-class taxonomy (mandatory-pass/measured/judged), no-reinvention Tier-0 inventory, 7-class failure taxonomy, Destructive-Op Gate, Wave-T (Temper), tier-floor governance, Mode D Model Notice, FC consent lane, default-Sonnet guidance. New in 1.3.0: public-surface-audit, field-harvest Mode B auto-trigger, 4-axis gate scope ext. Validated cross-CLI: Claude Code, Codex, Gemini.",
|
|
16
16
|
"source": "./plugins/fh-meta"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"name": "fh-commons",
|
|
20
|
-
"version": "1.4.
|
|
20
|
+
"version": "1.4.78",
|
|
21
21
|
"description": "Project-agnostic utility skills — 4 skills (convergence-loop · deliberation · mcp-circuit-breaker · token-budget-gate) + 1 agent (quench-challenger). Domain-independent utilities transplantable into any project.",
|
|
22
22
|
"source": "./plugins/fh-commons"
|
|
23
23
|
}
|
package/AGENTS.md
CHANGED
|
@@ -1,283 +1,119 @@
|
|
|
1
|
-
# AGENTS.md — forge-harness
|
|
1
|
+
# AGENTS.md — forge-harness Runtime Entry Point
|
|
2
2
|
|
|
3
|
-
> **
|
|
4
|
-
>
|
|
5
|
-
>
|
|
6
|
-
|
|
7
|
-
---
|
|
3
|
+
> **Always-loaded layer.** Keep agent selection and rules that must govern every runtime here.
|
|
4
|
+
> Load execution examples, compatibility history, and conditional procedures only through the
|
|
5
|
+
> imperative pointers below.
|
|
8
6
|
|
|
9
7
|
## Relationship to CLAUDE.md
|
|
10
8
|
|
|
11
9
|
| File | Scope | Audience |
|
|
12
10
|
|---|---|---|
|
|
13
|
-
| `CLAUDE.md` | Session rules, protocols, orchestration flow |
|
|
14
|
-
| `AGENTS.md` |
|
|
15
|
-
|
|
16
|
-
CLAUDE.md governs *how* the session runs. AGENTS.md defines *what each agent does* when dispatched.
|
|
11
|
+
| `CLAUDE.md` | Session rules, protocols, orchestration flow | Claude Code |
|
|
12
|
+
| `AGENTS.md` | Portable runtime rules, agent roles, dispatch boundaries | AI runtimes + humans |
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
`CLAUDE.md` governs Claude-native automation. This file is the portable entry point for Codex and
|
|
15
|
+
other non-Claude runtimes, which do not auto-load `.claude/rules/*.md`.
|
|
19
16
|
|
|
20
17
|
## Agent Registry
|
|
21
18
|
|
|
22
|
-
forge-harness ships 8 tracked agents
|
|
19
|
+
forge-harness ships 8 tracked agents. The user-mastery spectrum (`beginner` · `main-player` ·
|
|
20
|
+
`expert`) plus `challenger` supplies multi-persona review; the remaining agents serve harness
|
|
21
|
+
operations or steel-quench.
|
|
23
22
|
|
|
24
23
|
| Agent | File | Role | Invoked by |
|
|
25
24
|
|---|---|---|---|
|
|
26
|
-
| `beginner` | `plugins/fh-meta/agents/beginner.md` | First-contact cold
|
|
27
|
-
| `main-player` | `plugins/fh-meta/agents/main-player.md` | Engaged-user
|
|
28
|
-
| `expert` | `plugins/fh-meta/agents/expert.md` |
|
|
29
|
-
| `challenger` | `plugins/fh-meta/agents/challenger.md` |
|
|
30
|
-
| `fact-checker` | `plugins/fh-meta/agents/fact-checker.md` | Pre-recommendation
|
|
31
|
-
| `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` |
|
|
32
|
-
| `quench-challenger` | `plugins/fh-commons/agents/quench-challenger.md` | Steel-quench
|
|
33
|
-
| `persona-innovator` | `plugins/fh-meta/agents/persona-innovator.md` | Naming
|
|
34
|
-
|
|
35
|
-
> Machine-readable mirror: `.claude/registry/agent_cards.json` (canonical capability cards, count-synced to tracked agent files — A2A Agent Card pattern).
|
|
36
|
-
|
|
37
|
-
### Tool restrictions per agent
|
|
38
|
-
|
|
39
|
-
| Agent | Allowed tools | Rationale |
|
|
40
|
-
|---|---|---|
|
|
41
|
-
| `challenger` | Read, Grep, Glob, WebSearch, WebFetch | Needs external evidence; no writes |
|
|
42
|
-
| `fact-checker` | Read, Grep, Glob | Deduplication grep only — no modification |
|
|
43
|
-
| `hub-persona-auditor` | Read, Grep, Glob | Audit only — no modification |
|
|
44
|
-
| `quench-challenger` | Read, Grep, Glob | Attack+prescription only — no modification |
|
|
45
|
-
| `persona-innovator` | Read, Grep, Glob, WebSearch, WebFetch | Frontier scanning requires web access |
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 2-Layer Architecture Context
|
|
50
|
-
|
|
51
|
-
forge-harness is structured as two distinct layers:
|
|
52
|
-
|
|
53
|
-
| Layer | Contents | AI compatibility |
|
|
54
|
-
|---|---|---|
|
|
55
|
-
| **Methodology layer** (model-agnostic) | `tracks/`, `knowledge/`, `SKILL.md` documents, session protocols | Any AI model |
|
|
56
|
-
| **Automation layer** (Claude-native) | `plugins/*/agents/` (plugin channel — FH's own agents, auto-loaded when the plugin is enabled), hooks, slash commands, `CLAUDE.md` rules; `.claude/agents/` is the field-project local/override slot, unused by FH itself | Claude Code only |
|
|
57
|
-
|
|
58
|
-
Agents in this registry belong to the **Automation layer**. Skills (in `plugins/`) straddle both layers — their methodology is model-agnostic, but their invocation mechanism is Claude Code-native.
|
|
59
|
-
|
|
60
|
-
> **Codex-compatible beta**: The Methodology layer (`tracks/`, `knowledge/`, skill documentation) is designated Codex-compatible beta. Gemini, Codex, and other AI users can apply FH methodology without the Automation layer — manual invocation replaces hook/agent dispatch.
|
|
61
|
-
|
|
62
|
-
> **Directory → destination routing (where your outputs belong)**: not everything in the methodology layer is public-shareable. `knowledge/` and `SKILL.md` docs are the **public, reusable** methodology. `tracks/` is **local / private by convention** — work history, session records, `fh_signal_*`, audit logs — and is gitignored on the public mirror. An AI working in a local workspace that pairs the public mirror with a private companion store (the `*-be` pattern) must **not** infer "same folder ⇒ same repository"; route by content type:
|
|
63
|
-
>
|
|
64
|
-
> | Content | Default destination |
|
|
65
|
-
> |---|---|
|
|
66
|
-
> | reusable methodology · docs · skills · public guidance · polished external-facing conclusions | public mirror (`knowledge/`, `plugins/`, `docs/`) |
|
|
67
|
-
> | raw signal · operator observation · private validation · handoff · paper draft · PR-background reasoning log | private companion store (`*-be` pattern) — or keep local; do **not** commit to the public mirror |
|
|
68
|
-
>
|
|
69
|
-
> When unsure, treat raw / observational / operator-specific material as **private-first** and promote only the polished result to public. (Concrete per-operator bindings — exact companion-store path, sync mechanism — live in the operator's local config, not here.)
|
|
70
|
-
|
|
71
|
-
> **Multi-model sidecar (validated)**: Any FH user can delegate to other models via sidecar — Gemini CLI, OpenAI/Codex CLI, or Copilot CLI's model catalog — invoked with `Bash` from within the Claude Code session. FH is the orchestrating harness; the sidecar is a routing/access layer (not a second harness — different layer entirely). Validated empirically: `echo "prompt" | gemini` works inside a CC session and produces usable output. Sidecar calls are Bash invocations, not agent dispatches — they bypass this registry and are coordinated inline by the skill. Capability routing matters too: Gemini/Antigravity is the natural breadth/multimodal sidecar, while Codex's primary cast is the **repo-grounded audit** sidecar (file reads · grep/source-close · diff & patch · gate execution · phantom/backtrace) — **not** discovery/design-depth; a Codex session with Browser/Chrome connectors mounted can additionally take live web-flow automation as a capability-routed handoff. In a local FH workspace that pairs the public methodology mirror with a private companion store (the `*-be` pattern), route by workspace capability while preserving each repository's ownership boundary. See `knowledge/shared/harness-core/multi_model_sidecar_strategy.md §Runtime Authority` for the authority model and the full pattern.
|
|
72
|
-
|
|
73
|
-
> **Waiting on a sidecar — mechanical, not by eye (2026-07-29).** A sidecar you dispatched is judged
|
|
74
|
-
> ONLY by the typed verdict line from `scripts/sidecar_wait.sh`:
|
|
75
|
-
>
|
|
76
|
-
> ```bash
|
|
77
|
-
> printf '%s' "$prompt" | bash scripts/sidecar_wait.sh out.txt 900 -- codex exec -m gpt-5.5 -
|
|
78
|
-
> # SIDECAR_VERDICT=COMPLETE exit=0 bytes=48489 → read out.txt
|
|
79
|
-
> # SIDECAR_VERDICT=TIMEOUT waited=900s bytes=0 → STILL ALIVE, not a result
|
|
80
|
-
> # SIDECAR_VERDICT=EMPTY exit=0 → the only state meaning "it said nothing"
|
|
81
|
-
> ```
|
|
82
|
-
>
|
|
83
|
-
> **Never judge a sidecar by looking at its output file.** A live process and a dead one produce the
|
|
84
|
-
> same zero bytes, and only process state separates them. Measured here: a session backgrounded two
|
|
85
|
-
> sidecars, read their files after 1 s and 30 s, recorded *"both returned 0-output"* into five
|
|
86
|
-
> records — and both had answered, with four real findings, one of which showed the change under
|
|
87
|
-
> review was over-applied. The mis-read nearly retired a working mechanism. This rule is repeated in
|
|
88
|
-
> this file because line 71 tells you to invoke sidecars with `Bash`; a runtime reading only that
|
|
89
|
-
> would dispatch with no waiting discipline at all. Canonical: `auto-decorrelation` SKILL.md §S-1b.
|
|
90
|
-
|
|
91
|
-
> **Runtime authority — hard stop line (Codex / non-Claude runtimes):** your findings are **evidence candidates, not terminal verdicts**. They are not final until the governor source-closes them against a **mechanical anchor** (a local file hit · a literal source span · a passing check) — **never governor agreement alone**. You are a capability-routed **sidecar**, not a co-governor: there is one explicit governor per context. Full doctrine: `knowledge/shared/harness-core/multi_model_sidecar_strategy.md §Runtime Authority`.
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Invocation patterns
|
|
96
|
-
|
|
97
|
-
### Single agent dispatch
|
|
98
|
-
|
|
99
|
-
```
|
|
100
|
-
Analyze this SKILL.md for structural flaws before I commit it.
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
→ Claude dispatches `quench-challenger` automatically (description-triggered).
|
|
104
|
-
|
|
105
|
-
### Parallel dispatch (2+ independent tasks)
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
Run fact-checker and persona-innovator in parallel.
|
|
109
|
-
First: check [asset path] for duplicates
|
|
110
|
-
Second: scan for naming gaps in the current harness
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
→ Both agents run concurrently in Agent View; results are integrated by the orchestrator.
|
|
114
|
-
|
|
115
|
-
### Wave-based composition (via agent-composer)
|
|
116
|
-
|
|
117
|
-
For complex multi-step tasks, run `/agent-composer` first to plan which agents to dispatch in which order (Wave 0 reconnaissance → Wave 1 execution → Wave 2 synthesis).
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## Codex Compatibility (beta)
|
|
25
|
+
| `beginner` | `plugins/fh-meta/agents/beginner.md` | First-contact cold read; finds onboarding friction | `sim-conductor` Area A, `marketplace-gate`, `install-wizard`, direct |
|
|
26
|
+
| `main-player` | `plugins/fh-meta/agents/main-player.md` | Engaged-user view; scopes Light/Midcore/Heavy usage | `sim-conductor` Area A/D-code, direct |
|
|
27
|
+
| `expert` | `plugins/fh-meta/agents/expert.md` | Web-grounded domain accuracy and current practice | `sim-conductor` Area E/D, paper review, direct |
|
|
28
|
+
| `challenger` | `plugins/fh-meta/agents/challenger.md` | Evidence-cited adversarial evaluation | `steel-quench`, `harvest-loop`, `sim-conductor`, direct |
|
|
29
|
+
| `fact-checker` | `plugins/fh-meta/agents/fact-checker.md` | Pre-recommendation duplicate and stale-fact search | Before new asset creation or recommendation |
|
|
30
|
+
| `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` | External-facing pre-publication persona audit | `hub-cc-pr-reviewer`, `sim-conductor`, direct |
|
|
31
|
+
| `quench-challenger` | `plugins/fh-commons/agents/quench-challenger.md` | Steel-quench attack plus concrete fix direction | `steel-quench` Wave 1, `install-doctor`, `marketplace-gate` |
|
|
32
|
+
| `persona-innovator` | `plugins/fh-meta/agents/persona-innovator.md` | Naming gaps, frame proposals, frontier signals | `sim-conductor` Area A, `harvest-loop`, direct |
|
|
122
33
|
|
|
123
|
-
|
|
34
|
+
Machine-readable mirror: `.claude/registry/agent_cards.json`.
|
|
124
35
|
|
|
125
|
-
###
|
|
36
|
+
### Tool restrictions
|
|
126
37
|
|
|
127
|
-
|
|
128
|
-
auto-loaded into a Claude Code session when it reads a matching file, and **your runtime has no equivalent**.
|
|
129
|
-
So five things that govern behavior are not going to reach you on their own. Read them explicitly:
|
|
130
|
-
|
|
131
|
-
1. **FH asset changes run a mandatory 4-axis verification chain before the session's first commit.**
|
|
132
|
-
Detail (axis definitions · marker required fields · lightweight exception · substantive carve-out):
|
|
133
|
-
`.claude/rules/fh_4axis_gate.md` — **open it directly**; nothing will load it for you. The commit is
|
|
134
|
-
hard-blocked by `templates/.git-hooks/pre-commit` regardless of runtime, so skipping the read does not
|
|
135
|
-
skip the gate — it just means you meet the block without knowing what it wants.
|
|
136
|
-
⚠️ If you run `templates/regression_guard.sh` (Axis 1) yourself, **`exit 0` means PASS *or* SKIP** —
|
|
137
|
-
SKIP being "no staged file matched the gate's pathspec", which is *not checked*, not *checked and
|
|
138
|
-
clean*. Prefer the typed file channel — set `REGRESSION_GUARD_RESULT_FILE=<path>` and read
|
|
139
|
-
`result=pass|review|block|skip|error` from that file (stdout's `REGRESSION_GUARD_RESULT=` line is
|
|
140
|
-
the no-env fallback). Judging by exit code
|
|
141
|
-
alone lets an unexamined change report as a pass (measured 2026-07-22: that is exactly what the
|
|
142
|
-
commit hook did until it was fixed).
|
|
143
|
-
2. **Company residency is absolute** (CLAUDE.md §Field-Harness Diagnostic): raw company source, secrets,
|
|
144
|
-
hostnames, internal repo/asset names, stack traces, and unredacted findings **never leave the local
|
|
145
|
-
machine** — not to an external *or same-family* cloud model, not through a browser/API tool, not into a
|
|
146
|
-
log, comment, or paste. Outbound gets a **sanitized summary only**; exceptions need explicit operator
|
|
147
|
-
approval plus a gitignored audit note. This binds every runtime, not just Claude Code — a leak does not
|
|
148
|
-
un-happen, and the guard is worth nothing if it only lives where one runtime reads.
|
|
149
|
-
|
|
150
|
-
3. **Before calling a material work product done, name what you are blind to.** CLAUDE.md routes the
|
|
151
|
-
everyday "commit and merge this" moment to `agent-composer` **§Author-Exposure Table** — a review
|
|
152
|
-
pass keyed on *what the author cannot self-detect* (cold entry → `beginner` · everyday friction →
|
|
153
|
-
`main-player` · outside currency → `expert` · optimistic self-verification → `challenger` +
|
|
154
|
-
cross-family · rebuilding what exists → `fact-checker` · ungrounded numbers → `phantom-quench`),
|
|
155
|
-
with a materiality gate and an `Exposure-unclear → challenger` default so "no row applies" is not
|
|
156
|
-
an exit. **This row exists because the triggering utterance names no agent** — nothing will fire it
|
|
157
|
-
for you. Your runtime *can* run these lenses: substitute `Agent(subagent_type=...)` per §M2 above
|
|
158
|
-
(`fh-run`, or `codex exec` reading the agent spec). The lens returns evidence, never the verdict.
|
|
159
|
-
|
|
160
|
-
4. **General work is in scope here, and the mechanism for serving it is to marshal installed
|
|
161
|
-
capability.** CLAUDE.md §Intent Marshaling makes this the runtime default. It settles a *category*
|
|
162
|
-
question only — whether non-harness work belongs in this environment at all. Every ordinary check
|
|
163
|
-
about a specific request (is it safe, sensible, well-formed, worth doing) is yours and is unaffected.
|
|
164
|
-
|
|
165
|
-
The category answer is yes, for a concrete reason: the skill registry, the mapped field harnesses,
|
|
166
|
-
and the memory store exist **only** in this environment. So when the operator states a work intent in
|
|
167
|
-
plain language (write this doc, build this wiki page, organize this material — **any work-shaped ask,
|
|
168
|
-
not only harness building**), the scan below is what tells you whether capability for it is actually
|
|
169
|
-
present. An empty scan, reported with the scan cited, is a correct answer — see the third bullet.
|
|
170
|
-
|
|
171
|
-
Three constraints carry over unchanged to your runtime:
|
|
172
|
-
- **Enumerate rather than recall.** List the available skills, `LOCAL_SKILL_REGISTRY`, and the mapped
|
|
173
|
-
project assets. Recall under-reports what is installed, which is why the scan is a listing step.
|
|
174
|
-
- **Marshaling never upgrades a trust tier.** Run-first autonomy covers **FH-native capability whose
|
|
175
|
-
steps are per-action reversible**. A non-FH sibling capability stays at its registry `ask-tier`
|
|
176
|
-
(propose only), and an outward-mutating action (send · post · deploy · delete) keeps its own gate.
|
|
177
|
-
- **A capability gap is declared by citing the scan result**, not as a bare "nothing fits" — then
|
|
178
|
-
route at request scale (internal scan → external search → in-session synthesis). *Persist* routes
|
|
179
|
-
to the New-Skill gate; *install* routes to plugin-recommender's HITL. No new gates.
|
|
180
|
-
|
|
181
|
-
**This item exists because the triggering utterance is ordinary work language that names no skill and
|
|
182
|
-
no agent** — like item 3, no automatic trigger covers it; read it explicitly.
|
|
183
|
-
|
|
184
|
-
> **Detail**: See `knowledge/shared/harness-core/intent_marshaling_general_work.md` — the 5-step loop,
|
|
185
|
-
> the gate-routing table, the Sonnet-floor boundaries, and the origin defect — **open it directly**
|
|
186
|
-
> before applying the ladder or when a gap appears.
|
|
187
|
-
|
|
188
|
-
5. **A scan, checker, or metric in this repo is not evidence until it has been shown to work on the
|
|
189
|
-
target you are pointing it at.** This one is easy to skip because the tooling looks finished, so it
|
|
190
|
-
is worth two cheap steps before you rely on a number it produces:
|
|
191
|
-
|
|
192
|
-
- **Run it against one case you already know the answer to, and one you know is clean.** A tool that
|
|
193
|
-
cannot separate those two has not been shown to measure anything, so its output cannot ground a
|
|
194
|
-
claim about the target — it may still be right, you just have no way to tell. This
|
|
195
|
-
repo has produced that exact result more than once — an ASCII-token scanner run over a Korean
|
|
196
|
-
corpus scored ~96% false positives, and a shell-shape scanner reported a fail-open script as
|
|
197
|
-
"clean" because every one of its probes was written for Python syntax.
|
|
198
|
-
- **Open one hit by hand before you state a count anywhere** — including in chat, not only in a file.
|
|
199
|
-
An unverified figure is anchored the moment it is said, and then has to be corrected everywhere it
|
|
200
|
-
travelled.
|
|
201
|
-
|
|
202
|
-
Two conventions that follow from this, and that the rest of the repo assumes you are using:
|
|
203
|
-
*an empty result is not a zero* — a scan that found no target files, or died mid-run, reports
|
|
204
|
-
`UNMEASURED`, never `0` — and *an extreme result (everything passed, everything failed) is a reason
|
|
205
|
-
to suspect the instrument before the target.*
|
|
206
|
-
|
|
207
|
-
Nothing enforces this mechanically; the trigger is your own intent to trust an output, which no hook
|
|
208
|
-
can see. Detail, including the known-pair procedure and the failure catalogue:
|
|
209
|
-
`knowledge/shared/harness-core/measurement-integrity-checklist.md` — **open it directly** before
|
|
210
|
-
running a scan whose count you will report.
|
|
211
|
-
|
|
212
|
-
The irreversible-surface gates (Pre-Publish · Destructive-Op) likewise live in CLAUDE.md and fire on
|
|
213
|
-
**intent**, not on a file — read them before any publish, delete, or history-rewrite. `pre-push` enforces
|
|
214
|
-
the git-side destructive surface mechanically for every runtime.
|
|
215
|
-
|
|
216
|
-
### Entry point for Codex users
|
|
217
|
-
|
|
218
|
-
AGENTS.md is your starting point. Navigate from here to skill workflows:
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
# Read a skill's full workflow
|
|
222
|
-
cat plugins/fh-meta/skills/steel-quench/SKILL.md
|
|
223
|
-
|
|
224
|
-
# Apply via codex exec (validated pattern — codex-cli ≥ 0.135.0)
|
|
225
|
-
cat plugins/fh-meta/skills/steel-quench/SKILL.md path/to/artifact.md \
|
|
226
|
-
| codex exec -m gpt-5.5 -
|
|
227
|
-
|
|
228
|
-
# Or use FH's runtime adapter (preferred for Codex-primary workflows)
|
|
229
|
-
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run \
|
|
230
|
-
--skill steel-quench \
|
|
231
|
-
--file path/to/artifact.md
|
|
232
|
-
|
|
233
|
-
# Agent substitution for Claude Code Agent(...) calls
|
|
234
|
-
FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-run \
|
|
235
|
-
--agent fh-commons:quench-challenger \
|
|
236
|
-
--file path/to/artifact.md
|
|
237
|
-
|
|
238
|
-
# Or pipe explicitly
|
|
239
|
-
echo "Apply the following skill to the artifact below." | \
|
|
240
|
-
cat - plugins/fh-meta/skills/{skill}/SKILL.md target.md \
|
|
241
|
-
| codex exec -m gpt-5.5 -
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
`codex exec -m gpt-5.5 -` reads from stdin in headless mode. `npx @openai/codex` (interactive) is not suitable — it requires TTY.
|
|
245
|
-
|
|
246
|
-
### Skill compatibility tiers
|
|
247
|
-
|
|
248
|
-
| Tier | Definition | Examples |
|
|
249
|
-
|---|---|---|
|
|
250
|
-
| **M1 — Full** | All phases run without CC-native dependencies — no Stop hook, no `.claude/agents/` dispatch, no `/model` | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop` |
|
|
251
|
-
| **M2 — Partial** | Core workflow runs; CC-native phases require manual adaptation or skip | `deliberation` (Mediator/Jury Agent steps = manual), `steel-quench` (Wave 1–3 ✅; quench-challenger agent = manual), `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` (git scan phase ✅; PR auto-proposal = manual) |
|
|
252
|
-
| **M3 — CC-only** | Requires CC Stop hook or session-scoped agent dispatch; methodology reference only | `goal-quench` (Phase 3 Stop hook), `hub-cc-pr-reviewer` (CC session context), `install-wizard` (settings.json write) |
|
|
253
|
-
|
|
254
|
-
**M2 adaptation pattern**: when a step references `Agent(subagent_type=...)` or a slash command, substitute with `fh-run` (preferred) or a direct `codex exec` call reading the sub-agent's SKILL.md — same workflow, different runtime.
|
|
255
|
-
|
|
256
|
-
**Goal handling under Codex**: use Codex's native goal/session feature when available. FH's portable role is the quality gate after the goal completes: `FH_BACKEND=codex npx --package @chrono-meta/fh-gate fh-gate ...`. `fh-goal` exists only for non-interactive one-shot runs that should be followed automatically by `fh-gate`; it is not a replacement for Codex-native goal control.
|
|
257
|
-
|
|
258
|
-
### Beta removal conditions
|
|
259
|
-
|
|
260
|
-
| Condition | Status |
|
|
38
|
+
| Agent | Allowed tools |
|
|
261
39
|
|---|---|
|
|
262
|
-
|
|
|
263
|
-
|
|
|
264
|
-
|
|
|
265
|
-
|
|
|
266
|
-
|
|
267
|
-
|
|
40
|
+
| `challenger` | Read, Grep, Glob, WebSearch, WebFetch |
|
|
41
|
+
| `fact-checker` | Read, Grep, Glob |
|
|
42
|
+
| `hub-persona-auditor` | Read, Grep, Glob |
|
|
43
|
+
| `quench-challenger` | Read, Grep, Glob |
|
|
44
|
+
| `persona-innovator` | Read, Grep, Glob, WebSearch, WebFetch |
|
|
45
|
+
|
|
46
|
+
## Runtime Boundaries
|
|
47
|
+
|
|
48
|
+
- **Two layers:** `tracks/`, `knowledge/`, and skill methodology are model-agnostic. Plugin agents,
|
|
49
|
+
hooks, slash commands, and `.claude/rules/` automation are Claude-native.
|
|
50
|
+
- **Output residency:** reusable methodology and polished public guidance belong in `knowledge/`,
|
|
51
|
+
`plugins/`, or `docs/`. Raw signals, operator observations, handoffs, audit logs, and private
|
|
52
|
+
reasoning are private-first; do not infer that colocated directories share a repository.
|
|
53
|
+
- **Runtime authority:** a non-Claude sidecar returns evidence candidates, never the terminal verdict.
|
|
54
|
+
The governor must source-close each finding against a local file hit, literal source span, or
|
|
55
|
+
passing check. Governor agreement alone is not an anchor.
|
|
56
|
+
- **Sidecar completion:** judge a sidecar only by the typed verdict from `scripts/sidecar_wait.sh`.
|
|
57
|
+
Never infer completion or emptiness by looking at its output file.
|
|
58
|
+
|
|
59
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Architecture-and-output-routing`
|
|
60
|
+
> — layer ownership and destination routing — read before routing work across a public/private workspace pair.
|
|
61
|
+
|
|
62
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Sidecar-routing-and-waiting`
|
|
63
|
+
> — capability routing, the required wait command, and typed verdict meanings — read before dispatching a sidecar.
|
|
64
|
+
|
|
65
|
+
## Mandatory Non-Claude Checklist
|
|
66
|
+
|
|
67
|
+
Because non-Claude runtimes do not auto-load Claude path rules, apply these rules explicitly:
|
|
68
|
+
|
|
69
|
+
1. **FH asset change:** before editing, read `.claude/rules/fh_4axis_gate.md`; before the first commit,
|
|
70
|
+
run its required axes. Treat `templates/regression_guard.sh` exit 0 as PASS or SKIP; use its typed
|
|
71
|
+
result channel and never report SKIP as checked.
|
|
72
|
+
2. **Company residency:** raw company source, secrets, hostnames, internal names, stack traces, and
|
|
73
|
+
unredacted findings never leave the local machine, including to same-family cloud models. Only a
|
|
74
|
+
sanitized summary may leave; exceptions require explicit operator approval and a gitignored note.
|
|
75
|
+
3. **Author exposure:** before calling a material work product done, identify the author's blind spot
|
|
76
|
+
and run the matching `agent-composer` Author-Exposure lens. The lens supplies evidence, not a verdict;
|
|
77
|
+
unclear exposure defaults to `challenger`.
|
|
78
|
+
4. **Intent marshaling:** general work is in scope. Enumerate installed skills, `LOCAL_SKILL_REGISTRY`,
|
|
79
|
+
and mapped project assets before composing capability. Preserve each trust tier and each outward
|
|
80
|
+
action gate. Declare a gap only with the scan cited, then route through internal registry search,
|
|
81
|
+
external search, and in-session synthesis. Persist and install retain their existing gates.
|
|
82
|
+
5. **Measurement integrity:** before trusting a scan or count, run a known-positive and known-clean
|
|
83
|
+
pair, then open one hit manually. An empty or failed scan is `UNMEASURED`, not zero; extreme results
|
|
84
|
+
require instrument suspicion.
|
|
85
|
+
6. **Irreversible intent:** before publish, delete, or history rewrite, read and apply the
|
|
86
|
+
Pre-Publish or Destructive-Op gate in `CLAUDE.md`. `pre-push` is only the git-side backstop.
|
|
87
|
+
|
|
88
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Mandatory-checklist-procedures`
|
|
89
|
+
> — exact supporting procedures and canonical doctrine links — read when any checklist trigger fires.
|
|
90
|
+
|
|
91
|
+
## Invocation
|
|
92
|
+
|
|
93
|
+
Non-Claude runtimes apply methodology manually. Prefer `FH_BACKEND=codex ... fh-run` for skills and
|
|
94
|
+
agents. When a workflow references `Agent(subagent_type=...)` or a slash command, replace that step
|
|
95
|
+
with `fh-run` or a direct `codex exec` call that reads the relevant spec. Use Codex native goal/session
|
|
96
|
+
control; FH supplies the quality gate after goal completion.
|
|
97
|
+
|
|
98
|
+
| Tier | Definition | Skills |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| **M1 — Full** | No Claude-native dependency | `token-budget-gate`, `asset-placement-gate`, `phantom-quench`, `deep-clarify`, `convergence-loop` |
|
|
101
|
+
| **M2 — Partial** | Core works; native agent or slash-command steps need adaptation | `deliberation`, `steel-quench`, `harness-doctor`, `context-doctor`, `sim-conductor`, `harvest-loop` |
|
|
102
|
+
| **M3 — Claude-only** | Requires a Claude hook or session-scoped dispatch | `goal-quench`, `hub-cc-pr-reviewer`, `install-wizard` |
|
|
268
103
|
|
|
269
|
-
|
|
104
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Invocation-patterns`
|
|
105
|
+
> — single, parallel, and wave composition examples — read when choosing a dispatch shape.
|
|
270
106
|
|
|
271
|
-
|
|
107
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Codex-entry-points`
|
|
108
|
+
> — runnable `fh-run` and `codex exec` forms — read before invoking FH from Codex.
|
|
272
109
|
|
|
273
|
-
|
|
110
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Compatibility-tiers`
|
|
111
|
+
> — tier constraints and goal-handling limits — read before adapting an M2/M3 workflow.
|
|
274
112
|
|
|
275
|
-
|
|
113
|
+
## Conditional Procedures
|
|
276
114
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
3. At least 1 explicit `Done When` condition
|
|
280
|
-
4. At least 3 natural language trigger examples
|
|
281
|
-
5. Independently executable (or dependencies explicitly documented)
|
|
115
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Beta-removal`
|
|
116
|
+
> — external-validation conditions and reporting route — read when evaluating or changing beta status.
|
|
282
117
|
|
|
283
|
-
|
|
118
|
+
> **Detail**: See `knowledge/shared/harness-core/agents_md_runtime_details.md §Adding-agents`
|
|
119
|
+
> — creation gate, registry synchronization, and post-use thresholds — read before adding an agent.
|
package/docs/codex-compat.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Codex Compatibility — Known Limitations & Validated Patterns
|
|
2
2
|
|
|
3
|
-
> Status: **beta**. This document is beta-removal condition
|
|
3
|
+
> Status: **beta**. This document is a beta-removal condition (see
|
|
4
|
+
> `knowledge/shared/harness-core/agents_md_runtime_details.md §Beta-removal`). It lists what works,
|
|
5
|
+
> what breaks, and what to expect when applying forge-harness (FH) methodology through OpenAI Codex
|
|
6
|
+
> (`codex exec`) instead of Claude Code.
|
|
4
7
|
|
|
5
8
|
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, plugin-channel agents under `plugins/*/agents/`, field-project overrides under `.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
9
|
|