@softspark/ai-toolkit 4.24.0 → 4.25.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 (42) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +35 -15
  3. package/app/.claude-plugin/plugin.json +1 -1
  4. package/app/skills/hook-creator/SKILL.md +18 -4
  5. package/app/surface.json +4 -0
  6. package/benchmarks/ecosystem-doctor-snapshot.json +67 -19
  7. package/bin/ai-toolkit.js +27 -3
  8. package/kb/reference/architecture-overview.md +13 -5
  9. package/kb/reference/claude-ecosystem-expansion-foundations.md +30 -5
  10. package/kb/reference/cli-reference.md +27 -2
  11. package/kb/reference/codex-cli-compatibility.md +101 -11
  12. package/kb/reference/global-install-model.md +10 -8
  13. package/kb/reference/hooks-catalog.md +41 -5
  14. package/kb/reference/mcp-editor-compatibility.md +3 -3
  15. package/kb/reference/mcp-templates.md +3 -3
  16. package/kb/reference/opencode-compatibility.md +53 -5
  17. package/kb/reference/supported-tools-registry.md +31 -26
  18. package/llms-full.txt +312 -73
  19. package/manifest.json +1 -1
  20. package/package.json +6 -2
  21. package/scripts/antigravity_plugin.py +570 -0
  22. package/scripts/codex_plugin.py +764 -0
  23. package/scripts/ecosystem_tools.json +92 -17
  24. package/scripts/generate_antigravity.py +16 -14
  25. package/scripts/generate_antigravity_agents.py +255 -0
  26. package/scripts/generate_antigravity_hooks.py +344 -0
  27. package/scripts/generate_cline_hooks.py +391 -0
  28. package/scripts/generate_cline_rules.py +210 -43
  29. package/scripts/generate_cline_skills.py +65 -2
  30. package/scripts/generate_codex_hooks.py +70 -8
  31. package/scripts/generate_gemini_agents.py +197 -0
  32. package/scripts/generate_gemini_hooks.py +24 -4
  33. package/scripts/generate_opencode_skills.py +544 -0
  34. package/scripts/inject_hook_cli.py +4 -26
  35. package/scripts/install.py +11 -10
  36. package/scripts/install_steps/ai_tools.py +209 -34
  37. package/scripts/mcp_editors.py +9 -1
  38. package/scripts/plugin.py +21 -0
  39. package/scripts/plugin_schema.py +8 -7
  40. package/scripts/secure_fs.py +35 -0
  41. package/scripts/uninstall.py +162 -18
  42. package/scripts/validate.py +42 -12
package/CHANGELOG.md CHANGED
@@ -7,6 +7,72 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v4.25.0 — editor-native integrations catch up (2026-08-19)
11
+
12
+ ### Added
13
+
14
+ - **Codex now has an exact native hook and plugin contract.** The hook generator
15
+ covers all 11 supported events, including bounded `SessionEnd`, while the new
16
+ deterministic plugin exporter bundles required runtime resources and verifies
17
+ the complete archive offline before installation.
18
+ - **Google Antigravity gains native hooks, agents, plugin packaging, MCP mapping,
19
+ and install profiles.** Generated hooks use the documented five-event schema;
20
+ project and user installs use the current IDE and CLI paths without conflating
21
+ legacy compatibility surfaces.
22
+ - **Gemini, OpenCode, and Cline gain native assets.** Gemini receives local agent
23
+ files, OpenCode receives complete native skill directories, and Cline receives
24
+ native rules plus all eight current extension and CLI hook events.
25
+
26
+ ### Changed
27
+
28
+ - **Claude Code validation follows the current hook and plugin schemas.** Prompt
29
+ and agent handlers share the documented 13-event allowlist, HTTP handlers are
30
+ restricted to their supported lifecycle, and current plugin surfaces include
31
+ workflows, output styles, and themes.
32
+ - **Editor installation and removal are transactional.** Profile downgrades and
33
+ uninstall remove only toolkit-managed assets, preserve user files, and cover
34
+ the new native Gemini, OpenCode, Antigravity, and Cline paths.
35
+
36
+ ### Security
37
+
38
+ - **Filesystem writers reject symlink ancestry and ancestor-swap attacks.** New
39
+ generators and cleanup paths use pinned transactions with rollback, while
40
+ plugin verification rejects missing, extra, modified, or wrongly-modeled
41
+ archive members.
42
+
43
+ ### Ecosystem
44
+
45
+ - Refreshed the 13-tool compatibility registry and upstream snapshot after
46
+ revalidating Claude Code, Codex CLI, Antigravity, Gemini, OpenCode, and Cline
47
+ against their current native contracts.
48
+
49
+ ## v4.24.1 — a dead link reported itself as installed (2026-08-19)
50
+
51
+ ### Fixed
52
+
53
+ - **`plugin install` treated a dangling symlink as an installed asset.** The guard
54
+ was `if path.exists() or path.is_symlink()`, and a link whose target is gone
55
+ satisfies the second half — so the installer printed `OK agent` / `OK skill`,
56
+ changed nothing, and left the user with a dead link and a green log. This is the
57
+ exact state a toolkit upgrade produces: `npm install -g @softspark/ai-toolkit`
58
+ replaces `app/` wholesale, so every `~/.claude` link into the old package points
59
+ at nothing, and re-running install could not repair it.
60
+
61
+ A dangling link is now dropped before the guard runs and relinked to the
62
+ resolved source, printing `Dangling agent link removed: <name>`. **Live links and
63
+ real files are untouched** — those are user content, and the merge-friendly
64
+ install model keeps them.
65
+
66
+ Surfaced while migrating a pack from `app/plugins/` to the v4.24.0 user root:
67
+ the upgrade broke both links and `plugin install` insisted everything was fine.
68
+
69
+ ### Added
70
+
71
+ - **Two tests.** One builds the post-upgrade state (links pointing into a path
72
+ that no longer exists) and asserts install removes and relinks both; the other
73
+ pins the negative — a real file on the agent name and a live skill link survive
74
+ a reinstall untouched.
75
+
10
76
  ## v4.24.0 — external packs stop dying on upgrade (2026-08-18)
