@event4u/agent-config 9.27.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 (220) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +13 -12
  3. package/CHANGELOG.md +165 -0
  4. package/README.md +1 -1
  5. package/agents/templates/.ai-council.yml.example +55 -24
  6. package/dist/agent-src/commands/analyze/conformance.md +24 -0
  7. package/dist/agent-src/commands/cost/report.md +2 -2
  8. package/dist/agent-src/commands/team/adversarial.md +8 -7
  9. package/dist/agent-src/commands/team/delegate.md +13 -12
  10. package/dist/agent-src/commands/team/review.md +9 -8
  11. package/dist/agent-src/commands/team/status.md +9 -8
  12. package/dist/agent-src/commands/team.md +29 -19
  13. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +88 -2
  14. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +29 -21
  15. package/dist/agent-src/contexts/execution/host-capability-manifest.md +26 -15
  16. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +28 -3
  17. package/dist/agent-src/contexts/execution/subagent-response-contract.md +54 -0
  18. package/dist/agent-src/contexts/execution/subagent-routing.md +13 -11
  19. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +25 -0
  20. package/dist/agent-src/contexts/execution/subagent-steering.md +6 -3
  21. package/dist/agent-src/rules/artifact-engagement-recording.md +4 -1
  22. package/dist/agent-src/rules/autonomous-execution.md +1 -1
  23. package/dist/agent-src/rules/brand-source-of-truth.md +33 -6
  24. package/dist/agent-src/rules/context-hygiene.md +3 -1
  25. package/dist/agent-src/rules/council-availability.md +93 -0
  26. package/dist/agent-src/rules/cross-source-consistency.md +3 -0
  27. package/dist/agent-src/rules/delegation-policy.md +38 -10
  28. package/dist/agent-src/rules/design-fidelity.md +3 -0
  29. package/dist/agent-src/rules/evaluator-independence.md +2 -1
  30. package/dist/agent-src/rules/external-code-graph-interop.md +2 -1
  31. package/dist/agent-src/rules/finance-safety-floor.md +1 -1
  32. package/dist/agent-src/rules/git-history-discipline.md +1 -1
  33. package/dist/agent-src/rules/history-discipline.md +3 -1
  34. package/dist/agent-src/rules/legal-safety-floor.md +1 -1
  35. package/dist/agent-src/rules/no-pr-progress-comments.md +3 -1
  36. package/dist/agent-src/rules/onboarding-gate.md +3 -1
  37. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +4 -1
  38. package/dist/agent-src/rules/role-mode-adherence.md +1 -1
  39. package/dist/agent-src/rules/scale-discipline.md +3 -1
  40. package/dist/agent-src/rules/self-repair-loop.md +103 -0
  41. package/dist/agent-src/rules/session-canary.md +2 -1
  42. package/dist/agent-src/rules/settings-ask-protocol.md +8 -7
  43. package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
  44. package/dist/agent-src/rules/token-budget-discipline.md +4 -2
  45. package/dist/agent-src/rules/tool-safety.md +5 -1
  46. package/dist/agent-src/skills/adversarial-review/SKILL.md +1 -1
  47. package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
  48. package/dist/agent-src/skills/forensics-report/SKILL.md +114 -0
  49. package/dist/agent-src/skills/forensics-report/evals/triggers.json +17 -0
  50. package/dist/agent-src/skills/performance-analysis/SKILL.md +1 -1
  51. package/dist/agent-src/skills/persona-improvement/SKILL.md +1 -1
  52. package/dist/agent-src/skills/premortem/SKILL.md +30 -1
  53. package/dist/agent-src/skills/project-analyzer/SKILL.md +1 -1
  54. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -1
  55. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  56. package/dist/agent-src/skills/sequential-thinking/SKILL.md +1 -1
  57. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
  58. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +7 -5
  59. package/dist/agent-src/skills/subagent-orchestration/schemas/subagent-status.json +61 -3
  60. package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
  61. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  62. package/dist/agent-src/templates/AGENTS.md +8 -12
  63. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  64. package/dist/agent-src/templates/roadmaps.md +23 -0
  65. package/dist/cli/registry.js +7 -0
  66. package/dist/cli/registry.js.map +1 -1
  67. package/dist/cli-delegate/chunk-66OVWGB5.js +270 -0
  68. package/dist/cli-delegate/{chunk-HJ6DAJHR.js → chunk-LCFJIQ4J.js} +89 -7
  69. package/dist/cli-delegate/{chunk-VSYT7OHO.js → chunk-LVRYBKTI.js} +31 -2
  70. package/dist/cli-delegate/{chunk-DVRS2KVR.js → chunk-MMXA5GY7.js} +10 -17
  71. package/dist/cli-delegate/{chunk-WR6GTRHJ.js → chunk-MP3JT3IU.js} +3 -3
  72. package/dist/cli-delegate/{chunk-3KJIMFTB.js → chunk-NZ5N2XQL.js} +467 -305
  73. package/dist/cli-delegate/{chunk-AIIUU73N.js → chunk-OJM3MBJM.js} +1 -1
  74. package/dist/cli-delegate/{chunk-BCPIOAGV.js → chunk-RCIA67XN.js} +117 -96
  75. package/dist/cli-delegate/chunk-REKCMYOU.js +2991 -0
  76. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  77. package/dist/cli-delegate/cmd_brand_status.js +134 -0
  78. package/dist/cli-delegate/cmd_conformance.js +10 -47
  79. package/dist/cli-delegate/cmd_converge.js +3 -3
  80. package/dist/cli-delegate/cmd_doctor.js +10 -6
  81. package/dist/cli-delegate/cmd_explain.js +80 -330
  82. package/dist/cli-delegate/cmd_export.js +6 -6
  83. package/dist/cli-delegate/cmd_fleet.js +3 -3
  84. package/dist/cli-delegate/cmd_handoff.js +3 -3
  85. package/dist/cli-delegate/cmd_mcp_available.js +433 -0
  86. package/dist/cli-delegate/cmd_migrate.js +3 -3
  87. package/dist/cli-delegate/cmd_packs_active.js +153 -0
  88. package/dist/cli-delegate/cmd_preflight.js +1 -1
  89. package/dist/cli-delegate/cmd_prune.js +6 -6
  90. package/dist/cli-delegate/cmd_route_audit.js +8 -8
  91. package/dist/cli-delegate/cmd_route_explain.js +4 -4
  92. package/dist/cli-delegate/cmd_settings_get.js +266 -0
  93. package/dist/cli-delegate/cmd_settings_migrate.js +6 -6
  94. package/dist/cli-delegate/cmd_settings_set.js +8 -2968
  95. package/dist/cli-delegate/cmd_sync.js +6 -6
  96. package/dist/cli-delegate/cmd_uninstall.js +6 -6
  97. package/dist/cli-delegate/cmd_update.js +4 -4
  98. package/dist/cli-delegate/cmd_upgrade.js +4 -4
  99. package/dist/cli-delegate/cmd_validate.js +6 -6
  100. package/dist/cli-delegate/cmd_versions.js +4 -4
  101. package/dist/discovery/deprecation-report.md +1 -1
  102. package/dist/discovery/discovery-manifest.json +164 -55
  103. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  104. package/dist/discovery/discovery-manifest.summary.md +4 -3
  105. package/dist/discovery/orphan-report.md +1 -1
  106. package/dist/discovery/packs.json +44 -5
  107. package/dist/discovery/trust-report.md +11 -11
  108. package/dist/discovery/workspaces.json +16 -6
  109. package/dist/hooks/dispatch.js +9341 -6131
  110. package/dist/install/install.mjs +739 -524
  111. package/dist/mcp/registry-manifest.json +3 -3
  112. package/dist/mcp/server.json +2 -2
  113. package/dist/mcp/server.mjs +777 -281
  114. package/dist/router.json +1 -1
  115. package/dist/scripts/_lib/agent_settings.js +134 -15
  116. package/dist/scripts/_lib/agent_settings.js.map +1 -1
  117. package/dist/scripts/condense.js +147 -2
  118. package/dist/scripts/condense.js.map +1 -1
  119. package/dist/server/schemas/settings.js +6 -7
  120. package/dist/server/schemas/settings.js.map +1 -1
  121. package/dist/shared/settingsCarveOut.js +0 -9
  122. package/dist/shared/settingsCarveOut.js.map +1 -1
  123. package/dist/shared/settingsClasses.js +11 -9
  124. package/dist/shared/settingsClasses.js.map +1 -1
  125. package/dist/ui/assets/{index-DmR0mbk4.js → index-JDAF00bC.js} +2 -2
  126. package/dist/ui/assets/{index-DmR0mbk4.js.map → index-JDAF00bC.js.map} +1 -1
  127. package/dist/ui/index.html +1 -1
  128. package/docs/contracts/settings-classes.md +68 -17
  129. package/docs/guidelines/agent-infra/memory-access.md +14 -3
  130. package/package.json +1 -1
  131. package/src/agent-src/templates/AGENTS.md +8 -12
  132. package/src/config/agent-settings.template.yml +52 -66
  133. package/src/config/budgets.yml +29 -0
  134. package/src/config/discovery/packs.yml +11 -0
  135. package/src/config/discovery/workspaces.yml +1 -1
  136. package/src/config/evaluator-budgets.json +4 -4
  137. package/src/config/gate-coverage.yml +26 -0
  138. package/src/config/gate-violation-baselines.json +3 -3
  139. package/src/scripts/_cli/cmd_brand_status.ts +174 -0
  140. package/src/scripts/_cli/cmd_conformance.ts +14 -42
  141. package/src/scripts/_cli/cmd_doctor.ts +65 -48
  142. package/src/scripts/_cli/cmd_mcp_available.ts +266 -0
  143. package/src/scripts/_cli/cmd_packs_active.ts +225 -0
  144. package/src/scripts/_cli/cmd_settings_get.ts +324 -0
  145. package/src/scripts/_dispatch.bash +57 -0
  146. package/src/scripts/_lib/agent_settings.ts +140 -16
  147. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +1 -1
  148. package/src/scripts/_lib/auto_dispatch.ts +23 -18
  149. package/src/scripts/_lib/capsule_trigger.ts +124 -0
  150. package/src/scripts/_lib/carrier_divergence.ts +135 -0
  151. package/src/scripts/_lib/host_capability.ts +144 -4
  152. package/src/scripts/_lib/judgment_ladder.ts +382 -0
  153. package/src/scripts/_lib/orchestration_gate.ts +8 -0
  154. package/src/scripts/_lib/orchestration_record.ts +37 -0
  155. package/src/scripts/_lib/orchestration_savings.ts +1 -1
  156. package/src/scripts/_lib/prompt_shape.ts +88 -0
  157. package/src/scripts/_lib/review_skipped_record.ts +102 -0
  158. package/src/scripts/_lib/rule_layer_overlap.ts +254 -0
  159. package/src/scripts/_lib/self_repair.ts +489 -0
  160. package/src/scripts/_lib/self_repair_store.ts +128 -0
  161. package/src/scripts/_lib/subagent_capsule.ts +182 -0
  162. package/src/scripts/_lib/subagent_response.ts +19 -0
  163. package/src/scripts/_lib/subagent_spawn.ts +13 -0
  164. package/src/scripts/_lib/subagent_steering.ts +9 -4
  165. package/src/scripts/_lib/tier_budget_routing.ts +6 -1
  166. package/src/scripts/_lib/transcript_entry.ts +80 -0
  167. package/src/scripts/_lib/worker_budget.ts +37 -2
  168. package/src/scripts/ai_council/clients.ts +76 -54
  169. package/src/scripts/ai_council/config.ts +94 -6
  170. package/src/scripts/ai_council/handoff.ts +113 -0
  171. package/src/scripts/ai_council/modes.ts +19 -4
  172. package/src/scripts/ai_council/orchestrator.ts +105 -0
  173. package/src/scripts/ai_council/quorum.ts +84 -0
  174. package/src/scripts/ai_council/session.ts +44 -0
  175. package/src/scripts/ai_council/transport_resolver.ts +127 -1
  176. package/src/scripts/ai_team/availability.ts +110 -0
  177. package/src/scripts/ai_team/config.ts +34 -14
  178. package/src/scripts/ai_team/team_dispatch.ts +71 -29
  179. package/src/scripts/bench_critic_protocol.ts +396 -0
  180. package/src/scripts/check_branch_freshness.ts +255 -0
  181. package/src/scripts/check_council_config_location.ts +125 -1
  182. package/src/scripts/check_detector_corpus.ts +202 -0
  183. package/src/scripts/check_hook_bundle_freshness.ts +4 -1
  184. package/src/scripts/check_standing_rule_delivery.ts +314 -0
  185. package/src/scripts/condense.ts +162 -2
  186. package/src/scripts/config/profiles.ts +13 -3
  187. package/src/scripts/conformance_scan.ts +272 -24
  188. package/src/scripts/council_availability_hook.ts +188 -0
  189. package/src/scripts/council_cli.ts +527 -32
  190. package/src/scripts/forensics_report.ts +333 -0
  191. package/src/scripts/hook_manifest.yaml +107 -26
  192. package/src/scripts/hooks/block_no_verify.ts +39 -2
  193. package/src/scripts/hooks/block_unauthorized_git.ts +156 -7
  194. package/src/scripts/hooks/concern_registry.ts +10 -0
  195. package/src/scripts/hooks/delegation_nudge_hook.ts +484 -0
  196. package/src/scripts/hooks/end_review_nudge_hook.ts +726 -0
  197. package/src/scripts/hooks/orchestration_record_hook.ts +342 -0
  198. package/src/scripts/install.ts +151 -0
  199. package/src/scripts/language_mirror_hook.ts +30 -37
  200. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  201. package/src/scripts/lint_never_silent.ts +276 -0
  202. package/src/scripts/lint_no_activation_gates.ts +271 -0
  203. package/src/scripts/measure_scope_dedup.ts +19 -13
  204. package/src/scripts/onboarding_gate_hook.ts +40 -1
  205. package/src/scripts/orchestration_record.ts +12 -1
  206. package/src/scripts/preamble_byte_census.ts +9 -20
  207. package/src/scripts/rebuild_hook_bundle.ts +177 -0
  208. package/src/scripts/release.ts +74 -2
  209. package/src/scripts/report_carrier_divergence.ts +364 -0
  210. package/src/scripts/report_skill_activation.ts +257 -0
  211. package/src/scripts/report_skill_obligation_violations.ts +579 -0
  212. package/src/scripts/routing_doctor.ts +95 -39
  213. package/src/scripts/score_skill_selection.ts +19 -5
  214. package/src/scripts/self_repair_cli.ts +470 -0
  215. package/src/scripts/self_repair_hook.ts +241 -0
  216. package/src/scripts/team_events_spike.ts +271 -0
  217. package/src/scripts/team_review_gate_hook.ts +31 -9
  218. package/src/server/schemas/settings.ts +10 -17
  219. package/src/shared/settingsCarveOut.ts +0 -10
  220. package/src/shared/settingsClasses.ts +11 -9
