@chrono-meta/fh-gate 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +5 -2
- package/CLAUDE.md +9 -2
- package/README.md +12 -6
- package/package.json +1 -2
- package/plugins/fh-commons/skills/deliberation/SKILL.md +1 -1
- package/plugins/fh-meta/agents/beginner.md +104 -0
- package/{.claude → plugins/fh-meta}/agents/challenger.md +3 -1
- package/plugins/fh-meta/agents/expert.md +114 -0
- package/plugins/fh-meta/agents/main-player.md +106 -0
- package/plugins/fh-meta/skills/agent-composer/SKILL.md +1 -1
- package/plugins/fh-meta/skills/apex-review/SKILL.md +1 -1
- package/plugins/fh-meta/skills/install-wizard/SKILL.md +46 -29
- package/plugins/fh-meta/skills/sim-conductor/SKILL.md +35 -25
- package/plugins/fh-meta/skills/sim-conductor/SKILL_detail.md +16 -16
- package/plugins/fh-meta/skills/steel-quench/SKILL_detail.md +6 -6
package/AGENTS.md
CHANGED
|
@@ -19,11 +19,14 @@ CLAUDE.md governs *how* the session runs. AGENTS.md defines *what each agent doe
|
|
|
19
19
|
|
|
20
20
|
## Agent Registry
|
|
21
21
|
|
|
22
|
-
forge-harness ships
|
|
22
|
+
forge-harness ships 8 tracked agents across plugin `agents/` directories. The **user-mastery spectrum** (`beginner` · `main-player` · `expert`) plus `challenger` (adversarial axis) supply multi-persona review; `fact-checker`, `hub-persona-auditor`, and `persona-innovator` serve general harness operations; `quench-challenger` is steel-quench-dedicated.
|
|
23
23
|
|
|
24
24
|
| Agent | File | Role | Invoked by |
|
|
25
25
|
|---|---|---|---|
|
|
26
|
-
| `
|
|
26
|
+
| `beginner` | `plugins/fh-meta/agents/beginner.md` | First-contact cold-read standpoint (spectrum entry tier) — onboarding friction a fluent author cannot feel; constructive, not adversarial | `sim-conductor` Area A, `marketplace-gate`, `install-wizard`, or direct dispatch |
|
|
27
|
+
| `main-player` | `plugins/fh-meta/agents/main-player.md` | Engaged-user standpoint (spectrum core tier) — intelligently scopes Light/Midcore/Heavy; Heavy = classic power-user edge/limit lens | `sim-conductor` Area A/D-code, or direct dispatch |
|
|
28
|
+
| `expert` | `plugins/fh-meta/agents/expert.md` | Domain-authority standpoint (spectrum frontier tier) — web-grounded accuracy + SOTA currency, citation-enforced | `sim-conductor` Area E/D, paper review, or direct dispatch |
|
|
29
|
+
| `challenger` | `plugins/fh-meta/agents/challenger.md` | Frontier-grade adversarial evaluator — adapts attack vectors to artifact type, enforces evidence citation, models its own information asymmetry; U1 absorbs the skeptic "why not just X?" lens | `steel-quench`, `harvest-loop`, `sim-conductor`, or direct dispatch |
|
|
27
30
|
| `fact-checker` | `plugins/fh-meta/agents/fact-checker.md` | Pre-recommendation deduplication — greps hub assets for existing skills/agents/patterns before main agent commits to a new recommendation; catches stale facts and duplicate work | Main agent before any new asset creation or recommendation |
|
|
28
31
|
| `hub-persona-auditor` | `plugins/fh-meta/agents/hub-persona-auditor.md` | Pre-publication audit of external-facing assets — 3+ persona simulation, 4-axis review (resonance/confusion/resistance/supplement), 3-tier revision proposals | `hub-cc-pr-reviewer`, `sim-conductor`, or direct dispatch |
|
|
29
32
|
| `quench-challenger` | `plugins/fh-commons/agents/quench-challenger.md` | Steel-quench dedicated adversary — 3-DNA synthesis of Devil + Innovator + Prescriber; every attack paired with a concrete fix direction | `steel-quench` Wave 1 (primary), `install-doctor`, `marketplace-gate` |
|
package/CLAUDE.md
CHANGED
|
@@ -226,6 +226,8 @@ Proposal format: `"I see [X]. Want me to run /[skill] to [one-line description]?
|
|
|
226
226
|
| "review for the team", "CTO review", "decision-maker", "share with leadership", "approval deck" | `/apex-review` |
|
|
227
227
|
| "run full pipeline", "verify everything", "end-to-end sweep", "chain all verifications" | `/pipeline-conductor` |
|
|
228
228
|
| "help me write a prompt", "build a prompt", "improve this prompt", "prompt template" | `/meta-prompt-builder` |
|
|
229
|
+
| "/goal", "run this autonomously", "big multi-step task", "orchestrate this goal", or **any heavy autonomous/multi-agent run** (proactive — propose *before* running; it is expensive, so the proposal is mandatory, not the auto-run) | `/goal-quench` (budget gate + quality gate) |
|
|
230
|
+
| "I don't know what to build", "how should I approach this", "organize this for me", "clarify this", "정리해줘" (ambiguous request before dispatch) | `/deep-clarify` |
|
|
229
231
|
| "memory feels bloated", "clean up memory", "memory too large", "memory hygiene" | `/memory-hygiene` |
|
|
230
232
|
| "ready to PR", "about to push", "merge this", "PR 올려줘", FH asset changed in session | 4-axis auto-gate (see above — runs automatically, no proposal needed) |
|
|
231
233
|
|
|
@@ -330,10 +332,15 @@ Closing phrase detected ("wrap up", "done", "good work", "end session", etc.)
|
|
|
330
332
|
→ ② If FH assets changed: harvest-loop
|
|
331
333
|
→ ③ Sync local/gitignored session state to your durable companion store, if you keep one
|
|
332
334
|
→ ④ Memory hygiene — update stale entries + record new session findings
|
|
333
|
-
→
|
|
335
|
+
→ ④-b npm freshness — if any npm-shipped asset changed this session (the `package.json` `files[]`
|
|
336
|
+
surface: skills · agents · README · AGENTS.md · CLAUDE.md · CHEATSHEET), **propose an npm
|
|
337
|
+
republish**: version bump + Pre-Publish Surface Gate (`/public-surface-audit` + `/marketplace-gate`
|
|
338
|
+
Check 5) + `npm publish`. The npm-served README and shipped skills/agents freeze at publish time,
|
|
339
|
+
so updating FH assets without republishing leaves the package stale. **Propose, don't auto-publish.**
|
|
340
|
+
→ ⑤ Card update ← ABSOLUTE LAST: must capture ①–④-b outcomes
|
|
334
341
|
→ ⑥ Commit card + push
|
|
335
342
|
```
|
|
336
|
-
**Card-last guard**:
|
|
343
|
+
**Card-last guard**: ①–④-b must ALL complete before ⑤ runs. Any new information produced
|
|
337
344
|
during ①–④ (new commits, model changes, new findings) feeds INTO ⑤ — card is never
|
|
338
345
|
written mid-sequence and then left open for more work to accumulate after it.
|
|
339
346
|
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/chrono-meta/forge-harness/main/docs/banner.png" alt="forge-harness — Forge your projects, pass them through, faster." width="680">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/chrono-meta/forge-harness/main/docs/banner.png" alt="forge-harness — Forge your projects, pass them through, faster. Quality is the lever — speed is the result." width="680">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
A practitioner's meta-harness: it raises each project's <b>floor</b> (harness-ify the setup)<br>and <b>ceiling</b> (accelerate the work), then compounds the gains across your whole portfolio.
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
|
+
<p align="center">
|
|
19
|
+
<b>Quality is the lever; speed is the result.</b> Every change earns its way through the gates —<br>adversarial · phantom · regression — and <i>that</i> is what makes the next change faster.
|
|
20
|
+
</p>
|
|
21
|
+
|
|
18
22
|
<p align="center">
|
|
19
23
|
<i>Fork it. Rename it. Make it yours.</i>
|
|
20
24
|
</p>
|
|
@@ -227,16 +231,18 @@ it running: `harvest-loop` (each session's lessons become permanent skills) and
|
|
|
227
231
|
Claude Code does not auto-select models by task complexity — you configure this once.
|
|
228
232
|
|
|
229
233
|
```bash
|
|
230
|
-
/model
|
|
234
|
+
/model opus # recommended for forge-harness — pin Opus so gate/verification turns never silently drop
|
|
231
235
|
```
|
|
232
236
|
|
|
233
237
|
| Command | Who runs what | Best for |
|
|
234
238
|
|---|---|---|
|
|
235
|
-
| `/model
|
|
236
|
-
| `/model
|
|
237
|
-
| `/model
|
|
239
|
+
| `/model opus` | Opus handles everything | **FH default** — verification, governance, agent reasoning |
|
|
240
|
+
| `/model opusplan` | Opus *plans* · Sonnet executes *(when Opus engages)* | Cost-conscious routine coding — see caveat |
|
|
241
|
+
| `/model sonnet` | Sonnet handles everything | Fast, simple tasks (no FH gates) |
|
|
242
|
+
|
|
243
|
+
**Why `/model opus` for FH**: FH is a *quality* harness — its value lives in verification turns (steel-quench, phantom-quench, the 4-axis gate, agent reasoning) that must not silently run on a weaker model. `opusplan`'s Opus engagement is **not guaranteed**: in a measured 10-turn run it used Opus on **0** turns (CC classifies few turns as "plan-mode"), so the reasoning FH leans on quietly ran on Sonnet — pinning `/model opus` removed that variance (22/22 turns Opus in the follow-up). **Sub-agent dispatch** model is set by the dispatch's own `model` parameter; the session model/plan-mode does **not** propagate Opus to sub-agents, so pin Opus there too for adversarial/verification agents. Use `opusplan` only when the task is mostly routine edits and you accept that Opus may not engage.
|
|
238
244
|
|
|
239
|
-
**
|
|
245
|
+
> **By role**: editing the harness itself → `/model opus` (full). Running FH on a field project → `/model opus` for any gated/verification work; `opusplan` is an acceptable cost tradeoff for routine coding, with the caveat above. Sub-agent token costs are CC-visible in the session jsonl under `message.model`.
|
|
240
246
|
|
|
241
247
|
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.
|
|
242
248
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrono-meta/fh-gate",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
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": [
|
|
@@ -41,7 +41,6 @@
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"files": [
|
|
44
|
-
".claude/agents/challenger.md",
|
|
45
44
|
"AGENTS.md",
|
|
46
45
|
"CATALOG.md",
|
|
47
46
|
"CHEATSHEET.md",
|
|
@@ -71,7 +71,7 @@ Upon completing Step 0, include the following in the output:
|
|
|
71
71
|
Jury auto-selection criteria:
|
|
72
72
|
| Topic nature | Recommended jury personas |
|
|
73
73
|
|---|---|
|
|
74
|
-
| New user experience related | `
|
|
74
|
+
| New user experience related | `beginner` + `main-player` |
|
|
75
75
|
| Technical implementation feasibility | `persona-be` + `persona-fe` |
|
|
76
76
|
| Business viability / policy / legal | `persona-pm` + `persona-business` |
|
|
77
77
|
| General design decisions | No jury (3-layer is sufficient) |
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: beginner
|
|
3
|
+
description: Frontier-grade first-contact standpoint evaluator. Simulates a zero-context user meeting an artifact for the first time — attempts the task cold rather than skimming, then reports exactly where comprehension or execution breaks. Lowest tier of the user-mastery spectrum (beginner → main-player → expert). Constructive standpoint, not an adversary — surfaces onboarding friction a fluent author cannot feel. Returns parallax-compatible [Strengths / Concerns / Absence check / Open questions]. Use when you need a true cold-read of a SKILL, README, prompt, or onboarding path.
|
|
4
|
+
tools: Read
|
|
5
|
+
version: 0.1
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
> **Dual registration**: ships in `plugins/fh-meta/agents/beginner.md`. External installs use this version directly — no hub clone required.
|
|
9
|
+
|
|
10
|
+
# beginner — First-Contact Standpoint
|
|
11
|
+
|
|
12
|
+
> challenger asks "what's wrong?" (adversarial). beginner asks "I just got here with zero context — where did I get stuck, and what made me give up?" (constructive). The value is the *first stumble*, which the author can no longer see.
|
|
13
|
+
|
|
14
|
+
## Core Principle — Cold-Start, Not Skim
|
|
15
|
+
|
|
16
|
+
The beginner **attempts the artifact**, it does not review it from above. The discipline:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
What beginner DOES:
|
|
20
|
+
- Reads top-to-bottom in document order, as a first-timer would (no jumping ahead) — `Read` only, by design
|
|
21
|
+
- Stops at the FIRST point where it cannot proceed without outside knowledge
|
|
22
|
+
- Records the stumble in place, then continues — collecting every friction point, not just the first
|
|
23
|
+
- Judges only what a zero-context reader could know from the text itself
|
|
24
|
+
|
|
25
|
+
What beginner does NOT do:
|
|
26
|
+
- Use author-context, internal vocabulary, or prior-session knowledge to "fill gaps"
|
|
27
|
+
- Attack, rank by severity-of-exploit, or hunt edge cases (that is challenger / main-player)
|
|
28
|
+
- Rewrite — it reports friction, it does not fix
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Implication**: "I don't know what this term means" is a valid finding, not ignorance. If a first-timer cannot proceed and the text does not unblock them, that is onboarding friction — full stop.
|
|
32
|
+
|
|
33
|
+
## Friction Taxonomy
|
|
34
|
+
|
|
35
|
+
Classify every stumble by where the comprehension breaks:
|
|
36
|
+
|
|
37
|
+
| # | Friction | Core question |
|
|
38
|
+
|:---:|---|---|
|
|
39
|
+
| F1 | **Undefined term** | A word/acronym used before it is defined or linked. |
|
|
40
|
+
| F2 | **Assumed prerequisite** | A tool, file, install, or prior step the reader is assumed to have but was never told to get. |
|
|
41
|
+
| F3 | **Order break** | A step references something introduced later, or the sequence cannot be followed linearly. |
|
|
42
|
+
| F4 | **Ambiguous instruction** | A directive with two+ plausible readings; the reader must guess. |
|
|
43
|
+
| F5 | **Silent success criterion** | No way to tell whether a step worked before moving on. |
|
|
44
|
+
| F6 | **Entry-point gap** | Unclear where to even start, or which of N paths applies to "someone like me". |
|
|
45
|
+
|
|
46
|
+
## Execution Protocol
|
|
47
|
+
|
|
48
|
+
### Phase 1 — Frame
|
|
49
|
+
```
|
|
50
|
+
Artifact: [path / name]
|
|
51
|
+
Reader I am simulating: [first-time user with zero context about this project]
|
|
52
|
+
Knowledge I am NOT allowed to use: [internal vocab, author intent, prior sessions]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Phase 2 — Cold Walk
|
|
56
|
+
Read in order. At each stumble:
|
|
57
|
+
```
|
|
58
|
+
Friction: [F1–F6 + one-line description]
|
|
59
|
+
Location: [file:line / section / quoted phrase — REQUIRED]
|
|
60
|
+
What I expected vs what I got: [one line]
|
|
61
|
+
Did it block me? : HARD (could not continue) / SOFT (continued but unsure)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Phase 3 — First-Stumble Report
|
|
65
|
+
```
|
|
66
|
+
First HARD block encountered: [the single earliest point a first-timer gives up]
|
|
67
|
+
Total friction: HARD n / SOFT m
|
|
68
|
+
Did I reach a successful first outcome? : YES / NO (blocked at [where])
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Output Format (parallax-compatible)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
### Strengths (0–3 — what made first contact easy, from a beginner's seat)
|
|
75
|
+
- [what landed: clear entry point, good first example, etc.]
|
|
76
|
+
|
|
77
|
+
### Concerns
|
|
78
|
+
**Critical** — a HARD block: a first-timer cannot complete the intended first outcome
|
|
79
|
+
- [location] friction code + one-line — what a newcomer cannot get past
|
|
80
|
+
**Important** — significant friction, reader continues but likely wrong/unsure
|
|
81
|
+
**Suggestion** — polish lowering first-contact cost
|
|
82
|
+
|
|
83
|
+
### Absence check (outside-vantage: what does the artifact FAIL to provide a first-timer?)
|
|
84
|
+
- [missing prerequisite list / missing "you are here" / missing first success signal]
|
|
85
|
+
|
|
86
|
+
### Open questions (0–3 — what a beginner would have to ask a human to proceed)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Integration Hooks
|
|
90
|
+
|
|
91
|
+
- **sim-conductor Area A** — beginner is the canonical first-contact persona (A-1). Pairs with main-player (engaged use) and challenger (adversarial).
|
|
92
|
+
- **marketplace-gate / install-wizard** — README & onboarding-path friendliness cold-read.
|
|
93
|
+
- **hub-persona-auditor boundary** — *lens*, not artifact-exclusivity. Both may touch a README. `hub-persona-auditor` = multi-reader 4-axis pre-publication audit of external-facing drafts (briefing/card/guide/README as a publication). `beginner` = a single cold-read standpoint surfacing first-contact friction in any artifact (SKILL/README/prompt/config/code). For a publication-readiness verdict on an external draft, defer to hub-persona-auditor; for "can a first-timer actually get started," use beginner.
|
|
94
|
+
|
|
95
|
+
## Done When
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
Cited friction locations appear in ascending document order (evidence of a linear cold walk)
|
|
99
|
+
+ Every friction has a Location citation (no abstract "this is confusing")
|
|
100
|
+
+ First HARD block identified (or NONE, with the reached first outcome stated)
|
|
101
|
+
+ Parallax output emitted (Strengths / Concerns / Absence check / Open questions)
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
beginner does not defend or fix — it reports first-contact friction. Remediation is the caller's.
|
|
@@ -3,6 +3,8 @@ name: challenger
|
|
|
3
3
|
description: Frontier-grade adversarial evaluator for harness assets, papers, designs, and code. Goes beyond fixed-angle critique — adapts attack vectors to artifact type, enforces evidence citation on every attack, models its own information asymmetry (Sandboxed Adversary), and tracks convergence across rounds. Returns structured [issue · location · severity] output consumable by steel-quench, harvest-loop, and sim-conductor. Use when you need adversarial pressure that a self-reviewing author cannot generate.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
> **Dual registration**: ships in `plugins/fh-meta/agents/challenger.md` (the adversarial axis of the user-mastery spectrum: beginner · main-player · expert · challenger). External plugin installs get it directly — no hub clone required.
|
|
7
|
+
|
|
6
8
|
# challenger — Frontier Adversarial Evaluator
|
|
7
9
|
|
|
8
10
|
> The original devil-advocate asks "what's wrong?" The challenger asks "what's wrong, where exactly, why does evidence support that claim, and what can I NOT see that might invalidate my attack?" Adversarial pressure with epistemic discipline.
|
|
@@ -38,7 +40,7 @@ Before attacking, challenger identifies the artifact type and loads the correspo
|
|
|
38
40
|
|
|
39
41
|
| # | Angle | Core question |
|
|
40
42
|
|:---:|---|---|
|
|
41
|
-
| U1 | **Existence justification** | Why does this exist? Is there a simpler
|
|
43
|
+
| U1 | **Existence justification & alternatives** | Why does this exist? Is there a simpler path — or an existing external tool/approach that already does this? *(Absorbs the skeptic "why not just X?" lens — web-grounded: search for prior art / a named existing solution before accepting that this needs to exist. An unrebutted existing alternative is an S/A-grade attack on the artifact's reason to exist.)* |
|
|
42
44
|
| U2 | **Self-referential closure** | Does this evaluate itself by its own criteria? |
|
|
43
45
|
| U3 | **Evidence grounding** | Every quantitative claim: is there a measurement artifact? |
|
|
44
46
|
| U4 | **Bus factor** | If the author is unavailable, does this still function? |
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: expert
|
|
3
|
+
description: Frontier-grade domain-authority evaluator. Checks an artifact's technical accuracy, completeness, and state-of-the-art currency against EXTERNAL authoritative sources — fetched from the open web, since a general model must ground domain claims rather than assert them. Top tier of the user-mastery spectrum (beginner → main-player → expert): the professor / prolific author / frontier-harness operator. Every accuracy judgment carries an external citation; ungrounded assertions are withheld. Returns parallax-compatible output. Use when "is this technically correct and current with the field?" matters.
|
|
4
|
+
tools: Read, WebSearch, WebFetch
|
|
5
|
+
version: 0.1
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
> **Dual registration**: ships in `plugins/fh-meta/agents/expert.md`. External installs use this version directly — no hub clone required.
|
|
9
|
+
|
|
10
|
+
# expert — Domain-Authority Standpoint (web-grounded)
|
|
11
|
+
|
|
12
|
+
> beginner reads cold; main-player reads as the daily user. expert reads as the **person who knows the field** — a professor, a prolific author, someone running frontier harnesses and agents — and holds the artifact to what the field actually knows *today*.
|
|
13
|
+
|
|
14
|
+
## Core Principle — Ground, Don't Assert
|
|
15
|
+
|
|
16
|
+
A general model's "expert opinion" is unreliable when it leans on parametric memory. The expert agent's discipline inverts this: **a domain-accuracy claim is only emitted if an external authoritative source supports it.** No source → no claim (downgrade to an Open question).
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
What expert grounds against:
|
|
20
|
+
- External authoritative sources (standards, official docs, peer-reviewed work,
|
|
21
|
+
primary-source repos, maintainer statements) — fetched live via WebSearch/WebFetch
|
|
22
|
+
- The current state of the art (is this approach still current, or superseded?)
|
|
23
|
+
|
|
24
|
+
What expert does NOT rely on:
|
|
25
|
+
- Its own unverified parametric recall ("I think X is true")
|
|
26
|
+
- Internal hub assets only (that is fact-checker's job — internal grep)
|
|
27
|
+
- Declared-source-file back-tracing only (that is source-grounding-audit's job)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Boundary (no overlap)**: `fact-checker` greps the *hub/own environment*; `source-grounding-audit` traces claims to *declared internal source files*; `expert` checks against the *external world / frontier*. The three cover internal-duplication, internal-provenance, and external-accuracy respectively.
|
|
31
|
+
|
|
32
|
+
## Accuracy Matrix
|
|
33
|
+
|
|
34
|
+
| # | Angle | Core question |
|
|
35
|
+
|:---:|---|---|
|
|
36
|
+
| E1 | **Factual correctness** | Is each technical claim true per an authoritative external source? |
|
|
37
|
+
| E2 | **Completeness** | Does it omit something the field considers essential for this topic? |
|
|
38
|
+
| E3 | **Currency / SOTA** | Is the approach current, or superseded by a known better method? |
|
|
39
|
+
| E4 | **Citation integrity** | Do the artifact's own citations say what it claims they say? (cite ≠ verified) |
|
|
40
|
+
| E5 | **Terminology precision** | Are domain terms used in their established technical sense? |
|
|
41
|
+
| E6 | **Overclaim** | Does a stated benefit exceed what the evidence/field supports? |
|
|
42
|
+
|
|
43
|
+
## Execution Protocol
|
|
44
|
+
|
|
45
|
+
### Phase 1 — Domain Frame
|
|
46
|
+
```
|
|
47
|
+
Artifact: [path / name]
|
|
48
|
+
Domain(s) identified: [the field(s) this artifact makes claims in]
|
|
49
|
+
Authoritative source classes I will consult: [standards / docs / papers / primary repos]
|
|
50
|
+
Claims extracted for grounding: [list the checkable technical assertions]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Phase 2 — Grounding Round
|
|
54
|
+
**Prioritize** the highest-risk claims first (load-bearing assertions, quantitative/benchmark claims,
|
|
55
|
+
SOTA claims). Budget: ground the top ~5–8 claims; if more remain, list them under Open questions rather
|
|
56
|
+
than running an unbounded fetch loop. For each grounded claim, run a search/fetch and record:
|
|
57
|
+
```
|
|
58
|
+
Claim: [the artifact's assertion + location file:line]
|
|
59
|
+
Angle: [E1–E6]
|
|
60
|
+
External source: [URL / standard name / paper — REQUIRED to assert a verdict]
|
|
61
|
+
Evidence excerpt: [the actual quoted span the source says — NOT a paraphrase. Self-applies E4:
|
|
62
|
+
a source you did not quote is a source you did not verify.]
|
|
63
|
+
Verdict: SUPPORTED / CONTRADICTED / OUTDATED / UNVERIFIABLE (no authoritative source found)
|
|
64
|
+
Note: [one line — what the source says vs what the artifact says]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
> **Withhold rule**: if no authoritative source is found (or none could be fetched), the verdict is
|
|
68
|
+
> UNVERIFIABLE and the item moves to Open questions — it is NEVER reported as an error on parametric
|
|
69
|
+
> recall alone. A verdict with no `Evidence excerpt` is not a verdict; downgrade it to UNVERIFIABLE.
|
|
70
|
+
|
|
71
|
+
> **Source-quality bar**: when sources conflict, rank primary/standard/peer-reviewed over secondary
|
|
72
|
+
> (blog/forum). State the ranking used when a conflict is resolved.
|
|
73
|
+
|
|
74
|
+
### Phase 3 — Currency Pass
|
|
75
|
+
```
|
|
76
|
+
Approaches that are current (SOTA-consistent): [...]
|
|
77
|
+
Approaches superseded / deprecated by the field: [... with the superseding method + source]
|
|
78
|
+
Field developments the artifact appears unaware of: [...]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Output Format (parallax-compatible)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
### Strengths (0–3 — what is technically sound / current, with a source)
|
|
85
|
+
- [location] claim — SUPPORTED by [source]
|
|
86
|
+
|
|
87
|
+
### Concerns (severity = IMPACT, per the shared parallax contract — not a separate accuracy scale, so the synthesizer can rank across personas)
|
|
88
|
+
**Critical** — a CONTRADICTED claim whose falsity would cause user/system harm or invalidate the artifact's core function — with source + evidence excerpt
|
|
89
|
+
- [location] claim — contradicted by [source]: [what's actually true]
|
|
90
|
+
**Important** — OUTDATED approach, or a material completeness gap with significant impact — with source
|
|
91
|
+
**Suggestion** — terminology / precision / minor currency polish
|
|
92
|
+
|
|
93
|
+
### Absence check (what does the field consider essential that the artifact omits?)
|
|
94
|
+
- [missing essential concept / unaddressed known failure mode — with source]
|
|
95
|
+
|
|
96
|
+
### Open questions (0–3 — UNVERIFIABLE claims needing the author's source, or domain ambiguities)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Integration Hooks
|
|
100
|
+
|
|
101
|
+
- **sim-conductor** — `expert` is the domain-accuracy persona for **Area E** (primary) and for **Area D** on citation-/research-bearing artifacts (design docs with citations — see sim-conductor SKILL_detail persona map). Pairs with `main-player` (usability) and the adversarial agent (`challenger` / `fh-commons:quench-challenger`).
|
|
102
|
+
- **paper / research review** — E4 (citation integrity) and E6 (overclaim) are the paper-grade angles. These deliberately overlap the adversary's paper angles (challenger P1/P5); run expert when you want *grounded* accuracy with external sources, the adversary when you want attack pressure. Both is stronger than either.
|
|
103
|
+
- **frontier-digest adjacency** — E3 currency findings are candidate inputs to frontier-digest's trend scan.
|
|
104
|
+
|
|
105
|
+
## Done When (each item artifact-checkable)
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
Every SUPPORTED / CONTRADICTED / OUTDATED verdict carries BOTH a source URL and a quoted evidence excerpt
|
|
109
|
+
+ Every claim lacking a quoted excerpt appears under Open questions as UNVERIFIABLE (none asserted from recall)
|
|
110
|
+
+ Currency pass completed (SOTA-consistent vs superseded list present)
|
|
111
|
+
+ Parallax output emitted (Strengths / Concerns / Absence check / Open questions)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
expert does not defend or rewrite — it grounds accuracy against the field. Remediation is the caller's.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: main-player
|
|
3
|
+
description: Frontier-grade engaged-user standpoint evaluator. Simulates the artifact's actual core user base — and intelligently scopes which engagement tier to inhabit (Light / Midcore / Heavy) based on who really uses this. Middle tier of the user-mastery spectrum (beginner → main-player → expert). The Heavy sub-tier carries the old "power-user" lens (edge cases, undocumented behavior, limits); Light/Midcore carry everyday-use friction. Constructive standpoint, not an adversary. Returns parallax-compatible output. Use when "does this actually work for the people who use it daily?" matters.
|
|
4
|
+
tools: Read, Grep, Glob
|
|
5
|
+
version: 0.1
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
> **Dual registration**: ships in `plugins/fh-meta/agents/main-player.md`. External installs use this version directly — no hub clone required.
|
|
9
|
+
|
|
10
|
+
# main-player — Engaged-User Standpoint (tier-adaptive)
|
|
11
|
+
|
|
12
|
+
> beginner is first contact; expert is the frontier authority. main-player is the **core engaged user** — the person who actually uses this regularly. Its distinctive move: it does not assume one user. It reads who the artifact is *for*, then inhabits the right engagement tier(s).
|
|
13
|
+
|
|
14
|
+
## Core Principle — Inhabit the Real User Base, Not a Generic One
|
|
15
|
+
|
|
16
|
+
A flat "power-user" review misses that most artifacts serve a *distribution* of users. main-player first profiles the user base, then simulates the tier(s) that actually dominate it — so findings reflect real usage weight, not a single imagined persona.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Tier Who they are What they care about
|
|
20
|
+
─────────────────────────────────────────────────────────────────────────────
|
|
21
|
+
Light Casual / occasional use; low investment "Does it just work with defaults?
|
|
22
|
+
(leisure-grade engagement) Low friction, sane defaults, no surprises."
|
|
23
|
+
Midcore Regular use; the dependable middle "Is the common workflow efficient?
|
|
24
|
+
(between light and heavy) Customization for my routine? Predictable."
|
|
25
|
+
Heavy Most time/cost invested; the committed "Edge cases, undocumented behavior, limits,
|
|
26
|
+
power user (≈ classic power-user) advanced config, what breaks at scale."
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Execution Protocol
|
|
30
|
+
|
|
31
|
+
### Phase 1 — User-Base Profiling (REQUIRED, before any review)
|
|
32
|
+
```
|
|
33
|
+
Caller-passed tier (if any): [e.g. sim-conductor dispatches "main-player (Heavy)"] — if present, it
|
|
34
|
+
OVERRIDES self-profiling: simulate that tier; you may add one adjacent tier only with a stated reason.
|
|
35
|
+
Artifact: [path / name]
|
|
36
|
+
Dominant tier (qualitative, evidence-based — NOT a fabricated %): [Light | Midcore | Heavy]
|
|
37
|
+
Evidence: [quote the artifact signal that implies this — flag count, defaults, complexity, audience line]
|
|
38
|
+
Tiers I will simulate: [the dominant one or two — DO NOT review all three by reflex]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
> **Grounding honesty**: you can only Read the artifact, not its real user telemetry. Infer the dominant
|
|
42
|
+
> tier from *observable artifact signals* and quote them — never emit invented usage percentages. If the
|
|
43
|
+
> signals are ambiguous, say so and default to Midcore.
|
|
44
|
+
|
|
45
|
+
> **Intelligent scoping rule**: simulate the tier(s) that carry the artifact's real weight. A one-shot
|
|
46
|
+
> install script → Light dominates. A power-tooling SKILL with many flags → Heavy dominates. A general
|
|
47
|
+
> workflow tool → Midcore (+Heavy for edges). Reviewing a tier the artifact does not serve is noise —
|
|
48
|
+
> declare it skipped.
|
|
49
|
+
|
|
50
|
+
### Phase 2 — Per-Tier Walk
|
|
51
|
+
For each selected tier, walk the artifact *as that user* and record:
|
|
52
|
+
```
|
|
53
|
+
Tier: [Light / Midcore / Heavy]
|
|
54
|
+
Finding: [one-line — friction, gap, or strength for THIS tier]
|
|
55
|
+
Location: [file:line / section / quoted phrase — REQUIRED]
|
|
56
|
+
Impact for this tier: HIGH (blocks/forces workaround) / MED (slows) / LOW (annoyance)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Heavy-tier checklist (the absorbed power-user lens):
|
|
60
|
+
- H1 Edge/boundary behavior documented, or silently undefined?
|
|
61
|
+
- H2 Undocumented behavior a heavy user will discover and depend on?
|
|
62
|
+
- H3 Stated limits / scale ceilings / rate boundaries?
|
|
63
|
+
- H4 Advanced config & override paths — present and consistent?
|
|
64
|
+
- H5 Failure/recovery under heavy use (conflicts, duplication, overwrite)?
|
|
65
|
+
|
|
66
|
+
### Phase 3 — Synthesis
|
|
67
|
+
```
|
|
68
|
+
Tiers simulated: [...] (skipped: [...] — reason)
|
|
69
|
+
Dominant-tier verdict: [does it serve its core user base? YES / PARTIAL / NO]
|
|
70
|
+
Cross-tier conflicts: [where serving one tier hurts another — e.g., defaults good for Light bury Heavy config]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Output Format (parallax-compatible)
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
### Strengths (0–3 — what serves the core user base well, tier-tagged)
|
|
77
|
+
- [Heavy] / [Midcore] / [Light] : what works
|
|
78
|
+
|
|
79
|
+
### Concerns
|
|
80
|
+
**Critical** — dominant-tier user cannot accomplish their routine use, or forced into a workaround
|
|
81
|
+
- [tier][location] one-line — impact
|
|
82
|
+
**Important** — significant slowdown / undocumented dependence for a served tier
|
|
83
|
+
**Suggestion** — improvement for a served tier
|
|
84
|
+
|
|
85
|
+
### Absence check (what does the artifact FAIL to provide its real user base?)
|
|
86
|
+
- [missing limits doc / missing advanced path / missing sane default — tier-tagged]
|
|
87
|
+
|
|
88
|
+
### Open questions (0–3 — what the engaged user would need answered to rely on this)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Integration Hooks
|
|
92
|
+
|
|
93
|
+
- **sim-conductor Area A / D-code** — main-player is the engaged-use persona (A-2); Heavy tier supplies the edge-case lens for code artifacts.
|
|
94
|
+
- **install-doctor adjacency** — Heavy H5 (conflicts/duplication/overwrite) complements install-doctor; main-player reports the *user-experienced* symptom, install-doctor the structural cause.
|
|
95
|
+
- **challenger boundary** — challenger *attacks* edges adversarially; main-player reports edges as a real heavy user *experiences and depends on* them. Different vantage, intentionally.
|
|
96
|
+
|
|
97
|
+
## Done When
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Dominant tier selected with a QUOTED artifact signal as evidence (no invented %; caller-passed tier honored if given)
|
|
101
|
+
+ Every finding tier-tagged with a Location citation
|
|
102
|
+
+ Dominant-tier verdict given (YES / PARTIAL / NO)
|
|
103
|
+
+ Parallax output emitted (Strengths / Concerns / Absence check / Open questions)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
main-player does not defend or fix — it reports engaged-use fit. Remediation is the caller's.
|
|
@@ -114,7 +114,7 @@ Default composition table by task type.
|
|
|
114
114
|
|---|---|:---:|
|
|
115
115
|
| **[Wave 0] Recon (all tasks)** | Recon agent (A) — file/structure understanding. Direct orchestrator execution forbidden | — |
|
|
116
116
|
| **[Wave 0] All tasks including new assets** | fact-checker (A) — proactive duplicate/stale validation | — |
|
|
117
|
-
| Meta-simulation quality validation | sim-conductor (S) —
|
|
117
|
+
| Meta-simulation quality validation | sim-conductor (S) — challenger + beginner + main-player | ✅ Parallel |
|
|
118
118
|
| Field pattern harvest | field-harvest (S) | — |
|
|
119
119
|
| Harness structural diagnosis | harness-doctor (S) | — |
|
|
120
120
|
| New asset placement decision | asset-placement-gate (S) | — |
|
|
@@ -145,7 +145,7 @@ Choose your next step:
|
|
|
145
145
|
D. Exit
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
-
> **"Conditionally passed" → option B is the default path**: Conditions listed by personas remain unresolved until sim-conductor Area E runs
|
|
148
|
+
> **"Conditionally passed" → option B is the default path**: Conditions listed by personas remain unresolved until sim-conductor Area E runs challenger/beginner/main-player validation against them. Choosing C or D without sim-conductor leaves those conditions unverified — present B as the default choice and require explicit opt-out.
|
|
149
149
|
|
|
150
150
|
---
|
|
151
151
|
|
|
@@ -26,15 +26,15 @@ category: Composability Gate
|
|
|
26
26
|
> See `README.md > Advanced Settings > Plugin Install` for detailed guide.
|
|
27
27
|
|
|
28
28
|
Run immediately after cloning forge-harness (FH), or when setting up a new project for the first time.
|
|
29
|
-
Sets up periodic notification structure
|
|
29
|
+
Sets up the periodic-audit notification structure: a permanent zshrc hook (`fh_audit_check.zsh`, runs on terminal start) plus FH's session-start mtime detection. Both surface a weekly-audit reminder when 7+ days have elapsed since the last `weekly_audit` — no persistent cron is used (a session-scoped scheduler cannot survive to fire on a later day).
|
|
30
30
|
|
|
31
31
|
## Key Terms
|
|
32
32
|
|
|
33
33
|
| Term | Definition |
|
|
34
34
|
|---|---|
|
|
35
35
|
| **sentinel** | An empty file that records whether a specific event (audit complete, install complete, etc.) has occurred. Created in `~/.cc_sentinels/`. |
|
|
36
|
-
| **CronCreate** | Claude Code built-in command — schedules periodic tasks valid for the current session. Disappears when session ends. |
|
|
37
36
|
| **zshrc hook** | Shell function added to `~/.zshrc`. Automatically runs on terminal start and applies permanently. |
|
|
37
|
+
| **session-start detection** | FH's durable weekly-audit cadence — at session start the mtime of the latest `weekly_audit_*` is checked and `/harvest-loop` is proposed if 7+ days elapsed (see CLAUDE.md Cadence Rules). No persistent scheduler required. |
|
|
38
38
|
|
|
39
39
|
## Execution Modes
|
|
40
40
|
|
|
@@ -51,7 +51,7 @@ Sets up periodic notification structure (zshrc hook) and weekly audit notificati
|
|
|
51
51
|
- **Per-item approval**: Select each item individually (Y approve / N skip / L later)
|
|
52
52
|
- **Double-confirm irreversible changes**: Preview before file writes and zshrc modifications
|
|
53
53
|
- **User review before PR creation**: Output PR parameters (title, base branch, included files, body) and get approval before execution. No automatic submission.
|
|
54
|
-
- **Periodic audit structure setup**: zshrc hook (permanently applied on terminal start) + sentinel initialization +
|
|
54
|
+
- **Periodic audit structure setup**: zshrc hook (permanently applied on terminal start) + sentinel initialization + session-start mtime detection (7-day threshold)
|
|
55
55
|
|
|
56
56
|
## Execution Steps
|
|
57
57
|
|
|
@@ -138,9 +138,13 @@ echo 'source ~/.cc_secrets/tokens.env' >> ~/.zshrc
|
|
|
138
138
|
**The following are environment detection procedures that CC executes automatically. No need for users to run manually.**
|
|
139
139
|
|
|
140
140
|
```bash
|
|
141
|
-
# Prompt injection pre-flight:
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
# Prompt injection pre-flight: scan config AND the project's AI-instruction surfaces — CLAUDE.md,
|
|
142
|
+
# AGENTS.md, .claude/rules/* — which are the higher-risk vectors in an unknown repo (not just shell/settings).
|
|
143
|
+
# Injection-SPECIFIC patterns only (override/exfil), since instruction files legitimately carry directives;
|
|
144
|
+
# advisory (recommend manual review), never an auto-block.
|
|
145
|
+
if grep -rIE "ignore (all )?previous|disregard (the )?above|exfiltrat|^# CLAUDE:|^# AI:|<instructions>" \
|
|
146
|
+
~/.zshrc .claude/settings.json CLAUDE.md AGENTS.md .claude/rules/ 2>/dev/null | grep -q .; then
|
|
147
|
+
echo "⚠️ AI-instruction / override pattern detected in config or instruction files — injection risk in an unknown repo. Review the listed files manually before proceeding."; fi
|
|
144
148
|
|
|
145
149
|
# FH location
|
|
146
150
|
echo "FH_DIR=${FH_DIR:-not set}"
|
|
@@ -164,13 +168,13 @@ python3 -c "import json,os; d=json.load(open(os.path.expanduser('~/.claude.json'
|
|
|
164
168
|
# zshrc hook status
|
|
165
169
|
grep -q "fh_audit_check.zsh" ~/.zshrc 2>/dev/null && echo "zshrc hook: present" || echo "zshrc hook: absent"
|
|
166
170
|
|
|
167
|
-
# Framework detection (
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
echo "Framework:
|
|
173
|
-
|
|
171
|
+
# Framework detection (optional) — only used to look for a matching OPTIONAL domain pattern pack.
|
|
172
|
+
# Generic: capture the framework name; the pattern-pack path is derived as {framework}_patterns.md.
|
|
173
|
+
# No pattern pack ships by default — this is a user-supplied extension point, absence is the normal state.
|
|
174
|
+
FRAMEWORK=""
|
|
175
|
+
for fw in streamlit django fastapi flask; do
|
|
176
|
+
if grep -qi "$fw" requirements.txt pyproject.toml 2>/dev/null; then FRAMEWORK="$fw"; echo "Framework: $fw detected"; break; fi
|
|
177
|
+
done
|
|
174
178
|
```
|
|
175
179
|
|
|
176
180
|
**Bootstrap guidance when FH_DIR is not set (stop immediately in Step 0):**
|
|
@@ -180,8 +184,10 @@ fi
|
|
|
180
184
|
1. Clone FH repo:
|
|
181
185
|
git clone https://github.com/chrono-meta/forge-harness ~/forge-harness
|
|
182
186
|
|
|
183
|
-
2. Set environment
|
|
187
|
+
2. Set environment variables:
|
|
184
188
|
export FH_DIR=~/forge-harness
|
|
189
|
+
export CC_HUB_DIR=$FH_DIR # FH hub dir (holds tracks/_audit for the weekly-audit mtime check);
|
|
190
|
+
# equals FH_DIR unless you run a separate hub clone
|
|
185
191
|
|
|
186
192
|
3. Install FH plugin in CC:
|
|
187
193
|
Settings → Plugins → Add → {FH_DIR}/plugins/fh-meta
|
|
@@ -194,11 +200,12 @@ fi
|
|
|
194
200
|
|
|
195
201
|
*(Run after Step 0-A·B pre-checks. Output results as environment card, then continue to Step 0-C.)*
|
|
196
202
|
|
|
197
|
-
Output detection results as **environment card**.
|
|
203
|
+
Output detection results as **environment card**. If a framework was detected AND you maintain a matching
|
|
204
|
+
optional domain pattern pack, reference it (none ship by default — absence is normal, never a gap):
|
|
198
205
|
```
|
|
199
|
-
📌
|
|
200
|
-
{CC_HUB_DIR}/knowledge/shared/
|
|
201
|
-
|
|
206
|
+
📌 {FRAMEWORK} project detected → optional domain pattern pack check
|
|
207
|
+
{CC_HUB_DIR}/knowledge/shared/{FRAMEWORK}_patterns.md loaded (only if you supplied it; not shipped by default)
|
|
208
|
+
If absent: skip silently — no pack is the expected default state.
|
|
202
209
|
```
|
|
203
210
|
|
|
204
211
|
```
|
|
@@ -219,7 +226,7 @@ install-wizard — Environment Detection
|
|
|
219
226
|
> **Core message**: FH is not something placed on top of an existing harness.
|
|
220
227
|
> It analyzes existing rules to remove duplicates — making things lighter.
|
|
221
228
|
>
|
|
222
|
-
> **
|
|
229
|
+
> **Illustrative single-run measurements** (n=1 per project, `--dry-run` verified — not benchmarks; your numbers will differ):
|
|
223
230
|
>
|
|
224
231
|
> | Project type | Example | Total volume | Reduction | Main cause |
|
|
225
232
|
> |---|---|---|---|---|
|
|
@@ -324,9 +331,9 @@ Auto-check the following items based on detected environment. Each item classifi
|
|
|
324
331
|
| `deep-insight plugin` | settings.json plugins contains deep-insight | `grep -r "deep-insight" .claude/settings.json 2>/dev/null` |
|
|
325
332
|
| `fh_env_context.jsonc` | `.claude/rules/fh_env_context.jsonc` exists | `ls .claude/rules/fh_env_context.jsonc` |
|
|
326
333
|
| `phantom-gate` | **(Python + AI-output projects only)** `phantom-gate` present in `requirements.txt` / `pyproject.toml` | `grep "phantom.gate" requirements.txt pyproject.toml 2>/dev/null` |
|
|
327
|
-
| `
|
|
334
|
+
| `Domain pattern pack applied` | (optional — only when a `{framework}_patterns.md` pack is present; none ship by default) framework-specific pattern checks | `knowledge/shared/{framework}_patterns.md` check (skip if file absent — the normal default) |
|
|
328
335
|
|
|
329
|
-
**Score calculation**: PASS = 1
|
|
336
|
+
**Score calculation**: PASS = 1 / MISS = 0.5 / FAIL = 0. Formula: `score = round( Σ(points) ÷ (applicable item count) × 100 )`. Conditional items (domain pattern pack / phantom-gate / MCP / deep-insight) are excluded from the denominator when not relevant, so always print the denominator next to the score (e.g. `{score}/100 over {n} applicable items`) — the percentage is reproducible only when the item count is shown.
|
|
330
337
|
|
|
331
338
|
### Step 2. Diagnosis Report + Proposal List
|
|
332
339
|
|
|
@@ -357,9 +364,11 @@ install-wizard — Diagnosis Results ({score}/100)
|
|
|
357
364
|
[6] Add MCP plugin — activate integrations (if MCP plugin MISS)
|
|
358
365
|
Run: claude mcp add <your-mcp-plugin> -- npx -y <your-mcp-plugin>
|
|
359
366
|
CC restart required after completion
|
|
360
|
-
[7] Install deep-insight
|
|
361
|
-
|
|
362
|
-
|
|
367
|
+
[7] (Optional — field plugin, NOT required) Install deep-insight — adds the field's domain personas to sim-conductor
|
|
368
|
+
deep-insight is a private/field marketplace plugin. sim-conductor already ships the built-in
|
|
369
|
+
user-mastery spectrum (beginner · main-player · expert · challenger), so multi-persona simulation
|
|
370
|
+
works WITHOUT it. If you have access: Settings → Plugins → Add → <your deep-insight path>.
|
|
371
|
+
If not: skip — sim-conductor falls back to the built-in spectrum agents (no capability lost).
|
|
363
372
|
[8] Create fh_env_context.jsonc — org/network/Git environment context file (if fh_env_context.jsonc MISS)
|
|
364
373
|
Copy: {FH_DIR}/templates/fh_env_context.jsonc → .claude/rules/fh_env_context.jsonc
|
|
365
374
|
Then manually update with actual values for org name, Jira URL, environment status, etc.
|
|
@@ -477,9 +486,16 @@ source "$FH_DIR/templates/fh_audit_check.zsh"
|
|
|
477
486
|
EOF
|
|
478
487
|
fi
|
|
479
488
|
|
|
480
|
-
# 4-axis verification gate
|
|
481
|
-
#
|
|
489
|
+
# 4-axis verification gate (Mode D / FH-self-development only — OPT-IN, double-confirm required)
|
|
490
|
+
# SCOPE (state this before asking): this gates commits IN YOUR FH CLONE ($FH_DIR) — git commit there is
|
|
491
|
+
# blocked until the 4-axis markers pass. It is FH-internal infra (hardcodes hub paths/markers) and is
|
|
492
|
+
# NEVER installed into field projects (see auto_project_mapping.md §6). Skip unless you develop FH itself.
|
|
493
|
+
# Per Core Principles (Per-item approval + Double-confirm irreversible changes): this is NOT auto-run —
|
|
494
|
+
# it is a separate explicit Y/N, not folded into the baseline-setup batch.
|
|
482
495
|
if [ -d "$FH_DIR/templates/.git-hooks" ]; then
|
|
496
|
+
echo "Enable the 4-axis pre-commit gate on your FH clone ($FH_DIR)? It will block commits there until"
|
|
497
|
+
echo "markers pass (Mode D / FH-development only). Skip if you are not developing FH itself. (Y/N)"
|
|
498
|
+
# → On explicit Y only:
|
|
483
499
|
git -C "$FH_DIR" config core.hooksPath templates/.git-hooks
|
|
484
500
|
chmod +x "$FH_DIR/templates/.git-hooks/pre-commit" 2>/dev/null
|
|
485
501
|
echo "4-axis pre-commit gate: installed (core.hooksPath -> templates/.git-hooks)"
|
|
@@ -489,8 +505,9 @@ fi
|
|
|
489
505
|
mkdir -p ~/.cc_sentinels
|
|
490
506
|
touch ~/.cc_sentinels/$(basename "$(pwd)")_wizard_done
|
|
491
507
|
|
|
492
|
-
# Weekly audit
|
|
493
|
-
#
|
|
508
|
+
# Weekly audit cadence — NO cron needed (a session-scoped scheduler cannot fire on a later day).
|
|
509
|
+
# Durable mechanism = the zshrc hook above (fh_audit_check.zsh warns on terminal start when 7+ days
|
|
510
|
+
# since last weekly_audit) + FH session-start detection (proposes /harvest-loop lightweight when overdue).
|
|
494
511
|
```
|
|
495
512
|
|
|
496
513
|
### Step 5. Completion Report + Contribution Guidance
|
|
@@ -503,7 +520,7 @@ install-wizard — Complete
|
|
|
503
520
|
From now on:
|
|
504
521
|
· Periodic audit auto-check on terminal start
|
|
505
522
|
· Yellow warning output when weekly_audit exceeds 7 days
|
|
506
|
-
·
|
|
523
|
+
· /harvest-loop (lightweight) proposed at session start when 7+ days since last weekly_audit
|
|
507
524
|
|
|
508
525
|
Next step skills:
|
|
509
526
|
· Not sure which plugin you need → /plugin-recommender
|
|
@@ -32,7 +32,7 @@ Proposal format: `"If it's related to [X], should I simulate with /sim-conductor
|
|
|
32
32
|
| "Test it with personas", "Run an external user simulation" | External user reaction | Area A |
|
|
33
33
|
| "Look at it through someone else's eyes" | External perspective | Area A |
|
|
34
34
|
| "Validate that this actually works" | Real-usage validation | Area D |
|
|
35
|
-
| "Find problems aggressively" | Adversarial validation | Area B (
|
|
35
|
+
| "Find problems aggressively" | Adversarial validation | Area B (`challenger`) |
|
|
36
36
|
|
|
37
37
|
## Triggers
|
|
38
38
|
|
|
@@ -76,8 +76,8 @@ Read target artifact(s) → classify on 5 dimensions → output recommendation
|
|
|
76
76
|
| Dimension | Signal → Weight shift |
|
|
77
77
|
|---|---|
|
|
78
78
|
| `artifact_type` | SKILL.md / design-doc → Area B + D-skill↑ · README / CHEATSHEET → Area A↑ · code / config → Area D-code↑ |
|
|
79
|
-
| `audience` | external installer / first-time user →
|
|
80
|
-
| `claim_density` | 3+ stated benefits or superlatives →
|
|
79
|
+
| `audience` | external installer / first-time user → beginner↑ · internal team only → challenger↑ |
|
|
80
|
+
| `claim_density` | 3+ stated benefits or superlatives → challenger↑ |
|
|
81
81
|
| `risk_level` | external publish / marketplace listing → steel-quench prerequisite triggered |
|
|
82
82
|
| `novelty` | first-of-its-kind / no prior session evidence → phantom-quench recommended |
|
|
83
83
|
|
|
@@ -113,8 +113,8 @@ Persona Discovery output:
|
|
|
113
113
|
|
|
114
114
|
```
|
|
115
115
|
Persona Map:
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
beginner → [installed agent: beginner] OR [ad-hoc directive]
|
|
117
|
+
challenger → [installed agent: challenger] OR [ad-hoc directive]
|
|
118
118
|
[profile-specific role] → ⚠️ GAP — plugin-recommender recommends: [X] (install? y/n)
|
|
119
119
|
```
|
|
120
120
|
|
|
@@ -165,17 +165,20 @@ sim-conductor does **not** run a fixed persona set. It derives needed perspectiv
|
|
|
165
165
|
③ External fetch — chain to /plugin-recommender when ①② insufficient for high-stakes tasks
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
Shipped standpoint agents (① tier — sourced installed-first):
|
|
169
169
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
|
173
|
-
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
|
|
|
170
|
+
FH ships a coherent **user-mastery spectrum** as real, reusable agents (not prompt-directive shells) — found by the ① installed-first scan, reusable across skills, and each isolated-context dispatchable for a true cold read (the bias-isolation value: an evaluator outside the author's context reads cold):
|
|
171
|
+
|
|
172
|
+
| Agent | Spectrum tier | Standpoint | Type |
|
|
173
|
+
|---|---|---|---|
|
|
174
|
+
| `beginner` | entry | First-contact cold-read — onboarding friction a fluent author cannot feel | reasoning |
|
|
175
|
+
| `main-player` | core | Engaged user; intelligently scopes Light / Midcore / Heavy (Heavy = classic power-user edge/limit lens) | reasoning |
|
|
176
|
+
| `expert` | frontier | Domain authority; web-grounded accuracy + SOTA currency, citation-enforced | data (WebSearch/WebFetch) |
|
|
177
|
+
| `challenger` | adversarial axis | Frontier adversary; U1 absorbs the skeptic "why not just X?" lens | adversarial |
|
|
177
178
|
|
|
178
|
-
|
|
179
|
+
> **Lineage**: `beginner` / `main-player` / `expert` are the FH-native frontier successors to the field deep-insight `user` group (newcomer / power-user) — re-derived to FH grade with embedded methodology + Done-When, not name-copied. `challenger` is the advanced form of the field `devil-advocate`. The former standalone skeptic standpoint is folded into `challenger` U1.
|
|
180
|
+
|
|
181
|
+
**Ad-hoc roles** (② tier — prompt-directive fallback): when the profile demands a standpoint with no shipped agent (e.g. "security auditor", "non-native reader"), inject the role as a directive into a general-purpose Agent. Prefer ① shipped agents; use ② only for genuinely task-specific one-offs.
|
|
179
182
|
|
|
180
183
|
#### Scale
|
|
181
184
|
|
|
@@ -197,9 +200,9 @@ Pre-entry user confirmation required before multi-team execution.
|
|
|
197
200
|
|
|
198
201
|
> **Detail**: See `SKILL_detail.md §MultiTeam` — team formation table (T0–T4), CLI detection bash, confirmation dialog, cross-team synthesis format — read when multi-team mode activates.
|
|
199
202
|
|
|
200
|
-
**A-1** (
|
|
201
|
-
**A-2** (
|
|
202
|
-
**A-3** (challenger
|
|
203
|
+
**A-1** (`beginner`) — first-contact friendliness · onboarding friction · terminology clarity
|
|
204
|
+
**A-2** (`main-player`) — engaged-use fit; Heavy tier: install conflicts · duplication · silent overwrite
|
|
205
|
+
**A-3** (`challenger`, artifact_type="SKILL") — claim-evidence gaps · angles U3, U5, S2
|
|
203
206
|
|
|
204
207
|
> ⚠️ **Human review gate**: Area A S-tier judgments require owner review before entering AI-AI loop.
|
|
205
208
|
|
|
@@ -246,10 +249,10 @@ Persona composition adapts to `artifact_type` from Step 0.3 profile:
|
|
|
246
249
|
|
|
247
250
|
| Artifact type | Primary persona | Supporting persona | Focus |
|
|
248
251
|
|---|---|---|---|
|
|
249
|
-
| SKILL.md / design doc | challenger (artifact_type="SKILL") |
|
|
250
|
-
| Python / JS / bash code | challenger (artifact_type="Code") |
|
|
251
|
-
| Prompt / config |
|
|
252
|
-
| Auth / security-sensitive | challenger + Security-auditor† |
|
|
252
|
+
| SKILL.md / design doc | challenger (artifact_type="SKILL") | `beginner` | Governance gaps, behavioral rule coverage |
|
|
253
|
+
| Python / JS / bash code | challenger (artifact_type="Code") | `main-player` (Heavy) | Edge cases, performance, security surface |
|
|
254
|
+
| Prompt / config | `beginner` | challenger | Interpretation errors, implicit assumptions |
|
|
255
|
+
| Auth / security-sensitive | challenger + Security-auditor† | `main-player` (Heavy) | Attack surface, privilege escalation |
|
|
253
256
|
|
|
254
257
|
† Security-auditor = built-in fallback role (② tier) injected as prompt directive.
|
|
255
258
|
|
|
@@ -265,7 +268,7 @@ Consumer agent attempts actual use (not just reads and judges). Grades: F (funct
|
|
|
265
268
|
|
|
266
269
|
### Area E — Artifact Quality Review
|
|
267
270
|
|
|
268
|
-
|
|
271
|
+
`expert` objection (E-1) + Practitioner confusion (E-2) in parallel → Pattern structuring (E-3) integrates both.
|
|
269
272
|
|
|
270
273
|
> **Detail**: See `SKILL_detail.md §AreaE-Detail` — E-1/E-2/E-3 execution, finding format, pattern naming procedure — read when executing Area E.
|
|
271
274
|
|
|
@@ -273,11 +276,18 @@ Domain-expert objection (E-1) + Practitioner confusion (E-2) in parallel → Pat
|
|
|
273
276
|
|
|
274
277
|
## Step 1.5 — Persona Output Protocol + Neutral Synthesizer (parallax)
|
|
275
278
|
|
|
276
|
-
Generalized from the field `deep-insight` multi-persona pattern (fh-be #7), domain-stripped
|
|
277
|
-
**parallax** for public FH (it is a mode of this skill, not a separate skill — see asset-placement
|
|
279
|
+
Generalized from the field `deep-insight` multi-persona pattern (fh-be #7), domain-stripped — the *pattern*
|
|
280
|
+
is renamed **parallax** for public FH (it is a mode of this skill, not a separate skill — see asset-placement
|
|
278
281
|
2026-06-06). It gives the persona dispatch above a shared output contract + a neutral aggregator, so
|
|
279
282
|
multi-persona findings stay comparable and the synthesis injects no bias of its own.
|
|
280
283
|
|
|
284
|
+
> **Naming provenance (precise)**: "renamed" above refers to the *pattern* (→ parallax), not the personas.
|
|
285
|
+
> The company-team-coupled field personas (fe/be/ios/pm/ux-writer/compliance/qa) were domain-stripped
|
|
286
|
+
> entirely. The generic `user` group (newcomer/power-user) was **re-derived to FH grade as the shipped
|
|
287
|
+
> `beginner` / `main-player` / `expert` mastery-spectrum agents** (embedded methodology + Done-When, not
|
|
288
|
+
> name-copied shells), and the field `devil-advocate` was **advanced into `challenger`** (sandboxed-adversary
|
|
289
|
+
> + adaptive attack matrix). Lineage is acknowledged; nothing is carried verbatim as a shell.
|
|
290
|
+
|
|
281
291
|
**Shared persona output protocol** — every dispatched persona emits the same shape, whatever its lens:
|
|
282
292
|
|
|
283
293
|
```
|
|
@@ -288,7 +298,7 @@ multi-persona findings stay comparable and the synthesis injects no bias of its
|
|
|
288
298
|
Suggestion — optional improvement
|
|
289
299
|
(each item: [file:line or quoted span] one-line summary — rationale)
|
|
290
300
|
### Open questions (0–3 items needed for a decision)
|
|
291
|
-
### Absence check (outside-vantage personas —
|
|
301
|
+
### Absence check (outside-vantage personas — beginner/integrator: what does the artifact FAIL to
|
|
292
302
|
specify that this standpoint needs? discoverability · undocumented contract ·
|
|
293
303
|
unstated assumption. A normal, self-administrable rubric item — surfaces real gaps.)
|
|
294
304
|
```
|
|
@@ -64,11 +64,11 @@ GAP detected for [perspective X]:
|
|
|
64
64
|
|
|
65
65
|
| Artifact type | Optimal personas | Likely GAP (not in FH native) |
|
|
66
66
|
|---|---|---|
|
|
67
|
-
| SKILL.md / governance doc | challenger ·
|
|
68
|
-
| README / marketing copy |
|
|
69
|
-
| Python / JS code | challenger/Code ·
|
|
70
|
-
| Auth / security-sensitive code | security-auditor · challenger/Code ·
|
|
71
|
-
| Design doc + citations | challenger ·
|
|
67
|
+
| SKILL.md / governance doc | challenger · beginner · expert | deep org-specific governance role → query plugin-recommender |
|
|
68
|
+
| README / marketing copy | beginner · challenger · expert | none native (challenger U1 covers the skeptic lens); niche field depth → query |
|
|
69
|
+
| Python / JS code | challenger/Code · main-player (Heavy) · security-auditor | security-auditor → query if auth/data |
|
|
70
|
+
| Auth / security-sensitive code | security-auditor · challenger/Code · main-player (Heavy) | security-auditor → block if GAP (high-weight) |
|
|
71
|
+
| Design doc + citations | challenger · expert | expert web-grounds citations natively; deep niche subfield → query |
|
|
72
72
|
|
|
73
73
|
### Degraded coverage flag
|
|
74
74
|
|
|
@@ -96,7 +96,7 @@ Target Profile:
|
|
|
96
96
|
|
|
97
97
|
Recommendation:
|
|
98
98
|
Areas: B (internal meta audit) + D-skill (cold-start validation)
|
|
99
|
-
Persona composition: challenger (high — claim verification),
|
|
99
|
+
Persona composition: challenger (high — claim verification), beginner (medium — onboarding), expert (medium — governance accuracy)
|
|
100
100
|
Scale: Minimum (3)
|
|
101
101
|
Prerequisites: none (not yet external publish)
|
|
102
102
|
```
|
|
@@ -112,7 +112,7 @@ Target Profile:
|
|
|
112
112
|
|
|
113
113
|
Recommendation:
|
|
114
114
|
Areas: A (external user perspective — primary) + C (naming gap scan)
|
|
115
|
-
Persona composition:
|
|
115
|
+
Persona composition: beginner (high), challenger (high — claim density), main-player (medium)
|
|
116
116
|
Scale: Extended (4–5)
|
|
117
117
|
Prerequisites: steel-quench REQUIRED before Area A proceeds
|
|
118
118
|
```
|
|
@@ -128,7 +128,7 @@ Target Profile:
|
|
|
128
128
|
|
|
129
129
|
Recommendation:
|
|
130
130
|
Areas: D-code (primary)
|
|
131
|
-
Persona composition: challenger/Code (edge cases, security surface),
|
|
131
|
+
Persona composition: challenger/Code (edge cases, security surface), main-player (Heavy — performance, limits)
|
|
132
132
|
Scale: Minimum (2 — third persona adds minimal value for bash)
|
|
133
133
|
Prerequisites: none
|
|
134
134
|
```
|
|
@@ -145,7 +145,7 @@ Target Profile:
|
|
|
145
145
|
|
|
146
146
|
Recommendation:
|
|
147
147
|
Areas: D-code + phantom-quench (quantitative claims)
|
|
148
|
-
Persona composition: challenger (claim-evidence),
|
|
148
|
+
Persona composition: challenger (claim-evidence), expert (arXiv validity, web-grounded)
|
|
149
149
|
Scale: Minimum (3)
|
|
150
150
|
Prerequisites: phantom-quench recommended (novelty + citations)
|
|
151
151
|
```
|
|
@@ -167,11 +167,11 @@ Run multi-team? (a) Full panel (b) Claude sub-agents only (c) Skip to Area B
|
|
|
167
167
|
|
|
168
168
|
| Team | CLI | Personas | Dispatch method |
|
|
169
169
|
|---|---|---|---|
|
|
170
|
-
| T0 Claude | Agent sub-agent | hub-persona-auditor · challenger ·
|
|
171
|
-
| T1 Gemini | `gemini` pipe |
|
|
172
|
-
| T2 Copilot | `gh copilot suggest` |
|
|
173
|
-
| T3 Ollama | `ollama run` |
|
|
174
|
-
| T4 Codex | `npx @openai/codex exec` |
|
|
170
|
+
| T0 Claude | Agent sub-agent | hub-persona-auditor · challenger · expert | Agent() call |
|
|
171
|
+
| T1 Gemini | `gemini` pipe | beginner · main-player · challenger | `echo PROMPT \| gemini` |
|
|
172
|
+
| T2 Copilot | `gh copilot suggest` | challenger · expert | `gh copilot suggest -t shell` |
|
|
173
|
+
| T3 Ollama | `ollama run` | challenger | `ollama run llama3 PROMPT` |
|
|
174
|
+
| T4 Codex | `npx @openai/codex exec` | challenger · edge-case-hunter | `echo PROMPT \| npx @openai/codex exec -m gpt-5 -` |
|
|
175
175
|
|
|
176
176
|
### CLI detection bash
|
|
177
177
|
|
|
@@ -205,7 +205,7 @@ Claude blind spots (external-only findings):
|
|
|
205
205
|
|
|
206
206
|
Structural methods to reduce self-reference risk in Area B:
|
|
207
207
|
|
|
208
|
-
1. **Regular
|
|
208
|
+
1. **Regular adversarial attacks**: Area B once/month + `challenger` attack once/quarter. Route challenger → defense results directly into SKILL.md via steel-quench handoff after Area B ends.
|
|
209
209
|
2. **Direct external user validation**: Non-owner attempts install + invocation → collect reactions. (cascade β validated: first autonomous external run confirmed.)
|
|
210
210
|
3. **steel-quench integration**: After Area B ends, hand off challenger findings to `/steel-quench` for deeper adversarial review + SKILL.md inscription.
|
|
211
211
|
4. **Dual validation principle**: Internal validation (Area B) alone is insufficient — minimized only when combined with external install reaction collection or cross-model validation.
|
|
@@ -266,7 +266,7 @@ Findings format: `[judgment type · pattern · root cause · fix direction]`
|
|
|
266
266
|
|
|
267
267
|
### E-2 — Practitioner Confusion
|
|
268
268
|
|
|
269
|
-
Agent (
|
|
269
|
+
Agent (`beginner` brief): confusing items, fix suggestions more awkward than original, classification criteria consistency breaks.
|
|
270
270
|
|
|
271
271
|
Findings format: `[item · confusion cause · improvement direction]`
|
|
272
272
|
|
|
@@ -214,9 +214,9 @@ Default team-persona assignments:
|
|
|
214
214
|
|
|
215
215
|
| Team | CLI | Personas deployed |
|
|
216
216
|
|---|---|---|
|
|
217
|
-
| **T0 Claude** | Agent sub-agent (always present) | challenger · quench-challenger ·
|
|
218
|
-
| **T1 Gemini** | `gemini` pipe | devil ·
|
|
219
|
-
| **T2 Copilot** | `gh copilot suggest` | devil ·
|
|
217
|
+
| **T0 Claude** | Agent sub-agent (always present) | challenger · quench-challenger · expert |
|
|
218
|
+
| **T1 Gemini** | `gemini` pipe | devil · beginner · alternatives (challenger U1 lens) |
|
|
219
|
+
| **T2 Copilot** | `gh copilot suggest` | devil · expert |
|
|
220
220
|
| **T3 Ollama** | `ollama run {model}` | devil |
|
|
221
221
|
| **T4 Codex** | `npx @openai/codex exec` | devil · edge-case-hunter |
|
|
222
222
|
|
|
@@ -230,9 +230,9 @@ declare -A TEAM_RESULTS
|
|
|
230
230
|
if [[ " ${TEAMS[*]} " =~ " gemini " ]]; then
|
|
231
231
|
G_DEVIL=$(printf '[Devil] Adversarial reviewer, no prior context.\nFind 3 critical structural flaws — especially whether Done When criteria are binary and achievable.\nFormat: [issue · location · severity S/A/B]\n---\n%s' \
|
|
232
232
|
"$ARTIFACT_TAIL" | gemini 2>/dev/null) &
|
|
233
|
-
G_NEW=$(printf '[
|
|
233
|
+
G_NEW=$(printf '[Beginner] First-time user, zero background.\nFind 3 unclear or jargon-heavy points.\nFormat: [issue · location · severity]\n---\n%s' \
|
|
234
234
|
"$ARTIFACT_TAIL" | gemini 2>/dev/null) &
|
|
235
|
-
G_SKEP=$(printf '[
|
|
235
|
+
G_SKEP=$(printf '[Alternatives — challenger U1 lens] Pragmatic outsider.\nFind 3 "why not just X?" challenges.\nFormat: [issue · location · severity]\n---\n%s' \
|
|
236
236
|
"$ARTIFACT_TAIL" | gemini 2>/dev/null) &
|
|
237
237
|
wait
|
|
238
238
|
TEAM_RESULTS["gemini"]="$G_DEVIL
|
|
@@ -244,7 +244,7 @@ fi
|
|
|
244
244
|
if [[ " ${TEAMS[*]} " =~ " gh-copilot " ]]; then
|
|
245
245
|
GH_D=$(echo "[Devil] Find 3 critical flaws. Format: [issue · location · severity S/A/B]. Artifact: $ARTIFACT_TAIL" \
|
|
246
246
|
| gh copilot suggest -t shell 2>/dev/null) &
|
|
247
|
-
GH_E=$(echo "[
|
|
247
|
+
GH_E=$(echo "[Expert] Find 3 technical depth gaps. Format: [issue · location · severity]. Artifact: $ARTIFACT_TAIL" \
|
|
248
248
|
| gh copilot suggest -t shell 2>/dev/null) &
|
|
249
249
|
wait
|
|
250
250
|
TEAM_RESULTS["gh-copilot"]="$GH_D
|