@event4u/agent-config 1.15.0 → 1.16.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 (244) hide show
  1. package/.agent-src/commands/bug-fix.md +1 -1
  2. package/.agent-src/commands/bug-investigate.md +2 -2
  3. package/.agent-src/commands/chat-history-checkpoint.md +1 -1
  4. package/.agent-src/commands/chat-history-clear.md +1 -1
  5. package/.agent-src/commands/chat-history.md +1 -1
  6. package/.agent-src/commands/check-current-md.md +1 -1
  7. package/.agent-src/commands/council-design.md +96 -0
  8. package/.agent-src/commands/council-optimize.md +115 -0
  9. package/.agent-src/commands/council-pr.md +123 -0
  10. package/.agent-src/commands/council.md +219 -0
  11. package/.agent-src/commands/create-pr.md +23 -0
  12. package/.agent-src/commands/do-and-judge.md +3 -3
  13. package/.agent-src/commands/do-in-steps.md +4 -4
  14. package/.agent-src/commands/e2e-heal.md +1 -1
  15. package/.agent-src/commands/e2e-plan.md +1 -1
  16. package/.agent-src/commands/feature-dev.md +8 -0
  17. package/.agent-src/commands/feature-explore.md +6 -1
  18. package/.agent-src/commands/feature-plan.md +33 -2
  19. package/.agent-src/commands/feature-refactor.md +5 -0
  20. package/.agent-src/commands/feature-roadmap.md +6 -1
  21. package/.agent-src/commands/feature.md +58 -0
  22. package/.agent-src/commands/fix-ci.md +5 -0
  23. package/.agent-src/commands/fix-portability.md +5 -0
  24. package/.agent-src/commands/fix-pr-bot-comments.md +5 -0
  25. package/.agent-src/commands/fix-pr-comments.md +5 -0
  26. package/.agent-src/commands/fix-pr-developer-comments.md +5 -0
  27. package/.agent-src/commands/fix-references.md +5 -0
  28. package/.agent-src/commands/fix-seeder.md +5 -0
  29. package/.agent-src/commands/fix.md +60 -0
  30. package/.agent-src/commands/jira-ticket.md +1 -1
  31. package/.agent-src/commands/judge.md +1 -1
  32. package/.agent-src/commands/memory-add.md +3 -3
  33. package/.agent-src/commands/memory-full.md +2 -2
  34. package/.agent-src/commands/memory-promote.md +2 -2
  35. package/.agent-src/commands/mode.md +5 -5
  36. package/.agent-src/commands/onboard.md +3 -3
  37. package/.agent-src/commands/optimize-agents.md +6 -1
  38. package/.agent-src/commands/optimize-augmentignore.md +5 -0
  39. package/.agent-src/commands/optimize-rtk-filters.md +5 -0
  40. package/.agent-src/commands/optimize-skills.md +6 -1
  41. package/.agent-src/commands/optimize.md +54 -0
  42. package/.agent-src/commands/propose-memory.md +2 -2
  43. package/.agent-src/commands/review-changes.md +26 -1
  44. package/.agent-src/commands/review-routing.md +1 -1
  45. package/.agent-src/commands/roadmap-create.md +29 -2
  46. package/.agent-src/commands/set-cost-profile.md +3 -3
  47. package/.agent-src/commands/sync-agent-settings.md +2 -2
  48. package/.agent-src/commands/tests-create.md +1 -1
  49. package/.agent-src/commands/upstream-contribute.md +1 -1
  50. package/.agent-src/contexts/authority/commit-mechanics.md +57 -0
  51. package/.agent-src/contexts/authority/destructive-mechanics.md +66 -0
  52. package/.agent-src/contexts/authority/scope-mechanics.md +87 -0
  53. package/.agent-src/contexts/execution/autonomy-detection.md +54 -0
  54. package/.agent-src/contexts/execution/autonomy-examples.md +90 -0
  55. package/.agent-src/contexts/execution/autonomy-mechanics.md +29 -0
  56. package/.agent-src/contexts/execution/verification-mechanics.md +80 -0
  57. package/.agent-src/personas/README.md +1 -1
  58. package/.agent-src/rules/agent-authority.md +24 -0
  59. package/.agent-src/rules/architecture.md +1 -1
  60. package/.agent-src/rules/artifact-drafting-protocol.md +1 -1
  61. package/.agent-src/rules/artifact-engagement-recording.md +1 -1
  62. package/.agent-src/rules/ask-when-uncertain.md +1 -1
  63. package/.agent-src/rules/autonomous-execution.md +78 -114
  64. package/.agent-src/rules/capture-learnings.md +1 -1
  65. package/.agent-src/rules/chat-history-cadence.md +3 -3
  66. package/.agent-src/rules/chat-history-ownership.md +3 -3
  67. package/.agent-src/rules/chat-history-visibility.md +3 -3
  68. package/.agent-src/rules/{command-suggestion.md → command-suggestion-policy.md} +7 -7
  69. package/.agent-src/rules/commit-conventions.md +1 -1
  70. package/.agent-src/rules/commit-policy.md +14 -42
  71. package/.agent-src/rules/context-hygiene.md +3 -3
  72. package/.agent-src/rules/direct-answers.md +1 -1
  73. package/.agent-src/rules/docs-sync.md +1 -1
  74. package/.agent-src/rules/e2e-testing.md +1 -1
  75. package/.agent-src/rules/guidelines.md +4 -4
  76. package/.agent-src/rules/improve-before-implement.md +2 -2
  77. package/.agent-src/rules/language-and-tone.md +37 -96
  78. package/.agent-src/rules/minimal-safe-diff.md +3 -3
  79. package/.agent-src/rules/model-recommendation.md +4 -4
  80. package/.agent-src/rules/no-cheap-questions.md +89 -0
  81. package/.agent-src/rules/non-destructive-by-default.md +15 -49
  82. package/.agent-src/rules/onboarding-gate.md +5 -5
  83. package/.agent-src/rules/review-routing-awareness.md +9 -9
  84. package/.agent-src/rules/roadmap-progress-sync.md +26 -33
  85. package/.agent-src/rules/role-mode-adherence.md +2 -2
  86. package/.agent-src/rules/scope-control.md +65 -46
  87. package/.agent-src/rules/security-sensitive-stop.md +2 -2
  88. package/.agent-src/rules/size-enforcement.md +1 -1
  89. package/.agent-src/rules/think-before-action.md +5 -5
  90. package/.agent-src/rules/token-efficiency.md +4 -4
  91. package/.agent-src/rules/{ui-audit-before-build.md → ui-audit-gate.md} +3 -3
  92. package/.agent-src/rules/user-interaction.md +3 -3
  93. package/.agent-src/rules/verify-before-complete.md +12 -67
  94. package/.agent-src/scripts/update_roadmap_progress.py +9 -4
  95. package/.agent-src/skills/ai-council/SKILL.md +333 -0
  96. package/.agent-src/skills/api-endpoint/SKILL.md +2 -2
  97. package/.agent-src/skills/blade-ui/SKILL.md +1 -1
  98. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  99. package/.agent-src/skills/bug-analyzer/SKILL.md +1 -1
  100. package/.agent-src/skills/command-routing/SKILL.md +1 -1
  101. package/.agent-src/skills/command-writing/SKILL.md +1 -1
  102. package/.agent-src/skills/conventional-commits-writing/SKILL.md +1 -1
  103. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
  104. package/.agent-src/skills/developer-like-execution/SKILL.md +2 -2
  105. package/.agent-src/skills/flux/SKILL.md +1 -1
  106. package/.agent-src/skills/git-workflow/SKILL.md +1 -1
  107. package/.agent-src/skills/guideline-writing/SKILL.md +11 -11
  108. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +4 -4
  109. package/.agent-src/skills/livewire/SKILL.md +1 -1
  110. package/.agent-src/skills/override-management/SKILL.md +2 -2
  111. package/.agent-src/skills/php-coder/SKILL.md +1 -1
  112. package/.agent-src/skills/playwright-testing/SKILL.md +2 -2
  113. package/.agent-src/skills/readme-reviewer/SKILL.md +1 -1
  114. package/.agent-src/skills/readme-writing/SKILL.md +1 -1
  115. package/.agent-src/skills/readme-writing-package/SKILL.md +1 -1
  116. package/.agent-src/skills/receiving-code-review/SKILL.md +1 -1
  117. package/.agent-src/skills/review-routing/SKILL.md +2 -2
  118. package/.agent-src/skills/rule-writing/SKILL.md +1 -1
  119. package/.agent-src/skills/skill-reviewer/SKILL.md +1 -1
  120. package/.agent-src/skills/skill-writing/SKILL.md +3 -3
  121. package/.agent-src/skills/subagent-orchestration/SKILL.md +1 -0
  122. package/.agent-src/skills/systematic-debugging/SKILL.md +1 -1
  123. package/.agent-src/skills/upstream-contribute/SKILL.md +1 -1
  124. package/.agent-src/skills/validate-feature-fit/SKILL.md +2 -2
  125. package/.agent-src/skills/{verify-before-complete → verify-completion-evidence}/SKILL.md +2 -2
  126. package/.agent-src/templates/agent-settings.md +8 -8
  127. package/.agent-src/templates/contexts/auth-model.md +1 -1
  128. package/.agent-src/templates/scripts/README.md +2 -2
  129. package/.agent-src/templates/scripts/telemetry/aggregator.py +16 -1
  130. package/.agent-src/templates/scripts/telemetry/engagement.py +59 -0
  131. package/.agent-src/templates/scripts/telemetry/report_renderer.py +28 -1
  132. package/.agent-src/templates/scripts/telemetry_record.py +14 -1
  133. package/.claude-plugin/marketplace.json +10 -2
  134. package/AGENTS.md +11 -9
  135. package/CHANGELOG.md +123 -1
  136. package/README.md +28 -30
  137. package/config/agent-settings.template.yml +58 -1
  138. package/config/gitignore-block.txt +3 -0
  139. package/docs/architecture.md +4 -4
  140. package/docs/catalog.md +331 -0
  141. package/docs/contracts/STABILITY.md +39 -0
  142. package/docs/contracts/adr-command-suggestion.md +3 -3
  143. package/docs/contracts/adr-product-ui-track.md +2 -2
  144. package/docs/contracts/agent-memory-contract.md +2 -2
  145. package/docs/contracts/artifact-engagement-flow.md +1 -1
  146. package/docs/contracts/command-clusters.md +2 -2
  147. package/docs/contracts/command-suggestion-flow.md +3 -3
  148. package/docs/contracts/implement-ticket-flow.md +2 -2
  149. package/docs/contracts/linear-ai-rules-inclusion.md +1 -1
  150. package/docs/contracts/load-context-schema.md +186 -0
  151. package/docs/contracts/rule-interactions.yml +96 -0
  152. package/docs/contracts/rule-priority-hierarchy.md +87 -0
  153. package/docs/contracts/ui-track-flow.md +1 -1
  154. package/docs/customization.md +14 -0
  155. package/docs/end-to-end-walkthroughs.md +165 -0
  156. package/docs/getting-started.md +26 -8
  157. package/docs/github-topics.md +12 -3
  158. package/docs/guidelines/agent-infra/language-and-tone-examples.md +79 -0
  159. package/{.agent-src → docs}/guidelines/docs/readme-size-and-splitting.md +26 -25
  160. package/docs/guidelines/php/git.md +164 -0
  161. package/docs/migrations/commands-1.15.0.md +1 -1
  162. package/docs/showcase.md +9 -4
  163. package/docs/skills-catalog.md +14 -8
  164. package/docs/ui-track-mental-model.md +2 -2
  165. package/llms.txt +13 -7
  166. package/package.json +1 -1
  167. package/scripts/agent-config +23 -0
  168. package/scripts/ai_council/__init__.py +39 -0
  169. package/scripts/ai_council/_default_prices.py +41 -0
  170. package/scripts/ai_council/_one_off_rebalancing_audit.py +149 -0
  171. package/scripts/ai_council/_one_off_roundtrip.py +106 -0
  172. package/scripts/ai_council/budget_guard.py +172 -0
  173. package/scripts/ai_council/bundler.py +261 -0
  174. package/scripts/ai_council/clients.py +381 -0
  175. package/scripts/ai_council/modes.py +127 -0
  176. package/scripts/ai_council/orchestrator.py +350 -0
  177. package/scripts/ai_council/pricing.py +213 -0
  178. package/scripts/ai_council/project_context.py +159 -0
  179. package/scripts/ai_council/prompts.py +232 -0
  180. package/scripts/ai_council/session.py +144 -0
  181. package/scripts/check_always_budget.py +126 -0
  182. package/scripts/check_augmentignore.py +69 -0
  183. package/scripts/check_command_count_messaging.py +120 -0
  184. package/scripts/check_portability.py +55 -0
  185. package/scripts/check_public_catalog_links.py +122 -0
  186. package/scripts/check_references.py +4 -1
  187. package/scripts/check_roadmap_trackable.py +111 -0
  188. package/scripts/command_suggester/cooldown.py +1 -1
  189. package/scripts/generate_index.py +266 -0
  190. package/scripts/install_anthropic_key.sh +5 -0
  191. package/scripts/install_openai_key.sh +106 -0
  192. package/scripts/lint_load_context.py +163 -0
  193. package/scripts/schemas/command.schema.json +20 -0
  194. package/scripts/schemas/rule.schema.json +10 -0
  195. package/scripts/skill_linter.py +12 -4
  196. package/scripts/sync_agent_settings.py +1 -1
  197. package/scripts/update_counts.py +9 -4
  198. package/scripts/update_prices.py +124 -0
  199. package/.agent-src/guidelines/php/git.md +0 -96
  200. /package/.agent-src/rules/{slash-commands.md → slash-command-routing-policy.md} +0 -0
  201. /package/{.agent-src → docs}/guidelines/agent-infra/agent-interaction-and-decision-quality.md +0 -0
  202. /package/{.agent-src → docs}/guidelines/agent-infra/break-glass-usage.md +0 -0
  203. /package/{.agent-src → docs}/guidelines/agent-infra/developer-judgment.md +0 -0
  204. /package/{.agent-src → docs}/guidelines/agent-infra/engineering-memory-data-format.md +0 -0
  205. /package/{.agent-src → docs}/guidelines/agent-infra/layered-settings.md +0 -0
  206. /package/{.agent-src → docs}/guidelines/agent-infra/memory-access.md +0 -0
  207. /package/{.agent-src → docs}/guidelines/agent-infra/naming.md +0 -0
  208. /package/{.agent-src → docs}/guidelines/agent-infra/output-patterns.md +0 -0
  209. /package/{.agent-src → docs}/guidelines/agent-infra/review-routing-data-format.md +0 -0
  210. /package/{.agent-src → docs}/guidelines/agent-infra/role-contracts.md +0 -0
  211. /package/{.agent-src → docs}/guidelines/agent-infra/role-mode-router.md +0 -0
  212. /package/{.agent-src → docs}/guidelines/agent-infra/runtime-layer.md +0 -0
  213. /package/{.agent-src → docs}/guidelines/agent-infra/self-improvement-pipeline.md +0 -0
  214. /package/{.agent-src → docs}/guidelines/agent-infra/size-and-scope.md +0 -0
  215. /package/{.agent-src → docs}/guidelines/agent-infra/tool-integration.md +0 -0
  216. /package/{.agent-src → docs}/guidelines/e2e/playwright.md +0 -0
  217. /package/{.agent-src → docs}/guidelines/php/api-design.md +0 -0
  218. /package/{.agent-src → docs}/guidelines/php/artisan-commands.md +0 -0
  219. /package/{.agent-src → docs}/guidelines/php/blade-ui.md +0 -0
  220. /package/{.agent-src → docs}/guidelines/php/controllers.md +0 -0
  221. /package/{.agent-src → docs}/guidelines/php/database.md +0 -0
  222. /package/{.agent-src → docs}/guidelines/php/eloquent.md +0 -0
  223. /package/{.agent-src → docs}/guidelines/php/flux.md +0 -0
  224. /package/{.agent-src → docs}/guidelines/php/general.md +0 -0
  225. /package/{.agent-src → docs}/guidelines/php/jobs.md +0 -0
  226. /package/{.agent-src → docs}/guidelines/php/livewire.md +0 -0
  227. /package/{.agent-src → docs}/guidelines/php/logging.md +0 -0
  228. /package/{.agent-src → docs}/guidelines/php/naming.md +0 -0
  229. /package/{.agent-src → docs}/guidelines/php/patterns/dependency-injection.md +0 -0
  230. /package/{.agent-src → docs}/guidelines/php/patterns/dtos.md +0 -0
  231. /package/{.agent-src → docs}/guidelines/php/patterns/events.md +0 -0
  232. /package/{.agent-src → docs}/guidelines/php/patterns/factory.md +0 -0
  233. /package/{.agent-src → docs}/guidelines/php/patterns/pipelines.md +0 -0
  234. /package/{.agent-src → docs}/guidelines/php/patterns/policies.md +0 -0
  235. /package/{.agent-src → docs}/guidelines/php/patterns/repositories.md +0 -0
  236. /package/{.agent-src → docs}/guidelines/php/patterns/service-layer.md +0 -0
  237. /package/{.agent-src → docs}/guidelines/php/patterns/strategy.md +0 -0
  238. /package/{.agent-src → docs}/guidelines/php/patterns.md +0 -0
  239. /package/{.agent-src → docs}/guidelines/php/performance.md +0 -0
  240. /package/{.agent-src → docs}/guidelines/php/resources.md +0 -0
  241. /package/{.agent-src → docs}/guidelines/php/security.md +0 -0
  242. /package/{.agent-src → docs}/guidelines/php/sql.md +0 -0
  243. /package/{.agent-src → docs}/guidelines/php/validations.md +0 -0
  244. /package/{.agent-src → docs}/guidelines/php/websocket.md +0 -0
