@event4u/agent-config 5.6.1 → 5.8.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 (225) hide show
  1. package/.agent-src/commands/agent-handoff.md +1 -1
  2. package/.agent-src/commands/agent-status.md +1 -1
  3. package/.agent-src/commands/agents/audit.md +1 -1
  4. package/.agent-src/commands/agents/init.md +1 -1
  5. package/.agent-src/commands/agents/user/accept.md +3 -3
  6. package/.agent-src/commands/agents/user/init.md +4 -4
  7. package/.agent-src/commands/agents/user/show.md +3 -3
  8. package/.agent-src/commands/agents/user/update.md +3 -3
  9. package/.agent-src/commands/agents/user.md +1 -1
  10. package/.agent-src/commands/agents.md +1 -1
  11. package/.agent-src/commands/analytics/prune.md +1 -1
  12. package/.agent-src/commands/analytics/show.md +1 -1
  13. package/.agent-src/commands/analytics.md +1 -1
  14. package/.agent-src/commands/bug-fix.md +1 -1
  15. package/.agent-src/commands/challenge-me.md +1 -1
  16. package/.agent-src/commands/chat-history/import.md +1 -1
  17. package/.agent-src/commands/chat-history/learn.md +1 -1
  18. package/.agent-src/commands/chat-history/show.md +1 -1
  19. package/.agent-src/commands/chat-history.md +1 -1
  20. package/.agent-src/commands/check-current-md.md +1 -1
  21. package/.agent-src/commands/condense.md +1 -1
  22. package/.agent-src/commands/context.md +1 -1
  23. package/.agent-src/commands/cost-report.md +13 -8
  24. package/.agent-src/commands/council.md +3 -3
  25. package/.agent-src/commands/create-pr/description-only.md +1 -1
  26. package/.agent-src/commands/create-pr.md +1 -1
  27. package/.agent-src/commands/e2e-heal.md +1 -1
  28. package/.agent-src/commands/e2e-plan.md +1 -1
  29. package/.agent-src/commands/feature.md +1 -1
  30. package/.agent-src/commands/fix/ci.md +1 -1
  31. package/.agent-src/commands/fix/portability.md +1 -1
  32. package/.agent-src/commands/fix/pr-bot-comments.md +1 -1
  33. package/.agent-src/commands/fix/pr-comments.md +1 -1
  34. package/.agent-src/commands/fix/pr-developer-comments.md +1 -1
  35. package/.agent-src/commands/fix/refs.md +1 -1
  36. package/.agent-src/commands/fix/seeder.md +1 -1
  37. package/.agent-src/commands/fix.md +1 -1
  38. package/.agent-src/commands/judge.md +1 -1
  39. package/.agent-src/commands/knowledge/cross-repo.md +1 -1
  40. package/.agent-src/commands/knowledge/forget.md +1 -1
  41. package/.agent-src/commands/knowledge/ingest.md +1 -1
  42. package/.agent-src/commands/knowledge/list.md +1 -1
  43. package/.agent-src/commands/knowledge.md +1 -1
  44. package/.agent-src/commands/memory/add.md +1 -1
  45. package/.agent-src/commands/memory/learn-low-impact.md +1 -1
  46. package/.agent-src/commands/memory/load.md +1 -1
  47. package/.agent-src/commands/memory/mine-session.md +1 -1
  48. package/.agent-src/commands/memory/promote.md +1 -1
  49. package/.agent-src/commands/memory/propose.md +1 -1
  50. package/.agent-src/commands/memory.md +1 -1
  51. package/.agent-src/commands/mode.md +1 -1
  52. package/.agent-src/commands/optimize/agents-dir.md +1 -1
  53. package/.agent-src/commands/optimize/augmentignore.md +1 -1
  54. package/.agent-src/commands/optimize/rtk.md +1 -1
  55. package/.agent-src/commands/optimize/skills.md +1 -1
  56. package/.agent-src/commands/optimize.md +1 -1
  57. package/.agent-src/commands/orchestrate.md +1 -1
  58. package/.agent-src/commands/override/create.md +1 -1
  59. package/.agent-src/commands/override/manage.md +1 -1
  60. package/.agent-src/commands/override.md +1 -1
  61. package/.agent-src/commands/package-reset.md +1 -1
  62. package/.agent-src/commands/prediction-pool.md +234 -0
  63. package/.agent-src/commands/profile/activate.md +81 -0
  64. package/.agent-src/commands/profile/deactivate.md +68 -0
  65. package/.agent-src/commands/profile/show.md +70 -0
  66. package/.agent-src/commands/profile.md +68 -0
  67. package/.agent-src/commands/project-health.md +1 -1
  68. package/.agent-src/commands/quality-fix.md +1 -1
  69. package/.agent-src/commands/roadmap/process-full.md +1 -1
  70. package/.agent-src/commands/roadmap/process-phase.md +1 -1
  71. package/.agent-src/commands/roadmap/process-step.md +1 -1
  72. package/.agent-src/commands/roadmap.md +1 -1
  73. package/.agent-src/commands/set-cost-profile.md +9 -9
  74. package/.agent-src/commands/skill/preview.md +3 -3
  75. package/.agent-src/commands/skill.md +1 -1
  76. package/.agent-src/commands/skills/discover.md +1 -1
  77. package/.agent-src/commands/skills.md +1 -1
  78. package/.agent-src/commands/sync-agent-settings.md +3 -3
  79. package/.agent-src/commands/sync-gitignore/fix.md +1 -1
  80. package/.agent-src/commands/sync-gitignore.md +1 -1
  81. package/.agent-src/commands/update-form-request-messages.md +1 -1
  82. package/.agent-src/presets/README.md +1 -1
  83. package/.agent-src/profiles/README.md +1 -1
  84. package/.agent-src/rules/non-destructive-by-default.md +2 -1
  85. package/.agent-src/skills/check-refs/SKILL.md +1 -1
  86. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -1
  87. package/.agent-src/skills/git-workflow/SKILL.md +1 -1
  88. package/.agent-src/skills/jira-integration/SKILL.md +1 -1
  89. package/.agent-src/skills/markitdown/SKILL.md +1 -1
  90. package/.agent-src/skills/prediction-pool-optimizer/SKILL.md +314 -0
  91. package/.agent-src/skills/prediction-pool-optimizer/evals/triggers.json +20 -0
  92. package/.agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +175 -0
  93. package/.agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +109 -0
  94. package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
  95. package/.agent-src/skills/script-writing/SKILL.md +1 -1
  96. package/.agent-src/skills/token-optimizer/SKILL.md +1 -1
  97. package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  98. package/.agent-src/templates/agent-settings.md +7 -7
  99. package/.agent-src/templates/agents/agent-project-settings.example.yml +2 -2
  100. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +54 -6
  101. package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +1 -1
  102. package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +9 -7
  103. package/.agent-src/templates/scripts/work_engine/hooks/settings.py +9 -10
  104. package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +17 -4
  105. package/.claude-plugin/marketplace.json +370 -364
  106. package/CHANGELOG.md +108 -0
  107. package/README.md +2 -2
  108. package/config/agent-settings.template.yml +11 -2
  109. package/config/discovery/packs.yml +11 -0
  110. package/config/discovery/session-profiles.yml +37 -0
  111. package/config/discovery/workspaces.yml +1 -1
  112. package/config/profiles/balanced.ini +1 -1
  113. package/config/profiles/full.ini +1 -1
  114. package/config/profiles/minimal.ini +1 -1
  115. package/dist/discovery/deprecation-report.md +1 -1
  116. package/dist/discovery/discovery-manifest.json +254 -100
  117. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  118. package/dist/discovery/discovery-manifest.summary.md +4 -3
  119. package/dist/discovery/orphan-report.md +1 -1
  120. package/dist/discovery/packs.json +41 -6
  121. package/dist/discovery/trust-report.md +3 -3
  122. package/dist/discovery/workspaces.json +19 -6
  123. package/dist/mcp/registry-manifest.json +3 -3
  124. package/dist/server/io/substituteTemplate.js +3 -3
  125. package/dist/server/io/substituteTemplate.js.map +1 -1
  126. package/dist/server/routes/settings.js +2 -2
  127. package/dist/server/routes/settings.js.map +1 -1
  128. package/dist/server/schemas/settings.js +4 -2
  129. package/dist/server/schemas/settings.js.map +1 -1
  130. package/dist/ui/assets/{index-DVsyUMZe.js → index-5lFqAKL0.js} +2 -2
  131. package/dist/ui/assets/index-5lFqAKL0.js.map +1 -0
  132. package/dist/ui/index.html +1 -1
  133. package/docs/architecture/current-onboard-baseline.md +3 -3
  134. package/docs/architecture.md +2 -2
  135. package/docs/catalog.md +11 -5
  136. package/docs/contracts/adr-level-6-productization.md +1 -1
  137. package/docs/contracts/command-clusters.md +2 -0
  138. package/docs/contracts/config-presets.md +2 -2
  139. package/docs/contracts/cost-profile-defaults.md +5 -5
  140. package/docs/contracts/discovery-manifest.schema.json +1 -1
  141. package/docs/contracts/explain-trace.schema.json +3 -3
  142. package/docs/contracts/memory-visibility-v1.md +15 -7
  143. package/docs/contracts/profile-system.md +2 -2
  144. package/docs/contracts/session-profile-overlay.md +120 -0
  145. package/docs/contracts/settings-api.md +3 -3
  146. package/docs/contracts/value-report-schema.md +14 -1
  147. package/docs/customization.md +47 -5
  148. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +47 -11
  149. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +16 -2
  150. package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +1 -1
  151. package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +106 -0
  152. package/docs/decisions/ADR-037-cost-profile-untangle.md +117 -0
  153. package/docs/decisions/ADR-038-canonical-settings-path.md +66 -0
  154. package/docs/decisions/ADR-039-claude-skills-untracked.md +139 -0
  155. package/docs/decisions/ADR-rule-kernel-and-router.md +1 -1
  156. package/docs/decisions/INDEX.md +4 -0
  157. package/docs/development.md +12 -0
  158. package/docs/getting-started.md +2 -2
  159. package/docs/guidelines/agent-infra/layered-settings.md +10 -4
  160. package/docs/installation.md +3 -3
  161. package/docs/setup/mcp-client-config.md +1 -1
  162. package/docs/skills-catalog.md +5 -1
  163. package/docs/value.md +9 -7
  164. package/docs/wizard.md +1 -1
  165. package/llms.txt +4 -0
  166. package/package.json +1 -1
  167. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  168. package/scripts/_cli/cmd_doctor.py +3 -2
  169. package/scripts/_cli/cmd_explain.py +1 -1
  170. package/scripts/_cli/cmd_versions.py +2 -2
  171. package/scripts/_cli/explain_last/inputs.py +11 -8
  172. package/scripts/_cli/explain_last/sections/inputs.py +1 -1
  173. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  174. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  175. package/scripts/_lib/agent_settings.py +54 -6
  176. package/scripts/_lib/agent_src.py +30 -0
  177. package/scripts/_lib/value_ladder.py +99 -2
  178. package/scripts/_lib/value_report.py +30 -16
  179. package/scripts/ai_council/modes.py +1 -1
  180. package/scripts/ai_council/session.py +5 -1
  181. package/scripts/audit_command_surface.py +7 -1
  182. package/scripts/audit_initial_context.py +26 -2
  183. package/scripts/check_gate_paths.py +117 -0
  184. package/scripts/check_references.py +51 -2
  185. package/scripts/check_skill_requires.py +143 -0
  186. package/scripts/check_test_coverage_diff.py +180 -0
  187. package/scripts/compile_router.py +5 -1
  188. package/scripts/condense.py +92 -4
  189. package/scripts/config/session_profiles.py +492 -0
  190. package/scripts/council_cli.py +5 -1
  191. package/scripts/first-run.sh +11 -11
  192. package/scripts/hook_manifest.yaml +15 -7
  193. package/scripts/hooks/dispatch_hook.py +8 -0
  194. package/scripts/install +14 -1
  195. package/scripts/install-hooks.sh +2 -1
  196. package/scripts/install.py +203 -433
  197. package/scripts/install_anthropic_key.sh +1 -1
  198. package/scripts/install_openai_key.sh +1 -1
  199. package/scripts/inventory_abstraction_budget.py +6 -1
  200. package/scripts/lint_agents_md.py +11 -4
  201. package/scripts/lint_discovery_vocabulary.py +5 -5
  202. package/scripts/lint_hook_concern_budget.py +5 -1
  203. package/scripts/lint_marketplace.py +18 -7
  204. package/scripts/lint_roadmap_ci_steps.py +5 -1
  205. package/scripts/lint_roadmap_complexity.py +5 -1
  206. package/scripts/lint_value_dashboard.py +1 -1
  207. package/scripts/mcp_server/prompts.py +5 -1
  208. package/scripts/prediction-pool/adapters/_schema.md +42 -0
  209. package/scripts/prediction-pool/adapters/kicktipp.yml +23 -0
  210. package/scripts/prediction-pool/poisson_sim.py +167 -0
  211. package/scripts/prediction-pool/pool_winsim.py +236 -0
  212. package/scripts/prediction-pool/score_ev.py +188 -0
  213. package/scripts/profile_staleness_hook.py +69 -0
  214. package/scripts/render_value_md.py +1 -0
  215. package/scripts/roadmap_progress_hook.py +56 -6
  216. package/scripts/schemas/agent-settings.schema.json +77 -0
  217. package/scripts/schemas/skill.schema.json +7 -0
  218. package/scripts/smoke_quickstart.py +7 -6
  219. package/scripts/sync_agent_settings.py +12 -5
  220. package/scripts/validate_agent_settings.py +124 -0
  221. package/scripts/validate_decision_engine.py +5 -1
  222. package/templates/minimal/.agent-settings.yml +1 -1
  223. package/dist/ui/assets/index-DVsyUMZe.js.map +0 -1
  224. package/scripts/measure_roadmap_trajectory.py +0 -112
  225. package/scripts/verify_roadmap_closure.py +0 -327
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
6
  <meta name="robots" content="noindex" />
