@event4u/agent-config 1.22.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 (91) hide show
  1. package/.agent-src/commands/agents/cleanup.md +31 -17
  2. package/.agent-src/commands/commit/in-chunks.md +30 -10
  3. package/.agent-src/commands/commit.md +46 -6
  4. package/.agent-src/commands/compress.md +19 -13
  5. package/.agent-src/commands/cost-report.md +120 -0
  6. package/.agent-src/commands/create-pr/description-only.md +8 -0
  7. package/.agent-src/commands/create-pr.md +95 -80
  8. package/.agent-src/commands/feature/plan.md +13 -7
  9. package/.agent-src/commands/memory/add.md +16 -8
  10. package/.agent-src/commands/memory/promote.md +17 -9
  11. package/.agent-src/commands/optimize/rtk.md +16 -11
  12. package/.agent-src/commands/prepare-for-review.md +12 -6
  13. package/.agent-src/commands/project-analyze.md +31 -20
  14. package/.agent-src/commands/review-changes.md +24 -15
  15. package/.agent-src/commands/roadmap/create.md +14 -9
  16. package/.agent-src/contexts/contracts/frugality-charter.md +57 -0
  17. package/.agent-src/rules/architecture.md +9 -0
  18. package/.agent-src/rules/ask-when-uncertain.md +3 -13
  19. package/.agent-src/rules/caveman-speak.md +78 -0
  20. package/.agent-src/rules/direct-answers.md +5 -14
  21. package/.agent-src/rules/markdown-safe-codeblocks.md +6 -7
  22. package/.agent-src/rules/no-cheap-questions.md +4 -14
  23. package/.agent-src/rules/token-efficiency.md +5 -7
  24. package/.agent-src/skills/adr-create/SKILL.md +197 -0
  25. package/.agent-src/skills/agent-docs-writing/SKILL.md +23 -1
  26. package/.agent-src/skills/command-writing/SKILL.md +23 -0
  27. package/.agent-src/skills/context-authoring/SKILL.md +23 -0
  28. package/.agent-src/skills/conventional-commits-writing/SKILL.md +23 -0
  29. package/.agent-src/skills/guideline-writing/SKILL.md +22 -0
  30. package/.agent-src/skills/persona-writing/SKILL.md +153 -0
  31. package/.agent-src/skills/readme-writing/SKILL.md +20 -0
  32. package/.agent-src/skills/readme-writing-package/SKILL.md +19 -0
  33. package/.agent-src/skills/roadmap-writing/SKILL.md +157 -0
  34. package/.agent-src/skills/rule-writing/SKILL.md +22 -0
  35. package/.agent-src/skills/script-writing/SKILL.md +226 -0
  36. package/.agent-src/skills/skill-writing/SKILL.md +23 -0
  37. package/.agent-src/skills/test-driven-development/SKILL.md +24 -0
  38. package/.agent-src/templates/agent-settings.md +73 -0
  39. package/.agent-src/templates/command.md +15 -10
  40. package/.agent-src/templates/rule.md +6 -0
  41. package/.agent-src/templates/skill.md +32 -0
  42. package/.claude-plugin/marketplace.json +6 -1
  43. package/AGENTS.md +3 -3
  44. package/CHANGELOG.md +35 -0
  45. package/README.md +5 -5
  46. package/docs/architecture.md +4 -4
  47. package/docs/customization.md +72 -0
  48. package/docs/decisions/INDEX.md +15 -0
  49. package/docs/getting-started.md +2 -2
  50. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +27 -19
  51. package/docs/guidelines/agent-infra/carve-out-predicates.md +17 -0
  52. package/docs/guidelines/agent-infra/mcp-request-signing.md +199 -0
  53. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +11 -4
  54. package/package.json +1 -1
  55. package/scripts/_lib/__init__.py +5 -0
  56. package/scripts/_lib/script_output.py +140 -0
  57. package/scripts/adr/regenerate_index.py +79 -0
  58. package/scripts/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +149 -0
  59. package/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +33 -0
  60. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +36 -0
  61. package/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +26 -0
  62. package/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +41 -0
  63. package/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +98 -0
  64. package/scripts/check_augmentignore.py +4 -1
  65. package/scripts/check_command_count_messaging.py +4 -1
  66. package/scripts/check_compressed_paths.py +4 -1
  67. package/scripts/check_council_layout.py +4 -1
  68. package/scripts/check_council_references.py +4 -1
  69. package/scripts/check_iron_law_prominence.py +3 -1
  70. package/scripts/check_md_language.py +3 -1
  71. package/scripts/check_memory_proposal.py +3 -1
  72. package/scripts/check_public_catalog_links.py +4 -1
  73. package/scripts/check_reply_consistency.py +8 -2
  74. package/scripts/check_roadmap_trackable.py +4 -1
  75. package/scripts/compile_router.py +27 -0
  76. package/scripts/compress.py +33 -19
  77. package/scripts/cost/budget.mjs +152 -0
  78. package/scripts/cost/track.mjs +144 -0
  79. package/scripts/first-run.sh +3 -9
  80. package/scripts/install-hooks.sh +19 -1
  81. package/scripts/install.py +17 -12
  82. package/scripts/install.sh +19 -8
  83. package/scripts/lint_examples.py +6 -2
  84. package/scripts/lint_handoffs.py +4 -1
  85. package/scripts/lint_load_context.py +4 -1
  86. package/scripts/lint_roadmap_complexity.py +6 -2
  87. package/scripts/lint_rule_interactions.py +4 -1
  88. package/scripts/lint_rule_tiers.py +4 -1
  89. package/scripts/measure_frugality_savings.py +164 -0
  90. package/scripts/runtime_dispatcher.py +11 -0
  91. package/scripts/skill_linter.py +207 -2
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: roadmap-writing
3
+ description: "Use when authoring or rewriting a roadmap in agents/roadmaps/ — phase prose, goal sentence, acceptance criteria, council notes — even when the user just says 'write a plan for X' or 'draft a roadmap'."
4
+ source: package
5
+ ---
6
+
7
+ <!-- cloud_safe: degrade -->
8
+
9
+ # roadmap-writing
10
+
11
+ ## When to use
12
+
13
+ * Authoring a new roadmap file in `agents/roadmaps/{name}.md` (or
14
+ module-scoped under `app/Modules/{Module}/agents/roadmaps/`)
15
+ * Rewriting an existing roadmap (phase restructure, goal pivot,
16
+ council-pass integration — not a checkbox flip)
17
+ * Drafting a phase block, exit criteria, or rollback section that
18
+ will land inside an existing roadmap
19
+
20
+ Do NOT use this skill when:
21
+
22
+ * Flipping checkboxes, regenerating the dashboard, archiving on
23
+ completion → use [`roadmap-management`](../roadmap-management/SKILL.md)
24
+ * Updating AGENTS.md / module docs / contexts → use
25
+ [`agent-docs-writing`](../agent-docs-writing/SKILL.md)
26
+ * Capturing an architectural decision → use
27
+ [`adr-create`](../adr-create/SKILL.md)
28
+
29
+ ## Roadmap-writing vs roadmap-management — critical test
30
+
31
+ | Intent | Artifact |
32
+ |---|---|
33
+ | "I need to write the plan body" | **roadmap-writing** (this skill) |
34
+ | "I need to track progress / regenerate dashboard / archive" | **roadmap-management** |
35
+
36
+ This skill owns the **prose authoring** axis: structure, goal
37
+ sentence, phase blocks, acceptance criteria. The execution and
38
+ dashboard-sync axis stays in `roadmap-management`.
39
+
40
+ ## Procedure
41
+
42
+ ### 0. Drafting protocol
43
+
44
+ Authoring or materially rewriting a roadmap must go through
45
+ Understand → Research → Draft per the
46
+ [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md)
47
+ rule. Inspect existing roadmaps under `agents/roadmaps/` for overlap
48
+ or supersession before opening a new one.
49
+
50
+ ### 1. Read the canonical template first
51
+
52
+ The structure, frontmatter, lifecycle, and complexity-tier rules live
53
+ in [`.agent-src.uncompressed/templates/roadmaps.md`](../../templates/roadmaps.md).
54
+ Read it before authoring. Do not restate its rules in the roadmap
55
+ body — link the template if a phase needs to override one.
56
+
57
+ ### 2. Pick complexity tier honestly
58
+
59
+ Default `lightweight` (≤ 6 phases, ≤ 600 lines). Only use
60
+ `structural` when the change touches a contract, kernel rule, or
61
+ budget invariant — the complexity linter enforces it. Standard:
62
+ [`roadmap-complexity-standard`](../../../docs/contracts/roadmap-complexity-standard.md).
63
+
64
+ ### 3. Write the goal first
65
+
66
+ One sentence, top of file, decidable: "Reduce X by Y on flow Z."
67
+ Vague goals ("improve roadmaps") force every reader to re-derive
68
+ intent. If the goal needs three sentences, the roadmap is two
69
+ roadmaps.
70
+
71
+ ### 4. Phase blocks carry checkboxes
72
+
73
+ Every non-intro phase contains at least one `- [ ]`. Decision tables
74
+ and council-pass notes capture the *why*; checkboxes capture the
75
+ *what to do next*. Without checkboxes the phase is invisible to
76
+ `agents/roadmaps-progress.md` — enforced by
77
+ [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md)
78
+ Iron Law #2.
79
+
80
+ ### 5. Exit & rollback per phase
81
+
82
+ Each phase declares **exit criteria** (decidable signals that the
83
+ phase is done) and **rollback** (what to revert if the phase fails).
84
+ A phase without exit criteria is open-ended; a phase without
85
+ rollback assumes success.
86
+
87
+ ## Output format
88
+
89
+ A single Markdown file at `agents/roadmaps/{name}.md`:
90
+
91
+ 1. Frontmatter (`status`, `complexity`)
92
+ 2. `# Road to {short title}`
93
+ 3. One-sentence outcome blockquote
94
+ 4. `## Goal` — decidable target
95
+ 5. `## Prerequisites` — checkboxes
96
+ 6. `## Context` — why now, links to tickets
97
+ 7. Numbered `## Phase N — {name}` sections with checkboxes,
98
+ exit criteria, rollback
99
+ 8. `## Acceptance criteria` — final gates
100
+
101
+ ## Frugality Standards
102
+
103
+ Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md)
104
+ to every roadmap you author.
105
+
106
+ **Examples in this artifact:**
107
+ - Per the charter's default-terse rule, the goal sentence states the
108
+ outcome — no "This roadmap exists because…" ramp-up.
109
+ - Per the cite-don't-restate principle, link the canonical template
110
+ for structural rules; do not paste them into the roadmap.
111
+ - Per the post-action summary suppression, council-pass integration
112
+ notes append to the existing phase block — no new "Summary of
113
+ council passes" section.
114
+ - Per the cheap-question check, never propose a "lightweight vs.
115
+ structural" numbered choice when the diff makes the answer
116
+ decidable.
117
+
118
+ **Pre-save self-check:**
119
+ 1. Does the goal sentence open with the outcome, or with backstory?
120
+ 2. Does any phase block restate template rules instead of linking
121
+ them?
122
+ 3. Are checkboxes present in every non-intro phase?
123
+ 4. Are exit criteria decidable, or vibe-based ("looks good")?
124
+ 5. Is content duplicated from another roadmap (supersession instead)?
125
+
126
+ ## Do NOT
127
+
128
+ * Author a roadmap without a goal sentence.
129
+ * Restate `templates/roadmaps.md` rules inside the roadmap body.
130
+ * Include version numbers, target releases, or git tags — banned by
131
+ template rule 13 + [`scope-control`](../../rules/scope-control.md#git-operations--permission-gated).
132
+ * Plan automatic branch switches mid-roadmap (template rule 14).
133
+ * Ship a phase without checkboxes (`roadmap-progress-sync` Iron Law #2).
134
+ * Use ALL-CAPS Iron-Law fenced blocks — those belong in
135
+ [`kernel-membership`](../../../docs/contracts/kernel-membership.md)-listed
136
+ rules, not roadmaps.
137
+
138
+ ## Gotchas
139
+
140
+ - **No checkboxes in a phase** — `agents/roadmaps-progress.md` cannot
141
+ count the phase; the dashboard reports zero open work even though
142
+ the phase has prose. Enforced by `roadmap-progress-sync` Iron Law #2.
143
+ - **Vague goal sentence** — "Improve roadmap quality" forces every
144
+ reader to re-derive intent and blocks decidable acceptance.
145
+ - **Restating template rules** — pasting structural rules into the
146
+ roadmap body creates two sources of truth that drift over months.
147
+ - **Version numbers in phase names** — `Phase 1 — v1.8.0` violates
148
+ template rule 13 and `scope-control § git-operations`.
149
+ - **Author-during-execution branch switches** — the agent should not
150
+ propose a new branch mid-roadmap; that decision is fenced to
151
+ authoring time.
152
+
153
+ ## Examples
154
+
155
+ See `agents/roadmaps/archive/road-to-token-frugality.md`
156
+ (structural, multi-phase, council-integrated) and any
157
+ `agents/roadmaps/road-to-*.md` for canonical structure.
@@ -165,6 +165,28 @@ and body links (relative `../../docs/...`, rewriter handles depth).
165
165
  * Forgetting to run `python3 scripts/compress.py --generate-tools` — downstream tools stay stale.
166
166
  * Editing `.agent-src/rules/` or `.augment/rules/` directly — those are generated.
167
167
 
168
+ ## Frugality Standards
169
+
170
+ Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md)
171
+ to every rule you author.
172
+
173
+ **Examples in this artifact:**
174
+ - Per the charter's default-terse rule, no intent prose in the rule
175
+ body — start with the obligation, not a setup paragraph.
176
+ - Per the Iron-Law literal predicate, ALL-CAPS fenced obligations
177
+ belong only when the rule sits on the
178
+ [`kernel-membership`](../../../docs/contracts/kernel-membership.md)
179
+ list.
180
+ - Per the cheap-question check, the rule's "When to ask" guidance
181
+ must list decidable triggers, not vibe-based judgment.
182
+
183
+ **Pre-save self-check:**
184
+ 1. Does the rule body open with the obligation, or with a setup
185
+ paragraph?
186
+ 2. Are any examples mere narration (no decidable test)?
187
+ 3. Are ALL-CAPS Iron-Law blocks used outside a kernel-listed rule?
188
+ 4. Are interactions duplicated from another rule rather than linked?
189
+
168
190
  ## Do NOT
169
191
 
170
192
  * Do NOT inline long procedures
@@ -0,0 +1,226 @@
1
+ ---
2
+ name: script-writing
3
+ description: "Use when adding or editing any script under `scripts/` — `--quiet` flag, `_lib/script_output` helpers, silent Taskfile wiring, Iron-Law carve-outs — even when you just say 'add a check script for X'."
4
+ source: package
5
+ ---
6
+
7
+ <!-- cloud_safe: degrade -->
8
+
9
+ # script-writing
10
+
11
+ ## When to use
12
+
13
+ * Creating a new Python script in `scripts/{name}.py` (linters, checks, generators, measure tools)
14
+ * Editing an existing script that prints progress or success lines
15
+ * Wiring a script into `Taskfile.yml` or `taskfiles/*.yml`
16
+ * Reviewing a PR that adds scripts and asking "why does this still print on minimal?"
17
+
18
+ Do NOT use this skill when:
19
+
20
+ * The content is a one-off / archival under `scripts/ai_council/one_off_archive/` — those carry an `_one_off_` prefix and are exempt from the verbosity convention
21
+ * The content is a shell entrypoint with secret prompts (install-keys, release confirms) → see § 3 Iron-Law carve-outs
22
+ * The content is a `.mjs` / Node script under `scripts/cost/` — different runtime; convention covered in `agents/contexts/cost-tracking.md`
23
+
24
+ ## Script vs other writers — critical test
25
+
26
+ | Intent | Artifact |
27
+ |---|---|
28
+ | "Maintenance script the agent or CI runs" | **This skill** |
29
+ | "User types `/foo` to invoke" | `command-writing` |
30
+ | "Constraint the agent must always honor" | `rule-writing` |
31
+ | "Reference knowledge agents cite" | `guideline-writing` |
32
+
33
+ Scripts orchestrate file checks, generators, and validators. They are
34
+ neither user-invoked nor agent-routed — `task` and CI call them.
35
+
36
+ ## Procedure
37
+
38
+ ### 0. Run the Drafting Protocol
39
+
40
+ Creating or materially rewriting a script that joins the linter / check
41
+ family **must** go through Understand → Research → Draft from the
42
+ [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md) rule.
43
+
44
+ * **Understand** — what failure does this script catch that no existing
45
+ check catches? Is it a one-off (then archive it) or evergreen?
46
+ * **Research** — `ls scripts/check_*.py scripts/lint_*.py`, grep for
47
+ overlap, skim 1–2 peer scripts (e.g. `lint_handoffs.py`,
48
+ `check_md_language.py`).
49
+ * **Draft** — propose name + one-line purpose first. Only fill the body
50
+ after the shape is confirmed.
51
+
52
+ ### 1. `--quiet` flag — argparse + sys.argv fallback
53
+
54
+ Every `check_*.py` / `lint_*.py` script MUST accept `--quiet` so the
55
+ silent Taskfile layer (§ 4) can suppress success-only output.
56
+
57
+ **With argparse (preferred):**
58
+
59
+ ```python
60
+ parser = argparse.ArgumentParser(...)
61
+ parser.add_argument("--quiet", action="store_true",
62
+ help="Only print on failure")
63
+ args = parser.parse_args()
64
+ ...
65
+ if not args.quiet:
66
+ print("✅ All clean")
67
+ ```
68
+
69
+ **Plain script (no argparse) fallback:**
70
+
71
+ ```python
72
+ import sys
73
+
74
+ QUIET = "--quiet" in sys.argv
75
+ ...
76
+ if not QUIET:
77
+ print("✅ All clean")
78
+ ```
79
+
80
+ Failure output (`❌`, non-zero exit) is **never** gated — failures must
81
+ always print regardless of `--quiet`.
82
+
83
+ ### 2. `_lib/script_output` helpers — preferred for new scripts
84
+
85
+ For anything richer than a single `✅`/`❌`, import the verbosity-aware
86
+ router instead of raw `print()`:
87
+
88
+ ```python
89
+ from _lib.script_output import info, success, warn, error, flush_summary
90
+
91
+ info("Loading manifest") # drops on silent + minimal
92
+ success("Wrote 3 files") # collected at minimal, printed at verbose
93
+ warn("Skipping stale entry") # stderr unless silent
94
+ error("Manifest missing") # stderr always
95
+
96
+ flush_summary("Done — 3 entries") # one-line summary at minimal
97
+ ```
98
+
99
+ Resolution order (first wins, cached for the process):
100
+
101
+ 1. `AGENT_SCRIPT_VERBOSITY` env (`silent` / `minimal` / `verbose`)
102
+ 2. `SCRIPT_OUTPUT_VERBOSE=1` alias (== `verbose`)
103
+ 3. `.agent-settings.yml` → `verbosity.script_output`
104
+ 4. Default `minimal`
105
+
106
+ The resolved level is exported back into `AGENT_SCRIPT_VERBOSITY` so
107
+ child processes inherit it. Tests reset via `reset_level()` from the
108
+ same module — see `tests/test_script_output.py`.
109
+
110
+ ### 3. Iron-Law carve-outs — never silenced
111
+
112
+ The following surfaces **MUST** use plain `print()` and never the
113
+ helpers, so verbosity settings cannot suppress them:
114
+
115
+ * Release confirms — every task in `taskfiles/release.yml`
116
+ * Secret prompts — `install-anthropic-key`, `install-openai-key`,
117
+ `setup-evals`, `install-hooks` interactive sections
118
+ * `runtime-e2e` and `test-triggers-live`
119
+ * CI orchestration sentinels — `_ci-start`, `_ci-end`, root `ci`
120
+ * Any prompt that asks the user for confirmation per
121
+ [`non-destructive-by-default`](../../rules/non-destructive-by-default.md) — Hard Floor cannot be silenced
122
+
123
+ If unsure, check `scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py`
124
+ `CARVE_OUTS` for the canonical list.
125
+
126
+ ### 4. Taskfile wiring — `silent: true` + `{{.QUIET_FLAG}}`
127
+
128
+ Every Taskfile task that wraps a `--quiet`-aware script MUST set
129
+ `silent: true` and pass `{{.QUIET_FLAG}}` to the script:
130
+
131
+ ```yaml
132
+ # Per-task in taskfiles/*.yml:
133
+ tasks:
134
+ lint-handoffs:
135
+ silent: true
136
+ cmd: python3 scripts/lint_handoffs.py {{.QUIET_FLAG}}
137
+ ```
138
+
139
+ The `QUIET_FLAG` var is defined once at the root of `Taskfile.yml`
140
+ and resolves to `""` only when `AGENT_SCRIPT_VERBOSITY=verbose`:
141
+
142
+ ```yaml
143
+ # Root Taskfile.yml — already in place, do not duplicate:
144
+ vars:
145
+ QUIET_FLAG:
146
+ sh: '[ "$AGENT_SCRIPT_VERBOSITY" = "verbose" ] && echo "" || echo "--quiet"'
147
+ ```
148
+
149
+ Carve-out tasks (release, install secrets, CI orchestration — see § 3)
150
+ do **not** add `silent: true` and do **not** use `{{.QUIET_FLAG}}`.
151
+
152
+ ### 5. Validate
153
+
154
+ * Run `python3 scripts/skill_linter.py .agent-src.uncompressed/skills/script-writing/SKILL.md` → 0 FAIL
155
+ * Run `python3 scripts/{your-script}.py --quiet` and the verbose path — exit code 0 on clean, non-zero on failure regardless of flag
156
+ * If the script uses `_lib/script_output`, add a test under `tests/` patterned on `tests/test_script_output.py` — assert `silent` / `minimal` / `verbose` behave per § 2
157
+ * Run the full CI pipeline locally (see `Taskfile.yml` in this repo for the script list) — must exit 0 except for tolerated warnings
158
+
159
+ ## Output format
160
+
161
+ 1. Script file at `scripts/{name}.py` with `--quiet` accepted
162
+ 2. Taskfile wiring with `silent: true` + `{{.QUIET_FLAG}}` (unless carve-out)
163
+ 3. Test under `tests/` if `_lib/script_output` is used
164
+ 4. Linter output showing 0 FAIL
165
+
166
+ ## Gotchas
167
+
168
+ * Forgetting `--quiet` — the silent Taskfile layer wraps the script and the call fails with `unrecognized arguments: --quiet`
169
+ * Gating `❌` failures behind `--quiet` — failures must always print
170
+ * Using raw `print()` for progress lines — drops on `minimal`, no inheritance
171
+ * Adding `silent: true` to a release / install-keys task — bypasses the Hard Floor confirmation
172
+ * Editing `Taskfile.yml`'s `QUIET_FLAG` var — single source of truth, do not duplicate
173
+ * Forgetting that `from _lib.script_output import …` requires the script's resolution to walk up to `scripts/` — copy the `Path(__file__).resolve().parent` pattern from a peer
174
+
175
+ ## Frugality Standards
176
+
177
+ Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md)
178
+ to every script you author. Phase 10 of the charter (settings hooks
179
+ row — `verbosity.script_output` / `verbosity.taskfile_command_echo`)
180
+ is what this skill exists to teach.
181
+
182
+ **Examples in this artifact:**
183
+ - Per the charter's default-terse rule, success lines are gated behind
184
+ `--quiet` so the only thing visible at `minimal` is the end-of-run
185
+ summary or a failure.
186
+ - Per the post-action summary suppression, scripts with multi-step
187
+ output collect via `success()` and emit one `flush_summary()` line.
188
+ - Per the cheap-question check, scripts never prompt unless they hit
189
+ a Hard Floor surface (§ 3 carve-outs).
190
+
191
+ **Pre-save self-check:**
192
+ 1. Does every `print("✅ ...")` line sit behind `--quiet` / the helper?
193
+ 2. Does the script add `silent: true` + `{{.QUIET_FLAG}}` to its
194
+ Taskfile entry (unless a carve-out)?
195
+ 3. Are failure lines (`❌`, exit non-zero) **never** gated by quiet?
196
+ 4. Are Iron-Law surfaces using plain `print()` and not the helper?
197
+
198
+ ## Do NOT
199
+
200
+ * Do NOT gate `❌` / failure output behind `--quiet`
201
+ * Do NOT use `_lib/script_output` for release confirms or secret prompts
202
+ * Do NOT add `silent: true` to carve-out tasks
203
+ * Do NOT hardcode `print()` for progress in new scripts — use `info()`
204
+ * Do NOT skip the Taskfile wiring — without it the verbosity gates leak
205
+ * Do NOT edit `.agent-src/`, `.augment/`, or `.claude/` projections
206
+
207
+ ## Cloud Behavior
208
+
209
+ On cloud surfaces (Claude.ai Web, Skills API) the package's `task`
210
+ runner and `_lib/script_output` are not reachable. The skill still
211
+ applies — with prose-only validation:
212
+
213
+ * Emit the full script + Taskfile snippet as copyable Markdown blocks. Do not attempt to write to disk.
214
+ * Self-check: `--quiet` accepted, failures never gated, success lines gated, helper imports look syntactically right.
215
+ * Tell the user to save under `scripts/{name}.py`, wire the Taskfile entry, and run `task lint-skills && task ci` locally before committing.
216
+ * Skip every reference to running the linter or `task` commands yourself — they only run on the user's machine.
217
+
218
+ ## Examples
219
+
220
+ Good description (trigger-shaped, names domain + symptoms):
221
+
222
+ > "Use when adding or editing any script under `scripts/` — `--quiet` flag, `_lib/script_output` helpers, silent Taskfile wiring, Iron-Law carve-outs — even when you just say 'add a check script for X'."
223
+
224
+ Bad description (vague, no trigger):
225
+
226
+ > "Script conventions"
@@ -295,6 +295,29 @@ utility libs, or simple state managers.
295
295
  * Renaming a heading to "Procedure:" without numbered steps or `###` sub-headings
