@event4u/agent-config 2.11.0 → 2.13.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.
Files changed (75) hide show
  1. package/.agent-src/commands/council/analysis.md +142 -0
  2. package/.agent-src/commands/council/debate.md +129 -0
  3. package/.agent-src/commands/council/default.md +8 -0
  4. package/.agent-src/commands/council/design.md +16 -12
  5. package/.agent-src/commands/council/optimize.md +16 -15
  6. package/.agent-src/commands/council/pr.md +12 -12
  7. package/.agent-src/commands/council.md +48 -2
  8. package/.agent-src/personas/advisors/contrarian.md +95 -0
  9. package/.agent-src/personas/advisors/executor.md +99 -0
  10. package/.agent-src/personas/advisors/expansionist.md +98 -0
  11. package/.agent-src/personas/advisors/first-principles.md +98 -0
  12. package/.agent-src/personas/advisors/outsider.md +102 -0
  13. package/.agent-src/rules/copilot-routing.md +19 -0
  14. package/.agent-src/rules/devcontainer-routing.md +20 -0
  15. package/.agent-src/rules/laravel-routing.md +20 -0
  16. package/.agent-src/rules/symfony-routing.md +20 -0
  17. package/.agent-src/skills/ai-council/SKILL.md +180 -2
  18. package/.agent-src/skills/canvas-design/SKILL.md +132 -0
  19. package/.agent-src/skills/canvas-design/evals/triggers.json +16 -0
  20. package/.agent-src/skills/copilot-config/SKILL.md +1 -1
  21. package/.agent-src/skills/devcontainer/SKILL.md +1 -1
  22. package/.agent-src/skills/doc-coauthoring/SKILL.md +129 -0
  23. package/.agent-src/skills/doc-coauthoring/evals/triggers.json +16 -0
  24. package/.agent-src/skills/laravel/SKILL.md +1 -1
  25. package/.agent-src/skills/project-analysis-core/SKILL.md +1 -1
  26. package/.agent-src/skills/project-analyzer/SKILL.md +1 -1
  27. package/.agent-src/skills/skill-writing/SKILL.md +101 -16
  28. package/.agent-src/skills/sql-writing/SKILL.md +1 -1
  29. package/.agent-src/skills/symfony-workflow/SKILL.md +1 -1
  30. package/.agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  31. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  32. package/.claude-plugin/marketplace.json +5 -1
  33. package/AGENTS.md +1 -1
  34. package/CHANGELOG.md +78 -0
  35. package/CONTRIBUTING.md +5 -0
  36. package/README.md +3 -3
  37. package/config/agent-settings.template.yml +5 -84
  38. package/docs/architecture/multi-tool-projection.md +53 -0
  39. package/docs/architecture/{compression.md → source-projection.md} +21 -3
  40. package/docs/architecture.md +6 -6
  41. package/docs/catalog.md +21 -11
  42. package/docs/contracts/adr-architectural-consensus-mechanism.md +67 -0
  43. package/docs/contracts/adr-level-6-productization.md +2 -2
  44. package/docs/contracts/ai-council-config.md +186 -0
  45. package/docs/contracts/command-clusters.md +57 -1
  46. package/docs/contracts/multi-tool-projection-fidelity.md +109 -0
  47. package/docs/getting-started.md +2 -2
  48. package/package.json +1 -1
  49. package/scripts/_archive/README.md +59 -0
  50. package/scripts/ai_council/_default_prices.py +10 -1
  51. package/scripts/ai_council/advisors.py +148 -0
  52. package/scripts/ai_council/clients.py +189 -4
  53. package/scripts/ai_council/config.py +368 -0
  54. package/scripts/ai_council/consensus.py +290 -0
  55. package/scripts/ai_council/orchestrator.py +634 -16
  56. package/scripts/ai_council/prompts.py +335 -0
  57. package/scripts/check_compressed_paths.py +6 -1
  58. package/scripts/check_references.py +25 -0
  59. package/scripts/ci_time_ratio.py +168 -0
  60. package/scripts/council_cli.py +1007 -32
  61. package/scripts/measure_projection_bytes.py +159 -0
  62. package/scripts/measure_roadmap_trajectory.py +112 -0
  63. package/scripts/probe_projection_fidelity.py +202 -0
  64. package/scripts/run_skill_evals.py +185 -0
  65. package/scripts/schemas/skill.schema.json +4 -0
  66. package/scripts/score_skill_selection.py +198 -0
  67. package/scripts/skill_collision_clusters.py +162 -0
  68. package/scripts/skill_linter.py +71 -1
  69. /package/scripts/{_backfill_skill_domains.py → _archive/_backfill_skill_domains.py} +0 -0
  70. /package/scripts/{_bootstrap_tier_frontmatter.py → _archive/_bootstrap_tier_frontmatter.py} +0 -0
  71. /package/scripts/{_p43_bodies.py → _archive/_p43_bodies.py} +0 -0
  72. /package/scripts/{_p43_compress.py → _archive/_p43_compress.py} +0 -0
  73. /package/scripts/{_p4_migrate.py → _archive/_p4_migrate.py} +0 -0
  74. /package/scripts/{_phase2_shim_helper.py → _archive/_phase2_shim_helper.py} +0 -0
  75. /package/scripts/{_pilot_council_question.py → _archive/_pilot_council_question.py} +0 -0
@@ -3,6 +3,7 @@ name: skill-writing
3
3
  description: "Use when deciding 'should this be a skill or a rule?', creating/improving/reviewing agent skills, SKILL.md frontmatter, or procedure sections — even without saying 'skill-writing'."
4
4
  source: project
5
5
  domain: process
6
+ meta_skill: true
6
7
  ---
7
8
 
8
9
  # skill-writing
@@ -62,22 +63,25 @@ Ask: **"Does the model need this to do its job correctly?"**
62
63
 
