@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.
Files changed (85) hide show
  1. package/.agent-src/commands/agent-handoff.md +15 -0
  2. package/.agent-src/commands/chat-history-clear.md +98 -0
  3. package/.agent-src/commands/chat-history-resume.md +178 -0
  4. package/.agent-src/commands/chat-history.md +102 -0
  5. package/.agent-src/commands/compress.md +9 -9
  6. package/.agent-src/commands/copilot-agents-init.md +1 -1
  7. package/.agent-src/commands/fix-portability.md +2 -2
  8. package/.agent-src/commands/fix-pr-bot-comments.md +1 -1
  9. package/.agent-src/commands/fix-pr-developer-comments.md +1 -1
  10. package/.agent-src/commands/fix-references.md +2 -2
  11. package/.agent-src/commands/mode.md +5 -5
  12. package/.agent-src/commands/onboard.md +171 -0
  13. package/.agent-src/commands/roadmap-create.md +7 -2
  14. package/.agent-src/commands/roadmap-execute.md +2 -2
  15. package/.agent-src/commands/set-cost-profile.md +101 -0
  16. package/.agent-src/commands/sync-agent-settings.md +122 -0
  17. package/.agent-src/commands/sync-gitignore.md +104 -0
  18. package/.agent-src/commands/tests-execute.md +6 -6
  19. package/.agent-src/commands/upstream-contribute.md +5 -4
  20. package/.agent-src/contexts/augment-infrastructure.md +2 -2
  21. package/.agent-src/contexts/override-system.md +1 -1
  22. package/.agent-src/contexts/subagent-configuration.md +3 -3
  23. package/.agent-src/guidelines/agent-infra/layered-settings.md +48 -5
  24. package/.agent-src/rules/ask-when-uncertain.md +56 -3
  25. package/.agent-src/rules/augment-portability.md +52 -1
  26. package/.agent-src/rules/augment-source-of-truth.md +10 -10
  27. package/.agent-src/rules/chat-history.md +171 -0
  28. package/.agent-src/rules/docker-commands.md +5 -7
  29. package/.agent-src/rules/docs-sync.md +13 -9
  30. package/.agent-src/rules/improve-before-implement.md +2 -0
  31. package/.agent-src/rules/onboarding-gate.md +94 -0
  32. package/.agent-src/rules/package-ci-checks.md +6 -5
  33. package/.agent-src/rules/roadmap-progress-sync.md +24 -13
  34. package/.agent-src/rules/size-enforcement.md +1 -1
  35. package/.agent-src/rules/skill-quality.md +1 -1
  36. package/.agent-src/rules/think-before-action.md +1 -0
  37. package/.agent-src/rules/user-interaction.md +53 -7
  38. package/.agent-src/scripts/update_roadmap_progress.py +57 -10
  39. package/.agent-src/skills/check-refs/SKILL.md +1 -1
  40. package/.agent-src/skills/command-routing/SKILL.md +1 -1
  41. package/.agent-src/skills/command-writing/SKILL.md +4 -3
  42. package/.agent-src/skills/file-editor/SKILL.md +2 -2
  43. package/.agent-src/skills/guideline-writing/SKILL.md +4 -3
  44. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
  45. package/.agent-src/skills/lint-skills/SKILL.md +1 -1
  46. package/.agent-src/skills/roadmap-management/SKILL.md +13 -10
  47. package/.agent-src/skills/rtk-output-filtering/SKILL.md +20 -30
  48. package/.agent-src/skills/rule-writing/SKILL.md +5 -5
  49. package/.agent-src/skills/terragrunt/SKILL.md +0 -8
  50. package/.agent-src/skills/upstream-contribute/SKILL.md +5 -4
  51. package/.agent-src/templates/agent-settings.md +86 -34
  52. package/.agent-src/templates/github-workflows/roadmap-progress-check.yml +63 -0
  53. package/.agent-src/templates/hooks/pre-commit-roadmap-progress +60 -0
  54. package/.agent-src/templates/scripts/memory_lookup.py +382 -21
  55. package/.agent-src/templates/scripts/memory_status.py +110 -9
  56. package/.claude-plugin/marketplace.json +1 -1
  57. package/AGENTS.md +2 -2
  58. package/CHANGELOG.md +320 -0
  59. package/CONTRIBUTING.md +89 -40
  60. package/README.md +24 -3
  61. package/composer.json +5 -1
  62. package/config/agent-settings.template.yml +45 -6
  63. package/config/gitignore-block.txt +24 -0
  64. package/config/profiles/balanced.ini +5 -0
  65. package/config/profiles/full.ini +5 -0
  66. package/config/profiles/minimal.ini +5 -0
  67. package/docs/customization.md +30 -4
  68. package/docs/getting-started.md +53 -3
  69. package/docs/mcp.md +15 -4
  70. package/package.json +21 -2
  71. package/scripts/agent-config +230 -0
  72. package/scripts/chat_history.py +519 -0
  73. package/scripts/check_portability.py +151 -1
  74. package/scripts/install.py +55 -3
  75. package/scripts/install.sh +50 -21
  76. package/scripts/mcp_render.py +30 -16
  77. package/scripts/memory_lookup.py +143 -7
  78. package/scripts/memory_status.py +76 -14
  79. package/scripts/postinstall.sh +16 -0
  80. package/scripts/release.py +588 -0
  81. package/scripts/sync_agent_settings.py +211 -0
  82. package/scripts/sync_gitignore.py +226 -0
  83. package/templates/agent-config-wrapper.sh +47 -0
  84. package/.agent-src/commands/config-agent-settings.md +0 -126
  85. 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 run task roadmap-progress in the SAME response; a roadmap that hits 0 open items must also be archived in the SAME response"
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 run `task roadmap-progress` **in the same response** — not
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 `[ ]` | `task roadmap-progress` |
32
- | Add, rename, or remove a phase | `task roadmap-progress` |
33
- | Create a new roadmap file | `task roadmap-progress` |
34
- | **Last `[ ]` flips** — roadmap reaches `count_open == 0` | `git mv` → `archive/` (or `skipped/`) **then** `task roadmap-progress` |
35
- | Move roadmap between `roadmaps/` ↔ `archive/` ↔ `skipped/` | `task roadmap-progress` |
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
- `task roadmap-progress` call at the end is enough. If one closes a
39
- roadmap, archive it first, then run the single regen. But the
40
- response must not end without it.
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 just a skill tip
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 → `task roadmap-progress` — same response".
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 `task ci` / `task roadmap-progress-check` as first line of defence — CI is last-line, not real-time.
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 `task validate-schema`.
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
- `task validate-schema` / `task ci`.
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
- - **Default/recommended option** can be marked: `1. Do X (recommended)`.
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 <number>"; separator (colon, em-dash,
34
- # hyphen, or whitespace) and name are optional.
35
- PHASE_RE = re.compile(r"^(#{2,3})\s+Phase\s+(\d+)(?:[\s:\u2014\-]+(.*?))?\s*$", re.MULTILINE)
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
- number: int
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
- number = int(pm.group(2))
143
- name = (pm.group(3) or "").strip() or f"Phase {number}"
144
- stats.phases.append(PhaseStats(number, name, d, o, df, c))
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.number} | {p.name} | {p.state} | {p.done} | {p.open_} | "
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
- if current != new_text:
261
+ stale = current != new_text
262
+ if stale:
231
263
  print(f"❌ {target.relative_to(args.repo_root)} is stale. "
232
- f"Run `task roadmap-progress` to regenerate.", file=sys.stderr)
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
 
