@event4u/agent-config 9.7.0 → 9.9.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 (901) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +314 -190
  3. package/CONTRIBUTING.md +23 -7
  4. package/MIGRATION.md +20 -0
  5. package/README.md +57 -11
  6. package/dist/agent-src/commands/agents/audit.md +1 -1
  7. package/dist/agent-src/commands/agents/optimize.md +2 -2
  8. package/dist/agent-src/commands/agents/user.md +1 -1
  9. package/dist/agent-src/commands/agents.md +1 -1
  10. package/dist/agent-src/commands/check-current-md.md +3 -3
  11. package/dist/agent-src/commands/commit/in-chunks.md +8 -0
  12. package/dist/agent-src/commands/commit.md +17 -0
  13. package/dist/agent-src/commands/fix/portability.md +2 -2
  14. package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
  15. package/dist/agent-src/commands/fix/refs.md +2 -2
  16. package/dist/agent-src/commands/fix/route.md +4 -3
  17. package/dist/agent-src/commands/fix.md +9 -6
  18. package/dist/agent-src/commands/ghostwriter.md +1 -1
  19. package/dist/agent-src/commands/image.md +1 -1
  20. package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
  21. package/dist/agent-src/commands/optimize/skills.md +2 -2
  22. package/dist/agent-src/commands/post-as.md +1 -1
  23. package/dist/agent-src/commands/pr/create.md +4 -0
  24. package/dist/agent-src/commands/research.md +1 -1
  25. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  26. package/dist/agent-src/commands/security-audit-config.md +1 -1
  27. package/dist/agent-src/commands/team/delegate.md +4 -0
  28. package/dist/agent-src/commands/video.md +1 -1
  29. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
  30. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
  31. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
  32. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
  33. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
  34. package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
  35. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
  36. package/dist/agent-src/contexts/override-system.md +75 -5
  37. package/dist/agent-src/rules/code-provenance.md +112 -0
  38. package/dist/agent-src/rules/context-hygiene.md +2 -0
  39. package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
  40. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  41. package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
  42. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  43. package/dist/agent-src/rules/git-history-discipline.md +2 -0
  44. package/dist/agent-src/rules/history-discipline.md +80 -0
  45. package/dist/agent-src/rules/language-and-tone.md +2 -0
  46. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  47. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  48. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  49. package/dist/agent-src/rules/no-roadmap-references.md +4 -1
  50. package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
  51. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  52. package/dist/agent-src/rules/output-discipline.md +2 -0
  53. package/dist/agent-src/rules/persona-governance.md +2 -0
  54. package/dist/agent-src/rules/php-coding.md +1 -0
  55. package/dist/agent-src/rules/preservation-guard.md +3 -0
  56. package/dist/agent-src/rules/reviewer-awareness.md +1 -0
  57. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
  58. package/dist/agent-src/rules/roadmap-progress-sync.md +9 -0
  59. package/dist/agent-src/rules/scale-discipline.md +92 -0
  60. package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
  61. package/dist/agent-src/rules/security-sensitive-stop.md +11 -1
  62. package/dist/agent-src/rules/session-canary.md +77 -0
  63. package/dist/agent-src/rules/skill-quality.md +2 -0
  64. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  65. package/dist/agent-src/rules/source-of-truth.md +2 -0
  66. package/dist/agent-src/rules/telegraph-speak.md +2 -0
  67. package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -1
  68. package/dist/agent-src/rules/tool-safety.md +4 -1
  69. package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
  70. package/dist/agent-src/rules/verify-before-complete.md +2 -0
  71. package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
  72. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  73. package/dist/agent-src/skills/code-intelligence/SKILL.md +97 -0
  74. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  75. package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
  76. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  77. package/dist/agent-src/skills/design-review/SKILL.md +5 -6
  78. package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
  79. package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
  80. package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
  81. package/dist/agent-src/skills/history-design/SKILL.md +101 -0
  82. package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
  83. package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
  84. package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
  85. package/dist/agent-src/skills/image-editing/SKILL.md +2 -1
  86. package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
  87. package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
  88. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  89. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
  90. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
  91. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
  92. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
  93. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
  94. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
  95. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  96. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  97. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
  98. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  99. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
  100. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
  101. package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
  102. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
  103. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
  104. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
  105. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
  106. package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
  107. package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
  108. package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
  109. package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
  110. package/dist/agent-src/skills/secrets-management/SKILL.md +43 -1
  111. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  112. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
  113. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
  114. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  115. package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
  116. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
  117. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
  118. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
  119. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
  120. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
  121. package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
  122. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
  123. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
  124. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
  125. package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
  126. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  127. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
  128. package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
  129. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
  130. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
  131. package/dist/agent-src/templates/AGENTS.md +1 -1
  132. package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
  133. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  134. package/dist/agent-src/templates/command.md +3 -3
  135. package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
  136. package/dist/agent-src/templates/persona.md +2 -2
  137. package/dist/agent-src/templates/rule.md +2 -2
  138. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  139. package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
  140. package/dist/cli/commands/doctorShell.js +20 -0
  141. package/dist/cli/commands/doctorShell.js.map +1 -1
  142. package/dist/cli/commands/rtkDetect.js +58 -0
  143. package/dist/cli/commands/rtkDetect.js.map +1 -0
  144. package/dist/cli/configRoot.js +112 -0
  145. package/dist/cli/configRoot.js.map +1 -0
  146. package/dist/cli/configRoot.test.js +97 -0
  147. package/dist/cli/configRoot.test.js.map +1 -0
  148. package/dist/cli/firstRunNotice.js +70 -0
  149. package/dist/cli/firstRunNotice.js.map +1 -0
  150. package/dist/cli/help.js +4 -1
  151. package/dist/cli/help.js.map +1 -1
  152. package/dist/cli/main.js +54 -5
  153. package/dist/cli/main.js.map +1 -1
  154. package/dist/cli/registry.js +8 -1
  155. package/dist/cli/registry.js.map +1 -1
  156. package/dist/discovery/deprecation-report.md +1 -1
  157. package/dist/discovery/discovery-manifest.json +502 -101
  158. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  159. package/dist/discovery/discovery-manifest.summary.md +6 -4
  160. package/dist/discovery/orphan-report.md +1 -1
  161. package/dist/discovery/packs.json +95 -8
  162. package/dist/discovery/trust-report.md +11 -11
  163. package/dist/discovery/workspaces.json +36 -7
  164. package/dist/hooks/dispatch.js +19475 -0
  165. package/dist/install/agentSwitchDetection.js +75 -0
  166. package/dist/install/agentSwitchDetection.js.map +1 -0
  167. package/dist/install/agentSwitchProfile.js +117 -0
  168. package/dist/install/agentSwitchProfile.js.map +1 -0
  169. package/dist/install/atomic.js +1 -1
  170. package/dist/install/detect.js +1 -1
  171. package/dist/install/install.mjs +791 -486
  172. package/dist/install/rtkDetection.js +213 -0
  173. package/dist/install/rtkDetection.js.map +1 -0
  174. package/dist/install/rule_scope.js +2 -1
  175. package/dist/install/rule_scope.js.map +1 -1
  176. package/dist/install/types.js +2 -2
  177. package/dist/install/wizard-plan.js +1 -1
  178. package/dist/install/wizardDismissals.js +58 -0
  179. package/dist/install/wizardDismissals.js.map +1 -0
  180. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  181. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  182. package/dist/mcp/registry-manifest.json +15 -4
  183. package/dist/mcp/server.json +20 -0
  184. package/dist/mcp/server.mjs +44292 -0
  185. package/dist/router.json +1 -1
  186. package/dist/scripts/condense.js +14 -7
  187. package/dist/scripts/condense.js.map +1 -1
  188. package/dist/server/app.js +12 -0
  189. package/dist/server/app.js.map +1 -1
  190. package/dist/server/io/sharedWriteCheck.js +101 -0
  191. package/dist/server/io/sharedWriteCheck.js.map +1 -0
  192. package/dist/server/routes/ping.js +32 -0
  193. package/dist/server/routes/ping.js.map +1 -1
  194. package/dist/server/routes/settings.js +21 -4
  195. package/dist/server/routes/settings.js.map +1 -1
  196. package/dist/server/routes/userMd.js +21 -4
  197. package/dist/server/routes/userMd.js.map +1 -1
  198. package/dist/server/routes/wizard.js +68 -25
  199. package/dist/server/routes/wizard.js.map +1 -1
  200. package/dist/server/schemas/settings.js +12 -2
  201. package/dist/server/schemas/settings.js.map +1 -1
  202. package/dist/server/serverInfo.js +6 -2
  203. package/dist/server/serverInfo.js.map +1 -1
  204. package/dist/server/token.js +11 -4
  205. package/dist/server/token.js.map +1 -1
  206. package/dist/server/writeRoot.js +15 -1
  207. package/dist/server/writeRoot.js.map +1 -1
  208. package/dist/shared/capabilities.js +33 -0
  209. package/dist/shared/capabilities.js.map +1 -0
  210. package/dist/shared/capabilities.test.js +39 -0
  211. package/dist/shared/capabilities.test.js.map +1 -0
  212. package/dist/ui/assets/index-BpSQt5vm.js +40 -0
  213. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
  214. package/dist/ui/assets/index-jSfMW8_t.css +1 -0
  215. package/dist/ui/index.html +15 -6
  216. package/docs/MIGRATION.md +16 -0
  217. package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
  218. package/package.json +22 -9
  219. package/src/agent-src/templates/AGENTS.md +1 -1
  220. package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  221. package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
  222. package/src/config/agent-settings.template.yml +94 -13
  223. package/src/config/discovery/packs.yml +22 -0
  224. package/src/config/discovery/workspaces.yml +1 -1
  225. package/src/config/evaluator-budgets.json +47 -0
  226. package/src/config/hook-latency-budget.json +20 -0
  227. package/src/config/reach-channels.yml +217 -0
  228. package/src/config/reach-prescriptions-intake.yml +200 -0
  229. package/src/install/agentSwitchDetection.ts +90 -0
  230. package/src/install/agentSwitchProfile.ts +131 -0
  231. package/src/install/atomic.ts +1 -1
  232. package/src/install/detect.ts +1 -1
  233. package/src/install/rtkDetection.ts +274 -0
  234. package/src/install/rule_scope.ts +9 -2
  235. package/src/install/types.ts +2 -2
  236. package/src/install/wizard-plan.ts +1 -1
  237. package/src/install/wizardDismissals.ts +60 -0
  238. package/src/scripts/_cli/cmd_doctor.ts +62 -1
  239. package/src/scripts/_cli/cmd_memory_get.ts +197 -0
  240. package/src/scripts/_cli/cmd_refresh.ts +30 -0
  241. package/src/scripts/_dispatch.bash +96 -0
  242. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
  243. package/src/scripts/_lib/auto_dispatch.ts +76 -0
  244. package/src/scripts/_lib/detect_target_license.ts +714 -0
  245. package/src/scripts/_lib/exec_evidence.ts +251 -0
  246. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +15 -0
  247. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +15 -0
  248. package/src/scripts/_lib/install_drift.ts +194 -0
  249. package/src/scripts/_lib/kernel_rules.ts +46 -0
  250. package/src/scripts/_lib/memory_fts_index.ts +390 -0
  251. package/src/scripts/_lib/orchestration_record.ts +91 -2
  252. package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
  253. package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
  254. package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
  255. package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
  256. package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
  257. package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
  258. package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
  259. package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
  260. package/src/scripts/_lib/persistence/types.ts +109 -0
  261. package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
  262. package/src/scripts/_lib/risk_paths.ts +160 -0
  263. package/src/scripts/_lib/rtk_allowlist.ts +44 -0
  264. package/src/scripts/_lib/secret_detector.test.ts +108 -0
  265. package/src/scripts/_lib/secret_detector.ts +328 -0
  266. package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
  267. package/src/scripts/_lib/spawn_env.ts +7 -0
  268. package/src/scripts/_lib/sqlite_guard.ts +191 -0
  269. package/src/scripts/_lib/subagent_spawn.ts +53 -0
  270. package/src/scripts/_lib/tool_probe.ts +359 -0
  271. package/src/scripts/_lib/worker_budget.ts +107 -0
  272. package/src/scripts/adr/regenerate_index.ts +81 -6
  273. package/src/scripts/ai_council/blind_review.ts +0 -0
  274. package/src/scripts/ai_council/config.ts +12 -6
  275. package/src/scripts/ai_council/orchestrator.ts +73 -3
  276. package/src/scripts/ai_team/review_gate.ts +8 -10
  277. package/src/scripts/ai_team/team_dispatch.ts +48 -0
  278. package/src/scripts/audit_adr_coverage.ts +33 -0
  279. package/src/scripts/audit_initial_context.ts +1 -1
  280. package/src/scripts/bench_cross_source_eval.ts +400 -0
  281. package/src/scripts/bench_honesty_score.ts +1093 -0
  282. package/src/scripts/bench_hook_latency.ts +218 -0
  283. package/src/scripts/build_mcp_catalog.ts +275 -0
  284. package/src/scripts/build_mcp_registry_manifest.ts +46 -0
  285. package/src/scripts/build_proof.ts +207 -0
  286. package/src/scripts/chat_history.ts +8 -5
  287. package/src/scripts/check_adr_frontmatter.ts +195 -0
  288. package/src/scripts/check_artefact_count_messaging.ts +4 -0
  289. package/src/scripts/check_backstop_debt.ts +210 -0
  290. package/src/scripts/check_bundle_path_leakage.ts +343 -0
  291. package/src/scripts/check_claims.ts +188 -8
  292. package/src/scripts/check_comparison.ts +12 -0
  293. package/src/scripts/check_enforcement_coverage.ts +592 -0
  294. package/src/scripts/check_evaluator_budgets.ts +99 -0
  295. package/src/scripts/check_kernel_rule_bundle.ts +16 -12
  296. package/src/scripts/check_knowledge_sharing.ts +12 -1
  297. package/src/scripts/check_no_external_sources.ts +2 -2
  298. package/src/scripts/check_reach_channels.ts +407 -0
  299. package/src/scripts/check_reach_staleness.ts +364 -0
  300. package/src/scripts/check_secret_leak.test.ts +47 -0
  301. package/src/scripts/check_secret_leak.ts +290 -0
  302. package/src/scripts/check_source_pointer_freshness.ts +28 -3
  303. package/src/scripts/code_graph/build.ts +0 -0
  304. package/src/scripts/code_graph/cli.ts +379 -0
  305. package/src/scripts/code_graph/detect.ts +186 -0
  306. package/src/scripts/code_graph/extract.ts +386 -0
  307. package/src/scripts/code_graph/intent.ts +45 -0
  308. package/src/scripts/code_graph/loader.ts +123 -0
  309. package/src/scripts/code_graph/query.ts +290 -0
  310. package/src/scripts/code_graph/sanitize.ts +30 -0
  311. package/src/scripts/code_graph/sqlite_store.ts +174 -0
  312. package/src/scripts/code_graph/types.ts +83 -0
  313. package/src/scripts/code_graph/validate.ts +63 -0
  314. package/src/scripts/condense.ts +14 -6
  315. package/src/scripts/context_hygiene_hook.ts +8 -5
  316. package/src/scripts/council_cli.ts +126 -12
  317. package/src/scripts/detect_target_license.ts +203 -0
  318. package/src/scripts/evaluator_umbrella.sh +145 -0
  319. package/src/scripts/external_sources_denylist.json +8 -4
  320. package/src/scripts/first_run_gate_hook.ts +9 -5
  321. package/src/scripts/generate_subagent_floor.ts +194 -0
  322. package/src/scripts/hermetic-install.sh +3 -3
  323. package/src/scripts/hook_manifest.yaml +65 -16
  324. package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
  325. package/src/scripts/hooks/block_no_verify.ts +9 -9
  326. package/src/scripts/hooks/code_graph_nudge_hook.ts +191 -0
  327. package/src/scripts/hooks/concern_registry.ts +75 -0
  328. package/src/scripts/hooks/design_slop_hook.ts +8 -5
  329. package/src/scripts/hooks/dispatch_entry.ts +37 -0
  330. package/src/scripts/hooks/dispatch_hook.ts +176 -3
  331. package/src/scripts/hooks/hook_stdin.ts +42 -0
  332. package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
  333. package/src/scripts/hot_context_hook.ts +7 -6
  334. package/src/scripts/injection_scan_hook.ts +9 -1
  335. package/src/scripts/install +6 -6
  336. package/src/scripts/install-hooks.sh +4 -4
  337. package/src/scripts/install.sh +5 -4
  338. package/src/scripts/install.ts +264 -23
  339. package/src/scripts/iron_law_sha.ts +3 -12
  340. package/src/scripts/learning_sidecar.ts +0 -0
  341. package/src/scripts/lint_budget_ownership.ts +89 -0
  342. package/src/scripts/lint_command_routing.ts +35 -5
  343. package/src/scripts/lint_command_verbs.ts +42 -9
  344. package/src/scripts/lint_consumer_internal_refs.ts +211 -0
  345. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  346. package/src/scripts/lint_documented_commands.ts +670 -0
  347. package/src/scripts/lint_framework_leakage.ts +17 -3
  348. package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
  349. package/src/scripts/lint_governed_writes.ts +335 -0
  350. package/src/scripts/lint_hidden_unicode.ts +6 -0
  351. package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
  352. package/src/scripts/lint_memory_tripwire.ts +186 -0
  353. package/src/scripts/lint_override_kernel_guard.ts +267 -0
  354. package/src/scripts/lint_persistence.ts +171 -0
  355. package/src/scripts/lint_pre_migration_refs.ts +106 -0
  356. package/src/scripts/lint_provenance.ts +547 -0
  357. package/src/scripts/lint_provenance_vocabulary.ts +437 -0
  358. package/src/scripts/lint_spawn_payload.ts +283 -0
  359. package/src/scripts/lint_store_boundary.ts +152 -0
  360. package/src/scripts/lint_versioned_cache.ts +7 -1
  361. package/src/scripts/mcp_server/__main__.ts +7 -2
  362. package/src/scripts/mcp_server/catalog.ts +23 -1
  363. package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
  364. package/src/scripts/mcp_server/prompts.ts +6 -0
  365. package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
  366. package/src/scripts/mcp_server/tools.ts +56 -5
  367. package/src/scripts/mcp_telemetry_query.ts +2 -33
  368. package/src/scripts/mcp_telemetry_store.ts +64 -34
  369. package/src/scripts/measure_rule_budget.ts +3 -12
  370. package/src/scripts/memory_learn_hook.ts +126 -0
  371. package/src/scripts/memory_lookup.ts +0 -0
  372. package/src/scripts/memory_replay_24.ts +312 -0
  373. package/src/scripts/memory_report.ts +16 -3
  374. package/src/scripts/memory_signal.ts +48 -0
  375. package/src/scripts/memory_status.ts +6 -0
  376. package/src/scripts/minimal_safe_diff_hook.ts +8 -5
  377. package/src/scripts/onboarding_gate_hook.ts +8 -5
  378. package/src/scripts/orchestration_record.ts +16 -0
  379. package/src/scripts/pr_url_reminder_hook.ts +8 -1
  380. package/src/scripts/prepack-check.mjs +17 -0
  381. package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
  382. package/src/scripts/prepack_lifecycle_check.mjs +82 -0
  383. package/src/scripts/profile_staleness_hook.ts +8 -7
  384. package/src/scripts/reach_doctor.ts +1651 -0
  385. package/src/scripts/release.ts +24 -3
  386. package/src/scripts/report_install_drift.ts +109 -0
  387. package/src/scripts/risk_escalation_shadow.ts +160 -0
  388. package/src/scripts/roadmap_progress_hook.ts +8 -5
  389. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  390. package/src/scripts/schemas/license-policy.schema.json +89 -0
  391. package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
  392. package/src/scripts/schemas/reach-channels.schema.json +134 -0
  393. package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
  394. package/src/scripts/schemas/rule.schema.json +20 -0
  395. package/src/scripts/self_review_gate.test.ts +173 -1
  396. package/src/scripts/self_review_gate.ts +155 -15
  397. package/src/scripts/session_canary_hook.ts +182 -0
  398. package/src/scripts/skill_linter.ts +55 -0
  399. package/src/scripts/smoke_quickstart.ts +2 -2
  400. package/src/scripts/surface_probe_hook.ts +8 -7
  401. package/src/scripts/sync_gitattributes.ts +310 -0
  402. package/src/scripts/team_review_gate_hook.ts +13 -16
  403. package/src/scripts/validate_reach_prescriptions.ts +751 -0
  404. package/src/scripts/verify_before_complete_hook.ts +8 -5
  405. package/src/scripts/wrapper_freshness_hook.ts +8 -7
  406. package/src/server/schemas/settings.ts +24 -2
  407. package/src/shared/capabilities.test.ts +43 -0
  408. package/src/shared/capabilities.ts +75 -0
  409. package/src/templates/minimal/agents-overrides-readme.md +20 -0
  410. package/dist/ui/assets/index-BPFMZWUs.css +0 -1
  411. package/dist/ui/assets/index-BiEZiZ31.js +0 -40
  412. package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
  413. package/docs/CLAIMS.md +0 -261
  414. package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
  415. package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
  416. package/docs/SKILL_CENSUS.md +0 -352
  417. package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
  418. package/docs/adrs/cost/README.md +0 -9
  419. package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
  420. package/docs/adrs/memory/README.md +0 -10
  421. package/docs/adrs/router/0001-three-tier-routing.md +0 -119
  422. package/docs/adrs/router/README.md +0 -9
  423. package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
  424. package/docs/adrs/schema/README.md +0 -9
  425. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
  426. package/docs/adrs/smoke/README.md +0 -9
  427. package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
  428. package/docs/adrs/telegraph/README.md +0 -9
  429. package/docs/announcements/2026-05-non-dev-launch.md +0 -79
  430. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
  431. package/docs/anti-reskin-gate.md +0 -60
  432. package/docs/architecture/augment-projection.md +0 -70
  433. package/docs/architecture/claude-bundle.md +0 -77
  434. package/docs/architecture/current-onboard-baseline.md +0 -126
  435. package/docs/architecture/current-safety-behavior.md +0 -137
  436. package/docs/architecture/multi-tool-projection.md +0 -125
  437. package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
  438. package/docs/architecture/source-projection.md +0 -85
  439. package/docs/architecture.md +0 -390
  440. package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
  441. package/docs/archive/CHANGELOG-7.0.0.md +0 -419
  442. package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
  443. package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
  444. package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
  445. package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
  446. package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
  447. package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
  448. package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
  449. package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
  450. package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
  451. package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
  452. package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
  453. package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
  454. package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
  455. package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
  456. package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
  457. package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
  458. package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
  459. package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
  460. package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
  461. package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
  462. package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
  463. package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
  464. package/docs/artefact-census.md +0 -71
  465. package/docs/benchmark.md +0 -648
  466. package/docs/benchmark.pinned.yml +0 -31
  467. package/docs/benchmarks.md +0 -85
  468. package/docs/capability-matrix.md +0 -33
  469. package/docs/case-studies/_template.md +0 -60
  470. package/docs/case-studies/frontend-design-positioning.md +0 -86
  471. package/docs/catalog.md +0 -721
  472. package/docs/command-flows.md +0 -272
  473. package/docs/command-naming-audit.md +0 -60
  474. package/docs/comparison.yaml +0 -45
  475. package/docs/contracts/CHANGELOG-conventions.md +0 -149
  476. package/docs/contracts/STABILITY.md +0 -188
  477. package/docs/contracts/adoption-signal-floor.md +0 -127
  478. package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
  479. package/docs/contracts/adr-chat-history-split.md +0 -140
  480. package/docs/contracts/adr-command-suggestion.md +0 -144
  481. package/docs/contracts/adr-forecast-construction-shape.md +0 -90
  482. package/docs/contracts/adr-gtm-context-spine.md +0 -116
  483. package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
  484. package/docs/contracts/adr-install-user-type-axis.md +0 -107
  485. package/docs/contracts/adr-layout.md +0 -107
  486. package/docs/contracts/adr-level-6-productization.md +0 -145
  487. package/docs/contracts/adr-mcp-runtime.md +0 -128
  488. package/docs/contracts/adr-product-ui-track.md +0 -381
  489. package/docs/contracts/adr-prompt-driven-execution.md +0 -186
  490. package/docs/contracts/adr-settings-sync-engine.md +0 -128
  491. package/docs/contracts/adr-user-types-axis.md +0 -127
  492. package/docs/contracts/adr-wing4-context-spine.md +0 -126
  493. package/docs/contracts/agent-user-schema.md +0 -170
  494. package/docs/contracts/agents-layout.md +0 -148
  495. package/docs/contracts/agents-md-tech-stack.md +0 -75
  496. package/docs/contracts/ai-council-config.md +0 -829
  497. package/docs/contracts/ai-team-config.md +0 -224
  498. package/docs/contracts/analysis-memory-loop.md +0 -149
  499. package/docs/contracts/at-rest-encryption.md +0 -191
  500. package/docs/contracts/audit-log-v1.md +0 -150
  501. package/docs/contracts/auto-orchestration-v1.md +0 -70
  502. package/docs/contracts/benchmark-ab-contract.md +0 -106
  503. package/docs/contracts/benchmark-corpus-spec.md +0 -125
  504. package/docs/contracts/benchmark-report-schema.md +0 -113
  505. package/docs/contracts/branch-protection-policy.md +0 -139
  506. package/docs/contracts/brand-token-consumption.md +0 -74
  507. package/docs/contracts/capability-boundary.md +0 -69
  508. package/docs/contracts/capability-packs.md +0 -217
  509. package/docs/contracts/ci-cost-budget.md +0 -111
  510. package/docs/contracts/ci-green-floor.md +0 -141
  511. package/docs/contracts/command-category-governance.md +0 -84
  512. package/docs/contracts/command-clusters.md +0 -399
  513. package/docs/contracts/command-surface-tiers.md +0 -176
  514. package/docs/contracts/command-taxonomy.md +0 -137
  515. package/docs/contracts/condensation-default-kill-criterion.md +0 -116
  516. package/docs/contracts/config-presets.md +0 -144
  517. package/docs/contracts/conformance.md +0 -84
  518. package/docs/contracts/consumer-bridge.md +0 -73
  519. package/docs/contracts/context-paths.md +0 -101
  520. package/docs/contracts/context-spine.md +0 -179
  521. package/docs/contracts/cost-dashboard.md +0 -143
  522. package/docs/contracts/cost-enforcement.md +0 -134
  523. package/docs/contracts/cost-profile-defaults.md +0 -110
  524. package/docs/contracts/cost-summary-schema.md +0 -107
  525. package/docs/contracts/creative-pack-boundary.md +0 -63
  526. package/docs/contracts/cross-repo-retrieval.md +0 -64
  527. package/docs/contracts/cross-wing-handoff.md +0 -134
  528. package/docs/contracts/daily-workspace.md +0 -147
  529. package/docs/contracts/decision-engine-gates.md +0 -120
  530. package/docs/contracts/decision-trace-v1.md +0 -177
  531. package/docs/contracts/design-artifact-lifecycle.md +0 -93
  532. package/docs/contracts/design-artifact-verification.md +0 -153
  533. package/docs/contracts/discovery-manifest.md +0 -209
  534. package/docs/contracts/discovery-manifest.schema.json +0 -254
  535. package/docs/contracts/evidence-based-pruning.md +0 -102
  536. package/docs/contracts/explain-modes.md +0 -187
  537. package/docs/contracts/explain-trace.schema.json +0 -144
  538. package/docs/contracts/file-ownership-matrix.json +0 -13941
  539. package/docs/contracts/file-ownership-matrix.md +0 -135
  540. package/docs/contracts/frontmatter-contract.md +0 -140
  541. package/docs/contracts/ghostwriter-schema.md +0 -337
  542. package/docs/contracts/governance-enforcement-projection.md +0 -159
  543. package/docs/contracts/gui-wizard.md +0 -350
  544. package/docs/contracts/harness-expectations.md +0 -128
  545. package/docs/contracts/hook-architecture-v1.md +0 -325
  546. package/docs/contracts/host-agent-protocol.md +0 -110
  547. package/docs/contracts/implement-ticket-flow.md +0 -625
  548. package/docs/contracts/init-telemetry.md +0 -132
  549. package/docs/contracts/injected-block-authenticity-model.md +0 -66
  550. package/docs/contracts/install-layout.md +0 -249
  551. package/docs/contracts/install-scopes.md +0 -82
  552. package/docs/contracts/installed-tools-lockfile.md +0 -144
  553. package/docs/contracts/installer-agent-mode.md +0 -137
  554. package/docs/contracts/iron-law-overrides.txt +0 -26
  555. package/docs/contracts/kernel-membership.md +0 -339
  556. package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
  557. package/docs/contracts/linear-ai-three-layers.md +0 -130
  558. package/docs/contracts/linter-structural-model.md +0 -181
  559. package/docs/contracts/load-context-budget-model.md +0 -259
  560. package/docs/contracts/load-context-schema.md +0 -220
  561. package/docs/contracts/local-analytics.md +0 -160
  562. package/docs/contracts/local-knowledge-ingestion.md +0 -96
  563. package/docs/contracts/local-server-api.md +0 -134
  564. package/docs/contracts/low-impact-corpus-format.md +0 -95
  565. package/docs/contracts/mcp-beta-criteria.md +0 -130
  566. package/docs/contracts/mcp-cloud-scope.md +0 -355
  567. package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
  568. package/docs/contracts/mcp-phase-1-scope.md +0 -272
  569. package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
  570. package/docs/contracts/mcp-tool-inventory.md +0 -64
  571. package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
  572. package/docs/contracts/measurement-baseline.md +0 -103
  573. package/docs/contracts/memory-visibility-v1.md +0 -160
  574. package/docs/contracts/mental-models.md +0 -336
  575. package/docs/contracts/migrate-command.md +0 -233
  576. package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
  577. package/docs/contracts/namespace.md +0 -125
  578. package/docs/contracts/no-runtime-boundary.md +0 -61
  579. package/docs/contracts/one-off-script-lifecycle.md +0 -110
  580. package/docs/contracts/orchestration-dsl-v1.md +0 -153
  581. package/docs/contracts/package-self-orientation.md +0 -163
  582. package/docs/contracts/pilot/agent-authority.md +0 -24
  583. package/docs/contracts/pilot/direct-answers.md +0 -70
  584. package/docs/contracts/pilot/language-and-tone.md +0 -63
  585. package/docs/contracts/plain-language-surface.md +0 -117
  586. package/docs/contracts/prelaunch-diagnostics.md +0 -151
  587. package/docs/contracts/profile-system.md +0 -167
  588. package/docs/contracts/reasoning-discipline-protocol.md +0 -83
  589. package/docs/contracts/release-pr-gating.md +0 -151
  590. package/docs/contracts/release-sizing.md +0 -107
  591. package/docs/contracts/release-trunk-sync.md +0 -105
  592. package/docs/contracts/review-lens-schema.md +0 -64
  593. package/docs/contracts/roadmap-complexity-standard.md +0 -138
  594. package/docs/contracts/role-experience.md +0 -125
  595. package/docs/contracts/router-blending.md +0 -71
  596. package/docs/contracts/rule-classification.md +0 -171
  597. package/docs/contracts/rule-interactions.md +0 -132
  598. package/docs/contracts/rule-interactions.yml +0 -260
  599. package/docs/contracts/rule-priority-hierarchy.md +0 -88
  600. package/docs/contracts/rule-router.md +0 -287
  601. package/docs/contracts/safety-model.md +0 -129
  602. package/docs/contracts/session-profile-overlay.md +0 -157
  603. package/docs/contracts/settings-api.md +0 -264
  604. package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
  605. package/docs/contracts/settings-sync-yaml-subset.md +0 -139
  606. package/docs/contracts/skill-bundled-assets.md +0 -62
  607. package/docs/contracts/skill-discovery.md +0 -80
  608. package/docs/contracts/skill-distribution-channels.md +0 -66
  609. package/docs/contracts/skill-domains.md +0 -144
  610. package/docs/contracts/skill-dry-run.md +0 -47
  611. package/docs/contracts/skill-family-map.yml +0 -915
  612. package/docs/contracts/smoke-contracts.md +0 -144
  613. package/docs/contracts/subagent-boundary.md +0 -59
  614. package/docs/contracts/surface-agent-contracts.md +0 -153
  615. package/docs/contracts/surface-matrix.md +0 -108
  616. package/docs/contracts/surface-tiers.md +0 -81
  617. package/docs/contracts/telegraph-telemetry.md +0 -83
  618. package/docs/contracts/ticket-bundle-format.md +0 -233
  619. package/docs/contracts/tier-3-contrib-plugin.md +0 -137
  620. package/docs/contracts/trust-and-safety.md +0 -144
  621. package/docs/contracts/ui-stack-extension.md +0 -237
  622. package/docs/contracts/ui-track-flow.md +0 -329
  623. package/docs/contracts/universal-skills.md +0 -91
  624. package/docs/contracts/user-type-schema.md +0 -146
  625. package/docs/contracts/value-dashboard-spec.md +0 -378
  626. package/docs/contracts/value-report-schema.md +0 -168
  627. package/docs/contracts/workflow-packs.md +0 -121
  628. package/docs/contracts/workspace-boundary.md +0 -84
  629. package/docs/contracts/workspace-documents.md +0 -144
  630. package/docs/contracts/write-engine.md +0 -182
  631. package/docs/cookbook.md +0 -152
  632. package/docs/customization.md +0 -685
  633. package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
  634. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
  635. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
  636. package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
  637. package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
  638. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
  639. package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
  640. package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
  641. package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
  642. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
  643. package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
  644. package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
  645. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
  646. package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
  647. package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
  648. package/docs/decisions/ADR-016-installer-architecture.md +0 -189
  649. package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
  650. package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
  651. package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
  652. package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
  653. package/docs/decisions/ADR-021-deployment-shape.md +0 -153
  654. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
  655. package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
  656. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
  657. package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
  658. package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
  659. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
  660. package/docs/decisions/ADR-028-root-layout.md +0 -147
  661. package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
  662. package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
  663. package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
  664. package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
  665. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
  666. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
  667. package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
  668. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
  669. package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
  670. package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
  671. package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
  672. package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
  673. package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
  674. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
  675. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
  676. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
  677. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
  678. package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
  679. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
  680. package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
  681. package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
  682. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
  683. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
  684. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
  685. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
  686. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
  687. package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
  688. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
  689. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
  690. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
  691. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
  692. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
  693. package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
  694. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
  695. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
  696. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
  697. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
  698. package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
  699. package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
  700. package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
  701. package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
  702. package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
  703. package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
  704. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
  705. package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
  706. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
  707. package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
  708. package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
  709. package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
  710. package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
  711. package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
  712. package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
  713. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
  714. package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
  715. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
  716. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
  717. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
  718. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
  719. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
  720. package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
  721. package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
  722. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
  723. package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
  724. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
  725. package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
  726. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
  727. package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
  728. package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
  729. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
  730. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
  731. package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
  732. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
  733. package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
  734. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
  735. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
  736. package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
  737. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
  738. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
  739. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
  740. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
  741. package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -246
  742. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -110
  743. package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
  744. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
  745. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -201
  746. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
  747. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
  748. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
  749. package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
  750. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
  751. package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
  752. package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
  753. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
  754. package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
  755. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
  756. package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
  757. package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
  758. package/docs/decisions/INDEX.md +0 -136
  759. package/docs/deploy/connector-setup.md +0 -129
  760. package/docs/deploy/env-vars.md +0 -70
  761. package/docs/deploy/policy-cookbook.md +0 -130
  762. package/docs/deploy/quickstart.md +0 -112
  763. package/docs/deploy/small-team-recipe.md +0 -148
  764. package/docs/deploy/team-deployment-posture.md +0 -111
  765. package/docs/design/adversarial-council-eval.md +0 -106
  766. package/docs/design/council-vs-solo-baseline.md +0 -92
  767. package/docs/design/cross-model-parity-eval.md +0 -82
  768. package/docs/design/length-neutral-judge-rerun.md +0 -92
  769. package/docs/design/utilization-window-criteria.md +0 -51
  770. package/docs/development.md +0 -230
  771. package/docs/distribution/awesome-list-submission.md +0 -46
  772. package/docs/distribution/consumer-matrix.md +0 -96
  773. package/docs/distribution/launch-story-draft.md +0 -58
  774. package/docs/distribution/mcp-submission-checklist.md +0 -95
  775. package/docs/distribution/public-install-smoke.md +0 -68
  776. package/docs/distribution/registries.md +0 -117
  777. package/docs/distribution/registry-submissions.md +0 -85
  778. package/docs/distribution/telemetry-privacy.md +0 -128
  779. package/docs/distribution/telemetry-schema.md +0 -174
  780. package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
  781. package/docs/end-to-end-walkthroughs.md +0 -165
  782. package/docs/enforcement-by-host.md +0 -44
  783. package/docs/examples/agent-user.example.md +0 -22
  784. package/docs/experiences/agency.md +0 -49
  785. package/docs/experiences/content_creator.md +0 -49
  786. package/docs/experiences/developer.md +0 -49
  787. package/docs/experiences/finance.md +0 -50
  788. package/docs/experiences/founder.md +0 -49
  789. package/docs/experiences/ops.md +0 -49
  790. package/docs/featured-commands.md +0 -27
  791. package/docs/featured-skills.md +0 -95
  792. package/docs/flows.md +0 -67
  793. package/docs/getting-started-by-role.md +0 -190
  794. package/docs/getting-started-laravel.md +0 -72
  795. package/docs/getting-started-local-stdio.md +0 -77
  796. package/docs/getting-started.md +0 -254
  797. package/docs/github-topics.md +0 -93
  798. package/docs/governance-advantage.md +0 -72
  799. package/docs/governance.md +0 -96
  800. package/docs/guides/cross-repo-linked-projects.md +0 -93
  801. package/docs/guides/cross-repo-retrieval.md +0 -61
  802. package/docs/guides/frontend-design-corpus-refresh.md +0 -83
  803. package/docs/guides/local-analytics.md +0 -125
  804. package/docs/guides/local-knowledge.md +0 -127
  805. package/docs/guides/skill-discovery.md +0 -71
  806. package/docs/guides/skill-preview.md +0 -71
  807. package/docs/hook-payload-capture.md +0 -221
  808. package/docs/install-friction-report.md +0 -66
  809. package/docs/installation.md +0 -959
  810. package/docs/maintainers/branch-protection.md +0 -105
  811. package/docs/maintainers/dev-mode.md +0 -106
  812. package/docs/maintainers/optional-media-deps.md +0 -50
  813. package/docs/maintainers/system-map.md +0 -85
  814. package/docs/mcp-registries.md +0 -94
  815. package/docs/mcp-server.md +0 -175
  816. package/docs/mcp.md +0 -147
  817. package/docs/media/proof-demo.cast +0 -14
  818. package/docs/media/proof-demo.gif +0 -0
  819. package/docs/migration/consumer-template-consumption-model.md +0 -145
  820. package/docs/migration/divergences/README.md +0 -55
  821. package/docs/migration/divergences/_template.md +0 -50
  822. package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
  823. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
  824. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
  825. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
  826. package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
  827. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
  828. package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
  829. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
  830. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
  831. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
  832. package/docs/migration/node-floor.md +0 -86
  833. package/docs/migration/v1-to-v2.md +0 -156
  834. package/docs/migration/yaml-roundtrip-spike.md +0 -163
  835. package/docs/migrations/commands-1.15.0.md +0 -117
  836. package/docs/parity/bench-external.json +0 -58
  837. package/docs/parity/bench.json +0 -41
  838. package/docs/parity/command-frontmatter.md +0 -60
  839. package/docs/parity/external-runtime.md +0 -46
  840. package/docs/personas.md +0 -178
  841. package/docs/positioning-evidence.md +0 -86
  842. package/docs/profiles.md +0 -108
  843. package/docs/proof.md +0 -176
  844. package/docs/quality.md +0 -98
  845. package/docs/readme-split-plan.md +0 -102
  846. package/docs/recruits/_template.md +0 -81
  847. package/docs/release-runbook.md +0 -141
  848. package/docs/role-experiences.md +0 -19
  849. package/docs/safety.md +0 -30
  850. package/docs/second-brain-scope.md +0 -116
  851. package/docs/self-review-gate.md +0 -65
  852. package/docs/setup/enterprise-and-offline.md +0 -201
  853. package/docs/setup/mcp-client-config.md +0 -358
  854. package/docs/setup/mcp-cloud-endpoints.md +0 -116
  855. package/docs/setup/mcp-cloud-registry-listing.md +0 -99
  856. package/docs/setup/mcp-cloud-setup.md +0 -183
  857. package/docs/setup/mcp-r2-bootstrap.md +0 -82
  858. package/docs/setup/mcp-server-docker.md +0 -101
  859. package/docs/setup/per-ide/aider.md +0 -48
  860. package/docs/setup/per-ide/antigravity.md +0 -68
  861. package/docs/setup/per-ide/augment.md +0 -89
  862. package/docs/setup/per-ide/claude-code.md +0 -97
  863. package/docs/setup/per-ide/claude-desktop.md +0 -207
  864. package/docs/setup/per-ide/cline.md +0 -43
  865. package/docs/setup/per-ide/codebuddy.md +0 -63
  866. package/docs/setup/per-ide/codex.md +0 -46
  867. package/docs/setup/per-ide/continue.md +0 -68
  868. package/docs/setup/per-ide/copilot.md +0 -80
  869. package/docs/setup/per-ide/cursor.md +0 -125
  870. package/docs/setup/per-ide/droid.md +0 -65
  871. package/docs/setup/per-ide/gemini-cli.md +0 -45
  872. package/docs/setup/per-ide/jetbrains.md +0 -76
  873. package/docs/setup/per-ide/kilocode.md +0 -66
  874. package/docs/setup/per-ide/kiro.md +0 -72
  875. package/docs/setup/per-ide/opencode.md +0 -62
  876. package/docs/setup/per-ide/qoder.md +0 -63
  877. package/docs/setup/per-ide/roocode.md +0 -68
  878. package/docs/setup/per-ide/trae.md +0 -63
  879. package/docs/setup/per-ide/warp.md +0 -63
  880. package/docs/setup/per-ide/windsurf.md +0 -109
  881. package/docs/setup/per-ide/zed.md +0 -73
  882. package/docs/showcase.md +0 -209
  883. package/docs/skill-duplication-findings.md +0 -91
  884. package/docs/skills-catalog.md +0 -265
  885. package/docs/skills-taxonomy.md +0 -90
  886. package/docs/spawn-site-policy.md +0 -72
  887. package/docs/succession.md +0 -80
  888. package/docs/threat-model.md +0 -29
  889. package/docs/troubleshooting.md +0 -155
  890. package/docs/ui-track-mental-model.md +0 -121
  891. package/docs/us-vs-the-category.md +0 -38
  892. package/docs/value.md +0 -86
  893. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  894. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  895. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  896. package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
  897. package/docs/walkthroughs/daily-workspace.md +0 -127
  898. package/docs/wedge/production-validator/README.md +0 -81
  899. package/docs/wedge/production-validator/first-run-check.sh +0 -42
  900. package/docs/wedge/production-validator/production-validator.md +0 -83
  901. package/docs/wizard.md +0 -173
