@event4u/agent-config 1.13.0 → 1.14.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 (252) hide show
  1. package/.agent-src/commands/agent-handoff.md +3 -0
  2. package/.agent-src/commands/agent-status.md +3 -0
  3. package/.agent-src/commands/agents-audit.md +4 -0
  4. package/.agent-src/commands/agents-cleanup.md +6 -1
  5. package/.agent-src/commands/agents-prepare.md +3 -0
  6. package/.agent-src/commands/analyze-reference-repo.md +4 -0
  7. package/.agent-src/commands/bug-fix.md +5 -1
  8. package/.agent-src/commands/bug-investigate.md +4 -0
  9. package/.agent-src/commands/chat-history-checkpoint.md +126 -0
  10. package/.agent-src/commands/chat-history-clear.md +5 -0
  11. package/.agent-src/commands/chat-history-resume.md +5 -0
  12. package/.agent-src/commands/chat-history.md +5 -0
  13. package/.agent-src/commands/check-current-md.md +126 -0
  14. package/.agent-src/commands/commit-in-chunks.md +98 -0
  15. package/.agent-src/commands/commit.md +4 -0
  16. package/.agent-src/commands/compress.md +3 -0
  17. package/.agent-src/commands/context-create.md +4 -0
  18. package/.agent-src/commands/context-refactor.md +4 -0
  19. package/.agent-src/commands/copilot-agents-init.md +3 -0
  20. package/.agent-src/commands/copilot-agents-optimize.md +3 -0
  21. package/.agent-src/commands/create-pr-description.md +4 -0
  22. package/.agent-src/commands/create-pr.md +4 -0
  23. package/.agent-src/commands/do-and-judge.md +4 -1
  24. package/.agent-src/commands/do-in-steps.md +3 -0
  25. package/.agent-src/commands/e2e-heal.md +4 -0
  26. package/.agent-src/commands/e2e-plan.md +4 -0
  27. package/.agent-src/commands/estimate-ticket.md +4 -1
  28. package/.agent-src/commands/feature-dev.md +4 -0
  29. package/.agent-src/commands/feature-explore.md +4 -0
  30. package/.agent-src/commands/feature-plan.md +4 -0
  31. package/.agent-src/commands/feature-refactor.md +4 -0
  32. package/.agent-src/commands/feature-roadmap.md +6 -0
  33. package/.agent-src/commands/fix-ci.md +4 -0
  34. package/.agent-src/commands/fix-portability.md +3 -0
  35. package/.agent-src/commands/fix-pr-bot-comments.md +4 -0
  36. package/.agent-src/commands/fix-pr-comments.md +4 -0
  37. package/.agent-src/commands/fix-pr-developer-comments.md +4 -0
  38. package/.agent-src/commands/fix-references.md +3 -0
  39. package/.agent-src/commands/fix-seeder.md +4 -0
  40. package/.agent-src/commands/implement-ticket.md +39 -13
  41. package/.agent-src/commands/jira-ticket.md +4 -0
  42. package/.agent-src/commands/judge.md +3 -0
  43. package/.agent-src/commands/memory-add.md +5 -3
  44. package/.agent-src/commands/memory-full.md +5 -2
  45. package/.agent-src/commands/memory-promote.md +7 -6
  46. package/.agent-src/commands/mode.md +3 -0
  47. package/.agent-src/commands/module-create.md +4 -0
  48. package/.agent-src/commands/module-explore.md +4 -0
  49. package/.agent-src/commands/onboard.md +24 -0
  50. package/.agent-src/commands/optimize-agents.md +4 -0
  51. package/.agent-src/commands/optimize-augmentignore.md +3 -0
  52. package/.agent-src/commands/optimize-rtk-filters.md +3 -0
  53. package/.agent-src/commands/optimize-skills.md +4 -0
  54. package/.agent-src/commands/override-create.md +4 -0
  55. package/.agent-src/commands/override-manage.md +4 -0
  56. package/.agent-src/commands/package-reset.md +3 -0
  57. package/.agent-src/commands/package-test.md +3 -0
  58. package/.agent-src/commands/prepare-for-review.md +4 -0
  59. package/.agent-src/commands/project-analyze.md +4 -0
  60. package/.agent-src/commands/project-health.md +4 -0
  61. package/.agent-src/commands/propose-memory.md +6 -8
  62. package/.agent-src/commands/quality-fix.md +4 -0
  63. package/.agent-src/commands/refine-ticket.md +4 -1
  64. package/.agent-src/commands/review-changes.md +4 -0
  65. package/.agent-src/commands/review-routing.md +4 -0
  66. package/.agent-src/commands/roadmap-create.md +7 -0
  67. package/.agent-src/commands/roadmap-execute.md +12 -1
  68. package/.agent-src/commands/rule-compliance-audit.md +4 -0
  69. package/.agent-src/commands/set-cost-profile.md +3 -0
  70. package/.agent-src/commands/sync-agent-settings.md +3 -0
  71. package/.agent-src/commands/sync-gitignore.md +3 -0
  72. package/.agent-src/commands/tests-create.md +4 -0
  73. package/.agent-src/commands/tests-execute.md +4 -0
  74. package/.agent-src/commands/threat-model.md +4 -0
  75. package/.agent-src/commands/update-form-request-messages.md +4 -0
  76. package/.agent-src/commands/upstream-contribute.md +4 -0
  77. package/.agent-src/commands/work.md +161 -0
  78. package/.agent-src/guidelines/agent-infra/engineering-memory-data-format.md +2 -6
  79. package/.agent-src/guidelines/agent-infra/layered-settings.md +0 -1
  80. package/.agent-src/guidelines/agent-infra/memory-access.md +0 -7
  81. package/.agent-src/guidelines/agent-infra/role-contracts.md +2 -4
  82. package/.agent-src/guidelines/agent-infra/self-improvement-pipeline.md +0 -1
  83. package/.agent-src/guidelines/php/patterns/strategy.md +180 -2
  84. package/.agent-src/personas/README.md +0 -1
  85. package/.agent-src/rules/artifact-drafting-protocol.md +7 -2
  86. package/.agent-src/rules/artifact-engagement-recording.md +133 -0
  87. package/.agent-src/rules/ask-when-uncertain.md +18 -13
  88. package/.agent-src/rules/augment-portability.md +8 -0
  89. package/.agent-src/rules/autonomous-execution.md +158 -0
  90. package/.agent-src/rules/chat-history.md +147 -118
  91. package/.agent-src/rules/cli-output-handling.md +26 -3
  92. package/.agent-src/rules/command-suggestion.md +133 -0
  93. package/.agent-src/rules/commit-policy.md +99 -0
  94. package/.agent-src/rules/direct-answers.md +114 -0
  95. package/.agent-src/rules/docs-sync.md +36 -0
  96. package/.agent-src/rules/downstream-changes.md +10 -9
  97. package/.agent-src/rules/improve-before-implement.md +9 -6
  98. package/.agent-src/rules/language-and-tone.md +81 -6
  99. package/.agent-src/rules/non-destructive-by-default.md +117 -0
  100. package/.agent-src/rules/package-ci-checks.md +4 -0
  101. package/.agent-src/rules/preservation-guard.md +20 -0
  102. package/.agent-src/rules/roadmap-progress-sync.md +103 -30
  103. package/.agent-src/rules/scope-control.md +42 -1
  104. package/.agent-src/rules/size-enforcement.md +1 -3
  105. package/.agent-src/rules/skill-quality.md +3 -8
  106. package/.agent-src/rules/ui-audit-before-build.md +106 -0
  107. package/.agent-src/rules/user-interaction.md +82 -50
  108. package/.agent-src/scripts/update_roadmap_progress.py +17 -5
  109. package/.agent-src/skills/blade-ui/SKILL.md +30 -5
  110. package/.agent-src/skills/command-routing/SKILL.md +32 -0
  111. package/.agent-src/skills/command-writing/SKILL.md +41 -2
  112. package/.agent-src/skills/description-assist/SKILL.md +21 -0
  113. package/.agent-src/skills/estimate-ticket/SKILL.md +0 -1
  114. package/.agent-src/skills/existing-ui-audit/SKILL.md +187 -0
  115. package/.agent-src/skills/fe-design/SKILL.md +72 -60
  116. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +4 -0
  117. package/.agent-src/skills/flux/SKILL.md +31 -4
  118. package/.agent-src/skills/guideline-writing/SKILL.md +24 -2
  119. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +51 -9
  120. package/.agent-src/skills/livewire/SKILL.md +30 -4
  121. package/.agent-src/skills/md-language-check/SKILL.md +103 -0
  122. package/.agent-src/skills/php-coder/SKILL.md +24 -0
  123. package/.agent-src/skills/react-shadcn-ui/SKILL.md +121 -0
  124. package/.agent-src/skills/refine-prompt/SKILL.md +220 -0
  125. package/.agent-src/skills/refine-ticket/SKILL.md +2 -4
  126. package/.agent-src/skills/roadmap-management/SKILL.md +10 -3
  127. package/.agent-src/skills/rule-writing/SKILL.md +23 -1
  128. package/.agent-src/skills/skill-writing/SKILL.md +1 -3
  129. package/.agent-src/skills/upstream-contribute/SKILL.md +1 -1
  130. package/.agent-src/skills/using-git-worktrees/SKILL.md +3 -1
  131. package/.agent-src/templates/AGENTS.md +24 -6
  132. package/.agent-src/templates/agent-settings.md +149 -0
  133. package/.agent-src/templates/roadmaps.md +8 -2
  134. package/.agent-src/templates/scripts/implement_ticket/__init__.py +63 -26
  135. package/.agent-src/templates/scripts/implement_ticket/__main__.py +8 -2
  136. package/.agent-src/templates/scripts/telemetry/__init__.py +42 -0
  137. package/.agent-src/templates/scripts/telemetry/aggregator.py +154 -0
  138. package/.agent-src/templates/scripts/telemetry/boundary.py +171 -0
  139. package/.agent-src/templates/scripts/telemetry/engagement.py +238 -0
  140. package/.agent-src/templates/scripts/telemetry/report_renderer.py +170 -0
  141. package/.agent-src/templates/scripts/telemetry/settings.py +112 -0
  142. package/.agent-src/templates/scripts/telemetry_record.py +166 -0
  143. package/.agent-src/templates/scripts/telemetry_report.py +161 -0
  144. package/.agent-src/templates/scripts/telemetry_status.py +142 -0
  145. package/.agent-src/templates/scripts/work_engine/__init__.py +58 -0
  146. package/.agent-src/templates/scripts/work_engine/__main__.py +9 -0
  147. package/.agent-src/templates/scripts/work_engine/cli.py +592 -0
  148. package/.agent-src/templates/scripts/{implement_ticket → work_engine}/delivery_state.py +7 -0
  149. package/.agent-src/templates/scripts/work_engine/directives/__init__.py +33 -0
  150. package/.agent-src/templates/scripts/work_engine/directives/backend/__init__.py +98 -0
  151. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/analyze.py +1 -1
  152. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/implement.py +2 -2
  153. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/memory.py +1 -1
  154. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/plan.py +1 -1
  155. package/.agent-src/templates/scripts/work_engine/directives/backend/refine.py +396 -0
  156. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/report.py +36 -4
  157. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/test.py +2 -2
  158. package/.agent-src/templates/scripts/{implement_ticket/steps → work_engine/directives/backend}/verify.py +2 -2
  159. package/.agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +116 -0
  160. package/.agent-src/templates/scripts/work_engine/directives/mixed/contract.py +254 -0
  161. package/.agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +229 -0
  162. package/.agent-src/templates/scripts/work_engine/directives/mixed/ui.py +231 -0
  163. package/.agent-src/templates/scripts/work_engine/directives/ui/__init__.py +113 -0
  164. package/.agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +44 -0
  165. package/.agent-src/templates/scripts/work_engine/directives/ui/apply.py +241 -0
  166. package/.agent-src/templates/scripts/work_engine/directives/ui/audit.py +414 -0
  167. package/.agent-src/templates/scripts/work_engine/directives/ui/design.py +335 -0
  168. package/.agent-src/templates/scripts/work_engine/directives/ui/polish.py +510 -0
  169. package/.agent-src/templates/scripts/work_engine/directives/ui/review.py +468 -0
  170. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +119 -0
  171. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +37 -0
  172. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +165 -0
  173. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +66 -0
  174. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +62 -0
  175. package/.agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +115 -0
  176. package/.agent-src/templates/scripts/work_engine/dispatcher.py +331 -0
  177. package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +54 -0
  178. package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +32 -0
  179. package/.agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +103 -0
  180. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +44 -0
  181. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +42 -0
  182. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_heartbeat.py +50 -0
  183. package/.agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_turn_check.py +49 -0
  184. package/.agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +53 -0
  185. package/.agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +50 -0
  186. package/.agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +52 -0
  187. package/.agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +84 -0
  188. package/.agent-src/templates/scripts/work_engine/hooks/context.py +66 -0
  189. package/.agent-src/templates/scripts/work_engine/hooks/events.py +44 -0
  190. package/.agent-src/templates/scripts/work_engine/hooks/exceptions.py +79 -0
  191. package/.agent-src/templates/scripts/work_engine/hooks/registry.py +60 -0
  192. package/.agent-src/templates/scripts/work_engine/hooks/runner.py +73 -0
  193. package/.agent-src/templates/scripts/work_engine/hooks/settings.py +141 -0
  194. package/.agent-src/templates/scripts/work_engine/intent/__init__.py +47 -0
  195. package/.agent-src/templates/scripts/work_engine/intent/classify.py +280 -0
  196. package/.agent-src/templates/scripts/work_engine/migration/__init__.py +8 -0
  197. package/.agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +199 -0
  198. package/.agent-src/templates/scripts/work_engine/resolvers/__init__.py +22 -0
  199. package/.agent-src/templates/scripts/work_engine/resolvers/diff.py +106 -0
  200. package/.agent-src/templates/scripts/work_engine/resolvers/file.py +113 -0
  201. package/.agent-src/templates/scripts/work_engine/resolvers/prompt.py +90 -0
  202. package/.agent-src/templates/scripts/work_engine/scoring/__init__.py +14 -0
  203. package/.agent-src/templates/scripts/work_engine/scoring/confidence.py +300 -0
  204. package/.agent-src/templates/scripts/work_engine/stack/__init__.py +31 -0
  205. package/.agent-src/templates/scripts/work_engine/stack/detect.py +187 -0
  206. package/.agent-src/templates/scripts/work_engine/state.py +641 -0
  207. package/.claude-plugin/marketplace.json +105 -2
  208. package/AGENTS.md +36 -8
  209. package/CHANGELOG.md +534 -0
  210. package/README.md +125 -4
  211. package/config/agent-settings.template.yml +45 -0
  212. package/config/gitignore-block.txt +4 -0
  213. package/docs/architecture.md +28 -1
  214. package/docs/development.md +1 -1
  215. package/docs/getting-started.md +2 -2
  216. package/docs/installation.md +86 -0
  217. package/docs/showcase.md +204 -0
  218. package/package.json +1 -1
  219. package/scripts/agent-config +199 -0
  220. package/scripts/audit_cloud_compatibility.py +288 -0
  221. package/scripts/build_cloud_bundle.py +458 -0
  222. package/scripts/build_linear_digest.py +263 -0
  223. package/scripts/chat_history.py +796 -7
  224. package/scripts/check_compression.py +139 -0
  225. package/scripts/check_iron_law_prominence.py +143 -0
  226. package/scripts/check_md_language.py +159 -0
  227. package/scripts/check_portability.py +36 -0
  228. package/scripts/check_reply_consistency.py +140 -0
  229. package/scripts/command_suggester/__init__.py +51 -0
  230. package/scripts/command_suggester/cooldown.py +132 -0
  231. package/scripts/command_suggester/loader.py +70 -0
  232. package/scripts/command_suggester/match.py +180 -0
  233. package/scripts/command_suggester/rank.py +120 -0
  234. package/scripts/command_suggester/render.py +86 -0
  235. package/scripts/command_suggester/sanitize.py +113 -0
  236. package/scripts/command_suggester/settings.py +125 -0
  237. package/scripts/command_suggester/types.py +78 -0
  238. package/scripts/hooks/augment-chat-history.sh +56 -0
  239. package/scripts/install-hooks.sh +67 -0
  240. package/scripts/install.py +150 -33
  241. package/scripts/lint_marketplace.py +27 -0
  242. package/scripts/migrate_command_suggestions.py +151 -0
  243. package/scripts/schemas/command.schema.json +41 -0
  244. package/scripts/skill_linter.py +67 -0
  245. package/scripts/sync_agent_settings.py +42 -12
  246. package/templates/consumer-settings/augment-cli-hooks.json +54 -0
  247. package/templates/consumer-settings/claude-settings.json +55 -1
  248. package/.agent-src/templates/scripts/implement_ticket/cli.py +0 -171
  249. package/.agent-src/templates/scripts/implement_ticket/dispatcher.py +0 -134
  250. package/.agent-src/templates/scripts/implement_ticket/steps/__init__.py +0 -49
  251. package/.agent-src/templates/scripts/implement_ticket/steps/refine.py +0 -140
  252. /package/.agent-src/templates/scripts/{implement_ticket → work_engine}/persona_policy.py +0 -0
