@event4u/agent-config 1.9.1 → 1.13.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/agent-handoff.md +15 -0
- package/.agent-src/commands/chat-history-clear.md +98 -0
- package/.agent-src/commands/chat-history-resume.md +178 -0
- package/.agent-src/commands/chat-history.md +102 -0
- package/.agent-src/commands/compress.md +9 -9
- package/.agent-src/commands/copilot-agents-init.md +1 -1
- package/.agent-src/commands/fix-portability.md +2 -2
- package/.agent-src/commands/fix-pr-bot-comments.md +1 -1
- package/.agent-src/commands/fix-pr-developer-comments.md +1 -1
- package/.agent-src/commands/fix-references.md +2 -2
- package/.agent-src/commands/mode.md +5 -5
- package/.agent-src/commands/onboard.md +171 -0
- package/.agent-src/commands/roadmap-create.md +7 -2
- package/.agent-src/commands/roadmap-execute.md +2 -2
- package/.agent-src/commands/set-cost-profile.md +101 -0
- package/.agent-src/commands/sync-agent-settings.md +122 -0
- package/.agent-src/commands/sync-gitignore.md +104 -0
- package/.agent-src/commands/tests-execute.md +6 -6
- package/.agent-src/commands/upstream-contribute.md +5 -4
- package/.agent-src/contexts/augment-infrastructure.md +2 -2
- package/.agent-src/contexts/override-system.md +1 -1
- package/.agent-src/contexts/subagent-configuration.md +3 -3
- package/.agent-src/guidelines/agent-infra/layered-settings.md +48 -5
- package/.agent-src/rules/ask-when-uncertain.md +56 -3
- package/.agent-src/rules/augment-portability.md +52 -1
- package/.agent-src/rules/augment-source-of-truth.md +10 -10
- package/.agent-src/rules/chat-history.md +171 -0
- package/.agent-src/rules/docker-commands.md +5 -7
- package/.agent-src/rules/docs-sync.md +13 -9
- package/.agent-src/rules/improve-before-implement.md +2 -0
- package/.agent-src/rules/onboarding-gate.md +94 -0
- package/.agent-src/rules/package-ci-checks.md +6 -5
- package/.agent-src/rules/roadmap-progress-sync.md +24 -13
- package/.agent-src/rules/size-enforcement.md +1 -1
- package/.agent-src/rules/skill-quality.md +1 -1
- package/.agent-src/rules/think-before-action.md +1 -0
- package/.agent-src/rules/user-interaction.md +53 -7
- package/.agent-src/scripts/update_roadmap_progress.py +57 -10
- package/.agent-src/skills/check-refs/SKILL.md +1 -1
- package/.agent-src/skills/command-routing/SKILL.md +1 -1
- package/.agent-src/skills/command-writing/SKILL.md +4 -3
- package/.agent-src/skills/file-editor/SKILL.md +2 -2
- package/.agent-src/skills/guideline-writing/SKILL.md +4 -3
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
- package/.agent-src/skills/lint-skills/SKILL.md +1 -1
- package/.agent-src/skills/roadmap-management/SKILL.md +13 -10
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +20 -30
- package/.agent-src/skills/rule-writing/SKILL.md +5 -5
- package/.agent-src/skills/terragrunt/SKILL.md +0 -8
- package/.agent-src/skills/upstream-contribute/SKILL.md +5 -4
- package/.agent-src/templates/agent-settings.md +86 -34
- package/.agent-src/templates/github-workflows/roadmap-progress-check.yml +63 -0
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +60 -0
- package/.agent-src/templates/scripts/memory_lookup.py +382 -21
- package/.agent-src/templates/scripts/memory_status.py +110 -9
- package/.claude-plugin/marketplace.json +1 -1
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +320 -0
- package/CONTRIBUTING.md +89 -40
- package/README.md +24 -3
- package/composer.json +5 -1
- package/config/agent-settings.template.yml +45 -6
- package/config/gitignore-block.txt +24 -0
- package/config/profiles/balanced.ini +5 -0
- package/config/profiles/full.ini +5 -0
- package/config/profiles/minimal.ini +5 -0
- package/docs/customization.md +30 -4
- package/docs/getting-started.md +53 -3
- package/docs/mcp.md +15 -4
- package/package.json +21 -2
- package/scripts/agent-config +230 -0
- package/scripts/chat_history.py +519 -0
- package/scripts/check_portability.py +151 -1
- package/scripts/install.py +55 -3
- package/scripts/install.sh +50 -21
- package/scripts/mcp_render.py +30 -16
- package/scripts/memory_lookup.py +143 -7
- package/scripts/memory_status.py +76 -14
- package/scripts/postinstall.sh +16 -0
- package/scripts/release.py +588 -0
- package/scripts/sync_agent_settings.py +211 -0
- package/scripts/sync_gitignore.py +226 -0
- package/templates/agent-config-wrapper.sh +47 -0
- package/.agent-src/commands/config-agent-settings.md +0 -126
- package/.agent-src/skills/eloquent/evals/last-run.json +0 -99
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: "auto"
|
|
3
|
-
description: "Editing checkboxes in agents/roadmaps/*.md — [x], [~], [-], or add/rename/remove phases — must
|
|
3
|
+
description: "Editing checkboxes in agents/roadmaps/*.md — [x], [~], [-], or add/rename/remove phases — must regenerate the roadmap dashboard in the SAME response; a roadmap that hits 0 open items must also be archived in the SAME response"
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
source: package
|
|
6
6
|
---
|
|
@@ -11,7 +11,7 @@ source: package
|
|
|
11
11
|
|
|
12
12
|
**CRITICAL — ZERO TOLERANCE:** Whenever you change checkbox state in a
|
|
13
13
|
roadmap file (`agents/roadmaps/*.md`, module or package equivalents)
|
|
14
|
-
you MUST
|
|
14
|
+
you MUST regenerate the dashboard **in the same response** — not
|
|
15
15
|
later, not batched across sessions, not "at the end of the roadmap".
|
|
16
16
|
|
|
17
17
|
`agents/roadmaps-progress.md` is the read-only dashboard. Every
|
|
@@ -24,33 +24,44 @@ roadmap to `count_open == 0` (every item is `[x]`, `[~]`, or `[-]`),
|
|
|
24
24
|
in `agents/roadmaps/` is a rule violation. See `roadmap-management`
|
|
25
25
|
for the archive vs skipped decision table.
|
|
26
26
|
|
|
27
|
+
## How to regenerate
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
./agent-config roadmap:progress
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The `./agent-config` wrapper is written into the project root by the
|
|
34
|
+
installer and delegates to the master CLI inside
|
|
35
|
+
`node_modules/@event4u/agent-config/` or `vendor/event4u/agent-config/`.
|
|
36
|
+
No global tooling required.
|
|
37
|
+
|
|
27
38
|
## Triggers
|
|
28
39
|
|
|
29
40
|
| Edit | Must run, same response |
|
|
30
41
|
|---|---|
|
|
31
|
-
| Mark step `[x]`, `[~]`, `[-]`, or unmark back to `[ ]` |
|
|
32
|
-
| Add, rename, or remove a phase |
|
|
33
|
-
| Create a new roadmap file |
|
|
34
|
-
| **Last `[ ]` flips** — roadmap reaches `count_open == 0` | `git mv` → `archive/` (or `skipped/`) **then**
|
|
35
|
-
| Move roadmap between `roadmaps/` ↔ `archive/` ↔ `skipped/` |
|
|
42
|
+
| Mark step `[x]`, `[~]`, `[-]`, or unmark back to `[ ]` | regenerate dashboard |
|
|
43
|
+
| Add, rename, or remove a phase | regenerate dashboard |
|
|
44
|
+
| Create a new roadmap file | regenerate dashboard |
|
|
45
|
+
| **Last `[ ]` flips** — roadmap reaches `count_open == 0` | `git mv` → `archive/` (or `skipped/`) **then** regenerate dashboard |
|
|
46
|
+
| Move roadmap between `roadmaps/` ↔ `archive/` ↔ `skipped/` | regenerate dashboard |
|
|
36
47
|
|
|
37
48
|
**Batching:** multiple checkbox edits in one response → a **single**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
regeneration at the end is enough. If one closes a roadmap, archive
|
|
50
|
+
it first, then run the single regen. But the response must not end
|
|
51
|
+
without it.
|
|
41
52
|
|
|
42
|
-
## Why a rule, not
|
|
53
|
+
## Why this is a rule, not a skill tip
|
|
43
54
|
|
|
44
55
|
The `roadmap-management` skill documents the command in several
|
|
45
56
|
places, but skill body text is easy to miss under procedure pressure.
|
|
46
57
|
A rule collapses the constraint into one line the model cannot skip:
|
|
47
|
-
"checkbox edit →
|
|
58
|
+
"checkbox edit → regenerate dashboard — same response".
|
|
48
59
|
|
|
49
60
|
## Do NOT
|
|
50
61
|
|
|
51
62
|
- Do NOT edit `agents/roadmaps-progress.md` by hand — always regenerate.
|
|
52
63
|
- Do NOT defer regen to "next commit" or "before push" — same response.
|
|
53
|
-
- Do NOT rely on
|
|
64
|
+
- Do NOT rely on CI (`--check` mode) as first line of defence — CI is last-line, not real-time.
|
|
54
65
|
- Do NOT skip regen because "only one checkbox changed" — the dashboard aggregates counts and phase percentages that shift on single edits.
|
|
55
66
|
- Do NOT leave a 100%-complete roadmap in `agents/roadmaps/` "for review" — archive same response, ask the user afterwards if needed, not before.
|
|
56
67
|
- Do NOT regenerate the dashboard before the `git mv` when a roadmap closes — otherwise it reappears in "Open roadmaps".
|
|
@@ -26,4 +26,4 @@ source: package
|
|
|
26
26
|
|
|
27
27
|
→ Frontmatter contract (required/optional keys per type):
|
|
28
28
|
[`agents/docs/frontmatter-contract.md`](../../../agents/docs/frontmatter-contract.md).
|
|
29
|
-
Schemas live in `scripts/schemas/` and are enforced by `
|
|
29
|
+
Schemas live in `scripts/schemas/` and are enforced by `python3 scripts/validate_frontmatter.py`.
|
|
@@ -28,7 +28,7 @@ Every skill's YAML frontmatter MUST validate against `scripts/schemas/skill.sche
|
|
|
28
28
|
See [`agents/docs/frontmatter-contract.md`](../../../agents/docs/frontmatter-contract.md)
|
|
29
29
|
for the human-readable contract across all artefact types. Violations are
|
|
30
30
|
reported by `scripts/skill_linter.py` as `schema_<rule>` errors and fail
|
|
31
|
-
`
|
|
31
|
+
`python3 scripts/validate_frontmatter.py` and the full CI pipeline.
|
|
32
32
|
|
|
33
33
|
## Description Triggering
|
|
34
34
|
|
|
@@ -16,6 +16,7 @@ source: package
|
|
|
16
16
|
- If requirements are unclear, ask a precise clarification question instead of making hidden assumptions
|
|
17
17
|
- Refactors must preserve behavior, validation, examples, and anti-failure guidance unless there is an explicit reason to change them
|
|
18
18
|
- Do NOT modify code you do not fully understand — read it first, trace the flow, then change it
|
|
19
|
+
- Multiple valid frameworks/patterns already in the codebase (Tailwind + Flux, multiple form libs, competing state stores) → do NOT pick one silently, ask. See [`no blind implementation`](../guidelines/agent-infra/agent-interaction-and-decision-quality.md#2-no-blind-implementation)
|
|
19
20
|
|
|
20
21
|
## The Developer Workflow
|
|
21
22
|
|
|
@@ -25,30 +25,76 @@ The user should be able to reply with just a number (e.g., `1`) instead of typin
|
|
|
25
25
|
- **Every question with choices** must use numbered options — no exceptions.
|
|
26
26
|
- **Keep options short** — one line each, with a brief explanation after the dash.
|
|
27
27
|
- **Always include a "skip" or "no change" option** when applicable.
|
|
28
|
-
- **
|
|
28
|
+
- **Always state a recommendation** — see iron law below.
|
|
29
29
|
- **Use the user's language** for the question and options.
|
|
30
30
|
- **Accept both** the number and a natural language answer (e.g., "1" or "the first one").
|
|
31
31
|
|
|
32
|
+
### Iron Law — ALWAYS recommend
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
EVERY numbered-option question MUST state which option the agent recommends and WHY.
|
|
36
|
+
"Egal, was bevorzugst Du?" / "no preference" is NEVER an acceptable agent stance.
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The user is asking the agent because the agent has read the code, the
|
|
40
|
+
contracts, the trade-offs. Refusing to take a position dumps that work
|
|
41
|
+
back on the user. Take the position; be wrong out loud if needed.
|
|
42
|
+
|
|
43
|
+
**Format:**
|
|
44
|
+
|
|
45
|
+
- Mark the recommended option inline: `1. Do X — short explanation (recommended)`.
|
|
46
|
+
- After the option block, state **WHY** in 1–3 sentences: the trade-off
|
|
47
|
+
that tips the balance, plus the **caveat** that would flip it.
|
|
48
|
+
- If the agent genuinely cannot pick (rare — true 50/50 with missing
|
|
49
|
+
data), say what data would break the tie and ask for that instead.
|
|
50
|
+
|
|
51
|
+
**Example:**
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
> 1. Hybrid contract — keys + query (recommended)
|
|
55
|
+
> 2. Key-based — extend the package
|
|
56
|
+
> 3. Semantic — change all call sites
|
|
57
|
+
|
|
58
|
+
I recommend 1: solves the acute consult-flow without a cross-repo PR,
|
|
59
|
+
and the file-fallback stays trivial. Caveat — if hit-rate on the
|
|
60
|
+
concat-shim turns out poor in practice, escalate to 2.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**What does NOT count as a recommendation:**
|
|
64
|
+
|
|
65
|
+
- "Both work" / "either is fine" / "depends on what you prefer"
|
|
66
|
+
- Listing pros and cons without picking
|
|
67
|
+
- "I'd lean towards X" without a reason
|
|
68
|
+
- Hiding behind "you know the project better" (the agent just researched it)
|
|
69
|
+
|
|
32
70
|
### Examples
|
|
33
71
|
|
|
34
|
-
**Binary choice:**
|
|
72
|
+
**Binary choice (with recommendation):**
|
|
35
73
|
```
|
|
36
|
-
> 1. Interactive — ask before each comment
|
|
74
|
+
> 1. Interactive — ask before each comment (recommended)
|
|
37
75
|
> 2. Automatic — handle all independently
|
|
76
|
+
|
|
77
|
+
I recommend 1: the comments touch security-sensitive code, so a wrong
|
|
78
|
+
auto-fix is more expensive than the friction of approving each one.
|
|
79
|
+
Switch to 2 if the comments turn out to be pure formatting.
|
|
38
80
|
```
|
|
39
81
|
|
|
40
|
-
**Multiple choice with skip:**
|
|
82
|
+
**Multiple choice with skip (with recommendation):**
|
|
41
83
|
```
|
|
42
|
-
> 1. Fix the code
|
|
84
|
+
> 1. Fix the code (recommended)
|
|
43
85
|
> 2. Fix the test
|
|
44
86
|
> 3. Skip
|
|
87
|
+
|
|
88
|
+
I recommend 1: the test is asserting the documented behavior; the
|
|
89
|
+
production code drifted from the contract. Pick 2 only if the contract
|
|
90
|
+
itself is wrong.
|
|
45
91
|
```
|
|
46
92
|
|
|
47
|
-
**Confirmation with context:**
|
|
93
|
+
**Confirmation with context (recommendation implicit in framing):**
|
|
48
94
|
```
|
|
49
95
|
> Found PR #1399 on branch `chore/refactor-agent-setup-2`.
|
|
50
96
|
>
|
|
51
|
-
> 1. Yes, that's the right PR
|
|
97
|
+
> 1. Yes, that's the right PR (recommended — branch matches)
|
|
52
98
|
> 2. No, different PR — I'll provide the URL
|
|
53
99
|
```
|
|
54
100
|
|
|
@@ -19,6 +19,12 @@ Percentage = done / (done + open). Deferred and cancelled do not count towards
|
|
|
19
19
|
Invocation (from project root):
|
|
20
20
|
python3 .augment/scripts/update_roadmap_progress.py # rewrite
|
|
21
21
|
python3 .augment/scripts/update_roadmap_progress.py --check # CI: exit 1 if stale
|
|
22
|
+
|
|
23
|
+
`--check` mode also fails when a roadmap reaches `count_open == 0` but is
|
|
24
|
+
still under `agents/roadmaps/` instead of `agents/roadmaps/archive/` —
|
|
25
|
+
backstopping the `roadmap-progress-sync` rule's "completion = archival,
|
|
26
|
+
same response" requirement. The write path emits the same finding as a
|
|
27
|
+
warning on stderr and still regenerates the dashboard.
|
|
22
28
|
"""
|
|
23
29
|
|
|
24
30
|
from __future__ import annotations
|
|
@@ -30,9 +36,21 @@ from dataclasses import dataclass, field
|
|
|
30
36
|
from pathlib import Path
|
|
31
37
|
|
|
32
38
|
CHECKBOX_RE = re.compile(r"^\s*[-*]\s+\[([ xX~\-])\]\s", re.MULTILINE)
|
|
33
|
-
# H2 or H3 heading starting with "Phase <
|
|
34
|
-
# hyphen, or whitespace) and name are optional.
|
|
35
|
-
|
|
39
|
+
# H2 or H3 heading starting with "Phase <id>"; separator (colon, em-dash,
|
|
40
|
+
# hyphen, or whitespace) and name are optional. The id supports three
|
|
41
|
+
# project-level conventions:
|
|
42
|
+
# - numeric `Phase 0`, `Phase 10`
|
|
43
|
+
# - roman I..XXXIX `Phase I`, `Phase III`
|
|
44
|
+
# - letter track `Phase A`, `Phase B1` (single uppercase letter,
|
|
45
|
+
# optional trailing digits for sub-track IDs)
|
|
46
|
+
# Roman is capped at [IVX]+ (up to XXXIX) on purpose: the broader
|
|
47
|
+
# [IVXLCDM]+ would also match all-caps words like `Phase LIVE`. Letter
|
|
48
|
+
# is [A-Z] not [A-Za-z] so `## Phase overview` stays a non-phase anchor.
|
|
49
|
+
PHASE_RE = re.compile(
|
|
50
|
+
r"^(#{2,3})\s+Phase\s+(\d+|[IVX]+|[A-Z](?:\d+)?)"
|
|
51
|
+
r"(?:[\s:\u2014\-]+(.*?))?\s*$",
|
|
52
|
+
re.MULTILINE,
|
|
53
|
+
)
|
|
36
54
|
TITLE_RE = re.compile(r"^#\s+(?:Roadmap:\s*)?(.+?)\s*$", re.MULTILINE)
|
|
37
55
|
EXCLUDE_NAMES = {"template.md", "README.md", "progress.md", "roadmaps-progress.md"}
|
|
38
56
|
EXCLUDE_PREFIXES = ("open-questions",)
|
|
@@ -41,7 +59,10 @@ EXCLUDE_DIRS = {"archive", "skipped"}
|
|
|
41
59
|
|
|
42
60
|
@dataclass
|
|
43
61
|
class PhaseStats:
|
|
44
|
-
|
|
62
|
+
# Phase identifier as it appears in the heading: numeric ("0"),
|
|
63
|
+
# roman ("III"), or letter-track ("A", "B1"). Kept as a string so
|
|
64
|
+
# non-numeric conventions survive round-tripping through render().
|
|
65
|
+
id: str
|
|
45
66
|
name: str
|
|
46
67
|
done: int = 0
|
|
47
68
|
open_: int = 0
|
|
@@ -139,9 +160,9 @@ def parse_roadmap(path: Path, roadmap_root: Path) -> RoadmapStats | None:
|
|
|
139
160
|
start = pm.end()
|
|
140
161
|
end = phase_matches[i + 1].start() if i + 1 < len(phase_matches) else len(text)
|
|
141
162
|
d, o, df, c = count_checkboxes(text[start:end])
|
|
142
|
-
|
|
143
|
-
name = (pm.group(3) or "").strip() or f"Phase {
|
|
144
|
-
stats.phases.append(PhaseStats(
|
|
163
|
+
phase_id = pm.group(2)
|
|
164
|
+
name = (pm.group(3) or "").strip() or f"Phase {phase_id}"
|
|
165
|
+
stats.phases.append(PhaseStats(phase_id, name, d, o, df, c))
|
|
145
166
|
return stats
|
|
146
167
|
|
|
147
168
|
|
|
@@ -161,6 +182,15 @@ def collect(roadmap_root: Path) -> list[RoadmapStats]:
|
|
|
161
182
|
return results
|
|
162
183
|
|
|
163
184
|
|
|
185
|
+
def unarchived_complete(roadmaps: list[RoadmapStats]) -> list[RoadmapStats]:
|
|
186
|
+
# A roadmap is complete when every active checkbox is done and at least
|
|
187
|
+
# one active checkbox exists. The `roadmap-progress-sync` rule mandates
|
|
188
|
+
# that such a roadmap be moved to `agents/roadmaps/archive/` in the
|
|
189
|
+
# same response that closes its last open item; `collect()` already
|
|
190
|
+
# excludes that directory, so anything left here is unarchived.
|
|
191
|
+
return [r for r in roadmaps if r.total_active > 0 and r.open_ == 0]
|
|
192
|
+
|
|
193
|
+
|
|
164
194
|
def render(roadmaps: list[RoadmapStats]) -> str:
|
|
165
195
|
total_done = sum(r.done for r in roadmaps)
|
|
166
196
|
total_active = sum(r.total_active for r in roadmaps)
|
|
@@ -201,7 +231,7 @@ def render(roadmaps: list[RoadmapStats]) -> str:
|
|
|
201
231
|
lines.append("|---|---|---|---:|---:|---:|---:|---:|")
|
|
202
232
|
for p in r.phases:
|
|
203
233
|
lines.append(
|
|
204
|
-
f"| {p.
|
|
234
|
+
f"| {p.id} | {p.name} | {p.state} | {p.done} | {p.open_} | "
|
|
205
235
|
f"{p.deferred} | {p.cancelled} | {p.percent}% |"
|
|
206
236
|
)
|
|
207
237
|
lines.append("")
|
|
@@ -226,10 +256,22 @@ def main() -> int:
|
|
|
226
256
|
roadmaps = collect(roadmap_root)
|
|
227
257
|
new_text = render(roadmaps)
|
|
228
258
|
current = target.read_text(encoding="utf-8") if target.exists() else ""
|
|
259
|
+
complete = unarchived_complete(roadmaps)
|
|
229
260
|
if args.check:
|
|
230
|
-
|
|
261
|
+
stale = current != new_text
|
|
262
|
+
if stale:
|
|
231
263
|
print(f"❌ {target.relative_to(args.repo_root)} is stale. "
|
|
232
|
-
f"Run `
|
|
264
|
+
f"Run `python3 .augment/scripts/update_roadmap_progress.py` "
|
|
265
|
+
f"to regenerate (or `task roadmap-progress` in Taskfile "
|
|
266
|
+
f"projects).", file=sys.stderr)
|
|
267
|
+
if complete:
|
|
268
|
+
print("❌ Completed roadmaps are still in `agents/roadmaps/` — "
|
|
269
|
+
"move them to `agents/roadmaps/archive/` (per the "
|
|
270
|
+
"`roadmap-progress-sync` rule):", file=sys.stderr)
|
|
271
|
+
for r in complete:
|
|
272
|
+
print(f" - {r.rel} ({r.done}/{r.total_active} done)",
|
|
273
|
+
file=sys.stderr)
|
|
274
|
+
if stale or complete:
|
|
233
275
|
return 1
|
|
234
276
|
print(f"✅ {target.relative_to(args.repo_root)} is up to date.")
|
|
235
277
|
return 0
|
|
@@ -237,6 +279,11 @@ def main() -> int:
|
|
|
237
279
|
print(f"✅ Wrote {target.relative_to(args.repo_root)} · "
|
|
238
280
|
f"{len(roadmaps)} roadmap(s) · "
|
|
239
281
|
f"{sum(r.done for r in roadmaps)}/{sum(r.total_active for r in roadmaps)} steps done.")
|
|
282
|
+
if complete:
|
|
283
|
+
print("⚠️ Completed roadmaps not yet archived — move to "
|
|
284
|
+
"`agents/roadmaps/archive/`:", file=sys.stderr)
|
|
285
|
+
for r in complete:
|
|
286
|
+
print(f" - {r.rel}", file=sys.stderr)
|
|
240
287
|
return 0
|
|
241
288
|
|
|
242
289
|
|
|
@@ -56,7 +56,7 @@ Read `github.pr_reply_method` from `.agent-settings.yml`:
|
|
|
56
56
|
|
|
57
57
|
### 2. Bot icon prefix
|
|
58
58
|
|
|
59
|
-
Read `
|
|
59
|
+
Read `personal.pr_comment_bot_icon` from `.agent-settings.yml`:
|
|
60
60
|
- `true` → prefix reply body with `🤖 `.
|
|
61
61
|
- `false` or not set → no prefix.
|
|
62
62
|
|
|
@@ -102,10 +102,11 @@ multi-paragraph explanation, extract it into a skill and call it.
|
|
|
102
102
|
|
|
103
103
|
* Run `python3 scripts/skill_linter.py .agent-src.uncompressed/commands/{name}.md`
|
|
104
104
|
→ 0 FAIL.
|
|
105
|
-
* Run `
|
|
106
|
-
* Run `
|
|
105
|
+
* Run `bash scripts/compress.sh --sync` → regenerates `.agent-src/commands/{name}.md`.
|
|
106
|
+
* Run `python3 scripts/compress.py --generate-tools` → creates the Claude symlink at
|
|
107
107
|
`.claude/skills/{name}/SKILL.md`.
|
|
108
|
-
* Run
|
|
108
|
+
* Run the full CI pipeline locally — each script directly — must exit 0
|
|
109
|
+
except for tolerated warnings.
|
|
109
110
|
|
|
110
111
|
## Output format
|
|
111
112
|
|
|
@@ -50,7 +50,7 @@ At the start of a conversation (or on first file edit), read `.agent-settings.ym
|
|
|
50
50
|
cat .agent-settings.yml 2>/dev/null
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
- If the file doesn't exist → **do not open files**. Suggest running `/
|
|
53
|
+
- If the file doesn't exist → **do not open files**. Suggest running `scripts/install` (then `/onboard`).
|
|
54
54
|
- If `personal.open_edited_files: false` → do nothing.
|
|
55
55
|
- If `personal.open_edited_files: true` and `personal.ide` is set → open files after edits.
|
|
56
56
|
|
|
@@ -124,6 +124,6 @@ code app/Models/User.php
|
|
|
124
124
|
## Do NOT
|
|
125
125
|
|
|
126
126
|
- Do NOT open files without checking `.agent-settings.yml` first.
|
|
127
|
-
- Do NOT prompt the user about IDE settings during normal work — suggest `/
|
|
127
|
+
- Do NOT prompt the user about IDE settings during normal work — suggest `/onboard` (for first-run) or editing `.agent-settings.yml` directly.
|
|
128
128
|
- Do NOT open files that were only read, not edited.
|
|
129
129
|
- Do NOT open more than 10 files at once — summarize instead.
|
|
@@ -107,16 +107,17 @@ Above the split signal, break by sub-topic into sibling files in the same folder
|
|
|
107
107
|
|
|
108
108
|
* Run `python3 scripts/skill_linter.py .agent-src.uncompressed/guidelines/{topic}/{name}.md`
|
|
109
109
|
→ 0 FAIL (guidelines have relaxed linting but must still parse).
|
|
110
|
-
* Run `
|
|
110
|
+
* Run `bash scripts/compress.sh --sync` → regenerates `.agent-src/guidelines/`.
|
|
111
111
|
* Run `python3 scripts/check_references.py` → no broken links.
|
|
112
|
-
* Run
|
|
112
|
+
* Run the full CI pipeline locally — each script directly — must exit 0
|
|
113
|
+
except for tolerated warnings.
|
|
113
114
|
|
|
114
115
|
## Output format
|
|
115
116
|
|
|
116
117
|
1. Complete guideline at `.agent-src.uncompressed/guidelines/{topic}/{name}.md`
|
|
117
118
|
2. At least one skill or rule linking to it
|
|
118
119
|
3. Linter + `check_references.py` clean
|
|
119
|
-
4. `
|
|
120
|
+
4. `bash scripts/compress.sh --sync` confirmation
|
|
120
121
|
|
|
121
122
|
## Gotchas
|
|
122
123
|
|
|
@@ -169,8 +169,8 @@ Mandatory fields the draft MUST fill:
|
|
|
169
169
|
* `Success signal` (§7) — one metric, one baseline, one target, one
|
|
170
170
|
evaluation date
|
|
171
171
|
|
|
172
|
-
Run `python3 scripts/check_proposal.py agents/proposals/<id>.md`
|
|
173
|
-
|
|
172
|
+
Run `python3 scripts/check_proposal.py agents/proposals/<id>.md` before
|
|
173
|
+
handing to `upstream-contribute`. The
|
|
174
174
|
script is a hard gate: non-zero exit = the proposal does not move
|
|
175
175
|
to stage `gated`.
|
|
176
176
|
|
|
@@ -23,7 +23,7 @@ execution:
|
|
|
23
23
|
- Investigate reported linter failure
|
|
24
24
|
|
|
25
25
|
NOT: single file (call `skill_linter.py <path>`), cross-refs (use `check-refs`),
|
|
26
|
-
compression freshness (use `
|
|
26
|
+
compression freshness (use `bash scripts/compress.sh --check`).
|
|
27
27
|
|
|
28
28
|
## Procedure
|
|
29
29
|
|
|
@@ -23,8 +23,8 @@ Do NOT use when:
|
|
|
23
23
|
|
|
24
24
|
`agents/roadmaps-progress.md` is auto-generated and must reflect the
|
|
25
25
|
live state in real time. After **any** checkbox edit (`[x]`, `[~]`,
|
|
26
|
-
`[-]`, `[ ]`) or phase add/rename/remove in a roadmap file,
|
|
27
|
-
|
|
26
|
+
`[-]`, `[ ]`) or phase add/rename/remove in a roadmap file, regenerate
|
|
27
|
+
the dashboard **in the same response**.
|
|
28
28
|
|
|
29
29
|
**Completion = archival.** If an edit takes a roadmap to
|
|
30
30
|
`count_open == 0` (pure `[x]`, or `[x]` + `[~]`/`[-]`), `git mv`
|
|
@@ -34,14 +34,14 @@ below. A 100%-complete roadmap left in `agents/roadmaps/` makes
|
|
|
34
34
|
the next reader think work is still open.
|
|
35
35
|
|
|
36
36
|
Enforced by [`roadmap-progress-sync`](../../rules/roadmap-progress-sync.md).
|
|
37
|
-
Batching edits in one response is fine — one final
|
|
38
|
-
|
|
37
|
+
Batching edits in one response is fine — one final regeneration before
|
|
38
|
+
replying is enough. But the response must not end without it.
|
|
39
39
|
|
|
40
40
|
## Procedure: Manage a roadmap
|
|
41
41
|
|
|
42
42
|
1. **Identify need** — Is this a multi-step change that spans sessions or agents?
|
|
43
43
|
2. **Create or locate** — Create new roadmap in `agents/roadmaps/` or find existing one.
|
|
44
|
-
3. **Update progress** — Mark completed steps with `[x]`, add notes for blockers, then
|
|
44
|
+
3. **Update progress** — Mark completed steps with `[x]`, add notes for blockers, then regenerate the dashboard in the same response (enforced by `roadmap-progress-sync`).
|
|
45
45
|
4. **Verify** — Confirm all steps reflect current state, no stale information.
|
|
46
46
|
|
|
47
47
|
A roadmap is a structured `.md` file in `agents/roadmaps/` that describes a multi-step change
|
|
@@ -139,7 +139,7 @@ Every roadmap implicitly includes these gates (run after each step that changes
|
|
|
139
139
|
2. Use the template structure from `.augment/templates/roadmaps.md`.
|
|
140
140
|
3. Review with the user iteratively until approved.
|
|
141
141
|
4. Save with a kebab-case filename (e.g. `optimize-webhook-jobs.md`).
|
|
142
|
-
5.
|
|
142
|
+
5. Regenerate the dashboard so the new roadmap is included.
|
|
143
143
|
|
|
144
144
|
### Executing a roadmap
|
|
145
145
|
|
|
@@ -147,7 +147,7 @@ Every roadmap implicitly includes these gates (run after each step that changes
|
|
|
147
147
|
2. Find the next unchecked step (`- [ ]`).
|
|
148
148
|
3. Summarize what needs to be done.
|
|
149
149
|
4. Ask the user before implementing (numbered options: implement / adjust / skip).
|
|
150
|
-
5. After implementation: mark `[x]`, run quality gates, then
|
|
150
|
+
5. After implementation: mark `[x]`, run quality gates, then regenerate the dashboard.
|
|
151
151
|
6. Move to the next step.
|
|
152
152
|
|
|
153
153
|
### Resuming a roadmap
|
|
@@ -228,7 +228,7 @@ After the last step of a roadmap is done, check completion status:
|
|
|
228
228
|
git mv agents/roadmaps/{file} agents/roadmaps/skipped/{file}
|
|
229
229
|
```
|
|
230
230
|
|
|
231
|
-
6. **Regenerate the dashboard
|
|
231
|
+
6. **Regenerate the dashboard** (see "Command" below). The moved roadmap is
|
|
232
232
|
excluded from the active set once it sits in `archive/` or `skipped/`.
|
|
233
233
|
|
|
234
234
|
### When to use `skipped/` vs `archive/`
|
|
@@ -262,10 +262,13 @@ is rewritten by `.augment/scripts/update_roadmap_progress.py`.
|
|
|
262
262
|
Command:
|
|
263
263
|
|
|
264
264
|
```bash
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
./agent-config roadmap:progress # rewrite the dashboard
|
|
266
|
+
./agent-config roadmap:progress-check # CI: fail if stale
|
|
267
267
|
```
|
|
268
268
|
|
|
269
|
+
The `./agent-config` wrapper is written into the project root by the
|
|
270
|
+
installer and always works — no global tooling or task runner required.
|
|
271
|
+
|
|
269
272
|
The dashboard is a **read-only snapshot**. Do not edit it by hand — regenerate it.
|
|
270
273
|
|
|
271
274
|
## Output format
|
|
@@ -38,43 +38,33 @@ rtk docker compose ps # compact container status
|
|
|
38
38
|
|
|
39
39
|
## Procedure: Wrap commands with rtk
|
|
40
40
|
|
|
41
|
-
1.
|
|
42
|
-
2. **If
|
|
43
|
-
3. **If
|
|
41
|
+
1. Read `personal.rtk_installed` from `.agent-settings.yml`.
|
|
42
|
+
2. **If `true`** → prefix commands with `rtk` when output >30 lines expected.
|
|
43
|
+
3. **If `false` or missing** → use plain commands. Do not prompt the user.
|
|
44
44
|
4. After wrapping: verify output is useful (not truncated on completeness-critical commands).
|
|
45
45
|
|
|
46
|
+
Installation and one-time setup are owned by
|
|
47
|
+
[`/onboard`](../../commands/onboard.md). If the user asks to install rtk
|
|
48
|
+
outside onboarding, follow the Installation section below and set
|
|
49
|
+
`personal.rtk_installed: true` on success.
|
|
50
|
+
|
|
46
51
|
## Output format
|
|
47
52
|
|
|
48
53
|
1. Wrapped command with `rtk` prefix
|
|
49
54
|
2. Token savings estimate (if first use in conversation)
|
|
50
55
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
> 💡 **rtk** (Rust Token Killer) is not installed on your system.
|
|
64
|
-
> It reduces token consumption by 60-90% on common CLI commands.
|
|
65
|
-
>
|
|
66
|
-
> 1. Install via Homebrew — `brew install rtk` (recommended on macOS)
|
|
67
|
-
> 2. Install via Cargo — `cargo install rtk`
|
|
68
|
-
> 3. Skip for now — I'll ask again tomorrow
|
|
69
|
-
|
|
70
|
-
**On user response:**
|
|
71
|
-
- **1 or 2** → Run the chosen install command. After success:
|
|
72
|
-
1. `rtk --version` to verify installation.
|
|
73
|
-
2. `rtk init --global` to enable auto-rewrite hooks.
|
|
74
|
-
3. Apply **Post-Install Setup** (see below) — telemetry, tee, audit logging.
|
|
75
|
-
4. Generate project-local filters (see Post-Install Setup).
|
|
76
|
-
5. Save `personal.rtk_installed: true` in `.agent-settings.yml`.
|
|
77
|
-
- **3** → Save `personal.rtk_last_asked: YYYY-MM-DD` (today) in `.agent-settings.yml`. Use normal commands.
|
|
56
|
+
## Installation (on-demand)
|
|
57
|
+
|
|
58
|
+
Invoked by `/onboard` when rtk is not on `PATH`, or on explicit user
|
|
59
|
+
request. Never fire unsolicited.
|
|
60
|
+
|
|
61
|
+
1. Ask which installer to use (macOS → Homebrew; otherwise Cargo).
|
|
62
|
+
2. Run the installer. On success:
|
|
63
|
+
1. `rtk --version` to verify.
|
|
64
|
+
2. `rtk init --global` to enable auto-rewrite hooks.
|
|
65
|
+
3. Apply **Post-Install Setup** below (telemetry, tee, audit logging).
|
|
66
|
+
4. Generate project-local filters (see Post-Install Setup).
|
|
67
|
+
5. Write `personal.rtk_installed: true` to `.agent-settings.yml`.
|
|
78
68
|
|
|
79
69
|
## Post-Install Setup (mandatory)
|
|
80
70
|
|
|
@@ -98,9 +98,9 @@ the PR or split by responsibility.
|
|
|
98
98
|
|
|
99
99
|
* Run `python3 scripts/skill_linter.py .agent-src.uncompressed/rules/{name}.md`
|
|
100
100
|
→ must report **0 FAIL**.
|
|
101
|
-
* Run `
|
|
102
|
-
* Run `
|
|
103
|
-
* Run
|
|
101
|
+
* Run `bash scripts/compress.sh --sync` to regenerate `.agent-src/rules/{name}.md`.
|
|
102
|
+
* Run `python3 scripts/compress.py --generate-tools` to project into `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules`.
|
|
103
|
+
* Run the full CI pipeline locally — each script directly — must exit 0 except for tolerated warnings.
|
|
104
104
|
|
|
105
105
|
## Frontmatter shape
|
|
106
106
|
|
|
@@ -118,7 +118,7 @@ source: package # or project for consumer-local rules
|
|
|
118
118
|
1. Complete rule file at `.agent-src.uncompressed/rules/{name}.md`
|
|
119
119
|
2. Frontmatter fully populated, no placeholders left
|
|
120
120
|
3. Linter output showing 0 FAIL
|
|
121
|
-
4. Confirmation that `
|
|
121
|
+
4. Confirmation that `bash scripts/compress.sh --sync` + `python3 scripts/compress.py --generate-tools` ran clean
|
|
122
122
|
|
|
123
123
|
## Gotchas
|
|
124
124
|
|
|
@@ -126,7 +126,7 @@ source: package # or project for consumer-local rules
|
|
|
126
126
|
* Defaulting to `always` "just in case" — token cost is real, `auto` is default.
|
|
127
127
|
* Description like "Rule about X" — it must describe *when*, not *what*.
|
|
128
128
|
* Pasting a workflow into a rule — if it has numbered steps, split into a skill.
|
|
129
|
-
* Forgetting to run `
|
|
129
|
+
* Forgetting to run `python3 scripts/compress.py --generate-tools` — downstream tools stay stale.
|
|
130
130
|
* Editing `.agent-src/rules/` or `.augment/rules/` directly — those are generated.
|
|
131
131
|
|
|
132
132
|
## Do NOT
|
|
@@ -171,14 +171,6 @@ The project uses **devbox** for tool management:
|
|
|
171
171
|
}
|
|
172
172
|
```
|
|
173
173
|
|
|
174
|
-
### Taskfile commands
|
|
175
|
-
|
|
176
|
-
```bash
|
|
177
|
-
task versions # Show awscli, Terraform, Terragrunt versions
|
|
178
|
-
task check:awscli # Verify AWS CLI is configured
|
|
179
|
-
task cache:clear # Clear .terraform and .terragrunt-cache dirs
|
|
180
|
-
```
|
|
181
|
-
|
|
182
174
|
### Quick commands (devbox scripts)
|
|
183
175
|
|
|
184
176
|
```bash
|
|
@@ -165,10 +165,11 @@ The files must:
|
|
|
165
165
|
### 6. Run quality gates (if working in the package repo)
|
|
166
166
|
|
|
167
167
|
```bash
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
python3 scripts/skill_linter.py --all # 0 FAIL required
|
|
169
|
+
python3 scripts/check_compression.py # No errors for this file
|
|
170
|
+
python3 scripts/compress.py --generate-tools # Regenerate symlinks
|
|
171
|
+
bash scripts/compress.sh --check # .agent-src/ in sync with source
|
|
172
|
+
bash scripts/compress.sh --check-hashes # All hashes match
|
|
172
173
|
```
|
|
173
174
|
|
|
174
175
|
If not in the package repo, note that these checks will run in CI after the PR is created.
|