296
296
  * **Always run `python3 scripts/skill_linter.py` before saving — 0 FAIL required**
297
297
 
298
+ ## Frugality Standards
299
+
300
+ Apply the [Frugality Charter](../../contexts/contracts/frugality-charter.md)
301
+ to every skill you author.
302
+
303
+ **Examples in this artifact:**
304
+ - Per the charter's default-terse rule, the SKILL.md `## Procedure`
305
+ opens with the action ("Run the linter"), not "Let me walk you
306
+ through…".
307
+ - Per the cheap-question check, only emit numbered-options output
308
+ when consequences differ — never as a stylistic choice.
309
+ - Per the post-action summary suppression, the example output ships
310
+ the artifact, not a wrapping `## Status` / `## Summary` block.
311
+
312
+ **Pre-save self-check:**
313
+ 1. Does any procedure step open with "Let me", "Now I will", "Found
314
+ it", "OK", or "Alright"?
315
+ 2. Does the skill prescribe numbered-options output without a real
316
+ consequence trade-off?
317
+ 3. Does the example output include a post-action summary block?
318
+ 4. Does the description carry filler ("comprehensive", "advanced",
319
+ "powerful")?
320
+
298
321
  ## Do NOT
299
322
 
300
323
  * Write documentation-style, pointer-only, or too-broad skills ("Laravel skill")
