@event4u/agent-config 7.0.2 → 7.2.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/.claude-plugin/marketplace.json +9 -1
- package/CHANGELOG.md +117 -0
- package/README.md +4 -2
- package/dist/agent-src/commands/council/default.md +28 -20
- package/dist/agent-src/commands/evals/fix.json +5 -1
- package/dist/agent-src/commands/fix/comments.md +101 -0
- package/dist/agent-src/commands/fix.md +5 -2
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +65 -0
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +68 -0
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +68 -0
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +62 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +59 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +8 -3
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +56 -0
- package/dist/agent-src/contexts/execution/subagent-routing.md +57 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +54 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +71 -0
- package/dist/agent-src/contexts/execution/verify-budget.md +50 -0
- package/dist/agent-src/rules/brand-source-of-truth.md +10 -0
- package/dist/agent-src/rules/delegation-policy.md +85 -0
- package/dist/agent-src/rules/design-fidelity.md +98 -0
- package/dist/agent-src/rules/domain-safety-pii.md +22 -0
- package/dist/agent-src/rules/legal-safety-floor.md +182 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +25 -22
- package/dist/agent-src/rules/output-discipline.md +85 -0
- package/dist/agent-src/rules/telegraph-speak.md +4 -1
- package/dist/agent-src/rules/token-budget-discipline.md +94 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +102 -15
- package/dist/agent-src/scripts/update_roadmap_progress.ts +30 -3
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +20 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +28 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +9 -0
- package/dist/agent-src/skills/contract-review/SKILL.md +125 -0
- package/dist/agent-src/skills/contract-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/dashboard-design/SKILL.md +21 -5
- package/dist/agent-src/skills/design-intelligence/SKILL.md +96 -0
- package/dist/agent-src/skills/design-review/SKILL.md +83 -0
- package/dist/agent-src/skills/design-system-capture/SKILL.md +234 -0
- package/dist/agent-src/skills/design-tokens/SKILL.md +1 -0
- package/dist/agent-src/skills/dpa-review/SKILL.md +130 -0
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +15 -4
- package/dist/agent-src/skills/fe-design/SKILL.md +98 -16
- package/dist/agent-src/skills/flux/SKILL.md +8 -0
- package/dist/agent-src/skills/iconography/SKILL.md +1 -0
- package/dist/agent-src/skills/laravel/SKILL.md +1 -0
- package/dist/agent-src/skills/legal-intake-triage/SKILL.md +128 -0
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +17 -0
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +101 -0
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +17 -0
- package/dist/agent-src/skills/livewire/SKILL.md +8 -0
- package/dist/agent-src/skills/nda-triage/SKILL.md +114 -0
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +17 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +21 -9
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
- package/dist/agent-src/skills/recursive-verification/SKILL.md +186 -0
- package/dist/agent-src/skills/roadmap-management/SKILL.md +17 -0
- package/dist/agent-src/skills/skill-writing/SKILL.md +18 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +11 -0
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +17 -7
- package/dist/agent-src/skills/typography-system/SKILL.md +14 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +9 -0
- package/dist/agent-src/templates/agent-settings.md +64 -19
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +362 -43
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +13 -5
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +56 -11
- package/dist/discovery/trust-report.md +7 -5
- package/dist/discovery/workspaces.json +38 -7
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/server/routes/wizard.js +4 -3
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/schemas/settings.js +23 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/{index-CoQo90sz.js → index-UjcTG_9O.js} +2 -2
- package/dist/ui/assets/index-UjcTG_9O.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/RELEASE_STORY_TEMPLATE.md +37 -0
- package/docs/architecture.md +4 -4
- package/docs/benchmark.md +46 -0
- package/docs/catalog.md +18 -6
- package/docs/command-flows.md +7 -1
- package/docs/contracts/ai-council-config.md +17 -10
- package/docs/contracts/audit-log-v1.md +7 -0
- package/docs/contracts/auto-orchestration-v1.md +70 -0
- package/docs/contracts/capability-boundary.md +64 -0
- package/docs/contracts/command-clusters.md +1 -1
- package/docs/contracts/discovery-manifest.schema.json +2 -2
- package/docs/contracts/package-self-orientation.md +3 -0
- package/docs/contracts/subagent-boundary.md +54 -0
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +32 -0
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +13 -6
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +11 -1
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +10 -4
- package/docs/decisions/ADR-104-ai-council-config-global-only.md +119 -0
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +102 -0
- package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +126 -0
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +70 -0
- package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +46 -0
- package/docs/decisions/INDEX.md +5 -0
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/docs/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/docs/guidelines/design-antipatterns-triggers.json +17 -0
- package/docs/guidelines/design-antipatterns.md +170 -0
- package/docs/guidelines/design-modes.md +97 -0
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +103 -3
- package/src/config/discovery/packs.yml +24 -0
- package/src/config/discovery/workspaces.yml +7 -0
- package/src/scripts/_lib/auto_dispatch.ts +95 -0
- package/src/scripts/_lib/host_capability.ts +59 -0
- package/src/scripts/_lib/orchestration_gate.ts +98 -0
- package/src/scripts/_lib/subagent_bundle.ts +154 -0
- package/src/scripts/_lib/subagent_response.ts +82 -0
- package/src/scripts/_lib/subagent_routing.ts +81 -0
- package/src/scripts/_lib/subagent_spawn.ts +97 -0
- package/src/scripts/_lib/subagent_steering.ts +64 -0
- package/src/scripts/_lib/verify_budget.ts +54 -0
- package/src/scripts/ai_council/advisors.ts +4 -2
- package/src/scripts/ai_council/clients.ts +7 -1
- package/src/scripts/ai_council/config.ts +22 -17
- package/src/scripts/bench_ab_v2_run.ts +127 -0
- package/src/scripts/bench_ab_v2_stats.ts +39 -0
- package/src/scripts/check_council_config_location.ts +6 -5
- package/src/scripts/check_trunk_drift.ts +67 -0
- package/src/scripts/lint_design_quality.ts +321 -0
- package/src/scripts/lint_discovery_vocabulary.ts +6 -0
- package/src/scripts/lint_framework_leakage_allowlist.json +21 -0
- package/src/scripts/lint_legal_pack.ts +197 -0
- package/src/scripts/lint_output_slop.ts +223 -0
- package/src/scripts/lint_pack_risk_class.ts +79 -0
- package/src/scripts/probe_projection_fidelity.ts +7 -1
- package/src/scripts/schemas/agent-settings.schema.json +23 -0
- package/src/scripts/schemas/skill.schema.json +5 -0
- package/src/scripts/skill_linter.ts +3 -0
- package/dist/ui/assets/index-CoQo90sz.js.map +0 -1
|
@@ -34,9 +34,15 @@ wraps `npx shadcn@latest add <components>` — **the only subprocess+network
|
|
|
34
34
|
surface in the adopted suite**. Per `runtime-safety` + the `execution`
|
|
35
35
|
block above:
|
|
36
36
|
|
|
37
|
-
1. **Propose, never silent-run** — show exact `npx` command +
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
1. **Propose, never silent-run** — always show the exact `npx` command +
|
|
38
|
+
component list first (use `--dry-run`); the user confirms before any
|
|
39
|
+
live run.
|
|
40
|
+
2. **Missing tool** → per `missing-tool-handling`: if `npx`/Node is
|
|
41
|
+
absent, STOP and ask (install vs. manual component copy) — never
|
|
42
|
+
silently work around.
|
|
43
|
+
3. **Verify after run** — confirm the component landed
|
|
44
|
+
(`components/ui/<name>.tsx` exists, `components.json` unchanged or
|
|
45
|
+
sanely updated) before reporting success.
|
|
40
46
|
|
|
41
47
|
## Compatibility
|
|
42
48
|
|
|
@@ -82,13 +88,19 @@ Do NOT use when:
|
|
|
82
88
|
the generated primitives but is easy to remove during a refactor.
|
|
83
89
|
- **Anti-AI-slop: shadcn-default look.** The out-of-the-box shadcn
|
|
84
90
|
theme + `Inter`-as-system-fallback + neutral grays reads as
|
|
85
|
-
template across projects. Unless
|
|
86
|
-
pins the neutral palette as the
|
|
87
|
-
step should match typography and color
|
|
88
|
-
brief's `aesthetic:` line (from `fe-design`
|
|
89
|
-
Theme/font drift within a single audited project
|
|
90
|
-
consistency — variation lives between projects, not between
|
|
91
|
+
template across projects (catalog T7/T8 + C5). Unless
|
|
92
|
+
`state.ui_audit.design_tokens` pins the neutral palette as the
|
|
93
|
+
project's identity, the polish step should match typography and color
|
|
94
|
+
tokens to the design brief's `aesthetic:` line (from `fe-design`
|
|
95
|
+
aesthetic-direction). Theme/font drift within a single audited project
|
|
96
|
+
breaks consistency — variation lives between projects, not between
|
|
91
97
|
components in the same surface.
|
|
98
|
+
- **Anti-AI-slop catalog + linter.** Pull
|
|
99
|
+
[`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
|
|
100
|
+
before the polish step (Visual V1–V7, Layout L1–L8 are the React-component
|
|
101
|
+
slop tells); the objective quality floors (WCAG contrast, focus-visible,
|
|
102
|
+
reduced-motion) are CI-enforced by
|
|
103
|
+
[`lint_design_quality`](../../../src/scripts/lint_design_quality.ts).
|
|
92
104
|
|
|
93
105
|
## Covered primitives
|
|
94
106
|
|
|
@@ -78,7 +78,9 @@ Each link **delegates** to the artifact that owns it (no duplication):
|
|
|
78
78
|
the response ([`notes-first-reasoning`](../../rules/notes-first-reasoning.md)).
|
|
79
79
|
4. **gather** — resolve the load-bearing unknown first
|
|
80
80
|
([`complexity-first-planning`](../complexity-first-planning/SKILL.md)); dispatch
|
|
81
|
-
independent subtasks async ([`subagent-orchestration` § RDP](../subagent-orchestration/SKILL.md))
|
|
81
|
+
independent subtasks async ([`subagent-orchestration` § RDP](../subagent-orchestration/SKILL.md)),
|
|
82
|
+
settings-gated per [`auto-orchestration-activation`](../../contexts/execution/auto-orchestration-activation.md)
|
|
83
|
+
(`subagents.enabled`/`auto` + host manifest).
|
|
82
84
|
5. **audit** — check progress against real tool results
|
|
83
85
|
([`verify-before-complete`](../../rules/verify-before-complete.md)).
|
|
84
86
|
6. **verify** — fresh-context verifier on the structural-complexity gate
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: inherit
|
|
3
|
+
name: recursive-verification
|
|
4
|
+
description: "Use to run a depth-bounded self-correction loop (attempt → critic verdict → re-attempt) as a tunable test-time compute knob — a do-and-judge specialisation, default off, capability-gated."
|
|
5
|
+
domain: process
|
|
6
|
+
workspaces:
|
|
7
|
+
- agent-config-maintainer
|
|
8
|
+
packs:
|
|
9
|
+
- meta
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# recursive-verification
|
|
13
|
+
|
|
14
|
+
## When to use
|
|
15
|
+
|
|
16
|
+
* A first attempt at a bounded task may be improvable by feeding the
|
|
17
|
+
attempt plus an explicit critic verdict back into a corrective
|
|
18
|
+
re-attempt — and the extra compute is justified by the task's value.
|
|
19
|
+
* You want **depth** (number of correction rounds) to be an explicit
|
|
20
|
+
compute knob, not an open-ended loop.
|
|
21
|
+
* The shipped default (`verification.recursive`) is not `off` for the
|
|
22
|
+
active host, or the user asks for an extra self-correction pass.
|
|
23
|
+
|
|
24
|
+
Do NOT use when:
|
|
25
|
+
|
|
26
|
+
* The task is trivial — a one-liner, a rename, a format fix. The loop's
|
|
27
|
+
cost dwarfs any gain (the package's A/B bench measured ~11× tokens for
|
|
28
|
+
a single wrapper pass; recursion multiplies that per depth level).
|
|
29
|
+
* The host already one-shots the task. On a strong host with no headroom
|
|
30
|
+
a second pass only adds cost (see `docs/benchmark.md`: strong-host
|
|
31
|
+
discipline lift is null).
|
|
32
|
+
* You are chasing **model intelligence**. This transfers a test-time
|
|
33
|
+
*compute* pattern, not capability — it cannot make a model smarter than
|
|
34
|
+
its weights, and it implies **no** comparison to any frontier model.
|
|
35
|
+
* Budget is the constraint, or `verification.recursive: off` for this host.
|
|
36
|
+
|
|
37
|
+
## Goal
|
|
38
|
+
|
|
39
|
+
Land a verified result by running a depth-bounded
|
|
40
|
+
`attempt → critic verdict → conditional re-attempt` loop, with depth as
|
|
41
|
+
the only compute knob, every level budgeted, and the loop default-off
|
|
42
|
+
until a benchmark gate authorises it per host.
|
|
43
|
+
|
|
44
|
+
## The Iron Law
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
A CROSS-MODEL CRITIC NEVER RUNS ON THE SAME MODEL + CONTEXT AS THE ATTEMPT.
|
|
48
|
+
SAME-MODEL SELF-CRITIQUE IS A DISCIPLINE PASS ONLY — NEVER A CAPABILITY CLAIM.
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Inherited from [`subagent-orchestration`](../subagent-orchestration/SKILL.md):
|
|
52
|
+
same model + same context = same blind spots. A same-model self-critique
|
|
53
|
+
at depth 1 is allowed **only** when explicitly flagged as a *discipline*
|
|
54
|
+
(not capability) pass — it can catch a skipped step or a scope-creep, but
|
|
55
|
+
it shares the attempt's blind spots and must never be sold as a capability
|
|
56
|
+
lift. Cross-model recursion (a different vendor as critic) is the
|
|
57
|
+
cross-vendor variant and obeys the Iron Law by construction
|
|
58
|
+
(critic model ≠ attempt model).
|
|
59
|
+
|
|
60
|
+
## The loop
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
attempt₀
|
|
64
|
+
→ critic verdict (accept | revise: <reason>)
|
|
65
|
+
→ accept → done
|
|
66
|
+
→ revise → attempt₁ (reads attempt₀ + the verdict as context)
|
|
67
|
+
→ critic verdict
|
|
68
|
+
→ … → depthₙ
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Each level reads **only** the prior attempt plus the critic's verdict —
|
|
72
|
+
never the full history — mirroring the read-your-own-output-and-decide
|
|
73
|
+
pattern. Depth `n` is the tunable compute knob, hard-capped by
|
|
74
|
+
`verification.max_depth`.
|
|
75
|
+
|
|
76
|
+
## Deterministic stop conditions
|
|
77
|
+
|
|
78
|
+
The loop stops at the first of:
|
|
79
|
+
|
|
80
|
+
1. **`accept`** — the critic accepts the attempt.
|
|
81
|
+
2. **`max_depth` reached** — `verification.max_depth` (default `1`).
|
|
82
|
+
3. **`verify-budget` exhausted** — each re-attempt is one budgeted unit
|
|
83
|
+
per [`verify-budget`](../../contexts/execution/verify-budget.md); a
|
|
84
|
+
required-but-unrun verification is a surfaced safety gap, never a
|
|
85
|
+
silent pass.
|
|
86
|
+
4. **No-progress floor** — two consecutive attempts score identical on
|
|
87
|
+
the deterministic scorer; further depth cannot help, so stop.
|
|
88
|
+
|
|
89
|
+
Stop conditions are deterministic so the loop can never run unbounded —
|
|
90
|
+
there is no open-ended "keep trying" branch.
|
|
91
|
+
|
|
92
|
+
## Settings
|
|
93
|
+
|
|
94
|
+
Configured in `.agent-settings.yml`; documented in
|
|
95
|
+
[`agent-settings`](../../templates/agent-settings.md):
|
|
96
|
+
|
|
97
|
+
| Key | Default | Effect |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `verification.recursive` | `off` | `off` = inert; `ask` = ask once before looping; `on` = loop silently up to `max_depth`. |
|
|
100
|
+
| `verification.max_depth` | `1` | Hard cap on correction rounds. `1` = a single critic pass (effectively inert beyond one review) until a benchmark gate authorises more. |
|
|
101
|
+
|
|
102
|
+
Ships `off`. The per-host shipped default flips only on a passing
|
|
103
|
+
capability-axis benchmark cell (see Procedure step 4); an honest-null
|
|
104
|
+
keeps it `off`.
|
|
105
|
+
|
|
106
|
+
## Procedure
|
|
107
|
+
|
|
108
|
+
### 1. Gate on settings + task shape
|
|
109
|
+
|
|
110
|
+
Resolve `verification.recursive` for the active host. `off` → no-op.
|
|
111
|
+
Confirm the task is non-trivial (above the `verify-budget` change-size
|
|
112
|
+
floor) and that the host plausibly has headroom — skip otherwise.
|
|
113
|
+
|
|
114
|
+
### 2. Resolve the critic
|
|
115
|
+
|
|
116
|
+
Read `.agent-settings.yml` (`subagents.judge_model`). A cross-model
|
|
117
|
+
critic must satisfy the Iron Law. A same-model depth-1 pass is allowed
|
|
118
|
+
only when explicitly flagged as a discipline pass; surface that framing.
|
|
119
|
+
|
|
120
|
+
### 3. Run the loop
|
|
121
|
+
|
|
122
|
+
Run `attempt → verdict → conditional re-attempt`, counting each
|
|
123
|
+
re-attempt against `verify-budget`, until a deterministic stop condition
|
|
124
|
+
fires. Under `verification.recursive: on` surface depth + spend in one
|
|
125
|
+
line; under `ask`, ask once before the first re-attempt.
|
|
126
|
+
|
|
127
|
+
### 4. Honour the benchmark gate
|
|
128
|
+
|
|
129
|
+
The shipped default is set by the `bench:ab` gate
|
|
130
|
+
([`orchestration-benchmark-gate`](../../contexts/execution/orchestration-benchmark-gate.md),
|
|
131
|
+
`gateVerdict` / `resolveShippedDefault`): `on`/`ask` only on a host whose
|
|
132
|
+
**capability-axis** cell passed; `off` otherwise. A discipline-only lift
|
|
133
|
+
does not authorise a flip — that question is already answered by the
|
|
134
|
+
existing rules. Never flip a default without its own passing cell.
|
|
135
|
+
|
|
136
|
+
### 5. Report
|
|
137
|
+
|
|
138
|
+
Follow the output format. Never present a recursion result as a
|
|
139
|
+
capability gain or a frontier-model comparison.
|
|
140
|
+
|
|
141
|
+
## Gotcha
|
|
142
|
+
|
|
143
|
+
* **Recursion as discipline duplicate** — if the only lift is on the
|
|
144
|
+
discipline axis, recursion duplicates rules the package already ships,
|
|
145
|
+
at multiplied cost. Surface it; do not ship a redundant expensive loop.
|
|
146
|
+
* **Unbounded loop** — there is no open-ended branch; the four stop
|
|
147
|
+
conditions are deterministic and the depth cap is hard.
|
|
148
|
+
* **Same-model self-praise** — a same-model critic shares the attempt's
|
|
149
|
+
blind spots and tends to accept; treat depth-1 same-model passes as a
|
|
150
|
+
discipline check only, never as independent verification.
|
|
151
|
+
* **Cost surprise** — depth multiplies the per-pass token cost; confirm
|
|
152
|
+
budget before raising `max_depth` above 1.
|
|
153
|
+
* **Strong-host no-op** — on a host that one-shots the task, every extra
|
|
154
|
+
depth level is pure cost; the benchmark gate keeps the default `off`
|
|
155
|
+
there.
|
|
156
|
+
|
|
157
|
+
## Output format
|
|
158
|
+
|
|
159
|
+
1. **Depth reached** — the number of correction rounds run, and which
|
|
160
|
+
stop condition fired (`accept` / `max_depth` / `budget` / `no-progress`).
|
|
161
|
+
2. **Critic pairing** — attempt model / critic model (resolved), and
|
|
162
|
+
whether it was a cross-model or same-model discipline pass.
|
|
163
|
+
3. **Verdict** — accepted attempt vs. handed back, with the budget spent.
|
|
164
|
+
4. **Evidence** — per-depth scorer/verdict trail, never framed as a
|
|
165
|
+
capability or frontier-model comparison.
|
|
166
|
+
|
|
167
|
+
## Do NOT
|
|
168
|
+
|
|
169
|
+
* NEVER claim recursion makes the host model more capable or "closer to"
|
|
170
|
+
any frontier model — it is a test-time compute pattern, not intelligence.
|
|
171
|
+
* NEVER run an open-ended loop — `max_depth` and the stop conditions are
|
|
172
|
+
hard caps.
|
|
173
|
+
* NEVER treat a same-model self-critique as independent verification.
|
|
174
|
+
* NEVER flip the shipped default without a passing capability-axis gate
|
|
175
|
+
cell for that host.
|
|
176
|
+
* NEVER skip a required verification silently — surface it as a safety gap.
|
|
177
|
+
|
|
178
|
+
## Handover
|
|
179
|
+
|
|
180
|
+
| Task | Skill / context |
|
|
181
|
+
|---|---|
|
|
182
|
+
| Mode selection, the judge Iron Law | [`subagent-orchestration`](../subagent-orchestration/SKILL.md) |
|
|
183
|
+
| Per-pass cost budgeting | [`verify-budget`](../../contexts/execution/verify-budget.md) |
|
|
184
|
+
| Shipped-default gate mechanism | [`orchestration-benchmark-gate`](../../contexts/execution/orchestration-benchmark-gate.md) |
|
|
185
|
+
| Cross-vendor critic (different vendor) | [`ai-council`](../ai-council/SKILL.md) |
|
|
186
|
+
| Completion evidence | [`verify-completion-evidence`](../verify-completion-evidence/SKILL.md) |
|
|
@@ -43,6 +43,23 @@ rule. Batching multiple edits in one response is fine — one final
|
|
|
43
43
|
regeneration before replying is enough. But the response must not end
|
|
44
44
|
without it.
|
|
45
45
|
|
|
46
|
+
### Archival — preferred sweep, untracked-safe manual fallback
|
|
47
|
+
|
|
48
|
+
Robust path: `archive_completed_roadmaps --all` — detects complete
|
|
49
|
+
(`count_open == 0`, `count_deferred == 0`), moves to `agents/roadmaps/archive/`
|
|
50
|
+
(`git mv` tracked, plain `mv` untracked / no-commit), rewrites inbound refs,
|
|
51
|
+
regens dashboard. PR-independent.
|
|
52
|
+
|
|
53
|
+
**Manual fallback (script not vendored)** — same response, never leave a
|
|
54
|
+
100 %-complete roadmap active because `git mv` failed:
|
|
55
|
+
|
|
56
|
+
1. `mkdir -p agents/roadmaps/archive`.
|
|
57
|
+
2. `git mv agents/roadmaps/<x>.md agents/roadmaps/archive/<x>.md` (tracked); plain
|
|
58
|
+
`mv` if untracked / no commits.
|
|
59
|
+
3. Rewrite inbound `agents/roadmaps/<x>.md` → `agents/roadmaps/archive/<x>.md`
|
|
60
|
+
across the tree (working tree, not just index, when untracked).
|
|
61
|
+
4. Regenerate `agents/roadmaps-progress.md`.
|
|
62
|
+
|
|
46
63
|
## Procedure: Manage a roadmap
|
|
47
64
|
|
|
48
65
|
1. **Identify need** — Is this a multi-step change that spans sessions or agents?
|
|
@@ -121,6 +121,24 @@ Then run the Understand → Research → Draft sequence from the
|
|
|
121
121
|
rule. Skip only on explicit *"just do it"* bypass or trivial edits
|
|
122
122
|
(typo, link, single-line clarification).
|
|
123
123
|
|
|
124
|
+
### 0b. Skill-growth gate (new skill only)
|
|
125
|
+
|
|
126
|
+
The skill count keeps climbing; nothing forces *"should this be a new skill at
|
|
127
|
+
all?"*. Before creating a **new** skill, answer these in the PR body — a new
|
|
128
|
+
skill that cannot answer them is a merge / guideline / no-op in disguise:
|
|
129
|
+
|
|
130
|
+
1. **Family** — which capability family does it join? (engineering, product, …)
|
|
131
|
+
2. **Capability** — what does it do that no existing skill does? Name the gap.
|
|
132
|
+
3. **Why not extend / merge** — which nearest skill did you consider folding into, and why is a separate skill better?
|
|
133
|
+
4. **Why not a guideline** — is this executable workflow (skill) or reference material (guideline)? Guideline-shaped content does not become a skill.
|
|
134
|
+
5. **Visibility tier** — `core` or `lab`? Which pack?
|
|
135
|
+
|
|
136
|
+
**Surface overlap before deciding** — run `./scripts-run src/scripts/skill_overlap`
|
|
137
|
+
(or `audit_skill_overlap`) and read the nearest matches; a high-overlap hit is a
|
|
138
|
+
merge signal, not a green light. This gate is the authoring-time companion to the
|
|
139
|
+
[capability-boundary matrix](../../../docs/contracts/capability-boundary.md): the
|
|
140
|
+
matrix governs packs, this governs the skills inside them.
|
|
141
|
+
|
|
124
142
|
### 1. Define the trigger
|
|
125
143
|
|
|
126
144
|
Write "When to use" first. This is the in-body trigger — it documents the
|
|
@@ -56,6 +56,16 @@ parallel subagents **by default** and keep working while they run (async), rathe
|
|
|
56
56
|
than blocking on each return — intervene only if one goes off track. Engage per
|
|
57
57
|
[`rdp-gate`](../../contexts/execution/rdp-gate.md).
|
|
58
58
|
|
|
59
|
+
### Settings-gated auto-dispatch
|
|
60
|
+
|
|
61
|
+
"By default" is governed by the [`delegation-policy`](../../rules/delegation-policy.md)
|
|
62
|
+
rule — the single source of the auto-trigger. It gates on the activation context
|
|
63
|
+
([`auto-orchestration-activation`](../../contexts/execution/auto-orchestration-activation.md)):
|
|
64
|
+
dispatch only when `subagents.enabled`, `subagents.auto != off`, the host
|
|
65
|
+
manifest reports `subagent_spawn: true`, and the task is classified delegable.
|
|
66
|
+
`auto: ask` → ask once; `auto: on` → surface mode + per-subtask tiers in one
|
|
67
|
+
line; any gate failing → in-session no-op. Never lifts a safety floor.
|
|
68
|
+
|
|
59
69
|
## The seven modes
|
|
60
70
|
|
|
61
71
|
Each mode has a decision row: when to use, when not, and the expected
|
|
@@ -354,3 +364,4 @@ the judge verdict.
|
|
|
354
364
|
| Standalone judge on an existing diff | [`/judge`](../../commands/judge.md) |
|
|
355
365
|
| External / networked second opinion | [`ai-council`](../ai-council/SKILL.md) |
|
|
356
366
|
| Verifying completeness | [`verify-before-complete`](../verify-before-complete/SKILL.md) |
|
|
367
|
+
| What a subagent owns vs never owns | [`subagent-boundary`](../../../docs/contracts/subagent-boundary.md) |
|
|
@@ -51,11 +51,13 @@ radius, spacing, shadow, font-size to a configured token. If the design hands yo
|
|
|
51
51
|
(`bg-[#3B82F6]`, `mt-[17px]`) are a smell — accept only with a
|
|
52
52
|
one-line comment naming the design source.
|
|
53
53
|
|
|
54
|
-
Token authoring (DTCG 3-layer, CSS-var/Tailwind generation)
|
|
55
|
-
[`design-tokens`](../design-tokens/SKILL.md); its
|
|
56
|
-
--dir <path>` is the **single token-discipline
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
Token authoring (DTCG 3-layer model, CSS-var/Tailwind generation) lives
|
|
55
|
+
in [`design-tokens`](../design-tokens/SKILL.md); its
|
|
56
|
+
`tokens.py validate --dir <path>` is the **single token-discipline
|
|
57
|
+
linter** — the mechanical check behind this rule (no hardcoded hex / px /
|
|
58
|
+
rem outside the token files). Greenfield Tailwind config: bundled
|
|
59
|
+
`scripts/tailwind_config_gen.py` (Apache-2.0-derived, pure templating)
|
|
60
|
+
scaffolds `tailwind.config.{js,ts}` per framework.
|
|
59
61
|
|
|
60
62
|
### 2. Compose, don't inline
|
|
61
63
|
|
|
@@ -127,10 +129,18 @@ Risks: <arbitrary values, !important, dark-mode gaps>
|
|
|
127
129
|
break the design system; they accumulate silently.
|
|
128
130
|
- `@apply` inside component CSS interacts with PurgeCSS — keep it
|
|
129
131
|
in files Tailwind scans, not in vendor CSS.
|
|
132
|
+
- **Anti-AI-slop catalog.** The bullets below are the Tailwind-specific
|
|
133
|
+
manifestations of the stack-agnostic patterns in
|
|
134
|
+
[`docs/guidelines/design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
|
|
135
|
+
(C1 gradients, T7 fonts, L1/L2 layout, V1 side-stripe). Pull the catalog
|
|
136
|
+
for the full list; the objective subset (contrast, font-size floor,
|
|
137
|
+
reduced-motion) is CI-enforced by
|
|
138
|
+
[`lint_design_quality`](../../../src/scripts/lint_design_quality.ts) for
|
|
139
|
+
consumer projects.
|
|
130
140
|
- **Anti-AI-slop: gradients.** Unless audit-pinned or brief-explicit,
|
|
131
141
|
avoid the default purple-to-blue / cyan-to-pink gradients on white —
|
|
132
|
-
they read as auto-generated. Reach for a single accent
|
|
133
|
-
token map, or a duotone built from configured tokens.
|
|
142
|
+
they read as auto-generated (catalog C1/C2). Reach for a single accent
|
|
143
|
+
from the token map, or a duotone built from configured tokens.
|
|
134
144
|
- **Anti-AI-slop: typography.** Unless audit-pinned, avoid surfacing
|
|
135
145
|
the system stack (`font-sans` fallback to Arial / Helvetica / Inter
|
|
136
146
|
via system defaults) as the *visible* body face. If `tailwind.config`
|
|
@@ -8,6 +8,7 @@ workspaces:
|
|
|
8
8
|
- engineering
|
|
9
9
|
packs:
|
|
10
10
|
- frontend-design
|
|
11
|
+
token_budget_class: rich
|
|
11
12
|
trust:
|
|
12
13
|
level: professional
|
|
13
14
|
install:
|
|
@@ -136,3 +137,16 @@ brand already registers fonts, use them and skip the filter.
|
|
|
136
137
|
consumes the token system produced here.
|
|
137
138
|
- [`brand`](../brand/SKILL.md) — supplies the archetype → pairing-filter
|
|
138
139
|
Grounding (`typography` domain) consumed by stage 2.
|
|
140
|
+
|
|
141
|
+
## Why this skill is rich
|
|
142
|
+
|
|
143
|
+
Typography is one of the highest-leverage design decisions and one of the
|
|
144
|
+
most commonly mis-applied by AI agents (defaulting to Inter + arbitrary sizes).
|
|
145
|
+
The skill carries 73 curated font pairings (heading + body + mono combinations
|
|
146
|
+
with Google Fonts URLs and Tailwind config), 6 worked-through modular-scale
|
|
147
|
+
examples across different use-cases (marketing, dashboard, docs, e-commerce,
|
|
148
|
+
SaaS, editorial), and per-pairing line-height + weight guidance. Condensing
|
|
149
|
+
to "use a 1.25 modular scale" loses the worked examples that teach agents
|
|
150
|
+
the difference between a 14/17.5/21.8/27.2 rounded scale and an invented
|
|
151
|
+
arbitrary scale. Without the worked examples, agents produce: 16, 20, 24, 28
|
|
152
|
+
(arbitrary) instead of a properly grounded typographic system.
|
|
@@ -144,6 +144,15 @@ Anti-cases: <combinations the component refuses to support>
|
|
|
144
144
|
every render, the child re-renders too. Stabilize via
|
|
145
145
|
`useCallback` or hoist.
|
|
146
146
|
|
|
147
|
+
## Cross-task design memory
|
|
148
|
+
|
|
149
|
+
Before proposing a component, check the project root for `DESIGN.md`
|
|
150
|
+
(written by `design-system-capture`). If present, apply its captured
|
|
151
|
+
visual conventions (radius/shadow/motion/spacing) to the new component
|
|
152
|
+
rather than deriving them from scratch. Flag any new design decision
|
|
153
|
+
(e.g., a first-use of a new elevation tier) for capture:
|
|
154
|
+
*"Suggest adding to DESIGN.md: [decision]."*
|
|
155
|
+
|
|
147
156
|
## Do NOT
|
|
148
157
|
|
|
149
158
|
- Do NOT design a component without running
|
|
@@ -59,6 +59,20 @@ made by the user directly or by the agent on request, following the
|
|
|
59
59
|
# custom = ignore profile — every matrix value must be set explicitly.
|
|
60
60
|
rule_loading_tier: balanced
|
|
61
61
|
|
|
62
|
+
# --- Per-skill model auto-switch (ADR-035) ---
|
|
63
|
+
# Skills declare a vendor-neutral `model_tier` (lite|medium|high); the generator
|
|
64
|
+
# maps it to a native Claude model (high→opus, medium→sonnet, lite→haiku).
|
|
65
|
+
# suggest = (default) never emit a native Claude `model:` key; the
|
|
66
|
+
# model-recommendation rule names the tier as a one-question
|
|
67
|
+
# suggestion on every surface. Your explicit /model choice is
|
|
68
|
+
# never silently overridden.
|
|
69
|
+
# auto = render a native Claude `model:` into lite/medium/high-tier skills
|
|
70
|
+
# so Claude Code switches automatically for that turn (reverts on
|
|
71
|
+
# the next prompt); suggest on surfaces without a native override.
|
|
72
|
+
# off = inert — no native key, no suggestion.
|
|
73
|
+
model:
|
|
74
|
+
auto_switch: suggest
|
|
75
|
+
|
|
62
76
|
# --- Personal preferences ---
|
|
63
77
|
personal:
|
|
64
78
|
# IDE to use for opening files (code, phpstorm, cursor)
|
|
@@ -209,14 +223,20 @@ pipelines:
|
|
|
209
223
|
# response — that cadence is governed by `roadmap-progress-sync` and
|
|
210
224
|
# is non-negotiable. This setting only governs *quality tool runs*.
|
|
211
225
|
roadmap:
|
|
212
|
-
# Skip the
|
|
213
|
-
#
|
|
214
|
-
#
|
|
215
|
-
#
|
|
216
|
-
#
|
|
217
|
-
#
|
|
218
|
-
#
|
|
219
|
-
#
|
|
226
|
+
# Skip the pre-run confirmation gate when /roadmap:process-step|phase|full
|
|
227
|
+
# is invoked (true, false).
|
|
228
|
+
# true = default. The command name itself names the scope; if a
|
|
229
|
+
# single active roadmap is discoverable (or the user named
|
|
230
|
+
# one), the loop starts immediately. The resolved roadmap /
|
|
231
|
+
# cadence / council setting are surfaced inline as a one-shot
|
|
232
|
+
# note so an unwanted pick can still be aborted mid-stream.
|
|
233
|
+
# false = legacy. The loop shows the pre-run summary with numbered
|
|
234
|
+
# options (Go / Different roadmap / Different scope / Toggle
|
|
235
|
+
# council / Abort) and waits for input.
|
|
236
|
+
# The gate is still shown — regardless of this flag — when the roadmap
|
|
237
|
+
# is ambiguous (multiple active, none named) or a scope / cadence
|
|
238
|
+
# conflict has no sensible default. The flag suppresses the
|
|
239
|
+
# confirmation, never a genuine "which roadmap?" question.
|
|
220
240
|
skip_pre_run_gate: true
|
|
221
241
|
|
|
222
242
|
# When to run quality tools during /roadmap:process-step|phase|full.
|
|
@@ -257,6 +277,23 @@ subagents:
|
|
|
257
277
|
# Set to 1 to serialize. Hard cap enforced by runtime.
|
|
258
278
|
max_parallel: 3
|
|
259
279
|
|
|
280
|
+
# --- Recursive self-verification (see skills/recursive-verification) ---
|
|
281
|
+
verification:
|
|
282
|
+
# off | ask | on (default: off)
|
|
283
|
+
# Depth-bounded self-correction loop (attempt -> critic verdict ->
|
|
284
|
+
# conditional re-attempt) as a tunable test-time compute knob.
|
|
285
|
+
# off = inert; ask = ask once before looping; on = loop up to max_depth.
|
|
286
|
+
# The shipped per-host default flips off -> on/ask ONLY on a passing
|
|
287
|
+
# capability-axis bench:ab gate cell (orchestration-benchmark-gate);
|
|
288
|
+
# a discipline-only or honest-null result keeps it off.
|
|
289
|
+
recursive: off
|
|
290
|
+
|
|
291
|
+
# Hard cap on correction rounds (integer, default 1).
|
|
292
|
+
# 1 = a single critic pass (effectively inert beyond one review) until
|
|
293
|
+
# a benchmark gate authorises deeper recursion. Each level is one
|
|
294
|
+
# verify-budget unit; the loop also stops on accept / no-progress.
|
|
295
|
+
max_depth: 1
|
|
296
|
+
|
|
260
297
|
# --- Git worktrees ---
|
|
261
298
|
worktrees:
|
|
262
299
|
# off | on | ask (default: ask)
|
|
@@ -432,18 +469,26 @@ telemetry:
|
|
|
432
469
|
path: .agent-engagement.jsonl
|
|
433
470
|
|
|
434
471
|
# --- Linked projects (cross-repo awareness, local-only) ---
|
|
435
|
-
#
|
|
436
|
-
#
|
|
437
|
-
#
|
|
438
|
-
#
|
|
439
|
-
#
|
|
440
|
-
#
|
|
441
|
-
#
|
|
442
|
-
#
|
|
472
|
+
#
|
|
473
|
+
# Sibling repositories the IDE has attached to this project (PhpStorm
|
|
474
|
+
# .idea/modules.xml + vcs.xml, VS Code *.code-workspace). When a sibling is
|
|
475
|
+
# opted in, the agent proactively considers cross-repo impact (API contract /
|
|
476
|
+
# shared-type changes) and warns — it does NOT bulk-include the sibling's
|
|
477
|
+
# files. See docs/guides/cross-repo-linked-projects.md and ADR-032.
|
|
478
|
+
#
|
|
479
|
+
# THIS KEY BELONGS IN `.agent-settings.local.yml` (in agents/settings/) (the per-machine, gitignored
|
|
480
|
+
# override layer), NOT in the committed `.agent-settings.yml`: sibling paths
|
|
481
|
+
# differ per developer and must never be committed. Each entry:
|
|
482
|
+
# - path: absolute path to the sibling repo root (auto-filled by detection)
|
|
483
|
+
# - include: true = in scope (proactive awareness); false = declined, never
|
|
484
|
+
# re-prompted.
|
|
485
|
+
# Detection auto-skips bloat dirs (node_modules/.git/dist/build/.venv/target);
|
|
486
|
+
# a sibling over `max_files` is flagged `large` (awareness only), never excluded.
|
|
443
487
|
linked_projects: []
|
|
444
488
|
# - path: /abs/path/to/sibling-repo
|
|
445
489
|
# include: true
|
|
446
|
-
|
|
490
|
+
# Optional ceiling for the `large` flag (does not exclude). Default 20000.
|
|
491
|
+
linked_projects_max_files: 20000
|
|
447
492
|
```
|
|
448
493
|
|
|
449
494
|
## Settings Reference
|
|
@@ -468,7 +513,7 @@ the canonical narrative lives in
|
|
|
468
513
|
| `personal.minimal_output` | `true`, `false` | `true` | When `true`: short bullet points during work, concise summary at end. When `false`: verbose explanations. |
|
|
469
514
|
| `personal.play_by_play` | `true`, `false` | `false` | When `true`: share intermediate findings during investigation. When `false`: work silently, report only the conclusion. |
|
|
470
515
|
| `personal.pr_comment_bot_icon` | `true`, `false` | `false` | Prefix PR comment replies with 🤖 to indicate bot-authored replies. Personal preference — each developer decides. |
|
|
471
|
-
| `personal.autonomy` | `on`, `off`, `auto` | `auto` | Suppress trivial workflow questions and act on the obvious next step. `auto` defaults to `off` but flips to `on` after a prose opt-in like "arbeite selbstständig". `on` suppresses trivial questions unconditionally. Blocking decisions (security, scope expansion, push/merge/branch/PR/tag) are never suppressed. See `rules/autonomous-execution.md`. |
|
|
516
|
+
| `personal.autonomy` | `on`, `off`, `auto` | `auto` | Suppress trivial workflow questions and act on the obvious next step. `auto` (default) defaults to `off` but flips to `on` after a prose opt-in like "arbeite selbstständig". `on` suppresses trivial questions unconditionally. `off` is the legacy ask-everything mode. Blocking decisions (security, scope expansion, push/merge/branch/PR/tag) are never suppressed. See `rules/autonomous-execution.md`. |
|
|
472
517
|
| `project.pr_template` | file path | `.github/pull_request_template.md` | Path to PR template file. Read this instead of searching for it. |
|
|
473
518
|
| `project.upstream_repo` | `org/repo` | _(empty)_ | Target repository for universal improvement PRs (e.g., `org/agent-config`). |
|
|
474
519
|
| `project.improvement_pr_branch_prefix` | string | `improve/agent-` | Branch prefix for agent improvement PRs. |
|
|
@@ -487,7 +532,7 @@ the canonical narrative lives in
|
|
|
487
532
|
| `hooks.chat_history.enabled` | `true`, `false` | `true` | Register the chat-history hooks (`append` on `after_step`, `halt_append` on `on_halt`). Gated by **both** this flag AND `chat_history.enabled`; either off → no chat-history hook registers. Schema v4: every entry self-identifies via a 16-char session fingerprint, no ownership/sidecar layer. |
|
|
488
533
|
| `hooks.chat_history.script` | path | `scripts/chat_history.py` | Override path to the chat-history CLI. Set only when the script lives outside the standard location. |
|
|
489
534
|
| `pipelines.skill_improvement` | `true`, `false` | `true` | When `true`: propose learning capture after meaningful tasks. When `false`: silent. Included in every profile except `custom`. |
|
|
490
|
-
| `roadmap.skip_pre_run_gate` | `true`, `false` | `true` | When `true` (default): `/roadmap:process-step\|phase\|full` skips the interactive pre-run summary and starts immediately — resolved roadmap
|
|
535
|
+
| `roadmap.skip_pre_run_gate` | `true`, `false` | `true` | When `true` (default): `/roadmap:process-step\|phase\|full` skips the interactive pre-run summary and starts the loop immediately — the resolved roadmap, cadence, and council are surfaced inline so an unwanted pick can still be aborted. When `false`: the loop shows the pre-run summary with numbered options (Go / Different roadmap / Different scope / Toggle council / Abort) and waits. The gate is always shown — regardless of this flag — when the roadmap is ambiguous (multiple active, none named) or a scope / cadence conflict has no sensible default. |
|
|
491
536
|
| `roadmap.quality_cadence` | `end_of_roadmap`, `per_phase`, `per_step` | `end_of_roadmap` | When `/roadmap:process-step|phase|full` runs the project's quality pipeline. Default skips per-step / per-phase runs and gates only the final archival. `per_phase` runs once after every phase; `per_step` is the legacy verbose mode. Step checkboxes and the dashboard are always updated regardless. `verify-before-complete` still requires fresh output before any "roadmap complete" claim. |
|
|
492
537
|
| `quality.local_auto_run` | `true`, `false` | `true` | When `true`: agent runs the project's quality pipeline (`task ci`, `make test`, `npm run check`, PHPStan, ECS, Rector, test suites) autonomously when work is ready for verification. When `false`: agent asks before running locally. **Carve-out**: NEW CI gates / smoke tests / test files MUST run locally regardless of this flag — without execution the new gate is unverified evidence. Iron Law `verify-before-complete` still applies; suppressed runs require the agent to surface the gap before claiming completion. |
|
|
493
538
|
| `quality.wait_for_remote_ci` | `true`, `false` | `false` | When `true`: after `git push`, the agent polls GitHub check-runs / pipeline status on the PR and reports green / red before handing back. When `false`: agent pushes and hands back immediately; the user inspects CI themselves (default — saves agent runtime and tokens). |
|