7
7
  <title>agent-config</title>
8
- <script type="module" crossorigin src="/assets/index-DVsyUMZe.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-5lFqAKL0.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-BbWWuFrF.css">
10
10
  </head>
11
11
  <body>
@@ -27,7 +27,7 @@ inert — no settings file, no flow.
27
27
  | 4 | `personal.ide` (+ auto-detect via `ps aux`) and `personal.open_edited_files` | IDE id, auto-open flag | unset |
28
28
  | 5 | `personal.pr_comment_bot_icon` | bool | always (no detection possible) |
29
29
  | 6 | `personal.rtk_installed` (via `which rtk`) | bool + install action | rtk not found |
30
- | 7 | `cost_profile` and `pipelines.skill_improvement` | profile id, learning bool | always (one summary screen) |
30
+ | 7 | `rule_loading_tier` and `pipelines.skill_improvement` | profile id, learning bool | always (one summary screen) |
31
31
  | 8 | Mark `onboarding.onboarded: true` | — | always |
32
32
  | 9 | Write user-global `~/.event4u/agent-config/agent-settings.yml` | six whitelisted keys | step 2 captured "yes" |
33
33
  | 10 | Summary block | — | always |
@@ -65,7 +65,7 @@ personal:
65
65
  open_edited_files: true|false # step 4