@@ -22,7 +22,7 @@ execution:
22
22
  - CI `check-refs` job failed and target ref needs locating
23
23
 
24
24
  NOT: body-only edits, frontmatter shape (use `lint-skills`), compressed pairs
25
- (use `task sync-check`).
25
+ (use `bash scripts/compress.sh --check`).
26
26
 
27
27
  ## Procedure
28
28
 
@@ -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 `project.pr_comment_bot_icon` from `.agent-settings.yml`:
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 `task sync` → regenerates `.agent-src/commands/{name}.md`.
106
- * Run `task generate-tools` → creates the Claude symlink at
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 `task ci` exits 0 except for tolerated warnings.
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 `/config-agent-settings`.
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 `/config-agent-settings` instead.
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 `task sync` → regenerates `.agent-src/guidelines/`.
110
+ * Run `bash scripts/compress.sh --sync` → regenerates `.agent-src/guidelines/`.
111
111
  * Run `python3 scripts/check_references.py` → no broken links.
112
- * Run `task ci` exits 0 except for tolerated warnings.
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. `task sync` confirmation
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` (or
173
- `task check-proposal`) before handing to `upstream-contribute`. The
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 `task sync-check`).
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, run
27
- `task roadmap-progress` **in the same response**.
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 `task roadmap-progress`
38
- before replying is enough. But the response must not end without it.
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 run `task roadmap-progress` in the same response (enforced by `roadmap-progress-sync`).
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. Run `task roadmap-progress` so the dashboard includes the new roadmap.
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 `task roadmap-progress`.
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:** `task roadmap-progress`. The moved roadmap is
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
- task roadmap-progress # rewrite the dashboard
266
- task roadmap-progress-check # CI: fail if stale
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. Run `which rtk` (silent) — check if installed.
42
- 2. **If installed** → prefix commands with `rtk` when output >30 lines expected.
43
- 3. **If NOT installed** → check `.agent-settings.yml` for `personal.rtk_last_asked`. If not today prompt user (see Installation below).
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
- ## Detection & Installation
52
-
53
- **Before using CLI commands that produce verbose output**, check if rtk is available:
54
-
55
- 1. Run `which rtk` (silent, no output to user).
56
- 2. **If installed** prefix commands with `rtk` when output may exceed ~30 lines.
57
- 3. **If NOT installed** → check `.agent-settings.yml` for `personal.rtk_last_asked`:
58
- - If missing or date is **before today** → prompt the user (see below).
59
- - If date is **today** skip, don't ask again. Use normal commands.
60
-
61
- **Prompt template** (translate to user's language):
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 `task sync` to regenerate `.agent-src/rules/{name}.md`.
102
- * Run `task generate-tools` to project into `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules`.
103
- * Run `task ci` — must exit 0 except for tolerated warnings.
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 `task sync` + `task generate-tools` ran clean
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 `task generate-tools` — downstream tools stay stale.
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
- task lint-skills # 0 FAIL required
169
- task check-compression # No errors for this file
170
- task generate-tools # Regenerate symlinks
171
- task consistency # Everything in sync
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.