@event4u/agent-config 9.6.0 → 9.7.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 +1 -1
- package/CHANGELOG.md +63 -942
- package/README.md +17 -17
- package/dist/agent-src/README.md +2 -2
- package/dist/agent-src/rules/downstream-changes.md +31 -1
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +34 -16
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/github-workflows/doc-impact.yml +101 -0
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +5 -5
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/docs/CLAIMS.md +2 -1
- package/docs/archive/CHANGELOG-6.0.0-overview.md +953 -0
- package/docs/benchmark.md +33 -9
- package/docs/decisions/ADR-122-adversarial-verification-council.md +30 -0
- package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +31 -0
- package/docs/spawn-site-policy.md +72 -0
- package/docs/threat-model.md +1 -1
- package/package.json +2 -2
- package/src/agent-src/README.md +2 -2
- package/src/scripts/_lib/adversarial_bench_score.ts +106 -0
- package/src/scripts/_lib/spawn_env.ts +24 -4
- package/src/scripts/bench_adversarial_council.ts +292 -0
- package/src/scripts/check_no_new_legacy_path.ts +2 -0
- package/src/scripts/check_source_pointer_freshness.ts +165 -0
- package/src/scripts/hooks/dispatch_hook.ts +5 -1
- package/src/scripts/lint_readme_serial_comma.ts +169 -0
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
**Every public claim in this README is machine-checked — [verify it yourself](docs/proof.md).** In a market that runs on unbacked headline numbers, this one binds each claim to resolvable evidence or fails its own build.
|
|
16
16
|
|
|
17
|
-
**A deep library of skills, commands
|
|
17
|
+
**A deep library of skills, commands and governed rules** — plus a capability router that loads the right skill on intent and multi-agent orchestration with consensus review. The whole layer is compiled into 7+ host agents (Claude Code, Cursor, Augment, Cline, Windsurf, Copilot, Gemini) with **zero runtime daemon**.<!-- claim:no-runtime-daemon --> Six role-shaped entry paths sit on top, so any host becomes a reliable team member — without locking you to a single model or vendor.
|
|
18
18
|
|
|
19
19
|
### What's different
|
|
20
20
|
|
|
@@ -27,13 +27,13 @@ It is both deep **and** disciplined — and honest about what it deliberately is
|
|
|
27
27
|
|
|
28
28
|
**What it deliberately is *not*** — a content + governance layer, not a runtime: **no background daemon, no separate state database, no self-rewriting memory, no auto-build pipeline.** The host agent runs the loop; every learned change is human-reviewed; the same layer stays portable across tools. Capability without a process to babysit.
|
|
29
29
|
|
|
30
|
-
> **Where this comes from (honest provenance).** The skills, rules
|
|
30
|
+
> **Where this comes from (honest provenance).** The skills, rules and personas
|
|
31
31
|
> are distilled from real production work on TypeScript and PHP codebases. The
|
|
32
32
|
> governance mechanics are stack-agnostic, but the domain heuristics are richest
|
|
33
33
|
> where they were forged — treat coverage on other stacks as promising, not
|
|
34
|
-
> proven
|
|
34
|
+
> proven and tell us where it falls short.
|
|
35
35
|
|
|
36
|
-
See exactly [what works on which host](docs/capability-matrix.md)
|
|
36
|
+
See exactly [what works on which host](docs/capability-matrix.md) or jump to [things you can do in a minute](docs/cookbook.md).
|
|
37
37
|
|
|
38
38
|
### Pick your profile — six entry paths
|
|
39
39
|
|
|
@@ -100,14 +100,14 @@ is platform operation, not a user-work flow.)
|
|
|
100
100
|
|
|
101
101
|
> **Creative Pack — cinematic AI video.** script → character-locked image → motion+audio prompt → provider render → stitched clip, with `AIV_DRYRUN=true` as the cost-safety default. A first-class capability inside the **content / creator** experience — no longer the package's headline. See [`/video:from-script`](.augment/commands/video/from-script.md).
|
|
102
102
|
|
|
103
|
-
> **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer
|
|
103
|
+
> **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer and must not be relied on for any concrete matter. It produces general information and general templates, never individual-case examination. Read [`LEGAL_NOTICE.md`](LEGAL_NOTICE.md) before use.
|
|
104
104
|
|
|
105
105
|
> Full catalog — every skill, rule, command, guideline: [`docs/catalog.md`](docs/catalog.md). The headline is the **experience** (profile + packs) **and** the depth behind it.
|
|
106
106
|
|
|
107
107
|
## Use it in your project
|
|
108
108
|
|
|
109
109
|
Run from a consumer repo — bootstrap via `npx`, the agent picks up
|
|
110
|
-
your stack
|
|
110
|
+
your stack and you ship work end-to-end. New install? Start with the
|
|
111
111
|
[Quickstart](#quickstart). Already installed? [Supported tools](#supported-tools)
|
|
112
112
|
shows the wired AIs; [`docs/featured-commands.md`](docs/featured-commands.md)
|
|
113
113
|
lists the end-to-end workflows (`/implement-ticket`, `/work`,
|
|
@@ -119,8 +119,8 @@ lists the end-to-end workflows (`/implement-ticket`, `/work`,
|
|
|
119
119
|
|
|
120
120
|
Don't take the claims on trust — **verify them.** [`docs/proof.md`](docs/proof.md)
|
|
121
121
|
is generated from source: a claim→evidence table (every public claim binds to a
|
|
122
|
-
resolvable pointer
|
|
123
|
-
the package changed nothing
|
|
122
|
+
resolvable pointer or CI fails), honest-null benchmarks *including the runs where
|
|
123
|
+
the package changed nothing* and a "verify it yourself" block you run on a fresh
|
|
124
124
|
checkout. The proof page fails CI if it drifts from its sources — reproducibility
|
|
125
125
|
is the proof. Browse it on the deployed docs site — the proof page is the primary entry:
|
|
126
126
|
[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/).
|
|
@@ -132,7 +132,7 @@ find-replace re-skin PRs here runs on your catalog too —
|
|
|
132
132
|
[`docs/anti-reskin-gate.md`](docs/anti-reskin-gate.md).
|
|
133
133
|
|
|
134
134
|
Audit-disciplined by construction — every memory consult, decision
|
|
135
|
-
key
|
|
135
|
+
key and hook concern lands in `agents/runtime/state/` so you can replay it.
|
|
136
136
|
[Core principles](#core-principles) names the four invariants;
|
|
137
137
|
[What `agent-config` is — and what it isn't](#what-agent-config-is--and-what-it-isnt)
|
|
138
138
|
draws the scope boundary.
|
|
@@ -207,7 +207,7 @@ Migrating from a v1.x install? `npx @event4u/agent-config migrate` — full note
|
|
|
207
207
|
|
|
208
208
|
A **content layer** — skills, rules, commands, guidelines, personas — distributed via npm and projected into every supported AI tool's native config format. It follows the [Agent Skills open standard](https://agentskills.io).
|
|
209
209
|
|
|
210
|
-
It is **not** an agent runtime. The agent loop, the LLM dispatcher
|
|
210
|
+
It is **not** an agent runtime. The agent loop, the LLM dispatcher and tool orchestration stay with the host tool (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI, Copilot). Think of it as a playbook and style guide for those tools — not a replacement.
|
|
211
211
|
|
|
212
212
|
| In scope | Out of scope |
|
|
213
213
|
|---|---|
|
|
@@ -254,7 +254,7 @@ refine → memory → analyze → plan → implement → test → verify → rep
|
|
|
254
254
|
- **Reviews** the diff through four judges (bugs, security, tests, code quality).
|
|
255
255
|
- **Reports** changes, verdicts, follow-ups — then stops. `/commit` and `/pr:create` are suggestions, never auto-run.
|
|
256
256
|
|
|
257
|
-
Any ambiguity halts the flow with numbered options — never a silent guess. Persona comes from `.agent-settings.yml` (`roles.active_role`): `senior-engineer` (default), `qa
|
|
257
|
+
Any ambiguity halts the flow with numbered options — never a silent guess. Persona comes from `.agent-settings.yml` (`roles.active_role`): `senior-engineer` (default), `qa` or `advisory` (plan-only).
|
|
258
258
|
|
|
259
259
|
→ [Command reference](dist/agent-src/commands/implement-ticket.md) · [Flow contract](docs/contracts/implement-ticket-flow.md)
|
|
260
260
|
|
|
@@ -316,7 +316,7 @@ Create the user file interactively: `/agents user init` ([schema](docs/contracts
|
|
|
316
316
|
|
|
317
317
|
### Self-hosted MCP on Cloudflare — zero local install
|
|
318
318
|
|
|
319
|
-
Skills, commands, rules
|
|
319
|
+
Skills, commands, rules and guidelines can be served as an MCP endpoint from your own Cloudflare Worker — any MCP client (Claude Desktop, Claude Code, Cursor, Zed, Continue, hosted agents) talks to it over HTTP. Two auth modes: `public` (default, OSS read-only deploys) and `bearer-auth` (operator opt-in, `MCP-Token` Wrangler secret).
|
|
320
320
|
|
|
321
321
|
```bash
|
|
322
322
|
task mcp:cloud:login # one-time, opens browser
|
|
@@ -340,13 +340,13 @@ task mcp:cloud:secret-put # opt in to bearer-auth (recommended for private de
|
|
|
340
340
|
|
|
341
341
|
The Hard Floor on organization-mode features (SSO, central policy, OAuth connectors, team-context) is preserved by design — they stay cancelled until a real first customer + funded security audit lifts them. The small-team recipe is the supported path in the meantime.
|
|
342
342
|
|
|
343
|
-
> *The 9.3/10 feedback round (2026-05-25) re-asked for OAuth knowledge connectors, IAM / org governance
|
|
343
|
+
> *The 9.3/10 feedback round (2026-05-25) re-asked for OAuth knowledge connectors, IAM / org governance and organization-shared memory. Each is a stable cancellation row in [`team-deployment-posture`](docs/deploy/team-deployment-posture.md) under the same three release gates — recruited team customer · funded audit · maintainer ADR.*
|
|
344
344
|
|
|
345
345
|
---
|
|
346
346
|
|
|
347
347
|
## Harness expectations
|
|
348
348
|
|
|
349
|
-
Three classes of install/runtime behaviour look like package bugs but are host-harness behaviour the package cannot control — sibling-plugin namespaces (`codex:*`, `cc-gemini-plugin:*`), deferred tools surfaced via `ToolSearch
|
|
349
|
+
Three classes of install/runtime behaviour look like package bugs but are host-harness behaviour the package cannot control — sibling-plugin namespaces (`codex:*`, `cc-gemini-plugin:*`), deferred tools surfaced via `ToolSearch` and cross-scope skill drift (real bug, fixed in the distribution-channels track). Diagnostics + the package's response: [`docs/contracts/harness-expectations.md`](docs/contracts/harness-expectations.md). First step when a skill appears twice: `task probe:skills`.
|
|
350
350
|
|
|
351
351
|
## Supported tools
|
|
352
352
|
|
|
@@ -477,7 +477,7 @@ Browse content: [all commands](dist/agent-src/commands/) · [skills catalog](doc
|
|
|
477
477
|
## Troubleshooting
|
|
478
478
|
|
|
479
479
|
First stop for any install problem: `agent-config doctor` — it flags a
|
|
480
|
-
missing-from-`PATH` binary, binary↔plugin version drift, stale orphans
|
|
480
|
+
missing-from-`PATH` binary, binary↔plugin version drift, stale orphans and
|
|
481
481
|
manifest issues, each with a one-line fix hint.
|
|
482
482
|
|
|
483
483
|
### A new command / skill is missing in Claude Code after an upgrade
|
|
@@ -486,7 +486,7 @@ Under the single-surface model, `agent-config upgrade` refreshes the
|
|
|
486
486
|
`~/.claude/` file projection — that IS the content surface, so a fresh
|
|
487
487
|
session picks the new commands up directly. If commands are still missing,
|
|
488
488
|
the usual cause is a leftover **marketplace plugin**: it is a git-SHA
|
|
489
|
-
snapshot that never moves with the npm upgrade
|
|
489
|
+
snapshot that never moves with the npm upgrade and it shadows nothing —
|
|
490
490
|
it just lists everything twice while lagging behind. Remove it:
|
|
491
491
|
|
|
492
492
|
```bash
|
|
@@ -521,7 +521,7 @@ Only the initial `npm install -g` hard-aborts an upgrade. Every later step
|
|
|
521
521
|
(global re-deploy with hook registration, settings sync, wrapper + git-hook
|
|
522
522
|
refresh) runs independently — a single failed step is reported in the
|
|
523
523
|
end-of-run summary instead of silently skipping the rest. Re-run
|
|
524
|
-
`agent-config upgrade` to converge
|
|
524
|
+
`agent-config upgrade` to converge and use `agent-config doctor` to name
|
|
525
525
|
anything left in a mixed state.
|
|
526
526
|
|
|
527
527
|
### `agent-config: command not found` / hooks stopped firing
|
package/dist/agent-src/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Agent Infrastructure
|
|
2
2
|
|
|
3
3
|
> **⚠️ DO NOT edit files in `dist/agent-src/` or `.augment/` directly.**
|
|
4
|
-
> The source of truth is
|
|
5
|
-
> See
|
|
4
|
+
> The source of truth is `src/` (`src/skills/`, `src/rules/`, `src/agent-src/`). Edit there, then run `task sync`.
|
|
5
|
+
> See the `source-of-truth` rule and the `/condense` command for the full workflow.
|
|
6
6
|
|
|
7
7
|
This directory contains the shared agent infrastructure: skills, commands, rules, guidelines,
|
|
8
8
|
templates, and contexts that power the AI coding assistant across all projects.
|
|
@@ -45,7 +45,36 @@ After editing any file, search for **all** of these:
|
|
|
45
45
|
| **Config / bindings** | Search service providers, config files | Update class references in DI bindings |
|
|
46
46
|
| **API schemas / OpenAPI** | Check controller attributes | Update if response structure changed |
|
|
47
47
|
| **Routes** | Search `routes/` for controller references | Update after controller rename/move |
|
|
48
|
-
| **Documentation** | Search `agents/`, `docs
|
|
48
|
+
| **Documentation** | Search `agents/`, `docs/`, `README`, examples for references | Update the doc that **describes** the changed surface — see Doc-Impact below |
|
|
49
|
+
|
|
50
|
+
## Doc-Impact — docs follow code (same change)
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
A CHANGE TO A PUBLIC SURFACE IS INCOMPLETE UNTIL THE DOC THAT
|
|
54
|
+
DESCRIBES IT IS UPDATED IN THE SAME CHANGE. A DOC MAKING A CLAIM
|
|
55
|
+
THE CODE NOW CONTRADICTS IS A BROKEN CHANGE, NOT A STYLE NIT.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Public surfaces** whose change triggers a doc update: HTTP route /
|
|
59
|
+
endpoint · exported function / class signature · CLI command or flag ·
|
|
60
|
+
config / settings key · env var · DB schema or migration · event
|
|
61
|
+
payload. Update the doc that describes it — README, API / OpenAPI docs,
|
|
62
|
+
AGENTS.md, code examples, CHANGELOG — in the same commit.
|
|
63
|
+
|
|
64
|
+
**Drift = a falsifiable-claim contradiction**, not incompleteness. Fire
|
|
65
|
+
when a reader following the doc would be misled: an endpoint that no
|
|
66
|
+
longer exists, a wrong return type, a renamed key, a broken example. Do
|
|
67
|
+
**not** fire on "the doc could be more detailed" — completeness is a
|
|
68
|
+
quality nit, not drift.
|
|
69
|
+
|
|
70
|
+
**Escape hatch** (no false-positive fatigue): refactor-only / no
|
|
71
|
+
public-surface change → no doc obligation. If a surface changed but
|
|
72
|
+
genuinely needs no doc edit, state the one-line reason instead of
|
|
73
|
+
editing a doc to satisfy the rule.
|
|
74
|
+
|
|
75
|
+
Detection + the framework-agnostic surface→doc map (Laravel / Symfony /
|
|
76
|
+
Next.js / Python / Go) live in [`agent-docs-writing`](../skills/agent-docs-writing/SKILL.md)
|
|
77
|
+
§ Doc-Impact — run it after every code change.
|
|
49
78
|
|
|
50
79
|
## Breaking changes
|
|
51
80
|
|
|
@@ -78,3 +107,4 @@ After completing all downstream changes:
|
|
|
78
107
|
3. **No broken types / signatures** — project's type-checker (PHPStan / Psalm, TypeScript, mypy / pyright, `go vet`, `cargo check`).
|
|
79
108
|
4. **No stale references** — grep for the old name / namespace / import path to confirm zero results.
|
|
80
109
|
5. **No own-orphans** — the same sweep applied to the new diff: identifiers whose last reference disappeared in a file this diff touched are removed in the same diff (see [`minimal-safe-diff § Own-orphan cleanup`](minimal-safe-diff.md#own-orphan-cleanup)); pre-existing dead code stays.
|
|
110
|
+
6. **No doc drift** — a public surface changed this diff has its describing doc updated (or the one-line no-doc-needed reason stated), per Doc-Impact above.
|
|
@@ -189,29 +189,47 @@ After making changes, check if docs need updating:
|
|
|
189
189
|
- **Structural changes** → update affected docs in `./agents/`
|
|
190
190
|
- **New patterns** → update or create guideline docs
|
|
191
191
|
|
|
192
|
-
## Doc
|
|
192
|
+
## Doc-Impact — the mandatory check after every code change
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
This is the detection procedure the [`downstream-changes`](../../rules/downstream-changes.md)
|
|
195
|
+
§ Doc-Impact obligation points at. **Run it after every code change** — the
|
|
196
|
+
*detection* is non-optional; the human still confirms the actual edit.
|
|
195
197
|
|
|
196
|
-
|
|
198
|
+
**Step 1 — did a public surface change?** Framework-agnostic surface list:
|
|
199
|
+
|
|
200
|
+
| Public surface changed | Doc that describes it — update in the same change |
|
|
197
201
|
|---|---|
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
| New
|
|
206
|
-
|
|
207
|
-
|
|
202
|
+
| HTTP route / endpoint (Laravel `routes/`, Next.js `app/api`, FastAPI/Express handlers, Go mux) | OpenAPI / API reference, `README` usage, `AGENTS.md` API section |
|
|
203
|
+
| Exported function / class / method signature | The doc/example that calls it; `agents/reference/docs/services-and-repos.md` if referenced |
|
|
204
|
+
| CLI command or flag | `README` usage, `AGENTS.md` commands section, `--help` text |
|
|
205
|
+
| Config / settings key | Settings doc, `README` config section, schema/example file |
|
|
206
|
+
| Environment variable | `.env.example`, `AGENTS.md` environment section |
|
|
207
|
+
| DB schema / migration | `agents/reference/docs/database-setup.md` |
|
|
208
|
+
| Event payload / job constructor | The listener/consumer doc that documents the contract |
|
|
209
|
+
| New module | `{module_root}/{Module}/{agent_folder}/` (resolve via `modules.root_paths` + `modules.agent_folder`) |
|
|
210
|
+
| New pattern / convention | Relevant guideline in `.augment/guidelines/` |
|
|
211
|
+
| Architectural decision | [`adr-create`](../adr-create/SKILL.md) — numbered ADR + index regen |
|
|
212
|
+
|
|
213
|
+
**Step 2 — apply the fire/no-fire test.** Drift is a **falsifiable-claim
|
|
214
|
+
contradiction**, not incompleteness:
|
|
215
|
+
|
|
216
|
+
- **FIRE** (doc is now wrong — a reader would be misled): endpoint no longer
|
|
217
|
+
exists, wrong return type, renamed key, removed flag, broken code example.
|
|
218
|
+
- **DO NOT FIRE** (completeness / quality only): the doc is high-level and
|
|
219
|
+
omits a new internal detail it never claimed to list; "could be clearer".
|
|
220
|
+
|
|
221
|
+
**Step 3 — escape hatch.** Refactor-only / no public-surface change → no doc
|
|
222
|
+
obligation. Surface changed but genuinely needs no doc edit → state the
|
|
223
|
+
one-line reason; never edit a doc just to satisfy the rule (false-positive
|
|
224
|
+
fatigue is worse than a missed nit).
|
|
225
|
+
|
|
226
|
+
**When a doc edit IS needed but you are unsure of the wording** — flag it with
|
|
227
|
+
numbered options; do NOT auto-rewrite prose without the user's knowledge:
|
|
208
228
|
```
|
|
209
229
|
> 1. Yes — update the docs
|
|
210
|
-
> 2. No — leave as-is
|
|
230
|
+
> 2. No — leave as-is (reason: …)
|
|
211
231
|
```
|
|
212
232
|
|
|
213
|
-
Do NOT auto-update docs without the user's knowledge. Flag what needs updating and let the user decide.
|
|
214
|
-
|
|
215
233
|
## Rules
|
|
216
234
|
|
|
217
235
|
- All `.md` files must be in **English**.
|
|
@@ -21,7 +21,7 @@ packs:
|
|
|
21
21
|
|
|
22
22
|
Use when:
|
|
23
23
|
- Editing `AGENTS.md` at the package root.
|
|
24
|
-
- Editing `
|
|
24
|
+
- Editing `src/agent-src/templates/AGENTS.md` (consumer-shipped template).
|
|
25
25
|
- Reviewing a PR that changes either file.
|
|
26
26
|
- Running `/optimize/agents`.
|
|
27
27
|
- A budget meter (`scripts/measure_augment_budget.ts`) flags the package-root AGENTS.md as the dominant cost.
|
|
@@ -29,7 +29,7 @@ Use when:
|
|
|
29
29
|
## Do NOT
|
|
30
30
|
|
|
31
31
|
- Edit `.github/copilot-instructions.md` with this skill (use `copilot-agents-optimization` instead).
|
|
32
|
-
- Edit other `.md` files under `.augment/`, `
|
|
32
|
+
- Edit other `.md` files under `.augment/`, `src/`, or `agents/` with this skill.
|
|
33
33
|
- Add a section to AGENTS.md without first checking whether an outboard target already exists in `agents/settings/contexts/` or `docs/contracts/`.
|
|
34
34
|
- Replace prose with a bare link `[label](path)` — every pointer needs a *why*-clause ≥ 60 chars or it does not count toward the 40 % ratio.
|
|
35
35
|
- Reuse the package-root anatomy in the consumer template — caps and target paths differ.
|
|
@@ -47,7 +47,7 @@ Every entry describes **what** the project does or **where** to learn more — n
|
|
|
47
47
|
| File | FAIL above | WARN above | Target |
|
|
48
48
|
|---|---|---|---|
|
|
49
49
|
| `AGENTS.md` (package root) | 3,000 chars | 2,800 chars | ≤ 2,800 |
|
|
50
|
-
| `
|
|
50
|
+
| `src/agent-src/templates/AGENTS.md` (consumer) | 2,500 chars | 2,300 chars | ≤ 2,300 |
|
|
51
51
|
|
|
52
52
|
Char-count is raw file size (`wc -c`), frontmatter included. Enforcement: `scripts/lint_agents_md.ts` (Phase 7), wired into the package's CI pipeline via the `lint-agents-md` task. WARN is a soft signal in CI; FAIL blocks merge.
|
|
53
53
|
|
|
@@ -85,7 +85,7 @@ Every substantive pointer specifies, on the same line or the immediately followi
|
|
|
85
85
|
|
|
86
86
|
## The contract — emergency-triage block
|
|
87
87
|
|
|
88
|
-
Every Thin-Root AGENTS.md MUST contain an **Emergency Triage** section verbatim from `
|
|
88
|
+
Every Thin-Root AGENTS.md MUST contain an **Emergency Triage** section verbatim from `src/agent-src/contexts/contracts/emergency-triage-block.md` (Phase 6.4 will create that file as the canonical source). The block lists the five questions a host agent answers from the root file alone when network / tool access is degraded:
|
|
89
89
|
|
|
90
90
|
1. What is this repository?
|
|
91
91
|
2. What language(s) does this repository accept?
|
|
@@ -99,22 +99,22 @@ Each answer must fit on one line. The block exists so the root never silently de
|
|
|
99
99
|
|
|
100
100
|
1. **Measure baseline.** `wc -c AGENTS.md` and `./scripts-run src/scripts/measure_augment_budget`. Record current char-count and the gap to 2,200 / 2,500.
|
|
101
101
|
2. **Inventory sections.** List every `## ` heading and its char-count. Mark each as `keep-inline` (Iron-Law-adjacent, ≤ 200 chars, no good outboard target) or `outboard-candidate` (longer-form prose, table-only sections, narrative).
|
|
102
|
-
3. **Identify outboard targets.** For each `outboard-candidate`, name the destination — `
|
|
102
|
+
3. **Identify outboard targets.** For each `outboard-candidate`, name the destination — `src/agent-src/contexts/`, `docs/contracts/`, an existing rule body, an existing skill body. Never invent a new top-level directory.
|
|
103
103
|
4. **Move content; insert pointer.** Cut the section into the target file. Replace it in AGENTS.md with a single substantive pointer per anatomy above. Verify the *why*-clause length.
|
|
104
104
|
5. **Re-measure.** `wc -c AGENTS.md` again. If above 2,200, repeat steps 2–4 on the next-largest section. Above 2,500 = must outboard further before commit.
|
|
105
105
|
6. **Validate pointer ratio.** Count non-blank lines and substantive-pointer lines. Ratio < 0.40 = collapse decorative or boilerplate lines into a single pointer or remove.
|
|
106
|
-
7. **Verify emergency-triage block.** Diff the in-file block against `
|
|
106
|
+
7. **Verify emergency-triage block.** Diff the in-file block against `src/agent-src/contexts/contracts/emergency-triage-block.md`. Drift = revert to canonical.
|
|
107
107
|
8. **Run lints.** `task lint-agents-md && task check-refs && task lint-skills`. All green before commit.
|
|
108
108
|
|
|
109
109
|
## Procedure — apply Thin-Root to consumer template
|
|
110
110
|
|
|
111
|
-
Same procedure, applied to `
|
|
111
|
+
Same procedure, applied to `src/agent-src/templates/AGENTS.md`. Hard cap shifts to 2,000 / 1,700. The consumer template intentionally lacks the package-self-references — its pointers target files that exist in the **consumer's** repo (`.augment/skills/`, `agents/settings/contexts/`, ...), not this package's authoring tree.
|
|
112
112
|
|
|
113
113
|
## Gotchas
|
|
114
114
|
|
|
115
|
-
- **Outboarding to a new top-level dir.** Inventing `agents/explainers/` or `docs/notes/` for the moved content silently widens the contract surface. Outboard only into `
|
|
115
|
+
- **Outboarding to a new top-level dir.** Inventing `agents/explainers/` or `docs/notes/` for the moved content silently widens the contract surface. Outboard only into `src/agent-src/contexts/`, `docs/contracts/`, an existing rule body, or an existing skill body.
|
|
116
116
|
- **Pointer-ratio inflation by decoration.** Adding boilerplate "Browse all skills" / "See also" links to lift the ratio above 40 % defeats the purpose. The lint counts only substantive pointers (with a *why*-clause ≥ 60 chars); decorative links get filtered out and the ratio drops back below threshold.
|
|
117
|
-
- **Emergency-triage drift.** Editing the in-file emergency-triage block instead of the canonical `
|
|
117
|
+
- **Emergency-triage drift.** Editing the in-file emergency-triage block instead of the canonical `src/agent-src/contexts/contracts/emergency-triage-block.md` causes the package-root and consumer-template versions to diverge silently. Always edit the canonical file and let the lint diff pull both back in sync.
|
|
118
118
|
- **Cap inversion under WARN.** A 2,250-char AGENTS.md (above 2,200 WARN, below 2,500 FAIL) is a yellow signal not a green one — every additional sentence raises the probability of the next FAIL. Treat WARN as the spend boundary, not a buffer.
|
|
119
119
|
- **Char-count includes frontmatter.** `wc -c` counts every byte including the YAML preamble, blank lines, and the trailing newline. Stripping a section to "look smaller" without re-running `wc -c` understates the true budget impact.
|
|
120
120
|
- **Path enumeration.** A run of three or more bare `` `path/to/dir/` `` bullets without *why*-clauses is the classic re-bloat pattern. The lint emits a WARN at ≥ 3 such lines. Collapse them into one capability-style pointer — see the recipe in [`agents-md-anatomy § Iron Law`](../../contexts/contracts/agents-md-anatomy.md#iron-law--capabilities-over-structure).
|
|
@@ -39,7 +39,7 @@ schema_version: 1
|
|
|
39
39
|
# CI guard: a release bump of `package.json` must update this value
|
|
40
40
|
# in lockstep — see scripts/check_template_pin_drift.ts (road-to-
|
|
41
41
|
# portable-runtime-and-update-check P3.3).
|
|
42
|
-
agent_config_version: "9.
|
|
42
|
+
agent_config_version: "9.7.0"
|
|
43
43
|
|
|
44
44
|
# --- Project identity ---
|
|
45
45
|
project:
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Doc-Impact Check — template shipped by agent-config
|
|
2
|
+
#
|
|
3
|
+
# Copy this file to `.github/workflows/doc-impact.yml` in the consumer
|
|
4
|
+
# project. It is the OPTIONAL CI backstop for the doc-follows-code
|
|
5
|
+
# discipline that already ships to you via projection:
|
|
6
|
+
#
|
|
7
|
+
# - rule `downstream-changes` § Doc-Impact — the same-change obligation
|
|
8
|
+
# - skill `agent-docs-writing` § Doc-Impact — the surface→doc procedure
|
|
9
|
+
#
|
|
10
|
+
# Those two are framework-agnostic and behavioral; they need no CI. This
|
|
11
|
+
# workflow adds a deterministic reminder: when a PR changes a PUBLIC
|
|
12
|
+
# SURFACE but touches no documentation, it flags the likely doc drift.
|
|
13
|
+
#
|
|
14
|
+
# Design (per the 2026-07-21 council): WARN-first, opt-in, with an
|
|
15
|
+
# explicit escape hatch — a gate that hard-fails on every surface change
|
|
16
|
+
# gets routinely overridden, which is worse than none. Flip STRICT=true
|
|
17
|
+
# below only once your team wants the hard gate.
|
|
18
|
+
#
|
|
19
|
+
# Framework-agnostic: it globs the changed-file paths, so it works for
|
|
20
|
+
# Laravel / Symfony / Next.js / Python / Go / … without per-stack tuning.
|
|
21
|
+
# Tune the PUBLIC_SURFACE / DOC globs to your repo layout.
|
|
22
|
+
#
|
|
23
|
+
# Escape hatch: put `[docs:not-needed]` in the PR title/body, or use a
|
|
24
|
+
# `refactor:`-prefixed PR title, when a surface changed but genuinely
|
|
25
|
+
# needs no doc edit. State the reason — do not edit a doc just to pass.
|
|
26
|
+
|
|
27
|
+
name: Doc-Impact Check
|
|
28
|
+
|
|
29
|
+
on:
|
|
30
|
+
pull_request:
|
|
31
|
+
types: [opened, synchronize, reopened, edited]
|
|
32
|
+
workflow_dispatch: {}
|
|
33
|
+
|
|
34
|
+
permissions:
|
|
35
|
+
contents: read
|
|
36
|
+
|
|
37
|
+
jobs:
|
|
38
|
+
doc-impact:
|
|
39
|
+
name: Public surface changed without a doc update?
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
|
|
46
|
+
- name: Detect surface-vs-doc drift
|
|
47
|
+
env:
|
|
48
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
49
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
50
|
+
PR_TITLE: ${{ github.event.pull_request.title }}
|
|
51
|
+
PR_BODY: ${{ github.event.pull_request.body }}
|
|
52
|
+
# Flip to "true" to make the drift a hard CI failure.
|
|
53
|
+
STRICT: "false"
|
|
54
|
+
run: |
|
|
55
|
+
set -euo pipefail
|
|
56
|
+
|
|
57
|
+
# Escape hatch — skip entirely on an explicit opt-out.
|
|
58
|
+
case "${PR_TITLE}${PR_BODY}" in
|
|
59
|
+
*"[docs:not-needed]"*|refactor:*|"refactor("*)
|
|
60
|
+
echo "Doc-Impact: escape hatch present — skipping." ; exit 0 ;;
|
|
61
|
+
esac
|
|
62
|
+
|
|
63
|
+
changed="$(git diff --name-only "${BASE_SHA}" "${HEAD_SHA}")"
|
|
64
|
+
echo "Changed files:"; echo "${changed}" | sed 's/^/ /'
|
|
65
|
+
|
|
66
|
+
# PUBLIC-SURFACE globs (extend for your stack).
|
|
67
|
+
surface="$(printf '%s\n' "${changed}" | grep -E \
|
|
68
|
+
-e '(^|/)routes/' \
|
|
69
|
+
-e '(^|/)(migrations|schema)/' \
|
|
70
|
+
-e 'openapi.*\.(ya?ml|json)$' \
|
|
71
|
+
-e '(^|/)(cli|commands|console)/' \
|
|
72
|
+
-e '(^|/)\.env\.example$' \
|
|
73
|
+
-e '(^|/)(config)/' \
|
|
74
|
+
|| true)"
|
|
75
|
+
|
|
76
|
+
# DOC globs — a change to any of these satisfies the obligation.
|
|
77
|
+
docs="$(printf '%s\n' "${changed}" | grep -E \
|
|
78
|
+
-e '\.md$' \
|
|
79
|
+
-e '(^|/)docs/' \
|
|
80
|
+
-e '(^|/)AGENTS\.md$' \
|
|
81
|
+
-e 'openapi.*\.(ya?ml|json)$' \
|
|
82
|
+
-e '(^|/)CHANGELOG' \
|
|
83
|
+
|| true)"
|
|
84
|
+
|
|
85
|
+
if [ -n "${surface}" ] && [ -z "${docs}" ]; then
|
|
86
|
+
echo "Public surface(s) changed with NO accompanying doc update:"
|
|
87
|
+
echo "${surface}" | sed 's/^/ /'
|
|
88
|
+
echo ""
|
|
89
|
+
echo "Update the doc that DESCRIBES the changed surface (README /"
|
|
90
|
+
echo "API reference / AGENTS.md / examples / CHANGELOG), per the"
|
|
91
|
+
echo "downstream-changes § Doc-Impact obligation. If no doc is"
|
|
92
|
+
echo "needed, add [docs:not-needed] to the PR with a one-line reason."
|
|
93
|
+
if [ "${STRICT}" = "true" ]; then
|
|
94
|
+
echo "::error::Doc-Impact drift (STRICT mode)."
|
|
95
|
+
exit 1
|
|
96
|
+
fi
|
|
97
|
+
echo "::warning::Public surface changed without a doc update — review Doc-Impact."
|
|
98
|
+
exit 0
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
echo "Doc-Impact: OK — no undocumented public-surface change."
|
|
@@ -5974,7 +5974,7 @@
|
|
|
5974
5974
|
},
|
|
5975
5975
|
{
|
|
5976
5976
|
"category": "rule",
|
|
5977
|
-
"checksum": "sha256:
|
|
5977
|
+
"checksum": "sha256:675ea3203cc4291eedd6ed8633170d176d6d8d6748bc167c8418942981fb5ea9",
|
|
5978
5978
|
"install": {
|
|
5979
5979
|
"default": true,
|
|
5980
5980
|
"removable": false
|
|
@@ -7730,7 +7730,7 @@
|
|
|
7730
7730
|
},
|
|
7731
7731
|
{
|
|
7732
7732
|
"category": "skill",
|
|
7733
|
-
"checksum": "sha256:
|
|
7733
|
+
"checksum": "sha256:f5633f6e11b8336ea668d9c05dc389d5aac66fc544ed5707245d33c8ea083b5d",
|
|
7734
7734
|
"install": {
|
|
7735
7735
|
"default": true,
|
|
7736
7736
|
"removable": false
|
|
@@ -7774,7 +7774,7 @@
|
|
|
7774
7774
|
},
|
|
7775
7775
|
{
|
|
7776
7776
|
"category": "skill",
|
|
7777
|
-
"checksum": "sha256:
|
|
7777
|
+
"checksum": "sha256:3a690e9739c19360d5b479639fd939aba8aaebcb575d0d56bab55610035bb289",
|
|
7778
7778
|
"install": {
|
|
7779
7779
|
"default": true,
|
|
7780
7780
|
"removable": false
|
|
@@ -13781,7 +13781,7 @@
|
|
|
13781
13781
|
"workspaces": []
|
|
13782
13782
|
}
|
|
13783
13783
|
],
|
|
13784
|
-
"checksum": "sha256:
|
|
13784
|
+
"checksum": "sha256:6a0dbe5b578ca854a9aec57c2a8a135d1aee10247a5f58f32be93f18e750f302",
|
|
13785
13785
|
"deprecations": [
|
|
13786
13786
|
{
|
|
13787
13787
|
"key": "tier",
|
|
@@ -13924,7 +13924,7 @@
|
|
|
13924
13924
|
"reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
|
|
13925
13925
|
}
|
|
13926
13926
|
],
|
|
13927
|
-
"generated_at": "2026-07-
|
|
13927
|
+
"generated_at": "2026-07-21T09:23:42Z",
|
|
13928
13928
|
"packs": [
|
|
13929
13929
|
{
|
|
13930
13930
|
"artefact_count": 109,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
71417b492c4da8085eb47d0a1edd2c5e00247512b75834b5544409b9a3868415 discovery-manifest.json
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-07-
|
|
2
|
+
"checksum": "sha256:6a0dbe5b578ca854a9aec57c2a8a135d1aee10247a5f58f32be93f18e750f302",
|
|
3
|
+
"generated_at": "2026-07-21T09:23:42Z",
|
|
4
4
|
"packs": [
|
|
5
5
|
{
|
|
6
6
|
"always_on": false,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"checksum": "sha256:
|
|
3
|
-
"generated_at": "2026-07-
|
|
2
|
+
"checksum": "sha256:6a0dbe5b578ca854a9aec57c2a8a135d1aee10247a5f58f32be93f18e750f302",
|
|
3
|
+
"generated_at": "2026-07-21T09:23:42Z",
|
|
4
4
|
"scanner_version": "c24312e116f8",
|
|
5
5
|
"workspaces": [
|
|
6
6
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
| [@event4u/agent-config](https://event4u-app.github.io/agent-config) | Universal AI Agent OS — audited skills, governance rules, commands
|
|
1
|
+
| [@event4u/agent-config](https://event4u-app.github.io/agent-config) | Universal AI Agent OS — audited skills, governance rules, commands and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot). | 20 tools (stdio, worker) | `pip install agent-config[mcp] && ./agent-config mcp:run` |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands
|
|
2
|
+
"description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
|
|
3
3
|
"homepage": "https://event4u-app.github.io/agent-config",
|
|
4
4
|
"install_hint_stdio": "pip install agent-config[mcp] && ./agent-config mcp:run",
|
|
5
5
|
"name": "agent-config-mcp",
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"artefact_count": 575,
|
|
4
4
|
"scanner_version": "c24312e116f8"
|
|
5
5
|
},
|
|
6
|
-
"generated_at": "2026-07-
|
|
6
|
+
"generated_at": "2026-07-21",
|
|
7
7
|
"package": {
|
|
8
|
-
"description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands
|
|
8
|
+
"description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
|
|
9
9
|
"homepage": "https://event4u-app.github.io/agent-config",
|
|
10
10
|
"name": "@event4u/agent-config",
|
|
11
11
|
"repository": "https://github.com/event4u-app/agent-config",
|
|
12
|
-
"version": "9.
|
|
12
|
+
"version": "9.7.0"
|
|
13
13
|
},
|
|
14
14
|
"registries": [
|
|
15
15
|
{
|
package/docs/CLAIMS.md
CHANGED
|
@@ -257,4 +257,5 @@ visible, not hidden.
|
|
|
257
257
|
- kind: quant
|
|
258
258
|
- evidence: docs/benchmark.md#adversarial-verification-council
|
|
259
259
|
- status: unbacked
|
|
260
|
-
- last_verified:
|
|
260
|
+
- last_verified: 2026-07-21
|
|
261
|
+
- resolution: HONEST-NULL (resolved, not pending). Registered cross-vendor run 2026-07-21 on the curated judge-survivable corpus (internal/bench/adversarial-council/): on the judge-passed residual, the 2-vendor skeptic panel (anthropic+openai) matched the single skeptic exactly (residual recall 0.6 = 0.6, zero lift — the second vendor's residual catches were a strict subset of the first), at a 100% false-positive rate on the controversial-but-correct controls under the adversarial-skeptic posture. Both recall thresholds missed → honest-null → Mode 9 surface stays default-off permanently (like recursive-verification). Reproducible artifact: internal/bench/adversarial-council/runs/. Note: an initial run via `council_cli run` was REJECTED as a measurement artifact (that transport imposes multi-round peer-review + prose output, defeating the independent-skeptic + JSON-scoring protocol) — the valid run uses direct independent per-vendor client calls.
|