@event4u/agent-config 9.8.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 (817) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +278 -298
  3. package/CONTRIBUTING.md +23 -7
  4. package/MIGRATION.md +20 -0
  5. package/README.md +55 -9
  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/fix/portability.md +2 -2
  12. package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
  13. package/dist/agent-src/commands/fix/refs.md +2 -2
  14. package/dist/agent-src/commands/fix/route.md +4 -3
  15. package/dist/agent-src/commands/fix.md +9 -6
  16. package/dist/agent-src/commands/ghostwriter.md +1 -1
  17. package/dist/agent-src/commands/image.md +1 -1
  18. package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
  19. package/dist/agent-src/commands/optimize/skills.md +2 -2
  20. package/dist/agent-src/commands/post-as.md +1 -1
  21. package/dist/agent-src/commands/research.md +1 -1
  22. package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
  23. package/dist/agent-src/commands/security-audit-config.md +1 -1
  24. package/dist/agent-src/commands/team/delegate.md +4 -0
  25. package/dist/agent-src/commands/video.md +1 -1
  26. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
  27. package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
  28. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
  29. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
  30. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
  31. package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
  32. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
  33. package/dist/agent-src/rules/code-provenance.md +112 -0
  34. package/dist/agent-src/rules/external-code-graph-interop.md +4 -4
  35. package/dist/agent-src/rules/history-discipline.md +80 -0
  36. package/dist/agent-src/rules/no-roadmap-references.md +1 -1
  37. package/dist/agent-src/rules/php-coding.md +1 -0
  38. package/dist/agent-src/rules/reviewer-awareness.md +1 -0
  39. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
  40. package/dist/agent-src/rules/roadmap-progress-sync.md +7 -0
  41. package/dist/agent-src/rules/scale-discipline.md +92 -0
  42. package/dist/agent-src/rules/security-sensitive-stop.md +10 -0
  43. package/dist/agent-src/rules/session-canary.md +77 -0
  44. package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
  45. package/dist/agent-src/rules/tool-safety.md +3 -1
  46. package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
  47. package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
  48. package/dist/agent-src/skills/code-intelligence/SKILL.md +17 -14
  49. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  50. package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
  51. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  52. package/dist/agent-src/skills/design-review/SKILL.md +5 -6
  53. package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
  54. package/dist/agent-src/skills/history-design/SKILL.md +101 -0
  55. package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
  56. package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
  57. package/dist/agent-src/skills/image-editing/SKILL.md +1 -1
  58. package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
  59. package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
  60. package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
  61. package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
  62. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
  63. package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
  64. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
  65. package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
  66. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
  67. package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
  68. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  69. package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
  70. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  71. package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
  72. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
  73. package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
  74. package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
  75. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
  76. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
  77. package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
  78. package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
  79. package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
  80. package/dist/agent-src/skills/secrets-management/SKILL.md +3 -4
  81. package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
  82. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
  83. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
  84. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  85. package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
  86. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
  87. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
  88. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  89. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
  90. package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
  91. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
  92. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
  93. package/dist/agent-src/templates/AGENTS.md +1 -1
  94. package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
  95. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  96. package/dist/agent-src/templates/command.md +3 -3
  97. package/dist/agent-src/templates/persona.md +2 -2
  98. package/dist/agent-src/templates/rule.md +2 -2
  99. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  100. package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
  101. package/dist/cli/commands/doctorShell.js +20 -0
  102. package/dist/cli/commands/doctorShell.js.map +1 -1
  103. package/dist/cli/commands/rtkDetect.js +58 -0
  104. package/dist/cli/commands/rtkDetect.js.map +1 -0
  105. package/dist/cli/firstRunNotice.js +70 -0
  106. package/dist/cli/firstRunNotice.js.map +1 -0
  107. package/dist/cli/main.js +35 -3
  108. package/dist/cli/main.js.map +1 -1
  109. package/dist/cli/registry.js +7 -1
  110. package/dist/cli/registry.js.map +1 -1
  111. package/dist/discovery/deprecation-report.md +1 -1
  112. package/dist/discovery/discovery-manifest.json +362 -78
  113. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  114. package/dist/discovery/discovery-manifest.summary.md +6 -4
  115. package/dist/discovery/orphan-report.md +1 -1
  116. package/dist/discovery/packs.json +90 -8
  117. package/dist/discovery/trust-report.md +11 -11
  118. package/dist/discovery/workspaces.json +31 -7
  119. package/dist/hooks/dispatch.js +19475 -0
  120. package/dist/install/agentSwitchDetection.js +75 -0
  121. package/dist/install/agentSwitchDetection.js.map +1 -0
  122. package/dist/install/agentSwitchProfile.js +117 -0
  123. package/dist/install/agentSwitchProfile.js.map +1 -0
  124. package/dist/install/atomic.js +1 -1
  125. package/dist/install/detect.js +1 -1
  126. package/dist/install/install.mjs +775 -486
  127. package/dist/install/rtkDetection.js +213 -0
  128. package/dist/install/rtkDetection.js.map +1 -0
  129. package/dist/install/rule_scope.js +2 -1
  130. package/dist/install/rule_scope.js.map +1 -1
  131. package/dist/install/types.js +2 -2
  132. package/dist/install/wizard-plan.js +1 -1
  133. package/dist/install/wizardDismissals.js +58 -0
  134. package/dist/install/wizardDismissals.js.map +1 -0
  135. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  136. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  137. package/dist/mcp/registry-manifest.json +15 -4
  138. package/dist/mcp/server.json +20 -0
  139. package/dist/mcp/server.mjs +44292 -0
  140. package/dist/router.json +1 -1
  141. package/dist/scripts/condense.js +14 -7
  142. package/dist/scripts/condense.js.map +1 -1
  143. package/dist/server/app.js +4 -2
  144. package/dist/server/app.js.map +1 -1
  145. package/dist/server/io/sharedWriteCheck.js +101 -0
  146. package/dist/server/io/sharedWriteCheck.js.map +1 -0
  147. package/dist/server/routes/ping.js +14 -0
  148. package/dist/server/routes/ping.js.map +1 -1
  149. package/dist/server/routes/settings.js +21 -4
  150. package/dist/server/routes/settings.js.map +1 -1
  151. package/dist/server/routes/userMd.js +21 -4
  152. package/dist/server/routes/userMd.js.map +1 -1
  153. package/dist/server/routes/wizard.js +68 -25
  154. package/dist/server/routes/wizard.js.map +1 -1
  155. package/dist/server/schemas/settings.js +4 -2
  156. package/dist/server/schemas/settings.js.map +1 -1
  157. package/dist/ui/assets/index-BpSQt5vm.js +40 -0
  158. package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
  159. package/dist/ui/assets/index-jSfMW8_t.css +1 -0
  160. package/dist/ui/index.html +2 -2
  161. package/docs/MIGRATION.md +16 -0
  162. package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
  163. package/package.json +21 -11
  164. package/src/agent-src/templates/AGENTS.md +1 -1
  165. package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
  166. package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
  167. package/src/config/agent-settings.template.yml +52 -14
  168. package/src/config/discovery/packs.yml +22 -0
  169. package/src/config/discovery/workspaces.yml +1 -1
  170. package/src/config/evaluator-budgets.json +47 -0
  171. package/src/config/hook-latency-budget.json +20 -0
  172. package/src/install/agentSwitchDetection.ts +90 -0
  173. package/src/install/agentSwitchProfile.ts +131 -0
  174. package/src/install/atomic.ts +1 -1
  175. package/src/install/detect.ts +1 -1
  176. package/src/install/rtkDetection.ts +274 -0
  177. package/src/install/rule_scope.ts +9 -2
  178. package/src/install/types.ts +2 -2
  179. package/src/install/wizard-plan.ts +1 -1
  180. package/src/install/wizardDismissals.ts +60 -0
  181. package/src/scripts/_cli/cmd_doctor.ts +62 -1
  182. package/src/scripts/_cli/cmd_memory_get.ts +197 -0
  183. package/src/scripts/_cli/cmd_refresh.ts +30 -0
  184. package/src/scripts/_dispatch.bash +81 -0
  185. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
  186. package/src/scripts/_lib/auto_dispatch.ts +76 -0
  187. package/src/scripts/_lib/detect_target_license.ts +714 -0
  188. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +5 -0
  189. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +4 -0
  190. package/src/scripts/_lib/install_drift.ts +194 -0
  191. package/src/scripts/_lib/memory_fts_index.ts +390 -0
  192. package/src/scripts/_lib/orchestration_record.ts +91 -2
  193. package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
  194. package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
  195. package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
  196. package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
  197. package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
  198. package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
  199. package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
  200. package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
  201. package/src/scripts/_lib/persistence/types.ts +109 -0
  202. package/src/scripts/_lib/rtk_allowlist.ts +44 -0
  203. package/src/scripts/_lib/secret_detector.test.ts +5 -0
  204. package/src/scripts/_lib/secret_detector.ts +9 -0
  205. package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
  206. package/src/scripts/_lib/spawn_env.ts +7 -0
  207. package/src/scripts/_lib/sqlite_guard.ts +191 -0
  208. package/src/scripts/_lib/subagent_spawn.ts +53 -0
  209. package/src/scripts/_lib/worker_budget.ts +107 -0
  210. package/src/scripts/ai_council/blind_review.ts +0 -0
  211. package/src/scripts/ai_council/config.ts +12 -6
  212. package/src/scripts/ai_council/orchestrator.ts +73 -3
  213. package/src/scripts/ai_team/review_gate.ts +8 -10
  214. package/src/scripts/ai_team/team_dispatch.ts +48 -0
  215. package/src/scripts/audit_initial_context.ts +1 -1
  216. package/src/scripts/bench_cross_source_eval.ts +400 -0
  217. package/src/scripts/bench_honesty_score.ts +1093 -0
  218. package/src/scripts/bench_hook_latency.ts +218 -0
  219. package/src/scripts/build_mcp_catalog.ts +275 -0
  220. package/src/scripts/build_mcp_registry_manifest.ts +46 -0
  221. package/src/scripts/build_proof.ts +45 -0
  222. package/src/scripts/chat_history.ts +8 -5
  223. package/src/scripts/check_backstop_debt.ts +23 -13
  224. package/src/scripts/check_bundle_path_leakage.ts +343 -0
  225. package/src/scripts/check_evaluator_budgets.ts +99 -0
  226. package/src/scripts/check_knowledge_sharing.ts +12 -1
  227. package/src/scripts/check_no_external_sources.ts +2 -2
  228. package/src/scripts/check_source_pointer_freshness.ts +28 -3
  229. package/src/scripts/code_graph/build.ts +0 -0
  230. package/src/scripts/code_graph/cli.ts +181 -9
  231. package/src/scripts/code_graph/detect.ts +52 -0
  232. package/src/scripts/code_graph/intent.ts +45 -0
  233. package/src/scripts/code_graph/query.ts +143 -29
  234. package/src/scripts/code_graph/sqlite_store.ts +174 -0
  235. package/src/scripts/condense.ts +14 -6
  236. package/src/scripts/context_hygiene_hook.ts +8 -5
  237. package/src/scripts/council_cli.ts +126 -12
  238. package/src/scripts/detect_target_license.ts +203 -0
  239. package/src/scripts/evaluator_umbrella.sh +145 -0
  240. package/src/scripts/external_sources_denylist.json +5 -3
  241. package/src/scripts/first_run_gate_hook.ts +9 -5
  242. package/src/scripts/hermetic-install.sh +3 -3
  243. package/src/scripts/hook_manifest.yaml +55 -16
  244. package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
  245. package/src/scripts/hooks/block_no_verify.ts +9 -9
  246. package/src/scripts/hooks/code_graph_nudge_hook.ts +11 -4
  247. package/src/scripts/hooks/concern_registry.ts +75 -0
  248. package/src/scripts/hooks/design_slop_hook.ts +8 -5
  249. package/src/scripts/hooks/dispatch_entry.ts +37 -0
  250. package/src/scripts/hooks/dispatch_hook.ts +176 -3
  251. package/src/scripts/hooks/hook_stdin.ts +42 -0
  252. package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
  253. package/src/scripts/hot_context_hook.ts +7 -6
  254. package/src/scripts/injection_scan_hook.ts +9 -1
  255. package/src/scripts/install +6 -6
  256. package/src/scripts/install-hooks.sh +4 -4
  257. package/src/scripts/install.sh +5 -4
  258. package/src/scripts/install.ts +264 -23
  259. package/src/scripts/learning_sidecar.ts +0 -0
  260. package/src/scripts/lint_budget_ownership.ts +89 -0
  261. package/src/scripts/lint_command_routing.ts +35 -5
  262. package/src/scripts/lint_command_verbs.ts +42 -9
  263. package/src/scripts/lint_consumer_internal_refs.ts +211 -0
  264. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  265. package/src/scripts/lint_documented_commands.ts +670 -0
  266. package/src/scripts/lint_framework_leakage.ts +17 -3
  267. package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
  268. package/src/scripts/lint_governed_writes.ts +335 -0
  269. package/src/scripts/lint_hidden_unicode.ts +6 -0
  270. package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
  271. package/src/scripts/lint_memory_tripwire.ts +186 -0
  272. package/src/scripts/lint_override_kernel_guard.ts +74 -26
  273. package/src/scripts/lint_persistence.ts +171 -0
  274. package/src/scripts/lint_pre_migration_refs.ts +106 -0
  275. package/src/scripts/lint_provenance.ts +547 -0
  276. package/src/scripts/lint_provenance_vocabulary.ts +437 -0
  277. package/src/scripts/lint_spawn_payload.ts +283 -0
  278. package/src/scripts/lint_store_boundary.ts +152 -0
  279. package/src/scripts/lint_versioned_cache.ts +7 -1
  280. package/src/scripts/mcp_server/__main__.ts +7 -2
  281. package/src/scripts/mcp_server/catalog.ts +23 -1
  282. package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
  283. package/src/scripts/mcp_server/prompts.ts +6 -0
  284. package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
  285. package/src/scripts/mcp_server/tools.ts +56 -5
  286. package/src/scripts/mcp_telemetry_query.ts +2 -33
  287. package/src/scripts/mcp_telemetry_store.ts +64 -34
  288. package/src/scripts/memory_learn_hook.ts +126 -0
  289. package/src/scripts/memory_lookup.ts +0 -0
  290. package/src/scripts/memory_replay_24.ts +312 -0
  291. package/src/scripts/memory_report.ts +16 -3
  292. package/src/scripts/memory_signal.ts +48 -0
  293. package/src/scripts/memory_status.ts +6 -0
  294. package/src/scripts/minimal_safe_diff_hook.ts +8 -5
  295. package/src/scripts/onboarding_gate_hook.ts +8 -5
  296. package/src/scripts/orchestration_record.ts +16 -0
  297. package/src/scripts/pr_url_reminder_hook.ts +8 -1
  298. package/src/scripts/prepack-check.mjs +17 -0
  299. package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
  300. package/src/scripts/prepack_lifecycle_check.mjs +82 -0
  301. package/src/scripts/profile_staleness_hook.ts +8 -7
  302. package/src/scripts/report_install_drift.ts +109 -0
  303. package/src/scripts/roadmap_progress_hook.ts +8 -5
  304. package/src/scripts/schemas/license-policy.schema.json +89 -0
  305. package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
  306. package/src/scripts/schemas/rule.schema.json +10 -0
  307. package/src/scripts/self_review_gate.test.ts +173 -1
  308. package/src/scripts/self_review_gate.ts +155 -15
  309. package/src/scripts/session_canary_hook.ts +182 -0
  310. package/src/scripts/smoke_quickstart.ts +2 -2
  311. package/src/scripts/surface_probe_hook.ts +8 -7
  312. package/src/scripts/sync_gitattributes.ts +310 -0
  313. package/src/scripts/team_review_gate_hook.ts +13 -16
  314. package/src/scripts/verify_before_complete_hook.ts +8 -5
  315. package/src/scripts/wrapper_freshness_hook.ts +8 -7
  316. package/src/server/schemas/settings.ts +8 -2
  317. package/dist/ui/assets/index-BPFMZWUs.css +0 -1
  318. package/dist/ui/assets/index-CrmZ34Rg.js +0 -40
  319. package/dist/ui/assets/index-CrmZ34Rg.js.map +0 -1
  320. package/docs/CLAIMS.md +0 -286
  321. package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
  322. package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
  323. package/docs/SKILL_CENSUS.md +0 -352
  324. package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
  325. package/docs/adrs/cost/README.md +0 -9
  326. package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
  327. package/docs/adrs/memory/README.md +0 -10
  328. package/docs/adrs/router/0001-three-tier-routing.md +0 -119
  329. package/docs/adrs/router/README.md +0 -9
  330. package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
  331. package/docs/adrs/schema/README.md +0 -9
  332. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
  333. package/docs/adrs/smoke/README.md +0 -9
  334. package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
  335. package/docs/adrs/telegraph/README.md +0 -9
  336. package/docs/announcements/2026-05-non-dev-launch.md +0 -79
  337. package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
  338. package/docs/anti-reskin-gate.md +0 -60
  339. package/docs/architecture/augment-projection.md +0 -70
  340. package/docs/architecture/claude-bundle.md +0 -77
  341. package/docs/architecture/current-onboard-baseline.md +0 -126
  342. package/docs/architecture/current-safety-behavior.md +0 -137
  343. package/docs/architecture/multi-tool-projection.md +0 -125
  344. package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
  345. package/docs/architecture/source-projection.md +0 -85
  346. package/docs/architecture.md +0 -390
  347. package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
  348. package/docs/archive/CHANGELOG-7.0.0.md +0 -419
  349. package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
  350. package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
  351. package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
  352. package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
  353. package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
  354. package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
  355. package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
  356. package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
  357. package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
  358. package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
  359. package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
  360. package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
  361. package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
  362. package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
  363. package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
  364. package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
  365. package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
  366. package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
  367. package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
  368. package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
  369. package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
  370. package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
  371. package/docs/artefact-census.md +0 -71
  372. package/docs/benchmark.md +0 -785
  373. package/docs/benchmark.pinned.yml +0 -31
  374. package/docs/benchmarks.md +0 -85
  375. package/docs/capability-matrix.md +0 -33
  376. package/docs/case-studies/_template.md +0 -60
  377. package/docs/case-studies/frontend-design-positioning.md +0 -86
  378. package/docs/catalog.md +0 -726
  379. package/docs/command-flows.md +0 -272
  380. package/docs/command-naming-audit.md +0 -60
  381. package/docs/comparison.yaml +0 -87
  382. package/docs/contracts/CHANGELOG-conventions.md +0 -149
  383. package/docs/contracts/STABILITY.md +0 -188
  384. package/docs/contracts/adoption-signal-floor.md +0 -127
  385. package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
  386. package/docs/contracts/adr-chat-history-split.md +0 -140
  387. package/docs/contracts/adr-command-suggestion.md +0 -144
  388. package/docs/contracts/adr-forecast-construction-shape.md +0 -90
  389. package/docs/contracts/adr-gtm-context-spine.md +0 -116
  390. package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
  391. package/docs/contracts/adr-install-user-type-axis.md +0 -107
  392. package/docs/contracts/adr-layout.md +0 -107
  393. package/docs/contracts/adr-level-6-productization.md +0 -145
  394. package/docs/contracts/adr-mcp-runtime.md +0 -128
  395. package/docs/contracts/adr-product-ui-track.md +0 -381
  396. package/docs/contracts/adr-prompt-driven-execution.md +0 -186
  397. package/docs/contracts/adr-settings-sync-engine.md +0 -128
  398. package/docs/contracts/adr-user-types-axis.md +0 -127
  399. package/docs/contracts/adr-wing4-context-spine.md +0 -126
  400. package/docs/contracts/agent-user-schema.md +0 -170
  401. package/docs/contracts/agents-layout.md +0 -148
  402. package/docs/contracts/agents-md-tech-stack.md +0 -75
  403. package/docs/contracts/ai-council-config.md +0 -829
  404. package/docs/contracts/ai-team-config.md +0 -224
  405. package/docs/contracts/analysis-memory-loop.md +0 -149
  406. package/docs/contracts/at-rest-encryption.md +0 -191
  407. package/docs/contracts/audit-log-v1.md +0 -150
  408. package/docs/contracts/auto-orchestration-v1.md +0 -70
  409. package/docs/contracts/benchmark-ab-contract.md +0 -106
  410. package/docs/contracts/benchmark-corpus-spec.md +0 -125
  411. package/docs/contracts/benchmark-report-schema.md +0 -113
  412. package/docs/contracts/branch-protection-policy.md +0 -139
  413. package/docs/contracts/brand-token-consumption.md +0 -74
  414. package/docs/contracts/capability-boundary.md +0 -69
  415. package/docs/contracts/capability-packs.md +0 -217
  416. package/docs/contracts/ci-cost-budget.md +0 -111
  417. package/docs/contracts/ci-green-floor.md +0 -141
  418. package/docs/contracts/command-category-governance.md +0 -84
  419. package/docs/contracts/command-clusters.md +0 -399
  420. package/docs/contracts/command-surface-tiers.md +0 -176
  421. package/docs/contracts/command-taxonomy.md +0 -137
  422. package/docs/contracts/condensation-default-kill-criterion.md +0 -116
  423. package/docs/contracts/config-presets.md +0 -144
  424. package/docs/contracts/conformance.md +0 -84
  425. package/docs/contracts/consumer-bridge.md +0 -73
  426. package/docs/contracts/context-paths.md +0 -101
  427. package/docs/contracts/context-spine.md +0 -179
  428. package/docs/contracts/cost-dashboard.md +0 -143
  429. package/docs/contracts/cost-enforcement.md +0 -134
  430. package/docs/contracts/cost-profile-defaults.md +0 -110
  431. package/docs/contracts/cost-summary-schema.md +0 -107
  432. package/docs/contracts/creative-pack-boundary.md +0 -63
  433. package/docs/contracts/cross-repo-retrieval.md +0 -64
  434. package/docs/contracts/cross-wing-handoff.md +0 -134
  435. package/docs/contracts/daily-workspace.md +0 -147
  436. package/docs/contracts/decision-engine-gates.md +0 -120
  437. package/docs/contracts/decision-trace-v1.md +0 -177
  438. package/docs/contracts/design-artifact-lifecycle.md +0 -93
  439. package/docs/contracts/design-artifact-verification.md +0 -153
  440. package/docs/contracts/discovery-manifest.md +0 -209
  441. package/docs/contracts/discovery-manifest.schema.json +0 -254
  442. package/docs/contracts/evidence-based-pruning.md +0 -102
  443. package/docs/contracts/explain-modes.md +0 -187
  444. package/docs/contracts/explain-trace.schema.json +0 -144
  445. package/docs/contracts/file-ownership-matrix.json +0 -13941
  446. package/docs/contracts/file-ownership-matrix.md +0 -135
  447. package/docs/contracts/frontmatter-contract.md +0 -140
  448. package/docs/contracts/ghostwriter-schema.md +0 -337
  449. package/docs/contracts/governance-enforcement-projection.md +0 -159
  450. package/docs/contracts/gui-wizard.md +0 -350
  451. package/docs/contracts/harness-expectations.md +0 -128
  452. package/docs/contracts/hook-architecture-v1.md +0 -325
  453. package/docs/contracts/host-agent-protocol.md +0 -110
  454. package/docs/contracts/implement-ticket-flow.md +0 -625
  455. package/docs/contracts/init-telemetry.md +0 -132
  456. package/docs/contracts/injected-block-authenticity-model.md +0 -66
  457. package/docs/contracts/install-layout.md +0 -249
  458. package/docs/contracts/install-scopes.md +0 -82
  459. package/docs/contracts/installed-tools-lockfile.md +0 -144
  460. package/docs/contracts/installer-agent-mode.md +0 -137
  461. package/docs/contracts/iron-law-overrides.txt +0 -26
  462. package/docs/contracts/kernel-membership.md +0 -339
  463. package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
  464. package/docs/contracts/linear-ai-three-layers.md +0 -130
  465. package/docs/contracts/linter-structural-model.md +0 -181
  466. package/docs/contracts/load-context-budget-model.md +0 -259
  467. package/docs/contracts/load-context-schema.md +0 -220
  468. package/docs/contracts/local-analytics.md +0 -160
  469. package/docs/contracts/local-knowledge-ingestion.md +0 -96
  470. package/docs/contracts/local-server-api.md +0 -134
  471. package/docs/contracts/local-server-ports.md +0 -53
  472. package/docs/contracts/low-impact-corpus-format.md +0 -95
  473. package/docs/contracts/mcp-beta-criteria.md +0 -130
  474. package/docs/contracts/mcp-cloud-scope.md +0 -355
  475. package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
  476. package/docs/contracts/mcp-phase-1-scope.md +0 -272
  477. package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
  478. package/docs/contracts/mcp-tool-inventory.md +0 -64
  479. package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
  480. package/docs/contracts/measurement-baseline.md +0 -103
  481. package/docs/contracts/memory-visibility-v1.md +0 -160
  482. package/docs/contracts/mental-models.md +0 -336
  483. package/docs/contracts/migrate-command.md +0 -233
  484. package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
  485. package/docs/contracts/namespace.md +0 -125
  486. package/docs/contracts/no-runtime-boundary.md +0 -61
  487. package/docs/contracts/one-off-script-lifecycle.md +0 -110
  488. package/docs/contracts/orchestration-dsl-v1.md +0 -153
  489. package/docs/contracts/package-self-orientation.md +0 -163
  490. package/docs/contracts/pilot/agent-authority.md +0 -24
  491. package/docs/contracts/pilot/direct-answers.md +0 -70
  492. package/docs/contracts/pilot/language-and-tone.md +0 -63
  493. package/docs/contracts/plain-language-surface.md +0 -117
  494. package/docs/contracts/prelaunch-diagnostics.md +0 -151
  495. package/docs/contracts/profile-system.md +0 -167
  496. package/docs/contracts/reasoning-discipline-protocol.md +0 -83
  497. package/docs/contracts/release-pr-gating.md +0 -151
  498. package/docs/contracts/release-sizing.md +0 -107
  499. package/docs/contracts/release-trunk-sync.md +0 -105
  500. package/docs/contracts/review-lens-schema.md +0 -64
  501. package/docs/contracts/roadmap-complexity-standard.md +0 -138
  502. package/docs/contracts/role-experience.md +0 -125
  503. package/docs/contracts/router-blending.md +0 -71
  504. package/docs/contracts/rule-classification.md +0 -171
  505. package/docs/contracts/rule-interactions.md +0 -132
  506. package/docs/contracts/rule-interactions.yml +0 -260
  507. package/docs/contracts/rule-priority-hierarchy.md +0 -88
  508. package/docs/contracts/rule-router.md +0 -287
  509. package/docs/contracts/safety-model.md +0 -129
  510. package/docs/contracts/session-profile-overlay.md +0 -157
  511. package/docs/contracts/settings-api.md +0 -264
  512. package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
  513. package/docs/contracts/settings-sync-yaml-subset.md +0 -139
  514. package/docs/contracts/skill-bundled-assets.md +0 -62
  515. package/docs/contracts/skill-discovery.md +0 -80
  516. package/docs/contracts/skill-distribution-channels.md +0 -66
  517. package/docs/contracts/skill-domains.md +0 -144
  518. package/docs/contracts/skill-dry-run.md +0 -47
  519. package/docs/contracts/skill-family-map.yml +0 -915
  520. package/docs/contracts/smoke-contracts.md +0 -144
  521. package/docs/contracts/subagent-boundary.md +0 -74
  522. package/docs/contracts/surface-agent-contracts.md +0 -153
  523. package/docs/contracts/surface-matrix.md +0 -108
  524. package/docs/contracts/surface-tiers.md +0 -81
  525. package/docs/contracts/telegraph-telemetry.md +0 -83
  526. package/docs/contracts/ticket-bundle-format.md +0 -233
  527. package/docs/contracts/tier-3-contrib-plugin.md +0 -137
  528. package/docs/contracts/trust-and-safety.md +0 -144
  529. package/docs/contracts/ui-stack-extension.md +0 -237
  530. package/docs/contracts/ui-track-flow.md +0 -329
  531. package/docs/contracts/universal-skills.md +0 -91
  532. package/docs/contracts/user-type-schema.md +0 -146
  533. package/docs/contracts/value-dashboard-spec.md +0 -378
  534. package/docs/contracts/value-report-schema.md +0 -168
  535. package/docs/contracts/workflow-packs.md +0 -121
  536. package/docs/contracts/workspace-boundary.md +0 -84
  537. package/docs/contracts/workspace-documents.md +0 -144
  538. package/docs/contracts/write-engine.md +0 -182
  539. package/docs/cookbook.md +0 -152
  540. package/docs/customization.md +0 -696
  541. package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
  542. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
  543. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
  544. package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
  545. package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
  546. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
  547. package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
  548. package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
  549. package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
  550. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
  551. package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
  552. package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
  553. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
  554. package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
  555. package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
  556. package/docs/decisions/ADR-016-installer-architecture.md +0 -191
  557. package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
  558. package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
  559. package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
  560. package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
  561. package/docs/decisions/ADR-021-deployment-shape.md +0 -153
  562. package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
  563. package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
  564. package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
  565. package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
  566. package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
  567. package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
  568. package/docs/decisions/ADR-028-root-layout.md +0 -147
  569. package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
  570. package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
  571. package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
  572. package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
  573. package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
  574. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
  575. package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
  576. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
  577. package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
  578. package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
  579. package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
  580. package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
  581. package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
  582. package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
  583. package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
  584. package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
  585. package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
  586. package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
  587. package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
  588. package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
  589. package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
  590. package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
  591. package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
  592. package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
  593. package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
  594. package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
  595. package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
  596. package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
  597. package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
  598. package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
  599. package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
  600. package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
  601. package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
  602. package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
  603. package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
  604. package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
  605. package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
  606. package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
  607. package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
  608. package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
  609. package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
  610. package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
  611. package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
  612. package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
  613. package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
  614. package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
  615. package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
  616. package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
  617. package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
  618. package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
  619. package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
  620. package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
  621. package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
  622. package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
  623. package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
  624. package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
  625. package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
  626. package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
  627. package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
  628. package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
  629. package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
  630. package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
  631. package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
  632. package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
  633. package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
  634. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
  635. package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
  636. package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
  637. package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
  638. package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
  639. package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
  640. package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
  641. package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
  642. package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
  643. package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
  644. package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
  645. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
  646. package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
  647. package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
  648. package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
  649. package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -248
  650. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -112
  651. package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
  652. package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
  653. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -209
  654. package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
  655. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
  656. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
  657. package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
  658. package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
  659. package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
  660. package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
  661. package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
  662. package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
  663. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
  664. package/docs/decisions/ADR-124-embedded-engine-doctrine.md +0 -255
  665. package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +0 -131
  666. package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +0 -254
  667. package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +0 -150
  668. package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +0 -201
  669. package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
  670. package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
  671. package/docs/decisions/INDEX.md +0 -157
  672. package/docs/decisions/engine-reclassification-2026-07.md +0 -104
  673. package/docs/deploy/connector-setup.md +0 -129
  674. package/docs/deploy/env-vars.md +0 -70
  675. package/docs/deploy/policy-cookbook.md +0 -130
  676. package/docs/deploy/quickstart.md +0 -112
  677. package/docs/deploy/small-team-recipe.md +0 -148
  678. package/docs/deploy/team-deployment-posture.md +0 -111
  679. package/docs/design/adversarial-council-eval.md +0 -106
  680. package/docs/design/council-vs-solo-baseline.md +0 -92
  681. package/docs/design/cross-model-parity-eval.md +0 -82
  682. package/docs/design/length-neutral-judge-rerun.md +0 -92
  683. package/docs/design/utilization-window-criteria.md +0 -51
  684. package/docs/development.md +0 -230
  685. package/docs/distribution/awesome-list-submission.md +0 -46
  686. package/docs/distribution/consumer-matrix.md +0 -96
  687. package/docs/distribution/launch-story-draft.md +0 -58
  688. package/docs/distribution/mcp-submission-checklist.md +0 -95
  689. package/docs/distribution/public-install-smoke.md +0 -68
  690. package/docs/distribution/registries.md +0 -126
  691. package/docs/distribution/registry-submissions.md +0 -85
  692. package/docs/distribution/telemetry-privacy.md +0 -128
  693. package/docs/distribution/telemetry-schema.md +0 -174
  694. package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
  695. package/docs/end-to-end-walkthroughs.md +0 -165
  696. package/docs/enforcement-by-host.md +0 -51
  697. package/docs/examples/agent-user.example.md +0 -22
  698. package/docs/experiences/agency.md +0 -49
  699. package/docs/experiences/content_creator.md +0 -49
  700. package/docs/experiences/developer.md +0 -49
  701. package/docs/experiences/finance.md +0 -50
  702. package/docs/experiences/founder.md +0 -49
  703. package/docs/experiences/ops.md +0 -49
  704. package/docs/featured-commands.md +0 -27
  705. package/docs/featured-skills.md +0 -95
  706. package/docs/flows.md +0 -67
  707. package/docs/getting-started-by-role.md +0 -190
  708. package/docs/getting-started-laravel.md +0 -72
  709. package/docs/getting-started-local-stdio.md +0 -77
  710. package/docs/getting-started.md +0 -254
  711. package/docs/github-topics.md +0 -93
  712. package/docs/governance-advantage.md +0 -72
  713. package/docs/governance.md +0 -96
  714. package/docs/guides/cross-repo-linked-projects.md +0 -93
  715. package/docs/guides/cross-repo-retrieval.md +0 -61
  716. package/docs/guides/frontend-design-corpus-refresh.md +0 -83
  717. package/docs/guides/gated-platform-reads.md +0 -221
  718. package/docs/guides/local-analytics.md +0 -125
  719. package/docs/guides/local-knowledge.md +0 -127
  720. package/docs/guides/skill-discovery.md +0 -71
  721. package/docs/guides/skill-preview.md +0 -71
  722. package/docs/hook-payload-capture.md +0 -221
  723. package/docs/install-friction-report.md +0 -66
  724. package/docs/installation.md +0 -959
  725. package/docs/maintainers/branch-protection.md +0 -105
  726. package/docs/maintainers/dev-mode.md +0 -106
  727. package/docs/maintainers/optional-media-deps.md +0 -50
  728. package/docs/maintainers/system-map.md +0 -85
  729. package/docs/mcp-registries.md +0 -94
  730. package/docs/mcp-server.md +0 -175
  731. package/docs/mcp.md +0 -147
  732. package/docs/media/proof-demo.cast +0 -14
  733. package/docs/media/proof-demo.gif +0 -0
  734. package/docs/migration/consumer-template-consumption-model.md +0 -145
  735. package/docs/migration/divergences/README.md +0 -55
  736. package/docs/migration/divergences/_template.md +0 -50
  737. package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
  738. package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
  739. package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
  740. package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
  741. package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
  742. package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
  743. package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
  744. package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
  745. package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
  746. package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
  747. package/docs/migration/node-floor.md +0 -86
  748. package/docs/migration/v1-to-v2.md +0 -156
  749. package/docs/migration/yaml-roundtrip-spike.md +0 -163
  750. package/docs/migrations/commands-1.15.0.md +0 -117
  751. package/docs/parity/bench-external.json +0 -58
  752. package/docs/parity/bench.json +0 -41
  753. package/docs/parity/command-frontmatter.md +0 -60
  754. package/docs/parity/external-runtime.md +0 -46
  755. package/docs/personas.md +0 -178
  756. package/docs/positioning-evidence.md +0 -86
  757. package/docs/profiles.md +0 -108
  758. package/docs/proof.md +0 -252
  759. package/docs/quality.md +0 -98
  760. package/docs/readme-split-plan.md +0 -102
  761. package/docs/recruits/_template.md +0 -81
  762. package/docs/release-runbook.md +0 -141
  763. package/docs/role-experiences.md +0 -19
  764. package/docs/safety.md +0 -30
  765. package/docs/second-brain-scope.md +0 -116
  766. package/docs/self-review-gate.md +0 -65
  767. package/docs/setup/enterprise-and-offline.md +0 -201
  768. package/docs/setup/mcp-client-config.md +0 -358
  769. package/docs/setup/mcp-cloud-endpoints.md +0 -116
  770. package/docs/setup/mcp-cloud-registry-listing.md +0 -99
  771. package/docs/setup/mcp-cloud-setup.md +0 -183
  772. package/docs/setup/mcp-r2-bootstrap.md +0 -82
  773. package/docs/setup/mcp-server-docker.md +0 -101
  774. package/docs/setup/per-ide/aider.md +0 -48
  775. package/docs/setup/per-ide/antigravity.md +0 -68
  776. package/docs/setup/per-ide/augment.md +0 -89
  777. package/docs/setup/per-ide/claude-code.md +0 -97
  778. package/docs/setup/per-ide/claude-desktop.md +0 -207
  779. package/docs/setup/per-ide/cline.md +0 -43
  780. package/docs/setup/per-ide/codebuddy.md +0 -63
  781. package/docs/setup/per-ide/codex.md +0 -46
  782. package/docs/setup/per-ide/continue.md +0 -68
  783. package/docs/setup/per-ide/copilot.md +0 -80
  784. package/docs/setup/per-ide/cursor.md +0 -125
  785. package/docs/setup/per-ide/droid.md +0 -65
  786. package/docs/setup/per-ide/gemini-cli.md +0 -45
  787. package/docs/setup/per-ide/jetbrains.md +0 -76
  788. package/docs/setup/per-ide/kilocode.md +0 -66
  789. package/docs/setup/per-ide/kiro.md +0 -72
  790. package/docs/setup/per-ide/opencode.md +0 -62
  791. package/docs/setup/per-ide/qoder.md +0 -63
  792. package/docs/setup/per-ide/roocode.md +0 -68
  793. package/docs/setup/per-ide/trae.md +0 -63
  794. package/docs/setup/per-ide/warp.md +0 -63
  795. package/docs/setup/per-ide/windsurf.md +0 -109
  796. package/docs/setup/per-ide/zed.md +0 -73
  797. package/docs/showcase.md +0 -209
  798. package/docs/skill-duplication-findings.md +0 -91
  799. package/docs/skills-catalog.md +0 -265
  800. package/docs/skills-taxonomy.md +0 -90
  801. package/docs/spawn-site-policy.md +0 -72
  802. package/docs/succession.md +0 -80
  803. package/docs/threat-model.md +0 -30
  804. package/docs/troubleshooting.md +0 -155
  805. package/docs/ui-track-mental-model.md +0 -121
  806. package/docs/us-vs-the-category.md +0 -38
  807. package/docs/value.md +0 -86
  808. package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
  809. package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
  810. package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
  811. package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
  812. package/docs/walkthroughs/daily-workspace.md +0 -127
  813. package/docs/wedge/production-validator/README.md +0 -81
  814. package/docs/wedge/production-validator/first-run-check.sh +0 -42
  815. package/docs/wedge/production-validator/production-validator.md +0 -83
  816. package/docs/wizard.md +0 -173
  817. package/src/scripts/postinstall_gui.ts +0 -129
@@ -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.)*