66
66
  pr_comment_bot_icon: true|false # step 5
67
67
  rtk_installed: true|false # step 6
68
- cost_profile: "balanced" # step 7 (default unchanged)
68
+ rule_loading_tier: "balanced" # step 7 (default unchanged)
69
69
  pipelines:
70
70
  skill_improvement: true # step 7 (default unchanged)
71
71
  onboarding:
@@ -74,7 +74,7 @@ onboarding:
74
74
 
75
75
  User-global file (step 9, opt-in): the six whitelisted keys in
76
76
  [`scripts/_lib/agent_settings.py`](../../scripts/_lib/agent_settings.py)
77
- — `name`, `ide`, `cost_profile`, `personal.bot_icon`,
77
+ — `name`, `ide`, `rule_loading_tier`, `personal.bot_icon`,
78
78
  `personal.autonomy`, `telegraph.speak_scope`.
79
79
 
80
80
  ## Iron Laws today
@@ -146,9 +146,9 @@ note, package-internal path-swap, description budget, and the
146
146
 
147
147
  | Layer | Count | Purpose |
148
148
  |---|---|---|
149
- | **Skills** | 222 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
149
+ | **Skills** | 223 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
150
150
  | **Rules** | 79 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
151
- | **Commands** | 145 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/condense`, … |
151
+ | **Commands** | 150 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/condense`, … |
152
152
  | **Guidelines** | 73 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
153
153
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
154
154
  | **Contexts** | 5 | Shared knowledge about the system itself |
package/docs/catalog.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **518 public artefacts** shipped by
3
+ Consumer-facing catalog of all **524 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
7
7
  > **Regenerate:** `python3 scripts/generate_index.py`
8
8
  > Auto-generated — do not edit manually.
9
9
 
10
- ## Skills (222)
10
+ ## Skills (223)
11
11
 
12
12
  | kind | name | extra | description |
13
13
  |---|---|---|---|
@@ -157,6 +157,7 @@ are excluded.
157
157
  | skill | [`playwright-testing`](../.agent-src/skills/playwright-testing/SKILL.md) | | Use when writing Playwright E2E tests — browser automation, visual regression testing, Page Objects, fixtures, and reliable test patterns. |
158
158
  | skill | [`po-discovery`](../.agent-src/skills/po-discovery/SKILL.md) | | Use when shaping a fuzzy product ask into a refined backlog item — problem framing, user-story rewrite, AC tightening — even if the user just says 'help me write this ticket'. |
159
159
  | skill | [`positioning-strategy`](../.agent-src/skills/positioning-strategy/SKILL.md) | | Use when locking the market frame — category, segment, alternative, point-of-view — before messaging, launch, or pricing rides on it. Triggers on 'who are we for', 'opposable audit'. |
160
+ | skill | [`prediction-pool-optimizer`](../.agent-src/skills/prediction-pool-optimizer/SKILL.md) | | Optimize prediction-pool tips (kicktipp etc.): rules + multi-book consensus odds → expected-points-max answer for every question, scores AND bonus. Triggers 'optimize my pool tips', 'predict'. |
160
161
  | skill | [`privacy-review`](../.agent-src/skills/privacy-review/SKILL.md) | | Use when reviewing data flows, support macros, refund templates for GDPR/CCPA/HIPAA fit — regime, consent, PII redaction (email, order-id), breach triage. Triggers 'is this GDPR-safe', 'PII redact'. |
161
162
  | skill | [`project-analysis-core`](../.agent-src/skills/project-analysis-core/SKILL.md) | | Raw discovery primitives — project discovery, version resolution, docs loading, architecture mapping, execution flow. Called by `universal-project-analysis`. Single-pass scan → `project-analyzer`. |
162
163
  | skill | [`project-analysis-hypothesis-driven`](../.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md) | | Use when a bug has multiple plausible causes across layers — competing hypotheses, validation loops, evidence-based conclusions — even when the user just says 'why is this happening?'. |
@@ -285,7 +286,7 @@ are excluded.
285
286
  | rule | [`no-decorative-emojis-in-git-surfaces`](../.agent-src/rules/no-decorative-emojis-in-git-surfaces.md) | auto | Generating PR/issue/commit titles or PR/issue comments — forbids decorative emojis; allowed in PR/issue descriptions + commit bodies only when matched by an in-artifact legend |