@@ -1,829 +0,0 @@
1
- ---
2
- stability: beta
3
- keep-beta-until: 2026-08-12
4
- ---
5
-
6
- # AI-Council Config (`.ai-council.yml`)
7
-
8
- **Purpose.** Lock the schema, validation, and precedence rules for the
9
- centralized council config file. Every phase of the AI-Council
10
- consolidation work reads from this file; the contract here is the
11
- boundary that prevents drift across the loader, the CLI, the
12
- orchestrator, and the `.ai-council.yml` file itself.
13
-
14
- **Audience.** Authors of `scripts/ai_council/config.py`, `council_cli.py`,
15
- `scripts/ai_council/orchestrator.py`, and the `.ai-council.yml`
16
- starter. Also reviewers checking that new providers / advisors / debate
17
- features keep the schema intact.
18
-
19
- **Status.** Internal-locked. Changes require a contract version bump and
20
- a revision entry in the consuming roadmap.
21
-
22
- ## File location
23
-
24
- The council is configured **once per user**, not per project. The config
25
- lives in the user-global namespace:
26
-
27
- ```
28
- ~/.event4u/agent-config/settings/.ai-council.yml
29
- ```
30
-
31
- (with the legacy `~/.config/agent-config/settings/.ai-council.yml` read as a
32
- fallback during the v2.4 namespace transition). This is where a single
33
- developer enables members, pins models, and sets caps once — and the
34
- council then works in **every** project they open, with no per-project
35
- file to check in or accidentally commit. See
36
- [ADR-093](../decisions/ADR-093-ai-council-config-user-global.md) and
37
- [ADR-104](../decisions/ADR-104-ai-council-config-global-only.md).
38
-
39
- **The council config is ALWAYS user-global. The project tree is NEVER
40
- searched for it.** `scripts/ai_council/config.ts:resolve_config_path`
41
- resolves the active file with this precedence (first match wins):
42
-
43
- 1. **`$AI_COUNCIL_CONFIG`** — an explicit absolute path. Honoured even
44
- when the target is absent (so a typo surfaces as "create it here"
45
- rather than silently falling back). Primarily for tests / power users.
46
- This is an explicit path, not a project search.
47
- 2. **User-global** `~/.event4u/agent-config/settings/.ai-council.yml` — the
48
- canonical default described above.
49
-
50
- There is **no project-local lookup.** A `<project_root>/agents/settings/.ai-council.yml`
51
- in any project (including this package's own tree) is ignored — the
52
- council never reads it (ADR-104, superseding the project-local override
53
- ADR-093 had kept). The absence of a council file *in a project* therefore
54
- says **nothing** about whether the council is configured; only the
55
- user-global file (or the `$AI_COUNCIL_CONFIG` override) decides that.
56
-
57
- When neither exists, the loader reports the user-global path as the place
58
- to create it. `agents/templates/.ai-council.yml.example` ships the
59
- documented shape to copy from. The legacy `ai_council.*` block under
60
- `.agent-settings.yml` remains removed (Phase 0 Step 5); a one-line
61
- breadcrumb there points at this contract.
62
-
63
- > **Why user-global, not project-tracked.** A council config checked into
64
- > the project tree (the pre-ADR-093 layout) (a) re-applied per-project
65
- > instead of per-developer, (b) risked being committed to a public repo,
66
- > and (c) was silently *not found* on cloud / headless / fresh-checkout
67
- > surfaces with no project copy — the council then refused with
68
- > "ai_council.enabled is false" even though the user had set it up. The
69
- > user-global location fixes all three.
70
-
71
- ## Top-level schema
72
-
73
- ```yaml
74
- enabled: <bool> # master switch, required
75
- defaults: # per-invocation defaults, required
76
- mode: <"api" | "manual" | "cli">
77
- min_rounds: <int >= 1>
78
- deep_min_rounds: <int >= min_rounds>
79
- max_output_tokens: <int >= 0> # 0 widens to provider ceiling
80
- session_retention_days: <int >= 0> # 0 disables pruning
81
- debate_max_rounds: <int >= 2> # reserved by Phase 0, wired in Phase 7
82
- cost_budget: # hard caps per /council invocation, required
83
- max_input_tokens: <int >= 0> # 0 disables this cap
84
- max_output_tokens: <int >= 0> # 0 disables this cap
85
- max_calls: <int >= 0> # 0 disables this cap
86
- max_total_usd: <number >= 0> # 0 disables the USD ceiling — applies to billable transports: all `mode: api`, plus `mode: cli` for xai/perplexity (community CLIs that still consume the API key). Does NOT apply to vendor-official `mode: cli` (anthropic/openai/gemini) or to `mode: manual`
87
- cli_call_budget: # optional; per-day call-count guard for mode: cli members
88
- max_calls_per_day:
89
- <provider>: <int >= 0> # opt-in per provider; default unset = unlimited
90
- warn_at: <float in [0.0, 1.0]> # default 0.8 — pre-run summary line prefixes "⚠️" once used/limit >= warn_at (step-8 D4)
91
- members: # per-provider blocks, at least one enabled
92
- <provider>:
93
- enabled: <bool>
94
- model: <string>
95
- api_key_ref: <string> # required for mode: api; optional for cli/manual
96
- mode: <"api" | "manual" | "cli"> # optional override of defaults.mode
97
- binary: <string> # optional; only valid when effective mode == "cli"
98
- advisors: # Thinking-style replace-mode advisors
99
- <advisor-key>:
100
- enabled: <bool>
101
- member: <provider> # required; references members.<provider>
102
- model: <string> # optional; overrides member.model
103
- persona: <path> # optional; defaults to personas/advisors/<advisor-key>.md
104
- necessity_classifier: # Phase 6 — optional, default enabled+educate
105
- enabled: <bool> # master switch (default true)
106
- mode: <"off" | "educate" | "block" | "warn-only"> # default "educate" (agent invocation)
107
- user_explicit_mode: <"off" | "educate" | "block" | "warn-only"> # default "warn-only" — step-8 D2; applies when invocation=user_explicit
108
- decision_replay: # Phase 9 — optional, default enabled+full
109
- enabled: <bool> # master switch (default true)
110
- include_member_arguments: <bool> # default true; false = redacted view
111
- lens_overrides: # Phase 6 — optional, per-lens nudges
112
- necessity_classifier_mode:
113
- <lens>: <"off" | "educate" | "block">
114
- lenses: # Phase 9 — optional, per-lens overrides
115
- <lens>:
116
- decision_replay:
117
- enabled: <bool>
118
- include_member_arguments: <bool>
119
- ```
120
-
121
- Supported `<provider>` keys: `anthropic`, `openai`, `gemini`, `xai`,
122
- `perplexity`. Unknown providers fail validation closed.
123
-
124
- ### Transport modes
125
-
126
- Three first-class transports on the `mode:` axis. Resolution per member:
127
- `per-member mode > defaults.mode > "api"`.
128
-
129
- | Mode | Semantics | Billable | Auth | Cost gate |
130
- |---|---|---|---|---|
131
- | `manual` | Copy & paste — the human transports prompt + reply between the agent and an external chat surface. | No | None — human-in-the-loop | n/a |
132
- | `api` | SDK call against a stored key, per-token billing on the provider's API. | Yes | `api_key_ref` (env or 0600 file) | `cost_budget` (full) |
133
- | `cli` | Shell out to a locally-installed provider CLI. For `anthropic` / `openai` / `gemini` this runs under the user's subscription auth and is `billable=False`. For `xai` / `perplexity` (community wrappers) the CLI consumes the same API key as `mode: api` and remains `billable=True`. | Mixed — see below | CLI-managed OAuth (vendor) or API key in CLI env (community) | Vendor: `cli_call_budget.max_calls_per_day` only · Community: full `cost_budget` |
134
-
135
- Implications:
136
-
137
- - **`cost_budget.max_total_usd` applies to `mode: cli` for `xai` and
138
- `perplexity`.** Their CLIs (`grok`, `perplexity`) are community-built
139
- wrappers around the same paid API — `mode: cli` is an ergonomic
140
- shortcut, NOT a billing change. The orchestrator still runs the
141
- pre-call USD estimate and the budget gate for these two providers.
142
- - **`cost_budget.max_total_usd` does NOT apply to `mode: cli` for the
143
- vendor-official CLIs (`anthropic`, `openai`, `gemini`) or to
144
- `mode: manual`.** All four are `billable=False`; the USD ceiling is
145
- a token-billing concept they don't participate in.
146
- - **`api_key_ref` is required for enabled members whose effective mode
147
- is `api`, AND for `xai` / `perplexity` even in `mode: cli`** — the
148
- community CLI reads the key from its own env, but the agent still
149
- surfaces missing-key as a validation error before the call. The
150
- vendor-official CLIs (`anthropic`, `openai`, `gemini`) authenticate
151
- via their own login flow and need no `api_key_ref` in `mode: cli`;
152
- manual members have no key at all.
153
- - **`binary:` is only valid when the effective mode is `cli`.** Setting it
154
- on an `api` or `manual` member is a hard validation error — no silent
155
- ignore, no clutter.
156
- - **Subscription quotas:** Claude Pro 5h usage windows, ChatGPT Plus
157
- message caps, Gemini free-tier per-day limits all live outside this
158
- loader's view. `cli_call_budget.max_calls_per_day.<provider>` lets the
159
- user opt into a per-day cap; counter state persists at
160
- `~/.event4u/agent-config/cli-calls.json` with daily UTC reset (wired in
161
- Phase 1 of the CLI-transport roadmap).
162
- - **Omitting `model:` for a vendor `cli` member is a PIN, not "latest".**
163
- Each vendor CLI client (`anthropic` / `openai` / `gemini`) falls back to a
164
- dedicated `DEFAULT_*_CLI_MODEL` constant when `model` is unset
165
- (`clients.ts`); `xai` / `perplexity` CLIs are community API wrappers and
166
- reuse their `DEFAULT_*_MODEL` API constant. The value is a deliberate pin;
167
- the vendor CLI's own default may be newer. Bump the constant intentionally —
168
- never assume the omitted default tracks the provider's latest release. The
169
- CLI constants are separate from the API ones because the two can legitimately
170
- diverge — `openai` API `gpt-4o` vs CLI `gpt-5` is the proof.
171
- - **Quota observability (step-8 D1, D4):** every `council run` /
172
- `council debate` prints a one-line `council:quota · <provider>
173
- used/limit · …` summary before the first member fires. Only
174
- providers with a configured `max_calls_per_day` cap appear; uncapped
175
- providers are omitted (no false sense of metering). When
176
- `used / max_calls_per_day >= cli_call_budget.warn_at` (default
177
- `0.8`) the line is prefixed `⚠️` and lists the providers near the
178
- limit on the next line. The standalone `agent-config council
179
- quota` subcommand dumps the same state plus the configured caps,
180
- and `--reset <provider> --confirm` clears today's counter for that
181
- provider.
182
-
183
- ### Persistent events log (step-8 D3)
184
-
185
- The orchestrator appends one JSON line to `agents/runtime/council/events.log`
186
- on every necessity-gate decision (`proceed` / `skip_necessity`) and on
187
- every `cli_call_budget` block (`block_quota`). The log is gitignored
188
- by default — it is a local-only audit trail, never part of the
189
- repository contract.
190
-
191
- Schema v1:
192
-
193
- ```json
194
- {
195
- "schema_version": 1,
196
- "ts_utc": "2026-05-15T03:38:45Z",
197
- "lens": "analysis",
198
- "invocation": "user_explicit",
199
- "action": "proceed",
200
- "verdict": "necessary",
201
- "provider_caps": {"anthropic": {"mode": "cli", "model": "sonnet-4"}},
202
- "original_ask_hash": "abc123def456"
203
- }
204
- ```
205
-
206
- - `action` ∈ `proceed | skip_necessity | block_quota`.
207
- - `original_ask_hash` is `sha256(original_ask)[:12]`. The raw prompt
208
- is **never** written — privacy floor per
209
- [`agents/decisions/low-impact-decisions.md`](../../agents/decisions/low-impact-decisions.md).
210
- - Diagnostic fields outside the reserved set (`category`, `mode`,
211
- `cli_calls_used`, …) pass through verbatim. Consumers MUST treat
212
- unknown keys as forward-compatible.
213
- - `AGENT_CONFIG_NO_EVENTS_LOG=1` (step-8 D5) disables every write
214
- in-process — useful for ephemeral worktrees, CI runners that
215
- shouldn't accumulate state, or sandbox testing.
216
-
217
- ### Advisor block (Phase 6, replace-mode)
218
-
219
- Five built-in advisor keys ship under
220
- [`.agent-src.uncondensed/personas/advisors/`](../../.agent-src.uncondensed/personas/advisors/):
221
- `contrarian`, `first-principles`, `expansionist`, `outsider`,
222
- `executor`. Each entry binds one advisor to one enabled provider. When
223
- `enabled: true`, the orchestrator REPLACES that provider's plain-member
224
- call with the advisor-persona call — the run keeps the same total call
225
- count as a plain run.
226
-
227
- - `member` is required and must name a known provider. The validator
228
- rejects an enabled advisor whose `member` is missing from the
229
- `members` block, OR exists but has `enabled: false` — silent skips
230
- on the spend path are not allowed.
231
- - `model` is optional. When omitted, the advisor inherits its bound
232
- member's `model`. When set, it overrides for that advisor call only.
233
- - `persona` is optional. When omitted, the loader resolves the file at
234
- `personas/advisors/<advisor-key>.md` relative to the package root.
235
-
236
- ### Advisor persona labels in peer-review (preserve-persona)
237
-
238
- Phase 5 peer-review anonymisation strips provider/model identity per
239
- the Iron Law of Neutrality. On an advisor-mode run, the anonymisation
240
- step preserves the **advisor persona label** as signal — peer-review
241
- output renders as `Response A (Contrarian)`, never
242
- `Response A (Anthropic Opus)`. Plain runs strip identity entirely.
243
- Hard-coded behaviour — no flag, no opt-out.
244
-
245
- ### Necessity classifier (Phase 6, pre-flight gate)
246
-
247
- A heuristic pre-flight that decides whether the request actually
248
- warrants a full council deliberation. Three verdicts (`necessary`,
249
- `borderline`, `unnecessary`) drive three exit paths in the dispatcher
250
- (skip silently, educate + block, or proceed). Implemented in
251
- [`scripts/ai_council/necessity.py`](../../src/scripts/ai_council/necessity.py);
252
- wired into `council_cli.cmd_run` and `cmd_debate` before any member
253
- is invoked.
254
-
255
- **Configuration.**
256
-
257
- - `necessity_classifier.enabled` (bool, default `true`) — master switch.
258
- `false` short-circuits the gate entirely; legacy "always run" behaviour
259
- is restored.
260
- - `necessity_classifier.mode` (`"off" | "educate" | "block" | "warn-only"`,
261
- default `"educate"`). Governs the **agent** invocation tier.
262
- - `off` — gate disabled while keeping the classifier module loaded
263
- (cheap toggle for experiments).
264
- - `educate` — agent-initiated invocation + `unnecessary` verdict skips
265
- silently with `skipped_reason: necessity_unnecessary` in
266
- `session.md`. User-explicit invocation + `unnecessary` prints a
267
- one-paragraph rationale and exits non-zero; `--proceed-anyway`
268
- overrides on this single call.
269
- - `block` — same as `educate` for `necessary` / `borderline`, but
270
- `unnecessary` is rejected regardless of invocation source. Even
271
- `--proceed-anyway` is ignored (power-user opt-in for cost-strict
272
- environments).
273
- - `warn-only` (step-8 D2) — annotate the verdict on stdout but
274
- **never** skip. Useful when the user wants observability without
275
- losing council coverage.
276
- - `necessity_classifier.user_explicit_mode` (same enum, default
277
- `"warn-only"`, step-8 D2) — governs the **user_explicit** invocation
278
- tier. The two-tier split reconciles "Council always active when
279
- enabled" with "skip trivial agent-side requests": user-typed
280
- `/council` calls proceed by default, agent-initiated dispatches keep
281
- `educate` behaviour. Override via the resolved `.ai-council.yml`.
282
- - `lens_overrides.necessity_classifier_mode.<lens>` — per-lens override.
283
- Wins over the global `mode` for the matching invocation tier (agent
284
- vs user_explicit follow the same lens map). Typical use: leave the
285
- global at `educate` and force `debate` lens to `block` because
286
- debate is the most expensive transport.
287
-
288
- **Invocation context (CLI flags).**
289
-
290
- - `--invocation {agent,user_explicit}` — defaults to `user_explicit`.
291
- Agent orchestration MUST set `--invocation agent` so silent skips are
292
- available; user-typed `/council` keeps the default.
293
- - `--proceed-anyway` — one-shot override of the `educate` block. Does
294
- NOT lift `block` mode.
295
-
296
- **Classifier shape.**
297
-
298
- Word-boundary regex matches against four `necessary` buckets
299
- (architecture / tradeoff / ambiguity / strategic) and four
300
- `unnecessary` buckets (bugfix / syntax / single_file / lookup).
301
- Decision table:
302
-
303
- | Necessary hits | Unnecessary hits | Lens strict? | Verdict |
304
- |---|---|---|---|
305
- | `> unnecessary` | any | n/a | `necessary` |
306
- | `>= 1` | `== 0` | n/a | `necessary` |
307
- | `== 0` | `>= 1` | n/a | `unnecessary` |
308
- | equal `>= 1` each | both `>= 1` | n/a | `borderline` |
309
- | `== 0` | `== 0` | yes (`debate`) | `unnecessary` |
310
- | `== 0` | `== 0` | no | `borderline` |
311
-
312
- Trigger word lists live in
313
- [`scripts/ai_council/necessity.py`](../../src/scripts/ai_council/necessity.py)
314
- as `NECESSARY_TRIGGERS` and `UNNECESSARY_TRIGGERS` — extend there with
315
- a unit test; never edit downstream copies.
316
-
317
- ### Decision-replay artefact (Phase 9, audit trail)
318
-
319
- Per-session `decision-replay.md` written next to `responses.json` whenever
320
- the consensus round runs. Pure projection of consensus data plus the
321
- final-round per-member texts — no extra model calls. The artefact
322
- surfaces, per top finding, the verdict band (Strong/Moderate/Weak), the
323
- evidence-quality bucket (H/M/L), the agree/dissent member split, and one
324
- key argument per member. Implementation:
325
- [`scripts/ai_council/replay.py`](../../src/scripts/ai_council/replay.py).
326
-
327
- **Configuration.**
328
-
329
- - `decision_replay.enabled` (bool, default `true`) — master switch.
330
- `false` skips the artefact for every lens.
331
- - `decision_replay.include_member_arguments` (bool, default `true`) —
332
- when `false`, the artefact emits the redacted view: verdict +
333
- evidence-quality + counts only, no per-member arguments. Use for
334
- surfaces where attributing reasoning to a specific model would leak
335
- vendor preference signal.
336
- - `lenses.<lens>.decision_replay.enabled` / `include_member_arguments`
337
- — per-lens overrides that beat the global block. Typical use: keep
338
- the audit trail on for `analysis` and turn it off for `default` /
339
- `prompt` where consensus rarely runs.
340
-
341
- **CLI.**
342
-
343
- - Written automatically by `council run` when consensus scoring fires.
344
- - `council replay <responses.json>` re-renders the artefact from a saved
345
- session. `--output <path>` writes to a file (otherwise stdout);
346
- `--redact-member-arguments` / `--include-member-arguments` toggle the
347
- redacted view independent of config.
348
-
349
- **Decision-replay schema.** The markdown body follows a fixed shape so
350
- downstream tooling can scrape it:
351
-
352
- ```
353
- # Decision Replay
354
-
355
- > <original-ask truncated to 400 chars>
356
-
357
- ## <finding-id> — <finding-text truncated to 120 chars>
358
-
359
- - **Consensus**: Strong|Moderate|Weak (<strength 0.00–1.00>)
360
- - **Evidence quality**: H|M|L (mean <X>/10)
361
- - **Agreement**: <concur>/<total> members concur, <dissent> dissent
362
-
363
- **Agreeing members**: # full mode only
364
- - _<provider:model>_ — <argument truncated to 200 chars>
365
-
366
- **Dissenting members**: # full mode only
367
- - _<provider:model>_ — <argument truncated to 200 chars>
368
-
369
- **Synthesis verdict**: <band> consensus — <source> sourced.
370
-
371
- ---
372
-
373
- _artefact mode: full|redacted (counts only)_
374
- ```
375
-
376
- Findings are ranked by `consensus_strength` descending. Empty sessions
377
- emit the heading plus `*No findings were extracted for this session.*`.
378
- The trailer additionally carries two aggregate lines — **Evidence spread**
379
- (high/medium/low counts across findings) and **Provider spread** (distinct
380
- providers that deliberated) — folded in beside `_artefact mode:_`.
381
-
382
- ### Stance tally (Phase 1 — option-level verdict)
383
-
384
- `consensus_scoring` scores *findings*; `stance_tally` produces an
385
- *option-level* verdict for "A or B?" questions. **Default-off**; with the
386
- block absent the council path is byte-identical to today.
387
-
388
- **Configuration.**
389
-
390
- - `stance_tally.enabled` (bool, default `false`) — master switch. A
391
- non-bool value is rejected at config load (`CouncilConfigError`); unknown
392
- values are not silently coerced.
393
-
394
- **Behaviour when enabled.** The final round appends a mandatory closing-line
395
- contract — `STANCE: <label> | CONFIDENCE: high|med|low | DEALBREAKER: yes|no`
396
- — parsed deterministically (`stance_tally.ts`), never inferred from prose.
397
- Weights are confidence factors (`high 1.0 / med 0.75 / low 0.5`); `W_total`
398
- sums base weights over every member with a parseable stance (abstentions
399
- included, so they raise the bar). Consensus requires an option to clear
400
- `⅔ × W_total`; below threshold a structured **split** is returned to the
401
- user — never a forced winner, never an auto-added round. The synthesis gains
402
- a **Vote Tally** section (one line per option, the threshold, and a
403
- cleared-or-escalated line). The final-round wiring is LIVE (2026-07-12): `consult` appends the contract to
404
- the final round and `render` emits the Vote Tally block, threaded via
405
- `payload.stance_tally`. A member whose stance line is missing or unparseable is
406
- a repair-marker; the bounded stance-line-only repair CALL (policy: `repair_action`
407
- — confirm-interactive / auto-fire under `--auto-continue`) and its estimate row
408
- are the remaining dispatch wiring.
409
-
410
- ### Chairman synthesis (Phase 2 — opt-in)
411
-
412
- The skill's own Iron Law argues the host, having framed the artefact, cannot
413
- independently judge it. `chairman` lets a **non-deliberating member** author the
414
- synthesis instead. **Default `host`** = today's behaviour, byte-identical.
415
-
416
- **Configuration.**
417
-
418
- - `chairman.mode` (enum `host` | `member` | `auto`, default `host`) — an unknown
419
- value is rejected at config load.
420
- - `chairman.member` (string, required when `mode: member`) — must name a member
421
- that exists AND is enabled; **fails closed** at load otherwise.
422
- - `members.<name>.tier` (int ≥ 1, optional) — capability rank used only as the
423
- `auto` tie-break (higher = stronger); non-integer / < 1 rejected at load.
424
-
425
- **Selection** (`chairman.ts` `select_chairman`, pure): `host` → host synthesis;
426
- `member` → the named member, but only if it did **not** deliberate this session
427
- (a member that argued cannot self-judge — else host fallback with a visible
428
- annotation); `auto` → **provider-family difference primary, tier tie-break,
429
- config-order final** — decided by the contested-design council pass
430
- (claude-sonnet-4-5 + gpt-4o, 2-round debate, 2026-07-12): independence from the
431
- deliberators' priors is the binding constraint for a judge, so `auto` picks a
432
- non-deliberating member (provider-different by construction under the
433
- one-member-per-provider invariant); among candidates the optional
434
- `members.<name>.tier` wins, else the deterministic config order; no
435
- non-deliberating member → annotated host fallback. The billable chairman
436
- dispatch (rendering the synthesis as one member call in `cmd_run`) is the
437
- remaining wiring step.
438
-
439
- ### Debate enforcement gates (Phase 3 — opt-in)
440
-
441
- - `debate_gates.enabled` (bool, default `false`) — when on, round-2+ debate
442
- prompts carry the **anti-conformity directive** (`prompts.ANTI_CONFORMITY_DIRECTIVE`:
443
- defend a position; change only on a specific named flaw; agreement without a
444
- named reason is conformity). Byte-identical across api/cli/manual (it is part of
445
- the shared `user_prompt`). Default-off keeps the debate path byte-identical.
446
- - `restate.enabled` (bool, default `false`) — or the `--restate` debate flag:
447
- a pre-round-1 pass collecting a ≤ 50-word restatement + one alternative
448
- framing per member (billable, through the same spend gate), rendered above
449
- the round-1 responses; a restatement with little token overlap vs the stated
450
- ask is flagged before further spend.
451
-
452
- The deterministic post-round detectors — dissent-quota (`debate_gates.dissent_quota_met`)
453
- and the novelty gate (`debate_gates.is_near_duplicate`, reusing the shared
454
- Jaccard util) — are implemented and tested as pure functions.
455
-
456
- **Repair-call policy** (`debate_gates.repair_action`) — decided by the
457
- contested-design council pass (claude-sonnet-4-5 + gpt-4o, 2026-07-12): a cost
458
- estimate is an upper bound, not a spend commitment, and repairs are failure-mode
459
- responses — so **interactive runs get a one-line confirm** before each repair
460
- call; **unattended runs (`--auto-continue`) auto-fire** under the hard cap
461
- (≤ 1 repair per member per round, absolute — an already-repaired member is
462
- skipped in every mode); manual-transport members follow the same policy. The repair dispatch is LIVE in `run_debate` (2026-07-12): post-round checks on
463
- round 2+, ≤ 1 repair per member per round, dispatched via the CLI's
464
- `_make_repair_confirm` transport (auto-fire under `--auto-continue`, one-line
465
- confirm interactive); a successful repair replaces the member's round entry.
466
-
467
- ### Decision resolution by impact (Phase 10, ask-user routing)
468
-
469
- Five-class impact classifier triages every pending agent question
470
- before it surfaces. Heuristic, shape-based, keyword-driven — no LLM
471
- call, fully explainable. Lives in `scripts/ai_council/necessity.py`
472
- (`classify_impact`, `route_decision`).
473
-
474
- | Class | Trigger shape | Default mode |
475
- |---|---|---|
476
- | `trivial` | naming, whitespace, comments, typo, indent | `agent` |
477
- | `low_impact` | local idioms, DTO vs value object, test extensions | `agent` |
478
- | `medium_impact` | API shape, contract change, breaking change, module boundary | `council` |
479
- | `high_impact` | security, auth, tenant boundary, migration, billing, secrets, PII | `user` (**LOCKED**) |
480
- | `user_required` | user-fence markers — "ask me", "review first", "plan only" | `user` (**LOCKED**) |
481
-
482
- **Iron Law** — `high_impact` and `user_required` ALWAYS route to the
483
- user. The schema loader rejects any `decision_resolution.classes.<cls>.mode`
484
- that maps either class to `agent` or `council`. No override path, no
485
- config flag, no autonomy setting can lift this lock.
486
-
487
- **Confidence gate** — each entry carries a `confidence_threshold`
488
- (default `0.6`). When the classifier's confidence is below the
489
- threshold, the configured mode is upgraded one rung
490
- (`agent` → `council` → `user`) so low-certainty calls escalate rather
491
- than silently auto-resolve.
492
-
493
- ```yaml
494
- decision_resolution:
495
- enabled: true
496
- classes:
497
- trivial:
498
- mode: agent
499
- confidence_threshold: 0.6
500
- low_impact:
501
- mode: agent
502
- confidence_threshold: 0.6
503
- medium_impact:
504
- mode: council
505
- confidence_threshold: 0.6
506
- high_impact:
507
- mode: user # LOCKED — Iron Law
508
- confidence_threshold: 0.6
509
- user_required:
510
- mode: user # LOCKED — Iron Law
511
- confidence_threshold: 0.6
512
- ```
513
-
514
- ### Low-impact council opt-in
515
-
516
- The default route for `low_impact` is `agent` — the host resolves locally
517
- and the council is not invoked. Sending `low_impact` to the council is
518
- an **explicit, two-knob opt-in**; missing either knob keeps the question
519
- on the host:
520
-
521
- 1. `decision_resolution.classes.low_impact.mode: council` (default
522
- `agent`) — flips the class route.
523
- 2. **At least one** enabled member sets `participate_low_impact: true`
524
- (default `false`) — names which members run on the fast-path.
525
-
526
- When both knobs are set, the lightweight-QA fast-path
527
- (`ai_council.fast_path`) handles the resolution under hard caps:
528
- `max_members ∈ {1, 2}`, `max_rounds: 1` (LOCKED — Iron Law of the
529
- fast-path; the loader rejects any other value), `max_tokens: 2500`
530
- combined input + output budget, `max_cost_usd: 0.05` per resolution.
531
- No advisors, no peer-review, no consensus scoring run on this path.
532
-
533
- `high_impact` and `user_required` cannot reach the fast-path at all —
534
- the impact-class Iron Law above takes precedence.
535
-
536
- Worked example — opt the Anthropic and OpenAI members in, leave the
537
- others off, and switch the `low_impact` class to `council`:
538
-
539
- ```yaml
540
- # In the resolved .ai-council.yml — keys are top-level (no `ai_council:` wrapper).
541
- members:
542
- anthropic:
543
- enabled: true
544
- model: claude-sonnet-4-5
545
- api_key_ref: file:anthropic.key
546
- participate_low_impact: true # eligible for fast-path
547
- openai:
548
- enabled: true
549
- model: gpt-4o
550
- api_key_ref: file:openai.key
551
- participate_low_impact: true # eligible for fast-path
552
- gemini:
553
- enabled: false # disabled — opt-in ignored even if set
554
-
555
- fast_path:
556
- max_members: 2 # 1 or 2 only
557
- max_rounds: 1 # LOCKED
558
- max_tokens: 2500
559
- max_cost_usd: 0.05
560
-
561
- decision_resolution:
562
- classes:
563
- low_impact:
564
- mode: council # ← flip from default `agent`
565
- confidence_threshold: 0.6
566
- ```
567
-
568
- Validation behaviour:
569
-
570
- - `participate_low_impact: true` on a member with `enabled: false`,
571
- or with the global council disabled, parses but is treated as
572
- `false` with a one-line loader warning — never silently runs.
573
- - `fast_path.max_rounds != 1` → `CouncilConfigError` at load time.
574
- - `fast_path.max_members ∉ {1, 2}` → `CouncilConfigError`.
575
- - `low_impact.mode: council` with zero opted-in enabled members →
576
- the resolver falls back to `agent` (or escalates to user when the
577
- confidence gate trips), with the marker
578
- `> Low-impact council unavailable (no opted-in members) — escalating to user`.
579
-
580
- Transparency markers on every fast-path attempt:
581
-
582
- - **Resolved** — `> Resolved via low-impact council (<member>): <answer>`
583
- - **Split** — `> Low-impact council split — escalating to user (<m1>: X / <m2>: Y):`
584
- - **Aborted** — `> Low-impact council aborted (token cap) — escalating to user:`
585
-
586
- The marker is mandatory; the agent never silently substitutes a
587
- fast-path verdict for its own answer. See
588
- [`ai-council § Lightweight-QA fast-path`](../../.agent-src.uncondensed/skills/ai-council/SKILL.md#lightweight-qa-fast-path-phase-11)
589
- for the orchestration contract and session-artefact format.
590
-
591
- ### Solo-member dispatch (step-9 P8/P9 · U1 · U2 · U3)
592
-
593
- Three new top-level settings cooperate to make low-impact decisions
594
- optionally cheap by routing them to a single member instead of the
595
- full council. Defaults preserve the prior shape — no behaviour
596
- changes unless every knob is set explicitly.
597
-
598
- | Key | Type | Default | Constraint |
599
- |---|---|---|---|
600
- | `defaults.member_mode` | `cli` \| `api` | `cli` | Per-member fallback when a member doesn't set `mode`. `manual` is rejected here (manual transport is full-council only). |
601
- | `routing.solo_member_fallback_chain` | `list[str]` | `[]` | Ordered, unique provider names. Each entry must exist in the `members` block. Empty disables solo dispatch. |
602
- | `routing.auth_check_timeout_seconds` | `int` | `3` | Range `[1, 30]`. Bounds the lazy auth probe per chain member. |
603
- | `low_impact.dispatch` | `full` \| `single` | `full` | `single` requires at least one enabled member in the fallback chain — otherwise rejected at load. |
604
- | `low_impact.shadow_sample_rate` | `float` | `0.1` | Range `[0.0, 1.0]`. Phase 10 shadow-mode sampling probability. |
605
- | `low_impact.solo_confidence_floor` | `float` | `0.7` | Range `[0.0, 1.0]`. Phase 13 confidence-gate threshold. Solo responses scoring below this floor — or matching split / refusal patterns — auto-escalate to the full council. |
606
-
607
- **Iron Law (LOCKED).** `decision_resolution.classes.high_impact.dispatch`
608
- and `decision_resolution.classes.user_required.dispatch` are rejected
609
- at load time — high-impact and user-required decisions always run the
610
- full council, with no opt-out. Top-level `high_impact: { dispatch: … }`,
611
- `high_impact: { solo_confidence_floor: … }`, `user_required: { dispatch: … }`,
612
- and `user_required: { solo_confidence_floor: … }` are all rejected the
613
- same way so a mistaken surface choice cannot bypass the lock — these
614
- classes never run solo, so a solo-specific knob there is incoherent.
615
-
616
- ```yaml
617
- defaults:
618
- mode: api
619
- member_mode: cli # use CLI binaries by default for per-member calls
620
-
621
- routing:
622
- solo_member_fallback_chain: [anthropic, openai] # try anthropic first
623
- auth_check_timeout_seconds: 3
624
-
625
- low_impact:
626
- dispatch: single # route low_impact via solo dispatch
627
- shadow_sample_rate: 0.1 # 10% shadow to full council for SLO tracking
628
- solo_confidence_floor: 0.7 # auto-escalate if confidence < 0.7
629
- ```
630
-
631
- ### Confidence gate — auto-escalation on uncertain solo runs
632
-
633
- When `low_impact.dispatch: single` is enabled, every solo response is
634
- scored before the verdict is returned. Four escalation reasons can
635
- trigger an automatic fallback to the full council, in priority order:
636
-
637
- | Reason | Trigger | Source |
638
- |---|---|---|
639
- | `refusal` | Empty response or refusal markers (`I cannot decide`, `weiß ich nicht`, …). | `confidence_gate.is_refusal` |
640
- | `split` | Two competing verdicts without a pick (`Option A … Option B`, `Verdict: ship / Verdict: hold`, `Variante 1 / Variante 2`). | `confidence_gate.is_split_response` |
641
- | `short_response` | Response shorter than ~20 chars — treated as low-signal. | `confidence_gate.extract_confidence` length floor |
642
- | `low_confidence` | Explicit `Confidence: 0.X` marker below the floor, or hedge-word density (`maybe`, `perhaps`, `not sure`, `vielleicht`) pulling the implicit score below the floor. | `confidence_gate.extract_confidence` |
643
-
644
- Escalations are recorded in the shadow-mode log alongside the
645
- disagreement signal — see the `escalated` and `escalation_reason`
646
- fields in the `shadow.jsonl` row contract. The shadow SLO banner
647
- appends a separate auto-escalation rate so a quiet uptick in solo
648
- uncertainty cannot hide behind a flat disagreement rate.
649
-
650
- The escalation path uses zero extra LLM calls — heuristics run on the
651
- solo response text in process. The fallback `run_full()` only fires
652
- when the gate flags the response.
653
-
654
- ### Low-impact corpus build pipeline (step-10)
655
-
656
- [`agents/decisions/low-impact-decisions.md`](../../agents/decisions/low-impact-decisions.md)
657
- remains the **human-editable source of truth** — Validated, Probation,
658
- and Anti-Example phrases stay in Markdown so PR-reviewers diff prose,
659
- not YAML. A build step compiles it into a generated YAML lockfile
660
- [`agents/decisions/low-impact-decisions.lock.yaml`](../../agents/decisions/low-impact-decisions.lock.yaml)
661
- that is the **runtime source of truth**: the necessity classifier and
662
- the solo-dispatch fuzzy matcher load phrases from the lockfile, with
663
- Markdown parsing reserved as fallback.
664
-
665
- | Component | File | Role |
666
- |---|---|---|
667
- | Source | `agents/decisions/low-impact-decisions.md` | Hand-edited Markdown. Strict parser (step-9 P4) catches drift. |
668
- | Build tool | `scripts/ai_council/compile_corpus.py` | `parse_corpus_strict()` → schema-v1 YAML. Deterministic output. |
669
- | Lockfile | `agents/decisions/low-impact-decisions.lock.yaml` | Generated, **committed**. Schema `{schema_version: 1, provenance: {…}, validated, probation, anti_examples}`. |
670
- | Runtime loader | `low_impact_corpus.load_corpus_lock()` + lenient `load_*` shims | YAML preferred; Markdown fallback when the lockfile is missing or schema-mismatched. |
671
- | CI gate | `task check-corpus` (used by `task consistency`) | Fails on drift between source and lockfile. |
672
-
673
- The committed lockfile is the contract: a stale lockfile fails CI the
674
- same way `dist/agent-src/` drift does. The Markdown parser stays in the
675
- repo as a build-time dependency, not a runtime dependency — a parser
676
- regression breaks `task consistency`, never the live council.
677
-
678
- `scripts/ai_council/learn_low_impact_preview.py` deliberately stays on
679
- `parse_corpus_strict` (Markdown). It runs **before** `task sync`
680
- rebuilds the lockfile, so it must read whatever the user just edited.
681
-
682
- ## `model_downgrade` — auto-tiering + the A1↔A3 cache coupling
683
-
684
- Since the A3 slice of `road-to-api-cost-optimization` (2026-07-20):
685
-
686
- ```yaml
687
- model_downgrade:
688
- enabled: true # default; false disables the size-fit gate entirely
689
- auto_apply: true # DEFAULT since A3 — auto-downgrade is opt-OUT
690
- model_tier_override: # per-run escape hatch: member -> pinned model id
691
- anthropic: claude-sonnet-4-5
692
- ```
693
-
694
- - Small / low-complexity artefacts (per `necessity.classify_size_fit`,
695
- character-based) auto-downgrade one ladder rung; the `debate` lens never
696
- downgrades.
697
- - **Cache coupling:** a downgrade is applied only when the model saving beats
698
- the forfeited model-scoped prompt-cache reads
699
- (`pricing.downgrade_coupling`: `downgrade_savings > lost_cache_savings`,
700
- expected reads = rounds − 1). One-shot paths (the low-impact fast-path)
701
- have no reads to lose and downgrade to the CHEAPEST ladder rung outright.
702
- - `model_tier_override` pins a member to a model for the run — classifier and
703
- coupling both skipped. Set it per artefact when a specific tier is needed.
704
- - Requires `model_ladder` on the member (smallest → largest, must include the
705
- active `model`).
706
-
707
- ## `api_key_ref` forms
708
-
709
- Exactly two forms. Raw keys in the yml are a hard validation error.
710
-
711
- - `file:<path>` — read from a 0600 file. Relative paths resolve under
712
- `~/.event4u/agent-config/`; absolute paths are honored as
713
- written. The legacy `~/.config/agent-config/` location is still read
714
- as a fallback by `scripts/_lib/user_global_paths.py`.
715
- - `env:<VAR>` — read from the named environment variable at load time.
716
- Missing or empty env var is a `KeyGateError`.
717
-
718
- ## Precedence
719
-
720
- Resolution order for every member-level setting (mode, model, key):
721
-
722
- ```
723
- invocation flag > per-member field > defaults block > built-in fallback
724
- ```
725
-
726
- Same shape applies to round counts (`--rounds N` > `defaults.min_rounds`,
727
- plus the `deep_min_rounds` floor when `--depth deep` or a consuming
728
- artefact's `council_depth: deep` frontmatter fires).
729
-
730
- ## Normative behaviour — migrated verbatim
731
-
732
- These rules are part of the contract; the consuming YAML reproduces them
733
- as comments and the loader enforces them.
734
-
735
- - **Iron Law of Neutrality.** Council members never see the host agent's
736
- reasoning — only the artefact + a neutral system prompt. Phase 6 Step 3a
737
- preserves advisor persona labels in peer-review but strips provider
738
- identity.
739
- - **Autonomy carve-out — no silent spend.** The `/council` command always
740
- asks before invoking, even under autonomy: on. Cost is real and paid.
741
- - **Manual vs API vs CLI transport.** Three first-class modes on the
742
- `mode:` axis:
743
- - `manual` = copy & paste — the human transports prompt + reply between
744
- the agent and an external chat surface. Free, no key.
745
- - `api` = direct SDK call against a stored key (per-token billing).
746
- - `cli` = shell out to a locally-installed provider CLI under the
747
- user's subscription auth — spend is covered by the flat-rate
748
- subscription, not per-token. `billable=False` so the `cost_budget`
749
- USD ceiling does not apply; subscription quotas are guarded by
750
- `cli_call_budget.max_calls_per_day` instead.
751
-
752
- Precedence: per-invocation flag > per-member override > defaults > `api`.
753
- - **Tokens never stored in this yml.** Keys live in 0600 files
754
- (`~/.event4u/agent-config/<provider>.key`, installed via
755
- `bash scripts/install_<provider>_key.sh` for providers that ship an
756
- installer) or in env vars. Validation rejects any literal-looking key.
757
- - **`max_output_tokens: 0` widening.** Internally widened to the safe
758
- provider ceiling (16384) because Anthropic rejects `max_tokens=0`. The
759
- CLI `--max-tokens` flag overrides this on a single invocation; the
760
- cost estimator uses the same value as its worst-case ceiling.
761
- - **`deep_min_rounds` is monotonic.** Effective rounds =
762
- `max(deep_min_rounds, min_rounds)`. Lowering `deep_min_rounds` below
763
- `min_rounds` has no effect. Standard tasks keep `min_rounds`; cost
764
- rises only when an artefact opts in via `council_depth: deep` in
765
- frontmatter or `--depth deep` on the CLI.
766
- - **Session retention.** `agents/runtime/council/sessions/` audit folders older
767
- than `defaults.session_retention_days` are pruned automatically on the
768
- next `save()`. `0` disables pruning — disk grows unbounded.
769
- - **`cost_budget` semantics.** The orchestrator pauses before any member
770
- whose projected spend would breach a cap and asks the user to continue.
771
- Each `0` value disables that single cap; other caps still apply.
772
- Prices come from [`agents/runtime/.agent-prices.md`](../../agents/runtime/.agent-prices.md)
773
- (gitignored, refreshed weekly by `./scripts-run src/scripts/update_prices`;
774
- bootstrapped from `scripts/ai_council/_default_prices.py` on first run).
775
-
776
- ## Validation rules
777
-
778
- A loader call (`scripts/ai_council/config.py:load_council_config()`)
779
- must reject the file with a clear `KeyGateError` (or equivalent typed
780
- error) when any of these hold:
781
-
782
- 1. Required top-level key missing (`enabled`, `defaults`, `cost_budget`,
783
- `members`).
784
- 2. `members` block has no provider with `enabled: true`.
785
- 3. Unknown provider key under `members` or `advisors`.
786
- 4. `api_key_ref` missing for an enabled member, or in an unknown form
787
- (not `file:` and not `env:`), or pointing at a non-existent file /
788
- missing env var.
789
- 5. A value under `api_key_ref` looks like a raw secret (starts with
790
- `sk-`, `pk-`, `xai-`, or matches a provider's key prefix).
791
- 6. `defaults.deep_min_rounds < defaults.min_rounds` is allowed (clamped
792
- by the monotonic rule at runtime) but logged as a warning.
793
- 7. `defaults.mode` not in `{"api", "manual", "cli"}`; per-member `mode`
794
- override same constraint.
795
- 8. `members.<provider>.binary` set when the member's effective mode is
796
- not `cli` — explicit error to keep config clutter-free.
797
- 9. `cli_call_budget` is not a mapping, or
798
- `cli_call_budget.max_calls_per_day.<key>` is an unknown provider, or
799
- any value is a negative integer / non-integer.
800
- 10. `advisors.<key>.member` missing, unknown, or pointing at a
801
- `members.<provider>` that does not exist or has `enabled: false`
802
- (when the advisor itself is `enabled: true`). Silent skips are not
803
- allowed — a typo never costs the user money on an unintended call
804
- plan.
805
- 11. `advisors.<key>.model` is set but not a string.
806
- 12. `necessity_classifier` is not a mapping, or `enabled` is not a bool,
807
- or `mode` is not one of `{"off", "educate", "block"}`.
808
- 13. `lens_overrides.necessity_classifier_mode` is not a mapping, or any
809
- value is not one of `{"off", "educate", "block"}`. Unknown lens keys
810
- are accepted (forward-compatible) but never silently rewrite the
811
- global default.
812
-
813
- ## Migration footprint (Phase 0)
814
-
815
- > Historical record of the Step-2 consolidation. **The project-local file
816
- > described below is no longer read** — ADR-104 (superseding ADR-093) moved
817
- > the council config to the user-global location documented at the top of
818
- > this contract. A `.ai-council.yml` under any project `agents/` tree is
819
- > ignored. Read this section for provenance only, not for placement.
820
-
821
- - `.agent-settings.yml` → 14-key inventory under `ai_council:` removed
822
- after a one-line breadcrumb comment is in place pointing at this
823
- contract.
824
- - `.agent-settings.template.yml` → same removal.
825
- - New file `agents/settings/.ai-council.yml` checked in with two enabled <!-- council-config-allowed -->
826
- providers (anthropic + openai) and three disabled
827
- (gemini + xai + perplexity). Models pre-filled from the Phase 0
828
- default set; comments mirror this contract. *(This project-tracked file
829
- was later removed; per ADR-104 the config is user-global only.)*