@softspark/ai-toolkit 4.10.1 → 4.12.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/CHANGELOG.md CHANGED
@@ -7,6 +7,44 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v4.12.0 — Global-first editor installs + Codex path fix (2026-07-02)
11
+
12
+ Minor release. Expands global (HOME-scoped) installs to every editor with a documented, merge-safe file surface, and fixes a Codex global-install bug where instructions landed in a file Codex never reads. Test count: 1203 → 1208.
13
+
14
+ ### Fixed
15
+ - **Codex global instructions path** — `ai-toolkit install --editors codex` and `ai-toolkit plugin install --editor codex` wrote to `~/AGENTS.md`, which Codex never loads as global instructions, so global installs delivered zero instructions. Now write `~/.codex/AGENTS.md` (the documented `$CODEX_HOME/AGENTS.md`), strip the stale `~/AGENTS.md` toolkit section on upgrade, and warn when `~/.codex/AGENTS.override.md` would mask it.
16
+ - **Codex plugin-pack rules** — pack rules were copied to `~/.agents/rules/`, a directory Codex never reads; now marker-injected into `~/.codex/AGENTS.md`, with legacy dead files cleaned on install/remove (`scripts/plugin.py`).
17
+ - **`inject-hook` Codex event parity** — `CODEX_EVENTS` propagated only 5 of the 9 events `scripts/generate_codex_hooks.py` wires; added `PermissionRequest`, `SubagentStart`, `SubagentStop`, `PreCompact`.
18
+
19
+ ### Added
20
+ - **Global native surfaces for 7 editors** — `install_ai_tools` now threads `--profile` and installs each editor's documented HOME surfaces (gated like the local install): **Gemini** (hooks `~/.gemini/settings.json`, `~/.gemini/commands/`, skills pointer), **Augment** (`~/.augment/agents/`, `~/.augment/commands/`, hooks), **Roo/Zoo** (skills via `~/.agents/skills`), **Windsurf** (`~/.config/devin/AGENTS.md` for Devin CLI), **Cursor** (`~/.cursor/hooks.json`), **GitHub Copilot** (`~/.copilot/` instructions), **Google Antigravity** (skill pointer to `~/.gemini/config/skills` and `~/.gemini/antigravity-cli/skills`).
21
+
22
+ ### Changed
23
+ - **`GLOBAL_CAPABLE_EDITORS`** — added `cursor`, `copilot`, and `antigravity` (scoped: cursor = hooks, copilot = instructions, antigravity = skills; RULES stay project-local where no mergeable global file surface exists).
24
+ - **`generate_copilot.py`** and **`generate_antigravity.py`** gained global layouts (`config_root=~/.copilot`; `generate_global()`).
25
+
26
+ ### Ecosystem
27
+ - **Roo → Zoo Code** (class D) — `RooCodeInc/Roo-Code` archived (frozen v3.54.0, dead release feed); retargeted the feed to the successor `Zoo-Code-Org/Zoo-Code` and added skills/commands config paths. (class F) Global skill install via `~/.agents/skills`.
28
+ - **Cursor** (class F) global `~/.cursor/hooks.json`; (class D) `.cursorrules` demoted to legacy (dropped from official rules docs).
29
+ - **GitHub Copilot** (class F) documented `~/.copilot/` user-level surface adopted.
30
+ - **Google Antigravity** (class F) global skill dirs adopted; `~/.gemini/config/mcp_config.json` global MCP path resolved and recorded (adapter is backlog).
31
+ - **Gemini / Augment** (class F) hooks/commands/agents made global.
32
+ - Version refresh: Gemini v0.49.0, Codex 0.142.5, Auggie 0.31.0, Antigravity CLI 1.0.14, Claude Code 2.1.198; Devin `read_config_from` 7-key matrix. Snapshot re-baselined via `scripts/ecosystem_doctor.py --update`.
33
+
34
+ ## v4.11.0 — Claude rules-space fix + editor registry parity (2026-06-30)
35
+
36
+ Minor release. Reduces Claude Code startup context pressure by moving ai-toolkit rules out of global/project `CLAUDE.md` inline blocks and into Claude Code rule files. Also finishes the editor registry sync by recording all Gemini generators in the canonical ecosystem registry. Test count: 1198 → 1203.
37
+
38
+ ### Changed
39
+ - **Claude Code global rules now use `~/.claude/rules/ai-toolkit-*.md`.** `ai-toolkit install/update` writes toolkit rules from `app/rules/*.md` and registered rules from `~/.softspark/ai-toolkit/rules/*.md` into Claude Code user-level rule files, keeps `~/.claude/CLAUDE.md` as a compact index, and removes legacy inline rule markers during migration. The `ai-toolkit-*` prefix is installer-managed.
40
+ - **Claude Code common rules now use `.claude/rules/ai-toolkit-*.md`.** `install --local` writes `ai-toolkit-coding-style.md`, `ai-toolkit-git-workflow.md`, `ai-toolkit-performance.md`, `ai-toolkit-security.md`, and `ai-toolkit-testing.md` under `.claude/rules/` with `paths: ["**/*"]` frontmatter, while `.claude/CLAUDE.md` stays a compact index. This follows Claude Code's current guidance to keep `CLAUDE.md` concise and move larger instruction sets into scoped rules.
41
+ - **Language rules reference updated.** `kb/reference/language-rules.md` now documents the Claude-specific split: common rules as project-local Claude rules, per-language rules as knowledge skills, and other editors still receiving native rule files from their generators.
42
+ - **Ecosystem registry reflects Gemini native surfaces.** `scripts/ecosystem_tools.json` now includes `generate_gemini_hooks.py`, `generate_gemini_commands.py`, and `generate_gemini_skills.py` alongside `generate_gemini.py`, matching the installer and supported-tools registry.
43
+ - **Ecosystem doctor baseline refreshed.** Snapshot updated after class A/C upstream documentation drift review; no additional generator contract changes were required.
44
+
45
+ ### Fixed
46
+ - **Claude rules-space regression.** Global Claude installs no longer inline toolkit/registered rules into `~/.claude/CLAUDE.md`, and project-local Claude installs no longer inflate `.claude/CLAUDE.md` with the full common-rule corpus. Regression tests now assert compact CLAUDE.md indexes, generated rule files, legacy marker cleanup, and managed `.claude/rules/ai-toolkit-*.md` refresh behavior.
47
+
10
48
  ## v4.10.1 — Copilot AGENTS.md install + Claude KB-first rule (2026-06-23)