286
287
  | rule | [`no-pr-progress-comments`](../.agent-src/rules/no-pr-progress-comments.md) | auto | Posting comments on an open PR — refuses unsolicited progress / status / CI-fix narration unless personal.pr_progress_comments is true |
287
288
  | rule | [`no-roadmap-references`](../.agent-src/rules/no-roadmap-references.md) | auto | Linking transient files (agents/roadmaps/, agents/runtime/council/*/) from a stable artifact — both layers expire; promote findings |
288
- | rule | [`non-destructive-by-default`](../.agent-src/rules/non-destructive-by-default.md) | always | Agent is never destructive — Hard Floor always asks for prod-trunk merges, deploys, pushes, prod data/infra, bulk deletions, and bulk-deletion/infra commits; no autonomy or roadmap bypass |
289
+ | rule | [`non-destructive-by-default`](../.agent-src/rules/non-destructive-by-default.md) | always | Hard Floor: agent asks before prod-trunk commits/merges, deploys, pushes, prod data/infra, bulk deletions/infra commits; verify branch before each commit; no autonomy or roadmap bypass |
289
290
  | rule | [`onboarding-gate`](../.agent-src/rules/onboarding-gate.md) | auto | First turn — if onboarding.onboarded is false in .agent-settings.yml, instruct dev to run `agent-config setup` before any request |
290
291
  | rule | [`package-ci-checks`](../.agent-src/rules/package-ci-checks.md) | manual | Before pushing to remote or creating a PR in the agent-config package — run all CI checks locally first |
291
292
  | rule | [`persona-governance`](../.agent-src/rules/persona-governance.md) | auto | Creating/editing/proposing personas — enforce per-domain cap (≤ 2 specialists), ≥ 1 skill citation, deprecation path |
@@ -317,7 +318,7 @@ are excluded.
317
318
  | rule | [`user-interrupt-priority`](../.agent-src/rules/user-interrupt-priority.md) | always | User interrupts override the current task — STOP, complete new task in full, then ASK before resuming; never silently return to prior work |
318
319
  | rule | [`verify-before-complete`](../.agent-src/rules/verify-before-complete.md) | always | Verify before completion — run tests and quality tools before claiming done |
319
320
 
320
- ## Commands (145)
321
+ ## Commands (150)
321
322
 
322
323
  | kind | name | cluster | description |
323
324
  |---|---|---|---|
@@ -428,7 +429,12 @@ are excluded.
428
429
  | command | [`post-as`](../.agent-src/commands/post-as.md) | cluster: post-as | Consumer-facing write entry points — :me drafts in the maintainer's own voice from .agent-user.md (no disclosure); :ghostwriter is a thin alias for /ghostwriter:write (mandatory disclosure footer). |
429
430
  | command | [`post-as:ghostwriter`](../.agent-src/commands/post-as/ghostwriter.md) | cluster: post-as | Thin alias for /ghostwriter:write — drafts a copyable markdown post in a captured public-figure voice with the mandatory non-removable disclosure footer. |
430
431
  | command | [`post-as:me`](../.agent-src/commands/post-as/me.md) | cluster: post-as | Draft a copyable markdown post in the maintainer's own voice (style source = .agent-user.md.voice_sample). No disclosure footer — the user is the author. |
432
+ | command | [`prediction-pool`](../.agent-src/commands/prediction-pool.md) | | Fill a prediction pool (kicktipp, football/basketball WM): optimize expected points under the rules, enter tips via Playwright. Triggers 'Tippspiel', 'kicktipp', 'predict the pool'. |
431
433
  | command | [`prepare-for-review`](../.agent-src/commands/prepare-for-review.md) | | Prepare a PR branch for local review — updates main and merges the full branch chain so the branch is up to date |
434
+ | command | [`profile`](../.agent-src/commands/profile.md) | cluster: profile | Session-profile orchestrator — activate / deactivate / show the active packs for this session (recommendation-bias surface filter, no persistence) |
435
+ | command | [`profile:activate`](../.agent-src/commands/profile/activate.md) | cluster: profile | Activate a session profile — surface only the named profile/pack closure plus core artefacts, no persistence |
436
+ | command | [`profile:deactivate`](../.agent-src/commands/profile/deactivate.md) | cluster: profile | Deactivate the session profile — clear the overlay (or drop named packs) so the full surface returns |
437
+ | command | [`profile:show`](../.agent-src/commands/profile/show.md) | cluster: profile | Show the active session profile — active packs and surfaced/hidden command+skill counts (observability surface) |
432
438
  | command | [`project-analyze`](../.agent-src/commands/project-analyze.md) | | Full project analysis — detect stack, inventory modules, audit docs, create missing contexts |
433
439
  | command | [`project-health`](../.agent-src/commands/project-health.md) | | Quick project health check — show status of docs, modules, contexts, and roadmaps without creating anything |
434
440
  | command | [`quality-fix`](../.agent-src/commands/quality-fix.md) | | Run quality pipeline (PHP and/or JS/TS) and fix all errors — auto-detects language from changed files |
@@ -445,7 +451,7 @@ are excluded.
445
451
  | command | [`roadmap:process-phase`](../.agent-src/commands/roadmap/process-phase.md) | cluster: roadmap | Autonomously process every open step in the next or current phase of a roadmap, then stop. Default execution scope of the /roadmap cluster. |
446
452
  | command | [`roadmap:process-step`](../.agent-src/commands/roadmap/process-step.md) | cluster: roadmap | Autonomously process the single next open step of a roadmap and stop. Smallest execution scope of the /roadmap cluster — one step in, one step out. |
447
453
  | command | [`rule-compliance-audit`](../.agent-src/commands/rule-compliance-audit.md) | | Audit rule trigger quality, simulate activation, detect overlaps, and find never-activating rules |
448
- | command | [`set-cost-profile`](../.agent-src/commands/set-cost-profile.md) | | Change the cost_profile in .agent-settings.yml — shows each profile's meaning and applies the selection |
454
+ | command | [`set-cost-profile`](../.agent-src/commands/set-cost-profile.md) | | Change the rule_loading_tier in .agent-settings.yml — shows each profile's meaning and applies the selection |
449
455
  | command | [`skill`](../.agent-src/commands/skill.md) | cluster: skill | Single-skill orchestrator — routes to preview. Non-destructive "what will this skill do?" before you run it. |
450
456
  | command | [`skill:preview`](../.agent-src/commands/skill/preview.md) | cluster: skill | Non-destructive preview of a skill — its declared steps, execution type, allowed tools, and file/command targets — before you run it. Read-only, no execution. |
451
457
  | command | [`skills`](../.agent-src/commands/skills.md) | cluster: skills | Skill discovery orchestrator — routes to discover. Local, explained skill recommendations over the catalog + role shortlists + optional local analytics. |
@@ -38,7 +38,7 @@ stability: stable
38
38
  - README "Quickstart" block — install → `/onboard` → `/work "first
39
39
  real task"`, contributor detail moved below the `## For contributors`
40
40
  fold.
41
- - Default `cost_profile` flipped from `minimal` to `balanced`;
41
+ - Default `rule_loading_tier` flipped from `minimal` to `balanced`;
42
42
  rationale in [`cost-profile-defaults.md`](cost-profile-defaults.md).
43
43
  - `/onboard` step 11 prints the Quickstart command list inline.
44
44
  - CI gate: `task smoke-quickstart` runs the installer into a tmpdir
@@ -55,6 +55,8 @@ column 1 of this table.
55
55
  | `skill` | — | `preview` | new cluster 2026-05-30 (`road-to-leaner-core-and-discovery` Phase 5) — non-destructive skill/command preview: surfaces the declared steps + files/commands a skill would touch before it runs, per [`skill-dry-run`](skill-dry-run.md). Singular `skill` (one target) vs plural `skills` (the catalog) by design. |
56
56
  | `image` | — | `analyse` · `create` · `verify` | new cluster 2026-05-31 (`road-to-character-image-fidelity` Phase 4) — character-image fidelity surface mirroring `/video:*`. `:analyse` extracts a per-feature spec from an image and diffs it against a Canon Spec down to the smallest mole (OCR for lettered tattoos, per-section severity scores, canon-breaking hard gate); `:create` assembles a max-fidelity anchors-first generation prompt from the Canon Spec, governance- + provider-gated, `AIV_DRYRUN=true` default; `:verify` runs the analyser in loop mode against a candidate and reports the gate verdict + remaining diff with plateau/oscillation/budget stop conditions. Skills: [`image-analyser`](../../skills/image-analyser/SKILL.md) + [`image-creator`](../../skills/image-creator/SKILL.md); schema/rubric/loop in [`canon-spec.md`](../../skills/image-analyser/canon-spec.md). |
57
57
 
58
+ | `profile` | — | `activate` · `deactivate` · `show` | new cluster 2026-06-02 (`road-to-session-profile-activation`) — session-profile activation: an ephemeral `runtime.active_packs` overlay that biases the surfaced command/skill set to the active pack closure, with no persistence and no execution-gating (recommendation-bias MVP). `:activate <name…>` resolves an alias (`config/discovery/session-profiles.yml`) or a raw pack id, fails fast on a not-installed pack, expands the `requires_hint` closure, and writes the overlay atomically to `agents/settings/.agent-settings.local.yml`; `:deactivate [name…]` clears it (or drops named packs, keeping deps a still-active pack needs); `:show` is the observability surface (active packs + surfaced/hidden counts). Overlay = runtime modulation of the existing `pack` axis, not a fifth axis (ADR-010 addendum). Library: `scripts/config/session_profiles.py`; schema in [`session-profile-overlay`](session-profile-overlay.md). |
59
+
58
60
  **Net change:** Phase 1 collapsed 15 atomics → 3 clusters; Phase 2
59
61
  collapses 26 atomics → 11 sub-command clusters. Sub-commands use
60
62
  colon syntax (`/cluster:sub`) so Claude Code's command palette can
@@ -10,7 +10,7 @@ keep-beta-until: 2026-08-14
10
10
  > Schema and semantics for the **Config Preset** axis introduced in
11
11
  > step-15 Phase 1 item 4. Records the **Cost Enforcement** model
12
12
  > (Council v3 action #3 prerequisite) so the preset loader can ship.
13
- > Boundary against `profile.id`, `pack.id`, and `cost_profile`:
13
+ > Boundary against `profile.id`, `pack.id`, and `rule_loading_tier`:
14
14
  > [`ADR-010`](../decisions/ADR-010-profile-pack-preset-boundary.md).
15
15
 
16
16
  ## Decision
@@ -136,7 +136,7 @@ no other axis may write preset-owned knobs.
136
136
 
137
137
  ## Non-goals
138
138
 
139
- - This contract does **not** define profiles, packs, or `cost_profile`.
139
+ - This contract does **not** define profiles, packs, or `rule_loading_tier`.
140
140
  See the corresponding contracts.
141
141
  - It does **not** ship a UI. CLI-first (`agent-config cost`,
142
142
  `agent-config preset set <id>`).
@@ -7,9 +7,9 @@ keep-beta-until: 2026-08-13
7
7
 
8
8
  > **Status:** beta · **Owner:** package maintainer · **Last reviewed:** 2026-05-14
9
9
  >
10
- > Normative contract for the **default `cost_profile`** new installs receive.
10
+ > Normative contract for the **default `rule_loading_tier`** new installs receive.
11
11
  > Profile semantics themselves are documented in
12
- > [`docs/customization.md` § cost_profile](../customization.md) and
12
+ > [`docs/customization.md` § rule_loading_tier](../customization.md) and
13
13
  > [`docs/contracts/rule-router.md`](rule-router.md); this file owns only the
14
14
  > **default-selection decision** and the rationale behind it.
15
15
 
@@ -20,7 +20,7 @@ DEFAULT_PROFILE = "balanced"
20
20
  ```
21
21
 
22
22
  `scripts/install.py` and `npx @event4u/agent-config init` write
23
- `cost_profile: balanced` into `.agent-settings.yml` for fresh installs
23
+ `rule_loading_tier: balanced` into `.agent-settings.yml` for fresh installs
24
24
  unless the user passes `--profile=minimal` or `--profile=full`.
25
25
 
26
26
  ## Profile table
@@ -64,7 +64,7 @@ at `balanced`:
64
64
  Token-budget pressure → flip in `.agent-settings.yml`:
65
65
 
66
66
  ```yaml
67
- cost_profile: minimal
67
+ rule_loading_tier: minimal
68
68
  ```
69
69
 
70
70
  …or pass `--profile=minimal` to `npx @event4u/agent-config init`.
@@ -77,7 +77,7 @@ CI must keep three surfaces in sync:
77
77
 
78
78
  - `scripts/install.py` — `DEFAULT_PROFILE` constant.
79
79
  - `config/agent-settings.template.yml` — comment block on the
80
- `cost_profile:` key.
80
+ `rule_loading_tier:` key.
81
81
  - `docs/customization.md` — cost-profile table default column.
82
82
 
83
83
  Reviewer guidance: a PR that changes any one of these must touch the
@@ -64,7 +64,7 @@
64
64
  "product-basic", "product-discovery",
65
65
  "finance-basic", "finance-advanced",
66
66
  "gtm-sales", "gtm-marketing",
67
- "ops-people", "founder-strategy", "small-business", "construction", "ai-video", "meta"
67
+ "ops-people", "founder-strategy", "small-business", "construction", "ai-video", "fun", "meta"
68
68
  ]
69
69
  },
70
70
  "lifecycle": {
@@ -42,13 +42,13 @@
42
42
  },
43
43
  "inputs": {
44
44
  "type": ["object", "null"],
45
- "description": "Profile / preset / cost_profile resolution chain. Null when the loader could not resolve any of them (broken settings).",
46
- "required": ["profile", "preset", "cost_profile", "source_per_knob"],
45
+ "description": "Profile / preset / rule_loading_tier resolution chain. Null when the loader could not resolve any of them (broken settings).",
46
+ "required": ["profile", "preset", "rule_loading_tier", "source_per_knob"],
47
47
  "additionalProperties": false,
48
48
  "properties": {
49
49
  "profile": {"type": ["string", "null"]},
50
50
  "preset": {"type": ["string", "null"]},
51
- "cost_profile": {"type": ["string", "null"]},
51
+ "rule_loading_tier": {"type": ["string", "null"]},
52
52
  "source_per_knob": {
53
53
  "type": "object",
54
54
  "description": "Map<knob, source>; source ∈ pack | profile | preset | user | env | runtime | default.",
@@ -88,14 +88,22 @@ counts and ids for downstream metrics.
88
88
 
89
89
  ## Cadence interaction
90
90
 
91
- | Cost profile | Visibility line |
91
+ | `memory.cadence` | Visibility line |
92
92
  |---|---|
93
- | `lean` | suppress unless `asks ≥ 3` |
94
- | `standard` | always when `asks ≥ 1` |
95
- | `verbose` | always when `asks ≥ 1` |
96
-
97
- Cost-profile lookup respects `.agent-settings.yml`'s `cost_profile`
98
- key. Default is `standard`.
93
+ | `auto` | suppress unless `asks ≥ 3` |
94
+ | `always` | always when `asks ≥ 1` |
95
+ | `never` | suppress entirely |
96
+
97
+ Cadence lookup respects `.agent-settings.yml`'s `memory.cadence` key.
98
+ Default is `always`. The legacy `memory.visibility: off` master switch
99
+ (above) still wins over any `memory.cadence` value.
100
+
101
+ > **History.** Before the 2026-06-01 `cost_profile` untangle this
102
+ > cadence was keyed off `cost_profile` with the values
103
+ > `lean | standard | verbose` — a collision with the rule-loading
104
+ > `cost_profile` (`minimal | balanced | full`) that made the `lean`
105
+ > branch unreachable on every real install. The cadence now owns its
106
+ > own `memory.cadence` key.
99
107
 
100
108
  ## End-of-run "Memory changed decisions" block
101
109
 
@@ -11,7 +11,7 @@ keep-beta-until: 2026-08-14
11
11
  > Phase 1 item 1. Profile answers *who is the user?* — audience
12
12
  > taxonomy that selects the default skill/command surface, README
13
13
  > entry-paragraph, and persona pre-selection. Boundary against
14
- > `preset.id`, `pack.id`, and `cost_profile`:
14
+ > `preset.id`, `pack.id`, and `rule_loading_tier`:
15
15
  > [`ADR-010`](../decisions/ADR-010-profile-pack-preset-boundary.md).
16
16
 
17
17
  ## Decision
@@ -128,7 +128,7 @@ Only changes to the **seed set** require an ADR.
128
128
  - This contract does **not** define preset knobs. See
129
129
  [`config-presets.md`](config-presets.md).
130
130
  - It does **not** define packs. See `workflow-packs.md` (Phase 2 item 7).
131
- - It does **not** override `cost_profile`. The rule-tier loader keeps
131
+ - It does **not** override `rule_loading_tier`. The rule-tier loader keeps
132
132
  its independent axis per
133
133
  [`cost-profile-defaults.md`](cost-profile-defaults.md).
134
134
  - It does **not** ship a UI. Profile selection happens in `/onboard`
@@ -0,0 +1,120 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-09-02
4
+ ---
5
+
6
+ # Session-profile overlay — contract
7
+
8
+ > **Status:** beta · **Owner:** package maintainer · **Last reviewed:** 2026-06-02
9
+ >
10
+ > Schema and semantics for the `runtime.active_packs` overlay shipped by the
11
+ > `/profile` command cluster. The overlay lets a developer activate a
12
+ > profile for the **current session** so only the matching packs'
13
+ > commands/skills are the surfaced set, then switch freely without
14
+ > persisting the choice. Locked decisions: the session-profile-activation
15
+ > roadmap Phase 0. Axis boundary: the
16
+ > [ADR-010 addendum](../decisions/ADR-010-profile-pack-preset-boundary.md).
17
+
18
+ ## Decision
19
+
20
+ The overlay is an **ephemeral, runtime modulation of the `pack` axis** — an
21
+ instance of the resolution chain's existing
22
+ `… → user/env/runtime overrides` link. It is **not** a fifth axis.
23
+
24
+ It selects which already-installed packs are *surfaced* this session; it
25
+ never installs, never persists, never gates execution.
26
+
27
+ ## On-disk shape
28
+
29
+ Written to `agents/settings/.agent-settings.local.yml` (gitignored,
30
+ deepest-winning cascade layer) — **never** the committed `.agent-settings.yml`.
31
+
32
+ ```yaml
33
+ runtime:
34
+ active_packs: [engineering-base, laravel, php] # expanded closure, sorted
35
+ ```
36
+
37
+ - `runtime.active_packs` — a list of installed pack ids: the transitive
38
+ `requires_hint` closure of the activated profile/pack seed set.
39
+ - Absent / empty / wrong-type → **no overlay** (full surface).
40
+
41
+ ## Activatable tokens
42
+
43
+ `/profile activate <name…>` accepts, for each name:
44
+
45
+ 1. a **session-profile alias** from `config/discovery/session-profiles.yml`
46
+ (`developer`, `po`, `finance`, `gtm`, `content`) → its seed pack list, or
47
+ 2. a **raw pack id** from `config/discovery/packs.yml` (`laravel`, `php`, …).
48
+
49
+ Multiple names union their closures. The seed set's transitive
50
+ `requires_hint` closure is expanded before writing. **Only installed packs
51
+ are activatable** — a not-installed seed pack fails fast (exit 2). Installed
52
+ set = the top-level `packs:` block in settings, or the full vocabulary when
53
+ no block is present (maintainer repo / base-only install).
54
+
55
+ ## Surface filter (recommendation-bias)
56
+
57
+ For each `command` / `skill` artefact in `dist/discovery/discovery-manifest.json`:
58
+
59
+ - **always surfaced** when it is **core-trust** (`trust.level == "core"`) or
60
+ unscoped (no `packs`);
61
+ - otherwise **surfaced iff** `packs ∩ active_packs ≠ ∅`;
62
+ - **no overlay → everything surfaced.**
63
+
64
+ Execution is **never gated**: an inactive-pack artefact still runs, with a
65
+ one-line "from inactive pack X" notice. Hard execution-gating is deferred
66
+ (host-dependent — see
67
+ [`session-host-capability-audit`](../../agents/settings/contexts/session-host-capability-audit.md)).
68
+
69
+ ## Lifecycle (locked: option a)
70
+
71
+ - **Activate / switch / deactivate** are explicit `/profile` sub-commands.
72
+ - The overlay **survives an IDE restart** (task-scoped). A new session emits
73
+ a **staleness notice** via the `profile-staleness` `session_start` hook —
74
+ it never silently resets (the registry-refresh Catch-22).
75
+ - **Kill-switch:** delete `runtime.active_packs` (or the local file).
76
+
77
+ ## Robustness invariants
78
+
79
+ - **Fail-open read** — a corrupt / unparseable / schema-invalid overlay is
80
+ ignored; the full surface returns. A misconfigured overlay never hides
81
+ artefacts.
82
+ - **Atomic write** — the helper writes via a temp file + `os.replace`, so a
83
+ concurrent reader never sees a half-written overlay.
84
+ - **Closure self-heal** — a closure dependency that is not installed is
85
+ dropped from the written set with a note, never blocking activation.
86
+
87
+ ## Reconciliation with the existing `--profile=<id>` install flag
88
+
89
+ The install/CLI flag `--profile=<minimal|balanced|full>`
90
+ (`scripts/install.py`) is a **legacy alias for `rule_loading_tier`** — it
91
+ sets the rule-loading cost tier, not an audience profile. The word
92
+ "profile" is overloaded across three distinct, orthogonal things; this
93
+ command does **not** add a fourth meaning:
94
+
95
+ | Surface | What it sets | Axis | Persists? |
96
+ |---|---|---|---|
97
+ | `install --profile=<minimal\|balanced\|full>` | `rule_loading_tier` (cost tier) | rule_loading_tier | yes |
98
+ | `profile.id` in settings (`founder`/`developer`/…) | audience identity → default surface + personas ([`profile-system`](profile-system.md)) | profile | yes |
99
+ | **`/profile activate <name>`** (this command) | `runtime.active_packs` — which installed packs are *surfaced* this session | pack (runtime overlay) | **no** |
100
+
101
+ The session overlay answers *which installed packs are surfaced right now?*.
102
+ It does **not** change `rule_loading_tier`, does **not** change
103
+ `profile.id`, and writes only the gitignored local file. The naming
104
+ collision is pre-existing; the overlay deliberately keeps to the `pack`
105
+ axis (ADR-010 addendum) so it adds no new axis despite sharing the word.
106
+
107
+ ## Implementation
108
+
109
+ - Library + CLI: `scripts/config/session_profiles.py`
110
+ (`activate` · `deactivate` · `show` · `surface` · `stale-notice`).
111
+ - Aliases: `config/discovery/session-profiles.yml`.
112
+ - Hook: `scripts/profile_staleness_hook.py` (session_start staleness notice).
113
+ - Tests: `tests/test_session_profiles.py`.
114
+
115
+ ## See also
116
+
117
+ - [`ADR-010 addendum`](../decisions/ADR-010-profile-pack-preset-boundary.md) — overlay ≠ fifth axis.
118
+ - [`profile-system`](profile-system.md) — the profile (audience) axis the overlay is reconciled against.
119
+ - [`command-clusters`](command-clusters.md) — the `/profile` cluster registration.
120
+ - [`session-host-capability-audit`](../../agents/settings/contexts/session-host-capability-audit.md) — why hard-gating + true session-reset are deferred.
@@ -58,7 +58,7 @@ defaults (config/agent-settings.template.yml)
58
58
  < project (<projectRoot>/settings/.agent-settings.yml, optional)
59
59
  ```
60
60
 
61
- Defaults come from the package template with `__COST_PROFILE__` /
61
+ Defaults come from the package template with `__RULE_LOADING_TIER__` /
62
62
  `__USER_TYPE__` placeholders substituted for their permissive defaults
63
63
  (`balanced` / `""`). Global and project layers are read with the typed
64
64
  subdir preferred over the legacy flat path. The route mirrors
@@ -69,7 +69,7 @@ Response (200):
69
69
 
70
70
  ```json
71
71
  {
72
- "values": { "cost_profile": "balanced", "...": "..." },
72
+ "values": { "rule_loading_tier": "balanced", "...": "..." },
73
73
  "lastModified": 1747749791842,
74
74
  "path": "settings/.agent-settings.yml",
75
75
  "legacyHints": { "user_name": "Matze" }
@@ -106,7 +106,7 @@ changes** modal. Request:
106
106
  }
107
107
  ```
108
108
 
109
- Response (200): `{ "changes": [{ "path": "cost_profile", "from": "minimal", "to": "balanced" }, ...] }`.
109
+ Response (200): `{ "changes": [{ "path": "rule_loading_tier", "from": "minimal", "to": "balanced" }, ...] }`.
110
110
 
111
111
  Errors: **409** on mtime drift; **422** on validation failure (`fields`
112
112
  populated).
@@ -49,9 +49,13 @@ cost_ladder:
49
49
  token_delta: <signed int> # per-request input token delta
50
50
  eur_delta: <float> # priced at reference_scale
51
51
  cumulative_pct: <signed float> # % of baseline.input_tokens_per_request
52
- confidence: measured | estimated | vendor-claim | pending
52
+ confidence: measured | estimated | vendor-claim | pending | available
53
53
  source_report: <relative path> # raw report this was derived from
54
54
  footnote: "<optional caveat>" # e.g. "Thin-Root files excluded"
55
+ - id: thin
56
+ ... # the thin-projection lever; ships behind
57
+ ... # the lean_projection.mode kill-switch
58
+ ... # (default eager-all) → confidence: available
55
59
  - id: condense
56
60
  ...
57
61
  - id: rtk
@@ -127,6 +131,15 @@ the cumulative (its raw value is the renderer's best guess from the
127
131
  raw report; it MUST NOT influence the headline until it flips to
128
132
  `measured`).
129
133
 
134
+ A rung with `confidence: available` is **measured** but ships behind a
135
+ default-off kill-switch (e.g. the `thin` rung gated on
136
+ `lean_projection.mode`, default `eager-all`). Its measured `token_delta`
137
+ is displayed, but — like `pending` — it contributes `0` to the default
138
+ cumulative / NETTO: the headline reflects what actually ships by default,
139
+ not the best achievable after an opt-in flip. The footnote states the
140
+ would-be total and the validation state. Only `measured`, `estimated`,
141
+ and `vendor-claim` rungs count toward the cumulative.
142
+
130
143
  ## Markdown shape (informational human dump)
131
144
 
132
145
  The `.md` sibling of every `value-v1.json` is informational — a
@@ -63,7 +63,7 @@ mergeable from the user-global file; every other key is silently ignored:
63
63
  ```
64
64
  name
65
65
  ide
66
- cost_profile
66
+ rule_loading_tier
67
67
  personal.bot_icon
68
68
  personal.autonomy
69
69
  telegraph.speak_scope
@@ -95,7 +95,7 @@ user-global layer. Non-root in-project layers (intermediate +
95
95
  ``<CWD>``) carry arbitrary keys — they live inside the project
96
96
  boundary, are tracked in git, and reviewed in PRs like any other
97
97
  config. Use a subdirectory `.agent-settings.yml` to scope a single
98
- field (e.g. a `cost_profile` override for `services/heavy-ml/`) without
98
+ field (e.g. a `rule_loading_tier` override for `services/heavy-ml/`) without
99
99
  duplicating the root file.
100
100
 
101
101
  The user-global file is created **only on explicit opt-in via the
@@ -169,7 +169,7 @@ is recovered on the next server boot.
169
169
  | Setting | Default | Description |
170
170
  |---|---|---|
171
171
  | `agent_config_version` | *(empty)* | Exact semver pin of the agent-config release (see above). Empty = unpinned. |
172
- | `cost_profile` | `balanced` | Token budget (`minimal`, `balanced`, `full`, `custom`) — rationale: [`docs/contracts/cost-profile-defaults.md`](contracts/cost-profile-defaults.md) |
172
+ | `rule_loading_tier` | `balanced` | Token budget (`minimal`, `balanced`, `full`, `custom`) — rationale: [`docs/contracts/cost-profile-defaults.md`](contracts/cost-profile-defaults.md) |
173
173
  | `personal.user_name` | *(empty)* | User's first name for personalized responses |
174
174
  | `personal.minimal_output` | `true` | Suppress intermediate output |
175
175
  | `personal.play_by_play` | `false` | Share intermediate findings during analysis |
@@ -202,7 +202,23 @@ if the key file's permissions drift.
202
202
 
203
203
  ### Cost profiles
204
204
 
205
- `cost_profile` is the master switch for rule-tier loading. The kernel
205
+ > **Four "cost" concepts don't confuse them.** Several settings sound like
206
+ > they steer spend; only one is the rule-loading footprint:
207
+ >
208
+ > | Concept | What it controls | What it's a lever for |
209
+ > |---|---|---|
210
+ > | `rule_loading_tier` *(this setting)* | How many behavioural rule tiers load each session | Token footprint of the rule layer (small, ~once per session) |
211
+ > | `memory.cadence` | Whether the `🧠 Memory: …` visibility line renders (`auto`/`always`/`never`) | Output noise — **not** spend |
212
+ > | `model.auto_switch` + a skill's `model_tier` | Which Claude model runs a skill (lite/medium/high → haiku/sonnet/opus) | The **dominant** per-turn spend lever (~10× delta) |
213
+ > | `/cost:report` + `cost.budgets` | Tracking actual token/USD spend + optional ceilings | Budget enforcement |
214
+ >
215
+ > Before the 2026-06-01 untangle, `rule_loading_tier` was named `cost_profile`
216
+ > **and** the same key also carried the `memory.cadence` values — one key, two
217
+ > colliding meanings. The rename split them so each lever owns its name. When
218
+ > a budget is tight, reach for the **model** lever first — lowering the rule
219
+ > tier saves little and drops guardrails.
220
+
221
+ `rule_loading_tier` is the master switch for rule-tier loading. The kernel
206
222
  (always-loaded Iron-Law floor, ≤ 26k chars across 9 rules) ships in every
207
223
  profile. Tier-1 and tier-2 rules are gated by profile and resolved at
208
224
  session start from `dist/router.json` (compiled by `scripts/compile_router.py`).
@@ -413,6 +429,32 @@ packs at install time via `npx @event4u/agent-config install` and the
413
429
  resulting `.agent-settings.yml` records which packs the project opted
414
430
  into.
415
431
 
432
+ ### Session profiles — surface one audience for the current session
433
+
434
+ Install every pack once, then **activate a profile per session** so only
435
+ the matching packs' commands/skills are the surfaced set:
436
+
437
+ - `/profile activate laravel` — surface the Laravel closure
438
+ (`laravel` + `php` + `engineering-base`) + core artefacts; everything
439
+ else is hidden from `/help` and the skill surface.
440
+ - `/profile activate po` — switch to the product-owner surface.
441
+ - `/profile show` — active packs + surfaced/hidden counts.
442
+ - `/profile deactivate` — full surface returns.
443
+
444
+ The activatable name is a session-profile alias
445
+ (`config/discovery/session-profiles.yml`: `developer`, `po`, `finance`,
446
+ `gtm`, `content`) or a raw pack id. It is **recommendation-bias only** —
447
+ an inactive-pack command still runs (with a one-line notice); execution is
448
+ never blocked. The choice is **ephemeral**: it writes
449
+ `runtime.active_packs` to the gitignored `agents/settings/.agent-settings.local.yml`,
450
+ never the committed config, and is cleared with `/profile deactivate`.
451
+ A new session emits a staleness reminder if a profile is still active.
452
+
453
+ This is a runtime view over the existing **pack** axis, not a new axis,
454
+ and is unrelated to the install `--profile=<minimal|balanced|full>` flag
455
+ (which sets `rule_loading_tier`). Full contract:
456
+ [`session-profile-overlay`](contracts/session-profile-overlay.md).
457
+
416
458
  ---
417
459
 
418
460
  ## Update check
@@ -497,7 +539,7 @@ Sample Markdown output:
497
539
  - [x] api-rate-limit-is-100rpm — accepted in step `refine`
498
540
  ```
499
541
 
500
- Disable for `cost_profile: minimal` CI runs by setting `explain.enable_last: false`
542
+ Disable for `rule_loading_tier: minimal` CI runs by setting `explain.enable_last: false`
501
543
  in `.agent-settings.yml`; the command then exits 0 with a one-line
502
544
  notice instead of producing a trace. Exit codes: `0` rendered or
503
545
  disabled · `1` no recent run found · `2` invocation error.