@@ -101,7 +101,7 @@ These reference Augment-only mechanics — model identity in Augment's
101
101
  system prompt, Augment's `/slash` command surface, and the Augment
102
102
  onboarding flow gated by `.agent-settings.yml`.
103
103
 
104
- `model-recommendation`, `onboarding-gate`, `slash-commands`.
104
+ `model-recommendation`, `onboarding-gate`, `slash-command-routing-policy`.
105
105
 
106
106
  ### Skill-routing only (1)
107
107
 
@@ -0,0 +1,186 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # `load_context:` Frontmatter Schema
6
+
7
+ > **Audience:** rule authors and reviewers who want to keep an Always-rule
8
+ > small while making deeper reasoning available on demand.
9
+ > **Linter:** `scripts/lint_load_context.py` (run via `task lint-load-context`).
10
+ > **Companion:** [`rule-priority-hierarchy.md`](rule-priority-hierarchy.md) —
11
+ > hierarchy that decides *which* rule wins when several fire on the same turn.
12
+
13
+ This contract defines the frontmatter convention by which a rule (or
14
+ another context) declares the deeper reading material it relies on.
15
+ The convention is **lazy by default**: declared entries are *available
16
+ to load* when the situation demands them, never auto-loaded into every
17
+ turn.
18
+
19
+ ## Schema
20
+
21
+ Two keys, both optional, both top-level frontmatter:
22
+
23
+ ```yaml
24
+ ---
25
+ type: "always"
26
+ description: "..."
27
+ load_context: # lazy — on-demand reference list
28
+ - .agent-src.uncompressed/contexts/<file>.md
29
+ - agents/contexts/<file>.md
30
+ load_context_eager: # opt-in eager — auto-loaded on rule fire
31
+ - .agent-src.uncompressed/contexts/<file>.md
32
+ ---
33
+ ```
34
+
35
+ | Key | Loading | When to use |
36
+ |---|---|---|
37
+ | `load_context:` | **Lazy.** The agent reads the entry only when the rule's reasoning needs it. | Default. Use for everything that is "available knowledge" rather than "on every turn". |
38
+ | `load_context_eager:` | **Eager.** The entry is concatenated into the active context whenever the rule fires. | Only when the deeper material is needed *every single time* the rule fires. Counts against the combined char budget. |
39
+
40
+ **No default eager-load.** A rule with `load_context:` only does **not**
41
+ auto-load anything; the agent decides per turn. Eager loading is
42
+ opt-in and budget-gated.
43
+
44
+ ## Path rules
45
+
46
+ - Paths are repo-root relative.
47
+ - Paths MUST end in `.md`.
48
+ - Allowed roots: `.agent-src.uncompressed/contexts/`, `agents/contexts/`,
49
+ `.agent-src/contexts/` (compressed mirror). Any other root → linter
50
+ error.
51
+ - A rule MAY reference contexts under either tree, but a
52
+ `.agent-src.uncompressed/` rule SHOULD NOT eager-load an
53
+ `agents/contexts/` file (project-local leak into shared package).
54
+ Linter warns on this combination.
55
+ - A context file may itself declare `load_context:` (chain reasoning).
56
+ The linter rejects cycles.
57
+
58
+ ## Subdirectory conventions
59
+
60
+ Subdirectories under `contexts/` are **conventional, not enforced**.
61
+ The linter only validates the root prefix; subdirectory layout is a
62
+ documentation contract for human reviewers.
63
+
64
+ Two canonical subdirectories are in production:
65
+
66
+ | Subdir | Holds | First consumer |
67
+ |---|---|---|
68
+ | `contexts/execution/` | runtime decision logic, mechanics, and examples for execution-time rules (autonomy detection, verification mechanics, etc.) | `autonomous-execution` (Phase 2 of `road-to-pr-34-followups`) |
69
+ | `contexts/authority/` | mechanics behind authority gates — what makes commits, scope changes, and git ops legal vs. illegal | `commit-policy` and `scope-control` (Phase 6 of `road-to-pr-34-followups`) |
70
+
71
+ A third subdirectory, `contexts/communication/`, was proposed by the
72
+ PR #34 round-6 review for user-interaction and language-and-tone
73
+ mechanics. It is **not yet created** — the anti-speculation guard in
74
+ Phase 6 forbids creating a context root before its triggering rule
75
+ exists. Add it the same turn as the first migrating rule, not before.
76
+
77
+ A new subdirectory is justified when:
78
+
79
+ - A second rule needs to share contexts with the first one, AND
80
+ - The contexts have a coherent topic (execution, authority, communication, …), AND
81
+ - The triggering rule and its content move at the same time
82
+ (no empty subdir reservations).
83
+
84
+ Single-rule contexts that don't fit one of the canonical topics live
85
+ directly under `contexts/` (see `contexts/model-recommendations.md`,
86
+ `contexts/skills-and-commands.md`).
87
+
88
+ ## Combined char-budget guard
89
+
90
+ `load_context_eager:` triggers a budget check:
91
+
92
+ ```
93
+ chars(rule.md) + sum(chars(eager_target.md) for each entry) ≤ rule_cap
94
+ ```
95
+
96
+ `rule_cap` is the per-rule budget from
97
+ [`road-to-rebalancing.md`](../../agents/roadmaps/road-to-rebalancing.md)
98
+ § Target architecture:
99
+
100
+ - Always rule: 2,500
101
+ - Auto rule: 4,000
102
+ - Safety rule (`type: "always"` AND covers Hard-Floor topics): 5,000
103
+
104
+ Linter computes the rule's class from frontmatter `type:` and the
105
+ hard-floor allowlist (`non-destructive-by-default`,
106
+ `security-sensitive-stop`). Exceeding the cap → linter error.
107
+
108
+ Lazy `load_context:` does **not** count against the budget — by
109
+ definition it is not loaded into every turn.
110
+
111
+ ## Public-vs-internal leak
112
+
113
+ A rule shipped to consumers (`.agent-src.uncompressed/rules/`) may
114
+ declare `load_context:` entries pointing at:
115
+
116
+ - `.agent-src.uncompressed/contexts/` — public, OK.
117
+ - `agents/contexts/` — package-internal, **lint warning** (the entry
118
+ will not exist in consumer projects).
119
+
120
+ Project-local rules may reference either. The linter classifies by
121
+ the rule's tree, not by the target's tree.
122
+
123
+ ## No circular references
124
+
125
+ A `load_context:` graph that cycles fails the linter. Cycles are
126
+ defined across both `load_context:` and `load_context_eager:` edges.
127
+
128
+ ## Examples
129
+
130
+ ### Real consumer — `autonomous-execution`
131
+
132
+ `.agent-src.uncompressed/rules/autonomous-execution.md` is the first
133
+ production rule to declare `load_context:`. Its frontmatter:
134
+
135
+ ```yaml
136
+ ---
137
+ type: "auto"
138
+ description: "Deciding whether to ask the user or just act on a workflow step — trivial-vs-blocking classification, autonomy opt-in detection, commit default; defers to non-destructive-by-default for the Hard Floor"
139
+ alwaysApply: false
140
+ source: package
141
+ load_context:
142
+ - .agent-src.uncompressed/contexts/execution/autonomy-detection.md
143
+ - .agent-src.uncompressed/contexts/execution/autonomy-mechanics.md
144
+ - .agent-src.uncompressed/contexts/execution/autonomy-examples.md
145
+ ---
146
+ ```
147
+
148
+ Three lazy-loaded contexts, no `load_context_eager:`. The agent reads
149
+ each context only when the corresponding section of the slim rule
150
+ points at it (the rule body cites the same paths in prose so the
151
+ load is intent-driven, not blanket).
152
+
153
+ Pattern proven by this consumer:
154
+
155
+ - **Slim the rule to obligations only** — the 192-line pre-split
156
+ source dropped to 119 lines (≤ 120 target met) by extracting LOGIC
157
+ (detection algorithm), MECHANICS (setting table, cloud behavior),
158
+ and EXAMPLES (anchor phrases, worked cases, failure modes) into
159
+ three separate context files.
160
+ - **Cite, don't duplicate** — the slim rule contains zero
161
+ algorithm/mechanics/example prose; everything moved was physically
162
+ removed (verified by Phase 2.5 obligation diff:
163
+ [`agents/reports/pr-34-phase-2-5-autonomous-execution-obligation-check.md`](../../agents/reports/pr-34-phase-2-5-autonomous-execution-obligation-check.md)).
164
+ - **Lazy by default** — no eager-load is declared; the budget guard
165
+ is therefore a no-op for this rule.
166
+
167
+ `task lint-load-context` reports **1 declarer**, all paths resolve,
168
+ no cycles.
169
+
170
+ ## Stability
171
+
172
+ `beta` — schema is settled and serves one production rule
173
+ (`autonomous-execution`). A breaking schema change is a SemVer-minor
174
+ pre-1.0 bump. Adding a new optional key is non-breaking. The first
175
+ consumer surfaced no schema gaps; the next migration batch (roadmap
176
+ `road-to-pr-34-followups` Phase 6 — `commit-policy`, `scope-control`,
177
+ `verify-before-complete`) is the next stress test.
178
+
179
+ ## Cross-references
180
+
181
+ - [`rule-priority-hierarchy.md`](rule-priority-hierarchy.md) — which
182
+ rule wins on conflict; this schema is orthogonal (depth, not
183
+ priority).
184
+ - [`rule-interactions.yml`](rule-interactions.yml) — pairwise rule
185
+ interaction matrix.
186
+ - [`STABILITY.md`](STABILITY.md) — beta-tag implications.
@@ -30,6 +30,9 @@ rules:
30
30
  - commit-policy
