@event4u/agent-config 1.21.0 → 1.23.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 (130) hide show
  1. package/.agent-src/commands/agents/cleanup.md +31 -17
  2. package/.agent-src/commands/bug-fix.md +1 -0
  3. package/.agent-src/commands/bug-investigate.md +1 -0
  4. package/.agent-src/commands/challenge-me/vision.md +348 -0
  5. package/.agent-src/commands/challenge-me/with-docs.md +333 -0
  6. package/.agent-src/commands/challenge-me.md +61 -0
  7. package/.agent-src/commands/commit/in-chunks.md +30 -10
  8. package/.agent-src/commands/commit.md +46 -6
  9. package/.agent-src/commands/compress.md +19 -13
  10. package/.agent-src/commands/cost-report.md +120 -0
  11. package/.agent-src/commands/council/default.md +64 -17
  12. package/.agent-src/commands/create-pr/description-only.md +8 -0
  13. package/.agent-src/commands/create-pr.md +99 -80
  14. package/.agent-src/commands/feature/plan.md +13 -7
  15. package/.agent-src/commands/grill-me.md +38 -0
  16. package/.agent-src/commands/judge/steps.md +1 -1
  17. package/.agent-src/commands/memory/add.md +16 -8
  18. package/.agent-src/commands/memory/promote.md +17 -9
  19. package/.agent-src/commands/optimize/rtk.md +16 -11
  20. package/.agent-src/commands/prepare-for-review.md +12 -6
  21. package/.agent-src/commands/project-analyze.md +31 -20
  22. package/.agent-src/commands/review-changes.md +24 -15
  23. package/.agent-src/commands/roadmap/ai-council.md +183 -0
  24. package/.agent-src/commands/roadmap/create.md +20 -10
  25. package/.agent-src/commands/roadmap/process-full.md +58 -0
  26. package/.agent-src/commands/roadmap/process-phase.md +69 -0
  27. package/.agent-src/commands/roadmap/process-step.md +57 -0
  28. package/.agent-src/commands/roadmap.md +44 -16
  29. package/.agent-src/commands/threat-model.md +1 -0
  30. package/.agent-src/contexts/augment-infrastructure.md +1 -1
  31. package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +53 -18
  32. package/.agent-src/contexts/contracts/frugality-charter.md +57 -0
  33. package/.agent-src/contexts/execution/roadmap-process-loop.md +125 -0
  34. package/.agent-src/contexts/skills-and-commands.md +1 -1
  35. package/.agent-src/rules/architecture.md +9 -0
  36. package/.agent-src/rules/ask-when-uncertain.md +3 -13
  37. package/.agent-src/rules/caveman-speak.md +78 -0
  38. package/.agent-src/rules/direct-answers.md +5 -14
  39. package/.agent-src/rules/improve-before-implement.md +1 -0
  40. package/.agent-src/rules/invite-challenge.md +71 -0
  41. package/.agent-src/rules/markdown-safe-codeblocks.md +6 -7
  42. package/.agent-src/rules/no-cheap-questions.md +4 -14
  43. package/.agent-src/rules/token-efficiency.md +5 -7
  44. package/.agent-src/skills/adr-create/SKILL.md +197 -0
  45. package/.agent-src/skills/adversarial-review/SKILL.md +1 -0
  46. package/.agent-src/skills/agent-docs-writing/SKILL.md +23 -1
  47. package/.agent-src/skills/ai-council/SKILL.md +132 -8
  48. package/.agent-src/skills/bug-analyzer/SKILL.md +1 -0
  49. package/.agent-src/skills/command-writing/SKILL.md +23 -0
  50. package/.agent-src/skills/context-authoring/SKILL.md +23 -0
  51. package/.agent-src/skills/conventional-commits-writing/SKILL.md +23 -0
  52. package/.agent-src/skills/guideline-writing/SKILL.md +22 -0
  53. package/.agent-src/skills/persona-writing/SKILL.md +153 -0
  54. package/.agent-src/skills/readme-writing/SKILL.md +20 -0
  55. package/.agent-src/skills/readme-writing-package/SKILL.md +19 -0
  56. package/.agent-src/skills/roadmap-management/SKILL.md +7 -7
  57. package/.agent-src/skills/roadmap-writing/SKILL.md +157 -0
  58. package/.agent-src/skills/rule-writing/SKILL.md +22 -0
  59. package/.agent-src/skills/script-writing/SKILL.md +226 -0
  60. package/.agent-src/skills/skill-writing/SKILL.md +23 -0
  61. package/.agent-src/skills/systematic-debugging/SKILL.md +22 -2
  62. package/.agent-src/skills/technical-specification/SKILL.md +58 -1
  63. package/.agent-src/skills/test-driven-development/SKILL.md +24 -0
  64. package/.agent-src/skills/threat-modeling/SKILL.md +1 -0
  65. package/.agent-src/templates/agent-settings.md +87 -3
  66. package/.agent-src/templates/command.md +30 -9
  67. package/.agent-src/templates/roadmaps.md +10 -2
  68. package/.agent-src/templates/rule.md +8 -0
  69. package/.agent-src/templates/skill.md +49 -0
  70. package/.claude-plugin/marketplace.json +14 -2
  71. package/AGENTS.md +3 -3
  72. package/CHANGELOG.md +73 -0
  73. package/README.md +5 -5
  74. package/config/agent-settings.template.yml +22 -0
  75. package/docs/architecture.md +4 -4
  76. package/docs/contracts/command-clusters.md +45 -1
  77. package/docs/customization.md +72 -0
  78. package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +126 -0
  79. package/docs/decisions/INDEX.md +15 -0
  80. package/docs/getting-started.md +2 -2
  81. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +27 -19
  82. package/docs/guidelines/agent-infra/carve-out-predicates.md +17 -0
  83. package/docs/guidelines/agent-infra/mcp-request-signing.md +199 -0
  84. package/docs/guidelines/agent-infra/naming.md +1 -1
  85. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +11 -4
  86. package/package.json +1 -1
  87. package/scripts/_lib/__init__.py +5 -0
  88. package/scripts/_lib/script_output.py +140 -0
  89. package/scripts/_phase2_shim_helper.py +1 -1
  90. package/scripts/adr/regenerate_index.py +79 -0
  91. package/scripts/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +149 -0
  92. package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +33 -0
  93. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +36 -0
  94. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +26 -0
  95. package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +41 -0
  96. package/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +98 -0
  97. package/scripts/check_augmentignore.py +4 -1
  98. package/scripts/check_command_count_messaging.py +4 -1
  99. package/scripts/check_compressed_paths.py +4 -1
  100. package/scripts/check_council_layout.py +4 -1
  101. package/scripts/check_council_references.py +4 -1
  102. package/scripts/check_iron_law_prominence.py +3 -1
  103. package/scripts/check_md_language.py +3 -1
  104. package/scripts/check_memory_proposal.py +3 -1
  105. package/scripts/check_public_catalog_links.py +4 -1
  106. package/scripts/check_reply_consistency.py +8 -2
  107. package/scripts/check_roadmap_trackable.py +4 -1
  108. package/scripts/compile_router.py +27 -0
  109. package/scripts/compress.py +33 -19
  110. package/scripts/cost/budget.mjs +152 -0
  111. package/scripts/cost/track.mjs +144 -0
  112. package/scripts/council_cli.py +127 -10
  113. package/scripts/first-run.sh +3 -9
  114. package/scripts/install-hooks.sh +19 -1
  115. package/scripts/install.py +17 -12
  116. package/scripts/install.sh +19 -8
  117. package/scripts/lint_examples.py +6 -2
  118. package/scripts/lint_handoffs.py +4 -1
  119. package/scripts/lint_load_context.py +4 -1
  120. package/scripts/lint_roadmap_complexity.py +6 -2
  121. package/scripts/lint_rule_interactions.py +4 -1
  122. package/scripts/lint_rule_tiers.py +4 -1
  123. package/scripts/measure_frugality_savings.py +164 -0
  124. package/scripts/migrate_command_suggestions.py +2 -2
  125. package/scripts/runtime_dispatcher.py +11 -0
  126. package/scripts/schemas/command.schema.json +5 -0
  127. package/scripts/schemas/rule.schema.json +5 -0
  128. package/scripts/schemas/skill.schema.json +5 -0
  129. package/scripts/skill_linter.py +208 -3
  130. package/.agent-src/commands/roadmap/execute.md +0 -109