63
64
  ### Skills and commands share the `.claude/skills/` namespace
64
65
 
65
- Skills (`.agent-src.uncompressed/skills/{name}/SKILL.md`) AND commands
66
- (`.agent-src.uncompressed/commands/{name}.md`) both project into
67
- `.claude/skills/` (`scripts/compress.py` → `generate_claude_skills` +
68
- `generate_claude_commands`). Claude treats the directory as native
69
- skills.
70
-
71
- * Same-name collision: skill wins, command is skipped
72
- (`generate_claude_commands` honors this). Don't reuse a command's
73
- slug for a skill unless the command should retire.
74
- * Both compete on `description` for routing. A weak skill description
75
- is shadowed by a stronger same-domain command and vice versa.
76
- Trigger phrasing must be precise (§ 1b below).
77
- * Workflow has both "user types `/foo`" path AND "model picks this up
78
- from intent" path author the skill first, let the command delegate
79
- via `skills:` frontmatter. Two artifacts with the same trigger
80
- surface fight each other in the router.
66
+ Skills in `.agent-src.uncompressed/skills/{name}/SKILL.md` AND commands in
67
+ `.agent-src.uncompressed/commands/{name}.md` both project into
68
+ `.claude/skills/` (see `scripts/compress.py` →
69
+ `generate_claude_skills` + `generate_claude_commands`). Claude treats
70
+ the whole directory as native skills.
71
+
72
+ Implications for skill authors:
73
+
74
+ * If a same-name command already exists, the skill takes priority and
75
+ the command is skipped (`generate_claude_commands` honors this).
76
+ Don't reuse a command's slug for a skill unless the command should
77
+ retire.
78
+ * Both artifacts compete on `description` for routing. A weak skill
79
+ description is shadowed by a stronger same-domain command and vice
80
+ versa. Make trigger phrasing precise 1b below).
81
+ * When the workflow has both a "user types `/foo`" path AND a "model
82
+ picks this up from intent" path, author the skill first and let the
83
+ command delegate (`skills:` frontmatter). Two artifacts with the same
84
+ trigger surface fight each other in the router.
81
85
 
82
86
  ### When "Nothing" is the right answer
83
87
 
@@ -263,6 +267,87 @@ Example:
263
267
  * K7: Created with analysis (not blind, expected behavior defined)
264
268
  * Size: Within limits (see size-and-scope guideline)
265
269
 
270
+ ### 7. Run + iterate evals (quantitative loop)
271
+
272
+ Triggers (`evals/triggers.json`) check **routing**. A separate
273
+ `evals/evals.json` checks **behavior** — does the skill make the agent
274
+ produce a better answer than baseline? Add this layer for any skill
275
+ where the procedure has measurable output (commands, artifacts,
276
+ structured text). Skip for evergreen heuristics with no falsifiable
277
+ output (e.g. `direct-answers`, `language-and-tone`) unless the user
278
+ asks for it.
279
+
280
+ **Workspace layout** (all under `.gitignore`):
281
+
282
+ ```
283
+ .agent-src.uncompressed/skills/{name}/evals/
284
+ triggers.json # tracked — routing eval (§ 1c)
285
+ evals.json # tracked — behavior eval definitions
286
+ runs/ # gitignored — per-iteration outputs
287
+ {timestamp}-baseline/ # sub-agent run without the skill
288
+ {timestamp}-with-skill/ # sub-agent run with the skill
289
+ {timestamp}-benchmark.json
290
+ ```
291
+
292
+ **`evals.json` shape** — 3–10 scenarios, each with prompt + grading
293
+ rubric:
294
+
295
+ ```json
296
+ {
297
+ "skill": "{name}",
298
+ "scenarios": [
299
+ {
300
+ "id": "happy-path",
301
+ "prompt": "<full user-shaped task that exercises the skill>",
302
+ "assertions": [
303
+ {"kind": "contains", "value": "<expected substring in output>"},
304
+ {"kind": "file_exists", "path": "<artifact path the skill should create>"},
305
+ {"kind": "rubric", "criterion": "<one-line judgement, e.g. 'output includes a numbered procedure'>"}
306
+ ]
307
+ }
308
+ ]
309
+ }
310
+ ```
311
+
312
+ `contains` / `file_exists` grade deterministically. `rubric` items grade
313
+ via a fresh sub-agent reading the output against the criterion — keep
314
+ each criterion to one falsifiable sentence.
315
+
316
+ **Loop** (orchestrated by `scripts/run_skill_evals.py`):
317
+
318
+ 1. **Scaffold** — `python3 scripts/run_skill_evals.py scaffold {skill}`
319
+ creates `runs/{timestamp}-{baseline,with-skill}/` and seeds each
320
+ scenario's `meta.json`.
321
+ 2. **Baseline run** — spawn one sub-agent per scenario **without** the
322
+ skill loaded. Capture stdout + any artifacts into
323
+ `runs/{timestamp}-baseline/{scenario-id}/`.
324
+ 3. **With-skill run** — same scenarios, same sub-agent harness, **with**
325
+ the skill loaded. Capture into `runs/{timestamp}-with-skill/{scenario-id}/`.
326
+ 4. **Grade** — for each scenario, write a `grade.json` file with
327
+ per-assertion pass/fail. Deterministic assertions auto-grade;
328
+ rubric assertions need a grader sub-agent.
329
+ 5. **Aggregate** — `python3 scripts/run_skill_evals.py aggregate {skill}
330
+ --run {timestamp}` produces `runs/{timestamp}-benchmark.json` with
331
+ pass-rate, timing, token deltas baseline-vs-with-skill.
332
+ 6. **Report** — `python3 scripts/run_skill_evals.py report {skill}
333
+ --run {timestamp}` prints the diff. Iterate on the skill body
334
+ until `with-skill` outperforms `baseline` on every scenario.
335
+
336
+ The script ships with sub-agent spawning **stubbed** — the orchestration
337
+ layer is per-environment (Claude Code, Augment, council). Implement
338
+ the spawn function once for your environment, the rest of the loop
339
+ (aggregate / report / scaffold) works out of the box.
340
+
341
+ **Exit criterion** — every scenario passes with-skill, at least one
342
+ fails baseline (proves the skill earns its slot). Commit the
343
+ `evals.json` alongside the skill; never commit `runs/`.
344
+
345
+ Neighbors:
346
+ * `description-assist` — iterate on the trigger phrasing
347
+ * `skill-reviewer` — structural 7-Killers audit
348
+ * `lint-skills` — static checks (frontmatter, sections, size)
349
+ * `skill-improvement-pipeline` — production-learning capture
350
+
266
351
  ## Output format
