@event4u/agent-config 2.2.2 → 2.4.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 (68) hide show
  1. package/.agent-src/commands/onboard.md +14 -9
  2. package/.agent-src/rules/external-reference-deep-dive.md +69 -0
  3. package/.agent-src/skills/ai-council/SKILL.md +5 -3
  4. package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  5. package/.agent-src/templates/agents/agent-project-settings.example.yml +4 -3
  6. package/.agent-src/templates/copilot-instructions.md +7 -0
  7. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +29 -7
  8. package/.agent-src/templates/scripts/work_engine/_lib/user_global_paths.py +249 -0
  9. package/.agent-src/templates/scripts/work_engine/hooks/settings.py +8 -5
  10. package/.claude-plugin/marketplace.json +27 -1
  11. package/CHANGELOG.md +79 -0
  12. package/README.md +1 -8
  13. package/config/agent-settings.template.yml +5 -3
  14. package/docs/architecture.md +1 -1
  15. package/docs/catalog.md +5 -3
  16. package/docs/contracts/installed-tools-lockfile.md +142 -0
  17. package/docs/customization.md +23 -17
  18. package/docs/decisions/ADR-007-agent-discovery-scopes.md +6 -0
  19. package/docs/decisions/ADR-009-event4u-namespace.md +188 -0
  20. package/docs/decisions/INDEX.md +1 -0
  21. package/docs/development.md +37 -0
  22. package/docs/getting-started.md +1 -1
  23. package/docs/guidelines/agent-infra/installed-tools-manifest.md +1 -1
  24. package/docs/guidelines/agent-infra/layered-settings.md +6 -4
  25. package/docs/installation.md +17 -2
  26. package/docs/migration/v1-to-v2.md +45 -0
  27. package/docs/setup/per-ide/antigravity.md +63 -0
  28. package/docs/setup/per-ide/augment.md +77 -0
  29. package/docs/setup/per-ide/claude-desktop.md +107 -65
  30. package/docs/setup/per-ide/codebuddy.md +63 -0
  31. package/docs/setup/per-ide/continue.md +68 -0
  32. package/docs/setup/per-ide/droid.md +65 -0
  33. package/docs/setup/per-ide/jetbrains.md +76 -0
  34. package/docs/setup/per-ide/kilocode.md +66 -0
  35. package/docs/setup/per-ide/kiro.md +72 -0
  36. package/docs/setup/per-ide/opencode.md +62 -0
  37. package/docs/setup/per-ide/qoder.md +63 -0
  38. package/docs/setup/per-ide/roocode.md +68 -0
  39. package/docs/setup/per-ide/trae.md +63 -0
  40. package/docs/setup/per-ide/warp.md +63 -0
  41. package/docs/setup/per-ide/zed.md +73 -0
  42. package/package.json +1 -1
  43. package/scripts/_cli/cmd_doctor.py +351 -0
  44. package/scripts/_cli/cmd_prune.py +317 -0
  45. package/scripts/_cli/cmd_uninstall.py +465 -0
  46. package/scripts/_cli/cmd_update.py +30 -4
  47. package/scripts/_cli/cmd_versions.py +147 -0
  48. package/scripts/_lib/agent_settings.py +29 -7
  49. package/scripts/_lib/agents_overlay.py +15 -4
  50. package/scripts/_lib/claude_desktop_bundler.py +150 -0
  51. package/scripts/_lib/fs_atomic.py +116 -0
  52. package/scripts/_lib/installed_lock.py +37 -4
  53. package/scripts/_lib/installed_tools.py +189 -45
  54. package/scripts/_lib/json_pointers.py +260 -0
  55. package/scripts/_lib/update_check.py +29 -5
  56. package/scripts/_lib/user_global_paths.py +249 -0
  57. package/scripts/agent-config +69 -0
  58. package/scripts/ai_council/__init__.py +4 -3
  59. package/scripts/ai_council/budget_guard.py +34 -4
  60. package/scripts/ai_council/bundler.py +2 -0
  61. package/scripts/ai_council/clients.py +28 -7
  62. package/scripts/compress.py +78 -15
  63. package/scripts/install +8 -0
  64. package/scripts/install-hooks.sh +54 -1
  65. package/scripts/install.py +1149 -53
  66. package/scripts/install_anthropic_key.sh +5 -3
  67. package/scripts/install_openai_key.sh +5 -3
  68. package/scripts/skill_trigger_eval.py +13 -2
package/CHANGELOG.md CHANGED
@@ -343,6 +343,85 @@ our recommendation order, not its support status.
343
343
  users" tension without removing any path that an existing user
344
344
  might rely on.
345
345
 