@@ -27,6 +27,30 @@ Do NOT use when:
27
27
  * Catch edge cases **before** they become production bugs.
28
28
  * Leave every change with a regression test that runs in CI.
29
29
 
30
+ ## Escalate to a SPARC-style 5-phase workflow when
31
+
32
+ Plain TDD (red → green → refactor) is the right size for **most** work.
33
+ A small subset benefits from a gated 5-phase wrapper —
34
+ **S**pec → **P**seudocode → **A**rchitecture → **R**efine → **C**omplete —
35
+ where each gate produces a written artifact before the next phase runs.
36
+
37
+ Decision tree — escalate if **any** branch is true:
38
+
39
+ * The ticket has **AC count > 5** (the spec itself is non-trivial — write
40
+ it down before testing it).
41
+ * The change **modifies a contract** consumed by ≥1 other module
42
+ (public API signature, persisted schema, event payload, queue message).
43
+ * The change cuts across **≥3 modules / bounded contexts** at once.
44
+
45
+ When escalating: drop the `Spec` artifact in `agents/roadmaps/` (or the
46
+ project's planning location), capture it as an ADR via [`adr-create`](../adr-create/SKILL.md)
47
+ when the decision is load-bearing, then run plain TDD inside each
48
+ `Refine` cycle. Do **not** skip RED→GREEN inside a SPARC phase — the
49
+ wrapper adds gates, not exemptions.
50
+
51
+ For everything else (single-AC ticket, leaf-module change, bug fix),
52
+ stay on plain TDD — the section above.
53
+
30
54
  ## The core discipline
31
55
 
32
56
  ```
@@ -311,6 +311,69 @@ commands:
311
311
  # repo (gitignored). Maintainer-targeted feature; consumers leave it
312
312
  # off. See `.augment/contexts/contracts/artifact-engagement-flow.md`
313
313
  # (once Phase 3 of road-to-artifact-engagement-telemetry lands).
314
+ # --- Verbosity (token frugality) ---
315
+ #
316
+ # Five toggles controlling what the agent shows after acting.
317
+ # Default = terse. Flip to true to restore legacy verbose output.
318
+ # See agents/roadmaps/road-to-token-frugality.md for the full rationale
319
+ # and the contexts/contracts/frugality-charter.md for the writer-side
320
+ # standard.
321
+ verbosity:
322
+ # Show generated commit messages, PR titles/bodies, branch names
323
+ # before acting. false = use generated content directly.
324
+ preview_artifacts: false
325
+
326
+ # Confirmation prompts for routine workflow steps when there is
327
+ # one obvious answer ("looks good — commit?"). Iron-Law gates
328
+ # (commit-policy, scope-control git-ops, non-destructive) ALWAYS
329
+ # ask regardless of this flag.
330
+ routine_confirmations: false
331
+
332
+ # Offer "run AI Council on this?" inside delivery commands
333
+ # (/feature-plan, /review-changes, /roadmap-create). Council
334
+ # commands themselves (/council, /create-pr → already excluded)
335
+ # are unaffected.
336
+ offer_council_in_delivery: false
337
+
338
+ # Multi-line status / summary blocks after a successful action.
339
+ # off | minimal | full — default minimal (one-line confirmation).
340
+ post_action_reports: minimal
341
+
342
+ # Intent announcements ("Let me check…", "Now I will…", "Found
343
+ # it") in skill bodies. false = act and emit the result.
344
+ intent_announcements: false
345
+
346
+ # Script stdout chatter from `scripts/*.py`, `scripts/*.sh`, and
347
+ # `.augment/scripts/`. Read by the helper module
348
+ # `scripts/_lib/script_output.py`.
349
+ # silent = stderr only; success = no output
350
+ # minimal = one summary line per script (default)
351
+ # verbose = pre-Phase-10 behaviour (per-step prints)
352
+ # Override per-process: AGENT_SCRIPT_VERBOSITY={silent,minimal,verbose}
353
+ # Iron-Law surfaces (release confirms, install secrets prompts,
354
+ # error markers) ignore this key and stay loud.
355
+ script_output: minimal
356
+
357
+ # Suppress the `task: [name] cmd...` echo line that Taskfile prints
358
+ # before each task body. false = keep echoes (default Taskfile
359
+ # behaviour). true = the Taskfile sets `silent: true` on every
360
+ # safe task per Phase 10.3.
361
+ taskfile_command_echo: false
362
+
363
+ # --- Caveman speak (authoring-only) ---
364
+ #
365
+ # Caveman-style compression scope for newly authored prose. The
366
+ # compile-time toggle (`caveman.speak`) is added in Phase 8.
367
+ # `speak_scope` lands now so the charter and consumers can pin it.
368
+ caveman:
369
+ # speak_scope = how widely caveman-speak grammar applies in chat
370
+ # off = no caveman grammar in output (compile-time still
371
+ # governed by caveman.speak)
372
+ # prose_only = caveman in body prose; numbered options +
373
+ # Iron-Law-literal blocks stay full prose
374
+ # aggressive = caveman everywhere except Iron-Law literals
375
+ speak_scope: prose_only
376
+
314
377
  telemetry:
315
378
  artifact_engagement:
316
379
  # Master switch. `false` (default) produces zero file IO and zero
@@ -342,6 +405,10 @@ Personal and project-level settings (initial file written by
342
405
  **Key paths use dot-notation** to denote nesting: `personal.user_name`
343
406
  lives under `personal:` in YAML.
344
407
 
408
+ The `verbosity.*` and `caveman.speak_scope` rows are summarized below;
409
+ the canonical narrative lives in
410
+ [`docs/customization.md` § Verbosity](../../docs/customization.md#verbosity).
411
+
345
412
  | Key path | Values | Default | Description |
346
413
  |---|---|---|---|
347
414
  | `cost_profile` | `minimal`, `balanced`, `full`, `custom` | `minimal` | Selects which agent surfaces are active. See [Cost profiles](#cost-profiles). |
@@ -386,6 +453,12 @@ lives under `personal:` in YAML.
386
453
  | `commands.suggestion.max_options` | integer | `4` | Max number of command suggestions before the always-present "run as-is" option (total rendered = `max_options + 1`). |
387
454
  | `commands.suggestion.blocklist` | list of command names | `[]` | Commands that never appear as a suggestion. They still work when typed explicitly. |
388
455
  | `commands.create_pr.preview_description` | `true`, `false` | `false` | When `false`: `/create-pr` skips the title/body preview + adjust loop and uses the generated content directly. Saves agent tokens. When `true`: show title and body before creating and ask for adjustments. `/create-pr:description-only` always previews regardless of this setting. |
456
+ | `verbosity.preview_artifacts` | `true`, `false` | `false` | Show generated commit messages, PR titles/bodies, branch names before acting. `false` = use generated content directly. See [`road-to-token-frugality`](../../../agents/roadmaps/road-to-token-frugality.md) Phase 2/3. |
457
+ | `verbosity.routine_confirmations` | `true`, `false` | `false` | Confirmation prompts for routine workflow steps when there is one obvious answer ("looks good — commit?"). Iron-Law gates (`commit-policy`, `scope-control` git-ops, `non-destructive-by-default`) ALWAYS ask regardless. |
458
+ | `verbosity.offer_council_in_delivery` | `true`, `false` | `false` | Offer "run AI Council on this?" inside delivery commands (`/feature-plan`, `/review-changes`, `/roadmap-create`). Council commands themselves are unaffected. |
459
+ | `verbosity.post_action_reports` | `off`, `minimal`, `full` | `minimal` | Multi-line status / summary blocks after a successful action. `off` = no report; `minimal` = one-line confirmation; `full` = bullet list. |
460
+ | `verbosity.intent_announcements` | `true`, `false` | `false` | Intent announcements ("Let me check…", "Now I will…", "Found it") in skill bodies. `false` = act and emit the result. |
461
+ | `caveman.speak_scope` | `off`, `prose_only`, `aggressive` | `prose_only` | How widely caveman-speak grammar applies in chat. `off` = no caveman grammar; `prose_only` = caveman in body prose, numbered options + Iron-Law-literal blocks stay full prose; `aggressive` = caveman everywhere except Iron-Law literals. Compile-time toggle (`caveman.speak`) lands in Phase 8. |
389
462
  | `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. |
390
463
  | `telemetry.artifact_engagement.granularity` | `task`, `phase-step`, `tool-call` | `task` | Boundary at which events are recorded. `tool-call` is expensive — opt-in only. |
391
464
  | `telemetry.artifact_engagement.record.consulted` | `true`, `false` | `true` | When `true`: record artefacts loaded into context. |
@@ -67,16 +67,21 @@ suggestion:
67
67
 
68
68
  ### N. Present findings
69
69
 
70
- <!-- For audit/analysis commands: always present findings before applying changes.
71
- For action commands: show summary of what was done. -->
72
-
73
- Ask the user:
74
-
75
- ```
76
- > 1. {Option 1}
77
- > 2. {Option 2}
78
- > 3. Skip report only
79
- ```
70
+ <!-- For audit/analysis commands: state findings, then act or hand back.
71
+ For action commands: state what was done.
72
+
73
+ Default-terse per the
74
+ [Frugality Charter](../contexts/contracts/frugality-charter.md):
75
+ no preview-then-confirm pair, no "Ready to proceed?" gate, no
76
+ numbered options unless options differ in *consequence* (per
77
+ `no-cheap-questions § Pre-Send Self-Check`). Routine confirmations
78
+ are governed by `verbosity.routine_confirmations: false` (default).
79
+
80
+ Only emit a numbered-options block when ALL of:
81
+ 1. Two or more options carry distinct consequences (not sequencing/format),
82
+ 2. The user has not fenced the next step (per `scope-control § fenced step`),
83
+ 3. No option violates `commit-policy`, `scope-control § git-ops`,
84
+ or `non-destructive-by-default`. -->
80
85
 
81
86
  ## Rules
82
87
 
@@ -85,6 +85,12 @@ routes_to:
85
85
 
86
86
  # {Rule Title}
87
87
 
88
+ <!-- Default-terse per the
89
+ [Frugality Charter](../contexts/contracts/frugality-charter.md):
90
+ start with the obligation. No "This rule explains…" / "The purpose of
91
+ this rule is…" / narrative intro before the Iron Law. Body sections
92
+ are pointers, not playbooks — defer detail to skills/guidelines. -->
93
+
88
94
  **Iron Law.** {The single non-negotiable behavior the rule enforces.}
89
95
 
90
96
  ## When this fires
@@ -136,6 +136,38 @@ Do NOT use when:
136
136
  - Do NOT {anti-pattern 2}.
137
137
  - Do NOT {anti-pattern 3}.
138
138
 
139
+ <!-- FRUGALITY STANDARDS (writer skills only — REQUIRED for skills whose
140
+ name ends in `-writing`, `-authoring`, or `-create`, AND for any
141
+ skill on the `FRUGALITY_WRITER_SKILLS` allowlist in
142
+ `scripts/skill_linter.py`. Mid-/untiered non-writer skills MUST
143
+ remove this section entirely.
144
+
145
+ Layer-1 of the linter checks for:
146
+ 1. The literal H2 `## Frugality Standards`,
147
+ 2. A markdown link matching the regex
148
+ `\[[^\]]+\]\([^)]*frugality-charter\.md[^)]*\)`.
149
+
150
+ Body shape — single charter cite, then 3–5 decidable pre-save
151
+ questions framed as *applying the charter*, not parallel rules
152
+ (council Pass #4 finding 0.B):
153
+
154
+ ## Frugality Standards
155
+
156
+ Per the [Frugality Charter](../../contexts/contracts/frugality-charter.md),
157
+ this writer applies the default-terse standard: no narrative intros,
158
+ no preview-then-confirm gates, no numbered options without a real
159
+ trade-off.
160
+
161
+ Pre-save self-check:
162
+ 1. Does every body section start with the obligation, not an intro?
163
+ 2. Are numbered options absent unless options differ in *consequence*?
164
+ 3. Is every cited rule linked, not restated?
165
+ 4. {artifact-specific question — e.g., for `command-writing`:
166
+ "Does the command honor `verbosity.routine_confirmations: false`?"}
167
+ 5. {artifact-specific question — e.g., for `rule-writing`:
168
+ "Does the rule body open with the Iron Law, no preamble?"}
169
+ -->
170
+
139
171
  <!-- SENIOR-TIER STUB BLOCKS (delete entire section if not `tier: senior`):
140
172
  Senior-tier skills (frontmatter `tier: senior`) require four extra
141
173
  blocks per `.agent-src.uncompressed/rules/skill-quality.md` §