267
352
 
268
353
  1. Complete SKILL.md file
@@ -17,7 +17,7 @@ Do NOT use when:
17
17
 
18
18
  ## Procedure: Write raw SQL
19
19
 
20
- 1. **Choose approach** — Use query builder when possible. Raw SQL only when query builder can't express the query.
20
+ 1. **Inspect call site & choose approach** — identify every dynamic value flowing into the query, then pick: query builder when possible. Raw SQL only when query builder can't express the query.
21
21
  2. **Parameterize** — Every variable must use `?` binding or named `:param`. Never interpolate PHP variables into SQL strings.
22
22
  3. **Use MariaDB syntax** — Not PostgreSQL or MSSQL. Check `php/sql.md` for MariaDB-specific patterns.
23
23
  4. **Verify** — Run EXPLAIN on complex queries. Check that no PHP interpolation (`"$var"`, `'{$var}'`) appears in SQL.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: symfony-workflow
3
- description: "Writes Symfony code following framework conventions, container wiring, and modern best practices for controllers, services, bundles, Messenger, Doctrine, security, and console commands."
3
+ description: "Writes Symfony PHP DI container, bundles, Doctrine, Messenger, Security voters, console commands. For Laravel / Eloquent / Artisan use `laravel`. For framework-free PHP use `php-coder`."
4
4
  source: package
5
5
  domain: engineering
6
6
  ---
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: universal-project-analysis
3
- description: "ONLY when user explicitly requests: full project analysis, deep codebase audit, or comprehensive architecture review. Routes to core and framework-specific analysis skills."
3
+ description: "ONLY when user asks for deep multi-pass codebase audit orchestrator routing to `project-analysis-core` + framework-specific `project-analysis-*`. Single-pass scan → `project-analyzer`."
4
4
  source: package
5
5
  domain: discovery
6
6
  ---