31
31
  - ask-when-uncertain
32
32
  - verify-before-complete
33
+ - agent-authority
34
+ - language-and-tone
35
+ - direct-answers
33
36
 
34
37
  pairs:
35
38
 
@@ -140,3 +143,96 @@ pairs:
140
143
  evidence:
141
144
  - .agent-src.uncompressed/rules/commit-policy.md#the-iron-law
142
145
  - .agent-src.uncompressed/rules/autonomous-execution.md#commit-policy--see-commit-policy
146
+
147
+ - id: authority-x-ndd
148
+ rules: [agent-authority, non-destructive-by-default]
149
+ relation: defers_to
150
+ conflict: >-
151
+ Both rules speak to "may the agent do this autonomously?" — the
152
+ Priority Index points to the Hard Floor as Band 1.
153
+ resolution: >-
154
+ `agent-authority` is a router, never a source of truth. The Hard
155
+ Floor's Iron Law lives verbatim in `non-destructive-by-default`
156
+ and wins every conflict. The index points; it never restates.
157
+ evidence:
158
+ - .agent-src.uncompressed/rules/agent-authority.md#index-rules
159
+ - .agent-src.uncompressed/rules/non-destructive-by-default.md#the-iron-law
160
+
161
+ - id: authority-x-scope-control
162
+ rules: [agent-authority, scope-control]
163
+ relation: defers_to
164
+ conflict: >-
165
+ Permission Gate questions (push, branch, PR, architectural change)
166
+ surface during routine work — the index labels Band 2.
167
+ resolution: >-
168
+ The Priority Index routes to `scope-control` for git-shape and
169
+ scope-expansion decisions. Index never narrows or weakens the
170
+ gate; canonical rule wins on any wording divergence.
171
+ evidence:
172
+ - .agent-src.uncompressed/rules/agent-authority.md#index-rules
173
+ - .agent-src.uncompressed/rules/scope-control.md#git-operations--permission-gated
174
+
175
+ - id: authority-x-commit-policy
176
+ rules: [agent-authority, commit-policy]
177
+ relation: defers_to
178
+ conflict: >-
179
+ The "about to commit" decision arises — the index labels it Band 3
180
+ (Commit Default = never, with four exceptions).
181
+ resolution: >-
182
+ `commit-policy` Iron Law is canonical. The Priority Index points
183
+ to it; it does not enumerate the four exceptions itself. Future
184
+ edits to commit-policy do not require Index updates unless the
185
+ band ordering changes.
186
+ evidence:
187
+ - .agent-src.uncompressed/rules/agent-authority.md#index-rules
188
+ - .agent-src.uncompressed/rules/commit-policy.md#exceptions--when-committing-is-allowed
189
+
190
+ - id: scope-x-commit-policy
191
+ rules: [scope-control, commit-policy]
192
+ relation: narrows
193
+ conflict: >-
194
+ `scope-control` § "Git operations" forbids committing without
195
+ explicit permission as one of several git-op gates; `commit-policy`
196
+ narrows the commit case to a never-ask default with four named
197
+ exceptions.
198
+ resolution: >-
199
+ `commit-policy` is the narrower, canonical rule for the commit
200
+ sub-case. `scope-control` continues to govern push, branch, PR,
201
+ tag operations. On commit specifics, defer to `commit-policy`;
202
+ on other git ops, defer to `scope-control`.
203
+ evidence:
204
+ - .agent-src.uncompressed/rules/scope-control.md#git-operations--permission-gated
205
+ - .agent-src.uncompressed/rules/commit-policy.md#the-iron-law
206
+
207
+ - id: ask-x-direct-answers
208
+ rules: [ask-when-uncertain, direct-answers]
209
+ relation: complements
210
+ conflict: >-
211
+ A vague request triggers `ask-when-uncertain` (must ask), but
212
+ `direct-answers` Iron Law 3 (brevity by default) discourages
213
+ overlong replies; could read as tension when the question needs
214
+ framing.
215
+ resolution: >-
216
+ Both rules apply. `ask-when-uncertain` decides *whether* to ask
217
+ and demands one question per turn with numbered options.
218
+ `direct-answers` shapes *how* the question reads — no flattery,
219
+ no padding, shortest form that fully states the choice.
220
+ evidence:
221
+ - .agent-src.uncompressed/rules/ask-when-uncertain.md#iron-law--one-question-per-turn-always
222
+ - .agent-src.uncompressed/rules/direct-answers.md#iron-law-3--brevity-by-default
223
+
224
+ - id: language-x-direct-answers
225
+ rules: [language-and-tone, direct-answers]
226
+ relation: complements
227
+ conflict: >-
228
+ User writes German; agent must mirror language AND avoid flattery,
229
+ invented facts, padding. Both rules speak to reply shape.
230
+ resolution: >-
231
+ `language-and-tone` decides the language token (mirror user's last
232
+ chat message); `direct-answers` decides content discipline (no
233
+ flattery, verified facts, brevity). They compose: a brief, direct,
234
+ flattery-free reply in the user's language. Neither weakens the
235
+ other.
236
+ evidence:
237
+ - .agent-src.uncompressed/rules/language-and-tone.md#iron-law--mirror-the-users-language-always
238
+ - .agent-src.uncompressed/rules/direct-answers.md#iron-law-1--no-flattery
@@ -0,0 +1,87 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # Rule Priority Hierarchy
6
+
7
+ > **Audience:** anyone reading or editing `.agent-src.uncompressed/rules/*.md`,
8
+ > or trying to predict which rule wins when several fire on the same turn.
9
+ > **Machine-readable counterpart:** [`rule-interactions.yml`](rule-interactions.yml)
10
+ > (linted by `scripts/lint_rule_interactions.py`).
11
+ > **Diagram + pair-by-pair narrative:** [`rule-interactions.md`](rule-interactions.md).
12
+
13
+ This document is the **ordered list** view. The matrix files describe
14
+ how *pairs* of rules interact; this file states **which band wins**
15
+ when the bands themselves disagree.
16
+
17
+ ## The four-line principle
18
+
19
+ ```
20
+ Safety beats autonomy.
21
+ Scope beats helpfulness.
22
+ Verification beats completion.
23
+ User intent beats command suggestion.
24
+ ```
25
+
26
+ Every band below is a concrete instance of one of those four lines.
27
+ When in doubt, walk the list top-down and stop at the first band that
28
+ fires — that band's canonical rule decides the turn.
29
+
30
+ ## The ordered list
31
+
32
+ | Band | Rule | What it gates | Lifts under |
33
+ |---|---|---|---|
34
+ | 1 | [`non-destructive-by-default`](../../.agent-src.uncompressed/rules/non-destructive-by-default.md) | Prod-trunk merge · deploy · push · prod data/infra · whimsical bulk deletion · bulk-deletion or infra commit | **Never.** Explicit user confirmation *this turn* only. |
35
+ | 2 | [`security-sensitive-stop`](../../.agent-src.uncompressed/rules/security-sensitive-stop.md) | Auth · billing · tenant boundaries · secrets · file uploads · webhooks · public endpoints | Threat-model pass completed and recorded *before* the edit. |
36
+ | 3 | [`scope-control`](../../.agent-src.uncompressed/rules/scope-control.md) | Git ops (branch · PR · tag · push · merge · rebase) · architectural changes · new libraries · scope expansion | Explicit user permission *this turn* or unrevoked standing instruction. |
37
+ | 4 | [`ask-when-uncertain`](../../.agent-src.uncompressed/rules/ask-when-uncertain.md) | Ambiguous requirements · vague-request triggers · fenced steps | Concrete evidence resolves the ambiguity, **or** user answers the single question. |
38
+ | 5 | [`commit-policy`](../../.agent-src.uncompressed/rules/commit-policy.md) | Any `git commit` | Four exceptions only — explicit "commit now", standing instruction, `/commit*` invocation, roadmap authorization. |
39
+ | 6 | [`verify-before-complete`](../../.agent-src.uncompressed/rules/verify-before-complete.md) | "Done" / "complete" claims · suggestions to commit, push, or PR | Fresh verification evidence in *this* message. |
40
+ | 7 | [`autonomous-execution`](../../.agent-src.uncompressed/rules/autonomous-execution.md) | Trivial-vs-blocking classification · autonomy opt-in detection | Per-step decision; never above bands 1–6. |
41
+ | 8 | [`command-suggestion-policy`](../../.agent-src.uncompressed/rules/command-suggestion-policy.md) | Surfacing slash-command matches as numbered options | User always picks; nothing auto-executes. |
42
+ | 9 | [`language-and-tone`](../../.agent-src.uncompressed/rules/language-and-tone.md) | First-token language of every reply · `.md` always English | Mirror the user's last chat message — no momentum exception. |
43
+
44
+ **Read direction:** top-to-bottom is *priority on conflict*, not chronology.
45
+ A turn typically touches several bands at once; the hierarchy decides
46
+ which one's Iron Law gets the final say.
47
+
48
+ ## Index rules
49
+
50
+ - **Higher band wins.** A band-3 permission does not lift band-1; a band-5
51
+ commit exception does not lift band-3. Each band's "Lifts under" column
52
+ is its own escape hatch and only its own.
53
+ - **No band restates an Iron Law.** Iron Laws live verbatim in the
54
+ canonical rule files. This hierarchy points; it does not paraphrase.
55
+ - **Bands 1–2 are *Hard Floors*.** No autonomy setting, no roadmap step,
56
+ no standing instruction lifts them. See
57
+ [`agent-authority`](../../.agent-src.uncompressed/rules/agent-authority.md)
58
+ § Index rules for the matching authority statement.
59
+ - **Unsure → ask.** [`ask-when-uncertain`](../../.agent-src.uncompressed/rules/ask-when-uncertain.md)
60
+ is the universal escape hatch when the band is unclear.
61
+
62
+ ## Worked examples
63
+
64
+ | Situation | Bands that fire | Winner | Why |
65
+ |---|---|---|---|
66
+ | Standing autonomy + roadmap step says "merge to `main`" | 1, 7 | **1** | Hard Floor predates and outranks autonomy; surface the merge, ask. |
67
+ | `/commit-in-chunks` on a diff that removes a directory | 1, 5 | **1** | Commit exception authorizes *commits*, not *bulk deletions*. Confirm diff this turn. |
68
+ | User asks "improve this" with no metric named | 4, 7 | **4** | Vague-request trigger fires before any autonomy decision; ask the one clarifying question. |
69
+ | Editing `app/Auth/PasswordReset.php` mid-feature | 2, 7 | **2** | Security-sensitive surface stops the edit until threat-model is recorded. |
70
+ | Agent about to claim "ready to merge" with no fresh test output | 5, 6 | **6** | Verification gate fires before the commit/push question is even valid. |
71
+ | User types free-form prompt that matches `/refine-ticket` | 8, 9 | **8 + 9** | Suggestion runs as numbered options, mirrored to user's language. No conflict. |
72
+
73
+ ## Cross-references
74
+
75
+ - [`agent-authority`](../../.agent-src.uncompressed/rules/agent-authority.md) — the four-band authority router (bands 1–3 + 7 of this hierarchy).
76
+ - [`rule-interactions.md`](rule-interactions.md) — pairwise interaction narrative + Mermaid diagram.
77
+ - [`rule-interactions.yml`](rule-interactions.yml) — machine-readable, CI-linted matrix.
78
+ - [`STABILITY.md`](STABILITY.md) — what the `stability: beta` tag means for breaking changes.
79
+
80
+ ## Stability
81
+
82
+ `beta` — the band ordering and four-line principle are settled, but
83
+ the *worked examples* and the inclusion of band 8 (`command-suggestion-policy`)
84
+ in the public hierarchy have not yet shipped through one major release.
85
+ A breaking change to the band ordering is a SemVer-minor-pre-1.0 bump
86
+ or a SemVer-major bump after 1.0. Adding a row, refining a "Lifts under"
87
+ clause, or expanding the worked-examples table is non-breaking.
@@ -334,5 +334,5 @@ suite asserts every `BLOCKED` path has a matching declaration.
334
334
  GT-U15 (preview render failure).
