@event4u/agent-config 1.17.0 → 1.19.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 (158) hide show
  1. package/.agent-src/commands/council/default.md +74 -76
  2. package/.agent-src/commands/feature/roadmap.md +22 -0
  3. package/.agent-src/commands/roadmap/create.md +38 -6
  4. package/.agent-src/commands/roadmap/execute.md +36 -9
  5. package/.agent-src/rules/agent-authority.md +1 -0
  6. package/.agent-src/rules/agent-docs.md +1 -0
  7. package/.agent-src/rules/analysis-skill-routing.md +1 -0
  8. package/.agent-src/rules/architecture.md +1 -0
  9. package/.agent-src/rules/artifact-drafting-protocol.md +1 -0
  10. package/.agent-src/rules/artifact-engagement-recording.md +1 -0
  11. package/.agent-src/rules/ask-when-uncertain.md +1 -0
  12. package/.agent-src/rules/augment-portability.md +1 -0
  13. package/.agent-src/rules/augment-source-of-truth.md +1 -0
  14. package/.agent-src/rules/autonomous-execution.md +1 -0
  15. package/.agent-src/rules/capture-learnings.md +1 -0
  16. package/.agent-src/rules/chat-history-cadence.md +34 -0
  17. package/.agent-src/rules/chat-history-ownership.md +1 -0
  18. package/.agent-src/rules/chat-history-visibility.md +1 -0
  19. package/.agent-src/rules/cli-output-handling.md +2 -2
  20. package/.agent-src/rules/command-suggestion-policy.md +1 -0
  21. package/.agent-src/rules/commit-conventions.md +1 -0
  22. package/.agent-src/rules/commit-policy.md +1 -0
  23. package/.agent-src/rules/context-hygiene.md +28 -0
  24. package/.agent-src/rules/direct-answers.md +18 -26
  25. package/.agent-src/rules/docker-commands.md +1 -0
  26. package/.agent-src/rules/docs-sync.md +1 -0
  27. package/.agent-src/rules/downstream-changes.md +1 -0
  28. package/.agent-src/rules/e2e-testing.md +1 -0
  29. package/.agent-src/rules/guidelines.md +1 -0
  30. package/.agent-src/rules/improve-before-implement.md +1 -0
  31. package/.agent-src/rules/language-and-tone.md +1 -0
  32. package/.agent-src/rules/laravel-translations.md +1 -0
  33. package/.agent-src/rules/markdown-safe-codeblocks.md +1 -0
  34. package/.agent-src/rules/minimal-safe-diff.md +1 -0
  35. package/.agent-src/rules/missing-tool-handling.md +1 -0
  36. package/.agent-src/rules/model-recommendation.md +1 -0
  37. package/.agent-src/rules/no-cheap-questions.md +15 -21
  38. package/.agent-src/rules/no-roadmap-references.md +1 -0
  39. package/.agent-src/rules/non-destructive-by-default.md +1 -0
  40. package/.agent-src/rules/onboarding-gate.md +33 -0
  41. package/.agent-src/rules/package-ci-checks.md +1 -0
  42. package/.agent-src/rules/php-coding.md +1 -0
  43. package/.agent-src/rules/preservation-guard.md +1 -0
  44. package/.agent-src/rules/review-routing-awareness.md +1 -0
  45. package/.agent-src/rules/reviewer-awareness.md +1 -0
  46. package/.agent-src/rules/roadmap-progress-sync.md +49 -0
  47. package/.agent-src/rules/role-mode-adherence.md +2 -2
  48. package/.agent-src/rules/rule-type-governance.md +29 -0
  49. package/.agent-src/rules/runtime-safety.md +1 -0
  50. package/.agent-src/rules/scope-control.md +1 -0
  51. package/.agent-src/rules/security-sensitive-stop.md +1 -0
  52. package/.agent-src/rules/size-enforcement.md +1 -0
  53. package/.agent-src/rules/skill-improvement-trigger.md +1 -0
  54. package/.agent-src/rules/skill-quality.md +1 -0
  55. package/.agent-src/rules/slash-command-routing-policy.md +39 -0
  56. package/.agent-src/rules/think-before-action.md +1 -0
  57. package/.agent-src/rules/token-efficiency.md +1 -0
  58. package/.agent-src/rules/tool-safety.md +1 -0
  59. package/.agent-src/rules/ui-audit-gate.md +1 -0
  60. package/.agent-src/rules/upstream-proposal.md +1 -0
  61. package/.agent-src/rules/user-interaction.md +1 -0
  62. package/.agent-src/rules/verify-before-complete.md +1 -0
  63. package/.agent-src/skills/roadmap-management/SKILL.md +29 -4
  64. package/.agent-src/skills/verify-completion-evidence/SKILL.md +8 -1
  65. package/.agent-src/templates/agent-settings.md +16 -0
  66. package/.agent-src/templates/roadmaps.md +12 -3
  67. package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +9 -0
  68. package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +4 -0
  69. package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +4 -0
  70. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +163 -0
  71. package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +111 -0
  72. package/.agent-src/templates/scripts/work_engine/hooks/settings.py +36 -0
  73. package/.agent-src/templates/scripts/work_engine/scoring/decision_trace.py +141 -0
  74. package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +125 -0
  75. package/.claude-plugin/marketplace.json +1 -1
  76. package/CHANGELOG.md +97 -0
  77. package/README.md +20 -20
  78. package/config/agent-settings.template.yml +23 -0
  79. package/docs/architecture.md +1 -1
  80. package/docs/catalog.md +5 -2
  81. package/docs/contracts/adr-settings-sync-engine.md +127 -0
  82. package/docs/contracts/decision-trace-v1.md +146 -0
  83. package/docs/contracts/file-ownership-matrix.json +7 -0
  84. package/docs/contracts/hook-architecture-v1.md +213 -0
  85. package/docs/contracts/load-context-budget-model.md +80 -0
  86. package/docs/contracts/load-context-schema.md +20 -0
  87. package/docs/contracts/memory-visibility-v1.md +138 -0
  88. package/docs/contracts/one-off-script-lifecycle.md +109 -0
  89. package/docs/contracts/roadmap-complexity-standard.md +137 -0
  90. package/docs/contracts/rule-interactions.yml +22 -0
  91. package/docs/customization.md +1 -0
  92. package/docs/development.md +4 -1
  93. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
  94. package/docs/guidelines/agent-infra/direct-answers-demos.md +145 -0
  95. package/docs/guidelines/agent-infra/layered-settings.md +32 -13
  96. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
  97. package/package.json +1 -1
  98. package/scripts/agent-config +64 -0
  99. package/scripts/ai_council/bundler.py +3 -3
  100. package/scripts/ai_council/clients.py +24 -8
  101. package/scripts/ai_council/one_off_archive/2026-05/README.md +67 -0
  102. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +206 -0
  103. package/scripts/ai_council/{_one_off_roundtrip.py → one_off_archive/2026-05/_one_off_roundtrip.py} +13 -8
  104. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +180 -0
  105. package/scripts/ai_council/session.py +92 -0
  106. package/scripts/build_rule_trigger_matrix.py +360 -0
  107. package/scripts/capture_showcase_session.py +361 -0
  108. package/scripts/chat_history.py +11 -1
  109. package/scripts/check_always_budget.py +46 -2
  110. package/scripts/check_one_off_location.py +81 -0
  111. package/scripts/check_references.py +6 -0
  112. package/scripts/compress.py +5 -2
  113. package/scripts/context_hygiene_hook.py +181 -0
  114. package/scripts/council_cli.py +357 -0
  115. package/scripts/hook_manifest.yaml +184 -0
  116. package/scripts/hooks/__init__.py +1 -0
  117. package/scripts/hooks/augment-context-hygiene.sh +55 -0
  118. package/scripts/hooks/augment-dispatcher.sh +72 -0
  119. package/scripts/hooks/augment-onboarding-gate.sh +55 -0
  120. package/scripts/hooks/cline-dispatcher.sh +86 -0
  121. package/scripts/hooks/cursor-dispatcher.sh +76 -0
  122. package/scripts/hooks/dispatch_hook.py +348 -0
  123. package/scripts/hooks/envelope.py +98 -0
  124. package/scripts/hooks/gemini-dispatcher.sh +117 -0
  125. package/scripts/hooks/state_io.py +122 -0
  126. package/scripts/hooks/windsurf-dispatcher.sh +123 -0
  127. package/scripts/hooks_status.py +146 -0
  128. package/scripts/install.py +728 -51
  129. package/scripts/install.sh +1 -1
  130. package/scripts/lint_examples.py +98 -0
  131. package/scripts/lint_hook_manifest.py +216 -0
  132. package/scripts/lint_one_off_age.py +184 -0
  133. package/scripts/lint_roadmap_complexity.py +127 -0
  134. package/scripts/lint_rule_tiers.py +78 -0
  135. package/scripts/lint_showcase_sessions.py +148 -0
  136. package/scripts/minimal_safe_diff_hook.py +245 -0
  137. package/scripts/onboarding_gate_hook.py +142 -0
  138. package/scripts/readme_linter.py +12 -3
  139. package/scripts/roadmap_progress_hook.py +5 -0
  140. package/scripts/schemas/rule.schema.json +5 -0
  141. package/scripts/sync_agent_settings.py +32 -129
  142. package/scripts/sync_yaml_rt.py +734 -0
  143. package/scripts/verify_before_complete_hook.py +216 -0
  144. /package/scripts/ai_council/{_one_off_2a4_acceptance.py → one_off_archive/2026-05/_one_off_2a4_acceptance.py} +0 -0
  145. /package/scripts/ai_council/{_one_off_context_layer_v1_estimate.py → one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py} +0 -0
  146. /package/scripts/ai_council/{_one_off_context_layer_v1_review.py → one_off_archive/2026-05/_one_off_context_layer_v1_review.py} +0 -0
  147. /package/scripts/ai_council/{_one_off_followups_review.py → one_off_archive/2026-05/_one_off_followups_review.py} +0 -0
  148. /package/scripts/ai_council/{_one_off_nondestructive_inline_audit.py → one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py} +0 -0
  149. /package/scripts/{_one_off_phase4_dispatch_latency.py → ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py} +0 -0
  150. /package/scripts/{_one_off_phase6_trigger_jaccard.py → ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py} +0 -0
  151. /package/scripts/ai_council/{_one_off_phase_2a_budget_rebalance.py → one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py} +0 -0
  152. /package/scripts/ai_council/{_one_off_phase_2a_post_revert.py → one_off_archive/2026-05/_one_off_phase_2a_post_revert.py} +0 -0
  153. /package/scripts/ai_council/{_one_off_rebalancing_audit.py → one_off_archive/2026-05/_one_off_rebalancing_audit.py} +0 -0
  154. /package/scripts/ai_council/{_one_off_rule_hardening_v1.py → one_off_archive/2026-05/_one_off_rule_hardening_v1.py} +0 -0
  155. /package/scripts/ai_council/{_one_off_structural_open_questions.py → one_off_archive/2026-05/_one_off_structural_open_questions.py} +0 -0
  156. /package/scripts/ai_council/{_one_off_structural_optimization.py → one_off_archive/2026-05/_one_off_structural_optimization.py} +0 -0
  157. /package/scripts/ai_council/{_one_off_structural_v3_gaps.py → one_off_archive/2026-05/_one_off_structural_v3_gaps.py} +0 -0
  158. /package/scripts/ai_council/{_one_off_structural_v3_review.py → one_off_archive/2026-05/_one_off_structural_v3_review.py} +0 -0
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "always"
3
+ tier: "3"
3
4
  description: "Always — direct, unembellished answers. No flattery, no invented facts (verify load-bearing claims, otherwise ask). Emojis only as functional markers. Brevity is the default."
