@event4u/agent-config 1.18.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.
- package/.agent-src/commands/council/default.md +74 -76
- package/.agent-src/commands/feature/roadmap.md +22 -0
- package/.agent-src/commands/roadmap/create.md +38 -6
- package/.agent-src/commands/roadmap/execute.md +36 -9
- package/.agent-src/rules/agent-authority.md +1 -0
- package/.agent-src/rules/agent-docs.md +1 -0
- package/.agent-src/rules/analysis-skill-routing.md +1 -0
- package/.agent-src/rules/architecture.md +1 -0
- package/.agent-src/rules/artifact-drafting-protocol.md +1 -0
- package/.agent-src/rules/artifact-engagement-recording.md +1 -0
- package/.agent-src/rules/ask-when-uncertain.md +1 -0
- package/.agent-src/rules/augment-portability.md +1 -0
- package/.agent-src/rules/augment-source-of-truth.md +1 -0
- package/.agent-src/rules/autonomous-execution.md +1 -0
- package/.agent-src/rules/capture-learnings.md +1 -0
- package/.agent-src/rules/chat-history-cadence.md +34 -0
- package/.agent-src/rules/chat-history-ownership.md +1 -0
- package/.agent-src/rules/chat-history-visibility.md +1 -0
- package/.agent-src/rules/cli-output-handling.md +2 -2
- package/.agent-src/rules/command-suggestion-policy.md +1 -0
- package/.agent-src/rules/commit-conventions.md +1 -0
- package/.agent-src/rules/commit-policy.md +1 -0
- package/.agent-src/rules/context-hygiene.md +22 -0
- package/.agent-src/rules/direct-answers.md +1 -0
- package/.agent-src/rules/docker-commands.md +1 -0
- package/.agent-src/rules/docs-sync.md +1 -0
- package/.agent-src/rules/downstream-changes.md +1 -0
- package/.agent-src/rules/e2e-testing.md +1 -0
- package/.agent-src/rules/guidelines.md +1 -0
- package/.agent-src/rules/improve-before-implement.md +1 -0
- package/.agent-src/rules/language-and-tone.md +1 -0
- package/.agent-src/rules/laravel-translations.md +1 -0
- package/.agent-src/rules/markdown-safe-codeblocks.md +1 -0
- package/.agent-src/rules/minimal-safe-diff.md +1 -0
- package/.agent-src/rules/missing-tool-handling.md +1 -0
- package/.agent-src/rules/model-recommendation.md +1 -0
- package/.agent-src/rules/no-cheap-questions.md +1 -0
- package/.agent-src/rules/no-roadmap-references.md +1 -0
- package/.agent-src/rules/non-destructive-by-default.md +1 -0
- package/.agent-src/rules/onboarding-gate.md +26 -0
- package/.agent-src/rules/package-ci-checks.md +1 -0
- package/.agent-src/rules/php-coding.md +1 -0
- package/.agent-src/rules/preservation-guard.md +1 -0
- package/.agent-src/rules/review-routing-awareness.md +1 -0
- package/.agent-src/rules/reviewer-awareness.md +1 -0
- package/.agent-src/rules/roadmap-progress-sync.md +22 -0
- package/.agent-src/rules/role-mode-adherence.md +2 -2
- package/.agent-src/rules/rule-type-governance.md +1 -0
- package/.agent-src/rules/runtime-safety.md +1 -0
- package/.agent-src/rules/scope-control.md +1 -0
- package/.agent-src/rules/security-sensitive-stop.md +1 -0
- package/.agent-src/rules/size-enforcement.md +1 -0
- package/.agent-src/rules/skill-improvement-trigger.md +1 -0
- package/.agent-src/rules/skill-quality.md +1 -0
- package/.agent-src/rules/slash-command-routing-policy.md +39 -0
- package/.agent-src/rules/think-before-action.md +1 -0
- package/.agent-src/rules/token-efficiency.md +1 -0
- package/.agent-src/rules/tool-safety.md +1 -0
- package/.agent-src/rules/ui-audit-gate.md +1 -0
- package/.agent-src/rules/upstream-proposal.md +1 -0
- package/.agent-src/rules/user-interaction.md +1 -0
- package/.agent-src/rules/verify-before-complete.md +1 -0
- package/.agent-src/skills/roadmap-management/SKILL.md +29 -4
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +8 -1
- package/.agent-src/templates/agent-settings.md +16 -0
- package/.agent-src/templates/roadmaps.md +8 -3
- package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +9 -0
- package/.agent-src/templates/scripts/work_engine/hooks/__init__.py +4 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +4 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +163 -0
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +111 -0
- package/.agent-src/templates/scripts/work_engine/hooks/settings.py +36 -0
- package/.agent-src/templates/scripts/work_engine/scoring/decision_trace.py +141 -0
- package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +125 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +62 -0
- package/README.md +19 -19
- package/config/agent-settings.template.yml +23 -0
- package/docs/catalog.md +5 -2
- package/docs/contracts/adr-settings-sync-engine.md +127 -0
- package/docs/contracts/decision-trace-v1.md +146 -0
- package/docs/contracts/file-ownership-matrix.json +7 -0
- package/docs/contracts/hook-architecture-v1.md +213 -0
- package/docs/contracts/memory-visibility-v1.md +138 -0
- package/docs/contracts/one-off-script-lifecycle.md +109 -0
- package/docs/contracts/rule-interactions.yml +22 -0
- package/docs/customization.md +1 -0
- package/docs/development.md +4 -1
- package/docs/guidelines/agent-infra/layered-settings.md +32 -13
- package/package.json +1 -1
- package/scripts/agent-config +44 -0
- package/scripts/ai_council/bundler.py +3 -3
- package/scripts/ai_council/clients.py +24 -8
- package/scripts/ai_council/one_off_archive/2026-05/README.md +22 -0
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +13 -8
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +180 -0
- package/scripts/ai_council/session.py +92 -0
- package/scripts/capture_showcase_session.py +361 -0
- package/scripts/chat_history.py +11 -1
- package/scripts/check_always_budget.py +7 -2
- package/scripts/context_hygiene_hook.py +14 -6
- package/scripts/council_cli.py +357 -0
- package/scripts/hook_manifest.yaml +184 -0
- package/scripts/hooks/__init__.py +1 -0
- package/scripts/hooks/augment-dispatcher.sh +72 -0
- package/scripts/hooks/cline-dispatcher.sh +86 -0
- package/scripts/hooks/cursor-dispatcher.sh +76 -0
- package/scripts/hooks/dispatch_hook.py +348 -0
- package/scripts/hooks/envelope.py +98 -0
- package/scripts/hooks/gemini-dispatcher.sh +117 -0
- package/scripts/hooks/state_io.py +122 -0
- package/scripts/hooks/windsurf-dispatcher.sh +123 -0
- package/scripts/hooks_status.py +146 -0
- package/scripts/install.py +725 -87
- package/scripts/install.sh +1 -1
- package/scripts/lint_hook_manifest.py +216 -0
- package/scripts/lint_one_off_age.py +184 -0
- package/scripts/lint_rule_tiers.py +78 -0
- package/scripts/lint_showcase_sessions.py +148 -0
- package/scripts/minimal_safe_diff_hook.py +245 -0
- package/scripts/onboarding_gate_hook.py +13 -8
- package/scripts/readme_linter.py +12 -3
- package/scripts/roadmap_progress_hook.py +5 -0
- package/scripts/sync_agent_settings.py +32 -129
- package/scripts/sync_yaml_rt.py +734 -0
- package/scripts/verify_before_complete_hook.py +216 -0
|
@@ -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
|
|
@@ -92,6 +93,31 @@ gate. This protects projects that were set up before this rule shipped.
|
|
|
92
93
|
- `scope-control` — option `2` writes exactly one key; no side effects.
|
|
93
94
|
- `role-mode-adherence` — gate runs BEFORE the mode marker is emitted.
|
|
94
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
|
+
|
|
95
121
|
## See also
|
|
96
122
|
|
|
97
123
|
- [`/onboard`](../commands/onboard.md) — the command this gate invokes
|
|
@@ -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
|
|
@@ -156,3 +157,24 @@ the mandatory pre-send self-check, the failure-mode catalog, and the
|
|
|
156
157
|
[`contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md`](../contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md).
|
|
157
158
|
Pull it whenever a trigger fires — the rule above is the obligation
|
|
158
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: "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: "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
|
|
@@ -117,11 +117,28 @@ Every roadmap follows this structure:
|
|
|
117
117
|
|
|
118
118
|
### Quality gates
|
|
119
119
|
|
|
120
|
-
Every roadmap implicitly includes
|
|
120
|
+
Every roadmap implicitly includes the project's quality pipeline
|
|
121
|
+
(static analysis, autofixes, tests). What's configurable is **when**
|
|
122
|
+
the pipeline runs during `/roadmap execute`, controlled by
|
|
123
|
+
`roadmap.quality_cadence` in `.agent-settings.yml`:
|
|
121
124
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
+
| Cadence | Pipeline runs | Trade-off |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| `end_of_roadmap` (default) | Once before archiving | Fastest, fewest tokens; errors compound across phases |
|
|
128
|
+
| `per_phase` | After every completed phase + final | Balanced; catches drift at phase boundaries |
|
|
129
|
+
| `per_step` | After every completed step + final | Legacy verbose; highest token cost |
|
|
130
|
+
|
|
131
|
+
The default is `end_of_roadmap` because most steps are checkbox-only
|
|
132
|
+
content edits and a final pipeline run is the cheapest way to satisfy
|
|
133
|
+
`verify-before-complete`. Switch to `per_phase` for risky migrations or
|
|
134
|
+
unfamiliar codebases.
|
|
135
|
+
|
|
136
|
+
**Always-on, regardless of cadence:**
|
|
137
|
+
|
|
138
|
+
- Step checkboxes flip `[ ] → [x]` and the dashboard regenerates **same
|
|
139
|
+
response** (enforced by `roadmap-progress-sync`).
|
|
140
|
+
- Before any "roadmap complete" claim or archival, the pipeline runs
|
|
141
|
+
fresh (enforced by `verify-before-complete`).
|
|
125
142
|
|
|
126
143
|
### Step granularity
|
|
127
144
|
|
|
@@ -149,6 +166,14 @@ Every roadmap implicitly includes these gates (run after each step that changes
|
|
|
149
166
|
the roadmap text. If the user declines, do **not** re-propose during
|
|
150
167
|
`roadmap-execute`. Decline = silence. See [`scope-control`](../../rules/scope-control.md#decline--silence--no-re-asking-on-the-same-task).
|
|
151
168
|
5. Save with a kebab-case filename (e.g. `optimize-webhook-jobs.md`).
|
|
169
|
+
**Before writing**, scan the entire roadmap namespace for a
|
|
170
|
+
collision — active, `archive/`, `skipped/`, and nested subdirs —
|
|
171
|
+
with `find agents/roadmaps -type f -iname "<name>.md"`. If any
|
|
172
|
+
hit comes back, stop and ask the user to rename, open the
|
|
173
|
+
existing file, or abort. Never silently overwrite an archived
|
|
174
|
+
or skipped roadmap. Detailed prompt in
|
|
175
|
+
[`commands/roadmap/create.md`](../../commands/roadmap/create.md)
|
|
176
|
+
step 6.
|
|
152
177
|
6. Regenerate the dashboard so the new roadmap is included.
|
|
153
178
|
|
|
154
179
|
### Executing a roadmap
|
|
@@ -128,7 +128,12 @@ When reporting completion to the user:
|
|
|
128
128
|
3. **Result** — numeric breakdown (tests passed/failed/skipped, errors,
|
|
129
129
|
warnings)
|
|
130
130
|
4. **Caveats** — anything the output flagged but you chose to accept
|
|
131
|
-
5. **
|
|
131
|
+
5. **Untracked files** — if `git status --short` shows any untracked
|
|
132
|
+
files in the working tree, list them verbatim in the report. This
|
|
133
|
+
prevents silently-shipped artefacts (logs, scratch scripts, ad-hoc
|
|
134
|
+
notes) from disappearing into a future commit. Empty list means
|
|
135
|
+
omit the section.
|
|
136
|
+
6. **Next step** — e.g. "Ready for `/commit`" or "Awaiting review"
|
|
132
137
|
|
|
133
138
|
## Gotchas
|
|
134
139
|
|
|
@@ -188,3 +193,5 @@ Before sending a completion message:
|
|
|
188
193
|
* [ ] No warnings or skips are hidden
|
|
189
194
|
* [ ] Targeted tests green → full suite green → quality pipeline clean
|
|
190
195
|
* [ ] `git status` reflects only the intended change set
|
|
196
|
+
* [ ] If `git status --short` shows untracked files, the report lists
|
|
197
|
+
them verbatim under "Untracked files"
|
|
@@ -217,6 +217,21 @@ pipelines:
|
|
|
217
217
|
# Included by every cost_profile except `custom`.
|
|
218
218
|
skill_improvement: true
|
|
219
219
|
|
|
220
|
+
# --- Roadmap execution ---
|
|
221
|
+
#
|
|
222
|
+
# Controls when /roadmap execute runs the project's quality pipeline.
|
|
223
|
+
# Step checkboxes and the dashboard are ALWAYS updated in the same
|
|
224
|
+
# response — that cadence is governed by `roadmap-progress-sync` and
|
|
225
|
+
# is non-negotiable. This setting only governs *quality tool runs*.
|
|
226
|
+
roadmap:
|
|
227
|
+
# When to run quality tools during /roadmap execute.
|
|
228
|
+
# end_of_roadmap = once, before archiving (default — fastest, fewest tokens)
|
|
229
|
+
# per_phase = once after every completed phase
|
|
230
|
+
# per_step = after every completed step (legacy; highest token cost)
|
|
231
|
+
# Iron Law `verify-before-complete` still applies — fresh output is
|
|
232
|
+
# mandatory before any "roadmap complete" claim, regardless of cadence.
|
|
233
|
+
quality_cadence: end_of_roadmap
|
|
234
|
+
|
|
220
235
|
# --- Subagent orchestration ---
|
|
221
236
|
subagents:
|
|
222
237
|
# Model for implementer subagents (empty = same tier as the session model)
|
|
@@ -362,6 +377,7 @@ lives under `personal:` in YAML.
|
|
|
362
377
|
| `hooks.chat_history.enabled` | `true`, `false` | `true` | Register the four chat-history hooks (turn-check, append, halt-append, heartbeat). Gated by **both** this flag AND `chat_history.enabled`; either off → no chat-history hook registers. |
|
|
363
378
|
| `hooks.chat_history.script` | path | `scripts/chat_history.py` | Override path to the chat-history CLI. Set only when the script lives outside the standard location. |
|
|
364
379
|
| `pipelines.skill_improvement` | `true`, `false` | `true` | When `true`: propose learning capture after meaningful tasks. When `false`: silent. Included in every profile except `custom`. |
|
|
380
|
+
| `roadmap.quality_cadence` | `end_of_roadmap`, `per_phase`, `per_step` | `end_of_roadmap` | When `/roadmap execute` runs the project's quality pipeline. Default skips per-step / per-phase runs and gates only the final archival. `per_phase` runs once after every phase; `per_step` is the legacy verbose mode. Step checkboxes and the dashboard are always updated regardless. `verify-before-complete` still requires fresh output before any "roadmap complete" claim. |
|
|
365
381
|
| `subagents.implementer_model` | model alias or empty | _(empty)_ | Model for implementer subagents. Empty = same tier as session model. See [subagent-configuration](../contexts/subagent-configuration.md). |
|
|
366
382
|
| `subagents.judge_model` | model alias or empty | _(empty)_ | Model for judge subagents. Empty = one tier above implementer (opus if sonnet, sonnet if haiku). |
|
|
367
383
|
| `subagents.max_parallel` | integer | `3` | Maximum parallel subagent invocations. `1` serializes. |
|
|
@@ -39,11 +39,16 @@ Templates for roadmap files stored in `agents/roadmaps/` or `app/Modules/{Module
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
-
## Quality Gates (always apply)
|
|
42
|
+
## Quality Gates (always apply at completion)
|
|
43
43
|
|
|
44
|
-
Every roadmap must pass
|
|
44
|
+
Every roadmap must pass the project's quality pipeline before it is
|
|
45
|
+
considered done. **When** the pipeline runs during `/roadmap execute` is
|
|
46
|
+
governed by `roadmap.quality_cadence` in `.agent-settings.yml`
|
|
47
|
+
(`end_of_roadmap` default → once before archival; `per_phase` → after
|
|
48
|
+
every phase; `per_step` → after every step). Either way, a final fresh
|
|
49
|
+
run is mandatory before "complete" per `verify-before-complete`.
|
|
45
50
|
|
|
46
|
-
|
|
51
|
+
Common commands:
|
|
47
52
|
|
|
48
53
|
```bash
|
|
49
54
|
# PHP projects (inside Docker container if applicable)
|
|
@@ -19,8 +19,10 @@ from .hooks.builtin import (
|
|
|
19
19
|
ChatHistoryHaltAppendHook,
|
|
20
20
|
ChatHistoryHeartbeatHook,
|
|
21
21
|
ChatHistoryTurnCheckHook,
|
|
22
|
+
DecisionTraceHook,
|
|
22
23
|
DirectiveSetGuardHook,
|
|
23
24
|
HaltSurfaceAuditHook,
|
|
25
|
+
MemoryVisibilityHook,
|
|
24
26
|
StateShapeValidationHook,
|
|
25
27
|
TraceHook,
|
|
26
28
|
)
|
|
@@ -56,6 +58,13 @@ def _build_hook_registry(args: argparse.Namespace) -> HookRegistry:
|
|
|
56
58
|
StateShapeValidationHook().register(registry)
|
|
57
59
|
if settings.directive_set_guard:
|
|
58
60
|
DirectiveSetGuardHook().register(registry)
|
|
61
|
+
if settings.decision_trace:
|
|
62
|
+
DecisionTraceHook().register(registry)
|
|
63
|
+
if settings.memory_visibility:
|
|
64
|
+
MemoryVisibilityHook(
|
|
65
|
+
cost_profile=settings.cost_profile,
|
|
66
|
+
visibility_off=settings.memory_visibility_off,
|
|
67
|
+
).register(registry)
|
|
59
68
|
if settings.chat_history_enabled:
|
|
60
69
|
_register_chat_history_hooks(registry, settings)
|
|
61
70
|
|
|
@@ -24,8 +24,10 @@ from .builtin import (
|
|
|
24
24
|
ChatHistoryHaltAppendHook,
|
|
25
25
|
ChatHistoryHeartbeatHook,
|
|
26
26
|
ChatHistoryTurnCheckHook,
|
|
27
|
+
DecisionTraceHook,
|
|
27
28
|
DirectiveSetGuardHook,
|
|
28
29
|
HaltSurfaceAuditHook,
|
|
30
|
+
MemoryVisibilityHook,
|
|
29
31
|
StateShapeValidationHook,
|
|
30
32
|
TraceHook,
|
|
31
33
|
)
|
|
@@ -40,6 +42,7 @@ __all__ = [
|
|
|
40
42
|
"ChatHistoryHaltAppendHook",
|
|
41
43
|
"ChatHistoryHeartbeatHook",
|
|
42
44
|
"ChatHistoryTurnCheckHook",
|
|
45
|
+
"DecisionTraceHook",
|
|
43
46
|
"DirectiveSetGuardHook",
|
|
44
47
|
"HaltSurfaceAuditHook",
|
|
45
48
|
"HookCallback",
|
|
@@ -49,6 +52,7 @@ __all__ = [
|
|
|
49
52
|
"HookHalt",
|
|
50
53
|
"HookRegistry",
|
|
51
54
|
"HookRunner",
|
|
55
|
+
"MemoryVisibilityHook",
|
|
52
56
|
"StateShapeValidationHook",
|
|
53
57
|
"TraceHook",
|
|
54
58
|
]
|
|
@@ -15,8 +15,10 @@ from .chat_history_append import ChatHistoryAppendHook
|
|
|
15
15
|
from .chat_history_halt_append import ChatHistoryHaltAppendHook
|
|
16
16
|
from .chat_history_heartbeat import ChatHistoryHeartbeatHook
|
|
17
17
|
from .chat_history_turn_check import ChatHistoryTurnCheckHook
|
|
18
|
+
from .decision_trace import DecisionTraceHook
|
|
18
19
|
from .directive_set_guard import DirectiveSetGuardHook
|
|
19
20
|
from .halt_surface_audit import HaltSurfaceAuditHook
|
|
21
|
+
from .memory_visibility import MemoryVisibilityHook
|
|
20
22
|
from .state_shape_validation import StateShapeValidationHook
|
|
21
23
|
from .trace import TraceHook
|
|
22
24
|
|
|
@@ -25,8 +27,10 @@ __all__ = [
|
|
|
25
27
|
"ChatHistoryHaltAppendHook",
|
|
26
28
|
"ChatHistoryHeartbeatHook",
|
|
27
29
|
"ChatHistoryTurnCheckHook",
|
|
30
|
+
"DecisionTraceHook",
|
|
28
31
|
"DirectiveSetGuardHook",
|
|
29
32
|
"HaltSurfaceAuditHook",
|
|
33
|
+
"MemoryVisibilityHook",
|
|
30
34
|
"StateShapeValidationHook",
|
|
31
35
|
"TraceHook",
|
|
32
36
|
]
|