@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,120 @@
1
+ ---
2
+ name: cost-report
3
+ description: Capture token cost from the active Claude Code session, append to the local sessions store, and surface the 50/75/90/100% budget alert ladder with cost-profile suggestions.
4
+ skills: [file-editor]
5
+ disable-model-invocation: true
6
+ suggestion:
7
+ eligible: true
8
+ trigger_description: "check this session's token cost, see budget utilization, surface 50/75/90/100% alert ladder"
9
+ trigger_context: "user wants to know how expensive the active Claude Code session is or whether it crosses a budget threshold"
10
+ ---
11
+
12
+ <!-- cloud_safe: noop -->
13
+
14
+ # /cost:report
15
+
16
+ Records the current Claude Code session's token usage and checks it against
17
+ the configured budget. Local-only: writes to
18
+ `agents/cost-tracking/sessions.jsonl` (no MCP / external services).
19
+
20
+ ## Steps
21
+
22
+ ### 1. Capture the active session
23
+
24
+ ```bash
25
+ node scripts/cost/track.mjs
26
+ ```
27
+
28
+ Emits a Markdown summary of the session (model breakdown, per-tier cost,
29
+ total USD) and appends a JSON record to
30
+ `agents/cost-tracking/sessions.jsonl`.
31
+
32
+ If `track.mjs` exits 2 with `no Claude Code project dir`, the user is not in
33
+ a Claude Code session — surface that and stop.
34
+
35
+ ### 2. Check the budget
36
+
37
+ ```bash
38
+ node scripts/cost/budget.mjs check
39
+ ```
40
+
41
+ Reads the runtime budget config under `agents/cost-tracking/` (set via step 4
42
+ if missing) and the JSONL store, computes utilization, and prints the alert
43
+ level.
44
+
45
+ ### 3. Surface the alert ladder
46
+
47
+ The check output already includes the level. Translate it into a
48
+ profile recommendation per the table:
49
+
50
+ | Level | Utilization | Recommendation |
51
+ |---|---|---|
52
+ | 🟢 OK | < 50% | within budget — no action |
53
+ | 🟡 INFO | ≥ 50% | log notification, no UX disruption |
54
+ | 🟠 WARNING | ≥ 75% | suggest [`/set-cost-profile balanced→minimal`](set-cost-profile.md) |
55
+ | 🔴 CRITICAL | ≥ 90% | recommend model downgrades, consider [`/set-cost-profile minimal`](set-cost-profile.md) |
56
+ | 🛑 HARD_STOP | ≥ 100% | halt non-essential work; review before continuing (`budget.mjs check` exits 1) |
57
+
58
+ If `level` ≥ WARNING and the current `cost_profile` in `.agent-settings.yml`
59
+ is not already `minimal`, add an explicit suggestion sentence:
60
+
61
+ > Run [`/set-cost-profile`](set-cost-profile.md) to switch from your
62
+ > current profile to a leaner one.
63
+
64
+ ### 4. First-run: prompt to set a budget
65
+
66
+ If `budget.mjs check` reports `no budget configured`, ask the user (one
67
+ question per turn — see [`ask-when-uncertain`](../rules/ask-when-uncertain.md)):
68
+
69
+ > No budget set yet. What monthly USD cap do you want to track against?
70
+ > (e.g. 25, 50, 200)
71
+
72
+ On reply, run:
73
+
74
+ ```bash
75
+ node scripts/cost/budget.mjs set <usd>
76
+ ```
77
+
78
+ Then re-run step 2.
79
+
80
+ ### 5. Period filter (optional)
81
+
82
+ If the user asks for spend in a specific window — "this week", "today",
83
+ "this month" — re-run with `BUDGET_PERIOD`:
84
+
85
+ ```bash
86
+ BUDGET_PERIOD=week node scripts/cost/budget.mjs check
87
+ ```
88
+
89
+ Allowed values: `today`, `week`, `month`, `all` (default).
90
+
91
+ ## Rules
92
+
93
+ - **Local-only.** Never persist cost data to remote stores. The
94
+ JSONL store and the `budget.json` config both live inside `agents/`,
95
+ which is gitignored by default in consumer projects.
96
+ - **Don't auto-switch profiles.** This command surfaces a recommendation;
97
+ the user runs [`/set-cost-profile`](set-cost-profile.md) themselves.
98
+ Auto-mutation of `.agent-settings.yml` would breach
99
+ [`commit-policy`](../rules/commit-policy.md) and
100
+ [`scope-control`](../rules/scope-control.md).
101
+ - **Honor HARD_STOP.** When `budget.mjs check` exits 1, surface the alert
102
+ prominently and stop the current task — do not keep working through the
103
+ cap silently.
104
+
105
+ ## See also
106
+
107
+ - [`/set-cost-profile`](set-cost-profile.md) — change `cost_profile` in
108
+ `.agent-settings.yml`.
109
+ - [`/agent-status`](agent-status.md) — per-conversation token estimate
110
+ (different scope: in-flight estimate, not historical actuals).
111
+ - [`scripts/cost/track.mjs`](../../scripts/cost/track.mjs) — tracker source.
112
+ - [`scripts/cost/budget.mjs`](../../scripts/cost/budget.mjs) — budget source.
113
+
114
+ ## Attribution
115
+
116
+ Forked from
117
+ [`ruvnet/ruflo`](https://github.com/ruvnet/ruflo)
118
+ `plugins/ruflo-cost-tracker/scripts/{track,budget}.mjs`. The MCP
119
+ `memory_store` dependency was replaced with a local JSONL append; the
120
+ 50/75/90/100% alert ladder and pricing tiers are preserved verbatim.
@@ -30,17 +30,34 @@ The user invoked `/council default` on exactly one input mode:
30
30
  Optional invocation flag: `mode:api|manual` overrides the per-member
31
31
  and global mode for this call only (see Step 2.5).
32
32
 
33
- Optional **rounds**: `rounds:N` (1-3) overrides the multi-round debate
34
- count. Round 1 sees the artefact alone. Round 2+ sees the artefact plus
35
- anonymised critiques from the previous round (provider/model identity
36
- stripped). Total spend = N × single-round cost; surface in cost gate.
37
-
38
- Default comes from `ai_council.min_rounds` in `.agent-settings.yml`
39
- (default `2` so members critique each other at least once before
40
- convergence). **Do NOT ask "how many rounds?"** when `rounds:N` is
41
- unset or `N <= min_rounds` — proceed with the settings default. Ask
42
- only when the artefact is genuinely complex; surface as a numbered
43
- choice with the cost delta.
33
+ Optional **rounds**: `rounds:N` (1-3) overrides the multi-round
34
+ debate count. Round 1 sees the artefact alone. Round 2+ sees the
35
+ artefact plus anonymised critiques from the previous round
36
+ (provider/model identity stripped). Total spend = N × single-round
37
+ cost; surface this in the cost gate.
38
+
39
+ Optional **depth**: `depth:deep` raises the round floor to
40
+ `ai_council.deep_min_rounds` (default `3`, max'd with `min_rounds`)
41
+ for architecture, refactoring, or bug-diagnosis artefacts. Set
42
+ explicitly by the user, or derived from `council_depth: deep`
43
+ declared in the frontmatter of the active rule, skill, or command —
44
+ the host translates that to `--depth deep` on the CLI. If multiple
45
+ active artefacts disagree, **deep wins** (max policy). Explicit
46
+ `rounds:N` overrides depth.
47
+
48
+ The default comes from `ai_council.min_rounds` in
49
+ `.agent-settings.yml` (default `2` so members critique each other at
50
+ least once before convergence). **Do NOT ask the user "how many
51
+ rounds?"** when `rounds:N` is unset or `N <= min_rounds` — proceed
52
+ with the settings default. Ask only when the artefact is genuinely
53
+ complex and you want more depth than `min_rounds` provides; surface
54
+ the proposal as a numbered choice (per `ask-when-uncertain`) with
55
+ the cost delta.
56
+
57
+ Resolution chain (highest priority first):
58
+ 1. `rounds:N` / `--rounds N` — explicit user override.
59
+ 2. `depth:deep` / `--depth deep` — floors at `max(deep_min_rounds, min_rounds)`.
60
+ 3. `ai_council.min_rounds` — default.
44
61
 
45
62
  Optional **mode_override**: `mode_override=pr|design|optimize` swaps
46
63
  the system-prompt addendum for one of the specialised lenses
@@ -135,6 +152,7 @@ Once the user picks `1`, invoke the same arguments with `run` plus
135
152
  --output agents/council-sessions/<UTC-timestamp>.json \
136
153
  --confirm \
137
154
  [--rounds 1|2|3] \
155
+ [--depth standard|deep] \
138
156
  [--input-mode …] [--max-tokens …] [--mode-override …] \
139
157
  [--original-ask "<framing sentence>"]
140
158
  ```
@@ -143,7 +161,13 @@ Once the user picks `1`, invoke the same arguments with `run` plus
143
161
  `.agent-settings.yml` (or `2` if unset). Pass `--rounds N` only when
144
162
  the user explicitly asked for a different count or a complex
145
163
  artefact justifies more depth — do not pass `--rounds 1` to "save
146
- money" by default; settings owner already chose `min_rounds`.
164
+ money" by default; the settings owner already chose `min_rounds`.
165
+
166
+ `--depth` defaults to `standard`. Set `--depth deep` when the
167
+ active rule, skill, or command declares `council_depth: deep` in
168
+ its frontmatter; the floor becomes
169
+ `max(ai_council.deep_min_rounds, ai_council.min_rounds)` (default
170
+ `3`). If `--rounds N` is also passed, `--rounds` wins.
147
171
 
148
172
  The CLI:
149
173
 
@@ -169,12 +193,35 @@ the **Convergence / Divergence** section yourself:
169
193
  - **Agreements** — points all members made (or did not contradict).
170
194
  - **Disagreements** — points where members took opposing positions.
171
195
  - **Unique insights** — points raised by exactly one member.
172
- - **Suggested next actions** — translated into concrete options for
173
- the user.
174
196
 
175
- End with a numbered-options block asking the user how to proceed
176
- (e.g. update the roadmap, request a second round, ignore the
177
- critique).
197
+ ### 5a. Apply the critical-evaluation lens
198
+
199
+ Before turning findings into options, run every finding through the
200
+ *Critical evaluation* checklist from the
201
+ [`ai-council` skill](../../skills/ai-council/SKILL.md#critical-evaluation--convener-skeptic-stance):
202
+ codebase fit · locked-decision conflict · already addressed · cost
203
+ / benefit · hallucination. Cite host evidence (file:line, ADR,
204
+ contract) for each verdict.
205
+
206
+ Render a **Host verdict** table after `Convergence / Divergence`:
207
+
208
+ | # | Finding (one-line) | Member(s) | Verdict | Reason (host evidence) |
209
+ |---|---|---|---|---|
210
+ | 1 | … | sonnet, gpt-4o | `accept` | matches `path/to/file.py:42` |
211
+ | 2 | … | sonnet | `accept-with-modification` | scope creep — narrow to module X |
212
+ | 3 | … | gpt-4o | `reject` | contradicts ADR `docs/decisions/foo.md` |
213
+ | 4 | … | sonnet | `needs-input` | ambiguous — open question for user |
214
+
215
+ The host is the convener **and** the skeptic — never paraphrase
216
+ council output as host reasoning, and never auto-promote convergence
217
+ to correctness.
218
+
219
+ ### 5b. Translate verdicts into user options
220
+
221
+ End with a numbered-options block carrying the host verdict per
222
+ finding (e.g. `1. [accept] Apply finding 1 — <patch summary>`,
223
+ `2. [reject] Skip finding 2 — <reason>` — user can override). Always
224
+ include "discard council input" as an option.
178
225
 
179
226
  ### 6. Hard floor — text only
180
227
 
@@ -13,6 +13,14 @@ suggestion:
13
13
 
14
14
  # /create-pr:description-only
15
15
 
16
+ > **Carve-out:** this command's *purpose* is the copyable preview of
17
+ > the PR description. It therefore **ignores**
18
+ > `verbosity.preview_artifacts` and `commands.create_pr.preview_description`
19
+ > — both flags govern only the bare `/create-pr` flow's preview-and-
20
+ > adjust loop. Removing the preview here would make the command a
21
+ > no-op. Do not "fix" this; the suppression flags only apply when the
22
+ > PR is actually being created.
23
+
16
24
  ## Input
17
25
 
18
26
  The user may or may not provide a PR URL or branch name.
@@ -45,100 +45,119 @@ Uses `/create-pr:description-only` to generate the PR content, then creates the
45
45
 
46
46
  ### 2. Generate PR content
47
47
 
48
- Run `/create-pr:description-only` to generate the PR title and body.
48
+ Run `/create-pr:description-only` Steps 1–4 to generate the PR title and body.
49
49
  This handles: Jira ticket extraction, diff analysis, commit messages, **PR template filling**.
50
50
 
51
51
  **CRITICAL**: The PR body MUST use the project's PR template (`.github/pull_request_template.md`).
52
52
  Read the template file and fill in its sections. If the template does not exist, use the
53
53
  fallback structure defined in `/create-pr:description-only`. NEVER invent a custom body structure.
54
54
 
55
- The user reviews and adjusts the content in that step.
56
-
57
- ### 2b. Offer council review (B2 hook)
58
-
59
- If `.agent-settings.yml` has `ai_council.enabled: true` **and** at least
60
- one member is enabled, ask (in the user's language):
61
-
62
- > 1. Run the council on this diff before opening the PR? (billable)
63
- > 2. Skip council review
64
-
65
- Suppress when `personal.autonomy: on` (council is billable; autonomy
66
- must not silently spend — see `road-to-ai-council.md` Decision 3).
67
-
68
- If picked **1**:
69
-
70
- - Compute the diff range — `origin/<default>..HEAD` from step 1.
71
- - Run `/council diff:<base>..<head>` with `original_ask` set to the
72
- PR title from step 2 (the user's framing of the change).
73
- - Surface findings to the user before step 3. **Do not** auto-edit
74
- the PR body or block PR creation — output is advisory.
75
- - Optional: offer to append a one-paragraph "Council notes" section
76
- to the PR description for reviewer transparency. Default: skip.
77
-
78
- If picked **2** → continue.
79
-
80
- ### 3. Create the PR
81
-
82
- Once the user approves the content from step 2:
83
-
84
- - **Head branch**: Use the EXACT output of `git branch --show-current` from step 1.
85
- **NEVER** reuse a branch name from earlier in the conversation — always use the fresh value.
86
- - **Base branch**: Default branch (`main` / `master`).
87
- - Ask the user:
88
- ```
89
- > 1. Create as draft
90
- > 2. Create as ready for review
91
- ```
92
- - Create the PR via GitHub API with the approved title and body.
93
- - **CRITICAL**: Set the `draft` parameter based on the user's choice:
94
- - Option 1 → `"draft": true`
95
- - Option 2 → `"draft": false`
96
- - Do NOT default to draft. The user's choice is the ONLY factor.
97
- - **After creating with `draft: false`**: The GitHub REST API sometimes ignores
98
- `draft: false` and creates a draft anyway. Always verify by running:
99
- ```bash
100
- gh pr view {number} --json isDraft --jq '.isDraft'
101
- ```
102
- If it returns `true`, fix it immediately:
103
- ```bash
104
- gh pr ready {number}
105
- ```
55
+ **Preview gate** read `commands.create_pr.preview_description` from
56
+ `.agent-settings.yml` (default `false` when unset):
106
57
 
107
- ### 4. After creation
58
+ - `false` (default): skip Steps 5–6 of `/create-pr:description-only` (the
59
+ copyable preview block + adjust loop). Use the generated title and body
60
+ directly in Step 3 below. This saves agent tokens by avoiding a full
61
+ re-render of the description in chat. The user can still edit the PR
62
+ body in the GitHub UI after creation.
63
+ - `true`: run Steps 5–6 of `/create-pr:description-only` — present the
64
+ title and body as copyable blocks and ask for adjustments before
65
+ proceeding. The user reviews and adjusts the content in that step.
108
66
 
109
- #### 4a. Strip attribution footers (mandatory)
67
+ ### 2b. Council review explicitly excluded
110
68
 
111
- `github-api` may server-side-append attribution after a clean send.
112
- Per [`no-attribution-footers`](../rules/no-attribution-footers.md),
113
- re-check the body after creation **and after every body PATCH**:
69
+ `/create-pr` does **not** prompt for council review, even when
70
+ `ai_council.enabled: true`. Invoking the PR command is an explicit
71
+ delivery action; interrupting it with a billable opt-in question is
72
+ out of scope.
114
73
 
115
- 1. `GET /repos/{owner}/{repo}/pulls/{number}` re-fetch body.
116
- 2. Search (case-insensitive) for: `Generated with [Augment Code]`,
117
- `🤖 Generated with`, `Pull Request opened by [Augment Code]`,
118
- `Co-authored by Augment Code`, unsolicited `augmentcode.com` link.
119
- 3. If any present, strip with surrounding `---` and trailing
120
- whitespace, then `PATCH /pulls/{number}` with cleaned body.
121
- 4. Re-fetch to verify. If the pattern reappears, repeat once; if
122
- still present, surface to user and stop (no strip/PATCH loop).
123
- 5. Note in the reply how many footers were removed (or "clean").
74
+ Users who want a council pass on the diff run `/council diff:<base>..<head>`
75
+ **before** `/create-pr`. Do not re-add the prompt here without an explicit
76
+ user request.
124
77
 
125
- #### 4b. Show the PR URL
78
+ ### 3. Create the PR (draft-vs-ready, verbosity-gated)
126
79
 
127
- #### 4c. Jira transition
80
+ - **Head branch**: EXACT output of `git branch --show-current` from step 1.
81
+ - **Base branch**: default branch (`main` / `master`).
128
82
 
129
- If a Jira ticket was linked, ask:
130
- ```
131
- > Transition Jira ticket {TICKET-ID} to "In Review"?
132
- >
133
- > 1. Yes — update status
134
- > 2. No — leave as-is
83
+ **Behavior change vs. legacy:** with `verbosity.routine_confirmations:
84
+ false` (default), `/create-pr` creates the PR as draft silently. Override
85
+ per-invocation with `:ready` / `:final` / `:draft`. Restore the prompt
86
+ by flipping `routine_confirmations: true`. See
87
+ [`docs/customization.md` § Verbosity](../../docs/customization.md#verbosity).
88
+
89
+ Resolve `"draft"` (first match wins):
90
+
91
+ 1. `:ready` / `:final` arg → `false`.
92
+ 2. `:draft` arg → `true`.
93
+ 3. `routine_confirmations: true` → ask `1. draft / 2. ready`.
94
+ 4. Default → `true` (silent draft).
95
+
96
+ Create the PR with the approved title/body and the resolved `draft`.
97
+
98
+ **Verify after `draft: false`** — the GitHub REST API sometimes ignores
99
+ the flag:
100
+
101
+ ```bash
102
+ gh pr view {number} --json isDraft --jq '.isDraft'
103
+ # returns true → gh pr ready {number}
135
104
  ```
136
105
 
106
+ **Silent-draft postscript** (rule 4) → see step 4b.
107
+
108
+ ### 4. After creation
109
+
110
+ #### 4a. Strip attribution footers (mandatory)
111
+
112
+ Some `github-api` tool surfaces append attribution server-side after
113
+ the agent has sent a clean body. Per
114
+ [`no-attribution-footers`](../rules/no-attribution-footers.md), every
115
+ PR body must be re-checked and stripped after every write.
116
+
117
+ Run this strip-pass **after PR creation and after every body PATCH**:
118
+
119
+ 1. Re-fetch the PR body:
120
+ ```
121
+ GET /repos/{owner}/{repo}/pulls/{number}
122
+ ```
123
+ 2. Search the body (case-insensitive) for any of:
124
+ - `Generated with [Augment Code]` / `🤖 Generated with`
125
+ - `Pull Request opened by [Augment Code]`
126
+ - `Co-authored by Augment Code`
127
+ - Any `augmentcode.com` link the user did not ask for
128
+ 3. If any pattern is present, remove it together with surrounding
129
+ `---` separators and trailing whitespace, then:
130
+ ```
131
+ PATCH /repos/{owner}/{repo}/pulls/{number}
132
+ { "body": "<cleaned body>" }
133
+ ```
134
+ 4. Re-fetch the body once more to verify the strip stuck. If a
135
+ pattern reappears (server re-injection), repeat steps 2–4 once;
136
+ if it still reappears, surface the issue to the user and stop
137
+ (do not enter a strip/PATCH loop).
138
+ 5. Briefly note in the reply how many footers were removed (or
139
+ "no footers found" if clean).
140
+
141
+ #### 4b. Show the PR URL (verbosity-gated)
142
+
143
+ Per `verbosity.post_action_reports` (default `minimal`):
144
+
145
+ - `off` → nothing.
146
+ - `minimal` → `→ #N opened: <url>`. Append `→ created as draft — run
147
+ \`gh pr ready N\` to flip` when silent-draft (rule 4); omit on ready.
148
+ - `full` → multi-line: PR number, URL, draft state, base/head, ready-reminder.
149
+
150
+ #### 4c. Jira transition (only when transitioned)
151
+
152
+ Linked ticket + `routine_confirmations: true` → ask `1. Yes / 2. No`.
153
+ Default (`false`) → skip silently. **Only emit a transition line when
154
+ an actual Jira API call succeeded** — never announce "skipped".
155
+
137
156
  ### Rules
138
157
 
139
- - **Always use the PR template** from `.github/pull_request_template.md` — read it, fill its sections.
140
- - **Always show the PR content before creating it** never create blindly.
141
- - **Push the branch first** if it hasn't been pushed (with user permission).
142
- - **Never add attribution footers** — see [`no-attribution-footers`](../rules/no-attribution-footers.md). Strip-pass in 4a defends against tool-injected footers.
143
- - Only create the PR — never merge it.
144
- - Only commit or push with explicit user permission.
158
+ - **Always use the PR template** from `.github/pull_request_template.md`.
159
+ - **Preview is opt-in** `commands.create_pr.preview_description` (default `false`). `/create-pr:description-only` always previews.
160
+ - **Push the branch first** if needed (with permission).
161
+ - **No attribution footers** — see [`no-attribution-footers`](../rules/no-attribution-footers.md); strip-pass at 4a defends against tool injection.
162
+ - Only create the PR — never merge.
163
+ - Only commit or push with explicit permission.
@@ -209,16 +209,22 @@ Mir sind noch ein paar offene Fragen aufgefallen:
209
209
  Hast du dazu schon eine Meinung?
210
210
  ```
211
211
 
212
- ### 5d. Offer council idea-validation (B4 hook)
212
+ ### 5d. Offer council idea-validation (B4 hook, verbosity-gated)
213
213
 
214
- Once the conversation has converged on a problem statement, proposal,
215
- and rough scope (rounds 1–4), but **before** step 6 writes the file,
216
- ask (in the user's language):
214
+ Once rounds 1–4 have converged but **before** step 6 writes the file,
215
+ read `verbosity.offer_council_in_delivery` from `.agent-settings.yml`
216
+ (default `false`):
217
217
 
218
- > 1. Run the council on this idea before writing the plan? (billable)
219
- > 2. Skip write the plan now
218
+ - `false` (default): skip the prompt silently. When `ai_council.enabled:
219
+ true`, emit one line: `→ council skipped (set
220
+ verbosity.offer_council_in_delivery: true to enable, or run
221
+ /council directly)`. When `ai_council.enabled: false`, emit nothing.
222
+ - `true`: ask (in the user's language):
220
223
 
221
- Suppress when `personal.autonomy: on` (council is billable).
224
+ > 1. Run the council on this idea before writing the plan? (billable)
225
+ > 2. Skip — write the plan now
226
+
227
+ Also suppress when `personal.autonomy: on` (council is billable).
222
228
 
223
229
  If picked **1**:
224
230
 
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: grill-me
3
+ description: Alias for /challenge-me — interactive grill-style interview that sharpens a fuzzy plan/idea into a copyable Markdown pitch
4
+ cluster: challenge-me
5
+ disable-model-invocation: true
6
+ suggestion:
7
+ eligible: true
8
+ trigger_description: "grill me, grill me on this, grill me on this plan, grill me through this, grill me on the idea, grill me until it's clear, grill me hard"
9
+ trigger_context: "user has a fuzzy plan/idea/feature draft and wants it sharpened interactively rather than reconstructed in one shot"
10
+ ---
11
+
12
+ # /grill-me
13
+
14
+ Alias for [`/challenge-me`](challenge-me.md). Identical behaviour,
15
+ sub-commands (`vision`, `with-docs`), and in-interview triggers
16
+ (`!pitch`, `!roadmap`, `!ai`).
17
+
18
+ ## Sub-commands
19
+
20
+ | Sub-command | Routes to | Purpose |
21
+ |---|---|---|
22
+ | `/grill-me vision` | `commands/challenge-me/vision.md` | 95%-confidence interview, emits a vision pitch |
23
+ | `/grill-me with-docs` | `commands/challenge-me/with-docs.md` | Same flow plus glossary + claim-vs-code check vs `CONTEXT.md` / ADRs |
24
+
25
+ ## Dispatch
26
+
27
+ 1. Parse: `/grill-me <sub-command> [flags] [seed]`.
28
+ 2. Load [`commands/challenge-me.md`](challenge-me.md) and follow its
29
+ `## Dispatch` verbatim with the same sub-command + flags + seed.
30
+ 3. Unknown / missing sub-command → print menu from `challenge-me.md`.
31
+
32
+ ## Rules
33
+
34
+ - Thin alias — all behaviour, triggers, cost-gate, file-write rules
35
+ live in [`challenge-me.md`](challenge-me.md) and the routed sub-commands.
36
+ Do not duplicate them here; edit them there.
37
+ - Suggestion engine surfaces this for free-form "grill me" prompts;
38
+ `/grill-me` is the direct invocation path.
@@ -7,7 +7,7 @@ description: Execute an ordered plan step by step with a judge gate between step
7
7
  disable-model-invocation: true
8
8
  suggestion:
9
9
  eligible: false
10
- rationale: "Subagent orchestration — overlaps /work and /roadmap-execute; keep explicit."
10
+ rationale: "Subagent orchestration — overlaps /work and /roadmap:process-*; keep explicit."
11
11
  ---
12
12
 
13
13
  # /judge steps
@@ -115,14 +115,22 @@ link resolves. Broken link → block and ask the user to fix.
115
115
  - Duplicate of an existing entry (step 2) — update instead.
116
116
  - Missing `source:` — an entry without evidence cannot be reviewed.
117
117
 
118
- ## Output format
119
-
120
- ```
121
- ✅ Added <type>/<id> (confidence: <high|medium|low>)
122
- Path: agents/memory/<type>.yml (or agents/memory/<type>/<hash>.yml)
123
- Gate: scripts/check_memory.pyPASS
124
- Next: commit and link from the relevant skill/command.
125
- ```
118
+ ## Output format (verbosity-gated)
119
+
120
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
121
+ `minimal`).
122
+
123
+ - `off`emit nothing on success; surface gate failures only.
124
+ - `minimal` (default) one line:
125
+ `✅ Added <type>/<id> (gate: PASS)`.
126
+ - `full` → multi-line block:
127
+
128
+ ```
129
+ ✅ Added <type>/<id> (confidence: <high|medium|low>)
130
+ Path: agents/memory/<type>.yml (or agents/memory/<type>/<hash>.yml)
131
+ Gate: scripts/check_memory.py → PASS
132
+ Next: commit and link from the relevant skill/command.
133
+ ```
126
134
 
127
135
  ## See also
128
136
 
@@ -120,15 +120,23 @@ git push -u origin memory/promote-<curated-id>
120
120
  # Then route to /create-pr with the memory-promote template hint.
121
121
  ```
122
122
 
123
- ### 7. Report
124
-
125
- ```
126
- > ✅ Promotion drafted.
127
- > - Signal: <sig-id>
128
- > - Curated: <curated-id> in agents/memory/<type>.yml
129
- > - PR: <url or branch name>
130
- > - Next: review + merge
131
- ```
123
+ ### 7. Report (verbosity-gated)
124
+
125
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
126
+ `minimal`).
127
+
128
+ - `off` emit nothing on success; surface errors only.
129
+ - `minimal` (default) one line:
130
+ `→ Promoted <sig-id> → <curated-id> (PR: <url or branch>)`.
131
+ - `full` → multi-line block:
132
+
133
+ ```
134
+ > ✅ Promotion drafted.
135
+ > - Signal: <sig-id>
136
+ > - Curated: <curated-id> in agents/memory/<type>.yml
137
+ > - PR: <url or branch name>
138
+ > - Next: review + merge
139
+ ```
132
140
 
133
141
  ## Safety
134
142
 
@@ -103,17 +103,22 @@ Run a quick test to confirm rtk picks up the filters:
103
103
  rtk config 2>&1 | tail -5
104
104
  ```
105
105
 
106
- ### 7. Present results
107
-
108
- Show a summary table:
109
-
110
- ```
111
- | # | Filter | Match | Max Lines |
112
- |---|---|---|---|
113
- | 1 | phpstan | phpstan\|quality:phpstan\|vendor/bin/phpstan | 80 |
114
- | 2 | pest | pest\|phpunit\|artisan test | 60 |
115
- | ... | ... | ... | ... |
116
- ```
106
+ ### 7. Present results (verbosity-gated)
107
+
108
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
109
+ `minimal`).
110
+
111
+ - `off` emit nothing on success; surface errors only.
112
+ - `minimal` (default) → one line: `→ N filters configured in .rtk/rtk.toml`.
113
+ - `full` multi-line summary table:
114
+
115
+ ```
116
+ | # | Filter | Match | Max Lines |
117
+ |---|---|---|---|
118
+ | 1 | phpstan | phpstan\|quality:phpstan\|vendor/bin/phpstan | 80 |
119
+ | 2 | pest | pest\|phpunit\|artisan test | 60 |
120
+ | ... | ... | ... | ... |
121
+ ```
117
122
 
118
123
  ### Rules
119
124
 
@@ -80,12 +80,18 @@ Once all merges succeed:
80
80
  git checkout {head-branch-of-target-PR}
81
81
  ```
82
82
 
83
- ### 7. Report
84
-
85
- Inform the user:
86
- - Which branch chain was processed (in order)
87
- - That the target branch is now checked out and up to date
88
- - Any warnings (e.g. branch was already up to date)
83
+ ### 7. Report (verbosity-gated)
84
+
85
+ Read `verbosity.post_action_reports` from `.agent-settings.yml` (default
86
+ `minimal`).
87
+
88
+ - `off` emit nothing on success; surface warnings/errors only.
89
+ - `minimal` (default) → one line:
90
+ `→ {branch} ready · {N} branches merged · {warnings or "clean"}`.
91
+ - `full` → multi-line block listing:
92
+ - Which branch chain was processed (in order)
93
+ - That the target branch is now checked out and up to date
94
+ - Any warnings (e.g. branch was already up to date)
89
95
 
90
96
  ## Rules
91
97