4
5
  alwaysApply: true
5
6
  source: package
@@ -22,8 +23,7 @@ ANSWER THE SUBSTANCE. SHIP THE TRUTH.
22
23
  - No subjective judgments on user's code/decisions ("nice approach", "boring") unless evaluation was asked.
23
24
  - "Good catch" / "you're right" only when literally true and load-bearing.
24
25
  - Acknowledge mistakes without performative apologies — one sentence, switch behavior.
25
-
26
- Failure mode: praise as a hedge before bad news. Drop the cushion, deliver the news.
26
+ - Failure mode — praise hedging bad news; drop the cushion, deliver the news.
27
27
 
28
28
  ## Iron Law 2 — No Invented Facts (severity-tiered)
29
29
 
@@ -39,11 +39,10 @@ WHEN VERIFICATION IS NOT WORTH THE COST → ASK.
39
39
  | **Medium — project-shape** ("uses X for Y", conventions, file location) | Verify if one tool call reaches it; otherwise hedge: *"I'd guess X — not checked"*. |
40
40
  | **Low — well-known idioms** (generic language/framework idioms, public APIs) | Inference acceptable. Mark as inference if not 100% sure. |
41
41
 
42
- Concrete examples and hedge-language patterns:
42
+ Examples + hedge-language patterns:
43
43
  [`asking-and-brevity-examples`](../../docs/guidelines/agent-infra/asking-and-brevity-examples.md#direct-answers--severity-tiered-claim-examples).
44
-
45
- User override: "just guess", "rough estimate is fine", "skip the
46
- verify" → drop to Low for that turn.
44
+ Override: "just guess", "rough estimate is fine", "skip the verify"
45
+ drop to Low for that turn.
47
46
 
48
47
  ## Iron Law 3 — Brevity by Default
49
48
 
@@ -60,33 +59,26 @@ LONG ANSWERS ARE A FAILURE MODE, NOT A SIGN OF EFFORT.
60
59
  - One-true-answer question → one sentence + the answer.
61
60
 
62
61
  `token-efficiency` covers the loop side; this rule covers per-reply
63
- length. **Never overrides** `user-interaction` (numbered options
64
- stay) or command-mandated steps.
62
+ length. **Never overrides** `user-interaction` (numbered options stay)
63
+ or command-mandated steps.
65
64
 
66
65
  ## Emoji Scope — functional markers only
67
66
 
68
- **Whitelist (allowed):**
69
-
70
- - Mandated markers: `📒` (chat-history heartbeat, verbatim per
71
- `chat-history-visibility`), mode markers from `role-mode-adherence`.
72
- - CLI status: `❌`, `✅`, `⚠️` (two-space rule from `language-and-tone`).
73
- - Roadmap checkboxes: `[x]`, `[~]`, `[-]`.
67
+ **Whitelist:** `📒` (chat-history heartbeat, verbatim per
68
+ `chat-history-visibility`); mode markers from `role-mode-adherence`;
69
+ CLI status `❌` / `✅` / `⚠️` (two-space rule from `language-and-tone`);
70
+ roadmap checkboxes `[x]` / `[~]` / `[-]`.
74
71
 
75
- **Blacklist (never in prose):**
72
+ **Blacklist (never in prose):** opening flair (✨, 🚀, 🎉, 💡, 🔥, 👍);
73
+ empathy (❤️, 🤗, 😊); section dividers, headline ornaments, reaction
74
+ emojis. Unsure → assume blacklist.
76
75
 
77
- - Opening flair: ✨, 🚀, 🎉, 💡, 🔥, 👍.
78
- - Empathy: ❤️, 🤗, 😊.
79
- - Section dividers, headline ornaments, reaction emojis.
76
+ ## Failure modes
80
77
 
81
- Unsure assume blacklist.
82
-
83
- ## Failure modes the user will call out
84
-
85
- Trigger phrases per Iron Law and the in-language correction pattern:
78
+ Trigger phrases + in-language correction pattern:
86
79
  [`asking-and-brevity-examples`](../../docs/guidelines/agent-infra/asking-and-brevity-examples.md#direct-answers--failure-modes-the-user-will-call-out).
87
-
88
- When called out: acknowledge once in the user's language, switch,
89
- no excuses (mirrors `language-and-tone` § slip handling).
80
+ On call-out: acknowledge once in the user's language, switch, no
81
+ excuses (mirrors `language-and-tone` § slip handling).
90
82
 
91
83
  ## Interactions
92
84
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "3"
3
4
  alwaysApply: false
4
5
  description: "Running PHP commands inside Docker containers — artisan, composer, phpstan, rector, ecs, phpunit, tests, migrations, and any CLI tool execution"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "Keeping .augment/ contexts, counts, and cross-references in sync when creating, renaming, or deleting skills, commands, rules, guidelines, templates, or any agent infrastructure files"
4
5
  source: package
5
6
  load_context:
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2b"
3
4
  alwaysApply: false
4
5
  description: "After EVERY code edit, find ALL downstream changes needed to existing files, including callers, tests, imports, types, and documentation"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "3"
3
4
  alwaysApply: false
4
5
  description: "Playwright E2E tests — locators, assertions, Page Objects, fixtures, CI, and flaky test prevention"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "3"
3
4
  description: "Writing or reviewing code — check relevant guideline before writing or reviewing code"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2b"
3
4
  description: "Before implementing features or architectural changes — validate the request against existing code, challenge weak requirements, and suggest improvements"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "always"
3
+ tier: "3"
3
4
  description: "Language and tone — informal German Du, English code comments, .md files always English"
4
5
  alwaysApply: true
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  alwaysApply: false
4
5
  description: "Laravel language files, translations, i18n, lang/de, lang/en, __() helper, localization, multilingual text"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2b"
3
4
  description: "Generating markdown output that contains code blocks — prevent broken nesting"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  alwaysApply: false
4
5
  description: "When writing or reviewing a diff — the smallest change that solves the stated problem; no drive-by edits, no opportunistic refactors, no reformatting of untouched code"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: auto
3
+ tier: "2a"
3
4
  source: package
4
5
  description: "When a CLI tool needed for the task is not installed — ask before working around it; do NOT install silently"
5
6
  ---
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "Starting a new task, switching task type, or invoking a command — detect task complexity and recommend the optimal model (Opus/Sonnet/GPT) before any work"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "always"
3
+ tier: "3"
3
4
  description: "No cheap questions — never ask what context answers, never offer Iron-Law-violating options, never stage no-trade-off choices; mode-independent (off / auto / on)"
4
5
  alwaysApply: true
5
6
  source: package
@@ -9,13 +10,10 @@ source: package
9
10
 
10
11
  A question is **cheap** when the answer follows from stated context,
11
12
  an option breaches an Iron Law, choices differ only in sequencing /
12
- format, or one option is obviously dominant. Cheap questions are
13
- noise, regardless of `personal.autonomy`.
14
-
15
- Mode-independent. [`autonomous-execution`](autonomous-execution.md)'s
16
- "trivial" failure modes scope to `personal.autonomy: on` (or
17
- `auto`-after-opt-in); this rule lifts the **no-trade-off** subset to
18
- `off` and pre-opt-in `auto` too.
13
+ format, or one option is obviously dominant. Mode-independent holds
14
+ in `off`, `auto`, and `on`; autonomy never lifts the no-trade-off
15
+ floor (cf. [`autonomous-execution`](autonomous-execution.md), whose
16
+ "trivial" failure modes only scope to `on` / opted-in `auto`).
19
17
 
20
18
  ## The Iron Laws
21
19
 
@@ -35,16 +33,12 @@ Hold in `off`, `auto`, and `on`. Autonomy never lifts them.
35
33
  - **CI / test asks** — [`verify-before-complete`](verify-before-complete.md) decides, not the user.
36
34
  - **Fenced-step re-asks** — "Start Phase 1?" after *"plan only"*; see
37
35
  [`scope-control § fenced step`](scope-control.md#fenced-step--user-set-review-gates).
38
- - **Iron-Law option** — option breaches `commit-policy`,
39
- `scope-control § git-ops`, or `non-destructive-by-default`.
40
- - **Context-derived** — answer follows from prior turn / standing
41
- instruction / roadmap; act, state the assumption inline.
42
- - **Dominant option** — one choice obviously correct; alternatives
43
- carry no upside.
44
- - **Re-ask after decline** — forbidden per
45
- [`scope-control § decline = silence`](scope-control.md#decline--silence--no-re-asking-on-the-same-task).
46
-
47
- Concrete examples per class:
36
+ - **Iron-Law option** — breaches `commit-policy`, `scope-control` § git-ops, or `non-destructive-by-default`.
37
+ - **Context-derived** answer follows from prior turn / standing instruction / roadmap; act, state the assumption inline.
38
+ - **Dominant option** — one choice obviously correct; alternatives carry no upside.
39
+ - **Re-ask after decline** forbidden per [`scope-control § decline = silence`](scope-control.md#decline--silence--no-re-asking-on-the-same-task).
40
+
41
+ Examples per class:
48
42
  [`asking-and-brevity-examples`](../../docs/guidelines/agent-infra/asking-and-brevity-examples.md#cheap-question-class-catalog--extended-examples).
49
43
 
50
44
  ## Pre-Send Self-Check — MANDATORY before every question
@@ -52,11 +46,11 @@ Concrete examples per class:
52
46
  Run silently before any numbered-options block:
53
47
 
54
48
  1. Answer already in stated context?
55
- 2. Any option violates [`commit-policy`](commit-policy.md), [`scope-control § git-ops`](scope-control.md), or [`non-destructive-by-default`](non-destructive-by-default.md)?
49
+ 2. Any option violates `commit-policy`, `scope-control` § git-ops, or `non-destructive-by-default`?
56
50
  3. Options pure sequencing / format, no trade-off?
57
51
  4. One option obviously dominant?
58
- 5. User fenced next step (*"plan only"*, *"review first"*) → deliver + handback per [`scope-control § fenced step`](scope-control.md#fenced-step--user-set-review-gates).
59
- 6. User already declined? Re-ask forbidden per [`scope-control § decline = silence`](scope-control.md#decline--silence--no-re-asking-on-the-same-task).
52
+ 5. User fenced next step (*"plan only"*, *"review first"*) → deliver + handback per `scope-control` § fenced step.
53
+ 6. User already declined? Re-ask forbidden per `scope-control` § decline = silence.
60
54
 
61
55
  Any "yes" → **do not ask**. Pick the dominant path, state assumption
62
56
  inline (*"assuming X — adjust if wrong"*), hand back. One-question-per-turn
@@ -68,7 +62,7 @@ the question is genuine.
68
62
  - Real architectural / scope decision with non-obvious trade-offs.
69
63
  - Vague-request trigger per [`ask-when-uncertain`](ask-when-uncertain.md#vague-request-triggers--must-ask).
70
64
  - Security-sensitive path per [`security-sensitive-stop`](security-sensitive-stop.md).
71
- - Hard Floor in [`non-destructive-by-default`](non-destructive-by-default.md) — confirmation mandatory.
65
+ - Hard Floor per `non-destructive-by-default` — confirmation mandatory.
72
66
  - Two genuinely-equivalent paths; user preference is the tiebreaker.
73
67
 
74
68
  In doubt → ask. This rule narrows asking, never widens silence.
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "mechanical-already"
3
4
  description: "Adding a link to a specific file in agents/roadmaps/ from any stable artifact (rule, skill, command, context, guideline) — roadmaps are transient; promote durable findings to agents/contexts/ instead"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "always"
3
+ tier: "safety-floor"
3
4
  description: "Agent is never destructive — Hard Floor always asks for prod-trunk merges, deploys, pushes, prod data/infra, bulk deletions, and bulk-deletion/infra commits; no autonomy or roadmap bypass"
4
5
  alwaysApply: true
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "1"
3
4
  description: "First turn of a conversation on a project — check onboarding.onboarded in .agent-settings.yml; when false, prompt the user to run /onboard before executing any other request"
4
5
  alwaysApply: false
5
6
  source: package
@@ -7,6 +8,12 @@ source: package
7
8
 
8
9
  # Onboarding Gate
9
10
 
11
+ > **Enforced by:** [`scripts/onboarding_gate_hook.py`](../../scripts/onboarding_gate_hook.py)
12
+ > on Augment + Claude Code (`SessionStart`). The hook refreshes
13
+ > `agents/state/onboarding-gate.json` from `.agent-settings.yml`; the
14
+ > prose below is the spec the hook implements and the fallback for
15
+ > platforms without a hook surface.
16
+
10
17
  Forces a one-time `/onboard` run for each developer on each project. This
11
18
  replaces the previously scattered "ask once" patterns across `user_name`,
12
19
  `personal.ide`, `personal.rtk_installed`, and cost profile confirmation.
@@ -86,9 +93,35 @@ gate. This protects projects that were set up before this rule shipped.
86
93
  - `scope-control` — option `2` writes exactly one key; no side effects.
87
94
  - `role-mode-adherence` — gate runs BEFORE the mode marker is emitted.
88
95
 
96
+ ## Copilot fallback
97
+
98
+ GitHub Copilot has no `SessionStart` hook surface, so
99
+ `scripts/onboarding_gate_hook.py` cannot run structurally and
100
+ `agents/state/onboarding-gate.json` is not refreshed for the agent.
101
+ On the first turn of a Copilot conversation:
102
+
103
+ 1. Read `onboarding.onboarded` from `.agent-settings.yml` directly
104
+ (one read per conversation, then cache as the prose above
105
+ describes).
106
+ 2. Optionally refresh the state file manually so other tooling sees
107
+ the same value the hook would have written:
108
+
109
+ ```bash
110
+ python3 scripts/onboarding_gate_hook.py < /dev/null
111
+ ```
112
+
113
+ The script reads `.agent-settings.yml`, atomically writes
114
+ `agents/state/onboarding-gate.json`, and exits 0 — same payload
115
+ the Augment / Claude / Cursor / Cline / Windsurf / Gemini hook
116
+ would have produced.
117
+ 3. Apply the gate behavior from "Gate behavior when `onboarded:
118
+ false`" above. The cooperative path is the spec; the hook is the
119
+ cache.
120
+
89
121
  ## See also
90
122
 
91
123
  - [`/onboard`](../commands/onboard.md) — the command this gate invokes
92
124
  - [`layered-settings`](../../docs/guidelines/agent-infra/layered-settings.md) — merge rules for mid-life edits
93
125
  - [`agent-settings` template](../templates/agent-settings.md) — `onboarding.onboarded` reference
94
126
  - [`rule-type-governance`](rule-type-governance.md) — why this is `always`
127
+ - [`hardening-pattern`](../../agents/contexts/hardening-pattern.md) — Tier 1 mechanical-rule contract
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "mechanical-already"
3
4
  alwaysApply: false
4
5
  description: "Before pushing to remote or creating a PR in the agent-config package — run all CI checks locally first"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "3"
3
4
  description: "Writing or reviewing PHP code — strict types, naming, comparisons, early returns, Eloquent conventions"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2b"
3
4
  alwaysApply: false
4
5
  description: "When merging, refactoring, compressing, or restructuring skills, rules, commands, or guidelines — prevent quality loss"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "When routing reviewers or flagging risk hotspots — consult ownership-map and historical-bug-patterns before suggesting reviewers or claiming a change is safe"
4
5
  source: package
5
6
  load_context:
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "When suggesting reviewers for a change — anchor the choice in paths and risk, never prestige or seniority; require primary + secondary role for medium/high risk"
4
5
  source: package
5
6
  ---
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "1"
3
4
  description: "Any touch to agents/roadmaps/ — create/rename/delete/move, edit checkboxes ([x]/[~]/[-]), add/rename/remove phases — must regenerate dashboard and archive if 0 open items, same response"
4
5
  alwaysApply: false
5
6
  source: package
@@ -12,6 +13,11 @@ load_context:
12
13
 
13
14
  # Roadmap Progress Sync
14
15
 
16
+ > **Enforced by:** [`scripts/roadmap_progress_hook.py`](../../scripts/roadmap_progress_hook.py)
17
+ > on Augment + Claude Code (`PostToolUse`). Hook is primary; the prose
18
+ > below is the specification the hook implements and the fallback when
19
+ > the platform has no hook surface.
20
+
15
21
  ## Iron Law — dashboard sync
16
22
 
17
23
  ```
@@ -90,6 +96,28 @@ roadmap left under `agents/roadmaps/` is a rule violation, not an
90
96
  optional cleanup. See `roadmap-management` skill for the archive vs
91
97
  skipped decision table.
92
98
 
99
+ ## Agent-authored roadmaps — placement is mandatory
100
+
101
+ ```
102
+ A FILE THE AGENT DROPS INTO agents/roadmaps/ MUST EITHER
103
+ (a) PASS check_roadmap_trackable.py AND LAND IN THE DASHBOARD, OR
104
+ (b) NOT BE IN agents/roadmaps/ AT ALL.
105
+ NO "DECISION MATRIX" / "DESIGN NOTE" SHORTCUT.
106
+ ```
107
+
108
+ When the agent autonomously creates a roadmap, it owns the placement
109
+ in the **same response**:
110
+
111
+ - **Phase plan** (checkboxes, multi-turn execution) → `agents/roadmaps/<name>.md`, `status: ready` (default), regen dashboard.
112
+ - **Decision matrix / ADR / pattern / lookup** (no `Phase N`, durable rationale) → `agents/contexts/<name>.md`.
113
+ - **Completed work snapshot** → `agents/roadmaps/archive/<name>.md`.
114
+
115
+ A non-trackable file in `agents/roadmaps/` is a rule violation — the
116
+ trackable CI fails it, the dashboard hides it. The agent that
117
+ created it moves it the same response. If the autonomous run also
118
+ **finishes** the roadmap within the session (every box `[x]`/`[~]`/`[-]`),
119
+ the completion-archival rule above fires too — same response.
120
+
93
121
  ## Autonomous execution — checkbox cadence
94
122
 
95
123
  When executing a roadmap autonomously (multi-turn, no per-step user
@@ -129,3 +157,24 @@ the mandatory pre-send self-check, the failure-mode catalog, and the
129
157
  [`contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md`](../contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md).
130
158
  Pull it whenever a trigger fires — the rule above is the obligation
131
159
  surface; the mechanics file is the lookup material.
160
+
161
+ ## Copilot fallback
162
+
163
+ GitHub Copilot has no `PostToolUse` hook surface, so
164
+ `scripts/roadmap_progress_hook.py` cannot detect roadmap-file writes
165
+ structurally. The dashboard at `agents/roadmaps-progress.md` will
166
+ not regenerate on its own.
167
+
168
+ The cooperative path: every time a roadmap touch fires (per the
169
+ trigger list in the mechanics context above), the agent regenerates
170
+ the dashboard in the same response — which is the same Iron Law the
171
+ hook enforces, just executed manually:
172
+
173
+ ```bash
174
+ ./agent-config roadmap:progress
175
+ ```
176
+
177
+ The hook implementation is the specification; on Copilot the agent
178
+ runs the regenerator itself after the same triggers fire. Skipping
179
+ it is a rule violation, not a hook gap — the Iron Law on dashboard
180
+ sync survives the missing hook surface.
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "When roles.active_role is set in .agent-settings.yml — closing outputs must match the mode's contract and emit the structured mode marker"
4
5
  alwaysApply: false
5
6
  source: package
@@ -12,8 +13,7 @@ one of the six modes defined in
12
13
  [`role-contracts`](../../docs/guidelines/agent-infra/role-contracts.md):
13
14
  `developer`, `reviewer`, `tester`, `po`, `incident`, `planner`.
14
15
 
15
- Read `roles.active_role` from `.agent-settings.yml` at session start.
16
- Empty or missing → rule is inert. Do NOT guess a mode.
16
+ Read `roles.active_role` from `.agent-settings.yml` at session start. Empty / missing → rule is inert; do NOT guess a mode.
17
17
 
18
18
  When active, every closing output MUST:
19
19
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "Creating or editing rules, or auditing rule types — decides when a rule should be always vs auto"
4
5
  alwaysApply: false
5
6
  source: package
@@ -44,3 +45,31 @@ The `description` field IS the trigger. It must describe **when** the rule appli
44
45
  - Default to `auto`. Justify `always`.
45
46
  - If >50% of conversations don't need a rule → it must be `auto`.
46
47
  - `optimize-agents` command checks this and suggests changes.
48
+
49
+ ## Hardening tier — required on new or edited rules
50
+
51
+ Every new rule, and every edited rule whose body changes the trigger
52
+ or the obligation, MUST classify itself against the hardening tiers
53
+ documented in [`rule-trigger-matrix.md`](../../agents/contexts/rule-trigger-matrix.md):
54
+
55
+ | Tier | Meaning |
56
+ |---|---|
57
+ | `1` | Mechanically enforceable — hook acts, rule body stays minimal. |
58
+ | `2a` | Marker nudge — hook injects signal, agent acts on it. |
59
+ | `2b` | Structured injection / tool-call gate — hook reads/writes state, may deny. |
60
+ | `3` | Soft, judgment-bound — no platform surface; self-check rule. |
61
+ | `safety-floor` | Iron-Law subset, never modified. |
62
+ | `mechanical-already` | Precedent — script enforces, rule body documents. |
63
+
64
+ Classification surface: the optional `tier:` frontmatter field
65
+ (declared in `scripts/schemas/rule.schema.json`). Recommended for new
66
+ rules; bulk-retrofit of existing rules is tracked separately.
67
+
68
+ Tier 3 dispositions are recorded centrally in
69
+ [`agents/contexts/tier-3-dispositions.md`](../../agents/contexts/tier-3-dispositions.md)
70
+ with a 6-month re-audit clock. New Tier 3 rules append to that list
71
+ on landing.
72
+
73
+ The `optimize-agents` command checks the tier alongside `type`/`source`
74
+ and suggests escalations when a rule's trigger matches a hardening
75
+ opportunity that has shipped since the rule was authored.
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: auto
3
+ tier: "2b"
3
4
  source: package
4
5
  description: "When a skill declares execution metadata — enforce safety constraints for assisted and automated execution types"
5
6
  ---
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "always"
3
+ tier: "safety-floor"
3
4
  description: "Scope control — no unsolicited architectural changes, refactors, or library replacements"
4
5
  alwaysApply: true
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  alwaysApply: false
4
5
  description: "Security-sensitive paths — auth, billing, tenant boundaries, secrets, file uploads, external integrations, webhooks, public endpoints — stop and run threat analysis BEFORE editing"
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "mechanical-already"
3
4
  description: "Creating or editing rules, skills, commands, guidelines, AGENTS.md, or copilot-instructions.md — enforce size and scope limits"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "After completing a meaningful task — trigger post-task learning capture if pipelines.skill_improvement is enabled"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "mechanical-already"
3
4
  description: "Creating, editing, or reviewing skills — minimum quality standard, every skill must be executable, validated, and self-contained"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "1"
3
4
  description: "When user types a slash command like /create-pr, /commit, or pastes command file content"
4
5
  alwaysApply: false
5
6
  source: package
@@ -31,3 +32,41 @@ This is **irrelevant** for command detection.
31
32
  - If command file content appears in the context alongside an open file, the **command invocation takes priority**.
32
33
  - Do NOT confuse "file is open" with "user wants to discuss this file".
33
34
  - The user's typed message determines intent — not editor state.
35
+
36
+ ## Read the whole prompt — command is the operator, prose is the target
37
+
38
+ ```
39
+ /<command> IS THE OPERATOR.
40
+ THE REST OF THE USER MESSAGE NAMES THE TARGET.
41
+ NEVER ASSUME THE COMMAND NAME IS THE TARGET.
42
+ ```
43
+
44
+ Slash token = **what to do**; surrounding prose = **what to do it on**.
45
+
46
+ - `/council and analyse chat-history` → target is `chat-history`,
47
+ not `council`. Council is the *tool*, prose names the *artefact*.
48
+ - `/work the memory bug from PROJ-123` → target is "the memory bug
49
+ from PROJ-123".
50
+ - `/fix ci and then open a PR` → target is "CI failure"; trailing
51
+ "open a PR" is a follow-up needing separate permission (per
52
+ `scope-control`).
53
+
54
+ ### Pre-flight before expensive operations
55
+
56
+ Before any operation costing real time or money — external API call,
57
+ large codebase analysis, multi-file refactor, council run, generated
58
+ test suite — run silently:
59
+
60
+ 1. Re-read the **whole** user message, not just slash + first token.
61
+ 2. Identify the target the prose actually names.
62
+ 3. Target unambiguous → execute, no question.
63
+ 4. Target **genuinely** ambiguous after re-reading (prose names *two*
64
+ artefacts, can't tell which is the operand) → ask ONE
65
+ disambiguating numbered-options question per
66
+ [`ask-when-uncertain`](ask-when-uncertain.md), then proceed.
67
+
68
+ **Not** a license to re-introduce cheap questions (`no-cheap-questions`
69
+ still binds). Threshold: *"would this guess waste the user's tokens,
70
+ money, or trust?"* — not *"I'd feel safer asking"*. Single failure
71
+ mode to avoid: spending API spend on the wrong artefact because the
72
+ agent fixated on the command name.
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2b"
3
4
  description: "Before coding, modifying, or debugging — analyze first, verify with real tools, never guess or trial-and-error"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "When running CLI tools, fetching logs, or producing replies — redirect verbose output, minimize tool calls, keep replies concise"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: auto
3
+ tier: "2b"
3
4
  source: package
4
5
  description: "When a skill uses external tools — enforce allowlist, deny-by-default, and no hidden credential patterns"
5
6
  ---
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2b"
3
4
  description: "Writing or editing UI — components, screens, partials, layouts, design tokens — require existing-ui-audit findings in state.ui_audit before non-trivial UI change; gate, not suggestion"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "2a"
3
4
  description: "After creating or significantly improving a skill, rule, guideline, or command — ask if it should be contributed upstream to the shared package"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "auto"
3
+ tier: "3"
3
4
  description: "Asking the user a question, presenting options, or summarizing progress — numbered-options Iron Law, single-recommendation rule, progress indicators"
4
5
  alwaysApply: false
5
6
  source: package
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  type: "always"
3
+ tier: "2a"
3
4
  description: "Verify before completion — run tests and quality tools before claiming done"
4
5
  alwaysApply: true
5
6
  source: package