@event4u/agent-config 9.28.0 → 9.29.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 (147) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +6 -6
  3. package/CHANGELOG.md +66 -0
  4. package/README.md +1 -1
  5. package/agents/templates/.ai-council.yml.example +55 -24
  6. package/dist/agent-src/commands/cost/report.md +2 -2
  7. package/dist/agent-src/commands/team/adversarial.md +8 -7
  8. package/dist/agent-src/commands/team/delegate.md +13 -12
  9. package/dist/agent-src/commands/team/review.md +9 -8
  10. package/dist/agent-src/commands/team/status.md +9 -8
  11. package/dist/agent-src/commands/team.md +29 -19
  12. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +88 -2
  13. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +29 -21
  14. package/dist/agent-src/contexts/execution/host-capability-manifest.md +26 -15
  15. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +18 -0
  16. package/dist/agent-src/contexts/execution/subagent-response-contract.md +54 -0
  17. package/dist/agent-src/contexts/execution/subagent-routing.md +13 -11
  18. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +25 -0
  19. package/dist/agent-src/contexts/execution/subagent-steering.md +6 -3
  20. package/dist/agent-src/rules/delegation-policy.md +11 -7
  21. package/dist/agent-src/rules/settings-ask-protocol.md +8 -7
  22. package/dist/agent-src/rules/token-budget-discipline.md +1 -1
  23. package/dist/agent-src/skills/forensics-report/SKILL.md +114 -0
  24. package/dist/agent-src/skills/forensics-report/evals/triggers.json +17 -0
  25. package/dist/agent-src/skills/premortem/SKILL.md +30 -1
  26. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -1
  27. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +7 -5
  28. package/dist/agent-src/skills/subagent-orchestration/schemas/subagent-status.json +61 -3
  29. package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
  30. package/dist/agent-src/templates/AGENTS.md +4 -4
  31. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  32. package/dist/agent-src/templates/roadmaps.md +23 -0
  33. package/dist/cli-delegate/{chunk-22GCIJ2O.js → chunk-66OVWGB5.js} +1 -1
  34. package/dist/cli-delegate/{chunk-GB2FSUEE.js → chunk-LCFJIQ4J.js} +32 -0
  35. package/dist/cli-delegate/{chunk-VSYT7OHO.js → chunk-LVRYBKTI.js} +31 -2
  36. package/dist/cli-delegate/{chunk-DVRS2KVR.js → chunk-MMXA5GY7.js} +10 -17
  37. package/dist/cli-delegate/{chunk-JXARCGVN.js → chunk-MP3JT3IU.js} +1 -1
  38. package/dist/cli-delegate/{chunk-PQSAQKHW.js → chunk-NZ5N2XQL.js} +3 -3
  39. package/dist/cli-delegate/{chunk-7OMQCH4V.js → chunk-OJM3MBJM.js} +1 -1
  40. package/dist/cli-delegate/{chunk-2BE5I2MN.js → chunk-RCIA67XN.js} +111 -90
  41. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  42. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  43. package/dist/cli-delegate/cmd_conformance.js +6 -43
  44. package/dist/cli-delegate/cmd_doctor.js +9 -5
  45. package/dist/cli-delegate/cmd_explain.js +2 -2
  46. package/dist/cli-delegate/cmd_export.js +4 -4
  47. package/dist/cli-delegate/cmd_handoff.js +3 -3
  48. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  49. package/dist/cli-delegate/cmd_migrate.js +2 -2
  50. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  51. package/dist/cli-delegate/cmd_prune.js +4 -4
  52. package/dist/cli-delegate/cmd_route_audit.js +2 -2
  53. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  54. package/dist/cli-delegate/cmd_settings_get.js +1 -7
  55. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  56. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  57. package/dist/cli-delegate/cmd_sync.js +4 -4
  58. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  59. package/dist/cli-delegate/cmd_update.js +1 -1
  60. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  61. package/dist/cli-delegate/cmd_validate.js +4 -4
  62. package/dist/cli-delegate/cmd_versions.js +1 -1
  63. package/dist/discovery/deprecation-report.md +1 -1
  64. package/dist/discovery/discovery-manifest.json +69 -20
  65. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  66. package/dist/discovery/discovery-manifest.summary.md +3 -2
  67. package/dist/discovery/orphan-report.md +1 -1
  68. package/dist/discovery/packs.json +39 -2
  69. package/dist/discovery/trust-report.md +2 -2
  70. package/dist/discovery/workspaces.json +12 -4
  71. package/dist/hooks/dispatch.js +373 -35
  72. package/dist/install/install.mjs +42 -17
  73. package/dist/mcp/registry-manifest.json +2 -2
  74. package/dist/mcp/server.json +2 -2
  75. package/dist/mcp/server.mjs +651 -262
  76. package/dist/router.json +1 -1
  77. package/dist/scripts/_lib/agent_settings.js +54 -0
  78. package/dist/scripts/_lib/agent_settings.js.map +1 -1
  79. package/dist/scripts/condense.js +147 -2
  80. package/dist/scripts/condense.js.map +1 -1
  81. package/dist/server/schemas/settings.js +6 -7
  82. package/dist/server/schemas/settings.js.map +1 -1
  83. package/dist/shared/settingsCarveOut.js +0 -9
  84. package/dist/shared/settingsCarveOut.js.map +1 -1
  85. package/dist/shared/settingsClasses.js +11 -9
  86. package/dist/shared/settingsClasses.js.map +1 -1
  87. package/dist/ui/assets/{index-DmR0mbk4.js → index-JDAF00bC.js} +2 -2
  88. package/dist/ui/assets/{index-DmR0mbk4.js.map → index-JDAF00bC.js.map} +1 -1
  89. package/dist/ui/index.html +1 -1
  90. package/docs/contracts/settings-classes.md +39 -9
  91. package/package.json +1 -1
  92. package/src/agent-src/templates/AGENTS.md +4 -4
  93. package/src/config/agent-settings.template.yml +52 -66
  94. package/src/config/discovery/packs.yml +11 -0
  95. package/src/config/discovery/workspaces.yml +1 -1
  96. package/src/config/gate-violation-baselines.json +3 -3
  97. package/src/scripts/_cli/cmd_conformance.ts +14 -42
  98. package/src/scripts/_cli/cmd_doctor.ts +65 -48
  99. package/src/scripts/_lib/agent_settings.ts +58 -0
  100. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +1 -1
  101. package/src/scripts/_lib/auto_dispatch.ts +23 -18
  102. package/src/scripts/_lib/capsule_trigger.ts +124 -0
  103. package/src/scripts/_lib/host_capability.ts +63 -6
  104. package/src/scripts/_lib/judgment_ladder.ts +382 -0
  105. package/src/scripts/_lib/orchestration_gate.ts +8 -0
  106. package/src/scripts/_lib/orchestration_record.ts +37 -0
  107. package/src/scripts/_lib/orchestration_savings.ts +1 -1
  108. package/src/scripts/_lib/self_repair.ts +160 -13
  109. package/src/scripts/_lib/self_repair_store.ts +28 -0
  110. package/src/scripts/_lib/subagent_capsule.ts +182 -0
  111. package/src/scripts/_lib/subagent_response.ts +19 -0
  112. package/src/scripts/_lib/subagent_spawn.ts +13 -0
  113. package/src/scripts/_lib/subagent_steering.ts +9 -4
  114. package/src/scripts/_lib/tier_budget_routing.ts +6 -1
  115. package/src/scripts/_lib/worker_budget.ts +37 -2
  116. package/src/scripts/ai_council/clients.ts +76 -54
  117. package/src/scripts/ai_council/config.ts +94 -6
  118. package/src/scripts/ai_council/handoff.ts +113 -0
  119. package/src/scripts/ai_council/modes.ts +19 -4
  120. package/src/scripts/ai_council/orchestrator.ts +105 -0
  121. package/src/scripts/ai_council/quorum.ts +84 -0
  122. package/src/scripts/ai_council/session.ts +44 -0
  123. package/src/scripts/ai_council/transport_resolver.ts +127 -1
  124. package/src/scripts/ai_team/availability.ts +110 -0
  125. package/src/scripts/ai_team/config.ts +34 -14
  126. package/src/scripts/ai_team/team_dispatch.ts +71 -29
  127. package/src/scripts/bench_critic_protocol.ts +396 -0
  128. package/src/scripts/check_detector_corpus.ts +202 -0
  129. package/src/scripts/check_hook_bundle_freshness.ts +4 -1
  130. package/src/scripts/condense.ts +162 -2
  131. package/src/scripts/council_cli.ts +401 -25
  132. package/src/scripts/forensics_report.ts +333 -0
  133. package/src/scripts/hooks/delegation_nudge_hook.ts +69 -35
  134. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  135. package/src/scripts/lint_never_silent.ts +276 -0
  136. package/src/scripts/lint_no_activation_gates.ts +271 -0
  137. package/src/scripts/orchestration_record.ts +8 -0
  138. package/src/scripts/rebuild_hook_bundle.ts +177 -0
  139. package/src/scripts/release.ts +74 -2
  140. package/src/scripts/routing_doctor.ts +21 -36
  141. package/src/scripts/score_skill_selection.ts +19 -5
  142. package/src/scripts/self_repair_cli.ts +287 -57
  143. package/src/scripts/team_events_spike.ts +271 -0
  144. package/src/scripts/team_review_gate_hook.ts +31 -9
  145. package/src/server/schemas/settings.ts +10 -17
  146. package/src/shared/settingsCarveOut.ts +0 -10
  147. package/src/shared/settingsClasses.ts +11 -9
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
9
- "version": "9.28.0",
9
+ "version": "9.29.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # event4u/agent-config
2
2
 