@@ -29,7 +29,7 @@ obligation_frequency: "per-edit"
29
29
  A precedence rule plus its validation gate (merged from the former
30
30
  `brand-consistency` rule, 2026-08-04 — the pair shared triggers and one
31
31
  subject). When a consumer already has a brand — registered tokens
32
- (`.tokens.json`), a voice profile, a brand guide — that brand is authoritative
32
+ (`tokens.json`), a voice profile, a brand guide — that brand is authoritative
33
33
  for the run. The curated `brand` corpus (archetypes, colour psychology, type
34
34
  principles) is a **gap-filler**, never an override.
35
35
 
@@ -55,10 +55,32 @@ OR A VOICE RULE. A VALUE THAT TRACES TO NEITHER IS OFF-BRAND.
55
55
  NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
56
56
  ```
57
57
 
58
+ ## Where the brand actually lives — and how to check
59
+
60
+ ```
61
+ NEVER INFER BRAND PRESENCE FROM A FILENAME. RUN `agent-config brand:status`.
62
+ THE FILE IS `tokens.json`, NEVER `.tokens.json` — A DOT-PREFIXED FILE IS READ BY NOTHING.
63
+ ```
64
+
65
+ The resolver searches exactly four paths under the project root, in this order,
66
+ first hit wins (`BRAND_TOKEN_PATHS`, the UI scaffold directive):
67
+
68
+ 1. `tokens.json`
69
+ 2. `assets/tokens.json`
70
+ 3. `resources/tokens.json`
71
+ 4. `agents/settings/brand/tokens.json` <!-- ref-ignore -->
72
+
73
+ `agent-config brand:status` reports which one holds a file, or that none does —
74
+ and separately flags a dot-prefixed `.tokens.json`, which is the file a reader
75
+ of this rule's earlier wording would plausibly have created and which nothing
76
+ reads. Absent is a real answer: it means the greenfield branch below, not a
77
+ misconfiguration.
78
+
58
79
  ## Precedence order
59
80
 
60
- 1. **Consumer brand profile** — registered `.tokens.json`, voice profile, brand
61
- guide, or a confirmed `brand-strategy` / `brand-identity` constraint set.
81
+ 1. **Consumer brand profile** — a registered `tokens.json` at one of the four
82
+ paths above, a voice profile, a brand guide, or a confirmed `brand-strategy`
83
+ / `brand-identity` constraint set.
62
84
  2. **This run's confirmed decisions** — selections the human signed off this session.
63
85
  3. **The brand corpus** — archetype / colour / type / messaging defaults, used
64
86
  only where 1 and 2 are silent, and always surfaced as corpus-sourced.
@@ -66,7 +88,7 @@ NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
66
88
  ## What the gate covers
67
89
 
68
90
  - **Colour / type / spacing** in generated UI or assets that is not one of the
69
- active brand tokens (from `state.ui_design` or the consumer's `.tokens.json`).
91
+ active brand tokens (from `state.ui_design` or the consumer's `tokens.json`).
70
92
  A raw hex / font / px value with no token behind it is off-brand.
71
93
  - **Copy and microcopy** whose register contradicts the active voice profile
72
94
  (e.g. playful copy under an authoritative `Ruler` voice).
@@ -79,7 +101,7 @@ NEVER SHIP AN ASSET THE ACTIVE BRAND CANNOT ACCOUNT FOR.
79
101
  - **Precedence half:** any brand decision while a consumer brand profile is
80
102
  present — to keep the corpus from quietly replacing a value the brand already
81
103
  defines.
82
- - **Gate half:** a brand layer is active for the run (a `.tokens.json` /
104
+ - **Gate half:** a brand layer is active for the run (a `tokens.json` /
83
105
  `state.ui_design` brand profile or a confirmed `brand-strategy` /
84
106
  `brand-identity` constraint set) AND a UI / copy / asset is being emitted or
85
107
  reviewed.
@@ -114,6 +136,11 @@ for the full Brand-mode vs Product-mode discriminator.
114
136
  - [`brand-consistency`](brand-consistency.md) — pointer stub; its body lives here since the 2026-08-04 merge.
115
137
  - [`brand`](../skills/brand/SKILL.md) — the gap-fill corpus this rule subordinates to consumer brand.
116
138
  - [`brand-identity`](../skills/brand-identity/SKILL.md) — defines the tokens the gate validates against.
117
- - [`brand-to-tokens`](../skills/brand-to-tokens/SKILL.md) — emits the DTCG `.tokens.json` source of truth.
139
+ - [`brand-to-tokens`](../skills/brand-to-tokens/SKILL.md) — emits the DTCG token
140
+ source of truth. **Known contradiction, recorded not resolved:** that skill's
141
+ prose says to author `.tokens.json` while the only resolver in the tree reads
142
+ `tokens.json`, so a consumer following it literally produces a file nothing
143
+ loads. The authoring name is a consumer-visible decision and is not changed
144
+ here; `brand:status` surfaces the mismatch at the moment it matters.
118
145
  - [`design-intelligence`](../skills/design-intelligence/SKILL.md) — the "audit findings outrank corpus" precedent the gate mirrors.
119
146
  - [`docs/guidelines/design-modes.md`](../docs/guidelines/design-modes.md) — brand vs product register discriminator and routing.
@@ -19,7 +19,9 @@ obligation_frequency: "per-turn"
19
19
  # Context Hygiene
20
20
 
21
21
  > **Enforced by:** [`scripts/context_hygiene_hook.ts`](../../scripts/context_hygiene_hook.ts)
22
- > on Augment + Claude Code (`PostToolUse`). The hook maintains
22
+ > on Augment + Claude Code (`PostToolUse`). Run `agent-config hooks:status` to
23
+ > see whether that slot is actually bound on the host you are on — this line is
24
+ > a statement about the manifest, not about your install. The hook maintains
23
25
  > `agents/state/context-hygiene.json` (tool-call count, loop signal,
24
26
  > freshness milestones at 20/40/60); the prose below is the spec the
25
27
  > hook implements and the agent-side fallback.
@@ -0,0 +1,93 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "Council availability is decided by the CLI resolver, never by the project tree — .agent-settings.yml is not the council config"
5
+ triggers:
6
+ - keyword: "council"
7
+ - keyword: "ai council"
8
+ - keyword: "ai-council"
9
+ - keyword: "council:status"
10
+ - keyword: "second opinion"
11
+ - phrase: "cross-check with another model"
12
+ self_contained: true
13
+ workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
14
+ packs: [meta]
15
+ enforced_by:
16
+ - "none"
17
+ # obligation: line 27
18
+ obligation_frequency: "per-task"
19
+ ---
20
+
21
+ # Council Availability Is CLI-Decided
22
+
23
+ The council config is user-global (ADR-104): configured once per developer, live
24
+ in every project, worktree and CWD — including consumer repos carrying none of
25
+ this package's internals. Nothing in the project tree switches it on or off.
26
+
27
+ ## The Iron Law
28
+
29
+ ```
30
+ COUNCIL AVAILABILITY IS DECIDED BY THE CLI RESOLVER — NEVER BY THE PROJECT TREE.
31
+ RUN THE FREE `council:status` PROBE BEFORE CLAIMING THE COUNCIL IS UNAVAILABLE.
32
+ NEVER INFER "NOT CONFIGURED" FROM A MISSING `.agent-settings.yml`, A MISSING
33
+ `scripts/ai_council`, OR A MISSING PROJECT-LOCAL COUNCIL FILE — NONE OF THEM
34
+ CARRY COUNCIL ENABLEMENT.
35
+ NEVER COPY THE USER-GLOBAL CONFIG INTO THE PROJECT TREE TO "MAKE IT WORK".
36
+ NEVER PRESENT A SUBAGENT FAN-OUT AS A COUNCIL.
37
+ ```
38
+
39
+ ## The probe
40
+
41
+ ```bash
42
+ agent-config council:status # no API call, no spend, any directory
43
+ ```
44
+
45
+ Prints `CONFIGURED` / `NOT CONFIGURED`, the resolved path, the layer that
46
+ resolved it, and the member count. In this package's own checkout:
47
+ `./scripts-run src/scripts/council_cli status`.
48
+
49
+ ## What says nothing about availability
50
+
51
+ A missing `.agent-settings.yml` (it never carried enablement — the block was
52
+ removed in ADR-093), a missing `scripts/ai_council/` (package-internal, absent
53
+ from every consumer), a missing project-local council file (the resolver ignores
54
+ `project_root` entirely), and invisible API keys (they live under
55
+ `~/.event4u/agent-config/`). The one real location is
56
+ `~/.event4u/agent-config/settings/.ai-council.yml`; the only escape is
57
+ `$AI_COUNCIL_CONFIG`, an explicit absolute path — still not a project search.
58
+
59
+ ## Why this rule exists
60
+
61
+ The council switch is **not** in `.agent-settings.yml`, though roughly twenty
62
+ rules train the reflex of reading that file to learn whether a feature is on.
63
+ The exception lived only in [`ai-council`](../skills/ai-council/SKILL.md),
64
+ a skill body that reaches context only on activation, so five consumer sessions
65
+ inspected the tree, announced "council not configured", and substituted a
66
+ subagent fan-out while two members were configured the whole time. One copied
67
+ the user-global config into the repo to "make it work".
68
+
69
+ ## If the probe really says unavailable
70
+
71
+ State the resolver's own message and stop. A subagent fan-out is a legitimate
72
+ substitute **only when named as such** — never as "the council". Same honesty
73
+ boundary as [`evaluator-independence`](evaluator-independence.md).
74
+
75
+ ## When NOT to fire
76
+
77
+ Availability is already settled this session, or the question is about council
78
+ *content* (findings, synthesis) rather than availability.
79
+
80
+ ## Enforcement
81
+
82
+ `enforced_by: none` — no gate reads a chat claim. Deterministic instead:
83
+ `check_council_config_location` fails the build when a council surface ties the
84
+ config to `.agent-settings.yml`, which never carried it, or to a project-tree
85
+ path, and its §4 fails when no always-loaded rule carries this fact at all.
86
+
87
+ ## See also
88
+
89
+ - [`ai-council`](../skills/ai-council/SKILL.md) — the full invocation procedure.
90
+ - [`direct-answers`](direct-answers.md) Iron Law 2 — a live-state fact is never
91
+ asserted from inspection when an authoritative resolver exists.
92
+ - [`self-repair-loop`](self-repair-loop.md) — catches the claim when it is made
93
+ anyway.
@@ -61,6 +61,9 @@ OBVIOUS-TO-THE-AGENT ≠ IN-SCOPE.
61
61
  a ticket/spec that carries a second source (an attachment, a code reality, or an
62
62
  internal contradiction), gated by `consistency.cross_source` in
63
63
  `.agent-settings.yml` (`on` default · `auto` = high-confidence only · `off` = inert).
64
+ That file is the project layer of a cascade that starts user-global — never read
65
+ the setting or its absence from it alone; `agent-config settings:get
66
+ consistency.cross_source` reports the value and the file it came from.
64
67
 
65
68
  **Does NOT fire** on a single clear source with no second source to compare
66
69
  against (that is plain vagueness — it belongs to `ask-when-uncertain`), on
@@ -46,16 +46,18 @@ Only when the activation gate from
46
46
  [`auto-orchestration-activation`](../contexts/execution/auto-orchestration-activation.md)
47
47
  clears — all of:
48
48
 
49
- - `subagents.enabled` **and** `subagents.auto != off`,
49
+ - `emergency.orchestration_halt` is not set,
50
50
  - the host-capability manifest reports `subagent_spawn: true`,
51
51
  - the task is classified **delegable** per
52
52
  [`auto-dispatch-classification`](../contexts/execution/auto-dispatch-classification.md)
53
53
  (≥1 independent, well-specified slice above the size floor).
54
54
 
55
- `subagents.auto: ask` → ask once before dispatching, in the shape
56
- [`settings-ask-protocol`](settings-ask-protocol.md) fixes (the answer is not
57
- persisted — `subagents.auto` is class C); `auto: on` → surface the chosen mode
58
- + per-subtask tiers in one line. Any gate failing, or `auto: off`, or no host
55
+ Always-on orchestration (road-to-always-on-orchestration Phase 1) removed the
56
+ `subagents.enabled`/`subagents.auto` settings this used to gate on — there is
57
+ no more per-layer on/off setting. A matched delegable signal → dispatch,
58
+ surfacing the chosen mode + per-subtask tiers in one line, never silent. An
59
+ AMBIGUOUS verdict (no enumerated signal matched) → **ask**, always — a verdict
60
+ to the user, never a speculative spawn. The emergency halt, or no host
59
61
  primitive → run in-session (clean no-op).
60
62
 
61
63
  ## What it makes binding
@@ -77,11 +79,37 @@ primitive → run in-session (clean no-op).
77
79
  ordered slice never dispatches before its declared parent's return is
78
80
  verified. Both per
79
81
  [`subagent-steering`](../contexts/execution/subagent-steering.md).
80
- 6. **Record** telemetry after each dispatch — run `orchestration_record`
81
- (one validated line: spawn_count, token_delta + provenance, tier, task_class)
82
- per [`orchestration-telemetry`](../contexts/execution/orchestration-telemetry.md)
83
- § Emit. This is the agent-behavioral capture the savings report reads;
84
- skipping it leaves the value-of-orchestration question unmeasured.
82
+ 6. **Record** telemetry after each dispatch — on hook-capable hosts the
83
+ `orchestration-record` concern (`post_tool_use`) emits the line
84
+ deterministically for every Agent/Task completion; on hosts without the
85
+ slot, run `orchestration_record` yourself (one validated line: spawn_count,
86
+ token_delta + provenance, tier, task_class) per
87
+ [`orchestration-telemetry`](../contexts/execution/orchestration-telemetry.md)
88
+ § Emit. Measured before the hook existed: 1 of 370 dispatches captured —
89
+ the model-carried path alone leaves the value question unmeasured.
90
+
91
+ ## Carriers — how this rule reaches a session (and what stays model-carried)
92
+
93
+ No host runs the tier-2 rule router, so this file's triggers alone never load
94
+ it. The obligation travels on three carriers instead: the always-loaded
95
+ AGENTS.md line (delegate-by-default + end-review), the `delegation-nudge`
96
+ concern on `user_prompt_submit` (runs `classifyTask` on cheap prompt signals
97
+ and injects a one-line verdict ONLY when the classifier says
98
+ `do-in-parallel`/`do-in-steps` — silence otherwise; delivery on
99
+ `user_prompt_submit` is end-to-end verified), and the `end-review-nudge`
100
+ concern on `stop` (ONE `review_skipped` telemetry line per mutating
101
+ no-review session — verified; its advisory line reaches the dispatcher
102
+ output, but host-side forwarding of stop-slot context to the model is
103
+ unverified, so the model-facing end-review carrier is the AGENTS.md line
104
+ plus this telemetry). The
105
+ capability gate itself resolves from the committed host registry merged with a
106
+ live environment probe in `src/scripts/_lib/host_capability.ts`
107
+ (`probeHostCapabilities` — capability is a fact about the host, never a
108
+ settings override). What stays
109
+ model-carried, honestly: the decomposition itself, the per-return
110
+ verification, and every dispatch on hosts without hook slots. The nudges are
111
+ advisory by design — whether they change behaviour is measured by the
112
+ telemetry, not assumed.
85
113
 
86
114
  ## Scope — does NOT
87
115
 
@@ -72,6 +72,9 @@ decisions already made — treat it like brand tokens, not like inspiration.
72
72
  ## Strictness — set by `design.fidelity_mode`
73
73
 
74
74
  Read `design.fidelity_mode` from `.agent-settings.yml`. Missing → `strict`.
75
+ That file is the project layer of a cascade that starts user-global, so "missing"
76
+ means missing from **every** layer — `agent-config settings:get
77
+ design.fidelity_mode` reports the value and the file it came from.
75
78
 
76
79
  | Mode | Behaviour |
77
80
  |---|---|
@@ -99,7 +99,8 @@ id; with no ledger yet, the counter falls back to session scope. And the slot
99
99
  itself is not universal: `pre_tool_use` exists on **three** hosts — augment,
100
100
  claude, cowork. On cursor, cline, windsurf, gemini and copilot this guard has
101
101
  nowhere to bind, so items 1 and 4 join 2 and 3 as model-carried there. The
102
- frequency join in `check_enforcement_coverage.ts` reports exactly that set.
102
+ frequency join in `check_enforcement_coverage.ts` reports exactly that set, and
103
+ `agent-config hooks:status` answers it for the host you are on right now.
103
104
 
104
105
  Items 2 and 3 — an honestly chosen scope, and recording the prompt with the
105
106
  verdict — are **not** enforced by anything. A narrowed scope is not decidable
@@ -70,7 +70,8 @@ AND the repo contains a detectable index:
70
70
  routing skill: `agent-config code-graph detect|query|affected|path` over the
71
71
  native engine or a consumer-shipped index, grep as the stated fallback. On
72
72
  hook-capable hosts the PreToolUse `code-graph` nudge surfaces this once per
73
- session; on instruction-file hosts this rule is the surface.
73
+ session; on instruction-file hosts this rule is the surface. Which of the two
74
+ you are on is `agent-config hooks:status`, not a guess from the host name.
74
75
  - [`discovery_graph`](../scripts/discovery_graph.ts) — this suite's OWN artefact
75
76
  relation-graph (`affected`/`explain`); the external code-graph is the
76
77
  *source-code* analogue this rule defers to for code questions.
@@ -41,7 +41,7 @@ obligation_frequency: "per-task"
41
41
 
42
42
  # Finance Safety Floor
43
43
 
44
- Domain safety floor for finance-pack artefacts (cash, runway, valuation, scenario, unit economics, forecasting). Auto-activates when `pack-finance-basic` or `pack-finance-advanced` is installed.
44
+ Domain safety floor for finance-pack artefacts (cash, runway, valuation, scenario, unit economics, forecasting). Auto-activates when `pack-finance-basic` or `pack-finance-advanced` is installed — `agent-config packs:active` says whether it is, and names the degraded case where zero packs load and this floor cannot activate at all.
45
45
 
46
46
  ## Iron Law — no final investment recommendation
47
47
 
@@ -84,4 +84,4 @@ Trigger-set above activates this routing on demand, independent of the disciplin
84
84
  - [`commit-policy`](commit-policy.md) — commits are the user's call; rewriting them is a stronger version of the same restriction.
85
85
  - [`token-efficiency`](token-efficiency.md) — Iron Law on burning the user's tokens for cosmetic gain.
86
86
  - [`skill:git-workflow`](../skills/git-workflow/SKILL.md) — Safe Squash-After-Push protocol and Divergent-State Recovery decision tree.
87
- - `git … --no-verify` / `core.hooksPath` overrides — deterministically blocked by the `block-no-verify` PreToolUse guard (`src/scripts/hooks/block_no_verify.ts`, registered in `hook_manifest.yaml`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so on those hosts the Iron Laws above are model-carried and "deterministically blocked" is not a claim this rule can make. Surfaced by the frequency join in `check_enforcement_coverage.ts`, which reports the per-commit obligation as uncovered on exactly those platforms.
87
+ - `git … --no-verify` / `core.hooksPath` overrides — deterministically blocked by the `block-no-verify` PreToolUse guard (`src/scripts/hooks/block_no_verify.ts`, registered in `hook_manifest.yaml`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so on those hosts the Iron Laws above are model-carried and "deterministically blocked" is not a claim this rule can make. Surfaced by the frequency join in `check_enforcement_coverage.ts`, which reports the per-commit obligation as uncovered on exactly those platforms. To check the host you are on rather than trusting this sentence, run `agent-config hooks:status`.
@@ -26,7 +26,9 @@ obligation_frequency: "per-edit"
26
26
  # History Discipline
27
27
 
28
28
  Pack floor for the `history-discipline` pack (default-off; auto-activates
29
- when the pack is installed). Agents get history wrong in both directions:
29
+ when the pack is installed — `agent-config packs:active` says whether it is,
30
+ and names the degraded case where zero packs load and this floor cannot
31
+ activate at all). Agents get history wrong in both directions:
30
32
  missing entirely on data that needs it, or over-built as event sourcing
31
33
  where a row-level log suffices — and audit tables that themselves grow
32
34
  without bound.
@@ -39,7 +39,7 @@ obligation_frequency: "per-task"
39
39
 
40
40
  # Legal Safety Floor
41
41
 
42
- Domain safety floor for the `legal-review-prep` pack (contract/NDA/DPA review, legal triage). Auto-activates when `pack-legal-review-prep` is installed. Sibling to `finance-safety-floor` / `strategy-safety-floor`. Every output is a **draft to PREPARE for attorney review**, never legal advice. Operating mechanics migrated to [`legal-practice-profile § Legal safety floor`](../skills/legal-practice-profile/SKILL.md) (per P4 of `road-to-kernel-and-router`) — the Iron Laws below stay here.
42
+ Domain safety floor for the `legal-review-prep` pack (contract/NDA/DPA review, legal triage). Auto-activates when `pack-legal-review-prep` is installed — `agent-config packs:active` says whether it is, and names the degraded case where zero packs load and this floor cannot activate at all. Sibling to `finance-safety-floor` / `strategy-safety-floor`. Every output is a **draft to PREPARE for attorney review**, never legal advice. Operating mechanics migrated to [`legal-practice-profile § Legal safety floor`](../skills/legal-practice-profile/SKILL.md) (per P4 of `road-to-kernel-and-router`) — the Iron Laws below stay here.
43
43
 
44
44
  ## Iron Law — no final legal call
45
45
 
@@ -25,7 +25,9 @@ EXCEPTION: USER-INVOKED FLOWS ALWAYS RUN.
25
25
  EXCEPTION: USER EXPLICITLY ASKED FOR IT THIS TURN.
26
26
  ```
