@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.
- 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 +28 -0
- package/.agent-src/rules/direct-answers.md +18 -26
- 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 +15 -21
- 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 +33 -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 +49 -0
- package/.agent-src/rules/role-mode-adherence.md +2 -2
- package/.agent-src/rules/rule-type-governance.md +29 -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 +12 -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 +97 -0
- package/README.md +20 -20
- package/config/agent-settings.template.yml +23 -0
- package/docs/architecture.md +1 -1
- 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/load-context-budget-model.md +80 -0
- package/docs/contracts/load-context-schema.md +20 -0
- package/docs/contracts/memory-visibility-v1.md +138 -0
- package/docs/contracts/one-off-script-lifecycle.md +109 -0
- package/docs/contracts/roadmap-complexity-standard.md +137 -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/ask-when-uncertain-demos.md +134 -0
- package/docs/guidelines/agent-infra/direct-answers-demos.md +145 -0
- package/docs/guidelines/agent-infra/layered-settings.md +32 -13
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/package.json +1 -1
- package/scripts/agent-config +64 -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 +67 -0
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +206 -0
- package/scripts/ai_council/{_one_off_roundtrip.py → 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/build_rule_trigger_matrix.py +360 -0
- package/scripts/capture_showcase_session.py +361 -0
- package/scripts/chat_history.py +11 -1
- package/scripts/check_always_budget.py +46 -2
- package/scripts/check_one_off_location.py +81 -0
- package/scripts/check_references.py +6 -0
- package/scripts/compress.py +5 -2
- package/scripts/context_hygiene_hook.py +181 -0
- 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-context-hygiene.sh +55 -0
- package/scripts/hooks/augment-dispatcher.sh +72 -0
- package/scripts/hooks/augment-onboarding-gate.sh +55 -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 +728 -51
- package/scripts/install.sh +1 -1
- package/scripts/lint_examples.py +98 -0
- package/scripts/lint_hook_manifest.py +216 -0
- package/scripts/lint_one_off_age.py +184 -0
- package/scripts/lint_roadmap_complexity.py +127 -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 +142 -0
- package/scripts/readme_linter.py +12 -3
- package/scripts/roadmap_progress_hook.py +5 -0
- package/scripts/schemas/rule.schema.json +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
- /package/scripts/ai_council/{_one_off_2a4_acceptance.py → one_off_archive/2026-05/_one_off_2a4_acceptance.py} +0 -0
- /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
- /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
- /package/scripts/ai_council/{_one_off_followups_review.py → one_off_archive/2026-05/_one_off_followups_review.py} +0 -0
- /package/scripts/ai_council/{_one_off_nondestructive_inline_audit.py → one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py} +0 -0
- /package/scripts/{_one_off_phase4_dispatch_latency.py → ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py} +0 -0
- /package/scripts/{_one_off_phase6_trigger_jaccard.py → ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py} +0 -0
- /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
- /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
- /package/scripts/ai_council/{_one_off_rebalancing_audit.py → one_off_archive/2026-05/_one_off_rebalancing_audit.py} +0 -0
- /package/scripts/ai_council/{_one_off_rule_hardening_v1.py → one_off_archive/2026-05/_one_off_rule_hardening_v1.py} +0 -0
- /package/scripts/ai_council/{_one_off_structural_open_questions.py → one_off_archive/2026-05/_one_off_structural_open_questions.py} +0 -0
- /package/scripts/ai_council/{_one_off_structural_optimization.py → one_off_archive/2026-05/_one_off_structural_optimization.py} +0 -0
- /package/scripts/ai_council/{_one_off_structural_v3_gaps.py → one_off_archive/2026-05/_one_off_structural_v3_gaps.py} +0 -0
- /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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
78
|
-
- Empathy: ❤️, 🤗, 😊.
|
|
79
|
-
- Section dividers, headline ornaments, reaction emojis.
|
|
76
|
+
## Failure modes
|
|
80
77
|
|
|
81
|
-
|
|
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
|
-
|
|
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: "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.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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** —
|
|
39
|
-
|
|
40
|
-
- **
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
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
|
|
59
|
-
6. User already declined? Re-ask forbidden per
|
|
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
|
|
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: "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: "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
|