3
- > Shared skill / rule / command suite for AI coding tools. No app runtime. AGENTS.md of the **package itself**.
3
+ > Shared skill / rule / command suite for AI coding tools. No app runtime.
4
4
 
5
5
  ## Source of truth
6
6
 
@@ -9,10 +9,10 @@ Edit `src/` only (`skills`, `rules`, `agent-src`). `task sync` + `task generate-
9
9
  ## Working on this repo
10
10
 
11
11
  ```bash
12
- task sync # dist/agent-src/, .augment/
13
- task generate-tools # .claude/, .cursor/, .clinerules/, .windsurfrules
14
- task ci # full pipeline, green before PR
15
- # maintainer: AGENT_CONFIG_DEV_MODE=1 -> --scope=project (docs/maintainers/dev-mode.md)
12
+ task sync # dist/agent-src/, .augment/
13
+ task generate-tools # .claude/, .cursor/, .clinerules/, .windsurfrules
14
+ task ci # full pipeline, green before PR
15
+ # dev: AGENT_CONFIG_DEV_MODE=1 -> --scope=project (docs/maintainers/dev-mode.md)
16
16
  ```
17
17
 
18
18
  ## Pointers
@@ -28,7 +28,7 @@ task ci # full pipeline, green before PR
28
28
  - **Discovery** — workspaces/packs: [`ADR-013`](docs/decisions/ADR-013-discovery-frontmatter-contract.md) + [`customization`](docs/customization.md).
29
29
  - **Root & `agents/` layout** — `src/` = source ([`ADR-050`](docs/decisions/ADR-050-workspace-vs-package-root-boundary.md)); contract: [`agents-layout`](docs/contracts/agents-layout.md).
30
30
  - **Security** — [`SECURITY.md`](SECURITY.md); [`docs/threat-model.md`](docs/threat-model.md).
31
- - **Delegate & review**: subagents take independent-slice work, not serial; no mutating session ends without neutral review — [`delegation-policy`](dist/agent-src/rules/delegation-policy.md).
31
+ - **Delegate & review**: subagents take independent-slice work, not serial; in a team (host-flag gated) the lead coordinates, teammates implement; no mutating session ends without neutral review — [`delegation-policy`](dist/agent-src/rules/delegation-policy.md).
32
32
 
33
33
  ## Emergency triage — when nothing else is reachable
34
34
 
package/CHANGELOG.md CHANGED
@@ -312,6 +312,72 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
312
312
  > that forces a new era split (`# Era: 9.28.x`, etc.) — see