27
27
 
28
- Reading `.agent-settings.yml`:
28
+ Reading `.agent-settings.yml` — the project layer of a cascade that starts
29
+ user-global, so "not set" means not set on any layer; `agent-config settings:get
30
+ personal.pr_progress_comments` reports the value and the file it came from:
29
31
 
30
32
  - Missing key / not set → treat as `false`.
31
33
  - `personal.pr_progress_comments: false` (default) → gate fires.
@@ -18,7 +18,9 @@ obligation_frequency: "per-session"
18
18
  # Onboarding Gate
19
19
 
20
20
  **Iron Law.** First turn of a project: if `onboarding.onboarded` is
21
- false in `.agent-settings.yml`, instruct the developer to run
21
+ false in `.agent-settings.yml` — the project layer of a cascade that starts
22
+ user-global, so check it with `agent-config settings:get onboarding.onboarded`
23
+ rather than by opening one file — instruct the developer to run
22
24
  `agent-config setup` in their terminal before executing any other
23
25
  request. The wizard writes `onboarding.onboarded: true` on `Finish`,
24
26
  which silences this rule for subsequent turns.
@@ -45,7 +45,10 @@ AND EXECUTION MUST SKIP THEM INLINE WITH [-] AND A REASON.
45
45
  ```
46
46
 
47
47
  When autonomous local-CI runs are disabled in `.agent-settings.yml`
48
- (`quality.local_auto_run: false` — the shipped template default), every
48
+ (`quality.local_auto_run: false` — the shipped template default; that file is the
49
+ project layer of a cascade that starts user-global, and this key is one where an
50
+ ABSENT value resolves to `true` at its reader and therefore DISABLES this gate —
51
+ `agent-config settings:get quality.local_auto_run` reports both facts), every
49
52
  full-pipeline gate run during roadmap work is wasted wall-clock and
50
53
  tokens — the remote CI on the PR is the authoritative gate. Roadmaps must
51
54
  neither schedule nor execute those gates locally. New CI gates and
@@ -20,7 +20,7 @@ one of the six modes defined in
20
20
  [`role-contracts`](../docs/guidelines/agent-infra/role-contracts.md):
21
21
  `developer`, `reviewer`, `tester`, `po`, `incident`, `planner`.
22
22
 
23
- Read `roles.active_role` from `.agent-settings.yml` at session start. Empty / missing → rule is inert; do NOT guess a mode.
23
+ Read `roles.active_role` from `.agent-settings.yml` at session start — the project layer of a cascade that starts user-global, so use `agent-config settings:get roles.active_role`, which reports the value and the file it came from, rather than opening one file. Empty / missing → rule is inert; do NOT guess a mode.
24
24
 
25
25
  When active, every closing output MUST:
26
26
 
@@ -33,7 +33,9 @@ obligation_frequency: "per-edit"
33
33
  # Scale Discipline
34
34
 
35
35
  Pack floor for the `scale-discipline` pack (default-off; auto-activates
36
- when the pack is installed). AI agents produce functionally correct but
36
+ when the pack is installed — `agent-config packs:active` says whether it is,
37
+ and names the degraded case where zero packs load and this floor cannot
38
+ activate at all). AI agents produce functionally correct but
37
39
  scale-hostile persistence code — this rule binds the failure classes to
38
40
  deterministic pattern lints where possible and to review advice where not.
39
41
 
@@ -0,0 +1,103 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "An observed defect in the agent's own behaviour becomes a queued record and a fix against agent-config — never a silent shrug"
5
+ triggers:
6
+ - keyword: "self-repair"
7
+ - keyword: "self-repair-queue"
8
+ - phrase: "nicht richtig gearbeitet"
9
+ - phrase: "du hast das falsch"
10
+ - phrase: "you ignored the rule"
11
+ - phrase: "that was wrong"
12
+ self_contained: true
13
+ workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
14
+ packs: [meta]
15
+ enforced_by:
16
+ - "hook:self-repair"
17
+ # obligation: line 28
18
+ obligation_frequency: "per-turn"
19
+ ---
20
+
21
+ # Self-Repair Loop
22
+
23
+ A defect in how the agent behaved is a defect in **agent-config**, not in the
24
+ user's project. The user should not have to file it, and the next user should
25
+ not meet it again. Two intake paths fill one queue: the user says so
26
+ (`user_prompt_submit`), or a deterministic detector fires at turn end (`stop`).
27
+
28
+ ## The Iron Law
29
+
30
+ ```
31
+ AN OBSERVED DEFECT IN THE AGENT'S OWN BEHAVIOUR IS QUEUED AND FIXED — NEVER SHRUGGED OFF.
32
+ THE DEFECT BELONGS TO AGENT-CONFIG. NEVER "FIX" IT BY EDITING THE USER'S PROJECT.
33
+ CORRECT THE TURN OPENLY IN FRONT OF THE USER. NEVER RE-RUN IT SILENTLY TO HIDE THE MISS.
34
+ THE OUTWARD STEP — PUSH, PR, ISSUE — NEEDS THE USER'S WORD THIS TURN. NO EXCEPTION.
35
+ ```
36
+
37
+ ## When the queue line appears
38
+
39
+ `<self-repair-queue>` is injected at prompt time while records are open. It is
40
+ work, not a notification:
41
+
42
+ 1. **Read it** — `agent-config self-repair:status`, then the newest record
43
+ under `agents/runtime/self-repair/`.
44
+ 2. **Name the surface that failed** — the rule, skill, gate, or missing carrier
45
+ that allowed the behaviour. A defect with no named surface is an apology,
46
+ not a fix.
47
+ 3. **Author the fix against agent-config** — in a checkout if one exists, so
48
+ the release can be a pull request; otherwise the report alone becomes an
49
+ issue.
50
+ 4. **Offer the release** — `agent-config self-repair:release <fingerprint>`;
51
+ `--dry-run` shows route and body without touching the network. Running it is
52
+ the user's call, per
53
+ [`non-destructive-by-default`](non-destructive-by-default.md).
54
+
55
+ ## Correct openly, never silently
56
+
57
+ Reported by the user → redo the task properly in the same turn, visibly, saying
58
+ what changed. Found by a detector → say so at the next opportunity and correct
59
+ it. Forbidden is the hidden version: re-running the turn so the miss never
60
+ surfaces. That mechanism (`attempt → critic → re-attempt`) was benchmarked and
61
+ falsified under ADR-106 — capability Δ = 0, council verdict TERMINAL — and the
62
+ same verdict names the replacement lever: refine the rules on the failure tail,
63
+ which is what a queued record feeds. Hiding the miss also destroys the only
64
+ signal the loop runs on.
65
+
66
+ ## What the detectors do NOT do
67
+
68
+ They do not check that every rule was followed. Most obligations here are
69
+ model-carried and unobservable from a transcript; guessing at them would
70
+ manufacture defects and flood the queue. A new detector must fire on a real
71
+ recorded failure **and** stay silent on its near-miss.
72
+
73
+ ## Privacy — fail-closed by construction
74
+
75
+ A record carries a class, a sanitized evidence span and a counter, and has **no
76
+ field** that can hold a prompt, a file body, or a project path. It passes the
77
+ audited privacy floor before leaving the machine; a refusal downgrades it to
78
+ local-only rather than scrubbing it into publishable shape — the same principle
79
+ as [`domain-safety-pii`](domain-safety-pii.md) § Surface 2.
80
+
81
+ ## When NOT to fire
82
+
83
+ The user is criticising the **code**, not the agent's conduct; the fingerprint
84
+ is already an open record (the hook increments it); or a one-off caused by
85
+ information the agent could not have had — note it, do not queue it.
86
+
87
+ ## Enforcement
88
+
89
+ The hook is `fail_closed: false` and always exits 0: it records, it never
90
+ gates — blocking a turn-end on a heuristic is the failure mode the
91
+ enforcement-projection null warns about. Detection is hook-carried, analysis and
92
+ fix model-carried; only the privacy gate and route choice are deterministic.
93
+ Nothing claims a defect *will* be caught — only that a caught one is not dropped.
94
+ Whether the hook is bound at all on this host is `agent-config hooks:status`; on
95
+ a host with no matching slot the detection half does not run and only the
96
+ model-carried half remains.
97
+
98
+ ## See also
99
+
100
+ - [`non-destructive-by-default`](non-destructive-by-default.md) — the Hard Floor the release step obeys.
101
+ - [`skill-improvement-pipeline`](../skills/skill-improvement-pipeline/SKILL.md) — the sibling loop for capability gaps.
102
+ - [`upstream-contribute`](../skills/upstream-contribute/SKILL.md) — the manual path this automates.
103
+ - [`council-availability`](council-availability.md) — the defect class that motivated the first detector.
@@ -80,7 +80,8 @@ name it and suggest a fresh session or `/agent-handoff`, per
80
80
  > bound in **two** slots. `session_start` injects the full `<session-canary>`
81
81
  > contract once, so a fresh conversation cannot start without it.
82
82
  > `user_prompt_submit` injects a one-line beat every turn, which is what
83
- > actually reaches a task boundary.
83
+ > actually reaches a task boundary. Both bindings are manifest facts; whether
84
+ > they are live on this install is `agent-config hooks:status`.
84
85
 
85
86
  **Why two slots, and why not one.** The obligation is per *task*. No host has a
86
87
  per-task slot — Cline maps `TaskStart`/`TaskResume` onto `session_start`, and
@@ -7,7 +7,6 @@ triggers:
7
7
  - keyword: "settings:set"
8
8
  - keyword: "canary_name"
9
9
  - keyword: "rich_skills"
10
- - keyword: "budget_routing"
11
10
  - keyword: "adversarial_council"
12
11
  - keyword: "learn_on_session_end"
13
12
  - keyword: "open_edited_files"
@@ -34,7 +33,7 @@ obligation_frequency: "per-task"
34
33
  # Settings-Ask Protocol
35
34
 
36
35
  A settings question is the one ask where the agent poses the question *and* owns
37
- where the answer goes. Nine keys can produce one, in two mechanisms that look
36
+ where the answer goes. Seven keys can produce one, in two mechanisms that look
38
37
  identical from outside and differ completely underneath.
39
38
 
40
39
  ## The Iron Law
@@ -70,7 +69,7 @@ How long it stays cached in working state is the key's own business, and several
70
69
  keys state their own scope. Reading the C path as "re-ask every execution" would
71
70
  turn a fence against illegal writes into a source of extra questions.
72
71
 
73
- ## The nine keys
72
+ ## The seven keys
74
73
 
75
74
  **Class B — persist once**: `personal.canary_name` ·
76
75
  `personal.open_edited_files` · `memory.learn_on_session_end`. Each ships a
@@ -78,10 +77,12 @@ conservative default (`""`, `false`, `false`), so absent is indistinguishable
78
77
  from *no* and never from *yes*.
79
78
 
80
79
  **Class C carrying an `ask` value in its own enum** — a runtime question whose
81
- answer dies with the run: `subagents.budget_routing` and `worktrees.mode` (both
82
- **ship** as `ask`), plus `tokens.rich_skills`, `subagents.auto`,
83
- `subagents.adversarial_council`, `decision_engine.on_block` (which can be set to
84
- `ask` by a human but do not ship that way).
80
+ answer dies with the run: `worktrees.mode` (**ships** as `ask`), plus
81
+ `tokens.rich_skills`, `subagents.adversarial_council`, `decision_engine.on_block`
82
+ (which can be set to `ask` by a human but do not ship that way). Always-on
83
+ orchestration (road-to-always-on-orchestration Phase 1) deleted
84
+ `subagents.auto` and `subagents.budget_routing` — the layer no longer carries a
85
+ setting for this protocol to route.
85
86
 
86
87
  ## The budget
87
88
 
@@ -43,7 +43,7 @@ obligation_frequency: "per-task"
43
43
 
44
44
  # Strategy Safety Floor
45
45
 
46
- Domain safety floor for founder-strategy artefacts (vision, positioning, competitive moats, market entry, OKR trees, build-vs-buy). Auto-activates when `pack-founder-strategy` is installed.
46
+ Domain safety floor for founder-strategy artefacts (vision, positioning, competitive moats, market entry, OKR trees, build-vs-buy). Auto-activates when `pack-founder-strategy` is installed — `agent-config packs:active` says whether it is, and names the degraded case where zero packs load and this floor cannot activate at all.
47
47
 
48
48
  ## Iron Law — strategy is a frame, not a verdict
49
49
 
@@ -32,7 +32,9 @@ TO THE FULL FRUGALITY CANON (telegraph-speak, thin-projector).
32
32
  | `standard` | — | Balanced condensation | Not trimmed if priority ≥ 60 | 500–2000 tokens |
33
33
  | `rich` | Must be declared + justified | **Exempt** | **Never trimmed** | 2000–3500 tokens |
34
34
 
35
- Read `tokens.rich_skills` from `.agent-settings.yml` (default `on`) to determine
35
+ Read `tokens.rich_skills` from `.agent-settings.yml` (default `on`) — the project
36
+ layer of a cascade that starts user-global, so `agent-config settings:get
37
+ tokens.rich_skills` is the read that answers it, file included — to determine
36
38
  whether rich skills may load in full. If `off`, treat them as `standard`. If
37
39
  `ask`, the question's shape is
38
40
  [`settings-ask-protocol`](settings-ask-protocol.md)'s, not this rule's; what only
@@ -137,7 +139,7 @@ its obligation on line 300.
137
139
 
138
140
  ## The size band is measured, and only its ceiling is gated
139
141
 
140
- The `rich` band is **2,000–3,500 tokens** ([ADR-217](../docs/decisions/ADR-217-rich-class-band-measured-and-enforced.md)).
142
+ The `rich` band is **2,000–3,500 tokens** (ADR-217, `docs/decisions/ADR-217-rich-class-band-measured-and-enforced.md`).
141
143
  It was 2,000–5,000 and enforced by nothing until that record: measured with the
142
144
  exact BPE tokenizer, the largest rich artifact in the tree is 3,331 tokens, so
143
145
  the old ceiling described no artifact that existed. An unused permission costs
@@ -25,7 +25,11 @@ Tools are permissions, not abilities. Every tool access must be declared and rev
25
25
  ## Constraints
26
26
 
27
27
  - **Deny by default** — no tool access unless explicitly listed in `allowed_tools`
28
- - **Allowlist only** — tool names must match the tool registry
28
+ - **Allowlist only** — tool names must match the tool registry. That registry is
29
+ a small static constant and is **not** the same thing as the MCP servers a
30
+ session can reach; `agent-config mcp:available` prints both, kept apart, and
31
+ says plainly that it performs no handshake. Conflating the two is how a skill
32
+ ends up declaring a tool nothing provides.
29
33
  - **Read-first** — prefer read-only actions; write requires explicit approval
30
34
  - **No hidden credentials** — tools must not embed API keys or tokens in skill files
31
35
  - **No arbitrary execution** — tool adapters have fixed interfaces, not free-form calls
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: high
3
3
  name: adversarial-review
4
- description: "ONLY on a request for adversarial review, devil's advocate, stress-test, or honest critique ('poke holes', 'be brutal', 'was hältst du davon') — NOT routine code/design review."
4
+ description: "Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review."
5
5
  personas:
6
6
  - critical-challenger
7
7
  domain: quality
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: high
3
3
  name: analysis-autonomous-mode
4
- description: "ONLY when user explicitly requests autonomous analysis, deep investigation, multi-step research, or 'dig into this end-to-end without asking me each step' — NOT for normal feature work."
4
+ description: "Autonomous multi-step investigation — deep research carried end-to-end without per-step approval; explicit request only, never for normal feature work."
5
5
  domain: discovery
6
6
  workspaces:
7
7
  - agent-config-maintainer