11
77
 
12
78
  ### Added
package/README.md CHANGED
@@ -6,18 +6,20 @@
6
6
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
7
7
  [![Skills](https://img.shields.io/badge/skills-109-brightgreen)](app/skills/)
8
8
  [![Agents](https://img.shields.io/badge/agents-44-blue)](app/agents/)
9
- [![Tests](https://img.shields.io/badge/tests-1522%20passing-success)](tests/)
9
+ [![Tests](https://img.shields.io/badge/tests-1636%20passing-success)](tests/)
10
10
 
11
- ## What's New in v4.24.0
11
+ ## What's New in v4.25.0
12
12
 
13
- **v4.24.0** a plugin pack maintained in its own repository had nowhere safe to
14
- live: the only directory the toolkit scanned was `app/plugins/`, inside the npm
15
- package, so every `npm install -g` upgrade deleted it. Packs now also load from
16
- `~/.softspark/ai-toolkit/plugins/`, which the user owns and upgrades never touch.
17
- The entry can be a symlink to an npm-installed package, so updating an external
18
- pack is one `npm install -g` with nothing to re-link. Core packs still win a name
19
- collision. Ships with v4.23.1's fix for pack-shipped agents, which the same
20
- external-pack workflow depends on.
13
+ **v4.25.0** brings the editor integrations onto their current native surfaces:
14
+
15
+ - Codex gets its exact 11-event hook contract and a deterministic native plugin
16
+ exporter with offline verification.
17
+ - Google Antigravity gets native hooks, agents, plugin packaging, MCP mapping,
18
+ and local/global install profiles.
19
+ - Gemini gains native agents, OpenCode gains native skill directories, and Cline
20
+ gains native rules plus its exact 8-event hook lifecycle.
21
+ - Claude Code validation now matches the current prompt, agent, HTTP hook, and
22
+ plugin contracts, with transactional symlink protections across new writers.
21
23
 
22
24
  See [CHANGELOG.md](CHANGELOG.md) for full history.
23
25
 
@@ -92,6 +94,24 @@ ai-toolkit claude-app export --verify
92
94
  Re-export and re-upload after toolkit or registered-rule updates. Skills work
93
95
  in Chat and Cowork; hooks and sub-agents are active only in Cowork.
94
96
 
97
+ ### Native Codex Plugin
98
+
99
+ Build or validate the marketplace-ready Codex package without changing
100
+ `~/.agents` or `~/.codex`:
101
+
102
+ ```bash
103
+ ai-toolkit codex-plugin export --output ai-toolkit-codex-plugin.zip
104
+ ai-toolkit codex-plugin verify
105
+ ```
106
+
107
+ Extract the ZIP into a local marketplace under `plugins/ai-toolkit/`, add that
108
+ marketplace with `codex plugin marketplace add <marketplace-root>`, then install
109
+ from `/plugins` in Codex CLI and start a new session. Review and trust the
110
+ bundled hooks before use. The ZIP includes plugin-local persona definitions,
111
+ the briefing helper, the skill-audit helper and its local imports, and other
112
+ referenced skill resources. Export rejects symlinked output paths and ancestors.
113
+ Codex IDE does not support plugins.
114
+
95
115
  ### Install Profiles
96
116
 
97
117
  ```bash
@@ -119,15 +139,15 @@ See [CLI Reference](kb/reference/cli-reference.md) for all commands and options.
119
139
  | Claude Chat / Cowork | uploaded plugin ZIP + UI global/folder instructions | Cowork only | account/app |
120
140
  | Cursor | `.cursor/rules/*.mdc` + `.cursor/mcp.json` + `.cursor/skills/*` | ✅ | project (`~/.cursor/mcp.json` for MCP only) |
121
141
  | Windsurf (Devin Desktop) | `~/.config/devin/AGENTS.md` + `.devin/rules/*.md` + `.devin/hooks.v1.json` + `.windsurf/skills/*` | ✅ | global + project |
122
- | Gemini CLI | `~/.gemini/GEMINI.md` | ✅ | global |
142
+ | Gemini CLI | `~/.gemini/GEMINI.md` + `.gemini/settings.json` + `.gemini/{commands,skills,agents}/` | ✅ | project + user |
123
143
  | GitHub Copilot | Project: `AGENTS.md` + `.github/copilot-instructions.md` + `.github/{instructions,prompts,agents,skills,hooks}/` + `.github/mcp.json`; user: `$COPILOT_HOME/copilot-instructions.md` + `$COPILOT_HOME/{instructions,agents,skills,hooks}/` + `$COPILOT_HOME/mcp-config.json` | ✅ | project + user |
124
- | Cline | `~/Documents/Cline/Rules/*.md` + `~/.cline/skills/*` + `.clinerules/*.md` | | global + project |
144
+ | Cline | Project: `.cline/{rules,hooks,skills}/` + `.clinerules/{hooks,workflows}/`; user: `~/.cline/{rules,hooks,skills}/` + `~/Documents/Cline/{Rules,Hooks}/` compatibility | | global + project |
125
145
  | Roo Code / [Zoo Code](https://zoocode.dev/) | `~/.roo/rules/*.md` + `.roomodes` + `.roo/rules/*.md` | — | global rules + project |
126
146
  | Aider | `~/.aider.conf.yml` + `.aider.conf.yml` + `CONVENTIONS.md` | — | global + project |
127
147
  | Augment | `~/.augment/rules/*.md` + `.augment/rules/ai-toolkit-*.md` | ✅ | global + project |
128
- | Google Antigravity | `.agents/rules/*.md` + `.agents/workflows/*.md` + skill pointer in `.agent/skills/*` (IDE) and `.agents/skills/*` (CLI) | | project |
148
+ | Google Antigravity | Project `.agents/{rules,workflows,skills,agents,hooks}/`; user `~/.gemini/config/{skills,agents,hooks}/`; opt-in native plugin export | | project + user |
129
149
  | Codex CLI | Project: `AGENTS.md` + `.agents/skills/*` + `.codex/{agents,hooks}/` + `.codex/{hooks.json,config.toml}`; user: `$CODEX_HOME/{AGENTS.md,agents,hooks.json,config.toml}` + `$HOME/.agents/skills/*` | ✅ | project + user |
130
- | opencode | `AGENTS.md` + `.opencode/{agents,commands,plugins}/*` + `opencode.json` | ✅ | project + global (`~/.config/opencode/`) |
150
+ | opencode | `AGENTS.md` + `.opencode/{agents,commands,plugins,skills}/*` + `opencode.{json,jsonc}` | ✅ | project + global (`~/.config/opencode/`) |
131
151
 
132
152
  > Claude Code is always installed (primary platform). Other editors are selected with `--editors`; the Claude app uses the separate `claude-app export` flow because its customization store is UI/plugin-managed. The **Hooks** column marks platforms with lifecycle enforcement. Platforms marked — receive guidance without blocking hooks.
133
153
 
@@ -165,7 +185,7 @@ ai-toolkit/
165
185
  │ └── ARCHITECTURE.md # Full system design
166
186
  ├── kb/ # Reference docs, procedures, plans
167
187
  ├── scripts/ # Validation, install, evaluation scripts
168
- ├── tests/ # Bats and Python test suite (1494 tests)
188
+ ├── tests/ # Bats and Python test suite (1636 tests)
169
189
  └── CHANGELOG.md
170
190
  ```
171
191
 
@@ -3,7 +3,7 @@
3
3
  "name": "ai-toolkit",
4
4
  "displayName": "AI Toolkit",
5
5
  "description": "Professional-grade engineering skills, agents, rules, and lifecycle guardrails for Claude Code, Claude Chat, and Cowork.",
6
- "version": "4.24.0",
6
+ "version": "4.25.0",
7
7
  "author": {
8
8
  "name": "SoftSpark",
9
9
  "url": "https://github.com/softspark"
@@ -23,7 +23,7 @@ Create a new Claude Code hook following ai-toolkit conventions.
23
23
  | `SessionEnd` | Session is closing | any | Flush logs, save transcripts |
24
24
  | `UserPromptSubmit` | User submits a prompt | any | Prompt governance, usage tracking |
25
25
  | `Notification` | Claude sends a notification | any | OS alerts, Slack pings |
26
- | `MessageDisplay` | Assistant message is about to be shown to the user | any | Transform or hide assistant message text before display |
26
+ | `MessageDisplay` | Assistant message text streams in completed-line batches | none | Return `displayContent` to replace the rendered batch without changing the transcript |
27
27
 
28
28
  ### Tool lifecycle
29
29
 
@@ -80,6 +80,7 @@ Create a new Claude Code hook following ai-toolkit conventions.
80
80
  | `WorktreeCreate` | Worktree is being created; `type: "http"` can return `hookSpecificOutput.worktreePath` | any | Provision worktree dirs |
81
81
  | `WorktreeRemove` | Worktree is being removed | any | Cleanup |
82
82
  | `CwdChanged` | Working directory changes during a session | any | Reactive env management (e.g., direnv) |
83
+ | `DirectoryAdded` | A working directory was added with `/add-dir` or SDK `register_repo_root`; runs asynchronously after the add and cannot block it | `slash_command\|register_repo_root` | Prepare a newly added repository |
83
84
  | `FileChanged` | Tracked file is modified on disk | any | Re-lint, reload config |
84
85
  | `ConfigChange` | Settings / config file changed | any | Re-validate, warn on drift |
85
86
 
@@ -99,7 +100,7 @@ Claude Code supports five handler `type` values in `hooks.json`:
99
100
  | `command` | Run a shell script / binary | `command` (path + args) |
100
101
  | `http` | Call a local or remote HTTP endpoint | `url` |
101
102
  | `prompt` | Inject a prompt to the fast inline model and use its verdict | `prompt` |
102
- | `agent` | Spawn a full subagent to evaluate the event (must target `Stop` / `SubagentStop`) | `agent` (agent name) |
103
+ | `agent` | Spawn an experimental tool-using subagent to evaluate the event | `prompt` |
103
104
  | `mcp_tool` | Invoke an MCP tool directly (no subprocess) | `server`, `tool`, `arguments` |
104
105
 
105
106
  `command` remains the default and ai-toolkit's hook entries all use it. The other types are documented here so you can author them by hand when needed.
@@ -146,9 +147,22 @@ Required fields:
146
147
  - `hooks[].command`: path to script using `$HOME/.softspark/ai-toolkit/hooks/` prefix (for `type: command`)
147
148
 
148
149
  Optional fields (read from Claude Code docs, not emitted by ai-toolkit by default):
149
- - `hooks[].timeout`: seconds to wait before killing the hook (global default applies if omitted)
150
- - `hooks[].if`: permission-rule filter (e.g. `"Bash(git push*)"`) to reduce process spawning
150
+
151
+ Common to every handler type:
152
+ - `hooks[].if`: one permission-rule filter (e.g. `"Bash(git push*)"`); evaluated only for tool events
153
+ - `hooks[].timeout`: seconds to wait before canceling the handler (type and event defaults apply if omitted)
151
154
  - `hooks[].statusMessage`: short message surfaced in the UI while the hook runs
155
+ - `hooks[].once`: run once per session; only honored in skill frontmatter and ignored in settings files or agent frontmatter
156
+
157
+ Command-handler fields:
158
+ - `hooks[].args`: argument vector for exec form. Prefer exec form when a command uses `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}`, or `${CLAUDE_PLUGIN_DATA}` path placeholders
159
+ - `hooks[].async`: run in the background without blocking; background hooks cannot return decisions
160
+ - `hooks[].asyncRewake`: run in the background and wake Claude on exit code 2; implies `async`
161
+ - `hooks[].shell`: choose `bash` or `powershell` for shell form; ignored when `args` selects exec form
162
+
163
+ Prompt and agent handlers both require `hooks[].prompt`; `type: agent` does not accept an agent name field. Agent handlers are experimental, so prefer `command` for production enforcement.
164
+
165
+ `MessageDisplay` has no matcher, runs once per rendered batch in interactive sessions, and defaults to a 10-second timeout. Its `displayContent` output changes only the screen text; Claude and the transcript retain the original response. `DirectoryAdded` is always asynchronous and non-blocking regardless of the handler configuration.
152
166
 
153
167
  ## Script Template
154
168
 
package/app/surface.json CHANGED
@@ -244,6 +244,7 @@
244
244
  "add-rule",
245
245
  "agents-md",
246
246
  "aider-conf",
247
+ "antigravity-plugin",
247
248
  "antigravity-rules",
248
249
  "augment-dir-rules",
249
250
  "augment-rules",
@@ -251,9 +252,11 @@
251
252
  "benchmark-ecosystem",
252
253
  "claude-app",
253
254
  "cline-dir-rules",
255
+ "cline-hooks",
254
256
  "cline-rules",
255
257
  "codex-hooks",
256
258
  "codex-md",
259
+ "codex-plugin",
257
260
  "compile-slm",
258
261
  "config",
259
262
  "conventions-md",
@@ -277,6 +280,7 @@
277
280
  "opencode-json",
278
281
  "opencode-md",
279
282
  "opencode-plugin",
283
+ "opencode-skills",
280
284
  "pack-codebase",
281
285
  "plugin",
282
286
  "projects",
@@ -1,5 +1,5 @@
1
1
  {
2
- "last_run": "2026-08-06T05:13:55Z",
2
+ "last_run": "2026-08-19T14:01:09Z",
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": "68eecb3b6a49f7f1",
27
+ "docs_hash": "0f7df1fdf4962938",
28
28
  "headings": [
29
29
  "Admin",
30
30
  "Auggie CLI",
@@ -66,7 +66,7 @@
66
66
  }
67
67
  },
68
68
  "claude-app": {
69
- "docs_hash": "670f833a8e1527c0",
69
+ "docs_hash": "5bba2a625b109b69",
70
70
  "headings": [
71
71
  "Add global and folder instructions",
72
72
  "Availability",
@@ -84,11 +84,11 @@
84
84
  "Get started with Claude Cowork",
85
85
  "Global instructions",
86
86
  "How Claude Cowork runs your tasks",
87
- "I don&#x27;t see Cowork on web or mobile",
88
87
  "I&#x27;m hitting usage limits quickly",
89
88
  "I&#x27;m seeing &quot;Setting up Claude&#x27;s workspace&quot; when I start Cowork; what does this mean?",
90
89
  "Key capabilities",
91
90
  "Permissions and security",
91
+ "Related Articles",
92
92
  "Requirements",
93
93
  "Research and analysis",
94
94
  "Schedule recurring tasks",
@@ -107,7 +107,7 @@
107
107
  }
108
108
  },
109
109
  "claude-code": {
110
- "docs_hash": "1904e0148fe997b9",
110
+ "docs_hash": "3d4394d0bf5dd8c1",
111
111
  "headings": [
112
112
  "Core concepts",
113
113
  "Documentation Index",
@@ -124,10 +124,12 @@
124
124
  "markers": {
125
125
  "ConfigChange": false,
126
126
  "CwdChanged": false,
127
+ "DirectoryAdded": false,
127
128
  "Elicitation": false,
128
129
  "ElicitationResult": false,
129
130
  "FileChanged": false,
130
131
  "InstructionsLoaded": false,
132
+ "LSP servers": false,
131
133
  "MCP server": true,
132
134
  "MessageDisplay": false,
133
135
  "Notification": false,
@@ -154,19 +156,27 @@
154
156
  "UserPromptSubmit": false,
155
157
  "WorktreeCreate": false,
156
158
  "WorktreeRemove": false,
159
+ "channels": true,
157
160
  "hook handler: agent": false,
158
161
  "hook handler: command": false,
159
162
  "hook handler: http": false,
160
163
  "hook handler: mcp_tool": false,
161
164
  "hook handler: prompt": false,
165
+ "monitors": false,
162
166
  "output style": false,
167
+ "outputStyles": false,
168
+ "plugins": true,
169
+ "settings.json": true,
163
170
  "slash command": false,
164
- "sub-agent": true
171
+ "sub-agent": true,
172
+ "themes": true,
173
+ "userConfig": false,
174
+ "workflows": true
165
175
  },
166
- "version": "2.1.223 (Claude Code)"
176
+ "version": "2.1.235 (Claude Code)"
167
177
  },
168
178
  "cline": {
169
- "docs_hash": "e4409c39f56583e8",
179
+ "docs_hash": "bf058b01d03e0455",
170
180
  "headings": [
171
181
  "API Reference",
172
182
  "Best Practices",
@@ -213,7 +223,7 @@
213
223
  }
214
224
  },
215
225
  "codex-cli": {
216
- "docs_hash": "91d1d7112da069da",
226
+ "docs_hash": "61aea7a06c8c6355",
217
227
  "headings": [
218
228
  "API",
219
229
  "API Reference",
@@ -247,6 +257,7 @@
247
257
  "Core concepts",
248
258
  "Cost and throughput",
249
259
  "Customization",
260
+ "Cyber safety",
250
261
  "Deployment and model providers",
251
262
  "Desktop app",
252
263
  "Development workflows",
@@ -272,6 +283,7 @@
272
283
  "Install Codex",
273
284
  "Keep the coding loop in your terminal",
274
285
  "Legacy APIs",
286
+ "Linux",
275
287
  "Measurement",
276
288
  "Media",
277
289
  "Move work to Codex cloud",
@@ -293,7 +305,6 @@
293
305
  "Review changes before they ship",
294
306
  "Run Codex and sign in",
295
307
  "SDKs and CLI",
296
- "Safety",
297
308
  "Safety and governance",
298
309
  "Search and retrieval",
299
310
  "Search for current context",
@@ -325,14 +336,18 @@
325
336
  ],
326
337
  "markers": {
327
338
  ".agents/skills": false,
339
+ ".codex-plugin/plugin.json": false,
328
340
  ".codex/agents": false,
341
+ "/plugins": true,
329
342
  "AGENTS.md": true,
343
+ "PLUGIN_ROOT": false,
330
344
  "config.toml": false,
331
345
  "hook event: PermissionRequest": false,
332
346
  "hook event: PostCompact": false,
333
347
  "hook event: PostToolUse": false,
334
348
  "hook event: PreCompact": false,
335
349
  "hook event: PreToolUse": false,
350
+ "hook event: SessionEnd": false,
336
351
  "hook event: SessionStart": false,
337
352
  "hook event: Stop": false,
338
353
  "hook event: SubagentStart": false,
@@ -342,14 +357,32 @@
342
357
  "hook handler: command": false,
343
358
  "hook handler: prompt": false,
344
359
  "hooks": true,
360
+ "hooks/hooks.json": false,
345
361
  "mcp_servers": false,
362
+ "plugin marketplace": false,
346
363
  "sandbox": true
347
364
  },
348
- "version": "codex-cli 0.146.0"
365
+ "version": "codex-cli 0.147.0"
349
366
  },
350
367
  "cursor": {
351
- "docs_hash": "9d032d0dae73bed2",
352
- "headings": [],
368
+ "docs_hash": "793ca4e25e676e17",
369
+ "headings": [
370
+ "Agent",
371
+ "CLI",
372
+ "Cloud Agents",
373
+ "Command Palette",
374
+ "Cursor Documentation",
375
+ "Customize",
376
+ "Get Started",
377
+ "Integrations",
378
+ "Models",
379
+ "More resources",
380
+ "Origin",
381
+ "SDK",
382
+ "Start here",
383
+ "Teams &amp; Enterprise",
384
+ "What you can do with Cursor"
385
+ ],
353
386
  "markers": {
354
387
  ".cursor/rules": false,
355
388
  "AGENTS.md": false,
@@ -364,7 +397,7 @@
364
397
  }
365
398
  },
366
399
  "gemini-cli": {
367
- "docs_hash": "d47d074674e59f6f",
400
+ "docs_hash": "f343c5f7c60fefcf",
368
401
  "headings": [
369
402
  "Breadcrumbs",
370
403
  "Directory actions",
@@ -381,6 +414,7 @@
381
414
  "parent directory"
382
415
  ],
383
416
  "markers": {
417
+ ".gemini/agents/*.md": false,
384
418
  "AfterAgent": false,
385
419
  "AfterModel": false,
386
420
  "AfterTool": false,
@@ -400,10 +434,11 @@
400
434
  "mcpServers": false,
401
435
  "settings.json": false,
402
436
  "tools": true
403
- }
437
+ },
438
+ "version": "0.55.1"
404
439
  },
405
440
  "github-copilot": {
406
- "docs_hash": "ee88f952816a8535",
441
+ "docs_hash": "79d741f4e3273f8d",
407
442
  "headings": [
408
443
  "About Copilot auto model selection",
409
444
  "About Copilot automations",
@@ -440,23 +475,34 @@
440
475
  }
441
476
  },
442
477
  "google-antigravity": {
443
- "docs_hash": "1e0c0d249231d2a9",
478
+ "docs_hash": "8cbf9aaffb6b57bf",
444
479
  "headings": [],
445
480
  "markers": {
446
481
  "AGENTS.md": false,
447
482
  "GEMINI.md": false,
448
483
  "MCP": false,
484
+ "PostInvocation": false,
485
+ "PostToolUse": false,
486
+ "PreInvocation": false,
487
+ "PreToolUse": false,
488
+ "Stop": false,
449
489
  "agent manager": false,
450
490
  "agent permissions": false,
451
491
  "artifacts": false,
492
+ "global agents": false,
493
+ "global hooks": false,
494
+ "global skills": false,
452
495
  "hooks": false,
496
+ "plugins": false,
453
497
  "rules": false,
498
+ "serverUrl": false,
454
499
  "skills": false,
500
+ "subagents": false,
455
501
  "workflows": false
456
502
  }
457
503
  },
458
504
  "opencode": {
459
- "docs_hash": "f09f3fbe98570961",
505
+ "docs_hash": "b112229db465d2e4",
460
506
  "headings": [
461
507
  "Add features",
462
508
  "Ask questions",
@@ -479,6 +525,7 @@
479
525
  "opencode.json": false,
480
526
  "permission.skill": false,
481
527
  "plugin event: command.executed": false,
528
+ "plugin event: message.part.updated": false,
482
529
  "plugin event: message.updated": false,
483
530
  "plugin event: permission.asked": false,
484
531
  "plugin event: session.compacted": false,
@@ -491,6 +538,7 @@
491
538
  "rules": true,
492
539
  "skills (native .opencode/skills)": false,
493
540
  "skills (via .claude/skills fallback)": false,
541
+ "skills array (local paths + HTTP URLs)": false,
494
542
  "subagent mode": false
495
543
  }
496
544
  },
@@ -516,7 +564,7 @@
516
564
  }
517
565
  },
518
566
  "windsurf": {
519
- "docs_hash": "496619fda7ca4576",
567
+ "docs_hash": "fddce54b82ac479e",
520
568
  "headings": [
521
569
  "Accounts",
522
570
  "Advanced",
package/bin/ai-toolkit.js CHANGED
@@ -57,6 +57,8 @@ const SCRIPT_COMMANDS = {
57
57
  'compile-slm': { script: 'compile_slm.py' },
58
58
  'pack-codebase': { script: 'pack_codebase.py' },
59
59
  'claude-app': { script: 'claude_app.py', toolkitCwd: true },
60
+ 'codex-plugin': { script: 'codex_plugin.py', toolkitCwd: true },
61
+ 'antigravity-plugin': { script: 'antigravity_plugin.py', toolkitCwd: true },
60
62
  };
61
63
 
62
64
  // ---------------------------------------------------------------------------
@@ -96,7 +98,8 @@ const COMMANDS = {
96
98
  'copilot-instructions': 'Generate .github/copilot-instructions.md',
97
99
  'gemini-md': 'Generate GEMINI.md for Gemini CLI',
98
100
  'cline-rules': 'Generate .clinerules for Cline (legacy)',
99
- 'cline-dir-rules': 'Generate .clinerules/*.md for Cline (recommended)',
101
+ 'cline-dir-rules': 'Generate .cline/rules/*.md plus .clinerules/*.md compatibility for Cline',
102
+ 'cline-hooks': 'Generate .cline/hooks/<Event> plus .clinerules/hooks/<Event> compatibility',
100
103
  'roo-modes': 'Generate .roomodes for Roo Code',
101
104
  'roo-dir-rules': 'Generate .roo/rules/*.md shared rules for Roo Code',
102
105
  'aider-conf': 'Generate .aider.conf.yml for Aider',
@@ -109,12 +112,15 @@ const COMMANDS = {
109
112
  'opencode-md': 'Generate AGENTS.md for opencode',
110
113
  'opencode-agents': 'Generate .opencode/agents/ for opencode (subagents)',
111
114
  'opencode-commands': 'Generate .opencode/commands/ for opencode (slash commands)',
115
+ 'opencode-skills': 'Generate .opencode/skills/ for opencode (Agent Skills)',
112
116
  'opencode-plugin': 'Generate .opencode/plugins/ai-toolkit-hooks.js (lifecycle bridge)',
113
117
  'opencode-json': 'Merge .mcp.json servers into opencode.json',
114
118
  'agents-md': 'Regenerate AGENTS.md from agent definitions',
115
119
  'compile-slm': 'Compile toolkit into a minimal SLM system prompt (--budget, --model-size, --dry-run)',
116
120
  'pack-codebase': 'Pack the current codebase into a single AI-friendly markdown file (--budget, --include, --exclude, --dry-run)',
117
121
  'claude-app': 'Export or verify the uploadable Claude Chat/Desktop/Cowork plugin',
122
+ 'codex-plugin': 'Export or verify the native Codex CLI plugin package',
123
+ 'antigravity-plugin': 'Export or verify the native Google Antigravity plugin package',
118
124
  'llms-txt': 'Generate llms.txt and llms-full.txt',
119
125
  'generate-all': 'Generate all platform configs at once (agents, cursor, windsurf, copilot, gemini, cline, roo, aider, augment, antigravity, codex, opencode, llms)',
120
126
  help: 'Show this help message',
@@ -290,6 +296,17 @@ function showHelp() {
290
296
  console.log(' export [--output FILE] [--no-custom-rules] [--verify]');
291
297
  console.log(' Build a ZIP for Customize > Plugins and Cowork instructions');
292
298
  console.log(' verify Run structural checks and the official Claude plugin validator');
299
+ console.log('\nOptions for codex-plugin:');
300
+ console.log(' export [--output FILE] Build a deterministic native Codex plugin ZIP');
301
+ console.log(' verify Validate structure, schema, paths, hooks, and self-containment');
302
+ console.log(' Install/use through a local marketplace and /plugins in Codex CLI');
303
+ console.log(' Codex IDE does not support plugins');
304
+ console.log('\nOptions for antigravity-plugin:');
305
+ console.log(' export [output|--output FILE] Build a deterministic Antigravity plugin ZIP');
306
+ console.log(' verify <archive-or-dir> Validate schema, paths, hooks, and self-containment');
307
+ console.log(' Install under .agents/plugins/<name>/ (workspace),');
308
+ console.log(' ~/.gemini/antigravity-cli/plugins/<name>/ (CLI), or');
309
+ console.log(' ~/.gemini/config/plugins/<name>/ (IDE/shared product)');
293
310
  console.log('\nOptions for mcp:');
294
311
  console.log(' list List available MCP templates');
295
312
  console.log(' editors List editors with native MCP config adapters');
@@ -502,20 +519,25 @@ function handleGenerateAll(_args) {
502
519
  for (const [name, gen] of Object.entries(GENERATORS)) {
503
520
  // Skip codex-md and opencode-md — they inject into AGENTS.md via markers
504
521
  // (used by install --local --editors codex|opencode), not as standalone files.
505
- // agents-md generates the full agent list which is the standalone AGENTS.md.
506
- if (name === 'codex-md' || name === 'opencode-md') continue;
522
+ // The native Cline generator below emits both current and compatibility rules;
523
+ // generating the retired single-file surface first would block that directory.
524
+ if (name === 'codex-md' || name === 'opencode-md' || name === 'cline-rules') continue;
507
525
  writeGeneratorOutput(gen);
508
526
  }
509
527
  // Directory-based generators (multi-file output)
510
528
  run(scriptPath('generate_antigravity.py'), [CWD]);
529
+ run(scriptPath('generate_antigravity_hooks.py'), [CWD]);
530
+ run(scriptPath('generate_antigravity_agents.py'), [CWD]);
511
531
  run(scriptPath('generate_cursor_mdc.py'), [CWD]);
512
532
  run(scriptPath('generate_windsurf_rules.py'), [CWD]);
513
533
  run(scriptPath('generate_cline_rules.py'), [CWD]);
534
+ run(scriptPath('generate_cline_hooks.py'), [CWD]);
514
535
  run(scriptPath('generate_roo_rules.py'), [CWD]);
515
536
  run(scriptPath('generate_augment_rules.py'), [CWD]);
516
537
  run(scriptPath('generate_codex_hooks.py'), [CWD]);
517
538
  run(scriptPath('generate_opencode_agents.py'), [CWD]);
518
539
  run(scriptPath('generate_opencode_commands.py'), [CWD]);
540
+ run(scriptPath('generate_opencode_skills.py'), [CWD]);
519
541
  run(scriptPath('generate_opencode_plugin.py'), [CWD]);
520
542
  run(scriptPath('generate_opencode_json.py'), [CWD]);
521
543
  // Single-file generators
@@ -649,12 +671,14 @@ const SPECIAL_HANDLERS = {
649
671
  'cursor-mdc': (_args) => run(scriptPath('generate_cursor_mdc.py'), [CWD]),
650
672
  'windsurf-dir-rules': (_args) => run(scriptPath('generate_windsurf_rules.py'), [CWD]),
651
673
  'cline-dir-rules': (_args) => run(scriptPath('generate_cline_rules.py'), [CWD]),
674
+ 'cline-hooks': (_args) => run(scriptPath('generate_cline_hooks.py'), [CWD]),
652
675
  'roo-dir-rules': (_args) => run(scriptPath('generate_roo_rules.py'), [CWD]),
653
676
  'conventions-md': (_args) => { const out = runGenerator('generate_conventions.py'); fs.writeFileSync(path.join(CWD, 'CONVENTIONS.md'), out); console.log('Generated: CONVENTIONS.md'); },
654
677
  'augment-dir-rules': (_args) => run(scriptPath('generate_augment_rules.py'), [CWD]),
655
678
  'codex-hooks': (_args) => run(scriptPath('generate_codex_hooks.py'), [CWD]),
656
679
  'opencode-agents': (_args) => run(scriptPath('generate_opencode_agents.py'), [CWD]),
657
680
  'opencode-commands': (_args) => run(scriptPath('generate_opencode_commands.py'), [CWD]),
681
+ 'opencode-skills': (_args) => run(scriptPath('generate_opencode_skills.py'), [CWD]),
658
682
  'opencode-plugin': (_args) => run(scriptPath('generate_opencode_plugin.py'), [CWD]),
659
683
  'opencode-json': (_args) => run(scriptPath('generate_opencode_json.py'), [CWD]),
660
684
  'generate-all': handleGenerateAll,