@@ -0,0 +1,333 @@
1
+ ---
2
+ name: challenge-me:with-docs
3
+ cluster: challenge-me
4
+ sub: with-docs
5
+ description: "Doc-aware /challenge-me — 95%-confidence interview with session glossary vs CONTEXT.md, load-bearing claim-vs-code verification, optional CONTEXT.md patch + ADR candidates in the pitch."
6
+ disable-model-invocation: true
7
+ suggestion:
8
+ eligible: true
9
+ trigger_description: "challenge me against the docs, grill me with our context, grill me against the docs, grill me against CONTEXT.md, grill me with the project context, frag mich durch und prüf gegen CONTEXT.md, challenge plan with domain docs"
10
+ trigger_context: "user wants the seed challenged against existing project glossary, CONTEXT.md, or ADRs — not a greenfield interview"
11
+ ---
12
+
13
+ # /challenge-me with-docs
14
+
15
+ > Same one-question-at-a-time interview as `/challenge-me vision`, plus:
16
+ > a **session glossary** against `CONTEXT.md`, **load-bearing claim-vs-code
17
+ > verification**, and an optional `CONTEXT.md` **patch** + **ADR candidates**
18
+ > appended to the final pitch. Nothing is written to disk — the pitch is
19
+ > the only artefact.
20
+
21
+ ## Welcome
22
+
23
+ If the user invokes `/challenge-me with-docs` with no body, render once:
24
+
25
+ ```
26
+ Drop the seed and I'll grill it against your project docs. Per turn:
27
+ one question, recommended answer. I'll surface glossary clashes vs
28
+ CONTEXT.md and verify load-bearing claims against the code. At the end
29
+ you get a pitch — plus an optional CONTEXT.md patch and ADR candidates
30
+ to copy / apply yourself.
31
+
32
+ Stop early any time by typing `!pitch` (or `!Vision pitchen`).
33
+ ```
34
+
35
+ Skip the welcome if the user invokes `/challenge-me with-docs <seed>`
36
+ directly.
37
+
38
+ ## When to use this instead of `vision`
39
+
40
+ | Condition | Pick |
41
+ |---|---|
42
+ | Project has no `CONTEXT.md` and no ADR dir | `vision` |
43
+ | Seed uses domain terms that may already be defined elsewhere | `with-docs` |
44
+ | User says "check against our docs" / "make sure it matches CONTEXT.md" | `with-docs` |
45
+ | User says "make sure this is consistent with the codebase" | `with-docs` |
46
+ | Greenfield brainstorm, no existing constraints to honour | `vision` |
47
+
48
+ If neither file exists and the user invoked `with-docs` anyway, fall
49
+ back gracefully to `vision`-style flow and skip the doc inventory; note
50
+ the absence in a single line at the end of Step 0.
51
+
52
+ ## Stop condition, flags, pitch trigger
53
+
54
+ Inherits **verbatim** from [`vision.md`](vision.md):
55
+
56
+ - Default stop = the four 95%-conditions (AND, not OR).
57
+ - Load-bearing test = answer changes goal / scope / hard constraint / AC.
58
+ - `--until=95%` (default) · `--until=N` · `--keep-going`.
59
+ - Pitch trigger: `!pitch`, `/pitch`, or whole reply `pitch`.
60
+ - Step 1 question-block shape, Step 4 pitch validation.
61
+
62
+ The deltas below replace / extend Step 0, Step 1, Step 2, Step 4 and
63
+ Step 5. Steps 3 and 6 are unchanged.
64
+
65
+ ## Steps
66
+
67
+ ### Step 0 — Inspect (read-only doc inventory + codebase)
68
+
69
+ ```
70
+ EXPLORE THE DOCS AND THE CODEBASE BEFORE THE FIRST QUESTION.
71
+ NEVER WRITE TO DISK IN STEP 0. NEVER ASK WHAT view / grep / codebase-retrieval ANSWERS.
72
+ ```
73
+
74
+ 1. **Read the seed** (same as `vision`).
75
+ 2. **Doc inventory** — read-only:
76
+ - `view CONTEXT.md` if it exists; init empty **session glossary** in
77
+ agent state (in-memory only).
78
+ - `view CONTEXT-MAP.md` if it exists. If the seed touches > 1 listed
79
+ context, **ask once** (numbered options listing each context) which
80
+ to focus on; record the choice, do not re-ask.
81
+ - Autodetect ADR directory by listing `docs/adr/`, `docs/decisions/`,
82
+ `docs/architecture/decisions/`, `agents/decisions/`. Pick the
83
+ **most-recently-modified** non-empty dir; if none exist, default to
84
+ `docs/adr/` for the patch output (do **not** create the dir).
85
+ - If `agent state` already holds a session glossary from a prior
86
+ `/challenge-me with-docs` invocation **in this same chat**, load
87
+ it. Then re-read `CONTEXT.md` — any term in `CONTEXT.md` overrides
88
+ the session glossary (disk wins over draft). Emit a delta line if
89
+ non-zero: `Loaded N draft terms; CONTEXT.md already has X — carrying
90
+ forward the rest as drafts.`
91
+ 3. **Codebase lookup** — same as `vision` Step 0.2 (existing routes,
92
+ model fields, conventions, feature flags).
93
+ 4. **List the open dimensions** internally — same as `vision` Step 0.3.
94
+
95
+ ### Step 1 — Glossary-aware questioning
96
+
97
+ Every question block runs an extra check **before** emit:
98
+
99
+ - **Glossary conflict** — does the seed (or a prior turn) use a term
100
+ that conflicts with the existing `CONTEXT.md` glossary, including a
101
+ case-insensitive match? → first question of the session is the
102
+ glossary disambiguation:
103
+
104
+ > Your `CONTEXT.md` defines **Account** as the billing entity. Your
105
+ > seed uses "account" for the logged-in person. Which is it?
106
+ > 1. **Match CONTEXT.md** — rename "account" in the plan to "user".
107
+ > 2. Override CONTEXT.md — the plan introduces a new meaning; we patch
108
+ > the glossary at pitch time.
109
+ > 3. Skip / not relevant.
110
+
111
+ - **Fuzzy / overloaded term** — propose a canonical term as option 1.
112
+
113
+ - **No glossary present** → skip the check; behave like `vision`.
114
+
115
+ The glossary check is itself **load-bearing only when the term flips an
116
+ AC or scope boundary OR when it conflicts with an existing CONTEXT.md
117
+ entry**. Pure naming preference with no conflict is closed silently
118
+ (same load-bearing test as `vision`, with the conflict-extension).
119
+
120
+ Otherwise the question-block shape, recommended-option rule, 3–4 option
121
+ cap, and `Why it matters` requirement are identical to
122
+ [`vision.md § Step 1`](vision.md#step-1-ask-one-question-per-turn).
123
+
124
+ ### Step 2 — Apply the answer + session glossary (in-memory)
125
+
126
+ Adopt-the-answer rules are identical to
127
+ [`vision.md § Step 2`](vision.md#step-2-apply-the-answer).
128
+
129
+ When a term is resolved, write to **session glossary** (agent state
130
+ only). **Never write to disk in this step.** Every turn's reply ends
131
+ with a compact echo block when the glossary is non-empty:
132
+
133
+ ```
134
+ **Session glossary (draft, not yet written):**
135
+ - **Cancellation** — refund + reversal, excludes disputes (turn 3)
136
+ - **Account** — maps to `User` entity (turn 5)
137
+ ```
138
+
139
+ After the **fifth** session-glossary turn, condense the echo to:
140
+
141
+ ```
142
+ **Session glossary (draft):** N terms · M ADR candidates — see pitch for full list.
143
+ ```
144
+
145
+ If the session glossary is empty, omit the echo block entirely.
146
+
147
+ ### Step 3 — Re-score and continue
148
+
149
+ Identical to [`vision.md § Step 3`](vision.md#step-3-re-score-and-continue).
150
+
151
+ ### Step 3.5 — ADR candidate check (no write)
152
+
153
+ After each branch closes, run the three-test on the resolution:
154
+
155
+ 1. **Hard-to-reverse** — would unwinding it require code or schema rollback?
156
+ 2. **Surprising-without-context** — would a future contributor read the
157
+ choice and ask "why this and not the obvious alternative?"
158
+ 3. **Result of a real trade-off** — were the rejected options realistic?
159
+
160
+ If **all three** pass, append the candidate to an in-memory ADR-candidate
161
+ list. Do **not** ask, do **not** write. Surfaces only in Step 5.
162
+
163
+ ### Step 4 — Validate before pitching
164
+
165
+ Identical to [`vision.md § Step 4`](vision.md#step-4-validate-before-pitching),
166
+ plus:
167
+
168
+ - Pitch uses the **canonical glossary spelling** for every term in the
169
+ session glossary.
170
+ - The `CONTEXT.md` patch block is **always** appended when the session
171
+ glossary is non-empty — agent has no signal whether the user already
172
+ applied a previous patch in-chat. The patch block carries a header
173
+ the user reads before applying (see Step 5).
174
+
175
+ ### Step 5 — Emit the pitch with optional doc patches
176
+
177
+ Emit the same fenced Markdown pitch as `vision`, then append up to two
178
+ optional sections **inside** the same outer four-backtick fence:
179
+
180
+ `````markdown
181
+ ````markdown
182
+ # <one-line vision title>
183
+
184
+ **Goal:** <verb + object + observable result>
185
+
186
+ **In scope:**
187
+ - <bullet>
188
+
189
+ **Out of scope:**
190
+ - <bullet>
191
+
192
+ **Constraints (hard):**
193
+ - <bullet>
194
+
195
+ **Acceptance criteria:**
196
+ 1. <observable, testable>
197
+
198
+ **Open assumptions:**
199
+ - assumes: <line>
200
+
201
+ **Recommended next step:** <one sentence — e.g. "/work \"<pitch goal>\"" >.
202
+
203
+ ---
204
+
205
+ **CONTEXT.md patch (apply via `patch -p1` or your IDE's Apply Patch — only
206
+ if you haven't already merged these terms):**
207
+
208
+ ```diff
209
+ @@ ... @@
210
+ + ## Cancellation
211
+ + Refund + reversal, excludes disputes.
212
+ ```
213
+
214
+ **ADR candidate(s) — apply only if useful:**
215
+ - `docs/adr/0007-cancellation-semantics.md` — captures the soft-vs-hard
216
+ delete decision (hard-to-reverse · surprising · real-tradeoff).
217
+
218
+ **Glossary touched this session:** Cancellation, Account, Refund (3 terms).
219
+ ````
220
+ `````
221
+
222
+ The outer fence uses **five backticks** so the inner four-backtick fence
223
+ (which itself contains a triple-backtick diff) stays literal when the
224
+ user copies the whole block.
225
+
226
+ Omission rules:
227
+
228
+ - Session glossary empty → omit the `CONTEXT.md patch`, `Glossary touched`,
229
+ and the preceding `---` separator entirely.
230
+ - No ADR candidate qualified → omit the `ADR candidate(s)` section.
231
+ - Both empty → pitch is identical to a `vision` pitch.
232
+
233
+ ### Step 6 — Hand back
234
+
235
+ Identical to [`vision.md § Step 6`](vision.md#step-6-hand-back). Never
236
+ auto-write the patches, never auto-invoke `/work`.
237
+
238
+ ## Code-vs-claim guard (gated)
239
+
240
+ When the user states "X is implemented as Y" AND the claim is
241
+ **load-bearing** (would change an AC, scope boundary, or hard
242
+ constraint), agent runs `view` / `grep` / `codebase-retrieval` to
243
+ verify. Mismatch → single question block:
244
+
245
+ > Your seed says X works via Y. The code (`path/to/file.php:123`) shows
246
+ > it via Z. Which is right?
247
+ > 1. **Code is right, my seed was wrong** — recommended.
248
+ > 2. Seed is right, code is stale — separate fix needed.
249
+ > 3. Both — they're both real paths.
250
+
251
+ Non-load-bearing claims (cosmetic, naming, internal style) — agent
252
+ trusts the user's statement, no lookup. This gate keeps verification
253
+ cost O(load-bearing-decisions), not O(every-statement).
254
+
255
+ ## Output format
256
+
257
+ 1. **Per-turn question block** — one numbered question with a
258
+ recommended option, until 95% or pitch trigger.
259
+ 2. **Session-glossary echo** — appended every turn while the glossary is
260
+ non-empty (full list in turns 1–5, condensed line from turn 6 on).
261
+ 3. **Final pitch** — a single copyable five-backtick fenced block
262
+ (Step 5 shape) holding the standard pitch + optional `CONTEXT.md`
263
+ patch + optional ADR candidates.
264
+
265
+ ## Examples
266
+
267
+ ```
268
+ /challenge-me with-docs
269
+ /challenge-me with-docs Add a per-tenant rate limit on the public API
270
+ /challenge-me with-docs --until=5 Migrate cancellations from soft-delete to hard-delete
271
+ /challenge-me with-docs --keep-going Re-architect the notifications pipeline
272
+ ```
273
+
274
+ ## Gotchas
275
+
276
+ - Inherits every gotcha from
277
+ [`vision.md § Gotchas`](vision.md#gotchas) — confidence inflation,
278
+ recommendation drift, stacked questions, too many options.
279
+ - **Glossary clutter** — if the agent echoes the full session glossary
280
+ past turn 5 the reply gets noisy. Condense per Step 2.
281
+ - **Patch redundancy** — agent has no signal whether the user already
282
+ applied a previous in-chat `CONTEXT.md` patch. Always emit the patch
283
+ with the "only if you haven't already merged these terms" header so
284
+ the user can dedupe.
285
+ - **ADR over-eager** — the three-test (hard-to-reverse · surprising ·
286
+ real-tradeoff) is the gate. A pure naming choice or a default that
287
+ could flip without rollback is **not** an ADR candidate.
288
+ - **Multi-context confusion** — if `CONTEXT-MAP.md` lists multiple
289
+ contexts and the seed touches several, ask **once** in Step 0; never
290
+ re-ask which context to focus on.
291
+
292
+ ## Rules
293
+
294
+ - Inherits every rule from [`vision.md § Rules`](vision.md#rules) —
295
+ one question per turn, no auto-execution, no file writes, codebase
296
+ first, welcome once, mirror the user's language.
297
+ - **No file writes** — even though this variant produces glossary
298
+ patches and ADR candidates, those go **into the pitch block** for the
299
+ user to apply. Agent never writes `CONTEXT.md` or any `docs/adr/*`
300
+ file itself, per `non-destructive-by-default`.
301
+ - **Two-gate verification** — the glossary check fires on AC-flipping
302
+ terms OR `CONTEXT.md` conflicts; the code-vs-claim check fires only
303
+ on load-bearing claims. Non-load-bearing trivia → no lookup, no
304
+ question.
305
+ - **Session glossary persists within a chat** — a second
306
+ `/challenge-me with-docs` invocation in the same chat inherits draft
307
+ terms; disk state (`CONTEXT.md`) overrides drafts on every Step 0.
308
+
309
+ ## Do NOT
310
+
311
+ - Inherits every prohibition from
312
+ [`vision.md § Do NOT`](vision.md#do-not).
313
+ - Do NOT write to `CONTEXT.md` directly — emit the diff in the pitch.
314
+ - Do NOT create files in `docs/adr/` — emit the path + rationale in the
315
+ pitch and let the user create the file.
316
+ - Do NOT verify every user statement — only load-bearing claims trigger
317
+ the code-vs-claim guard.
318
+ - Do NOT echo the full session glossary past turn 5 — condense.
319
+
320
+ ## See also
321
+
322
+ - [`/challenge-me vision`](vision.md) — sibling without doc inventory,
323
+ glossary check, or claim verification.
324
+ - [`/refine-prompt`](../refine-prompt.md) — one-shot prompt scoring.
325
+ - [`/refine-ticket`](../refine-ticket.md) — ticket reconstruction.
326
+ - [`ask-when-uncertain`](../../rules/ask-when-uncertain.md) — the
327
+ one-question-per-turn Iron Law.
328
+ - [`non-destructive-by-default`](../../rules/non-destructive-by-default.md)
329
+ — why the patches live in the pitch block, not on disk.
330
+ - Inspiration: `mattpocock/skills/skills/engineering/grill-with-docs/SKILL.md`
331
+ — same intent (interview against domain docs), restructured to honour
332
+ the project's non-destructive floor (session glossary in-memory,
333
+ patches emitted as copyable diffs in the pitch).
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: challenge-me
3
+ description: Challenge-me orchestrator — routes to vision, with-docs
4
+ cluster: challenge-me
5
+ disable-model-invocation: true
6
+ suggestion:
7
+ eligible: true
8
+ trigger_description: "challenge me on this plan, grill me, grill me on this, grill me on this plan, grill me through this, grill me until it's clear, grill me hard, frag mich durch, dreh mich durch die Mangel, challenge against existing docs/glossary"
9
+ trigger_context: "user has a fuzzy plan/idea/feature draft and wants it sharpened interactively rather than reconstructed in one shot — also reachable via /grill-me alias"
10
+ ---
11
+
12
+ # /challenge-me
13
+
14
+ Top-level orchestrator for the `/challenge-me` family. Walks a decision
15
+ tree by asking one question at a time until the agent is confident
16
+ enough to emit a copyable Markdown pitch.
17
+
18
+ > Also reachable as [`/grill-me`](grill-me.md) — thin alias, identical
19
+ > behaviour, identical sub-commands and triggers.
20
+
21
+ ## Sub-commands
22
+
23
+ | Sub-command | Routes to | Purpose |
24
+ |---|---|---|
25
+ | `/challenge-me vision` | `commands/challenge-me/vision.md` | Standard variant — interrogate a fuzzy plan / idea / ticket draft to 95% confidence, emit a vision pitch |
26
+ | `/challenge-me with-docs` | `commands/challenge-me/with-docs.md` | Doc-aware variant — same flow plus session glossary against `CONTEXT.md`, load-bearing claim-vs-code verification, optional `CONTEXT.md` patch + ADR candidates in the pitch |
27
+
28
+ ## When to pick which
29
+
30
+ - **`vision`** — greenfield idea, fresh ticket draft, or a plan with no
31
+ existing project glossary / domain docs. Default for "challenge me on
32
+ this plan".
33
+ - **`with-docs`** — the project has `CONTEXT.md`, an ADR directory
34
+ (`docs/adr/`, `docs/decisions/`, `agents/decisions/`), or the user
35
+ uses domain terms that may already be defined. The variant catches
36
+ glossary conflicts and load-bearing claim-vs-code drift before pitch.
37
+
38
+ ## Dispatch
39
+
40
+ 1. Parse the user's argument: `/challenge-me <sub-command> [flags] [seed]`.
41
+ 2. Look up the sub-command in the table above.
42
+ 3. Load the body of the routed file and follow its `## Steps` section
43
+ verbatim with the remaining flags / seed.
44
+ 4. If the sub-command is unknown or missing, print the menu and ask:
45
+
46
+ > 1. vision — standard 95%-confidence interview, emits a copyable pitch
47
+ > 2. with-docs — same flow, but checks the seed against `CONTEXT.md` /
48
+ > ADRs and emits an optional doc patch in the pitch
49
+
50
+ ## Rules
51
+
52
+ - **Do NOT chain sub-commands.** One `/challenge-me <sub>` per turn.
53
+ - If the user invokes `/challenge-me` with no argument, **show the menu**
54
+ — do not guess which sub-command they meant.
55
+ - **No file writes from either sub-command.** Both variants are
56
+ conversational; the pitch is the only artefact, and it is copyable
57
+ Markdown the user pastes elsewhere. `with-docs` emits its `CONTEXT.md`
58
+ patch and ADR candidates inside the same pitch block — agent does not
59
+ apply them itself.
60
+ - **Mirror the user's language** — sub-commands inherit the
61
+ `language-and-tone` Iron Law for question blocks and pitch.
@@ -63,7 +63,16 @@ Splitting rules:
63
63
 
64
64
  Generate commit messages per [`commit-conventions`](../../rules/commit-conventions.md).
65
65
 
66
- ### 4. Commit immediately
66
+ ### 4. Validate, then commit immediately
67
+
68
+ Before staging anything, run the same `preview-on-error` validator as
69
+ [`/commit`](../commit.md) step 5. Each generated message must match
70
+ `^(feat|fix|chore|docs|refactor|test|perf|style|build|ci|revert)(\([^)]+\))?!?: .+`.
71
+
72
+ - **All valid** → proceed silently.
73
+ - **Any invalid** → stop, print the failed message(s) + the regex,
74
+ hand back to the user. Do **not** auto-commit broken messages even
75
+ though confirmation is otherwise suppressed.
67
76
 
68
77
  For each planned commit in order:
69
78
 
@@ -75,18 +84,29 @@ git commit -m "{message}"
75
84
  No "looks good?" prompt. No confirmation step. The user invoked this
76
85
  command knowing the plan would be executed.
77
86
 
78
- ### 5. Report
87
+ ### 5. Report (verbosity-gated)
79
88
 
80
- Show a summary:
89
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
90
+ `minimal`). Same contract as [`/commit`](../commit.md) step 7.
81
91
 
82
- ```
83
- Created N commits:
84
- 1. {sha1} feat(DEV-1234): {summary}
85
- 2. {sha2} test(DEV-1234): {summary}
86
- 3. {sha3} chore: {summary}
87
- ```
92
+ - `off` → emit nothing (still run `git log --oneline -N` silently for
93
+ the agent's own verification).
94
+ - `minimal` (default) → one line:
95
+
96
+ ```
97
+ → N commits created
98
+ ```
99
+
100
+ - `full` → full summary:
101
+
102
+ ```
103
+ Created N commits:
104
+ 1. {sha1} feat(DEV-1234): {summary}
105
+ 2. {sha2} test(DEV-1234): {summary}
106
+ 3. {sha3} chore: {summary}
107
+ ```
88
108
 
89
- Include `git log --oneline -N` output for verification.
109
+ Include `git log --oneline -N` output for verification.
90
110
 
91
111
  ## Rules
92
112
 
@@ -79,7 +79,33 @@ Rules for splitting:
79
79
  - **Style-only changes** (ECS/Rector formatting) may get their own `style:` or `chore:` commit
80
80
  if they are large and mixed with logic changes.
81
81
 
82
- ### 5. Present the commit plan
82
+ ### 5. Present the commit plan (verbosity-gated)
83
+
84
+ Read `verbosity.preview_artifacts` and `verbosity.routine_confirmations`
85
+ from `.agent-settings.yml`. Both default to `false`.
86
+
87
+ **Terse path** — `preview_artifacts: false` AND `routine_confirmations: false`:
88
+
89
+ 1. Validate every generated commit message against the
90
+ conventional-commits regex
91
+ `^(feat|fix|chore|docs|refactor|test|perf|style|build|ci|revert)(\([^)]+\))?!?: .+`.
92
+ 2. **All messages valid** → skip the preview block and the confirmation
93
+ prompt. Print one line summarising the plan and proceed to step 6:
94
+
95
+ ```
96
+ → 3 commits planned: feat, test, chore (scope: DEV-1234)
97
+ ```
98
+
99
+ 3. **Any message invalid** → `preview-on-error` safety net fires:
100
+ force the full preview block below + the numbered confirm prompt,
101
+ regardless of the two flags. The user must approve before step 6.
102
+ 4. **Hard-Floor diff** (bulk deletion ≥5 unrelated files, infra changes
103
+ touching Terraform / Pulumi / k8s / Ansible / cloud-config) →
104
+ ALWAYS preview + confirm regardless of flags, per
105
+ [`non-destructive-by-default`](../rules/non-destructive-by-default.md).
106
+
107
+ **Preview path** — `preview_artifacts: true` OR `routine_confirmations: true`
108
+ (or `preview-on-error` triggered):
83
109
 
84
110
  Show the proposed commits as a numbered list, including which files go into each:
85
111
 
@@ -107,19 +133,33 @@ Then ask:
107
133
 
108
134
  Wait for the user's response before doing anything.
109
135
 
136
+ **Override:** the user may force the preview at any time with
137
+ *"show me the commit plan first"* / *"preview commits"* — treat as a
138
+ one-shot `preview_artifacts: true` for this invocation.
139
+
110
140
  ### 6. Commit
111
141
 
112
- Only after the user confirms (option 1):
142
+ On the **terse path** proceed directly. On the **preview path** only after
143
+ the user confirms (option 1).
113
144
 
114
145
  For each planned commit in order:
115
146
  1. Stage only the files for that commit: `git add {files...}`
116
147
  2. Commit: `git commit -m "{message}"`
117
148
 
118
- ### 7. Report
149
+ ### 7. Report (verbosity-gated)
150
+
151
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
152
+ `minimal`).
153
+
154
+ - `off` → emit nothing.
155
+ - `minimal` (default) → one line:
156
+
157
+ ```
158
+ → 3 commits created
159
+ ```
119
160
 
120
- Show a summary:
121
- - Number of commits created
122
- - Commit messages (one per line)
161
+ - `full` → multi-line summary: number of commits + commit messages
162
+ (one per line).
123
163
 
124
164
  ## Rules
125
165
 
@@ -50,18 +50,18 @@ For each changed `.md` file:
50
50
  pleasantries, hedging, connective fluff (however, furthermore, additionally),
51
51
  redundant wording, obvious framework knowledge, repeated explanations, decorative prose
52
52
  - **Shorten:** "in order to" → "to", "make sure to" → "ensure", use short synonyms
53
- - **Abbreviate** common terms when context unambiguous: `DB`, `auth`,
54
- `config`, `req`, `res`, `fn`, `impl`, `env`, `deps`, `ctx`. Skip on
55
- first occurrence of the concept in the file, or when the
56
- abbreviation collides with a domain term (`auth` stays
57
- `authentication` inside an auth-module file). Never abbreviate
58
- inside code blocks, frontmatter, file paths, command strings, or
59
- Iron Law fenced blocks.
53
+ - **Abbreviate** common terms when context is unambiguous: `DB`, `auth`,
54
+ `config`, `req`, `res`, `fn`, `impl`, `env`, `deps`, `ctx`. Skip if it
55
+ would be the first occurrence of the concept in the file, or if the
56
+ abbreviation collides with a domain term (e.g. `auth` stays
57
+ `authentication` inside an auth-module file). Never abbreviate inside
58
+ code blocks, frontmatter, file paths, command strings, or Iron Law
59
+ fenced blocks.
60
60
  - **Arrows for causality:** `X causes Y` / `X leads to Y` / `X, then Y`
61
- → `X → Y`. Keep arrows out of code blocks, frontmatter, and Iron
62
- Law fenced blocks; surrounding prose only. (Example phrases
63
- backticked on purpose inline-code protection skips them; never
64
- strip the backticks.)
61
+ → `X → Y`. Keep arrows out of code blocks, frontmatter, and Iron Law
62
+ fenced blocks; only the surrounding prose uses them. (The example
63
+ phrases here are intentionally backticked so the inline-code
64
+ protection skips them — never strip those backticks.)
65
65
  - **Fragments OK:** "Run tests before commit" not "You should always run tests before committing"
66
66
  - **Drop:** "you should", "make sure to", "remember to" — state action directly
67
67
  - **Merge** redundant bullets that say the same thing differently
@@ -142,9 +142,15 @@ python3 scripts/check_compression.py
142
142
  Must show **zero 🔴 errors**. Warnings (🟡) are acceptable.
143
143
  If any 🔴 errors remain: go back and fix those files before finishing.
144
144
 
145
- ## Step 5: Summary
145
+ ## Step 5: Summary (verbosity-gated)
146
146
 
147
- Show a summary table with per-category stats (files compressed, avg savings).
147
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
148
+ `minimal`).
149
+
150
+ - `off` → emit nothing on success; surface errors only.
151
+ - `minimal` (default) → one line: `→ N files compressed (avg X% savings)`.
152
+ - `full` → multi-line table with per-category stats (files compressed,
153
+ avg savings).
148
154
 
149
155
  ## Hash management
150
156