@@ -0,0 +1,220 @@
1
+ ---
2
+ name: "refine-prompt"
3
+ description: "Reconstruct a free-form prompt into actionable AC + assumptions + confidence band before the engine plans — '/work \"…\"', 'baue X', 'ist der Prompt klar genug für die Engine?'."
4
+ personas:
5
+ - developer
6
+ - senior-engineer
7
+ - ai-agent
8
+ source: package
9
+ execution:
10
+ type: assisted
11
+ handler: internal
12
+ allowed_tools: []
13
+ ---
14
+
15
+ # Refine Prompt
16
+
17
+ > Move a free-form prompt from "raw text" to "engine-ready" in one run.
18
+ > Produces reconstructed acceptance criteria, explicit assumptions,
19
+ > and a confidence band that decides whether the engine proceeds
20
+ > silently, halts for confirmation, or refuses to plan.
21
+ >
22
+ > Sibling of [`refine-ticket`](../refine-ticket/SKILL.md) — same
23
+ > reconstruction-of-intent pattern, different input shape. Tickets
24
+ > arrive structured (id, title, AC); prompts arrive as one string.
25
+
26
+ ## When to use
27
+
28
+ - The user invokes `/work "<prompt>"` or pastes a free-form request.
29
+ - The dispatcher hits `input.kind="prompt"` in the `refine` step.
30
+ - A prompt looks ambiguous, broad, or scope-undefined and the user
31
+ asks "ist das klar genug, um loszulegen?".
32
+ - Before any plan/apply step on prompt-driven work — never after.
33
+
34
+ ## When NOT to use (near-misses)
35
+
36
+ | Phrasing | Route to |
37
+ |---|---|
38
+ | "refine this ticket" | [`refine-ticket`](../refine-ticket/SKILL.md) |
39
+ | "estimate this prompt" | not supported — score then estimate downstream |
40
+ | "plan this feature" | `/feature-plan` (downstream) |
41
+ | "is this a duplicate?" | `validate-feature-fit` (sub-skill, post-refine) |
42
+
43
+ `refine-prompt` is the *first* gate on prompt-driven flow. It does not
44
+ plan, does not implement, does not write back anywhere.
45
+
46
+ ## Input
47
+
48
+ Exactly one path: a non-empty raw string carried in
49
+ `state.input.data.raw` (built by [`work_engine.resolvers.prompt`](../../templates/scripts/work_engine/resolvers/prompt.py)).
50
+ No branch detection, no URL parsing, no clipboard fallback — the
51
+ calling command (`/work`) owns prompt capture; this skill only refines.
52
+
53
+ If `raw` is missing, empty, or whitespace-only the resolver already
54
+ raised `PromptResolverError`. The skill never receives that input.
55
+
56
+ ## Procedure
57
+
58
+ ### 1. Read and analyze the prompt
59
+
60
+ Examine the raw text top to bottom *before* changing anything in
61
+ state. Identify the *single* desired outcome in one sentence —
62
+ verb + object + observable result. If the prompt names two
63
+ unrelated outcomes (e.g. "fix login AND refactor the dashboard"),
64
+ record both but flag scope-overload in step 5; the score will
65
+ land in `medium` or `low`.
66
+
67
+ This is an analysis pass, not an execution pass. The skill does
68
+ not modify the prompt, infer code changes, or call any tool — it
69
+ investigates the input and produces a structured envelope the
70
+ dispatcher reads.
71
+
72
+ ### 2. Enumerate explicit constraints
73
+
74
+ Pull every concrete signal from the prompt verbatim:
75
+
76
+ - **Files / modules** named in the text (`UserController`,
77
+ `auth.service.ts`, `migrations/2024_…`).
78
+ - **Behaviour anchors** — endpoints, routes, commands, fixtures.
79
+ - **Hard rules** — "must not break X", "without changing the API",
80
+ "keep backwards compat".
81
+
82
+ Constraints come from the prompt only. Inferred constraints belong in
83
+ step 3 (assumptions), never here.
84
+
85
+ ### 3. Infer reasonable assumptions
86
+
87
+ Anything the prompt implies but does not state. Examples:
88
+
89
+ - "fix the login bug" → assumes the bug is in the existing `auth/`
90
+ module (no new auth provider).
91
+ - "add caching" → assumes the project's primary cache driver
92
+ (per `.agent-settings.yml` / `config/cache.php`).
93
+ - "speed up the export" → assumes "faster" means runtime, not memory.
94
+
95
+ Each assumption is a single line, prefixed with `assumes:`. The
96
+ medium-band halt surfaces them verbatim — no rewording, no
97
+ explanations.
98
+
99
+ ### 4. Generate the AC list
100
+
101
+ Three to seven bullet points. Each bullet is observable and
102
+ testable in the project's existing test surface (Pest / Jest /
103
+ pytest / etc.). Avoid:
104
+
105
+ - "works correctly" / "is fast" / "looks better" (untestable)
106
+ - "no regressions" (the test suite already covers that)
107
+ - "follows best practices" (not an AC)
108
+
109
+ Anchor each bullet to a constraint from step 2 or an assumption from
110
+ step 3 — never both implicit.
111
+
112
+ ### 5. Score confidence
113
+
114
+ Delegate to [`scripts.work_engine.scoring.confidence`](../../templates/scripts/work_engine/scoring/confidence.py):
115
+
116
+ ```python
117
+ from work_engine.scoring.confidence import score
118
+ result = score(raw=prompt_raw, ac=reconstructed_ac, assumptions=assumptions)
119
+ # result.band ∈ {"high", "medium", "low"}
120
+ # result.score ∈ [0.0, 1.0]
121
+ # result.dimensions: dict[str, int] # 0–2 per dimension
122
+ # result.reasons: list[str] # human-readable rationale
123
+ ```
124
+
125
+ The rubric (5 dimensions × 0–2, sum / 10) and band thresholds
126
+ (`high ≥ 0.8`, `medium 0.5–0.79`, `low < 0.5`) are owned by
127
+ `confidence.py`. Do not re-derive them in prose.
128
+
129
+ ## Band-action mapping
130
+
131
+ The `refine` dispatcher step in `directives/backend/refine.py` reads
132
+ the score and returns one of three outcomes — the skill does not
133
+ decide the action, only produces the inputs.
134
+
135
+ | Band | Outcome | What the user sees |
136
+ |---|---|---|
137
+ | `high` | `SUCCESS` | Silent proceed; AC + assumptions land in the delivery report |
138
+ | `medium` | `PARTIAL` | Assumptions report halt: numbered list of `assumes:` lines + AC, user confirms or edits |
139
+ | `low` | `BLOCKED` | One clarifying question (per [`ask-when-uncertain`](../../rules/ask-when-uncertain.md) Iron Law) |
140
+
141
+ ## Output format
142
+
143
+ The skill emits a structured envelope; the dispatcher renders it.
144
+ Required fields, in order:
145
+
146
+ 1. **Goal** — single sentence, verb + object + observable result
147
+ 2. **Acceptance criteria** — numbered list, 3–7 entries, each
148
+ anchored to a step-2 constraint or a step-3 assumption
149
+ 3. **Assumptions** — bullet list, each line prefixed `assumes:`
150
+ 4. **Confidence** — band + score + per-dimension breakdown from
151
+ `work_engine.scoring.confidence`
152
+
153
+ The shape below is the rendered surface for `medium` / `low`
154
+ halts; for `high` the same envelope lands in the delivery report
155
+ without a halt.
156
+
157
+ ````markdown
158
+ ## Reconstructed prompt
159
+
160
+ **Goal:** <one sentence, verb + object + observable result>
161
+
162
+ **Acceptance criteria:**
163
+ 1. <bullet>
164
+ 2. <bullet>
165
+ 3. <bullet>
166
+
167
+ **Assumptions:**
168
+ - assumes: <line>
169
+ - assumes: <line>
170
+
171
+ **Confidence:** medium (0.62) — goal_clarity 2 · scope_boundary 1 · ac_evidence 2 · stack_data 1 · reversibility 0
172
+ ````
173
+
174
+ For `low`, the question replaces the AC list:
175
+
176
+ ```
177
+ > The prompt does not name <missing dimension>.
178
+ >
179
+ > 1. <option that resolves the gap>
180
+ > 2. <alternative resolution>
181
+ > 3. <skip / abandon>
182
+ ```
183
+
184
+ ## Gotchas
185
+
186
+ - The model invents AC that *sound* observable but aren't anchored
187
+ in the prompt or a concrete file. Every AC must trace to a step-2
188
+ constraint or a step-3 assumption — no free-floating bullets.
189
+ - Assumptions are not commitments. The medium-band halt is the
190
+ user's chance to flip them; the skill never asserts an assumption
191
+ as fact.
192
+ - The scorer is heuristic, not LLM-based. Token count is not a
193
+ signal — a 200-word prompt can score `low` if the goal is vague,
194
+ and a 20-word prompt can score `high` if scope is unambiguous.
195
+ - UI-shaped prompts ("redesign the dashboard", "make the form
196
+ prettier") score `low` on `stack_data` until R3 lands the UI
197
+ directive set; band-action is a pointer to R3, not a refusal.
198
+
199
+ ## Do NOT
200
+
201
+ - Do NOT call this skill on `input.kind="ticket"` — that path runs
202
+ through [`refine-ticket`](../refine-ticket/SKILL.md).
203
+ - Do NOT auto-confirm assumptions on the user's behalf in the
204
+ medium-band halt. The halt is the contract.
205
+ - Do NOT stack multiple clarifying questions in the low-band halt.
206
+ Iron Law: one question per turn.
207
+ - Do NOT mutate `state.input.data.raw`. The original prompt stays
208
+ verbatim for replay; reconstructed output lands in
209
+ `data.reconstructed_ac` and `data.assumptions`.
210
+ - Do NOT re-derive band thresholds in prose. They live in
211
+ `confidence.py` and only there.
212
+
213
+ ## See also
214
+
215
+ - [`refine-ticket`](../refine-ticket/SKILL.md) — sibling for ticket-shaped input
216
+ - [`work_engine.resolvers.prompt`](../../templates/scripts/work_engine/resolvers/prompt.py) — envelope builder
217
+ - [`work_engine.scoring.confidence`](../../templates/scripts/work_engine/scoring/confidence.py) — rubric + band thresholds
218
+ - [`ask-when-uncertain`](../../rules/ask-when-uncertain.md) — one-question-per-turn Iron Law
219
+ - [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md) — this skill was drafted under it
220
+ - `agents/roadmaps/archive/road-to-prompt-driven-execution.md` — Phase 3 owns this skill (archived on completion)
@@ -130,7 +130,7 @@ Then run the deterministic detection helper — do **not** re-derive trigger
130
130
  logic in prose:
131
131
 
132
132
  ```bash
133
- python3 scripts/refine_ticket_detect.py <ticket-body-file>
133
+ ./agent-config refine-ticket:detect <ticket-body-file>
134
134
  # or, inside the skill run:
135
135
  from scripts.refine_ticket_detect import detect, load_map
136
136
  decision = detect(ticket_body, load_map(), cwd=Path.cwd())
@@ -206,8 +206,7 @@ open a planning doc.
206
206
 
207
207
  ## Output template
208
208
 
209
- Frozen per Q25 (see
210
- [`road-to-ticket-refinement.md`](../../../agents/roadmaps/road-to-ticket-refinement.md)).
209
+ Frozen per Q25.
211
210
 
212
211
  ````markdown
213
212
  ## Refined ticket
@@ -306,5 +305,4 @@ re-probe on project change.
306
305
  - [`feature-explore`](../../commands/feature-explore.md) — upstream idea capture; hints at `/refine-ticket` when input looks like a ticket
307
306
  - [`feature-plan`](../../commands/feature-plan.md) — downstream planning
308
307
  - [`adversarial-review`](../adversarial-review/SKILL.md) — same `critical-challenger` persona, different stage (post-plan)
309
- - [`road-to-ticket-refinement.md`](../../../agents/roadmaps/road-to-ticket-refinement.md) — governing roadmap
310
308
  - [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md) — this skill was drafted under it
@@ -138,8 +138,14 @@ Every roadmap implicitly includes these gates (run after each step that changes
138
138
  1. Ask the user for goal, context-create, and phases.
139
139
  2. Use the template structure from `.augment/templates/roadmaps.md`.
140
140
  3. Review with the user iteratively until approved.
141
- 4. Save with a kebab-case filename (e.g. `optimize-webhook-jobs.md`).
142
- 5. Regenerate the dashboard so the new roadmap is included.
141
+ 4. **Branch & release questions ask at most once, only if genuinely useful.**
142
+ Default: stay on current branch, no version numbers in roadmap.
143
+ Only propose a separate branch with concrete evidence (e.g. risky
144
+ migration → spike branch). Never include releases, deprecation dates,
145
+ or git tags in roadmap text. If user declines, do **not** re-propose
146
+ during `roadmap-execute`. Decline = silence. See [`scope-control`](../../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
147
+ 5. Save with a kebab-case filename (e.g. `optimize-webhook-jobs.md`).
148
+ 6. Regenerate the dashboard so the new roadmap is included.
143
149
 
144
150
  ### Executing a roadmap
145
151
 
@@ -303,4 +309,5 @@ The dashboard is a **read-only snapshot**. Do not edit it by hand — regenerate
303
309
  - Do NOT archive roadmaps with open `[ ]` items without asking the user.
304
310
  - Do NOT delete roadmaps — always move to `archive/` or `skipped/`.
305
311
  - Do NOT use `skipped/` as a dumping ground for partially-finished work — that is what `archive/` with deferred items is for.
306
- - Do NOT assign version numbers, git tags, or release identifiers to phases. Roadmaps plan work; releases and tags are decided by the user separately.
312
+ - Do NOT assign version numbers, git tags, deprecation dates, or release identifiers to phases. Hard rule see [`scope-control`](../../rules/scope-control.md#git-operations--permission-gated).
313
+ - Do NOT propose a branch switch while executing a roadmap. Branch question is settled at creation; declined or never-asked = silent. See [`scope-control`](../../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
@@ -4,6 +4,8 @@ description: "Use when creating or editing a rule in .agent-src.uncompressed/rul
4
4
  source: package
5
5
  ---
6
6
 
7
+ <!-- cloud_safe: degrade -->
8
+
7
9
  # rule-writing
8
10
 
9
11
  ## When to use
@@ -100,7 +102,8 @@ the PR or split by responsibility.
100
102
  → must report **0 FAIL**.
101
103
  * Run `bash scripts/compress.sh --sync` to regenerate `.agent-src/rules/{name}.md`.
102
104
  * Run `python3 scripts/compress.py --generate-tools` to project into `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules`.
103
- * Run the full CI pipeline locally each script directly must exit 0 except for tolerated warnings.
105
+ * Run the full CI pipeline locally (see `Taskfile.yml` in this repo for
106
+ the script list) — must exit 0 except for tolerated warnings.
104
107
 
105
108
  ## Frontmatter shape
106
109
 
@@ -137,6 +140,25 @@ source: package # or project for consumer-local rules
137
140
  * Do NOT skip the linter
138
141
  * Do NOT create a rule when a guideline or skill is the right shape
139
142
 
143
+ ## Cloud Behavior
144
+
145
+ On cloud surfaces (Claude.ai Web, Skills API) the package's
146
+ `scripts/skill_linter.py`, `scripts/compress.py`, and `task` runner
147
+ are not reachable. The skill still applies — with prose-only
148
+ validation:
149
+
150
+ * Emit the full rule file as a copyable Markdown block. Do not
151
+ attempt to write to disk.
152
+ * Self-check the frontmatter against the rules: `type` is `always`
153
+ or `auto`, `description` is trigger-shaped, `alwaysApply` matches
154
+ `type`.
155
+ * Self-check the body: under the size budget (200 lines hard,
156
+ 120 soft), trigger sentence first, no embedded procedures.
157
+ * Tell the user to save under `.agent-src.uncompressed/rules/{name}.md`
158
+ and run `task sync && task lint-skills` locally before committing.
159
+ * Do not call the linter or compressor — they only run on the
160
+ user's machine.
161
+
140
162
  ## Examples
141
163
 
142
164
  Good description (trigger-shaped, names domain + symptoms):
@@ -173,9 +173,7 @@ Present the stub as a numbered-options prompt (per `user-interaction`):
173
173
  ```
174
174
 
175
175
  Nothing is committed without the user's pick. If the user picks *skip*,
176
- record it in the commit message (`Eval stub: deferred`). See
177
- [`road-to-trigger-evals.md`](../../../agents/roadmaps/archive/road-to-trigger-evals.md)
178
- Phase 1 for the runner and expected format; peer examples:
176
+ record it in the commit message (`Eval stub: deferred`). Peer examples:
179
177
  `php-coder/evals/triggers.json`, `eloquent/evals/triggers.json`,
180
178
  `skill-writing/evals/triggers.json`.
181
179
 
@@ -182,7 +182,7 @@ If the contribution originates from a proposal under `agents/proposals/`
182
182
  run the Stage-4 gate before opening the PR:
183
183
 
184
184
  ```bash
185
- python3 scripts/check_proposal.py agents/proposals/{slug}.md
185
+ ./agent-config proposal:check agents/proposals/{slug}.md
186
186
  ```
187
187
 
188
188
  **Hard refusal rule:** if `check_proposal.py` exits non-zero, STOP —
@@ -68,10 +68,12 @@ Stop at the first match — do not ask if discovered:
68
68
 
69
69
  Ask format:
70
70
 
71
- > 1. `.worktrees/` — project-local, hidden (recommended)
71
+ > 1. `.worktrees/` — project-local, hidden
72
72
  > 2. `worktrees/` — project-local, visible
73
73
  > 3. `~/.config/agent-config/worktrees/<project>/` — global
74
74
 
75
+ **Recommendation: 1 — `.worktrees/`** — project-local keeps the worktree next to the repo (easy cleanup), and the leading dot keeps it out of `ls`. Caveat: pick 3 if multiple repos must share a single worktree root.
76
+
75
77
  ### 3. Verify ignore-safety (project-local only)
76
78
 
77
79
  ```bash
@@ -34,12 +34,30 @@
34
34
 
35
35
  ### Recommended entry flow
36
36
 
37
- For most tickets feature, bug fix, or refactor start with
38
- [`/implement-ticket`](.augment/commands/implement-ticket.md). It drives the
39
- linear flow `refine memory analyze → plan → implement → test → verify →
40
- report` with block-on-ambiguity semantics and no auto-git. Persona comes from
41
- `.agent-settings.yml` (`roles.active_role`). Use `/commit` and `/create-pr`
42
- explicitly after the delivery report.
37
+ Two entrypoints share the same engine and Option-A loop; pick by input shape:
38
+
39
+ | You have | Command | Envelope |
40
+ |---|---|---|
41
+ | Ticket id, URL, or pasted ticket payload | [`/implement-ticket`](.augment/commands/implement-ticket.md) | `input.kind="ticket"` |
42
+ | Free-form goal, no ticket | [`/work`](.augment/commands/work.md) | `input.kind="prompt"` |
43
+
44
+ Both drive the linear flow `refine → memory → analyze → plan → implement →
45
+ test → verify → report` with block-on-ambiguity semantics and no auto-git.
46
+
47
+ `/work` adds a confidence-band gate at `refine`: the
48
+ [`refine-prompt`](.augment/skills/refine-prompt/SKILL.md) skill scores the
49
+ prompt on five dimensions and the engine proceeds **silently** on `high`,
50
+ halts with an **assumptions report** on `medium`, or halts with **one
51
+ clarifying question** on `low` (per the `ask-when-uncertain` Iron Law).
52
+ UI-shaped prompts route through the product UI track (`directive_set`
53
+ `ui` / `ui-trivial` / `mixed`) — `audit → design → apply → review →
54
+ polish` with a hard audit gate before any `apply`.
55
+
56
+ Persona comes from `.agent-settings.yml` (`roles.active_role`). Use
57
+ `/commit` and `/create-pr` explicitly after the delivery report. The two
58
+ flows are mutually exclusive at the state-file level: one
59
+ `.work-state.json` carries one envelope at a time; the engine refuses to
60
+ switch mid-flight.
43
61
 
44
62
  ### Multi-Agent Support
45
63
 
@@ -84,6 +84,15 @@ personal:
84
84
  # Personal preference — each developer decides for themselves.
85
85
  pr_comment_bot_icon: false
86
86
 
87
+ # Autonomous execution — suppress trivial workflow questions (on, off, auto)
88
+ # on = act on the obvious next step; never ask "Step 2 or 3?", "should I commit?", etc.
89
+ # off = ask trivial workflow questions (legacy behavior)
90
+ # auto = behaves like 'off' until the user says "arbeite selbstständig" / "work autonomously"
91
+ # in the conversation, then switches to 'on' for the rest of the chat.
92
+ # Blocking decisions (security, scope expansion, push/merge/branch/PR) are NEVER suppressed.
93
+ # See rules/autonomous-execution.md for the full definition.
94
+ autonomy: auto
95
+
87
96
  # --- Project / team preferences ---
88
97
  project:
89
98
  # Path to the PR template file (relative to project root)
@@ -132,6 +141,74 @@ chat_history:
132
141
  # Overflow behavior: rotate (drop oldest) | compress (summarize)
133
142
  on_overflow: rotate
134
143
 
144
+ # Heartbeat marker visibility: on | off | hybrid
145
+ # on — print marker every reply (~20 tokens/reply, legacy)
146
+ # off — never print (zero tokens, no drift signal)
147
+ # hybrid — print only on drift (missing/foreign/returning); silent otherwise
148
+ # YAML 1.1 booleanizes bare on/off — both are accepted, no quoting needed.
149
+ heartbeat: hybrid
150
+
151
+ # Population path: hook | checkpoint | manual
152
+ # hook — platform fires lifecycle hooks; agent observes only
153
+ # (Claude Code, Augment CLI, Cursor 1.7+, Cline non-Windows,
154
+ # Windsurf, Gemini CLI). scripts/install.py wires hooks.
155
+ # checkpoint — agent invokes /chat-history-checkpoint at phase boundaries
156
+ # (Augment IDE plugin, Cursor < 1.7, Cline on Windows).
157
+ # Cooperative three-gate Iron Law applies.
158
+ # manual — rule is inert (cloud surfaces). Persistence is local-only.
159
+ # Default `checkpoint` is the safest cooperative fallback. HOOK platforms
160
+ # set this to `hook` automatically when scripts/install.py merges the
161
+ # platform's settings file.
162
+ path: checkpoint
163
+
164
+ # --- Work-engine hooks ---
165
+ #
166
+ # Lifecycle hook surface of the `work_engine` Python engine
167
+ # (scripts/work_engine/). Hooks observe, validate, or persist around the
168
+ # six CLI events (before_load, after_load, before_dispatch,
169
+ # after_dispatch, before_save, after_save) and the dispatcher events
170
+ # (before_step, after_step, on_halt). See agents/contexts/
171
+ # work-engine-hooks.md for the full lifecycle and registration contract.
172
+ #
173
+ # Default-off by construction: when the `hooks:` block is absent the
174
+ # registry stays empty and golden-replay flows are byte-stable. Enable
175
+ # the master switch to opt in; per-hook flags then control individual
176
+ # registration.
177
+ hooks:
178
+ # Master switch — when false (default) the registry stays empty
179
+ # regardless of the per-hook fields below.
180
+ enabled: false
181
+
182
+ # TraceHook — emits per-event trace lines on stderr. Useful for
183
+ # debugging engine flow; off by default because it is noisy.
184
+ trace: false
185
+
186
+ # HaltSurfaceAuditHook — defense-in-depth check that every halt
187
+ # surfaced by the dispatcher carries the expected shape. Cheap.
188
+ halt_surface_audit: true
189
+
190
+ # StateShapeValidationHook — re-runs the state schema validator on
191
+ # AFTER_LOAD and BEFORE_SAVE. Cheap, catches drift between the
192
+ # in-memory state and the persisted JSON.
193
+ state_shape_validation: true
194
+
195
+ # DirectiveSetGuardHook — verifies the directive-set resolved by the
196
+ # dispatcher matches the input envelope's intent. Cheap, catches
197
+ # routing drift.
198
+ directive_set_guard: true
199
+
200
+ # Chat-history hooks — populate .agent-chat-history structurally from
201
+ # the engine. Gated by BOTH this block AND the global
202
+ # chat_history.enabled above; either off → no chat-history hook
203
+ # registers. Keep both on for the HOOK path; flip either off to fall
204
+ # back to the cooperative CHECKPOINT path.
205
+ chat_history:
206
+ enabled: true
207
+ # Override path to the chat-history CLI (defaults to
208
+ # scripts/chat_history.py). Only set this when the script lives
209
+ # outside the standard location.
210
+ # script: scripts/chat_history.py
211
+
135
212
  # --- Optional pipelines ---
136
213
  pipelines:
137
214
  # Skill improvement pipeline (true, false)
@@ -193,6 +270,58 @@ onboarding:
193
270
  # Set to true automatically by /onboard at the end. Flip to false
194
271
  # if you want to re-run the flow.
195
272
  onboarded: false
273
+
274
+ # --- Command suggestion (numbered-options shortcut finder) ---
275
+ #
276
+ # When the user's free-form prompt matches an eligible slash command,
277
+ # the agent surfaces a numbered-options block with the recommendation
278
+ # plus an always-present "run as-is" option. The suggestion layer
279
+ # never auto-executes — the user picks. See `rules/command-suggestion.md`.
280
+ commands:
281
+ suggestion:
282
+ # Master switch (true, false). `false` = the layer is silent;
283
+ # explicit `/commands` still work as today.
284
+ enabled: true
285
+ # Minimum match score (0.0–1.0) before a suggestion surfaces.
286
+ confidence_floor: 0.6
287
+ # Cooldown in seconds between re-suggestions of the same
288
+ # (command, evidence) pair. Default 600 = 10m.
289
+ cooldown_seconds: 600
290
+ # Max number of command suggestions before the as-is option.
291
+ # The as-is option is always extra (total rendered = max_options + 1).
292
+ max_options: 4
293
+ # Commands to never suggest. Still work when typed explicitly.
294
+ blocklist: []
295
+
296
+ # --- Telemetry (artefact engagement, default-off) ---
297
+ #
298
+ # Records — at task / phase-step boundaries — which artefacts (skills,
299
+ # rules, commands, guidelines, personas) the agent consulted and
300
+ # applied. Local only, append-only JSONL, never reaches a consumer
301
+ # repo (gitignored). Maintainer-targeted feature; consumers leave it
302
+ # off. See `agents/contexts/artifact-engagement-flow.md` (once Phase 3
303
+ # of road-to-artifact-engagement-telemetry lands).
304
+ telemetry:
305
+ artifact_engagement:
306
+ # Master switch. `false` (default) produces zero file IO and zero
307
+ # token cost. Flip to `true` only as a maintainer; the very first
308
+ # `record` call prints a one-line stderr warning to make accidental
309
+ # enables visible.
310
+ enabled: false
311
+ # `task` = one event per /implement-ticket or /work run.
312
+ # `phase-step` = one event per refine|memory|analyze|plan|implement|test|verify|report step.
313
+ # `tool-call` = one event per tool invocation; expensive, opt-in only.
314
+ granularity: task
315
+ # Which categories the agent records. Both default to `true`;
316
+ # flip individually if a maintainer wants applied-only or
317
+ # consulted-only data.
318
+ record:
319
+ consulted: true
320
+ applied: true
321
+ output:
322
+ # Append-only JSONL log. Path is relative to the project root.
323
+ # Always gitignored (see config/gitignore-block.txt).
324
+ path: .agent-engagement.jsonl
196
325
  ```
197
326
 
198
327
  ## Settings Reference
@@ -213,6 +342,7 @@ lives under `personal:` in YAML.
213
342
  | `personal.minimal_output` | `true`, `false` | `true` | When `true`: short bullet points during work, concise summary at end. When `false`: verbose explanations. |
214
343
  | `personal.play_by_play` | `true`, `false` | `false` | When `true`: share intermediate findings during investigation. When `false`: work silently, report only the conclusion. |
215
344
  | `personal.pr_comment_bot_icon` | `true`, `false` | `false` | Prefix PR comment replies with 🤖 to indicate bot-authored replies. Personal preference — each developer decides. |
345
+ | `personal.autonomy` | `on`, `off`, `auto` | `auto` | Suppress trivial workflow questions and act on the obvious next step. `auto` defaults to `off` but flips to `on` after a prose opt-in like "arbeite selbstständig". `on` suppresses trivial questions unconditionally. Blocking decisions (security, scope expansion, push/merge/branch/PR/tag) are never suppressed. See `rules/autonomous-execution.md`. |
216
346
  | `project.pr_template` | file path | `.github/pull_request_template.md` | Path to PR template file. Read this instead of searching for it. |
217
347
  | `project.upstream_repo` | `org/repo` | _(empty)_ | Target repository for universal improvement PRs (e.g., `org/agent-config`). |
218
348
  | `project.improvement_pr_branch_prefix` | string | `improve/agent-` | Branch prefix for agent improvement PRs. |
@@ -222,6 +352,15 @@ lives under `personal:` in YAML.
222
352
  | `chat_history.frequency` | `per_turn`, `per_phase`, `per_tool` | per profile | Logging granularity. Defaults: `minimal`→`per_turn`, `balanced`→`per_phase`, `full`→`per_tool`. |
223
353
  | `chat_history.max_size_kb` | integer | per profile | Max file size before overflow handling. Defaults: `minimal`→`128`, `balanced`→`256`, `full`→`512`. |
224
354
  | `chat_history.on_overflow` | `rotate`, `compress` | per profile | On overflow: `rotate` drops oldest entries; `compress` marks the file for summarization on the next turn. Defaults: `minimal`/`balanced`→`rotate`, `full`→`compress`. |
355
+ | `chat_history.heartbeat` | `on`, `off`, `hybrid` | `hybrid` | Visibility of the `📒 chat-history:` marker. `on` = every reply (~20 tokens), `off` = silent, `hybrid` = print only on drift states (`missing`/`foreign`/`returning`). YAML `on`/`off` accepted bare. |
356
+ | `chat_history.path` | `hook`, `checkpoint`, `manual` | `checkpoint` | Population path. `hook` = platform fires lifecycle hooks; `checkpoint` = agent invokes `/chat-history-checkpoint` at phase boundaries; `manual` = rule inert (cloud). `scripts/install.py` flips this to `hook` when the platform's hook config is deployed. See [`agents/contexts/chat-history-platform-hooks.md`](../../../agents/contexts/chat-history-platform-hooks.md). |
357
+ | `hooks.enabled` | `true`, `false` | `false` | Master switch for the work-engine hook layer. When `false` (default) the registry stays empty and golden replay is byte-stable. See [`agents/contexts/work-engine-hooks.md`](../../../agents/contexts/work-engine-hooks.md). |
358
+ | `hooks.trace` | `true`, `false` | `false` | Emit per-event trace lines on stderr. Useful for debugging; off by default because it is noisy. |
359
+ | `hooks.halt_surface_audit` | `true`, `false` | `true` | Defense-in-depth check that every halt surfaced by the dispatcher carries the expected shape. Cheap. |
360
+ | `hooks.state_shape_validation` | `true`, `false` | `true` | Re-run the state schema validator on `AFTER_LOAD` and `BEFORE_SAVE`. Cheap, catches drift. |
361
+ | `hooks.directive_set_guard` | `true`, `false` | `true` | Verify the dispatcher-resolved directive set matches the input envelope intent. Cheap, catches routing drift. |
362
+ | `hooks.chat_history.enabled` | `true`, `false` | `true` | Register the four chat-history hooks (turn-check, append, halt-append, heartbeat). Gated by **both** this flag AND `chat_history.enabled`; either off → no chat-history hook registers. |
363
+ | `hooks.chat_history.script` | path | `scripts/chat_history.py` | Override path to the chat-history CLI. Set only when the script lives outside the standard location. |
225
364
  | `pipelines.skill_improvement` | `true`, `false` | `true` | When `true`: propose learning capture after meaningful tasks. When `false`: silent. Included in every profile except `custom`. |
226
365
  | `subagents.implementer_model` | model alias or empty | _(empty)_ | Model for implementer subagents. Empty = same tier as session model. See [subagent-configuration](../contexts/subagent-configuration.md). |
227
366
  | `subagents.judge_model` | model alias or empty | _(empty)_ | Model for judge subagents. Empty = one tier above implementer (opus if sonnet, sonnet if haiku). |
@@ -231,6 +370,16 @@ lives under `personal:` in YAML.
231
370
  | `personas.override` | list of persona ids | `[]` | Developer-local override of the team default lens cast. Empty = inherit `personas.default` from `.agent-project-settings.yml`. See [`layered-settings`](../guidelines/agent-infra/layered-settings.md). |
232
371
  | `personas.ignore` | list of persona ids | `[]` | Persona ids dropped from the default cast locally. Ignored personas stay invokable via `--personas=<id>`. |
233
372
  | `onboarding.onboarded` | `true`, `false` | `false` | Whether `/onboard` has run on this project. The `onboarding-gate` rule prompts for `/onboard` when this is `false`. Missing entirely = legacy project, treated as onboarded. |
373
+ | `commands.suggestion.enabled` | `true`, `false` | `true` | Master switch for the command-suggestion layer. `false` = the layer is silent; explicit `/commands` still work. See `rules/command-suggestion.md`. |
374
+ | `commands.suggestion.confidence_floor` | `0.0`–`1.0` | `0.6` | Minimum match score before a suggestion surfaces. Per-command frontmatter (`suggestion.confidence_floor`) overrides this global floor. |
375
+ | `commands.suggestion.cooldown_seconds` | integer | `600` | Cooldown between re-suggestions of the same `(command, evidence)` pair. `600` = 10m. |
376
+ | `commands.suggestion.max_options` | integer | `4` | Max number of command suggestions before the always-present "run as-is" option (total rendered = `max_options + 1`). |
377
+ | `commands.suggestion.blocklist` | list of command names | `[]` | Commands that never appear as a suggestion. They still work when typed explicitly. |
378
+ | `telemetry.artifact_engagement.enabled` | `true`, `false` | `false` | Master switch for the artefact engagement log. Default-off; zero file IO and zero token cost when `false`. Maintainer-targeted; consumers leave it off. |
379
+ | `telemetry.artifact_engagement.granularity` | `task`, `phase-step`, `tool-call` | `task` | Boundary at which events are recorded. `tool-call` is expensive — opt-in only. |
380
+ | `telemetry.artifact_engagement.record.consulted` | `true`, `false` | `true` | When `true`: record artefacts loaded into context. |
381
+ | `telemetry.artifact_engagement.record.applied` | `true`, `false` | `true` | When `true`: record artefacts cited or driving a decision. |
382
+ | `telemetry.artifact_engagement.output.path` | path | `.agent-engagement.jsonl` | Append-only JSONL log path, relative to the project root. Always gitignored. |
234
383
 
235
384
  ### Rename-Map (migration)
236
385
 
@@ -27,8 +27,14 @@ Templates for roadmap files stored in `agents/roadmaps/` or `app/Modules/{Module
27
27
 
28
28
  13. **No tags, releases, or version numbers.** Roadmaps describe work, not shipping.
29
29
  Never assign version suffixes to phases (`Phase 1 — v1.8.0`), never write
30
- "Target release: X.Y.Z", never plan git tags. Release and tag decisions
31
- belong to the user and are taken outside the roadmap.
30
+ "Target release: X.Y.Z", never plan git tags or deprecation dates. Release
31
+ and tag decisions belong to the user, taken outside the roadmap. Enforced by
32
+ [`scope-control`](../rules/scope-control.md#git-operations--permission-gated).
33
+ 14. **No automatic branch switches mid-roadmap.** Roadmap work runs on the
34
+ current branch. If a separate branch (spike, hotfix, experiment) would
35
+ be useful, agent may propose it **once** during creation — not during
36
+ execution. Default: stay on current branch. If user declines, topic is
37
+ closed for this roadmap. See [`scope-control`](../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
32
38
 
33
39
  ---
34
40