@@ -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.py (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "2.8.0"
42
+ agent_config_version: "2.12.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "2.11.0",
9
+ "version": "2.13.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
@@ -71,6 +71,7 @@
71
71
  "./.claude/skills/bug-fix",
72
72
  "./.claude/skills/bug-investigate",
73
73
  "./.claude/skills/build-buy-partner",
74
+ "./.claude/skills/canvas-design",
74
75
  "./.claude/skills/challenge-me",
75
76
  "./.claude/skills/challenge-me-vision",
76
77
  "./.claude/skills/challenge-me-with-docs",
@@ -104,6 +105,8 @@
104
105
  "./.claude/skills/copilot-config",
105
106
  "./.claude/skills/cost-report",
106
107
  "./.claude/skills/council",
108
+ "./.claude/skills/council-analysis",
109
+ "./.claude/skills/council-debate",
107
110
  "./.claude/skills/council-default",
108
111
  "./.claude/skills/council-design",
109
112
  "./.claude/skills/council-optimize",
@@ -126,6 +129,7 @@
126
129
  "./.claude/skills/devcontainer",
127
130
  "./.claude/skills/developer-like-execution",
128
131
  "./.claude/skills/discovery-interview",
132
+ "./.claude/skills/doc-coauthoring",
129
133
  "./.claude/skills/docker",
130
134
  "./.claude/skills/dto-creator",
131
135
  "./.claude/skills/e2e-heal",
package/AGENTS.md CHANGED
@@ -18,7 +18,7 @@ task ci # full pipeline — green before PR
18
18
 
19
19
  - **Package self-orientation** (beta) — identity, four-wing cognition map, repo layout, tech stack, key-rules table, telemetry, command-suggester: [`docs/contracts/package-self-orientation.md`](docs/contracts/package-self-orientation.md).
20
20
  - **Kernel + Router** (beta) — 9 always-loaded Iron-Law rules, tier-1 / tier-2 routing, cost profiles, per-rule char caps enforced by `task lint-rule-budget`: [`kernel-membership`](docs/contracts/kernel-membership.md) + [`rule-router`](docs/contracts/rule-router.md).
21
- - **Content pipelines** — A [compression](docs/architecture/compression.md), B [Augment projection](docs/architecture/augment-projection.md), C [multi-tool projection](docs/architecture/multi-tool-projection.md), D [Claude.ai bundle](docs/architecture/claude-bundle.md). Index: [`docs/architecture.md`](docs/architecture.md).
21
+ - **Content pipelines** — A [source projection](docs/architecture/source-projection.md), B [Augment projection](docs/architecture/augment-projection.md), C [multi-tool projection](docs/architecture/multi-tool-projection.md), D [Claude.ai bundle](docs/architecture/claude-bundle.md). Index: [`docs/architecture.md`](docs/architecture.md).
22
22
  - **Editing this repo** — Iron-Law rules (portability, source-of-truth, skill-quality) + Thin-Root contract: [`augment-portability`](.agent-src/rules/augment-portability.md), [`augment-source-of-truth`](.agent-src/rules/augment-source-of-truth.md), [`skill-quality`](.agent-src/rules/skill-quality.md), [`agents-md-thin-root`](.agent-src/skills/agents-md-thin-root/SKILL.md).
23
23
  - **Consumer story** — `npx` + `scripts/install.sh` + `.agent-settings.yml` opt-in flags, sandbox/offline install paths, verified-offline manifest: [`README.md`](README.md).
24
24
  - **Personas** — 11 review-lens cast (6 core · 5 specialist), `personas:` vs `/mode` axes, citation map, override pattern: [`docs/personas.md`](docs/personas.md), schema [`docs/contracts/persona-schema.md`](docs/contracts/persona-schema.md) (beta).
package/CHANGELOG.md CHANGED
@@ -429,6 +429,84 @@ our recommendation order, not its support status.
429
429
  > that forces a new era split (`# Era: 2.8.x`, etc.) — see
430
430
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
431
431
 
432
+ ## [2.13.0](https://github.com/event4u-app/agent-config/compare/2.12.0...2.13.0) (2026-05-14)
433
+
434
+ ### Features
435
+
436
+ * **council:** Phase 7 — debate orchestration + CLI wiring ([647a3f0](https://github.com/event4u-app/agent-config/commit/647a3f07698792f41beb7413600d54b2321f4a96))
437
+ * **council:** Phase 7 — /council debate sub-command files ([abbd436](https://github.com/event4u-app/agent-config/commit/abbd43666b7e2c704ab3c46f2901f01eae446139))
438
+ * **council:** Phase 6 — thinking-style advisor personas ([21c8b88](https://github.com/event4u-app/agent-config/commit/21c8b88310a2a65d7ea9082da085d023f813d114))
439
+ * **council:** Phase 5 — Karpathy peer-review opt-in flag ([bce381a](https://github.com/event4u-app/agent-config/commit/bce381ae9c412abf501473fa4154f91d9c0befbf))
440
+ * **council:** analysis lens + lens-adaptive synthesis + consensus scoring ([6d7136a](https://github.com/event4u-app/agent-config/commit/6d7136ad6be31b7627a332600a7623f2cd929e76))
441
+ * **council:** add config loader, overlay, and 3 new provider clients ([0cb5591](https://github.com/event4u-app/agent-config/commit/0cb55914457a62b6f57744d8c8dac16bf777921d))
442
+ * **council:** introduce agents/.ai-council.yml as single source of truth ([043c2d2](https://github.com/event4u-app/agent-config/commit/043c2d23445f2ef7ad8aee880dc83d97c347635f))
443
+ * **governance:** Phase 5 — roadmap trajectory metric + architectural-consensus ADR ([926a632](https://github.com/event4u-app/agent-config/commit/926a63237c3dbe1fcfd7df05c9230809382d8790))
444
+ * **projection:** Phase 4 + 1.4 — multi-tool projection fidelity contract + ci-strict gate ([e18e4ad](https://github.com/event4u-app/agent-config/commit/e18e4ad73595e17889009b0123ebd000254c165b))
445
+ * **routing:** Phase 3 — tighten skill descriptions + 4 tier-3 routing rules for failing clusters ([2a11c70](https://github.com/event4u-app/agent-config/commit/2a11c70b274741e7d98fd814ac39c1d05a1a38c9))
446
+ * **governance:** Phase 1 — credibility (CONTRIBUTING preface, source-projection rename, archive 7 migration scripts) ([2e5cfe0](https://github.com/event4u-app/agent-config/commit/2e5cfe02e1b5f4218d1283108796b0ce43fd9165))
447
+
448
+ ### Bug Fixes
449
+
450
+ * **docs:** drop transient council-sessions citation from multi-tool-projection ([55dbbb1](https://github.com/event4u-app/agent-config/commit/55dbbb1e599aae2d913dc56a05c9dab0014e2739))
451
+ * **linter:** treat ../docs/contracts/ links as out-of-scope like guidelines ([a2249b0](https://github.com/event4u-app/agent-config/commit/a2249b02b70233e2b13ccf3efeda4188686b6181))
452
+ * **routing:** strip transient roadmap citation from tier-3 routing rules ([2cf745c](https://github.com/event4u-app/agent-config/commit/2cf745cad9beb40c4e6e9eb7f97abbc58a94d9de))
453
+
454
+ ### Documentation
455
+
456
+ * **roadmap:** rename "rule" to "invariant" for deep_min_rounds reference ([758ea46](https://github.com/event4u-app/agent-config/commit/758ea46568c23ef5518ff61d80700f7559bc54a1))
457
+ * **ai-council:** sync compressed SKILL.md with Phase 6 advisors section ([6d57034](https://github.com/event4u-app/agent-config/commit/6d57034c7b342abdd5d38ff300fa67c51deb3471))
458
+ * **council:** document master/wrapper contract for the council cluster ([7346f34](https://github.com/event4u-app/agent-config/commit/7346f34376b48c02ced3ae939dfff6ea215025ba))
459
+
460
+ ### Tests
461
+
462
+ * **ai-council:** Phase 8 — negative-test backfill for config loader ([cc3a08c](https://github.com/event4u-app/agent-config/commit/cc3a08c360c94685f9a1efaaa57f84001f78788c))
463
+
464
+ ### Chores
465
+
466
+ * **roadmaps:** archive step-2-ai-council-consolidation — all phases + ACs done ([c7f0c9c](https://github.com/event4u-app/agent-config/commit/c7f0c9ca7ac300023c5da0b939e0c63554dbcfed))
467
+ * **docs:** bump getting-started command count 106 -> 108 after council debate sub-command ([5e256d7](https://github.com/event4u-app/agent-config/commit/5e256d79d3eea3046900e8afa5be64526b4fc61d))
468
+ * **roadmaps:** retag complexity from "medium" to lint-valid values ([4c5457e](https://github.com/event4u-app/agent-config/commit/4c5457e271f8dcdc03943bac7adff84455388615))
469
+ * regenerate index + catalog for council-debate skill ([3c365a3](https://github.com/event4u-app/agent-config/commit/3c365a375da22f16f97829677c875500e40d436a))
470
+ * **roadmap:** mark Phases 6-7 of step-2-ai-council-consolidation complete ([7e8e557](https://github.com/event4u-app/agent-config/commit/7e8e557505bbf88b486605980a7f5ee2f97bcbb4))
471
+ * **roadmap:** mark Phases 1-4 of step-2-ai-council-consolidation complete ([101a5cf](https://github.com/event4u-app/agent-config/commit/101a5cf70d4fc694f85a270b2bebfb8fe545833a))
472
+ * **roadmap:** mark Phase 0 of step-2-ai-council-consolidation complete ([4fa2734](https://github.com/event4u-app/agent-config/commit/4fa27346c8faad54de582757ce5cfe7216041bda))
473
+ * **template:** bump agent_config_version pin to 2.12.0 ([e5c41fd](https://github.com/event4u-app/agent-config/commit/e5c41fd433105359d6e36b03b0de62415be212f0))
474
+ * regenerate agents/index.md + docs/catalog.md after rule additions ([b7fa4b6](https://github.com/event4u-app/agent-config/commit/b7fa4b6e25cbc55d8b3197f815c00530bd1eee79))
475
+ * **roadmap:** archive completed step-1-v2-feedback-followup (20/20 done) ([88a07ea](https://github.com/event4u-app/agent-config/commit/88a07ea9a983f0b63710e5461c8fddee36b2d378))
476
+
477
+ Tests: 3868 (+150 since 2.12.0)
478
+
479
+ ## [2.12.0](https://github.com/event4u-app/agent-config/compare/2.11.0...2.12.0) (2026-05-14)
480
+
481
+ ### Features
482
+
483
+ * **linter:** evals.json schema validator + meta_skill exemption ([9568510](https://github.com/event4u-app/agent-config/commit/95685109540c7f2dc2643ec24ba9d996467e0645))
484
+ * **skill-writing:** § 7 quantitative eval loop + run_skill_evals.py ([9eda402](https://github.com/event4u-app/agent-config/commit/9eda402dc43b8e14682787fb1cbbc9872eb16fcc))
485
+ * **skills:** add doc-coauthoring from Anthropic ([161b904](https://github.com/event4u-app/agent-config/commit/161b9044743753f2e54bcae45c36a29daaa8058d))
486
+ * **skills:** add canvas-design from Anthropic ([95c247c](https://github.com/event4u-app/agent-config/commit/95c247c08d3c6710c53bfcd7ba7a00f270e0d8d4))
487
+ * **check-refs:** add file/line opt-out markers ([f381bcb](https://github.com/event4u-app/agent-config/commit/f381bcb5a08818e042af35836dd2c4d8965aa98e))
488
+ * make ai-council max_output_tokens configurable ([5976b46](https://github.com/event4u-app/agent-config/commit/5976b4623b94277f6ba49b0e82bb36ab7d5adb50))
489
+
490
+ ### Bug Fixes
491
+
492
+ * **marketplace:** register canvas-design + doc-coauthoring ([9fbfe6a](https://github.com/event4u-app/agent-config/commit/9fbfe6af83589bf45b27b72c1b818be9772ae60c))
493
+
494
+ ### Documentation
495
+
496
+ * **audit:** mark forward-refs in north-star bundle as opt-out ([a1d7c21](https://github.com/event4u-app/agent-config/commit/a1d7c21df3d05c27bacf81344893c4e43ae72a06))
497
+ * **roadmap:** expand step-99 with Total Dominance mandate ([c46cffd](https://github.com/event4u-app/agent-config/commit/c46cffd54214a61230be27ddaae3367053be39a5))
498
+ * **roadmap:** add step-99 north-star restructure (meta · out-of-band) ([8dd18f9](https://github.com/event4u-app/agent-config/commit/8dd18f963742d14dd9d006237ddd93881b198a60))
499
+ * **audit:** correct step-3 filename reference ([ee6bd7f](https://github.com/event4u-app/agent-config/commit/ee6bd7ffc6c6cd363b6207b6ff32aa72f2bc317e))
500
+ * **audit:** add 2026-05-14 north-star audit + council synthesis ([589c2fb](https://github.com/event4u-app/agent-config/commit/589c2fbd3e35b57529ab0f934665d71d611012d4))
501
+ * add roadmaps for council, persona, ghostwriter, user-types axis ([471fae3](https://github.com/event4u-app/agent-config/commit/471fae3a46182d930fea21adb4037a41ec99dcb3))
502
+ * add v2 feedback follow-up roadmap ([23d17cb](https://github.com/event4u-app/agent-config/commit/23d17cb24b33e794f7c1e31e76055cc5c8f1ab6c))
503
+
504
+ ### Chores
505
+
506
+ * prefix roadmaps with step-N execution sequence ([de87232](https://github.com/event4u-app/agent-config/commit/de87232213404ad104e07c5ca831d64f4a607f8e))
507
+
508
+ Tests: 3718 (+0 since 2.11.0)
509
+
432
510
  ## [2.11.0](https://github.com/event4u-app/agent-config/compare/2.10.0...2.11.0) (2026-05-14)
433
511
 
434
512
  ### Features
package/CONTRIBUTING.md CHANGED
@@ -3,6 +3,11 @@
3
3
  Thanks for considering a contribution to `event4u/agent-config`. This file
4
4
  describes how to propose changes and what the package's conventions are.
5
5
 
6
+ > **This project is currently single-maintainer (`matze4u`).** Contributions
7
+ > are welcome; expect direct review and potentially slower response than
8
+ > multi-maintainer projects. The process below describes the target workflow
9
+ > as the contributor base grows.
10
+
6
11
  ## Status and scope
7
12
 
8
13
  The package is maintained by a small team at event4u:
package/README.md CHANGED
@@ -7,7 +7,7 @@ Give your AI agents an audit-disciplined orchestration contract — testing, Git
7
7
  > Your agent picks up the project's stack, runs tests, prepares PRs, fixes CI — and follows your team's coding standards while doing it. Stack-aware skill sets ship for PHP (Laravel · Symfony · Zend/Laminas), JavaScript (Next.js · React · Node), and cross-stack concerns (API · testing · security · observability).
8
8
 
9
9
  <p align="center">
10
- <strong>208 Skills</strong> · <strong>61 Rules</strong> · <strong>106 Commands</strong> · <strong>72 Guidelines</strong> · <strong>8 AI Tools</strong>
10
+ <strong>210 Skills</strong> · <strong>65 Rules</strong> · <strong>108 Commands</strong> · <strong>72 Guidelines</strong> · <strong>8 AI Tools</strong>
11
11
  </p>
12
12
 
13
13
  ---
@@ -524,7 +524,7 @@ kernel set: [`docs/contracts/kernel-membership.md`](docs/contracts/kernel-member
524
524
  | [`/jira-ticket`](.agent-src/commands/jira-ticket.md) | Read ticket from branch, implement feature |
525
525
  | [`/compress`](.agent-src/commands/compress.md) | Compress skills for token efficiency |
526
526
 
527
- → [Browse all 106 active commands](.agent-src/commands/)
527
+ → [Browse all 108 active commands](.agent-src/commands/)
528
528
 
529
529
  ---
530
530
 
@@ -556,7 +556,7 @@ slash-commands) &nbsp; 📌 = informational marker only (no auto-discovery
556
556
  or manual wiring required)
557
557
 
558
558
  > **What this means in practice:** Claude Code gets the full project-scoped
559
- > package (rules + 208 skills + 106 native commands); Augment Code gets the
559
+ > package (rules + 210 skills + 108 native commands); Augment Code gets the
560
560
  > same content but only from a single global install at `~/.augment/`.
561
561
  > Cursor, Cline, Windsurf, Gemini CLI, GitHub Copilot, Roo Code, Codex CLI,
562
562
  > and Continue.dev only get the **rules** natively; skills and commands are
@@ -232,91 +232,12 @@ worktrees:
232
232
 
233
233
  # --- AI Council (external second-opinion network) ---
234
234
  #
235
- # When enabled, the /council command lets the agent poll independent
236
- # external models (OpenAI, Anthropic) for a neutral critique of a
237
- # roadmap, diff, prompt, or file set. Council members never see the
238
- # host agent's reasoning only the artefact + a neutral system prompt.
235
+ # Configuration moved to `agents/.ai-council.yml` as of the Step-2
236
+ # consolidation roadmap. Consumer projects opt in by copying the
237
+ # reference file from the package (`agents/.ai-council.yml`) into their
238
+ # own `agents/` tree and flipping `enabled: true` per provider.
239
239
  #
240
- # Tokens are NEVER stored here. They live in ~/.event4u/agent-config/
241
- # <provider>.key (mode 0600; legacy ~/.config/agent-config/<provider>.key
242
- # is read as a fallback), installed via:
243
- # bash scripts/install_anthropic_key.sh
244
- # bash scripts/install_openai_key.sh
245
- #
246
- # Cost note: every consultation makes real, paid API calls. The
247
- # autonomy directive does NOT silently spend tokens — the /council
248
- # command always asks before invoking, even under autonomy: on.
249
- ai_council:
250
- # Master switch (true, false). Default false — installing a key is
251
- # not the same as wanting the agent to spend money on it.
252
- enabled: false
253
-
254
- # Default transport mode for every member (overridable per-member
255
- # below, and per-invocation via `/council mode:<x>`).
256
- #
257
- # api = direct SDK call against the provider's API (billable).
258
- # manual = copy-paste loop, user is the transport (free).
259
- #
260
- # Precedence: invocation flag > per-member mode > global mode > "manual".
261
- mode: "manual"
262
-
263
- # Per-member configuration. Set enabled=true on the providers you want
264
- # to consult. The model field selects which model receives the query.
265
- # Optional `mode:` overrides the global setting for that member only.
266
- members:
267
- anthropic:
268
- enabled: false
269
- model: "claude-sonnet-4-5"
270
- # mode: "api" # uncomment to override ai_council.mode
271
- openai:
272
- enabled: false
273
- model: "gpt-4o"
274
- # mode: "manual" # uncomment to override ai_council.mode
275
-
276
- # Default number of debate rounds per /council invocation.
277
- #
278
- # Round 1 sees the artefact alone. Round 2+ sees the artefact plus
279
- # anonymised critiques from the previous round (provider/model
280
- # identity stripped per the neutrality Iron Law). Applies identically
281
- # to api and manual transports — manual mode runs round 1 across all
282
- # members, the host agent consolidates, then round 2 starts with the
283
- # anonymised round-1 critiques folded in.
284
- #
285
- # Default is 2 so council members critique each other at least once
286
- # before convergence. The agent does NOT ask "how many rounds?" when
287
- # the requested rounds <= min_rounds; pass `rounds:N` on the
288
- # invocation (or `--rounds N` to the CLI) to override.
289
- min_rounds: 2
290
-
291
- # Higher floor for deep-reasoning artefacts (architecture review,
292
- # refactoring proposals, bug-diagnosis runs). Activated when the
293
- # consuming rule, skill, or command declares `council_depth: deep`
294
- # in its frontmatter, or the user passes `--depth deep` to the CLI.
295
- # Effective rounds = max(deep_min_rounds, min_rounds), so this floor
296
- # is monotonic — lowering it below `min_rounds` has no effect.
297
- # Standard tasks keep `min_rounds`; cost rises only when an artefact
298
- # opts in. Set to `min_rounds` to disable the deep tier.
299
- deep_min_rounds: 3
300
-
301
- # Hard cost ceiling per /council invocation. The orchestrator pauses
302
- # before any member whose projected spend would breach a cap and asks
303
- # the user to continue. `max_total_usd: 0` disables the USD ceiling
304
- # (token caps still apply). Total spend = rounds * single-round cost.
305
- #
306
- # Prices come from `agents/.agent-prices.md` (gitignored, refreshed weekly
307
- # by `python3 scripts/update_prices.py`; bootstrapped from
308
- # scripts/ai_council/_default_prices.py on first run).
309
- cost_budget:
310
- max_input_tokens: 50000
311
- max_output_tokens: 20000
312
- max_calls: 10
313
- max_total_usd: 0.50
314
-
315
- # Retention for council artefacts. Files older than this in
316
- # `agents/council-{questions,responses,sessions}/` are pruned
317
- # automatically on the next `save()` and on `task council-prune`.
318
- # `0` disables pruning (keep forever — disk grows unbounded).
319
- session_retention_days: 7
240
+ # See `docs/contracts/ai-council-config.md` for the schema.
320
241
 
321
242
  # --- Onboarding ---
322
243
  #
@@ -61,6 +61,56 @@ removes `.cursor/` on next `task generate-tools`.
61
61
  | Stale `.windsurfrules` after rule rename | concatenation cache | `task clean-tools && task generate-tools` |
62
62
  | Gemini CLI reads outdated content | `AGENTS.md` changed without re-symlink | `task generate-tools` |
63
63
 
64
+ ## Per-tool projection size
65
+
66
+ The previous "0.45 % reduction" headline was a wrong-boundary
67
+ measurement: that figure compares `.agent-src.uncompressed/` to
68
+ `.agent-src/`, but the pipeline's claimed function is *projection*, not
69
+ byte compression. The table below is produced by
70
+ [`scripts/measure_projection_bytes.py --regenerate`](../../scripts/measure_projection_bytes.py)
71
+ with every tool ID temporarily enabled in `.agent-tools.yml`.
72
+
73
+ | Surface | Files | Symlinks | Bytes materialized | Method |
74
+ |---|---:|---:|---:|---|
75
+ | `.agent-src.uncompressed/` | 596 | 0 | 3,253,997 | verbose source (input) |
76
+ | `.agent-src/` | 596 | 0 | 3,242,579 | source projection (path-rewrite + `.npmignore`) |
77
+ | `.augment/` | 61 | 7 | 136,146 | Augment Code — copies (rules) + symlinks (skills/cmds) |
78
+ | `.claude/` | 0 | 395 | 0 | Claude Code — pure symlinks |
79
+ | `.cursor/` | 61 | 189 | 124,741 | Cursor — per-rule `.mdc` materialized + symlinks |
80
+ | `.clinerules/` | 0 | 61 | 0 | Cline — pure symlinks |
81
+ | `.windsurf/` | 61 | 106 | 125,010 | Windsurf — per-rule wave-8 `.md` + symlinks |
82
+ | `.windsurfrules` | 1 | 0 | 114,263 | Windsurf legacy — concatenated single file |
83
+ | `GEMINI.md` | 0 | 1 | 0 | Gemini CLI — symlink → `AGENTS.md` |
84
+
85
+ **What the pipeline optimises**
86
+
87
+ - **Format fidelity** — each tool receives content in the format its host
88
+ reads natively (Cursor `.mdc` frontmatter, Windsurf Wave-8 frontmatter,
89
+ Claude / Cline symlinked into the source tree, Gemini single-file).
90
+ - **Path stability** — surface paths match the host vendor's
91
+ documentation so users opt in by enabling the tool, not by remapping.
92
+ - **Materialization minimization** — pure-symlink tools (`.claude/`,
93
+ `.clinerules/`, `GEMINI.md`) contribute zero bytes; tools that need a
94
+ format transform materialize only the transformed rule files.
95
+
96
+ **What the pipeline does not optimise**
97
+
98
+ - **Raw byte count** — `.cursor/` and `.windsurf/` *grow* the on-disk
99
+ footprint by ~125 KB each because their host formats require
100
+ per-rule frontmatter that cannot be supplied via symlink alone.
101
+ `.windsurfrules` materializes the rule set a second time as a
102
+ concatenated single file for users who prefer that surface.
103
+ - **Source dedup** — the same rule body appears in `.agent-src/rules/`
104
+ *and* in every tool's materialized projection. This is intentional:
105
+ removing the duplication would push format conversion into runtime.
106
+
107
+ Re-run the measurement after every change to the projection logic:
108
+
109
+ ```bash
110
+ python3 scripts/measure_projection_bytes.py --regenerate
111
+ python3 scripts/measure_projection_bytes.py --json # CI-friendly
112
+ ```
113
+
64
114
  ## Proving the pipeline
65
115
 
66
116
  - [`tests/test_modern_editor_formats.py`](../../tests/test_modern_editor_formats.py)
@@ -68,5 +118,8 @@ removes `.cursor/` on next `task generate-tools`.
68
118
  frontmatter; runs only when `task generate-tools` has been executed.
69
119
  - [`tests/test_compress.py`](../../tests/test_compress.py) — covers
70
120
  the shared compress / generate-tools entrypoint and `_filter_tool_dirs`.
121
+ - [`scripts/measure_projection_bytes.py`](../../scripts/measure_projection_bytes.py)
122
+ — per-tool byte / file / symlink count; the per-tool-size table above
123
+ is its output.
71
124
 
72
125
  ← [Architecture overview](../architecture.md)
@@ -1,7 +1,25 @@
1
- # Pipeline A — Compression
1
+ # Pipeline A — Source projection
2
2
 
3
- > **Scope:** transform verbose authoring source into the token-efficient
4
- > distribution payload that ships in the npm package.
3
+ > **Scope:** transform verbose authoring source into the deterministic
4
+ > distribution payload that ships in the npm package. The pipeline does
5
+ > path-rewriting, `.npmignore`-style filtering, hash-tracking, and (on
6
+ > selected files) caveman-style prose compression. The *primary* function
7
+ > is the source-to-dist projection itself; raw byte reduction is small
8
+ > (~0.35 % on the source/dist boundary: 3,253,997 B → 3,242,579 B across
9
+ > 596 files) because most files are 1:1-projected with only frontmatter
10
+ > and link rewrites. Per-tool size at the downstream projection
11
+ > boundaries (`.augment/`, `.claude/`, `.cursor/`, `.windsurf/`,
12
+ > `.clinerules/`, `.windsurfrules`, `GEMINI.md`) is measured separately
13
+ > — see [`multi-tool-projection.md § Per-tool projection size`](multi-tool-projection.md#per-tool-projection-size)
14
+ > for the table produced by [`scripts/measure_projection_bytes.py`](../../scripts/measure_projection_bytes.py).
15
+
16
+ > **Historical note.** This pipeline was previously labelled
17
+ > "Compression". Renamed in the v2.10.0 feedback follow-up after the
18
+ > council pointed out that the dominant function is projection, not
19
+ > byte compression. The script names (`scripts/compress.py`,
20
+ > `scripts/compress.sh`) are kept for now to avoid a large blast-radius
21
+ > refactor; the prose-compression sub-step (and the `/compress` slash
22
+ > command for caveman text compression) still earn the legacy name.
5
23
 
6
24
  ## Input → Transform → Output
7
25
 
@@ -10,7 +10,7 @@ Six layers, ordered from "how the package reaches a consumer" down to "what a co
10
10
  Distribution → npx-only runtime · install.sh · lockfile pin ← stable
11
11
  Governance → Kernel rules · tier-1/2 routing · command clusters ← stable
12
12
  Router-Kernel → router.json · always-loaded Iron Laws · char caps ← stable
13
- Projection → Compression · augment / multi-tool / cloud bundles ← stable
13
+ Projection → Source · augment / multi-tool / cloud bundles ← stable
14
14
  Execution Contracts → Skills · commands · work-engine · roadmap engine ← stable / beta
15
15
  MCP Lite/Full → Hosted read-only (Lite) · local stdio (Full) ← experimental
16
16
  ```
@@ -20,7 +20,7 @@ MCP Lite/Full → Hosted read-only (Lite) · local stdio (Full)
20
20
  | **Distribution** | [`installed-tools-lockfile.md`](contracts/installed-tools-lockfile.md) + the "Distribution model" subsection below | stable |
21
21
  | **Governance** | [`command-clusters.md`](contracts/command-clusters.md) + [`command-surface-tiers.md`](contracts/command-surface-tiers.md) | stable |
22
22
  | **Router-Kernel** | [`kernel-membership.md`](contracts/kernel-membership.md) + [`rule-router.md`](contracts/rule-router.md) | stable |
23
- | **Projection** | [`architecture/compression.md`](architecture/compression.md), [`augment-projection.md`](architecture/augment-projection.md), [`multi-tool-projection.md`](architecture/multi-tool-projection.md), [`claude-bundle.md`](architecture/claude-bundle.md) | stable |
23
+ | **Projection** | [`architecture/source-projection.md`](architecture/source-projection.md), [`augment-projection.md`](architecture/augment-projection.md), [`multi-tool-projection.md`](architecture/multi-tool-projection.md), [`claude-bundle.md`](architecture/claude-bundle.md) | stable |
24
24
  | **Execution Contracts** | [`implement-ticket-flow.md`](contracts/implement-ticket-flow.md), [`orchestration-dsl-v1.md`](contracts/orchestration-dsl-v1.md), [`adr-product-ui-track.md`](contracts/adr-product-ui-track.md) | stable (skills · commands) / beta (work-engine · roadmap engine) |
25
25
  | **MCP Lite/Full** | [`mcp-phase-1-scope.md`](contracts/mcp-phase-1-scope.md), [`mcp-cloud-scope.md`](contracts/mcp-cloud-scope.md), [`mcp-beta-criteria.md`](contracts/mcp-beta-criteria.md) | experimental — promotion to beta gated on `mcp-beta-criteria.md` (six artefact gates, monitored by `agent-config doctor --check mcp-beta-readiness`) |
26
26
 
@@ -64,7 +64,7 @@ the pipeline.
64
64
 
65
65
  | Pipeline | Page | Output |
66
66
  |---|---|---|
67
- | **A.** Compression | [`architecture/compression.md`](architecture/compression.md) | `.agent-src/` |
67
+ | **A.** Source projection | [`architecture/source-projection.md`](architecture/source-projection.md) | `.agent-src/` |
68
68
  | **B.** Augment projection | [`architecture/augment-projection.md`](architecture/augment-projection.md) | `.augment/` |
69
69
  | **C.** Multi-tool projection | [`architecture/multi-tool-projection.md`](architecture/multi-tool-projection.md) | `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules`, `GEMINI.md` |
70
70
  | **D.** Claude.ai bundle | [`architecture/claude-bundle.md`](architecture/claude-bundle.md) | `dist/cloud/<skill>.zip` |
@@ -141,9 +141,9 @@ note, package-internal path-swap, description budget, and the
141
141
 
142
142
  | Layer | Count | Purpose |
143
143
  |---|---|---|
144
- | **Skills** | 208 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
145
- | **Rules** | 61 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
146
- | **Commands** | 106 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
144
+ | **Skills** | 210 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
145
+ | **Rules** | 65 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
146
+ | **Commands** | 108 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
147
147
  | **Guidelines** | 72 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
148
148
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
149
149
  | **Contexts** | 5 | Shared knowledge about the system itself |