335
335
  - [`existing-ui-audit` SKILL](../../.agent-src.uncompressed/skills/existing-ui-audit/SKILL.md)
336
336
  — producer of `state.ui_audit`.
337
- - [`ui-audit-before-build` rule](../../.agent-src.uncompressed/rules/ui-audit-before-build.md)
337
+ - [`ui-audit-gate` rule](../../.agent-src.uncompressed/rules/ui-audit-gate.md)
338
338
  — the always-on rule that mirrors the audit gate at the agent layer.
@@ -58,6 +58,20 @@ those sections.
58
58
  | `chat_history.max_size_kb` | per profile | Max file size before overflow handling (see matrix below). |
59
59
  | `chat_history.on_overflow` | per profile | `rotate` drops oldest, `compress` marks for summarization (see matrix below). |
60
60
  | `onboarding.onboarded` | `false` | Whether `/onboard` has run. The `onboarding-gate` rule prompts for `/onboard` while this is `false`. |
61
+ | `ai_council.enabled` | `false` | Master switch for the `/council` command. Even when enabled, every consultation asks before spending tokens. |
62
+ | `ai_council.members.<provider>.enabled` | `false` | Per-provider opt-in (`anthropic`, `openai`). Tokens live in `~/.config/agent-config/<provider>.key` (mode 0600), never in this file. |
63
+ | `ai_council.members.<provider>.model` | per provider | Which model the provider sends the query to (e.g. `claude-sonnet-4-5`, `gpt-4o`). |
64
+ | `ai_council.cost_budget.max_input_tokens` | `50000` | Hard cap on summed input tokens per `/council` invocation. |
65
+ | `ai_council.cost_budget.max_output_tokens` | `20000` | Hard cap on summed output tokens per `/council` invocation. |
66
+ | `ai_council.cost_budget.max_calls` | `10` | Maximum council members per invocation. |
67
+ | `ai_council.cost_budget.max_total_usd` | `0.0` | Per-invocation USD ceiling. `0` disables (token caps still apply). |
68
+ | `ai_council.cost_budget.daily_limit_usd` | `0.0` | Rolling 24h USD ceiling across all `/council` calls. `0` disables. Ledger lives at `~/.config/agent-config/council-spend.jsonl` (mode 0600). |
69
+
70
+ Council API tokens are installed via `./agent-config keys:install-anthropic`
71
+ and `./agent-config keys:install-openai` — they prompt on `/dev/tty`, write to
72
+ `~/.config/agent-config/<provider>.key` with mode `0600`, and never accept env
73
+ vars. The `/council` command refuses to run if the key file's permissions
74
+ drift.
61
75
 