313
313
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
314
314
 
315
+ ## [9.29.0](https://github.com/event4u-app/agent-config/compare/9.28.0...9.29.0) (2026-08-09)
316
+
317
+ ### Release highlights
318
+
319
+ <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
320
+ - **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 1a2dd51, 0304406, 1008212.
321
+ - **Default changes + migration:** _auto-derived, rewrite before merge:_ commits naming a default, migration or migrate in 51088bd, 2590391, b7b4cb0.
322
+ - **Security and correctness:** _none_
323
+ - **Honest nulls:** _none_
324
+ - **Known limitations:** _none_
325
+
326
+ ### Features
327
+
328
+ * **team:** availability replaces the master switch; teams readiness ([a94a91a](https://github.com/event4u-app/agent-config/commit/a94a91a30b916909c391939320ae4fb2b04e0b31))
329
+ * **council:** CLI-first shipped default, quorum, absent members, handoff ([51088bd](https://github.com/event4u-app/agent-config/commit/51088bdaaf3633c4918ea05182c5becf65593cf2))
330
+ * **dispatch:** judgment ladder replaces the activation gate ([1a2dd51](https://github.com/event4u-app/agent-config/commit/1a2dd5177b02b9ca752588a022d8a72c6afe51f5))
331
+ * **settings:** activation gates die, one audited incident switch survives ([0304406](https://github.com/event4u-app/agent-config/commit/0304406a536e29d66f44ce19f5f0187383b8af4e))
332
+ * **ci:** lint_never_silent - no shipped guidance may direct a silent re-run ([c7b3d83](https://github.com/event4u-app/agent-config/commit/c7b3d8382ac34a992727c1a042cc65298e56adaa))
333
+ * **self-repair:** fork-aware egress ladder, issue form, detector corpus gate ([5b50807](https://github.com/event4u-app/agent-config/commit/5b5080710e9800bbb4e1eec5773d9c5ff79de866))
334
+ * **self-repair:** fork-aware egress, detector corpus gate, never-silent lint ([4e046aa](https://github.com/event4u-app/agent-config/commit/4e046aa5d992cbefa31717430bd05a9e37798f4f))
335
+ * **rules:** emit Claude Code rules with the host-native paths key ([872c267](https://github.com/event4u-app/agent-config/commit/872c267589995668bfbfffdc2c0128b9d89532dd))
336
+ * **forensics:** read-only forensic analyzers as a default-off pack (Phase 3) ([b7b4cb0](https://github.com/event4u-app/agent-config/commit/b7b4cb05e2247737786e96ff52cf4d739dff68c4))
337
+ * **bench:** critic-protocol A/B result — no promotion, published both directions (Phase 2) ([bc0054b](https://github.com/event4u-app/agent-config/commit/bc0054b8406dc6fe280fcca7b10104547e2380b1))
338
+ * **council:** critic_protocol config + pre-registered load_bearing A/B harness (Phase 2, pre-run) ([e75ae51](https://github.com/event4u-app/agent-config/commit/e75ae514b765205a2f86c5ffaae40a5c81523d87))
339
+ * **hosts:** add worker_respawn to the host-capability manifest ([a30102d](https://github.com/event4u-app/agent-config/commit/a30102d0f30d197ced06248c5712722006032447))
340
+ * **subagents:** emit the capsule at a budget watermark, in shadow ([572d280](https://github.com/event4u-app/agent-config/commit/572d28066be1871f43242056af175ddbd023002c))
341
+ * **subagents:** add the CHECKPOINT capsule as the worker handoff shape ([8340f5e](https://github.com/event4u-app/agent-config/commit/8340f5e11219c296030084432e9f403818552df9))
342
+ * **premortem:** four-part failure register + optional roadmap Pre-mortem section (Phase 1) ([da95e9e](https://github.com/event4u-app/agent-config/commit/da95e9e4880394ab06ea0aaf818e893c695d4657))
343
+
344
+ ### Bug Fixes
345
+
346
+ * **build:** rebuild the committed install bundle for the settings teardown ([6d9e667](https://github.com/event4u-app/agent-config/commit/6d9e6672bee69178d0ce8d86bd574e248abca54b))
347
+ * **spike:** escape the shape-key separator instead of a raw NUL byte ([1dd9a28](https://github.com/event4u-app/agent-config/commit/1dd9a281d5fc38ce228a04035a43a35b295114e5))
348
+ * **self-repair:** resolve the four R2 completion-review findings ([3474bf7](https://github.com/event4u-app/agent-config/commit/3474bf797321a99e5a7dd5a484a70a8a8748add6))
349
+ * **roadmap:** risk-register marker, allowed risk types, resolvable anchors ([f06f6ed](https://github.com/event4u-app/agent-config/commit/f06f6edb1f9f3b08c4763c542e789272f4dbd091))
350
+ * **scorer:** repoint skill-selection scoring at the live skills tree ([589b2c3](https://github.com/event4u-app/agent-config/commit/589b2c3e11eaf64a32e7bc7269807b3a9af648a2))
351
+ * **ci:** unlink the ADR-217 body link that can never resolve in the dist projection ([1008212](https://github.com/event4u-app/agent-config/commit/100821272c9254d4aae70876c9bfa65af67d1d4d))
352
+ * **forensics:** review findings — schema-valid finding ids, fail-before-write, hermetic smoke test, honest config scope ([0509647](https://github.com/event4u-app/agent-config/commit/050964793ec76e0100199a59fefd5b8cc4ad59e4))
353
+ * **release:** tolerate the concurrent tag-push race in step 8 ([049e8b2](https://github.com/event4u-app/agent-config/commit/049e8b24296a97f946c4597418cfd79457018e3c))
354
+ * **hooks:** self-heal a stale hook bundle in preflight instead of blocking the push ([9256633](https://github.com/event4u-app/agent-config/commit/9256633996be6d86e09df8c288837a8970d456e7))
355
+
356
+ ### Documentation
357
+
358
+ * **council:** describe the runtime responses artefact without the pruned path literal ([04e8a0f](https://github.com/event4u-app/agent-config/commit/04e8a0feecb2fc19326f9abf894cf49f38424c6b))
359
+ * **roadmap:** always-on orchestration - verified claims, council cut, honest blockers ([d202556](https://github.com/event4u-app/agent-config/commit/d202556efa32376c4fc5fedba7fb95414cb4f4b4))
360
+ * always-on doctrine reaches the always-loaded surfaces ([9eead89](https://github.com/event4u-app/agent-config/commit/9eead8923e604f584541afbdac6d1feac3b02e5c))
361
+ * **review:** re-derive the context-manifest scope_hash for the re-bound round (contract 5 header-manifest agreement) ([2ebdb87](https://github.com/event4u-app/agent-config/commit/2ebdb87f0286a167d24cc26b3a658306274748c6))
362
+ * **review:** add fix-commit refs to the four resolved R2 findings ([9adbf83](https://github.com/event4u-app/agent-config/commit/9adbf83bcb530db4d702d4ff9425f685124b8a2f))
363
+ * **review:** re-bind R2 findings to the post-fix review scope (contract 2.1 in-place re-bind) ([752c29c](https://github.com/event4u-app/agent-config/commit/752c29cf11a66ded030bff60aeac45763c36c2ed))
364
+ * **review:** R2 completion-review findings for feat/road-to-rule-delivery-integrity (1 medium, 3 low, all open) ([0267568](https://github.com/event4u-app/agent-config/commit/02675686ef102552a80ce35861e1c5c094fb3f31))
365
+ * **roadmap:** close rule-delivery-integrity, migrate the measurement out ([2590391](https://github.com/event4u-app/agent-config/commit/25903915772394a776b069991e3d939bcf3f0e70))
366
+ * **adr:** ADR-220 skill invocation attestation — specified, check deferred (Phase 4) ([c8f3dbb](https://github.com/event4u-app/agent-config/commit/c8f3dbb31762a7df7ef3abf7ef70f1e17741afa4))
367
+ * **roadmap:** land phases 0 and 1 of worker-generation recycling ([06c7347](https://github.com/event4u-app/agent-config/commit/06c7347b49809a81b7ee169f42e3c742e5211812))
368
+ * **claims:** pre-register the capsule trigger-arm comparison ([2acfc56](https://github.com/event4u-app/agent-config/commit/2acfc56982d257331243094d2a580ca4f5926c6c))
369
+
370
+ ### Chores
371
+
372
+ * **roadmap:** close Phase 4 of road-to-rule-delivery-integrity ([5db59bc](https://github.com/event4u-app/agent-config/commit/5db59bc4410488eb22717c8d0606b8eca10bcfa4))
373
+ * **roadmap:** park round-6 and worker-generation-recycling in later/ ([e5ebedc](https://github.com/event4u-app/agent-config/commit/e5ebedcd9ba0b3ddaba10938af74fcab9d79f03a))
374
+ * **generated:** regenerate proof.md + CAPABILITIES.yaml for the 289th skill post-merge ([d0f348d](https://github.com/event4u-app/agent-config/commit/d0f348d0b75b507d10199941185969a633563f63))
375
+ * **roadmap:** close Phase 5 + acceptance criteria — roadmap fully closed ([c993660](https://github.com/event4u-app/agent-config/commit/c9936607fe77e06f1b510a3ee3ccf8390f49a8d6))
376
+ * **generated:** rebuild the install bundle for the settings-schema change ([5b1260d](https://github.com/event4u-app/agent-config/commit/5b1260de7b889a16e94a5e5d5bc6f22f23dc558e))
377
+ * **generated:** regenerate proof.md for the new ledger entry ([76ab0a9](https://github.com/event4u-app/agent-config/commit/76ab0a9e1ccdb09e436f562c1cf8416989d921ef))
378
+
379
+ Tests: 12438 (+297 since 9.28.0)
380
+
315
381
  ## [9.28.0](https://github.com/event4u-app/agent-config/compare/9.27.0...9.28.0) (2026-08-09)
316
382
 
317
383
  ### Release highlights
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config) [![MCP Toplist](https://mcptoplist.com/badge/glama%2Fevent4u-app%2Fagent-config.svg)](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
6
6
 
7
- [![Skills](https://img.shields.io/badge/Skills-288-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-116-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-196-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-104-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
7
+ [![Skills](https://img.shields.io/badge/Skills-289-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-116-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-196-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-104-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
8
 
9
9
  **Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
10
10
 
@@ -65,21 +65,30 @@ defaults:
65
65
  # reason. `manual` is NEVER part of the auto chain (it would
66
66
  # always "succeed" and silently turn every call into a
67
67
  # copy-paste request) — it stays an explicit opt-in.
68
- # OPT-IN: `auto` is not the shipped default. Switching to it
69
- # moves spend from per-token dollars onto your subscription
70
- # quota, so it is a decision you take, not one you inherit.
71
- # Set `cli_call_budget` below before you flip it.
68
+ # THE SHIPPED DEFAULT (road-to-always-on-orchestration
69
+ # Phase 3.1 — CLI-first is the owner-set transport doctrine):
70
+ # ride the vendor CLI under your subscription first, fall to
71
+ # the metered API only where no CLI resolves. Pin `manual` /
72
+ # `api` / `cli` here (or per-member below) to override it.
73
+ # `cli_call_budget` below ships populated with a generous
74
+ # per-provider guard so this default never runs your
75
+ # subscription quota uncapped.
72
76
  #
73
77
  # Precedence: invocation flag > per-member mode > defaults.mode >
74
78
  # built-in. Two DIFFERENT defaults sit at the bottom, and they are not
75
79
  # the same thing:
76
- # · omit `defaults.mode` entirely and the loader fills "api" — that is
77
- # what every real config file observes.
80
+ # · omit `defaults.mode` entirely and the loader fills "auto" (was
81
+ # "api" before the Phase 3.1 flip) — that is what every real config
82
+ # file observes.
78
83
  # · the resolver's built-in fallback, reached only when no layer at all
79
84
  # supplies a mode (a settings dict handed straight to the resolver,
80
85
  # no config file involved), is "manual" — free, no key. A caller who
81
- # named no transport has not asked to spend money.
82
- mode: api
86
+ # named no transport has not asked to spend money. This did NOT flip
87
+ # alongside the loader default: `auto` still resolves to a paying
88
+ # rung when no CLI is usable, so flipping this too would let a
89
+ # caller that bypassed the config file spend money on a preference
90
+ # it never stated.
91
+ mode: auto
83
92
 
84
93
  # Default number of debate rounds per /council invocation.
85
94
  #
@@ -179,26 +188,34 @@ debate:
179
188
  threshold_usd: 1.00
180
189
  show_per_member: true
181
190
 
182
- # Per-day call-count guard for `mode: cli` members. The standard
183
- # `cost_budget` block skips CLI calls because they are billable=False —
184
- # but provider subscriptions still carry their own quotas (Claude Pro
185
- # 5h windows, ChatGPT Plus message caps, Gemini free-tier per-day
186
- # limits). Opt into a per-provider cap; default unset = unlimited from
187
- # this loader's perspective.
191
+ # Per-day call-count guard for `mode: cli` / `mode: auto` members. The
192
+ # standard `cost_budget` block skips CLI calls because they are
193
+ # billable=False — but provider subscriptions still carry their own quotas
194
+ # (Claude Pro 5h windows, ChatGPT Plus message caps, Gemini free-tier
195
+ # per-day limits). The loader SHIPS EVERY known provider populated at
196
+ # 50/day by default (road-to-always-on-orchestration Phase 3.4) — a config
197
+ # that omits this block entirely, or omits one provider from the map
198
+ # below, still gets that floor for the missing entries. It is a GUARD
199
+ # against an always-on `auto` default silently exhausting a subscription's
200
+ # plan quota, not a brake — override a provider explicitly to tighten it
201
+ # (worked example below) or loosen it further.
188
202
  #
189
203
  # Counter state persists at ~/.event4u/agent-config/cli-calls.json
190
204
  # with daily UTC reset. Wired by Phase 1 of the CLI-transport roadmap.
191
205
  #
192
- # SHIPPED POPULATED, deliberately: `mode: auto` prefers the cli rung, so
193
- # shipping that path with no quota guard would miss the point. The caps
194
- # below are sized from the worst case one invocation can cost — a deep
195
- # debate is at most `debate_max_rounds` (4) calls per member — so 24
196
- # permits roughly six full deep debates per provider per day before the
197
- # guard fires. That is well inside a Pro-tier window while still bounding
198
- # a runaway loop, and failures count too (a wedged CLI cannot burn the
199
- # whole budget retrying). Gemini's free tier is the tightest, hence the
200
- # lower cap. Raise them if you consult heavily; `council:quota` reports
201
- # usage and `council:quota --reset` clears the day.
206
+ # The three entries below TIGHTEN the 50/day floor, deliberately: `mode:
207
+ # auto` prefers the cli rung, so a config that consults heavily wants a
208
+ # number sized to its own worst case, not the generic guard. Sized from
209
+ # the worst case one invocation can cost — a deep debate is at most
210
+ # `debate_max_rounds` (4) calls per member — so 24 permits roughly six
211
+ # full deep debates per provider per day before the guard fires. That is
212
+ # well inside a Pro-tier window while still bounding a runaway loop, and
213
+ # failures count too (a wedged CLI cannot burn the whole budget retrying).
214
+ # Gemini's free tier is the tightest, hence the lower cap. xai and
215
+ # perplexity are left unlisted here and so keep the loader's 50/day floor —
216
+ # raise or lower any of the five if you consult heavily or want a tighter
217
+ # rein; `council:quota` reports usage and `council:quota --reset` clears
218
+ # the day.
202
219
  cli_call_budget:
203
220
  max_calls_per_day:
204
221
  anthropic: 24
@@ -207,6 +224,20 @@ cli_call_budget:
207
224
  # Warn once usage crosses this fraction of a cap (0..1).
208
225
  warn_at: 0.8
209
226
 
227
+ # Quorum for a council pass to CONCLUDE (road-to-always-on-orchestration
228
+ # Phase 3.3). Default "majority" resolves to ceil(n / 2) enabled members —
229
+ # a SIMPLE majority, deliberately not "more than half": at n=2 that is
230
+ # 1-of-2, because requiring 2-of-2 turns any single absent member into a
231
+ # deadlocked release gate. Below quorum the pass is `inconclusive` and, at
232
+ # a release gate, HOLDS for a human — never silently downgraded to
233
+ # advisory. Set an explicit integer to require a fixed count instead:
234
+ #
235
+ # quorum: 2
236
+ #
237
+ # See docs/contracts/ai-council-config.md § Quorum for the full resolver
238
+ # contract and the manifest.json / rendered-report fields it feeds.
239
+ quorum: majority
240
+
210
241
  # Per-member configuration — you decide what may spend; detection tells
211
242
  # you what is already here.
212
243
  #
@@ -159,8 +159,8 @@ If no orchestration lines exist yet (telemetry capture not yet running or
159
159
  no delegated dispatches this month), surface:
160
160
 
161
161
  > No orchestration telemetry yet — subagent dispatches begin writing to
162
- > `agents/runtime/state/audit/YYYY-MM.jsonl` once `subagents.enabled: true`
163
- > and a dispatch runs.
162
+ > `agents/runtime/state/audit/YYYY-MM.jsonl` once a dispatch runs (always-on
163
+ > orchestration: the layer has no per-run on/off setting any more).
164
164
 
165
165
  Skip this step entirely if the user did not ask about orchestration telemetry
166
166
  and there is no `agents/runtime/state/audit/` directory.
@@ -29,11 +29,11 @@ attacker — a second strong model with repo access instead of the host model
29
29
  critiquing itself. Use it as the **escalation rung**: single-model
30
30
  self-review found nothing, or the stakes are high.
31
31
 
32
- ### 1. Gate — `ai_team.enabled`
32
+ ### 1. Gate — `/team` availability
33
33
 
34
- Read `ai_team.enabled` from `.agent-settings.yml`. Missing or `false` →
35
- print the enable pointer from `/team` (master) § "Default-off gate" and
36
- **STOP**.
34
+ Run the availability check from `/team` (master) § "Availability gate":
35
+ codex CLI + auth, and `emergency.orchestration_halt`. Either check fails →
36
+ print the matching block and **STOP**.
37
37
 
38
38
  ### 2. Gate — plugin presence (fail closed)
39
39
 
@@ -73,12 +73,13 @@ on quota exhaustion surface the transport's refusal, do not retry.
73
73
  ## Output format
74
74
 
75
75
  - The plugin's adversarial findings, verbatim.
76
- - Gate failures print exactly one block (enable pointer or fail-closed
77
- block) and stop.
76
+ - Gate failures print exactly one block (availability/halt block or
77
+ fail-closed block) and stop.
78
78
 
79
79
  ## Do NOT
80
80
 
81
- - Do NOT run when `ai_team.enabled` is false — enable pointer, stop.
81
+ - Do NOT run when `/team` is unavailable (codex CLI/auth missing) or
82
+ halted — matching block, stop.
82
83
  - Do NOT reimplement the adversarial pass inline when the plugin is absent —
83
84
  fail closed with the doctor pointer.
84
85
  - Do NOT skip the free first rung reflexively — the single-model
@@ -27,16 +27,16 @@ repo. On Claude Code hosts it delegates to the official plugin's
27
27
  `/codex:rescue`. This is the **only wrapper that delegates write access**,
28
28
  so it carries a second opt-in on top of the family gate.
29
29
 
30
- ### 1. Gate — `ai_team.enabled`
30
+ ### 1. Gate — `/team` availability
31
31
 
32
- Read `ai_team.enabled` from `.agent-settings.yml`. Missing or `false` →
33
- print the enable pointer from `/team` (master) § "Default-off gate" and
34
- **STOP**.
32
+ Run the availability check from `/team` (master) § "Availability gate":
33
+ codex CLI + auth, and `emergency.orchestration_halt`. Either check fails →
34
+ print the matching block and **STOP**.
35
35
 
36
36
  ### 2. Gate — `ai_team.allow_delegate` (second opt-in)
37
37
 
38
38
  Read `ai_team.allow_delegate`. Missing or `false` (the shipped default) →
39
- refuse with the enable pointer and **STOP**:
39
+ refuse with the opt-in pointer and **STOP**:
40
40
 
41
41
  > `/team delegate` is disabled (`ai_team.allow_delegate: false`, the
42
42
  > default). It is the only team-mode wrapper that hands **write access** to
@@ -44,15 +44,15 @@ refuse with the enable pointer and **STOP**:
44
44
  >
45
45
  > ```yaml
46
46
  > ai_team:
47
- > enabled: true
48
47
  > allow_delegate: true
49
48
  > ```
50
49
  >
51
50
  > Key reference: `docs/contracts/ai-team-config.md`.
52
51
 
53
52
  Deterministic mirror of gates 1+2: `npx tsx src/scripts/ai_team/team_dispatch.ts
54
- --delegate-gate` exits non-zero (with the pointer on stderr) unless BOTH flags
55
- are true — run it instead of hand-parsing the YAML when a shell is available.
53
+ --delegate-gate` exits non-zero (with the pointer on stderr) unless `/team`
54
+ is available AND `allow_delegate` is true — run it instead of hand-parsing
55
+ the YAML when a shell is available.
56
56
 
57
57
  ### 3. Gate — plugin presence (fail closed)
58
58
 
@@ -91,14 +91,15 @@ opens a PR on top of them.
91
91
  ## Output format
92
92
 
93
93
  - The plugin's rescue/delegation result, verbatim.
94
- - Gate failures print exactly one block (enable pointer, allow_delegate
95
- refusal, or fail-closed block) and stop.
94
+ - Gate failures print exactly one block (availability/halt block,
95
+ allow_delegate refusal, or fail-closed block) and stop.
96
96
 
97
97
  ## Do NOT
98
98
 
99
- - Do NOT run when `ai_team.enabled` is false — enable pointer, stop.
99
+ - Do NOT run when `/team` is unavailable (codex CLI/auth missing) or
100
+ halted — matching block, stop.
100
101
  - Do NOT run when `ai_team.allow_delegate` is false — refusal block, stop.
101
- Never treat `enabled: true` alone as delegate authorization.
102
+ Never treat availability alone as delegate authorization.
102
103
  - Do NOT reimplement the worker inline when the plugin is absent — fail
103
104
  closed with the doctor pointer.
104
105
  - Do NOT commit, push, or open a PR over the worker's edits — review is the
@@ -6,7 +6,7 @@ argument-hint: "[--background]"
6
6
  pack: meta
7
7
  tier: 2
8
8
  visibility: internal
9
- description: Thin wrapper — cross-model review of the current diff via the official plugin (/codex:review). Gated on ai_team.enabled; fails closed when the plugin is absent.
9
+ description: Thin wrapper — cross-model review of the current diff via the official plugin (/codex:review). Gated on /team availability (codex CLI + auth); fails closed when the plugin is absent.
10
10
  cluster: team
11
11
  sub: review
12
12
  suggestion:
@@ -26,11 +26,11 @@ Thin wrapper: cross-model review of the current change. On Claude Code hosts
26
26
  it delegates verbatim to the official plugin's `/codex:review` — this wrapper
27
27
  owns only the governance gates around it.
28
28
 
29
- ### 1. Gate — `ai_team.enabled`
29
+ ### 1. Gate — `/team` availability
30
30
 
31
- Read `ai_team.enabled` from `.agent-settings.yml`. Missing or `false` →
32
- print the enable pointer from `/team` (master) § "Default-off gate" and
33
- **STOP**. No plugin probe, no partial run.
31
+ Run the availability check from `/team` (master) § "Availability gate":
32
+ codex CLI + auth, and `emergency.orchestration_halt`. Either check fails →
33
+ print the matching block and **STOP**. No plugin probe, no partial run.
34
34
 
35
35
  ### 2. Gate — plugin presence (fail closed)
36
36
 
@@ -65,12 +65,13 @@ refusal, do not retry.
65
65
  ## Output format
66
66
 
67
67
  - The plugin's review, verbatim.
68
- - Nothing else on success; gate failures print exactly one block (enable
69
- pointer or fail-closed block) and stop.
68
+ - Nothing else on success; gate failures print exactly one block
69
+ (availability/halt block or fail-closed block) and stop.
70
70
 
71
71
  ## Do NOT
72
72
 
73
- - Do NOT run when `ai_team.enabled` is false — enable pointer, stop.
73
+ - Do NOT run when `/team` is unavailable (codex CLI/auth missing) or
74
+ halted — matching block, stop.
74
75
  - Do NOT reimplement the review inline when the plugin is absent — fail
75
76
  closed with the doctor pointer.
76
77
  - Do NOT edit files, commit, push, or open a PR — this wrapper is read-only.
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  pack: meta
6
6
  tier: 2
7
7
  visibility: internal
8
- description: Thin wrapper — plugin job status via /codex:status plus a quota block (shared openai counter vs team + council ceilings). Gated on ai_team.enabled; fails closed without the plugin.
8
+ description: Thin wrapper — plugin job status via /codex:status plus a quota block (shared openai counter vs team + council ceilings). Gated on codex CLI/auth availability; fails closed without the plugin.
9
9
  cluster: team
10
10
  sub: status
11
11
  suggestion:
@@ -25,11 +25,11 @@ Thin wrapper: team-mode status. On Claude Code hosts it delegates to the
25
25
  official plugin's `/codex:status` and appends **our** quota block —
26
26
  the one piece of state the plugin does not know about.
27
27
 
28
- ### 1. Gate — `ai_team.enabled`
28
+ ### 1. Gate — `/team` availability
29
29
 
30
- Read `ai_team.enabled` from `.agent-settings.yml`. Missing or `false` →
31
- print the enable pointer from `/team` (master) § "Default-off gate" and
32
- **STOP**.
30
+ Run the availability check from `/team` (master) § "Availability gate":
31
+ codex CLI + auth, and `emergency.orchestration_halt`. Either check fails →
32
+ print the matching block and **STOP**.
33
33
 
34
34
  ### 2. Gate — plugin presence (fail closed)
35
35
 
@@ -102,12 +102,13 @@ compatibility).
102
102
  ceilings + per-path OPEN/BLOCKED verdict).
103
103
  - Any `team.gate: BLOCK n/N` ledger lines, verbatim, after the quota
104
104
  block — only when present.
105
- - Gate failures print exactly one block (enable pointer or fail-closed
106
- block) and stop.
105
+ - Gate failures print exactly one block (availability/halt block or
106
+ fail-closed block) and stop.
107
107
 
108
108
  ## Do NOT
109
109
 
110
- - Do NOT run when `ai_team.enabled` is false — enable pointer, stop.
110
+ - Do NOT run when `/team` is unavailable (codex CLI/auth missing) or
111
+ halted — matching block, stop.
111
112
  - Do NOT fabricate a count when the counter file is unreadable — print
112
113
  `Quota: unavailable (<reason>)` instead of a guessed number.
113
114
  - Do NOT write to `cli-calls.json` — the transport owns the counter; this
@@ -15,7 +15,7 @@ type: orchestrator
15
15
  suggestion:
16
16
  eligible: true
17
17
  trigger_description: "second model, GPT drüberschauen lassen, cross-model review, review gate, let another strong model check the diff, team review"
18
- trigger_context: "ai_team.enabled is true AND the user wants a second strong model to review the actual working-tree diff with repo access (depth) — not a neutral artefact opinion (that is /council)"
18
+ trigger_context: "/team is available (codex CLI installed + authenticated, not halted) AND the user wants a second strong model to review the actual working-tree diff with repo access (depth) — not a neutral artefact opinion (that is /council)"
19
19
  workspaces:
20
20
  - agent-config-maintainer
21
21
  packs:
@@ -55,25 +55,33 @@ pre-registered benchmark (§ No-claims note).
55
55
  | Model choice | Mid-tier default (cost decision) | Strongest available — `ai_team.model: 'auto'` defers to the CLI default |
56
56
  | Write access | Never (text only; one opt-in PR comment under `pr`) | Read-only by default; `/team delegate` is the single write path, behind a second opt-in |
57
57
 
58
- ## Default-off gate — check FIRST, before anything else
58
+ ## Availability gate — check FIRST, before anything else
59
59
 
60
- Read `ai_team.enabled` from `.agent-settings.yml`. Missing key or `false`
61
- (the shipped default) → print the enable pointer and **STOP**. Do not route,
62
- do not suggest a sub-command, do not probe for the plugin:
60
+ `/team` carries no on/off setting — `ai_team.enabled` was REMOVED
61
+ (road-to-always-on-orchestration Phase 1, Step 1.3). Availability is a FACT
62
+ resolved from the machine: the codex CLI must resolve on `$PATH`, AND some
63
+ auth for it must be detectable (subscription login, API key, key file, or
64
+ env key) — the same check `agent-config doctor --check team` runs. Missing
65
+ either → print the degrade line and **STOP**. Do not route, do not suggest
66
+ a sub-command, do not probe for the plugin:
63
67
 
64
- > Team mode is disabled (`ai_team.enabled: false`, the default).
65
- > Enable it in `.agent-settings.yml`:
66
- >
67
- > ```yaml
68
- > ai_team:
69
- > enabled: true
70
- > ```
71
- >
72
- > Key reference: `docs/contracts/ai-team-config.md`. Then run
73
- > `agent-config doctor --check team` to verify plugin + auth setup.
68
+ > codex CLI not available — `/team` needs the codex CLI installed and
69
+ > authenticated. Install: `npm install -g @openai/codex`, then run
70
+ > `codex login`. Verify with `agent-config doctor --check team`.
71
+
72
+ Also check the one incident switch: `emergency.orchestration_halt: true`
73
+ in `.agent-settings.yml` halts `/team` along with the rest of the always-on
74
+ orchestration stack (subagents, council, team). Halted → print:
75
+
76
+ > `/team` is halted (`emergency.orchestration_halt: true`) — the always-on
77
+ > orchestration stack is paused for incident response. Resume: set
78
+ > `orchestration_halt: false` with a non-empty
79
+ > `orchestration_halt_justification` in `.agent-settings.yml`.
74
80
 
75
81
  Every sub-command repeats this check independently — the gate holds even when
76
- a wrapper is invoked directly.
82
+ a wrapper is invoked directly. A leftover `ai_team.enabled` key from an
83
+ older install is ignored (one deprecation-warning line on load) — it no
84
+ longer gates anything.
77
85
 
78
86
  ## Sub-commands
79
87
 
@@ -89,7 +97,8 @@ rather than routing to an in-suite skill — the second column names that target
89
97
 
90
98
  ## Dispatch
91
99
 
92
- 1. Run the default-off gate above. Disabled → enable pointer, stop.
100
+ 1. Run the availability gate above. Unavailable or halted → the matching
101
+ one-line block, stop.
93
102
  2. Parse the user's argument: `/team <sub-command> [args]`.
94
103
  3. Look up the sub-command in the table above; load the routed file and
95
104
  follow its `## Instructions` verbatim with the remaining args.
@@ -106,7 +115,7 @@ When the official plugin is absent on a Claude Code host, every wrapper
106
115
  fails **closed** with the doctor remediation pointer — never a silent no-op,
107
116
  never an inline reimplementation of the plugin:
108
117
 
109
- > ❌ Team mode is enabled, but the official plugin is not installed on this
118
+ > ❌ `/team` is available, but the official plugin is not installed on this
110
119
  > Claude Code host. `/team <sub>` fails closed — it never reimplements the
111
120
  > plugin inline and never silently no-ops.
112
121
  >
@@ -156,4 +165,5 @@ measured improvement.
156
165
  - `adversarial-review` skill — the free single-model first rung below
157
166
  `/team adversarial`.
158
167
  - `docs/contracts/ai-team-config.md` — the `ai_team` settings block
159
- (`enabled`, `model`, `allow_delegate`, `max_calls_per_day`).
168
+ (`model`, `allow_delegate`, `max_calls_per_day`) and the availability
169
+ contract (codex CLI + auth, `emergency.orchestration_halt`).