@event4u/agent-config 1.41.2 → 2.1.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/fix/{pr-bots.md → pr-bot-comments.md} +3 -3
- package/.agent-src/commands/fix/{pr.md → pr-comments.md} +6 -6
- package/.agent-src/commands/fix/{pr-developers.md → pr-developer-comments.md} +3 -3
- package/.agent-src/commands/fix.md +6 -6
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
- package/.agent-src/templates/agents/agent-project-settings.example.yml +14 -0
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +120 -11
- package/.claude-plugin/marketplace.json +4 -4
- package/CHANGELOG.md +54 -0
- package/README.md +39 -31
- package/config/agent-settings.template.yml +25 -0
- package/docs/architecture.md +47 -1
- package/docs/catalog.md +3 -3
- package/docs/contracts/command-clusters.md +3 -3
- package/docs/contracts/file-ownership-matrix.json +9 -9
- package/docs/customization.md +125 -9
- package/docs/getting-started.md +16 -25
- package/docs/installation.md +66 -82
- package/docs/migration/v1-to-v2.md +98 -0
- package/docs/migrations/commands-1.15.0.md +3 -3
- package/docs/setup/per-ide/claude-code.md +0 -17
- package/docs/setup/per-ide/claude-desktop.md +35 -48
- package/docs/setup/per-ide/windsurf.md +0 -11
- package/docs/skills-catalog.md +23 -2
- package/docs/troubleshooting.md +20 -32
- package/llms.txt +22 -1
- package/package.json +1 -6
- package/scripts/_cli/__init__.py +0 -0
- package/scripts/_cli/cmd_migrate.py +270 -0
- package/scripts/_cli/cmd_update.py +226 -0
- package/scripts/_lib/agent_settings.py +120 -11
- package/scripts/_lib/agents_overlay.py +109 -0
- package/scripts/_lib/pin_resolver.py +152 -0
- package/scripts/_lib/update_check.py +183 -0
- package/scripts/agent-config +73 -1
- package/scripts/check_overlay_cascade_subdirs.py +125 -0
- package/scripts/check_template_pin_drift.py +112 -0
- package/scripts/check_update_banner.py +86 -0
- package/scripts/install +27 -40
- package/scripts/install.py +17 -228
- package/scripts/install.sh +6 -11
- package/templates/agent-config-wrapper.sh +40 -25
- package/templates/consumer-settings/README.md +2 -2
- package/bin/install.php +0 -45
- package/composer.json +0 -33
- package/scripts/postinstall.sh +0 -76
- package/scripts/setup.sh +0 -230
- package/templates/global-install-manifest.yml +0 -91
|
@@ -11,7 +11,7 @@ stability: beta
|
|
|
11
11
|
The agent-config command surface collapses related atomic commands
|
|
12
12
|
into **verb clusters**. A cluster is a single top-level command
|
|
13
13
|
(e.g. `/fix`) that dispatches to sub-commands (e.g. `/fix ci`,
|
|
14
|
-
`/fix pr`). Old atomic commands stay one release as deprecation
|
|
14
|
+
`/fix pr-comments`). Old atomic commands stay one release as deprecation
|
|
15
15
|
shims, then disappear.
|
|
16
16
|
|
|
17
17
|
This file is the **locked source of truth** for which clusters
|
|
@@ -27,7 +27,7 @@ column 1 of this table.
|
|
|
27
27
|
|
|
28
28
|
| Cluster | Phase | Sub-commands | Replaces |
|
|
29
29
|
|---|:-:|---|---|
|
|
30
|
-
| `fix` | 1 | `ci` · `pr` · `pr-
|
|
30
|
+
| `fix` | 1 | `ci` · `pr-comments` · `pr-bot-comments` · `pr-developer-comments` · `portability` · `refs` · `seeder` | `fix-ci` · `fix-pr-comments` · `fix-pr-bot-comments` · `fix-pr-developer-comments` · `fix-portability` · `fix-references` · `fix-seeder` |
|
|
31
31
|
| `optimize` | 1 | `agents-dir` · `augmentignore` · `rtk` · `skills` | `optimize-augmentignore` · `optimize-rtk-filters` · `optimize-skills` · former `/optimize agents` and `/optimize agents-md` moved to the `/agents` file-family cluster 2026-05-09; `/agents prepare/audit/cleanup` collapsed into the single `/optimize agents-dir` (flags or wizard) per the agent-doc consolidation |
|
|
32
32
|
| `feature` | 1 | `explore` · `plan` · `refactor` · `roadmap` · `dev` | `feature-explore` · `feature-plan` · `feature-refactor` · `feature-roadmap` · `feature-dev` |
|
|
33
33
|
| `chat-history` | 2 | `show` · `import` · `learn` | `chat-history` (legacy status) — `resume` / `clear` / `checkpoint` removed in `road-to-chat-history-hook-only` (auto-adopt + structural hooks); `import` (verbatim cross-session render) and `learn` (project-improving learning extraction) added in the v4 stateless schema |
|
|
@@ -84,7 +84,7 @@ every new sub-command added to an existing cluster.
|
|
|
84
84
|
cluster's primary verb (e.g. `/roadmap:create` + `process-*`
|
|
85
85
|
composites).
|
|
86
86
|
|
|
87
|
-
3. **Sub-name format.** kebab-case (`pr-
|
|
87
|
+
3. **Sub-name format.** kebab-case (`pr-bot-comments`, `process-phase`),
|
|
88
88
|
≤ 24 chars, no leading verb that duplicates the cluster name
|
|
89
89
|
(use `/fix:ci`, not `/fix:fix-ci`).
|
|
90
90
|
|
|
@@ -261,19 +261,19 @@
|
|
|
261
261
|
"load_context": [],
|
|
262
262
|
"load_context_eager": []
|
|
263
263
|
},
|
|
264
|
-
".agent-src.uncompressed/commands/fix/pr-
|
|
264
|
+
".agent-src.uncompressed/commands/fix/pr-bot-comments.md": {
|
|
265
265
|
"kind": "command",
|
|
266
266
|
"rule_type": null,
|
|
267
267
|
"load_context": [],
|
|
268
268
|
"load_context_eager": []
|
|
269
269
|
},
|
|
270
|
-
".agent-src.uncompressed/commands/fix/pr-
|
|
270
|
+
".agent-src.uncompressed/commands/fix/pr-comments.md": {
|
|
271
271
|
"kind": "command",
|
|
272
272
|
"rule_type": null,
|
|
273
273
|
"load_context": [],
|
|
274
274
|
"load_context_eager": []
|
|
275
275
|
},
|
|
276
|
-
".agent-src.uncompressed/commands/fix/pr.md": {
|
|
276
|
+
".agent-src.uncompressed/commands/fix/pr-developer-comments.md": {
|
|
277
277
|
"kind": "command",
|
|
278
278
|
"rule_type": null,
|
|
279
279
|
"load_context": [],
|
|
@@ -3088,22 +3088,22 @@
|
|
|
3088
3088
|
"depth": 0
|
|
3089
3089
|
},
|
|
3090
3090
|
{
|
|
3091
|
-
"source": ".agent-src.uncompressed/commands/fix/pr-
|
|
3092
|
-
"target": ".agent-src.uncompressed/commands/fix/pr-
|
|
3091
|
+
"source": ".agent-src.uncompressed/commands/fix/pr-bot-comments.md",
|
|
3092
|
+
"target": ".agent-src.uncompressed/commands/fix/pr-bot-comments.md",
|
|
3093
3093
|
"type": "WRITE",
|
|
3094
3094
|
"via": "self",
|
|
3095
3095
|
"depth": 0
|
|
3096
3096
|
},
|
|
3097
3097
|
{
|
|
3098
|
-
"source": ".agent-src.uncompressed/commands/fix/pr-
|
|
3099
|
-
"target": ".agent-src.uncompressed/commands/fix/pr-
|
|
3098
|
+
"source": ".agent-src.uncompressed/commands/fix/pr-comments.md",
|
|
3099
|
+
"target": ".agent-src.uncompressed/commands/fix/pr-comments.md",
|
|
3100
3100
|
"type": "WRITE",
|
|
3101
3101
|
"via": "self",
|
|
3102
3102
|
"depth": 0
|
|
3103
3103
|
},
|
|
3104
3104
|
{
|
|
3105
|
-
"source": ".agent-src.uncompressed/commands/fix/pr.md",
|
|
3106
|
-
"target": ".agent-src.uncompressed/commands/fix/pr.md",
|
|
3105
|
+
"source": ".agent-src.uncompressed/commands/fix/pr-developer-comments.md",
|
|
3106
|
+
"target": ".agent-src.uncompressed/commands/fix/pr-developer-comments.md",
|
|
3107
3107
|
"type": "WRITE",
|
|
3108
3108
|
"via": "self",
|
|
3109
3109
|
"depth": 0
|
package/docs/customization.md
CHANGED
|
@@ -67,30 +67,76 @@ personal.autonomy
|
|
|
67
67
|
caveman.speak_scope
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
**Merge order** (lowest → highest precedence):
|
|
70
|
+
**Merge order** (lowest → highest precedence; every layer optional):
|
|
71
71
|
|
|
72
72
|
```
|
|
73
73
|
1. Package defaults (shipped by event4u/agent-config)
|
|
74
74
|
2. ~/.config/agent-config/agent-settings.yml (user-global · whitelist-filtered)
|
|
75
|
-
3. <
|
|
75
|
+
3. <repo-root>/.agent-settings.yml (project-wide · all keys)
|
|
76
|
+
4. <intermediate-dir>/.agent-settings.yml (subsystem-scoped · all keys · optional)
|
|
77
|
+
5. <CWD>/.agent-settings.yml (deepest · all keys · wins)
|
|
76
78
|
```
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
`<repo-root>` is the nearest ancestor of the CWD that contains a `.git`
|
|
81
|
+
directory **or** file (submodule support). The walk stops there — it
|
|
82
|
+
never drifts into a parent repo or `$HOME`. Callers that omit the
|
|
83
|
+
``cwd`` argument get the legacy two-layer behaviour (user-global +
|
|
84
|
+
single project file) — back-compat is hard.
|
|
85
|
+
|
|
86
|
+
Project-local values **always win** over user-global. The user-global
|
|
87
|
+
file is a fallback, never a lock. Non-whitelisted keys in the
|
|
88
|
+
user-global file are dropped without error — adding `personal.theme`
|
|
89
|
+
there has no effect.
|
|
90
|
+
|
|
91
|
+
**Whitelist asymmetry.** The six-key whitelist applies **only** to the
|
|
92
|
+
user-global layer. Non-root in-project layers (intermediate +
|
|
93
|
+
``<CWD>``) carry arbitrary keys — they live inside the project
|
|
94
|
+
boundary, are tracked in git, and reviewed in PRs like any other
|
|
95
|
+
config. Use a subdirectory `.agent-settings.yml` to scope a single
|
|
96
|
+
field (e.g. a `cost_profile` override for `services/heavy-ml/`) without
|
|
97
|
+
duplicating the root file.
|
|
98
|
+
|
|
99
|
+
The user-global file is created **only on explicit opt-in via
|
|
100
|
+
`/onboard`**. The loader at
|
|
101
|
+
[`scripts/_lib/agent_settings.py`](../scripts/_lib/agent_settings.py)
|
|
85
102
|
is **read-only** — no script can create or mutate it without an
|
|
86
103
|
explicit `/onboard` confirmation. Edit the file by hand for mid-life
|
|
87
104
|
changes; `/sync-agent-settings` stays project-scoped and never touches
|
|
88
105
|
user-global state.
|
|
89
106
|
|
|
107
|
+
### Agent config version pin
|
|
108
|
+
|
|
109
|
+
The top-level `agent_config_version` key pins the project to an exact
|
|
110
|
+
release of `@event4u/agent-config`. Under the npx-only distribution
|
|
111
|
+
model (see [`docs/architecture.md`](architecture.md) §
|
|
112
|
+
*"npx-only distribution + version-pin governance"*), there is no
|
|
113
|
+
local `node_modules/` or `vendor/` lockfile to anchor the runtime —
|
|
114
|
+
the pin is the substitute mechanism.
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
agent_config_version: "2.0.3" # exact semver, no ranges
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Rules:
|
|
121
|
+
|
|
122
|
+
- **Exact semver only.** Ranges (`^2.0`, `~2.0.3`, `>=2.0`) are
|
|
123
|
+
rejected — the pin must be reproducible across the team.
|
|
124
|
+
- **Empty string = unpinned.** The resolver picks the latest release
|
|
125
|
+
on every invocation. Only safe for greenfield projects; production
|
|
126
|
+
consumers should pin.
|
|
127
|
+
- **Owned by the project, not the developer.** Lives in
|
|
128
|
+
`.agent-settings.yml` (committed), reviewed in PRs like any other
|
|
129
|
+
config change. Never merged from `~/.config/agent-config/agent-settings.yml`.
|
|
130
|
+
- **Resolver enforcement.** `npx @event4u/agent-config <cmd>`
|
|
131
|
+
compares the resolved CLI version against the pin; mismatch
|
|
132
|
+
triggers a re-exec at the pinned version
|
|
133
|
+
(`npx @event4u/agent-config@<pin> <cmd>`).
|
|
134
|
+
|
|
90
135
|
### Available settings
|
|
91
136
|
|
|
92
137
|
| Setting | Default | Description |
|
|
93
138
|
|---|---|---|
|
|
139
|
+
| `agent_config_version` | *(empty)* | Exact semver pin of the agent-config release (see above). Empty = unpinned. |
|
|
94
140
|
| `cost_profile` | `minimal` | Token budget (`minimal`, `balanced`, `full`, `custom`) |
|
|
95
141
|
| `personal.user_name` | *(empty)* | User's first name for personalized responses |
|
|
96
142
|
| `personal.minimal_output` | `true` | Suppress intermediate output |
|
|
@@ -254,6 +300,76 @@ agents/
|
|
|
254
300
|
|
|
255
301
|
Module-level documentation goes into `app/Modules/*/agents/`.
|
|
256
302
|
|
|
303
|
+
### `agents/` overlay cascade
|
|
304
|
+
|
|
305
|
+
A subset of `agents/` subdirs participates in the same deepest-wins
|
|
306
|
+
cascade as `.agent-settings.yml` (see *"User-global DX-comfort
|
|
307
|
+
defaults"* above). The cascade is **per-file** by basename — the
|
|
308
|
+
deepest existing `agents/<kind>/<name>.md` wins; the rest are silently
|
|
309
|
+
shadowed.
|
|
310
|
+
|
|
311
|
+
| Subdir | Cascade? | User-global allowed? | Why |
|
|
312
|
+
|---|---|---|---|
|
|
313
|
+
| `agents/overrides/` | ✅ Yes — deepest wins by basename. | ✅ Yes — weakest layer. | Personal developer overrides. |
|
|
314
|
+
| `agents/contexts/` | ✅ Yes — deepest wins by basename. | ❌ No — project-shaped. | Shared knowledge; would leak across projects. |
|
|
315
|
+
| `agents/decisions/` | ✅ Yes — deepest wins by basename. | ❌ No — project-shaped ADRs. | Decisions are repo-bound. |
|
|
316
|
+
| `agents/roadmaps/` | ❌ No — project-rooted only. | ❌ No. | Active delivery plans. |
|
|
317
|
+
| `agents/state/`, `agents/memory/`, `agents/work_engine/`, `agents/.agent-prices.md`, `agents/council-*/` | ❌ No — stateful / session-scoped. | ❌ No. | Per-session state, not shareable. |
|
|
318
|
+
|
|
319
|
+
**User-global asymmetry.** `~/.config/agent-config/agents/overrides/`
|
|
320
|
+
is the only user-global overlay path consulted by the loader. Files
|
|
321
|
+
under `~/.config/agent-config/agents/contexts/` or
|
|
322
|
+
`.../agents/decisions/` are silently skipped — these kinds are
|
|
323
|
+
project-shaped and must not leak across projects.
|
|
324
|
+
|
|
325
|
+
The resolver lives at
|
|
326
|
+
[`scripts/_lib/agents_overlay.py`](../scripts/_lib/agents_overlay.py)
|
|
327
|
+
and is enforced by `scripts/check_overlay_cascade_subdirs.py` — drift
|
|
328
|
+
between the code constants (`CASCADE_ELIGIBLE_KINDS`,
|
|
329
|
+
`USER_GLOBAL_OVERLAY_KINDS`) and the table above breaks the build.
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Update check
|
|
334
|
+
|
|
335
|
+
`npx @event4u/agent-config <cmd>` checks the npm registry once per
|
|
336
|
+
24 h for a newer release of the package and, when one is available,
|
|
337
|
+
writes a two-line banner to **stderr** *after* the subcommand has
|
|
338
|
+
finished. There is no prompt — the user updates when they want with
|
|
339
|
+
`npx @event4u/agent-config update` (Phase 3).
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
ℹ️ agent-config 1.42.0 available (you have 1.38.0).
|
|
343
|
+
Update: npx @event4u/agent-config update
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
State is persisted at `~/.config/agent-config/update-check.json`
|
|
347
|
+
(mode `0600`) — sibling of `anthropic.key`, `council-spend.jsonl`.
|
|
348
|
+
The fetch is hard-capped at 1 s and silent on any error.
|
|
349
|
+
|
|
350
|
+
### Suppression matrix
|
|
351
|
+
|
|
352
|
+
The banner is silently skipped when **any** of the following match:
|
|
353
|
+
|
|
354
|
+
| Condition | Reason |
|
|
355
|
+
|---|---|
|
|
356
|
+
| `CI=1` / `CI=true` / `GITHUB_ACTIONS=true` | CI noise, breaks log scrapers. |
|
|
357
|
+
| `stdout` is not a TTY | Piped / redirected output must stay clean. |
|
|
358
|
+
| `AGENT_CONFIG_NO_UPDATE_CHECK=1` | Per-invocation escape hatch. |
|
|
359
|
+
| `update_check.enabled: false` in `.agent-settings.yml` | Project / user opt-out. |
|
|
360
|
+
| Registry call exceeds 1 s | Network must never delay `npx`. |
|
|
361
|
+
| Registry call raises any exception | Best-effort — failure is silent. |
|
|
362
|
+
|
|
363
|
+
`update_check.enabled` is a **project-scoped** key — it is *not* on
|
|
364
|
+
the user-global whitelist (see [§ Agent Settings](#agent-settings)).
|
|
365
|
+
Each project decides; the user-global file cannot flip it on or off
|
|
366
|
+
for unrelated projects.
|
|
367
|
+
|
|
368
|
+
The decision logic lives at
|
|
369
|
+
[`scripts/_lib/update_check.py`](../scripts/_lib/update_check.py); the
|
|
370
|
+
dispatcher integration lives in [`scripts/agent-config`](../scripts/agent-config)
|
|
371
|
+
(`run_update_check_banner`).
|
|
372
|
+
|
|
257
373
|
---
|
|
258
374
|
|
|
259
375
|
← [Back to README](../README.md)
|
package/docs/getting-started.md
CHANGED
|
@@ -1,33 +1,23 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
3
|
`agent-config` is a stack-agnostic orchestration contract for coding
|
|
4
|
-
agents.
|
|
5
|
-
|
|
6
|
-
matches the project**, not the language you happen to prefer.
|
|
4
|
+
agents. Installation is npx-first; the package itself is npm-published
|
|
5
|
+
and works in any project regardless of language.
|
|
7
6
|
|
|
8
7
|
## Installation
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
`composer.json` and/or `package.json`, syncs the payload, and generates
|
|
12
|
-
the tool-specific glue. Pick one entrypoint:
|
|
9
|
+
Pick one entrypoint:
|
|
13
10
|
|
|
14
11
|
```bash
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# Mixed Composer + npm projects (Laravel + Inertia, Symfony + Vue, …)
|
|
26
|
-
# Run both — the orchestrator merges results, no double-write.
|
|
27
|
-
|
|
28
|
-
# Stack-less or polyglot repos (no Composer, no npm)
|
|
29
|
-
git clone https://github.com/event4u-app/agent-config /tmp/agent-config
|
|
30
|
-
bash /tmp/agent-config/scripts/install --target "$PWD"
|
|
12
|
+
# Recommended — one-shot, no local dependency
|
|
13
|
+
npx @event4u/create-agent-config init --tools=claude-code,cursor
|
|
14
|
+
|
|
15
|
+
# No-Node fallback — curl | bash entrypoint (downloads a tarball)
|
|
16
|
+
curl -sSL https://raw.githubusercontent.com/event4u-app/agent-config/main/setup.sh | bash
|
|
17
|
+
|
|
18
|
+
# Global CLI (one install per machine, all projects)
|
|
19
|
+
npm install -g @event4u/agent-config
|
|
20
|
+
agent-config --help
|
|
31
21
|
```
|
|
32
22
|
|
|
33
23
|
That's it. Your agent now follows your team's standards. The orchestrator
|
|
@@ -49,9 +39,10 @@ so you can run a few package scripts without installing `go-task`,
|
|
|
49
39
|
./agent-config help # full command list
|
|
50
40
|
```
|
|
51
41
|
|
|
52
|
-
The wrapper is regenerated on every
|
|
53
|
-
|
|
54
|
-
|
|
42
|
+
The wrapper is regenerated on every install and delegates to (in order):
|
|
43
|
+
`$AGENT_CONFIG_MASTER`, `./node_modules/@event4u/agent-config/`,
|
|
44
|
+
`agent-config` on `$PATH` (global npm install), or
|
|
45
|
+
`npx @event4u/agent-config@latest`.
|
|
55
46
|
|
|
56
47
|
## First Run
|
|
57
48
|
|
package/docs/installation.md
CHANGED
|
@@ -31,6 +31,41 @@ Combine surfaces by comma-separating: `--tools=claude-code,cursor,windsurf`.
|
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
+
## Upgrading from v1
|
|
35
|
+
|
|
36
|
+
v2 is a breaking change: the local-install scheme (Composer
|
|
37
|
+
`require-dev`, npm `devDependency`, the `--global` symlink namespace
|
|
38
|
+
under `~/.claude/`, `~/.cursor/`, `~/.codeium/windsurf/`,
|
|
39
|
+
`~/.config/agent-config/`) is **retired**. v2 is npx-only — the
|
|
40
|
+
runtime is resolved per invocation, pinned by
|
|
41
|
+
`agent_config_version` in `.agent-settings.yml`.
|
|
42
|
+
|
|
43
|
+
One command does the cutover, idempotently:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
./agent-config migrate # remove legacy install signals
|
|
47
|
+
./agent-config migrate --dry-run # detect only, no writes
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
What `migrate` cleans up:
|
|
51
|
+
|
|
52
|
+
| What | Action |
|
|
53
|
+
|---|---|
|
|
54
|
+
| `package.json` → `devDependencies.@event4u/agent-config` | Removed (lockfile updated on next `npm install`). |
|
|
55
|
+
| `composer.json` → `require*.event4u/agent-config` | Removed (lockfile updated on next `composer update`). |
|
|
56
|
+
| Symlinks `.augment/`, `.claude/`, `.cursor/`, `.clinerules/`, `.windsurfrules` pointing into `vendor/` or `node_modules/` | Deleted. User-owned links are preserved with a warning. |
|
|
57
|
+
| `.agent-settings.yml` | Written fresh if missing, with `agent_config_version` pinned. |
|
|
58
|
+
| `.gitignore` agent-config block | Refreshed. |
|
|
59
|
+
|
|
60
|
+
After `migrate` runs, you can drop the now-unreferenced
|
|
61
|
+
`node_modules/@event4u/agent-config/` and `vendor/event4u/agent-config/`
|
|
62
|
+
directories with `npm prune` and `composer update` respectively.
|
|
63
|
+
|
|
64
|
+
Full contract sketch + the retired `--global` namespace teardown:
|
|
65
|
+
[`docs/migration/v1-to-v2.md`](migration/v1-to-v2.md).
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
34
69
|
## Mechanisms reference
|
|
35
70
|
|
|
36
71
|
The rest of this page documents the underlying install mechanisms
|
|
@@ -46,9 +81,9 @@ the per-IDE index above.
|
|
|
46
81
|
> 2. `scripts/install.py` — bridge files (`.agent-settings.yml`, VSCode /
|
|
47
82
|
> Augment / Copilot JSON descriptors).
|
|
48
83
|
>
|
|
49
|
-
> `
|
|
50
|
-
> delegate to `scripts/install`. Both underlying
|
|
51
|
-
> directly for advanced use; see their `--help`.
|
|
84
|
+
> `npx @event4u/create-agent-config init` and `setup.sh` (curl-based)
|
|
85
|
+
> are thin wrappers that delegate to `scripts/install`. Both underlying
|
|
86
|
+
> stages remain callable directly for advanced use; see their `--help`.
|
|
52
87
|
>
|
|
53
88
|
> Python 3.10+ is required for bridges. If it is missing, the orchestrator
|
|
54
89
|
> prints a warning and continues with the payload sync only.
|
|
@@ -80,9 +115,9 @@ the per-IDE index above.
|
|
|
80
115
|
## Quickstart — one-liner entrypoints
|
|
81
116
|
|
|
82
117
|
Try `@event4u/agent-config` in any directory in under 30 seconds, without
|
|
83
|
-
|
|
84
|
-
wrappers around `scripts/install` — same payload,
|
|
85
|
-
state.
|
|
118
|
+
adding it as a dev dependency or cloning the repo first. Both
|
|
119
|
+
entrypoints are thin wrappers around `scripts/install` — same payload,
|
|
120
|
+
same flags, no extra state.
|
|
86
121
|
|
|
87
122
|
### `npx` (Node ≥ 18)
|
|
88
123
|
|
|
@@ -139,41 +174,26 @@ used. Pass `--yes` (or `-y`) to force non-interactive mode anywhere.
|
|
|
139
174
|
Install once in the project — available to everyone working on it.
|
|
140
175
|
The package is versioned with the project. Settings are committed once.
|
|
141
176
|
|
|
142
|
-
###
|
|
177
|
+
### npx (recommended for any project)
|
|
143
178
|
|
|
144
179
|
```bash
|
|
145
|
-
|
|
146
|
-
php vendor/bin/install.php
|
|
180
|
+
npx @event4u/create-agent-config init --tools=claude-code,cursor
|
|
147
181
|
```
|
|
148
182
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
profile:
|
|
183
|
+
The wrapper downloads the latest `@event4u/agent-config` tarball into a
|
|
184
|
+
temp dir, runs `scripts/install` with the selected tools, and cleans up
|
|
185
|
+
afterwards. Nothing is added to `package.json`.
|
|
153
186
|
|
|
154
|
-
|
|
155
|
-
php vendor/bin/install.php --profile=balanced
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
The `--profile` flag controls the initial `cost_profile` value written
|
|
159
|
-
to `.agent-settings.yml`.
|
|
160
|
-
|
|
161
|
-
### npm (JavaScript/TypeScript projects)
|
|
187
|
+
### Global CLI (one install per machine)
|
|
162
188
|
|
|
163
189
|
```bash
|
|
164
|
-
npm install
|
|
190
|
+
npm install -g @event4u/agent-config
|
|
191
|
+
agent-config --help
|
|
165
192
|
```
|
|
166
193
|
|
|
167
|
-
|
|
168
|
-
`
|
|
169
|
-
|
|
170
|
-
If your setup disables install scripts (`npm config set ignore-scripts
|
|
171
|
-
true` or similar), nothing happens and the command prints no warning.
|
|
172
|
-
Re-run the installer manually in that case:
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
bash node_modules/@event4u/agent-config/scripts/install
|
|
176
|
-
```
|
|
194
|
+
The global install puts `agent-config` on `$PATH` so the project
|
|
195
|
+
wrapper (`./agent-config`) can fall through to it when no
|
|
196
|
+
`node_modules/@event4u/agent-config/` exists.
|
|
177
197
|
|
|
178
198
|
### Installer orchestrator (`scripts/install`)
|
|
179
199
|
|
|
@@ -188,12 +208,6 @@ bash scripts/install --skip-sync # bridges only
|
|
|
188
208
|
bash scripts/install --dry-run # show payload sync plan, skip bridges
|
|
189
209
|
```
|
|
190
210
|
|
|
191
|
-
PHP users can use the Composer wrapper, which forwards all flags:
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
php vendor/bin/install.php --profile=balanced
|
|
195
|
-
```
|
|
196
|
-
|
|
197
211
|
Under the hood:
|
|
198
212
|
|
|
199
213
|
- `scripts/install.sh` — payload sync (callable directly for sync-only runs).
|
|
@@ -518,8 +532,6 @@ Options:
|
|
|
518
532
|
--quiet Suppress non-error output
|
|
519
533
|
--skip-sync Skip payload sync (install.sh)
|
|
520
534
|
--skip-bridges Skip bridge files (install.py)
|
|
521
|
-
--global Ship kernel rules + curated skills to user-scope dirs
|
|
522
|
-
--uninstall With --global: remove the event4u/ namespace dir
|
|
523
535
|
--help, -h Show this help
|
|
524
536
|
```
|
|
525
537
|
|
|
@@ -528,41 +540,16 @@ The underlying stages keep their own CLI surfaces:
|
|
|
528
540
|
|
|
529
541
|
---
|
|
530
542
|
|
|
531
|
-
## Global user-level install
|
|
532
|
-
|
|
533
|
-
`--global` ships a curated subset of kernel rules + top-N skills into
|
|
534
|
-
**per-tool user-scope directories**, so the agent has them in every
|
|
535
|
-
project on the machine without a per-project install.
|
|
536
|
-
|
|
537
|
-
```bash
|
|
538
|
-
# Default: every supported surface, namespaced under event4u/.
|
|
539
|
-
bash scripts/install --global
|
|
540
|
-
|
|
541
|
-
# Scope to specific surfaces (mirrors the project install --tools flag).
|
|
542
|
-
bash scripts/install --global --tools=claude-code,cursor
|
|
543
|
-
|
|
544
|
-
# Remove only what we put there — never touches user files.
|
|
545
|
-
bash scripts/install --global --uninstall
|
|
546
|
-
```
|
|
547
|
-
|
|
548
|
-
| Surface | Target directory |
|
|
549
|
-
| ------------- | --------------------------------------------------------------- |
|
|
550
|
-
| Claude Code | `~/.claude/rules/event4u/`, `~/.claude/skills/event4u/` |
|
|
551
|
-
| Cursor | `~/.cursor/rules/imported/event4u/{rules,skills}/` |
|
|
552
|
-
| Windsurf | `~/.codeium/windsurf/global_workflows/event4u/{rules,skills}/` |
|
|
553
|
-
| Fallback | `~/.config/agent-config/{rules,skills}/event4u/` |
|
|
554
|
-
|
|
555
|
-
The fallback path is always written so an editor we don't yet know
|
|
556
|
-
about can still pick the files up.
|
|
543
|
+
## Global user-level install — retired
|
|
557
544
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
545
|
+
The previous `--global` symlink scheme (kernel rules + curated skills
|
|
546
|
+
copied into `~/.claude/`, `~/.cursor/`, `~/.codeium/windsurf/`, and
|
|
547
|
+
`~/.config/agent-config/` under an `event4u/` namespace) has been
|
|
548
|
+
**retired** under the npx-only distribution model. Run
|
|
549
|
+
`npx @event4u/agent-config init` per project instead; the
|
|
550
|
+
`agent_config_version` pin in `.agent-settings.yml` keeps every
|
|
551
|
+
invocation reproducible. See [`migration/v1-to-v2.md`](migration/v1-to-v2.md)
|
|
552
|
+
for the upgrade path.
|
|
566
553
|
|
|
567
554
|
---
|
|
568
555
|
|
|
@@ -571,15 +558,12 @@ that benefits from a baseline set of skills out of the box.
|
|
|
571
558
|
When a new version of the package is published:
|
|
572
559
|
|
|
573
560
|
```bash
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
```
|
|
561
|
+
# npx (one-shot, recommended) — always uses the latest tarball
|
|
562
|
+
npx @event4u/create-agent-config init --tools=claude-code,cursor
|
|
577
563
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
npm update @event4u/agent-config
|
|
582
|
-
bash node_modules/@event4u/agent-config/scripts/install
|
|
564
|
+
# Global CLI
|
|
565
|
+
npm install -g @event4u/agent-config@latest
|
|
566
|
+
agent-config --help
|
|
583
567
|
```
|
|
584
568
|
|
|
585
569
|
The installer is idempotent — re-running it after an update refreshes
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Migration — v1 → v2 (npx-only runtime)
|
|
2
|
+
|
|
3
|
+
> **Status:** skeleton. The one-shot `npx @event4u/agent-config migrate`
|
|
4
|
+
> is implemented in P3.5 of
|
|
5
|
+
> [`road-to-portable-runtime-and-update-check`](../../agents/roadmaps/road-to-portable-runtime-and-update-check.md);
|
|
6
|
+
> this document tracks the user-facing cutover contract so consumers can
|
|
7
|
+
> rehearse the change before the command lands.
|
|
8
|
+
|
|
9
|
+
## Why this change
|
|
10
|
+
|
|
11
|
+
v2 retires the local-install scheme (Composer dependency, npm
|
|
12
|
+
`postinstall`, `--global` symlink namespace under `~/.claude/`,
|
|
13
|
+
`~/.cursor/`, `~/.codeium/windsurf/`, `~/.config/agent-config/`) in
|
|
14
|
+
favour of an **npx-only runtime**. The trade-off and the council's Q1
|
|
15
|
+
rejection + the user's override are recorded in
|
|
16
|
+
[`docs/architecture.md` § Distribution model](../architecture.md#distribution-model--npx-only--version-pin-governance).
|
|
17
|
+
|
|
18
|
+
## TL;DR
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx @event4u/agent-config migrate
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
One command, idempotent. Re-runs on an already-migrated repo do nothing.
|
|
25
|
+
|
|
26
|
+
## What disappears from the consumer
|
|
27
|
+
|
|
28
|
+
| Path / entry | Reason |
|
|
29
|
+
|-------------------------------------------------------|-----------------------------------------|
|
|
30
|
+
| `composer.json` → `require-dev.event4u/agent-config` | No Composer dependency under v2. |
|
|
31
|
+
| `composer.lock` line for `event4u/agent-config` | Same; lockfile updated by Composer. |
|
|
32
|
+
| `package.json` → `devDependencies.@event4u/agent-config` | No npm dependency under v2. |
|
|
33
|
+
| `package-lock.json` / `pnpm-lock.yaml` entries | Same. |
|
|
34
|
+
| `node_modules/@event4u/agent-config/` | Removed by the package manager once the `package.json` entry is gone. |
|
|
35
|
+
| `vendor/event4u/agent-config/` | Removed by Composer once the require entry is gone. |
|
|
36
|
+
| `~/.claude/{rules,skills}/event4u/` | Retired `--global` namespace dir. |
|
|
37
|
+
| `~/.cursor/rules/imported/event4u/` | Same. |
|
|
38
|
+
| `~/.codeium/windsurf/global_workflows/event4u/` | Same. |
|
|
39
|
+
| `~/.config/agent-config/{rules,skills}/event4u/` | Same (fallback path). |
|
|
40
|
+
| Legacy `.gitignore` block lines marked `event4u/agent-config (legacy local install)` | Replaced by the v2 block written by `sync-gitignore`. |
|
|
41
|
+
|
|
42
|
+
The retired `templates/global-install-manifest.yml` shipped inside the
|
|
43
|
+
package and is gone in v2; consumers never carried it directly.
|
|
44
|
+
|
|
45
|
+
## What appears in the consumer
|
|
46
|
+
|
|
47
|
+
| Path / entry | Owner / shape |
|
|
48
|
+
|-------------------------------------------------------|-----------------------------------------|
|
|
49
|
+
| `.agent-settings.yml` → `agent_config_version: "<pin>"` | Project version pin, reviewed in PRs. |
|
|
50
|
+
| `.agent-settings.yml` → `update_check:` block | Defaults shipped by `init`; opt-out per knob. |
|
|
51
|
+
| Updated `.gitignore` block | v2 entries written by `sync-gitignore`. |
|
|
52
|
+
|
|
53
|
+
The per-tool glue (`.claude/`, `.cursor/`, `.clinerules/`,
|
|
54
|
+
`.windsurfrules`, `GEMINI.md`, `.github/copilot-instructions.md`,
|
|
55
|
+
`.augment/`, `.vscode/settings.json`) keeps the same shape as v1 — only
|
|
56
|
+
the source that writes them changed (from `vendor/` /
|
|
57
|
+
`node_modules/` scripts to the npx-resolved runtime).
|
|
58
|
+
|
|
59
|
+
## The `migrate` command — contract sketch
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx @event4u/agent-config migrate # interactive, default
|
|
63
|
+
npx @event4u/agent-config migrate --dry-run # plan only, no writes
|
|
64
|
+
npx @event4u/agent-config migrate --yes # non-interactive
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Order of operations (locked once P3.5 lands):
|
|
68
|
+
|
|
69
|
+
1. Detect pre-v2 markers: `composer.json` require entry,
|
|
70
|
+
`package.json` devDependency, `vendor/event4u/agent-config/`,
|
|
71
|
+
`node_modules/@event4u/agent-config/`, legacy `.gitignore` lines,
|
|
72
|
+
`~/.claude/{rules,skills}/event4u/` and siblings.
|
|
73
|
+
2. Print the planned change set (file removals, file writes, pin
|
|
74
|
+
value). Stop here under `--dry-run`.
|
|
75
|
+
3. Remove dependency entries via the appropriate package manager
|
|
76
|
+
(`composer remove`, `npm uninstall` / `pnpm remove` / `yarn remove`).
|
|
77
|
+
4. Wipe the retired user-scope `event4u/` namespace dirs.
|
|
78
|
+
5. Write / update `.agent-settings.yml` with the new shape +
|
|
79
|
+
`agent_config_version` pin.
|
|
80
|
+
6. Re-run `sync-gitignore` to refresh the project `.gitignore` block.
|
|
81
|
+
7. Print a one-screen post-migration verification list.
|
|
82
|
+
|
|
83
|
+
Idempotency: each step is a no-op when the v1 marker is absent. Re-runs
|
|
84
|
+
print *"already on v2 — nothing to do"* and exit 0.
|
|
85
|
+
|
|
86
|
+
## Verification after migration
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npx @event4u/agent-config doctor # P3 — runtime sanity check
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Expected: pin resolved, no v1 markers detected, `update_check` reachable.
|
|
93
|
+
|
|
94
|
+
## See also
|
|
95
|
+
|
|
96
|
+
- [`docs/architecture.md` § Distribution model](../architecture.md#distribution-model--npx-only--version-pin-governance) — Q1 council rejection + override + pin substitution.
|
|
97
|
+
- [`agents/roadmaps/road-to-portable-runtime-and-update-check.md`](../../agents/roadmaps/road-to-portable-runtime-and-update-check.md) — full delivery plan and acceptance criteria.
|
|
98
|
+
- [`docs/installation.md`](../installation.md) — v2 install reference.
|
|
@@ -15,9 +15,9 @@ invocation and are removed in `1.16.0`.
|
|
|
15
15
|
| Old command | New invocation | Removed in |
|
|
16
16
|
|---|---|---|
|
|
17
17
|
| `/fix-ci` | `/fix ci` | 1.16.0 |
|
|
18
|
-
| `/fix-pr-comments` | `/fix pr` | 1.16.0 |
|
|
19
|
-
| `/fix-pr-bot-comments` | `/fix pr-
|
|
20
|
-
| `/fix-pr-developer-comments` | `/fix pr-
|
|
18
|
+
| `/fix-pr-comments` | `/fix pr-comments` | 1.16.0 |
|
|
19
|
+
| `/fix-pr-bot-comments` | `/fix pr-bot-comments` | 1.16.0 |
|
|
20
|
+
| `/fix-pr-developer-comments` | `/fix pr-developer-comments` | 1.16.0 |
|
|
21
21
|
| `/fix-portability` | `/fix portability` | 1.16.0 |
|
|
22
22
|
| `/fix-references` | `/fix refs` | 1.16.0 |
|
|
23
23
|
| `/fix-seeder` | `/fix seeder` | 1.16.0 |
|
|
@@ -29,23 +29,6 @@ Either form populates:
|
|
|
29
29
|
- `CLAUDE.md` — agent root pointer (auto-loaded by Claude Code)
|
|
30
30
|
- `.agent-settings.yml` — your per-project knobs (kept out of git)
|
|
31
31
|
|
|
32
|
-
## Global install (cross-project skills)
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx @event4u/agent-config global --tools=claude-code
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Seeds `~/.claude/skills/` with the curated top-N skills from
|
|
39
|
-
[`templates/global-install-manifest.yml`](../../../templates/global-install-manifest.yml).
|
|
40
|
-
Available across every project on the machine; project-level files
|
|
41
|
-
always take precedence.
|
|
42
|
-
|
|
43
|
-
Uninstall:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
npx @event4u/agent-config global --uninstall
|
|
47
|
-
```
|
|
48
|
-
|
|
49
32
|
## Plugin marketplace (Claude Code 2026+)
|
|
50
33
|
|
|
51
34
|
Claude Code 2026 supports plugin marketplaces via
|