62
76
  ### Cost profiles
63
77
 
@@ -0,0 +1,165 @@
1
+ # End-to-end walkthroughs
2
+
3
+ Four cycle-by-cycle traces of the engine commands — backend ticket,
4
+ free-form prompt, UI track, and a blocked path. Each walkthrough cites
5
+ a checked-in **golden transcript** under [`tests/golden/baseline/`](../tests/golden/baseline/);
6
+ the transcripts are regenerated by `python3 -m tests.golden.capture` and
7
+ diffed in CI, so the cycle counts and directive names below stay
8
+ in sync with the engine's actual behavior.
9
+
10
+ > Behavior demos (autonomy, commit policy, hard floor, verification)
11
+ > live in [`showcase.md`](showcase.md). This file is the cycle-trace
12
+ > companion: input → directives → outcome.
13
+
14
+ ---
15
+
16
+ ## 1. Backend ticket → ship — `/implement-ticket`
17
+
18
+ **Anchor:** [`tests/golden/baseline/GT-1/`](../tests/golden/baseline/GT-1/) ·
19
+ [`tickets/gt-1-happy.json`](../tests/golden/sandbox/tickets/gt-1-happy.json)
20
+
21
+ **Input** — a ticket payload with three concrete acceptance criteria:
22
+
23
+ ```text
24
+ GT-1-MULT — Add multiply(a, b) to the toy calculator
25
+ AC: signature multiply(a: int, b: int) -> int returning the product;
26
+ edge cases multiply(0, n)=0, multiply(-2, 3)=-6;
27
+ pytest test_multiply_returns_product in tests/test_calculator.py.
28
+ ```
29
+
30
+ **Trace** — five cycles, exit code `0` on the last:
31
+
32
+ | Cycle | Directive | What the agent does |
33
+ |---|---|---|
34
+ | c1 | `create-plan` | Builds the three-step plan (impl, test, run) |
35
+ | c2 | `apply-plan` | Edits `src/calculator.py` and `tests/test_calculator.py` |
36
+ | c3 | `run-tests` | `pytest` — `4 passed` (targeted scope) |
37
+ | c4 | `review-changes` | Four judges (bug, security, test-coverage, code-quality) — `success` |
38
+ | c5 | _(none)_ | Engine emits the delivery report, exits `0` |
39
+
40
+ **Outcome** — verified delivery report at
41
+ [`GT-1/delivery-report.md`](../tests/golden/baseline/GT-1/delivery-report.md):
42
+ plan, changes, test verdict, judge findings, suggested next command
43
+ (`/commit`).
44
+
45
+ **Anchored in:** [`commands/implement-ticket.md`](../.agent-src/commands/implement-ticket.md)
46
+ (eight-step contract) · [`work_engine/dispatcher.py`](../.agent-src/templates/scripts/work_engine/dispatcher.py)
47
+ (`STEP_ORDER`).
48
+
49
+ ---
50
+
51
+ ## 2. Free-form prompt → ship — `/work`
52
+
53
+ **Anchor:** [`tests/golden/baseline/GT-P1/`](../tests/golden/baseline/GT-P1/) ·
54
+ [`prompts/gt-p1-high.txt`](../tests/golden/sandbox/prompts/gt-p1-high.txt)
55
+
56
+ **Input** — one line, no AC, no ticket:
57
+
58
+ ```text
59
+ Add modulo(a, b) to src/calculator.py — return a % b for ints
60
+ ```
61
+
62
+ **Trace** — six cycles. The extra cycle vs. GT-1 is the
63
+ `refine-prompt` step that reconstructs the prompt into AC + assumptions
64
+ + confidence band before any plan runs:
65
+
66
+ | Cycle | Directive | Effect |
67
+ |---|---|---|
68
+ | c1 | `refine-prompt` | High confidence — AC reconstructed, no halt |
69
+ | c2 | `create-plan` | Two-step plan |
70
+ | c3 | `apply-plan` | Edits `src/calculator.py` |
71
+ | c4 | `run-tests` | targeted pass |
72
+ | c5 | `review-changes` | judges green |
73
+ | c6 | _(none)_ | delivery report, exit `0` |
74
+
75
+ **Outcome** — `success`. The same dispatcher and judges as GT-1; only
76
+ the input envelope (`input.kind="prompt"` vs `"ticket"`) differs.
77
+
78
+ **Anchored in:** [`commands/work.md`](../.agent-src/commands/work.md) ·
79
+ [`skills/refine-prompt/SKILL.md`](../.agent-src/skills/refine-prompt/SKILL.md)
80
+ · [`docs/contracts/adr-prompt-driven-execution.md`](contracts/adr-prompt-driven-execution.md).
81
+
82
+ ---
83
+
84
+ ## 3. UI improvement → review-loop ship — `/work` (UI track)
85
+
86
+ **Anchor:** [`tests/golden/baseline/GT-U2/`](../tests/golden/baseline/GT-U2/) ·
87
+ [`diffs/gt-u2-improve-diff.diff`](../tests/golden/sandbox/diffs/gt-u2-improve-diff.diff)
88
+
89
+ **Input** — a Blade diff that adds a `<label>` and a heading change to
90
+ `resources/views/contact.blade.php`. The input shape (a diff, not a
91
+ prompt) routes the engine onto the **UI track** instead of the
92
+ generic implement loop.
93
+
94
+ **Trace** — six cycles, none of them `create-plan` / `apply-plan` /
95
+ `run-tests`. The UI track has its own directive set:
96
+
97
+ | Cycle | Directive | Effect |
98
+ |---|---|---|
99
+ | c1 | `existing-ui-audit` | Inventory existing components / tokens before any new design |
100
+ | c2 | `ui-design-brief` | Brief for the proposed change |
101
+ | c3 | _(none — `_no_directive`)_ | Engine threads forward to the apply step |
102
+ | c4 | `ui-apply-plain` | Apply the diff |
103
+ | c5 | `ui-design-review-plain` | Design review judge |
104
+ | c6 | _(none)_ | delivery report, exit `0` |
105
+
106
+ **Outcome** — `success`. The audit-first ordering is enforced by the
107
+ [`ui-audit-gate`](../.agent-src/rules/ui-audit-gate.md) rule: any
108
+ non-trivial UI change without `state.ui_audit` halts before design.
109
+
110
+ **Anchored in:** [`docs/ui-track-mental-model.md`](ui-track-mental-model.md) ·
111
+ [`rules/ui-audit-gate.md`](../.agent-src/rules/ui-audit-gate.md) ·
112
+ [`skills/existing-ui-audit/SKILL.md`](../.agent-src/skills/existing-ui-audit/SKILL.md).
113
+
114
+ ---
115
+
116
+ ## 4. Blocked on ambiguity — `/implement-ticket` halts
117
+
118
+ **Anchor:** [`tests/golden/baseline/GT-2/`](../tests/golden/baseline/GT-2/) ·
119
+ [`tickets/gt-2-ambiguity.json`](../tests/golden/sandbox/tickets/gt-2-ambiguity.json)
120
+
121
+ **Input** — a ticket whose AC list contains a vague entry:
122
+
123
+ ```text
124
+ GT-2-DIV — divide(a, b)
125
+ AC: ... vague acceptance criteria at position(s) 2 ...
126
+ ```
127
+
128
+ **Trace** — one cycle, exit code `1`:
129
+
130
+ | Cycle | Directive | Effect |
131
+ |---|---|---|
132
+ | c1 | _(none)_ | Engine refuses to plan; surfaces refine prompt |
133
+
134
+ **Halt surface** — the engine does not write a plan, does not edit any
135
+ file, and emits a numbered-options block (verbatim from
136
+ [`GT-2/halt-markers.json`](../tests/golden/baseline/GT-2/halt-markers.json)):
137
+
138
+ ```text
139
+ > Ticket GT-2-DIV is missing: vague acceptance criteria at position(s) 2.
140
+ > 1. Run `/refine-ticket GT-2-DIV` and re-invoke `/implement-ticket`
141
+ > 2. Provide the missing details in chat — I'll merge them into the ticket
142
+ > 3. Abandon this ticket — too vague to implement
143
+ ```
144
+
145
+ **Outcome** — `halt_unhandled`; the run is recorded as **blocked** in
146
+ the outcome-aware telemetry (`outcomes: ["blocked"]`, see
147
+ [P2 #9](../agents/roadmaps/road-to-1-15-followups.md#phase-9--outcome-aware-telemetry-p2-9)).
148
+ No work is committed, no auto-guess is taken.
149
+
150
+ **Anchored in:** [`rules/ask-when-uncertain.md`](../.agent-src/rules/ask-when-uncertain.md)
151
+ · [`rules/non-destructive-by-default.md`](../.agent-src/rules/non-destructive-by-default.md)
152
+ · [`skills/refine-ticket/SKILL.md`](../.agent-src/skills/refine-ticket/SKILL.md).
153
+
154
+ ---
155
+
156
+ ## Reproducing these locally
157
+
158
+ ```bash
159
+ python3 -m tests.golden.capture --scenarios GT-1 GT-P1 GT-U2 GT-2
160
+ ```
161
+
162
+ Each scenario writes a fresh `transcript.json`, `delivery-report.md`,
163
+ and `halt-markers.json` under `tests/golden/baseline/<id>/`. CI diffs
164
+ the regenerated output against the committed baseline; drift fails the
165
+ build via the `roadmap-progress-check` and `golden-replay` tasks.
@@ -1,23 +1,39 @@
1
1
  # Getting Started
2
2
 
3
+ `agent-config` is a stack-agnostic orchestration contract for coding
4
+ agents. The installer detects the project shape (Composer / npm / both /
5
+ neither) and wires the matching glue. **Pick the entrypoint that
6
+ matches the project**, not the language you happen to prefer.
7
+
3
8
  ## Installation
4
9
 
10
+ The installer is the same orchestrator across stacks — it reads
11
+ `composer.json` and/or `package.json`, syncs the payload, and generates
12
+ the tool-specific glue. Pick one entrypoint:
13
+
5
14
  ```bash
6
- # Composer (PHP) two steps: install, then run the orchestrator
15
+ # Composer-based projects (PHP / Laravel / Symfony / Zend / Laminas)
7
16
  composer require --dev event4u/agent-config
8
17
  php vendor/bin/install.php
9
18
  # Equivalent: bash vendor/event4u/agent-config/scripts/install
10
19
 
11
- # npm (JavaScript/TypeScript) the orchestrator runs via postinstall
20
+ # npm-based projects (Next.js / React / Node / Vue / plain JS/TS)
12
21
  npm install --save-dev @event4u/agent-config
13
- # Re-run or pick a profile:
22
+ # Postinstall runs the orchestrator. Re-run or pick a profile:
14
23
  # bash node_modules/@event4u/agent-config/scripts/install --profile=balanced
24
+
25
+ # Mixed Composer + npm projects (Laravel + Inertia, Symfony + Vue, …)
26
+ # Run both — the orchestrator merges results, no double-write.
27
+
28
+ # Stack-less or polyglot repos (no Composer, no npm)
29
+ git clone https://github.com/event4u-app/agent-config /tmp/agent-config
30
+ bash /tmp/agent-config/scripts/install --target "$PWD"
15
31
  ```
16
32
 
17
33
  That's it. Your agent now follows your team's standards. The orchestrator
18
34
  runs a bash payload sync and a Python bridge generator (Python 3 is
19
35
  recommended; without it the payload sync still runs). No Task or Make
20
- required for end users.
36
+ required for end users — those are contributor-only.
21
37
 
22
38
  ## Project CLI — `./agent-config`
23
39
 
@@ -99,7 +115,7 @@ Your agent is now:
99
115
  - **Respecting your codebase** — no conflicting patterns
100
116
  - **Following standards** — consistent code quality
101
117
 
102
- This is enforced automatically by 55 rules. No configuration needed.
118
+ This is enforced automatically by 57 rules. No configuration needed.
103
119
 
104
120
  ---
105
121
 
@@ -131,13 +147,15 @@ Your agent now understands slash commands:
131
147
  |---|---|
132
148
  | `/commit` | Stage and commit with Conventional Commits |
133
149
  | `/create-pr` | Create PR with Jira-linked description |
134
- | `/fix-ci` | Fetch and fix GitHub Actions failures |
150
+ | `/fix ci` | Fetch and fix GitHub Actions failures |
151
+ | `/optimize skills` | Audit skills, find duplicates, run linter |
152
+ | `/feature plan` | Interactively plan a feature |
135
153
  | `/quality-fix` | Run and fix all quality checks |
136
154
  | `/chat-history` | Inspect the persistent chat-history log |
137
155
  | `/chat-history-resume` | Recover context after a crashed or switched session |
138
156
  | `/chat-history-clear` | Wipe the chat-history log (with confirmation) |
139
157
 
140
- → [Browse all 77 commands](../.agent-src/commands/)
158
+ → [Browse all 69 active commands](../.agent-src/commands/)
141
159
 
142
160
  ---
143
161
 
@@ -173,7 +191,7 @@ See the [`chat-history` rule](../.agent-src/rules/chat-history-ownership.md) and
173
191
  ## Next steps
174
192
 
175
193
  1. **Stay on `minimal`** — use it for a few days, see if the difference is noticeable
176
- 2. **Try commands** — `/commit`, `/create-pr`, `/fix-ci` are great starting points
194
+ 2. **Try commands** — `/commit`, `/create-pr`, `/fix ci` are great starting points
177
195
  3. **Upgrade when ready** — switch to `balanced` to let the runtime dispatcher execute skills that declare a shell command
178
196
  4. **Customize** — add [project overrides](customization.md) for your team's specific patterns
179
197