346
+ ## [2.4.0](https://github.com/event4u-app/agent-config/compare/2.3.0...2.4.0) (2026-05-13)
347
+
348
+ ### Features
349
+
350
+ * **install:** Claude Desktop ZIP bundle deployment ([9f2a00c](https://github.com/event4u-app/agent-config/commit/9f2a00cfd752232abdcf16c6e3440c46f5c9d596))
351
+ * **install:** event4u namespace and auto-migration shim ([a58570e](https://github.com/event4u-app/agent-config/commit/a58570ecff885a7d50350c4281e675d7ff34f912))
352
+
353
+ ### Bug Fixes
354
+
355
+ * **agent_settings:** align source with template via relative import ([a85b6c8](https://github.com/event4u-app/agent-config/commit/a85b6c82284310876d075a924918052fc7dbabdb))
356
+ * **work_engine:** vendor user_global_paths into template for self-contained import ([f111c4e](https://github.com/event4u-app/agent-config/commit/f111c4e60de6cd60fbe81635029f9f34437a5ead))
357
+ * **migrate:** atomic per-entry write with partial-debris purge ([5bd5aad](https://github.com/event4u-app/agent-config/commit/5bd5aadf0085657ec98eee049dda440d05b06801))
358
+
359
+ ### Documentation
360
+
361
+ * **roadmap:** mark Steps 5-6 done (commit + PR opened) ([8492b7f](https://github.com/event4u-app/agent-config/commit/8492b7fd3cfd76075a64d5de770db2c5013e02dd))
362
+ * **adr:** ADR-009 rollback section + AI Council convergence ([cc78adc](https://github.com/event4u-app/agent-config/commit/cc78adc0a9d0fbc51b2a65f35d8e0f13c1456a2f))
363
+ * **contracts:** mark installed-tools-lockfile as beta ([90991da](https://github.com/event4u-app/agent-config/commit/90991da2f840ebae978fc4df9996c01324816404))
364
+ * **adr:** ADR-009 event4u namespace + Claude Desktop ZIP bundles ([c707bd3](https://github.com/event4u-app/agent-config/commit/c707bd31211f94ace858738b7aee8d3898f0da88))
365
+ * **roadmap:** add road-to-event4u-namespace-and-claude-desktop ([d92706b](https://github.com/event4u-app/agent-config/commit/d92706bd53621ff3a225db6eb9ee490f17f613d2))
366
+
367
+ ### Chores
368
+
369
+ * **onboard:** rephrase 'event4u-owned' as 'package-owned' ([4bdd43b](https://github.com/event4u-app/agent-config/commit/4bdd43b7a6637a36cfa377045b6cd0f3f51b0fd1))
370
+ * **template:** bump agent_config_version pin to 2.3.0 ([1180bf2](https://github.com/event4u-app/agent-config/commit/1180bf263f2f33fb5b41b13439c92cfbdc3a70d8))
371
+ * **index:** regenerate index + catalog for accurate counts ([655a5eb](https://github.com/event4u-app/agent-config/commit/655a5eb81ce6744548a6f50451f66576a7c2b5ac))
372
+ * **sync:** regenerate derived outputs for event4u namespace ([c277a94](https://github.com/event4u-app/agent-config/commit/c277a94f881ad4702ed2e97cebf6c5a7c8471a35))
373
+
374
+ Tests: 3521 (+31 since 2.3.0)
375
+
376
+ ## [2.3.0](https://github.com/event4u-app/agent-config/compare/2.2.2...2.3.0) (2026-05-13)
377
+
378
+ ### Features
379
+
380
+ * **prune:** add --resume-uninstall for focused crash recovery ([1c98454](https://github.com/event4u-app/agent-config/commit/1c9845404f1e629f802494c732f7438aa4335c8e))
381
+ * **dev:** add dev:install-global and dev:link tasks for local development ([db4bdc9](https://github.com/event4u-app/agent-config/commit/db4bdc9794752791bb93235cc9cc3179df9b88df))
382
+ * **install:** manifest schema v2 + doctor + conflict detection + inline tag ([50c0892](https://github.com/event4u-app/agent-config/commit/50c0892bf01eb904e48dd786ef03c519f82be485))
383
+ * **cli:** add prune command for orphaned bridge markers ([d16abff](https://github.com/event4u-app/agent-config/commit/d16abff8ac9fd55ccd501d319785f463eb7cbeee))
384
+ * **cli:** add uninstall/versions subcommands and --offline mode ([12a8e75](https://github.com/event4u-app/agent-config/commit/12a8e75945f1d26c1412d17331788c8e51601cea))
385
+ * **install:** add workflow-mode activation hints to IDE bridges ([5e09e17](https://github.com/event4u-app/agent-config/commit/5e09e17f0de62b4113bd68839d6ce55a1527d4b1))
386
+ * **rules:** add external-reference-deep-dive hardening rule ([0d2c80c](https://github.com/event4u-app/agent-config/commit/0d2c80c0f418b80a67d08c4577cfe67ab6abe3db))
387
+ * **install:** expand global content deployment to 23 AI tools ([3ef13a7](https://github.com/event4u-app/agent-config/commit/3ef13a7c2ae16b95da9e5a49ec3a19c5cb211357))
388
+
389
+ ### Bug Fixes
390
+
391
+ * **install:** normalise manifest paths + surface doctor remediation hint ([b4662b6](https://github.com/event4u-app/agent-config/commit/b4662b609db6b1b4660652facc0efb10b36a5d51))
392
+ * **test:** patch USERPROFILE in isolated_lock fixture for Windows ([ac1c924](https://github.com/event4u-app/agent-config/commit/ac1c924e08822e09471c0cf0077ad69be531d7b5))
393
+
394
+ ### Documentation
395
+
396
+ * **readme:** remove stale vX.0 breaking-change notice ([d6aef9a](https://github.com/event4u-app/agent-config/commit/d6aef9acce3e5409f0ffc641ecf026af1f9bb863))
397
+ * **roadmap:** sharpen Phase 6 deferred trigger — name the collision ([d0a6dd2](https://github.com/event4u-app/agent-config/commit/d0a6dd28294c011d4135b4047e4e5252008fcf05))
398
+ * **roadmap:** close + archive multi-package coexistence ([3ef464f](https://github.com/event4u-app/agent-config/commit/3ef464fd6123ead7ca755542a1459e6a9e8e270b))
399
+ * **roadmap:** plan + close phases 1-5 of multi-package coexistence ([34967a5](https://github.com/event4u-app/agent-config/commit/34967a5e6525d4d742155ee3bd3fe0bb80d852bf))
400
+ * **install:** add installed-tools-lockfile wire contract ([c352db3](https://github.com/event4u-app/agent-config/commit/c352db383f6bf6dc328159289fa4d96abb2594c4))
401
+ * **setup:** add per-IDE activation guides for 14 tools ([6379a49](https://github.com/event4u-app/agent-config/commit/6379a49fed6ac3256c23ac8e04c69fa0d4f85aa2))
402
+
403
+ ### Tests
404
+
405
+ * **e2e:** cover shared JSON merges, sole-owner cleanup, conflict chain ([0ff50ae](https://github.com/event4u-app/agent-config/commit/0ff50ae617d878138376e535fc8b5c22a7677356))
406
+ * **install:** e2e multi-package coexistence scenario ([081318e](https://github.com/event4u-app/agent-config/commit/081318ea8e3c872548839d100117cbd9b4a1343a))
407
+ * **cli:** cover prune — orphans, dry-run, json, hard-floor ([0261ea2](https://github.com/event4u-app/agent-config/commit/0261ea2e1687e6904bdcb3083cb0d700b6ef82e5))
408
+
409
+ ### CI
410
+
411
+ * **tests:** bump per-shard parallelism explicitly to beat macOS nproc=3 ([83a3b4d](https://github.com/event4u-app/agent-config/commit/83a3b4d3bf6eefe10963d84525469aeb8e3b8abe))
412
+ * **tests:** bump install-tests shards 3→4 to keep macOS under 2min ([dd4d5bc](https://github.com/event4u-app/agent-config/commit/dd4d5bc385282d344809a057d015a968811d4a3b))
413
+ * **tests:** shard install-tests matrix to hit 1-2min/job target ([6a56416](https://github.com/event4u-app/agent-config/commit/6a564161f0a74601fe077d34c76f2f5a27657893))
414
+ * **tests:** parallelize install-tests + fix Windows UTF-8 encoding ([e346a26](https://github.com/event4u-app/agent-config/commit/e346a26e91be633a63e8c7d46fb09a3a6cdf800e))
415
+ * **tests:** bootstrap .augment/ projection before pytest ([e40371e](https://github.com/event4u-app/agent-config/commit/e40371ea7b0c345ee59eba8ba5e47328bf6aebe9))
416
+
417
+ ### Chores
418
+
419
+ * finalize changes ([7cbbe68](https://github.com/event4u-app/agent-config/commit/7cbbe6881e040d67fd0598df73b82b3fbd1278c0))
420
+ * regenerate router.json after kernel/tier rebuild ([ff5f10e](https://github.com/event4u-app/agent-config/commit/ff5f10e0589f46782ec6381a84377f22b90d7edc))
421
+ * **marketplace:** refresh marketplace.json manifest ([eb9b934](https://github.com/event4u-app/agent-config/commit/eb9b934f5b4573ec1fcde19f91f6a20637b8dbeb))
422
+
423
+ Tests: 3490 (+140 since 2.2.2)
424
+
346
425
  ## [2.2.2](https://github.com/event4u-app/agent-config/compare/2.2.1...2.2.2) (2026-05-12)
347
426
 
348
427
  ### Bug Fixes
package/README.md CHANGED
@@ -1,12 +1,5 @@
1
1
  # Agent Config — Governed Agent System
2
2
 
3
- > ⚠️ **Breaking change in vX.0** — `agent-config` now ships as an
4
- > **npx-only runtime**. `composer require` / `npm install --save-dev`
5
- > are gone, the `--global` symlink scheme is retired. Existing
6
- > consumers: run `npx @event4u/agent-config migrate`
7
- > ([guide](docs/migration/v1-to-v2.md)). New consumers: jump to
8
- > [Quickstart](#quickstart).
9
-
10
3
  > **agent-config is not a runtime, but it ships a deterministic orchestration contract / state machine for host agents.**
11
4
 
12
5
  Give your AI agents an audit-disciplined orchestration contract — testing, Git, CI, code review, and **120+ stack-aware skills** — with quality guardrails built in.
@@ -14,7 +7,7 @@ Give your AI agents an audit-disciplined orchestration contract — testing, Git
14
7
  > Your agent picks up the project's stack, runs tests, prepares PRs, fixes CI — and follows your team's coding standards while doing it. Stack-aware skill sets ship for PHP (Laravel · Symfony · Zend/Laminas), JavaScript (Next.js · React · Node), and cross-stack concerns (API · testing · security · observability).
15
8
 
16
9
  <p align="center">
17
- <strong>174 Skills</strong> · <strong>60 Rules</strong> · <strong>106 Commands</strong> · <strong>70 Guidelines</strong> · <strong>8 AI Tools</strong>
10
+ <strong>174 Skills</strong> · <strong>61 Rules</strong> · <strong>106 Commands</strong> · <strong>70 Guidelines</strong> · <strong>8 AI Tools</strong>
18
11
  </p>
19
12
 
20
13
  ---
@@ -237,8 +237,9 @@ worktrees:
237
237
  # roadmap, diff, prompt, or file set. Council members never see the
238
238
  # host agent's reasoning — only the artefact + a neutral system prompt.
239
239
  #
240
- # Tokens are NEVER stored here. They live in ~/.config/agent-config/
241
- # <provider>.key (mode 0600), installed via:
240
+ # Tokens are NEVER stored here. They live in ~/.event4u/agent-config/
241
+ # <provider>.key (mode 0600; legacy ~/.config/agent-config/<provider>.key
242
+ # is read as a fallback), installed via:
242
243
  # bash scripts/install_anthropic_key.sh
243
244
  # bash scripts/install_openai_key.sh
244
245
  #
@@ -396,7 +397,8 @@ memory:
396
397
  # two-line banner to stderr **after** the subcommand finishes; CI,
397
398
  # non-TTY stdout, and `AGENT_CONFIG_NO_UPDATE_CHECK=1` always suppress
398
399
  # it regardless of this flag. State is persisted at
399
- # `~/.config/agent-config/update-check.json` (mode 0600) with a 24 h
400
+ # `~/.event4u/agent-config/update-check.json` (mode 0600; legacy
401
+ # `~/.config/agent-config/update-check.json` read as fallback) with a 24 h
400
402
  # cadence. See docs/customization.md § "Update check" for the suppression
401
403
  # matrix and the road-to-portable-runtime-and-update-check roadmap (P2).
402
404
  update_check:
@@ -143,7 +143,7 @@ fails on any source-side violation, without producing artifacts.
143
143
  | Layer | Count | Purpose |
144
144
  |---|---|---|
145
145
  | **Skills** | 174 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
146
- | **Rules** | 60 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
146
+ | **Rules** | 61 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
147
147
  | **Commands** | 106 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
148
148
  | **Guidelines** | 70 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
149
149
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
package/docs/catalog.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **406 public artefacts** shipped by
3
+ Consumer-facing catalog of all **408 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
@@ -186,7 +186,7 @@ are excluded.
186
186
  | skill | [`voc-extract`](../.agent-src/skills/voc-extract/SKILL.md) | | Use when extracting Voice-of-Customer themes from existing artefacts — GH issues, PR threads, Sentry patterns. Triggers on 'what are users saying', 'recurring complaints', 'top themes'. |
187
187
  | skill | [`websocket`](../.agent-src/skills/websocket/SKILL.md) | | Use when building real-time features — WebSocket broadcasting, live updates, presence channels, connection state — even when the user just says 'push this to the client live'. |
188
188
 
189
- ## Rules (57)
189
+ ## Rules (58)
190
190
 
191
191
  | kind | name | type | description |
192
192
  |---|---|---|---|
@@ -210,6 +210,7 @@ are excluded.
210
210
  | rule | [`domain-adoption-policy`](../.agent-src/rules/domain-adoption-policy.md) | auto | Adopting a new domain track (mobile, ML, blockchain, IoT, gaming) — gates import on demand, ownership, CI fit, Sunset compatibility BEFORE harvest |
211
211
  | rule | [`downstream-changes`](../.agent-src/rules/downstream-changes.md) | auto | After EVERY code edit, find ALL downstream changes needed to existing files, including callers, tests, imports, types, and documentation |
212
212
  | rule | [`e2e-testing`](../.agent-src/rules/e2e-testing.md) | auto | Playwright E2E tests — locators, assertions, Page Objects, fixtures, CI, and flaky test prevention |
213
+ | rule | [`external-reference-deep-dive`](../.agent-src/rules/external-reference-deep-dive.md) | auto | When the user names an external repo, file, URL, or artifact as a reference — fetch the actual tree and inspect, never summarize from README or metadata |
213
214
  | rule | [`guidelines`](../.agent-src/rules/guidelines.md) | manual | Writing or reviewing code — check relevant guideline before writing or reviewing code |
214
215
  | rule | [`improve-before-implement`](../.agent-src/rules/improve-before-implement.md) | auto | Before implementing features or architectural changes — validate the request against existing code, challenge weak requirements, suggest improvements |
215
216
  | rule | [`invite-challenge`](../.agent-src/rules/invite-challenge.md) | auto | Before executing a complex plan or non-trivial design — ask 'am I solving the right problem?' and pause for user confirmation, even when no ambiguity |
@@ -359,7 +360,7 @@ are excluded.
359
360
  | command | [`upstream-contribute`](../.agent-src/commands/upstream-contribute.md) | | Contribute a learning, skill, rule, or fix from a consumer project back to the shared agent-config package |
360
361
  | command | [`work`](../.agent-src/commands/work.md) | | Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over the `work_engine` Python engine, confidence-band gated, no auto-git. |
361
362
 
362
- ## Guidelines (69)
363
+ ## Guidelines (70)
363
364
 
364
365
  | kind | name | category | description |
365
366
  |---|---|---|---|
@@ -374,6 +375,7 @@ are excluded.
374
375
  | guideline | [`direct-answers-demos`](../docs/guidelines/agent-infra/direct-answers-demos.md) | agent-infra | |
375
376
  | guideline | [`engineering-memory-data-format`](../docs/guidelines/agent-infra/engineering-memory-data-format.md) | agent-infra | |
376
377
  | guideline | [`first-principles`](../docs/guidelines/agent-infra/first-principles.md) | agent-infra | |
378
+ | guideline | [`installed-tools-manifest`](../docs/guidelines/agent-infra/installed-tools-manifest.md) | agent-infra | |
377
379
  | guideline | [`inversion-thinking`](../docs/guidelines/agent-infra/inversion-thinking.md) | agent-infra | |
378
380
  | guideline | [`ios-simulator-guide`](../docs/guidelines/agent-infra/ios-simulator-guide.md) | agent-infra | |
379
381
  | guideline | [`language-and-tone-examples`](../docs/guidelines/agent-infra/language-and-tone-examples.md) | agent-infra | |
@@ -0,0 +1,142 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # Installed-Tools Lockfile — Wire Contract
6
+
7
+ Canonical wire-format spec for `agents/installed-tools.lock` — the
8
+ project-committed bill of materials for AI tooling installed into this
9
+ repository.
10
+
11
+ - **Authoritative module:** [`scripts/_lib/installed_tools.py`](../../scripts/_lib/installed_tools.py)
12
+ - **ADR:** [`docs/decisions/ADR-008-installed-tools-manifest.md`](../decisions/ADR-008-installed-tools-manifest.md)
13
+ - **Workflow guide:** [`docs/guidelines/agent-infra/installed-tools-manifest.md`](../guidelines/agent-infra/installed-tools-manifest.md)
14
+ - **Active roadmap:** P1.1 of [`agents/roadmaps/road-to-multi-package-coexistence.md`](../../agents/roadmaps/road-to-multi-package-coexistence.md)
15
+
16
+ ## Versions
17
+
18
+ | Version | Status | Writer | Reader |
19
+ |---|---|---|---|
20
+ | **1** | legacy | not emitted by current code | tolerated by `read_manifest` |
21
+ | **2** | current | `write_manifest` always emits this | tolerated by `read_manifest` |
22
+
23
+ `SCHEMA_VERSION = 2` · `SCHEMA_VERSIONS_SUPPORTED = (1, 2)`. The reader
24
+ must accept any version in `SCHEMA_VERSIONS_SUPPORTED`; the writer must
25
+ always emit the highest. Bumps are breaking on the writer side and
26
+ require a migration plan.
27
+
28
+ ## Schema v2 — wire format
29
+
30
+ ```yaml
31
+ schema_version: 2
32
+ agent_config_version: "2.2.0"
33
+ deploy_roots: # optional, top-level (P1.1)
34
+ - .augment/rules
35
+ - .cursor/rules
36
+ tools:
37
+ - name: claude-code # one of _VALID_TOOLS
38
+ scope: global # global | project
39
+ bridge_marker: ~/.claude/PROJECT_MANAGED_BY_AGENT_CONFIG
40
+ installed_at: "2026-05-12"
41
+ status: installed # optional: installed | uninstalling (P2.2)
42
+ files: # optional, per-tool (P1.1)
43
+ - path: .augment/rules/r1.md
44
+ kind: deployed # one of FILE_KINDS
45
+ sha256: "<64 hex chars>"
46
+ - path: .cursorrules
47
+ kind: bridge
48
+ sha256: null # null permitted for non-content markers
49
+ merged_keys: # optional, per-tool (P1.1)
50
+ - file: .mcp.json
51
+ json_pointer: "/mcpServers/agent-config"
52
+ ```
53
+
54
+ ### Top-level fields
55
+
56
+ | Field | Type | Owner | Notes |
57
+ |---|---|---|---|
58
+ | `schema_version` | int | machine | always `2` on write |
59
+ | `agent_config_version` | str | machine | last writer's package version |
60
+ | `deploy_roots` | list[str] | machine | optional; directories the doctor command surveys for foreign files. Omitted when empty. Falls back to `DEFAULT_DEPLOY_ROOTS` when consumers need a survey scope and no explicit list is present. |
61
+ | `tools` | list[obj] | machine | install-order preserved, not alphabetised |
62
+
63
+ ### Per-tool fields
64
+
65
+ | Field | Type | Required | Notes |
66
+ |---|---|---|---|
67
+ | `name` | str | yes | one of `_VALID_TOOLS` in `scripts/install.py` |
68
+ | `scope` | str | yes | `global` (user-home) or `project` (workspace bridge) |
69
+ | `bridge_marker` | str | yes | absolute / `~`-prefixed for global; repo-relative for project |
70
+ | `installed_at` | str | yes | ISO date; informational only |
71
+ | `status` | str | no | `installed` (default when absent) or `uninstalling`; two-phase uninstall (P2.2). A crashed uninstall leaves the entry in `uninstalling` — `agent-config prune --resume-uninstall` sweeps only those entries' `files[]` without touching healthy tools or unmanaged drift. |
72
+ | `files` | list[obj] | no | content the installer deployed for this tool |
73
+ | `merged_keys` | list[obj] | no | named keys this tool inserted into shared JSON files |
74
+
75
+ ### `files[]` entries
76
+
77
+ | Field | Type | Notes |
78
+ |---|---|---|
79
+ | `path` | str | repo-relative for project-scope, `~`-prefixed for global |
80
+ | `kind` | str | one of `FILE_KINDS = {bridge, deployed, marker}` |
81
+ | `sha256` | str / null | 64 hex chars of the file's SHA-256 at install time, or `null` for markers / pointers without content |
82
+
83
+ `kind` semantics:
84
+
85
+ - **`bridge`** — team-pointer marker like `.cursorrules` or `.windsurf/PROJECT_MANAGED_BY_AGENT_CONFIG`. Existence-tracked, content-untracked.
86
+ - **`deployed`** — bundle content the installer wrote (e.g. `.augment/rules/*.md`). Content-tracked via `sha256` so drift is detectable.
87
+ - **`marker`** — one-off sentinel (e.g. `claude-desktop` install marker). Existence-only.
88
+
89
+ ### `merged_keys[]` entries
90
+
91
+ | Field | Type | Notes |
92
+ |---|---|---|
93
+ | `file` | str | repo-relative path to the shared file (e.g. `.mcp.json`) |
94
+ | `json_pointer` | str | RFC 6901 pointer. **Constraint:** must target an object key, never an array index. Array-index pointers shift on neighbour-tool uninstall and corrupt other packages' ownership. |
95
+
96
+ The pointer constraint is enforced at write time in P1.5; readers in v2.x
97
+ must reject manifests that contain array-index pointers.
98
+
99
+ ## Compatibility — reader tolerance
100
+
101
+ - `read_manifest` accepts both v1 and v2 wire formats.
102
+ - When `pyyaml` is available, v2 round-trips fully.
103
+ - When `pyyaml` is missing, the manual fallback parser extracts v1-equivalent fields (top-level scalars + per-tool scalar fields) and **silently drops** v2 nested fields (`files`, `merged_keys`, `deploy_roots`). Callers that need full v2 fidelity must ensure `pyyaml` is on the path.
104
+
105
+ ## Compatibility — writer behaviour
106
+
107
+ - `write_manifest(path, version, tools, *, deploy_roots=None)` always emits `schema_version: 2`.
108
+ - Optional v2 fields (`deploy_roots`, per-tool `files` / `merged_keys` / `status`) are emitted only when non-empty, so a v1-shaped call produces a v2 file that is structurally minimal and v1-readable for the core fields.
109
+ - All writes are crash-safe via [`scripts/_lib/fs_atomic.py`](../../scripts/_lib/fs_atomic.py) (`write_atomic`: tmp + fsync + rename + parent-dir fsync). See P1.0 of the multi-package roadmap.
110
+
111
+ ## Determinism
112
+
113
+ Required by P1.3 (not yet enforced in v2.0 of the writer):
114
+
115
+ 1. `tools[]` order = install order (no re-sort).
116
+ 2. `files[]` order within a tool = sorted by `path` ascending.
117
+ 3. `merged_keys[]` order within a tool = sorted by `(file, json_pointer)` ascending.
118
+ 4. `deploy_roots[]` order = as supplied by the writer (caller-controlled).
119
+
120
+ Determinism is what lets the doctor command produce stable diffs across team members.
121
+
122
+ ## Inline package tag (P5 — non-authoritative)
123
+
124
+ Deployed Markdown files may carry a frontmatter tag that records provenance for human readers:
125
+
126
+ ```yaml
127
+ ---
128
+ title: My rule
129
+ package: event4u/agent-config
130
+ source_path: config/rules/general.md
131
+ ---
132
+ ```
133
+
134
+ Properties:
135
+
136
+ - **Optional.** Files without a leading `---` frontmatter block are deployed as-is; no synthetic frontmatter is added (P5.1).
137
+ - **Human-readable only.** The lockfile remains the single source of truth for ownership, prune, and uninstall decisions. Removing or hand-editing the inline tag does **not** alter prune / uninstall semantics (P5.3).
138
+ - **Surfaced by doctor.** A frontmatter-bearing file whose `package:` value disagrees with this writer's identifier — or whose `package:` key has been removed — appears under the `tag-drift` category of `agent-config doctor` (P5.2). Tag-drift exit code = 1, same as other drift; fix hint points at `--force` re-install.
139
+ - **Idempotent.** Re-installation rewrites the same `package:` / `source_path:` values; running install twice produces byte-identical Markdown.
140
+ - **`source_path:` (not `source:`).** The injected provenance-path key is named `source_path:` to avoid collision with the established `source: package` origin-type marker used by 200+ rule files in this and downstream packages. The injector treats `source:` as a foreign key and never rewrites it.
141
+
142
+ Neighbour packages writing into the same project SHOULD use their own `package:` identifier so doctor can distinguish authored ownership at a glance, but they MUST still register their files in the manifest — the inline tag is a UX affordance, not a substitute for the lockfile entry.
@@ -48,12 +48,14 @@ Six **DX-comfort** keys can be carried across every project that uses
48
48
  `event4u/agent-config` by storing them once in a user-global file at:
49
49
 
50
50
  ```
51
- ~/.config/agent-config/agent-settings.yml
51
+ ~/.event4u/agent-config/agent-settings.yml
52
52
  ```
53
53
 
54
- The path is XDG-style and matches the existing
55
- `~/.config/agent-config/` directory used for `anthropic.key`,
56
- `openai.key`, and `council-spend.jsonl`.
54
+ The path namespaces every event4u-owned user-global artefact under one
55
+ root same place where `anthropic.key`, `openai.key`, and
56
+ `council-spend.jsonl` now live. Pre-2.4 installs that still keep these
57
+ files under `~/.config/agent-config/` are read as a fallback until the
58
+ namespace migration shim moves them.
57
59
 
58
60
  **Whitelist (locked, exact dotted paths)** — only these six keys are
59
61
  mergeable from the user-global file; every other key is silently ignored:
@@ -71,7 +73,7 @@ caveman.speak_scope
71
73
 
72
74
  ```
73
75
  1. Package defaults (shipped by event4u/agent-config)
74
- 2. ~/.config/agent-config/agent-settings.yml (user-global · whitelist-filtered)
76
+ 2. ~/.event4u/agent-config/agent-settings.yml (user-global · whitelist-filtered · legacy ~/.config/agent-config/ read as fallback)
75
77
  3. <repo-root>/.agent-settings.yml (project-wide · all keys)
76
78
  4. <intermediate-dir>/.agent-settings.yml (subsystem-scoped · all keys · optional)
77
79
  5. <CWD>/.agent-settings.yml (deepest · all keys · wins)
@@ -126,7 +128,7 @@ Rules:
126
128
  consumers should pin.
127
129
  - **Owned by the project, not the developer.** Lives in
128
130
  `.agent-settings.yml` (committed), reviewed in PRs like any other
129
- config change. Never merged from `~/.config/agent-config/agent-settings.yml`.
131
+ config change. Never merged from `~/.event4u/agent-config/agent-settings.yml`.
130
132
  - **Resolver enforcement.** `npx @event4u/agent-config <cmd>`
131
133
  compares the resolved CLI version against the pin; mismatch
132
134
  triggers a re-exec at the pinned version
@@ -150,22 +152,23 @@ Rules:
150
152
  | `chat_history.on_overflow` | per profile | `rotate` drops oldest, `compress` marks for summarization (see matrix below). |
151
153
  | `onboarding.onboarded` | `false` | Whether `/onboard` has run. The `onboarding-gate` rule prompts for `/onboard` while this is `false`. |
152
154
  | `ai_council.enabled` | `false` | Master switch for the `/council` command. Even when enabled, every consultation asks before spending tokens. |
153
- | `ai_council.members.<provider>.enabled` | `false` | Per-provider opt-in (`anthropic`, `openai`). Tokens live in `~/.config/agent-config/<provider>.key` (mode 0600), never in this file. |
155
+ | `ai_council.members.<provider>.enabled` | `false` | Per-provider opt-in (`anthropic`, `openai`). Tokens live in `~/.event4u/agent-config/<provider>.key` (mode 0600), never in this file. Legacy `~/.config/agent-config/<provider>.key` is read as a fallback. |
154
156
  | `ai_council.members.<provider>.model` | per provider | Which model the provider sends the query to (e.g. `claude-sonnet-4-5`, `gpt-4o`). |
155
157
  | `ai_council.cost_budget.max_input_tokens` | `50000` | Hard cap on summed input tokens per `/council` invocation. |
156
158
  | `ai_council.cost_budget.max_output_tokens` | `20000` | Hard cap on summed output tokens per `/council` invocation. |
157
159
  | `ai_council.cost_budget.max_calls` | `10` | Maximum council members per invocation. |
158
160
  | `ai_council.cost_budget.max_total_usd` | `0.0` | Per-invocation USD ceiling. `0` disables (token caps still apply). |
159
- | `ai_council.cost_budget.daily_limit_usd` | `0.0` | Rolling 24h USD ceiling across all `/council` calls. `0` disables. Ledger lives at `~/.config/agent-config/council-spend.jsonl` (mode 0600). |
161
+ | `ai_council.cost_budget.daily_limit_usd` | `0.0` | Rolling 24h USD ceiling across all `/council` calls. `0` disables. Ledger lives at `~/.event4u/agent-config/council-spend.jsonl` (mode 0600). |
160
162
  | `ai_council.session_retention_days` | `14` | Auto-prune for `agents/council-sessions/` audit folders. Older session directories are removed on the next `save()`. `0` disables (keep forever). |
161
163
 
162
164
  > **Experimental.** AI Council is not yet validated by external users. API costs apply per consultation.
163
165
 
164
166
  Council API tokens are installed via `./agent-config keys:install-anthropic`
165
167
  and `./agent-config keys:install-openai` — they prompt on `/dev/tty`, write to
166
- `~/.config/agent-config/<provider>.key` with mode `0600`, and never accept env
167
- vars. The `/council` command refuses to run if the key file's permissions
168
- drift.
168
+ `~/.event4u/agent-config/<provider>.key` with mode `0600`, and never accept env
169
+ vars. Pre-2.4 installs at `~/.config/agent-config/<provider>.key` are still
170
+ honoured by the loaders as a fallback. The `/council` command refuses to run
171
+ if the key file's permissions drift.
169
172
 
170
173
  ### Cost profiles
171
174
 
@@ -316,9 +319,10 @@ shadowed.
316
319
  | `agents/roadmaps/` | ❌ No — project-rooted only. | ❌ No. | Active delivery plans. |
317
320
  | `agents/state/`, `agents/memory/`, `agents/work_engine/`, `agents/.agent-prices.md`, `agents/council-*/` | ❌ No — stateful / session-scoped. | ❌ No. | Per-session state, not shareable. |
318
321
 
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
+ **User-global asymmetry.** `~/.event4u/agent-config/agents/overrides/`
323
+ is the only user-global overlay path consulted by the loader (the
324
+ legacy `~/.config/agent-config/agents/overrides/` tree is read as a
325
+ fallback). Files under `~/.event4u/agent-config/agents/contexts/` or
322
326
  `.../agents/decisions/` are silently skipped — these kinds are
323
327
  project-shaped and must not leak across projects.
324
328
 
@@ -343,9 +347,11 @@ finished. There is no prompt — the user updates when they want with
343
347
  Update: npx @event4u/agent-config update
344
348
  ```
345
349
 
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.
350
+ State is persisted at `~/.event4u/agent-config/update-check.json`
351
+ (mode `0600`; the legacy `~/.config/agent-config/update-check.json`
352
+ is read as a fallback) sibling of `anthropic.key`,
353
+ `council-spend.jsonl`. The fetch is hard-capped at 1 s and silent on
354
+ any error.
349
355
 
350
356
  ### Suppression matrix
351
357
 
@@ -10,6 +10,12 @@ phase: post-v2.1.0 · simplicity-and-everywhere
10
10
 
11
11
  # ADR-007 — Agent Discovery Scopes: Global-Default Install Model
12
12
 
13
+ > **Update (v2.4, 2026-05-13):** the user-scope dir was relocated from
14
+ > `~/.config/agent-config/` to `~/.event4u/agent-config/` by
15
+ > [`ADR-009`](ADR-009-event4u-namespace.md). The legacy path is still
16
+ > read as a back-compat fallback. The discovery-scope contract in this
17
+ > ADR is otherwise unchanged.
18
+ >
13
19
  > **Note (post-acceptance):** the one-shot installer command was later
14
20
  > renamed from `npx @event4u/create-agent-config init` to
15
21
  > `npx @event4u/agent-config init` when the standalone wrapper package
@@ -0,0 +1,188 @@
1
+ ---
2
+ adr: 009
3
+ status: accepted
4
+ date: 2026-05-13
5
+ decision: event4u-namespace-and-claude-desktop-zip-bundles
6
+ supersedes: —
7
+ superseded_by: —
8
+ phase: v2.4 · namespace-and-claude-desktop
9
+ ---
10
+
11
+ # ADR-009 — `~/.event4u/agent-config/` namespace + Claude Desktop ZIP bundles
12
+
13
+ ## Status
14
+
15
+ **Accepted** · 2026-05-13 · signed off by Matze after the user ask
16
+ *"auf globaler ebene sollen unsere dateien in einem
17
+ .event4u/agent-config Folder im user ordner landen"* combined with the
18
+ Claude Desktop deployment gap surfaced in the same turn (the v1
19
+ `marker-only` integration did not actually make any skill visible to
20
+ the Customize → Skills panel). Implementation tracked in
21
+ [`agents/roadmaps/road-to-event4u-namespace-and-claude-desktop.md`](../../agents/roadmaps/road-to-event4u-namespace-and-claude-desktop.md).
22
+
23
+ ## Context
24
+
25
+ ADR-007 made global-first install the default and seeded the
26
+ user-scope state at `~/.config/agent-config/` (XDG-style). Two pain
27
+ points surfaced in production use:
28
+
29
+ 1. **Namespace collision risk.** `~/.config/agent-config/` is a
30
+ generic-sounding path. Future tools owned by event4u (or
31
+ third-party suites named `agent-config`) would step on the same
32
+ prefix. The user requested a vendor-owned umbrella:
33
+ `~/.event4u/agent-config/`.
34
+ 2. **Claude Desktop deployment was a stub.** `scripts/install.py`
35
+ wrote a `claude-desktop.md` marker file under
36
+ `~/.config/agent-config/claude-desktop/` and called it done. Claude
37
+ Desktop does **not** auto-discover skills from any filesystem path
38
+ — the user must upload each skill through **Settings → Customize →
39
+ Skills → Upload**. Research against `nextlevelbuilder/ui-ux-pro-max-skill`
40
+ and the Anthropic Skills API docs confirmed there is no public
41
+ bulk-upload API for personal installs (the `/v1/skills` endpoint is
42
+ workspace + code-execution gated).
43
+
44
+ Tool anchors (`~/.claude/`, `~/.augment/`, `~/.cursor/`,
45
+ `~/.codeium/windsurf/`) are owned by the host tool and must **not** be
46
+ moved — those paths are conventionalised by the tool itself.
47
+
48
+ ## Decision
49
+
50
+ Two coordinated moves:
51
+
52
+ ### 1. Package-owned user-scope state lives under `~/.event4u/agent-config/`
53
+
54
+ | Old path | New path |
55
+ |-----------------------------------------------------|---------------------------------------------------------|
56
+ | `~/.config/agent-config/agent-settings.yml` | `~/.event4u/agent-config/agent-settings.yml` |
57
+ | `~/.config/agent-config/installed.lock` | `~/.event4u/agent-config/installed.lock` |
58
+ | `~/.config/agent-config/installed-tools.yml` | `~/.event4u/agent-config/installed-tools.yml` |
59
+ | `~/.config/agent-config/update-check.json` | `~/.event4u/agent-config/update-check.json` |
60
+ | `~/.config/agent-config/ai-council/` | `~/.event4u/agent-config/ai-council/` |
61
+
62
+ Path resolution lives in `scripts/_lib/user_global_paths.py`:
63
+
64
+ - `event4u_root()` — primary path; honours `EVENT4U_HOME` override.
65
+ - `legacy_xdg_root()` — read-only fallback for unmigrated installs.
66
+ - `resolve(name)` — returns the primary path; if absent and the legacy
67
+ copy exists, returns the legacy path. Writes always target the
68
+ primary path.
69
+
70
+ A one-shot auto-migration shim runs on first post-upgrade
71
+ `init`/`update`/`uninstall`:
72
+
73
+ 1. If `~/.event4u/agent-config/` already exists → no-op.
74
+ 2. Otherwise, copy every file from `~/.config/agent-config/` to the
75
+ new path, preserving mtimes.
76
+ 3. Drop a `MIGRATED.md` breadcrumb in the legacy dir pointing at the
77
+ new home. Legacy files stay readable; loaders fall back to them
78
+ until the next install overwrites the primary path.
79
+
80
+ Tool anchors are **untouched**. The umbrella applies only to
81
+ package-owned files.
82
+
83
+ ### 2. Claude Desktop deployment = per-skill ZIP bundles
84
+
85
+ `scripts/_lib/claude_desktop_bundler.py` walks `.claude/skills/`,
86
+ dereferences symlinks, and packs each `<skill-name>/` folder into a
87
+ self-contained ZIP under
88
+ `~/.event4u/agent-config/claude-desktop/bundles/<skill-name>.zip`.
89
+
90
+ - Exclusions: `__pycache__/`, `.git*`, `*.pyc`, `.DS_Store`.
91
+ - Atomic writes via `tempfile` + `os.replace`.
92
+ - SHA-256 sidecar (`<name>.zip.sha256`) drives content-hash idempotency.
93
+ - Repeat runs write 0 bundles when source unchanged; `--force` rebuilds.
94
+
95
+ The user imports the ZIPs manually via Claude Desktop → Settings →
96
+ Customize → Skills → Upload. The install summary surfaces the bundle
97
+ path and count so the user can paste it into Finder / Explorer.
98
+
99
+ ## Consequences
100
+
101
+ ### Positive
102
+
103
+ - **Vendor namespace is reserved.** Future event4u-owned packages can
104
+ drop sibling dirs under `~/.event4u/` without colliding with the
105
+ XDG-shape of other suites.
106
+ - **Claude Desktop integration is real.** v2.4 produces 276 ZIPs from
107
+ the package's own `.claude/skills/` and the import flow is
108
+ click-through, no terminal.
109
+ - **Migration is zero-action.** Existing users keep working — the
110
+ shim copies on first install and the legacy fallback covers any
111
+ loader that hasn't been re-run yet.
112
+ - **Override-friendly.** `EVENT4U_HOME` lets CI / sandbox / multi-tenant
113
+ layouts redirect the root without monkey-patching.
114
+
115
+ ### Negative
116
+
117
+ - **Manual upload step for Claude Desktop.** Until Anthropic ships a
118
+ public per-user Skills API, every fresh install / bundle refresh
119
+ requires the user to re-upload through Customize. The bundle count
120
+ in the install summary is the closest we can get to closing this loop.
121
+ - **Two read paths during transition.** Loaders must consult both
122
+ `event4u_root()` and `legacy_xdg_root()` for the next two minor
123
+ versions. Once usage telemetry shows the legacy dir is consistently
124
+ empty, we can retire the fallback.
125
+ - **Symlink semantics differ across platforms.** The bundler
126
+ `dereferences` symlinks during ZIP creation; on Windows this means
127
+ skills must not rely on cross-volume symlinks at pack time.
128
+
129
+ ### Neutral
130
+
131
+ - Tool anchors (`~/.claude/`, `~/.augment/`, …) keep their owner. This
132
+ ADR explicitly does **not** propose moving them under
133
+ `~/.event4u/`.
134
+
135
+ ## Rollback / kill-switch
136
+
137
+ If the migration corrupts user state, the rollback path is **manual but
138
+ zero-data-loss** by design:
139
+
140
+ 1. **Legacy tree is never auto-deleted.** Even after the breadcrumb is
141
+ written, `~/.config/agent-config/` retains every file. The user can
142
+ reinstate it by deleting `~/.event4u/agent-config/` and re-running
143
+ `bash install.sh --global` — the shim will re-copy from the legacy
144
+ tree if the new root is absent.
145
+ 2. **Per-entry atomic write.** Each top-level entry is copied to a
146
+ sibling `<name>.event4u-partial-<pid>` and then `os.replace`'d into
147
+ place. A crash mid-copy leaves `*.event4u-partial-*` debris that the
148
+ next run purges before retrying — a partial subdirectory is never
149
+ mistaken for a completed copy.
150
+ 3. **`EVENT4U_HOME` env override.** A user who needs to point the
151
+ resolver at a known-good state (e.g. a restored backup) can set
152
+ `EVENT4U_HOME=/path/to/restored/agent-config` without editing any
153
+ config file.
154
+ 4. **Bundler is hash-gated.** If `claude_desktop_bundler.py` ever
155
+ produces a corrupt ZIP, the SHA-256 sidecar diverges from the source
156
+ manifest and the next run rewrites it. `--force` forces a full
157
+ rebuild from scratch.
158
+ 5. **Out-of-scope failure modes.** Disk exhaustion mid-copy, permission
159
+ bit corruption on cross-filesystem moves, and unicode-NFC normalisation
160
+ drift on macOS HFS+ → APFS migrations are **not** auto-recovered.
161
+ Users hit by those run the manual rollback in step 1.
162
+
163
+ ## Alternatives considered
164
+
165
+ 1. **Symlink `~/.event4u/agent-config/` ↔ `~/.config/agent-config/`.**
166
+ Rejected: doubles the surface (loaders still need both paths in
167
+ memory) and creates a removal hazard (`rm -rf ~/.config/agent-config`
168
+ wipes the new home too).
169
+ 2. **Anthropic `/v1/skills` API client for Claude Desktop.** Rejected:
170
+ the endpoint is workspace + code-execution gated, not viable for
171
+ personal installs. Captured as a follow-up if user demand surfaces.
172
+ 3. **Single mega-ZIP of all skills.** Rejected: Customize → Skills
173
+ imports one skill per ZIP. A combined archive would require the
174
+ user to extract + re-zip locally, defeating the purpose.
175
+ 4. **Hard-cut migration (delete legacy on first run).** Rejected: a
176
+ crash mid-copy would leave the user with neither path readable.
177
+ The current shim is copy-then-breadcrumb, leaving the legacy dir
178
+ intact for at least one more cycle.
179
+
180
+ ## References
181
+
182
+ - [`agents/roadmaps/road-to-event4u-namespace-and-claude-desktop.md`](../../agents/roadmaps/road-to-event4u-namespace-and-claude-desktop.md)
183
+ - [`scripts/_lib/user_global_paths.py`](../../scripts/_lib/user_global_paths.py)
184
+ - [`scripts/_lib/claude_desktop_bundler.py`](../../scripts/_lib/claude_desktop_bundler.py)
185
+ - [`docs/setup/per-ide/claude-desktop.md`](../setup/per-ide/claude-desktop.md)
186
+ - [`docs/migration/v1-to-v2.md`](../migration/v1-to-v2.md) § v2 → v2.4
187
+ - ADR-007 (predecessor — global-first install scopes)
188
+ - ADR-008 (sibling — installed-tools manifest)
@@ -12,6 +12,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
12
12
  | [ADR-006](ADR-006-skill-tools-python-pilot.md) | Skill Tools Python Pilot Pass | accepted | 2026-05-09 | — |
13
13
  | [ADR-007](ADR-007-agent-discovery-scopes.md) | Global Default Install With Export Subcommand | accepted | 2026-05-12 | — |
14
14
  | [ADR-008](ADR-008-installed-tools-manifest.md) | Committed Installed Tools Manifest Separate From Settings | proposed | 2026-05-12 | — |
15
+ | [ADR-009](ADR-009-event4u-namespace.md) | Event4U Namespace And Claude Desktop Zip Bundles | accepted | 2026-05-13 | — |
15
16
 
16
17
  ## Unnumbered (legacy)
17
18