11
49
 
12
50
  Patch release. Fixes two governance regressions found in the editor-update audit: Copilot installs now emit the root `AGENTS.md` surface documented in the registry, and Claude Code receives the KB-first rule in `CLAUDE.md`, which it actually reads. Test count: 1195 → 1198.
package/README.md CHANGED
@@ -6,18 +6,17 @@
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
7
  [![Skills](https://img.shields.io/badge/skills-108-brightgreen)](app/skills/)
8
8
  [![Agents](https://img.shields.io/badge/agents-44-blue)](app/agents/)
9
- [![Tests](https://img.shields.io/badge/tests-1198%20passing-success)](tests/)
9
+ [![Tests](https://img.shields.io/badge/tests-1208%20passing-success)](tests/)
10
10
 
11
- ## What's New in v4.10.1
11
+ ## What's New in v4.12.0
12
12
 
13
- v4.10.1 fixes editor-governance gaps found in the release audit.
13
+ v4.12.0 makes global (HOME-scoped) installs first-class for every editor with a documented file surface, and fixes a Codex global-install bug.
14
14
 
15
- - **Copilot local installs now emit root `AGENTS.md`**: `ai-toolkit install --local --editors copilot` writes the generated agent catalog into a `TOOLKIT:copilot-agents` section while preserving existing Codex/opencode sections and user text.
16
- - **Claude Code KB-first enforcement restored**: `CLAUDE.md` now carries the mandatory `smart_query()` / `hybrid_search_kb()` rule before technical/project answers, instead of relying on generated `AGENTS.md`.
17
- - **Codex PostToolUse hook output fixed**: `loop-guard.sh` no longer forces Claude-style JSON with `suppressOutput` under quiet Codex hooks.
18
- - **Release packaging hardened**: local `.claude` session artifacts under `app/` are excluded from `npm pack`, even if they exist in a maintainer checkout.
19
- - **Docs and ecosystem baseline refreshed**: README, registry, and architecture docs now match the Copilot implementation; ecosystem-doctor snapshot is refreshed for upstream Claude/Gemini docs hash drift.
20
- - **Test count**: 1195 → 1198.
15
+ - **Codex global path fix**: `install --editors codex` now writes `~/.codex/AGENTS.md` (the file Codex actually reads) instead of the never-loaded `~/AGENTS.md`; upgrades strip the stale section.
16
+ - **Global installs for 7 editors**: Gemini (hooks/commands/skills), Augment (agents/commands/hooks), Roo/Zoo (skills), Windsurf (`~/.config/devin/AGENTS.md`), plus new global support for Cursor (`~/.cursor/hooks.json`), GitHub Copilot (`~/.copilot/`), and Antigravity (skill pointer).
17
+ - **Roo Zoo Code**: retargeted the dead `RooCodeInc/Roo-Code` release feed to the active successor `Zoo-Code-Org/Zoo-Code`.
18
+ - **Ecosystem refresh**: Gemini v0.49.0, Codex 0.142.5, Auggie 0.31.0, Antigravity CLI 1.0.14, Claude Code 2.1.198; snapshot re-baselined.
19
+ - **Test count**: 1203 1208.
21
20
 
22
21
  See [CHANGELOG.md](CHANGELOG.md) for full history.
23
22
 
@@ -102,7 +101,7 @@ See [CLI Reference](kb/reference/cli-reference.md) for all commands and options.
102
101
 
103
102
  | Platform | Config Files | Hooks | Scope |
104
103
  |----------|-------------|:-----:|-------|
105
- | Claude Code | `~/.claude/` | ✅ | global |
104
+ | Claude Code | `~/.claude/agents`, `~/.claude/skills`, `~/.claude/rules/*.md`, `~/.claude/settings.json` | ✅ | global |
106
105
  | Cursor | `.cursor/rules/*.mdc` + `.cursor/mcp.json` + `.cursor/skills/*` | ✅ | project (`~/.cursor/mcp.json` for MCP only) |
107
106
  | Windsurf (Devin Desktop) | `~/.codeium/.../global_rules.md` + `~/.codeium/windsurf/skills/*` + `.devin/rules/*.md` + `.windsurf/rules/*.md` (legacy) | ✅ | global + project |
108
107
  | Gemini CLI | `~/.gemini/GEMINI.md` | ✅ | global |
@@ -130,7 +129,7 @@ See [CLI Reference](kb/reference/cli-reference.md) for all commands and options.
130
129
  | `hooks/` | 29 entries / 14 events | Quality gates, path safety, prompt governance, loop guard, session lifecycle |
131
130
  | `plugins/` | 11 packs | Opt-in domain bundles (security, research, frontend, enterprise, 6 language packs) |
132
131
  | `constitution.md` | 7 articles | Machine-enforced safety rules |
133
- | `rules/` | auto-injected | Language-specific and custom rules injected into your configs |
132
+ | `rules/` | auto-synced | Global/project rule files for Claude and other editors |
134
133
  | `kb/` | reference docs | Architecture, procedures, and best practices |
135
134
 
136
135
  ---
@@ -142,7 +141,7 @@ ai-toolkit/
142
141
  ├── app/
143
142
  │ ├── agents/ # 44 agent definitions
144
143
  │ ├── skills/ # 108 skills (task / hybrid / knowledge)
145
- │ ├── rules/ # Auto-injected into your CLAUDE.md
144
+ │ ├── rules/ # Source rules synced into Claude/editor rule files
146
145
  │ ├── hooks/ # Hook scripts (29 entries, 14 lifecycle events)
147
146
  │ ├── plugins/ # 11 experimental plugin packs (opt-in)
148
147
  │ ├── output-styles/ # System prompt output style overrides
@@ -150,7 +149,7 @@ ai-toolkit/
150
149
  │ └── ARCHITECTURE.md # Full system design
151
150
  ├── kb/ # Reference docs, procedures, plans
152
151
  ├── scripts/ # Validation, install, evaluation scripts
153
- ├── tests/ # Bats test suite (1198 tests)
152
+ ├── tests/ # Bats test suite (1208 tests)
154
153
  └── CHANGELOG.md
155
154
  ```
156
155
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ai-toolkit",
3
3
  "description": "Professional-grade Claude Code toolkit with persona presets, skill security auditor, expanded lifecycle hooks, experimental opt-in plugin packs, benchmark harvesting, and multi-tool support.",
4
- "version": "4.10.1",
4
+ "version": "4.12.0",
5
5
  "author": {
6
6
  "name": "SoftSpark",
7
7
  "url": "https://github.com/softspark"
@@ -1,5 +1,5 @@
1
1
  {
2
- "last_run": "2026-06-23T07:06:46Z",
2
+ "last_run": "2026-07-01T22:55:24Z",
3
3
  "schema_version": 1,
4
4
  "tools": {
5
5
  "aider": {
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "augment": {
27
- "docs_hash": "a0c51061febc16c4",
27
+ "docs_hash": "04b55a2b2d496b45",
28
28
  "headings": [
29
29
  "Admin",
30
30
  "Auggie CLI",
@@ -66,7 +66,7 @@
66
66
  }
67
67
  },
68
68
  "claude-code": {
69
- "docs_hash": "c20e5688ed230a66",
69
+ "docs_hash": "338d55540b385861",
70
70
  "headings": [
71
71
  "Core concepts",
72
72
  "Documentation Index",
@@ -122,15 +122,18 @@
122
122
  "slash command": true,
123
123
  "sub-agent": true
124
124
  },
125
- "version": "2.1.186 (Claude Code)"
125
+ "version": "2.1.198 (Claude Code)"
126
126
  },
127
127
  "cline": {
128
- "docs_hash": "858fa542e2aacde5",
128
+ "docs_hash": "80209baf691558e2",
129
129
  "headings": [
130
130
  "API Reference",
131
131
  "Best Practices",
132
+ "Bring Your Own Key",
132
133
  "CLI",
134
+ "Cline (usage-billing)",
133
135
  "Cline Overview",
136
+ "ClinePass",
134
137
  "Configurations",
135
138
  "Documentation Index",
136
139
  "Features",
@@ -149,6 +152,7 @@
149
152
  "\u200bAgent Core (SDK)",
150
153
  "\u200bApplications",
151
154
  "\u200bEnterprise Solutions",
155
+ "\u200bModel access",
152
156
  "\u200bOther IDE Supports",
153
157
  "\u200bWhat is Cline?"
154
158
  ],
@@ -168,7 +172,7 @@
168
172
  }
169
173
  },
170
174
  "codex-cli": {
171
- "docs_hash": "eeb0e17a839b09bd",
175
+ "docs_hash": "ad6bbf5e29c7155f",
172
176
  "headings": [
173
177
  "API",
174
178
  "API Reference",
@@ -208,6 +212,7 @@
208
212
  "Resources",
209
213
  "Run and scale",
210
214
  "Search the Codex docs",
215
+ "Spaces",
211
216
  "Specialized models",
212
217
  "Suggested",
213
218
  "Tools",
@@ -238,7 +243,7 @@
238
243
  "version": "codex-cli 0.142.0"
239
244
  },
240
245
  "cursor": {
241
- "docs_hash": "86b6d48e8ab40d90",
246
+ "docs_hash": "080c1289cb353e6c",
242
247
  "headings": [],
243
248
  "markers": {
244
249
  ".cursor/rules": false,
@@ -254,7 +259,7 @@
254
259
  }
255
260
  },
256
261
  "gemini-cli": {
257
- "docs_hash": "c3ba6d09d810f9c3",
262
+ "docs_hash": "a0ff94dabdb6cd8a",
258
263
  "headings": [
259
264
  "Breadcrumbs",
260
265
  "Directory actions",
@@ -269,6 +274,7 @@
269
274
  "Provide feedback",
270
275
  "Saved searches",
271
276
  "Search code, repositories, users, issues, pull requests...",
277
+ "Uh oh!",
272
278
  "Use saved searches to filter your results more quickly",
273
279
  "docs",
274
280
  "parent directory"
@@ -296,7 +302,7 @@
296
302
  }
297
303
  },
298
304
  "github-copilot": {
299
- "docs_hash": "df7c22e121dbb3d1",
305
+ "docs_hash": "1f9817b3477c576b",
300
306
  "headings": [
301
307
  "About Copilot auto model selection",
302
308
  "About Copilot automations",
@@ -330,7 +336,7 @@
330
336
  }
331
337
  },
332
338
  "google-antigravity": {
333
- "docs_hash": "e6c90b9d937dd9f0",
339
+ "docs_hash": "4d2e384b2c2add18",
334
340
  "headings": [],
335
341
  "markers": {
336
342
  "AGENTS.md": false,
@@ -347,7 +353,7 @@
347
353
  }
348
354
  },
349
355
  "opencode": {
350
- "docs_hash": "302de3ac69940747",
356
+ "docs_hash": "28dcd5b88aeb84e0",
351
357
  "headings": [
352
358
  "Add features",
353
359
  "Ask questions",
@@ -407,7 +413,7 @@
407
413
  }
408
414
  },
409
415
  "windsurf": {
410
- "docs_hash": "cdd657d4d684c68a",
416
+ "docs_hash": "b457c990c531efc4",
411
417
  "headings": [
412
418
  "Accounts",
413
419
  "Advanced",
package/bin/ai-toolkit.js CHANGED
@@ -66,7 +66,7 @@ const COMMANDS = {
66
66
  reset: 'Wipe and recreate project-local configs from scratch (requires --local)',
67
67
  uninstall: 'Remove ai-toolkit from ~/.claude/',
68
68
  'add-rule': 'Register a rule file or URL in ~/.softspark/ai-toolkit/rules/ (URL rules auto-refresh on update)',
69
- 'remove-rule': 'Unregister a rule from ~/.softspark/ai-toolkit/rules/ and remove its block from CLAUDE.md',
69
+ 'remove-rule': 'Unregister a rule and remove its generated Claude rule file',
70
70
  'inject-hook': 'Inject external hooks (file or URL) into ~/.claude/settings.json (URL hooks auto-refresh on update)',
71
71
  'remove-hook': 'Remove injected hooks by source name from ~/.claude/settings.json (also unregisters URL source)',
72
72
  'inject-mcp': 'Inject external MCP template (file or URL) into ~/.mcp.json + all editor MCP configs (URL templates auto-refresh on update)',
@@ -87,7 +87,8 @@ What `install` and `update` do (merge-friendly — user content never overwritte
87
87
  | `settings.json` hooks | JSON merge via `merge-hooks.py` | User hooks + settings preserved, toolkit entries tagged `_source: ai-toolkit` |
88
88
  | `constitution.md` | Marker injection via `inject_section_cli.py` | User content outside `<!-- TOOLKIT:* -->` markers untouched |
89
89
  | `ARCHITECTURE.md` | Marker injection via `inject_section_cli.py` | Same as above |
90
- | `CLAUDE.md` | Marker injection of `app/rules/*.md` via `inject_rule_cli.py` | User content outside markers untouched |
90
+ | `CLAUDE.md` | Compact index for managed global rules | User content outside toolkit markers untouched |
91
+ | `rules/ai-toolkit-*.md` | File-based Claude Code user-level rules from `app/rules/*.md` and registered rules | `ai-toolkit-*` prefix reserved for installer-managed files |
91
92
 
92
93
  Re-running updates only toolkit content. Old whole-directory symlinks are auto-upgraded to per-file on next run.
93
94
 
@@ -135,7 +136,7 @@ ai-toolkit add-rule ./my-project-rules.md
135
136
  # → copies to ~/.softspark/ai-toolkit/rules/my-project-rules.md
136
137
 
137
138
  ai-toolkit update
138
- # → injects the rule into ~/.claude/CLAUDE.md and all global editor configs
139
+ # → syncs the rule into ~/.claude/rules/ai-toolkit-registered-*.md and all global editor configs
139
140
 
140
141
  ai-toolkit update --local
141
142
  # → also propagates as ai-toolkit-custom-<name> to directory-based editors (Cursor, Windsurf, Cline, Roo, Augment, Antigravity)
@@ -430,5 +431,6 @@ What `uninstall` does:
430
431
  - Removes per-directory skill symlinks (user skills preserved)
431
432
  - Strips toolkit hook entries from `settings.json` (user hooks + settings preserved)
432
433
  - Strips toolkit markers from `constitution.md` and `ARCHITECTURE.md` (user content preserved; empty files removed)
433
- - `~/.claude/CLAUDE.md` preserved (contains your custom rules + toolkit rule markers)
434
+ - `~/.claude/CLAUDE.md` preserved (contains your custom content + compact toolkit index)
435
+ - `~/.claude/rules/` preserved unless explicitly removed
434
436
  - Empty `agents/` and `skills/` directories cleaned up
@@ -32,7 +32,7 @@ ai-toolkit/
32
32
  app/ # All toolkit components
33
33
  agents/ # Agent definitions (.md + YAML frontmatter)
34
34
  skills/ # skills: task, hybrid, knowledge
35
- rules/ # Rules auto-injected into ~/.claude/CLAUDE.md
35
+ rules/ # Source rules synced into Claude/editor rule files
36
36
  hooks/ # Hook scripts (copied to ~/.softspark/ai-toolkit/hooks/)
37
37
  hooks.json # Hook definitions (merged into ~/.claude/settings.json)
38
38
  constitution.md # Immutable safety rules, 7 articles (marker-injected)
@@ -85,8 +85,9 @@ Machine (global) Project (local)
85
85
  skills/*/ → per-dir symlinks hooks/ ← hook scripts (copied)
86
86
  settings.json ← hooks merged here
87
87
  constitution.md ← marker injection my-project/
88
- ARCHITECTURE.md ← marker injection CLAUDE.md ← project rules
89
- CLAUDE.md ← marker injection (rules) .claude/
88
+ ARCHITECTURE.md ← marker injection CLAUDE.md ← project index
89
+ CLAUDE.md ← compact rule index .claude/
90
+ rules/*.md ← Claude user-level rules
90
91
  settings.local.json ← MCP, perms
91
92
  constitution.md ← marker injection
92
93
  ```
@@ -123,7 +124,7 @@ If a project already has `.mcp.json`, local install mirrors its `mcpServers` ent
123
124
  | `update --local` | `./` | Re-apply + refresh project-local configs |
124
125
  | `uninstall` | `~/.claude/` | Strips toolkit components (preserves user content) |
125
126
  | `add-rule <file>` | `~/.softspark/ai-toolkit/rules/` | Register rule — auto-applied on every `update` |
126
- | `remove-rule <name>` | `~/.softspark/ai-toolkit/rules/` + `~/.claude/CLAUDE.md` | Unregister rule and remove its block |
127
+ | `remove-rule <name>` | `~/.softspark/ai-toolkit/rules/` + `~/.claude/rules/` | Unregister rule and remove generated Claude rule file |
127
128
  | `mcp add <name...>` | `./.mcp.json` | Merge canonical MCP template(s) into project config |
128
129
  | `mcp install --editor <name...>` | native editor config | Render MCP template(s) into editor-native config files |
129
130
  | `validate` | toolkit | Integrity check |
@@ -29,8 +29,7 @@ model.
29
29
 
30
30
  `ai-toolkit install --local --editors codex` generates:
31
31
 
32
- - `AGENTS.md`
33
- - `.agents/rules/*.md`
32
+ - `AGENTS.md` (project root; universal coding rules inlined — Codex reads instructions only from AGENTS.md, not `.agents/rules/`)
34
33
  - `.agents/skills/*`
35
34
  - `.codex/hooks.json`
36
35
 
@@ -38,8 +37,7 @@ model.
38
37
 
39
38
  `ai-toolkit plugin install --editor codex <pack>` bootstraps or reuses:
40
39
 
41
- - `~/AGENTS.md`
42
- - `~/.agents/rules/*.md`
40
+ - `~/.codex/AGENTS.md` (the documented global instruction file; pack rules are marker-injected here, not written as unread `~/.agents/rules/` files)
43
41
  - `~/.agents/skills/*`
44
42
  - `~/.codex/hooks.json`
45
43
 
@@ -93,20 +91,27 @@ The adapter also covers skills that previously depended only on Claude's
93
91
 
94
92
  ## Hook Compatibility
95
93
 
96
- Codex does not expose the full Claude hook event surface. The Codex hook
97
- generator emits only the events supported by Codex runtime integration:
94
+ Codex does not expose the full Claude hook event surface. Codex's
95
+ `HookEventName` enum defines 10 events; the Codex hook generator wires 9 of
96
+ them:
98
97
 
99
98
  - `SessionStart`
100
99
  - `PreToolUse`
101
100
  - `PostToolUse`
101
+ - `PermissionRequest`
102
102
  - `UserPromptSubmit`
103
+ - `SubagentStart`
104
+ - `SubagentStop`
105
+ - `PreCompact`
103
106
  - `Stop`
104
107
 
105
- This means Claude-only events such as `TaskCompleted`, `TeammateIdle`,
106
- `SubagentStart`, `SubagentStop`, `PreCompact`, `SessionEnd`, and
107
- `Notification` are not available in `.codex/hooks.json`.
108
+ `PostCompact` is the one enum event left unwired (its only hook was the removed
109
+ environment-snapshot probe). Claude-only events such as `TaskCompleted`,
110
+ `TeammateIdle`, `SessionEnd`, and `Notification` have no Codex equivalent and
111
+ are not available in `.codex/hooks.json`. Handler types: only `command` runs;
112
+ `prompt` and `agent` are parsed by Codex but not yet executed.
108
113
 
109
- `inject-hook` automatically propagates Codex-compatible events to
114
+ `inject-hook` automatically propagates these 9 Codex-compatible events to
110
115
  `~/.codex/hooks.json` (global layer). Non-Codex events are silently skipped.
111
116
  `remove-hook` cleans both Claude and Codex targets.
112
117
 
@@ -21,19 +21,19 @@ This design is intentional: ai-toolkit is a generic toolkit. Consumers (MCP serv
21
21
 
22
22
  | Command | Target File | Mechanism | Idempotent |
23
23
  |---------|-------------|-----------|------------|
24
- | `inject-rule <file.md>` | `~/.claude/CLAUDE.md` | HTML comment markers (`<!-- TOOLKIT:name -->`) | Yes |
25
- | `remove-rule <name>` | `~/.claude/CLAUDE.md` | Strip markers by block name | Yes |
24
+ | `inject-rule <file.md>` | `~/.claude/CLAUDE.md` | Legacy HTML comment markers (`<!-- TOOLKIT:name -->`) | Yes |
25
+ | `remove-rule <name>` | `~/.softspark/ai-toolkit/rules/` + `~/.claude/rules/` | Unregister and remove generated Claude rule file | Yes |
26
26
  | `inject-hook <file.json\|url> [name]` | `~/.claude/settings.json` | JSON `_source` tag per entry, URL cached + registered | Yes |
27
27
  | `remove-hook <name>` | `~/.claude/settings.json` | Strip all entries with matching `_source`, unregister URL source | Yes |
28
28
  | `inject-mcp <file.json\|url> [name] [--force]` | `~/.mcp.json` + every editor with `global_path` | JSON `_source` tag per server, URL cached + registered, full editor propagation | Yes |
29
29
  | `remove-mcp <name>` | `~/.mcp.json` + every editor with `global_path` | Strip all servers with matching `_source`, clean editor configs, unregister URL | Yes |
30
- | `add-rule <file.md\|url>` | `~/.softspark/ai-toolkit/rules/` | File copy + re-inject all rules on next `update` | Yes |
30
+ | `add-rule <file.md\|url>` | `~/.softspark/ai-toolkit/rules/` | File copy + sync to `~/.claude/rules/ai-toolkit-registered-*.md` on next `update` | Yes |
31
31
  | `mcp add <name...>` | `.mcp.json` | Merge `mcpServers` block from built-in template | Yes |
32
32
  | `mcp install --editor <name...>` | Native editor MCP config | Render canonical template into editor format | Yes |
33
33
 
34
34
  ## inject-rule
35
35
 
36
- Injects a Markdown rules file into `~/.claude/CLAUDE.md` between named HTML comment markers.
36
+ Legacy direct injection: injects a Markdown rules file into `~/.claude/CLAUDE.md` between named HTML comment markers. Prefer `add-rule` for persistent global rules; `ai-toolkit update` syncs those into Claude Code user-level rule files under `~/.claude/rules/`.
37
37
 
38
38
  ```bash
39
39
  npx @softspark/ai-toolkit inject-rule ./my-tool-rules.md
@@ -52,7 +52,7 @@ The block name is derived from the file stem (`my-tool-rules.md` → `my-tool-ru
52
52
 
53
53
  ## remove-rule
54
54
 
55
- Strips a previously injected rule block from `~/.claude/CLAUDE.md`.
55
+ Unregisters a persistent rule, removes `~/.claude/rules/ai-toolkit-registered-<name>.md`, and strips any legacy injected rule block from `~/.claude/CLAUDE.md`.
56
56
 
57
57
  ```bash
58
58
  npx @softspark/ai-toolkit remove-rule my-tool-rules
@@ -3,9 +3,9 @@ title: "Global Install Model"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [install, global, claude, codex, plugins, local-setup]
6
- version: "3.0.1"
6
+ version: "3.1.0"
7
7
  created: "2026-03-26"
8
- last_updated: "2026-04-28"
8
+ last_updated: "2026-06-30"
9
9
  description: "Reference description of the global install target, project-local editor setup, global Codex plugin layering, and command responsibilities in ai-toolkit."
10
10
  ---
11
11
 
@@ -15,7 +15,7 @@ description: "Reference description of the global install target, project-local
15
15
 
16
16
  `ai-toolkit` installs globally into `~/.claude/` by default.
17
17
 
18
- That means one machine-level install provides agents, skills, hooks, and rules to every project without committing toolkit boilerplate into each repository.
18
+ That means one machine-level install provides agents, skills, hooks, constitution, and rule files to every project without committing toolkit boilerplate into each repository.
19
19
 
20
20
  Other editor targets are opt-in and only use documented file surfaces. Cursor
21
21
  rules stay project-local because Cursor's global user rules are managed through
@@ -57,19 +57,38 @@ The `--profile` flag controls how much of each editor's native surface is activa
57
57
 
58
58
  ## Global Editor Targets
59
59
 
60
+ Claude Code's default global install writes these managed surfaces:
61
+
62
+ - `~/.claude/agents/*.md` — per-file symlinks to toolkit agents.
63
+ - `~/.claude/skills/*/` — per-directory symlinks to toolkit skills.
64
+ - `~/.claude/settings.json` — merged hook configuration and global settings.
65
+ - `~/.claude/constitution.md` — marker-injected safety constitution.
66
+ - `~/.claude/ARCHITECTURE.md` — marker-injected architecture reference.
67
+ - `~/.claude/rules/ai-toolkit-*.md` — toolkit rules from `app/rules/*.md`.
68
+ - `~/.claude/rules/ai-toolkit-registered-*.md` — rules registered with `ai-toolkit add-rule`.
69
+ - `~/.claude/CLAUDE.md` — compact index pointing at the managed rule files.
70
+
71
+ The `ai-toolkit-*` prefix in `~/.claude/rules/` is reserved for installer-managed files. User-authored Claude rules should use another filename prefix, or be registered through `ai-toolkit add-rule` so they are emitted as `ai-toolkit-registered-*.md`.
72
+
60
73
  `ai-toolkit install --editors <name>` can write global files only for editors
61
74
  with documented, file-based config surfaces:
62
75
 
63
- - `windsurf`: `~/.codeium/windsurf/memories/global_rules.md` plus `~/.codeium/windsurf/skills/ai-toolkit-skill-catalogue/SKILL.md`
64
- - `gemini`: `~/.gemini/GEMINI.md`
65
- - `augment`: `~/.augment/rules/ai-toolkit.md`
76
+ - `windsurf`: `~/.codeium/windsurf/memories/global_rules.md` plus `~/.codeium/windsurf/skills/ai-toolkit-skill-catalogue/SKILL.md` plus `~/.config/devin/AGENTS.md` (Devin CLI global rules — the Desktop `global_rules.md` path is not imported by `read_config_from.windsurf`)
77
+ - `gemini`: `~/.gemini/GEMINI.md`; hooks at `~/.gemini/settings.json` (profile ≥ standard); `~/.gemini/commands/` and `~/.gemini/skills/` pointer (profile full)
78
+ - `augment`: `~/.augment/rules/ai-toolkit.md`; `~/.augment/agents/`, `~/.augment/commands/`, and hooks in `~/.augment/settings.json` (profile full)
66
79
  - `cline`: `~/Documents/Cline/Rules/ai-toolkit-*.md` plus `~/.cline/skills/ai-toolkit-skill-catalogue/SKILL.md`
67
- - `roo`: `~/.roo/rules/ai-toolkit-*.md`
80
+ - `roo`: `~/.roo/rules/ai-toolkit-*.md` plus `~/.agents/skills/*` (Roo/Zoo native skill discovery; skipped when `codex` is also selected, which fills the same dir)
68
81
  - `aider`: `~/.aider.conf.yml` plus `~/.aider-ai-toolkit-CONVENTIONS.md` when the YAML file does not already exist
69
- - `codex`: `~/AGENTS.md` (coding rules inlined), `~/.agents/skills/*`, `~/.codex/hooks.json`
82
+ - `codex`: `~/.codex/AGENTS.md` (coding rules inlined; the documented global instruction file — NOT `~/AGENTS.md`, which Codex never loads as global instructions), `~/.agents/skills/*`, `~/.codex/hooks.json`
70
83
  - `opencode`: `~/.config/opencode/*`
71
84
 
72
- Cursor, GitHub Copilot, and Google Antigravity rule installs stay project-local.
85
+ Cursor, GitHub Copilot, and Google Antigravity now have partial global support,
86
+ scoped to whatever documented HOME file surface each exposes:
87
+
88
+ - `cursor`: `~/.cursor/hooks.json` (safety/quality hooks; profile ≥ standard). Cursor RULES stay project-local — their only global surface is the Settings UI.
89
+ - `copilot`: `~/.copilot/copilot-instructions.md` plus `~/.copilot/instructions/ai-toolkit-*.instructions.md` (read by Copilot CLI; VS Code and GitHub.com still use repo `.github/` files, which the local install emits).
90
+ - `antigravity`: skill pointer at `~/.gemini/config/skills/` and `~/.gemini/antigravity-cli/skills/`. Antigravity RULES stay project-local.
91
+
73
92
  Their global MCP support, where available, is handled by `ai-toolkit mcp
74
93
  install`, not by the rule installer.
75
94
 
@@ -103,6 +122,8 @@ These files still stay local to a repository as part of the core install model:
103
122
  - `.git/hooks/pre-commit` (fallback)
104
123
  - project-specific documentation or safety overlays
105
124
 
125
+ Project-local Claude Code language rules live in `.claude/rules/ai-toolkit-*.md` with `paths` frontmatter. They are separate from the global user-level `~/.claude/rules/ai-toolkit-*.md` files above.
126
+
106
127
  Hooks do **not** live in project-local settings. They are merged only into global `~/.claude/settings.json`.
107
128
 
108
129
  Codex is the exception in terms of file location, not hook ownership: its local
@@ -126,8 +147,7 @@ Codex wrappers so the project still receives the full skill catalog.
126
147
 
127
148
  `ai-toolkit plugin install --editor codex <pack>` additionally targets:
128
149
 
129
- - `~/AGENTS.md`
130
- - `~/.agents/rules/*.md`
150
+ - `~/.codex/AGENTS.md` (base instructions; pack rules are marker-injected here, not written as unread `~/.agents/rules/` files)
131
151
  - `~/.agents/skills/*`
132
152
  - `~/.codex/hooks.json`
133
153
 
@@ -3,15 +3,15 @@ title: "AI Toolkit - External Integrations"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [integrations, rules, add-rule]
6
- version: "1.0.5"
6
+ version: "1.1.0"
7
7
  created: "2026-03-26"
8
- last_updated: "2026-03-26"
9
- description: "How external repos inject rules into ~/.claude/CLAUDE.md via ai-toolkit"
8
+ last_updated: "2026-06-30"
9
+ description: "How external repos register rules that ai-toolkit syncs into Claude Code user-level rules and other editor configs."
10
10
  ---
11
11
 
12
12
  # External Integrations
13
13
 
14
- Repos that register rules with ai-toolkit so they are automatically injected into `~/.claude/CLAUDE.md` on every `update`.
14
+ Repos that register rules with ai-toolkit so they are automatically synced into Claude Code user-level rules and other editor configs on every `update`.
15
15
 
16
16
  ---
17
17
 
@@ -25,9 +25,11 @@ ai-toolkit add-rule ./jira-rules.md
25
25
  ai-toolkit update # inject now
26
26
  ```
27
27
 
28
- After registration, `ai-toolkit update` will always re-inject the rule. Registry location: `~/.softspark/ai-toolkit/rules/`.
28
+ After registration, `ai-toolkit update` will always re-sync the rule. Registry location: `~/.softspark/ai-toolkit/rules/`.
29
29
 
30
- To unregister a rule (removes from `~/.softspark/ai-toolkit/rules/` and strips the block from `CLAUDE.md`):
30
+ For Claude Code, registered rules are written to `~/.claude/rules/ai-toolkit-registered-<name>.md`. The `ai-toolkit-*` prefix in `~/.claude/rules/` is installer-managed; use another prefix for hand-written Claude rules.
31
+
32
+ To unregister a rule (removes from `~/.softspark/ai-toolkit/rules/`, deletes the generated Claude rule file, and strips any legacy block from `CLAUDE.md`):
31
33
 
32
34
  ```bash
33
35
  ai-toolkit remove-rule jira-rules
@@ -37,17 +39,13 @@ ai-toolkit remove-rule jira-rules
37
39
 
38
40
  ## How It Works
39
41
 
40
- Both mechanisms use marker-based idempotent injection. Rule name = filename without `.md`.
42
+ Claude Code uses file-based user-level rules:
41
43
 
42
44
  ```
43
- <!-- TOOLKIT:jira-rules START -->
44
-
45
- ...rule content...
46
-
47
- <!-- TOOLKIT:jira-rules END -->
45
+ ~/.claude/rules/ai-toolkit-registered-jira-rules.md
48
46
  ```
49
47
 
50
- Content outside markers is never touched. Re-running updates only the marked block.
48
+ Other editors receive the same registered rule through their native generated rule surfaces. Legacy `CLAUDE.md` marker sections are removed during migration, but content outside toolkit-managed markers is never touched.
51
49
 
52
50
  ---
53
51
 
@@ -56,8 +54,9 @@ Content outside markers is never touched. Re-running updates only the marked blo
56
54
  1. Create `<name>-rules.md` in your repo with Claude-relevant conventions
57
55
  2. Register it: `ai-toolkit add-rule ./<name>-rules.md`
58
56
  3. Verify it appears in: `~/.softspark/ai-toolkit/rules/<name>-rules.md`
59
- 4. On next `install` it will be listed in: `Rules injected: ... <name>-rules`
60
- 5. Add an entry below documenting the integration
57
+ 4. On next `install` it will be listed in: `Rules synced: ... <name>-rules`
58
+ 5. Verify Claude receives it at: `~/.claude/rules/ai-toolkit-registered-<name>-rules.md`
59
+ 6. Add an entry below documenting the integration
61
60
 
62
61
  ---
63
62
 
@@ -66,7 +65,7 @@ Content outside markers is never touched. Re-running updates only the marked blo
66
65
  ### rag-mcp
67
66
 
68
67
  **Rule file:** `rag-mcp.md`
69
- **Marker:** `TOOLKIT:rag-mcp`
68
+ **Claude rule file:** `~/.claude/rules/ai-toolkit-registered-rag-mcp.md`
70
69
 
71
70
  Teaches Claude Code the RAG-MCP search protocol: always call `smart_query()` before answering, `kb_id` vs `file_path` distinction, available MCP tools.
72
71
 
@@ -78,7 +77,7 @@ ai-toolkit add-rule ./rag-mcp-rules.md
78
77
  ### jira-mcp
79
78
 
80
79
  **Rule file:** `jira-rules.md`
81
- **Marker:** `TOOLKIT:jira-rules`
80
+ **Claude rule file:** `~/.claude/rules/ai-toolkit-registered-jira-rules.md`
82
81
 
83
82
  Teaches Claude Code the Jira MCP tool set: `sync_tasks`, `read_cached_tasks`, `update_task_status`, `log_task_time`, and key rules (sync first, hours only, check transitions).
84
83