@softspark/ai-toolkit 4.24.1 → 4.25.1

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 (44) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +33 -14
  3. package/app/.claude-plugin/plugin.json +1 -1
  4. package/app/skills/cve-scan/scripts/cve_scan.py +16 -2
  5. package/app/skills/hook-creator/SKILL.md +18 -4
  6. package/app/surface.json +4 -0
  7. package/benchmarks/ecosystem-doctor-snapshot.json +67 -19
  8. package/bin/ai-toolkit.js +27 -3
  9. package/kb/procedures/post-release-testing-sop.md +20 -11
  10. package/kb/reference/architecture-overview.md +13 -5
  11. package/kb/reference/claude-ecosystem-expansion-foundations.md +30 -5
  12. package/kb/reference/cli-reference.md +27 -2
  13. package/kb/reference/codex-cli-compatibility.md +101 -11
  14. package/kb/reference/enterprise-config-guide.md +1 -1
  15. package/kb/reference/global-install-model.md +10 -8
  16. package/kb/reference/hooks-catalog.md +41 -5
  17. package/kb/reference/mcp-editor-compatibility.md +3 -3
  18. package/kb/reference/mcp-templates.md +3 -3
  19. package/kb/reference/opencode-compatibility.md +53 -5
  20. package/kb/reference/supported-tools-registry.md +31 -26
  21. package/llms-full.txt +333 -85
  22. package/manifest.json +1 -1
  23. package/package.json +6 -2
  24. package/scripts/antigravity_plugin.py +570 -0
  25. package/scripts/codex_plugin.py +764 -0
  26. package/scripts/ecosystem_tools.json +92 -17
  27. package/scripts/generate_antigravity.py +16 -14
  28. package/scripts/generate_antigravity_agents.py +255 -0
  29. package/scripts/generate_antigravity_hooks.py +344 -0
  30. package/scripts/generate_cline_hooks.py +391 -0
  31. package/scripts/generate_cline_rules.py +210 -43
  32. package/scripts/generate_cline_skills.py +65 -2
  33. package/scripts/generate_codex_hooks.py +70 -8
  34. package/scripts/generate_gemini_agents.py +197 -0
  35. package/scripts/generate_gemini_hooks.py +24 -4
  36. package/scripts/generate_opencode_skills.py +544 -0
  37. package/scripts/inject_hook_cli.py +4 -26
  38. package/scripts/install.py +11 -10
  39. package/scripts/install_steps/ai_tools.py +209 -34
  40. package/scripts/mcp_editors.py +9 -1
  41. package/scripts/plugin_schema.py +8 -7
  42. package/scripts/secure_fs.py +35 -0
  43. package/scripts/uninstall.py +162 -18
  44. package/scripts/validate.py +42 -12
package/CHANGELOG.md CHANGED
@@ -7,6 +7,69 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v4.25.1 — npm advisories count again (2026-08-19)
11
+
12
+ ### Fixed
13
+
14
+ - **`cve-scan` reported zero findings for a vulnerable npm project.** npm audit
15
+ can return the legacy `advisories` object as well as the current
16
+ `vulnerabilities` object. The scanner parsed only the latter, so five real
17
+ lodash advisories remained trapped in `raw_output` while `total_findings` was
18
+ zero and the process exited successfully. Both formats are now normalized,
19
+ and HIGH advisories restore the documented non-zero exit code.
20
+
21
+ ### Changed
22
+
23
+ - **The published-package scanner smoke uses real per-scanner fixtures and
24
+ flags.** It now includes healthcare patterns and a deliberately vulnerable
25
+ locked npm dependency, invokes `cve-scan` with `--json`, and treats raw npm
26
+ advisories with no normalized findings as a parser failure.
27
+
28
+ ### Tests
29
+
30
+ - Added a public-CLI regression test with a stubbed legacy npm audit response;
31
+ it asserts normalized severity, installed version, CVE, fixed range, finding
32
+ count, and exit status.
33
+
34
+ ## v4.25.0 — editor-native integrations catch up (2026-08-19)
35
+
36
+ ### Added
37
+
38
+ - **Codex now has an exact native hook and plugin contract.** The hook generator
39
+ covers all 11 supported events, including bounded `SessionEnd`, while the new
40
+ deterministic plugin exporter bundles required runtime resources and verifies
41
+ the complete archive offline before installation.
42
+ - **Google Antigravity gains native hooks, agents, plugin packaging, MCP mapping,
43
+ and install profiles.** Generated hooks use the documented five-event schema;
44
+ project and user installs use the current IDE and CLI paths without conflating
45
+ legacy compatibility surfaces.
46
+ - **Gemini, OpenCode, and Cline gain native assets.** Gemini receives local agent
47
+ files, OpenCode receives complete native skill directories, and Cline receives
48
+ native rules plus all eight current extension and CLI hook events.
49
+
50
+ ### Changed
51
+
52
+ - **Claude Code validation follows the current hook and plugin schemas.** Prompt
53
+ and agent handlers share the documented 13-event allowlist, HTTP handlers are
54
+ restricted to their supported lifecycle, and current plugin surfaces include
55
+ workflows, output styles, and themes.
56
+ - **Editor installation and removal are transactional.** Profile downgrades and
57
+ uninstall remove only toolkit-managed assets, preserve user files, and cover
58
+ the new native Gemini, OpenCode, Antigravity, and Cline paths.
59
+
60
+ ### Security
61
+
62
+ - **Filesystem writers reject symlink ancestry and ancestor-swap attacks.** New
63
+ generators and cleanup paths use pinned transactions with rollback, while
64
+ plugin verification rejects missing, extra, modified, or wrongly-modeled
65
+ archive members.
66
+
67
+ ### Ecosystem
68
+
69
+ - Refreshed the 13-tool compatibility registry and upstream snapshot after
70
+ revalidating Claude Code, Codex CLI, Antigravity, Gemini, OpenCode, and Cline
71
+ against their current native contracts.
72
+
10
73
  ## v4.24.1 — a dead link reported itself as installed (2026-08-19)
11
74
 
12
75
  ### Fixed
package/README.md CHANGED
@@ -6,17 +6,18 @@
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-1524%20passing-success)](tests/)
9
+ [![Tests](https://img.shields.io/badge/tests-1637%20passing-success)](tests/)
10
10
 
11
- ## What's New in v4.24.1
11
+ ## What's New in v4.25.1
12
12
 
13
- **v4.24.1** `plugin install` accepted a dead symlink as proof of installation.
14
- The guard asked `exists() or is_symlink()`, and a link with no target still
15
- answers yes to the second half, so the installer logged `OK` and repaired
16
- nothing — precisely the state a toolkit upgrade leaves, since replacing `app/`
17
- breaks every link into it. Dangling links are now dropped and relinked; real
18
- files and live links stay untouched. Pairs with v4.24.0's user-level pack root,
19
- which is what stops the breakage happening in the first place.
13
+ **v4.25.1** fixes the CVE scanner path exercised by the published-package smoke test:
14
+
15
+ - Legacy npm audit `advisories` are normalized alongside the modern
16
+ `vulnerabilities` response.
17
+ - HIGH advisories now produce findings and the documented non-zero exit code
18
+ instead of a false clean result.
19
+ - The post-release scanner fixture now exercises accessibility, SEO, HIPAA, and
20
+ a deliberately vulnerable npm dependency with their real CLI flags.
20
21
 
21
22
  See [CHANGELOG.md](CHANGELOG.md) for full history.
22
23
 
@@ -91,6 +92,24 @@ ai-toolkit claude-app export --verify
91
92
  Re-export and re-upload after toolkit or registered-rule updates. Skills work
92
93
  in Chat and Cowork; hooks and sub-agents are active only in Cowork.
93
94
 
95
+ ### Native Codex Plugin
96
+
97
+ Build or validate the marketplace-ready Codex package without changing
98
+ `~/.agents` or `~/.codex`:
99
+
100
+ ```bash
101
+ ai-toolkit codex-plugin export --output ai-toolkit-codex-plugin.zip
102
+ ai-toolkit codex-plugin verify
103
+ ```
104
+
105
+ Extract the ZIP into a local marketplace under `plugins/ai-toolkit/`, add that
106
+ marketplace with `codex plugin marketplace add <marketplace-root>`, then install
107
+ from `/plugins` in Codex CLI and start a new session. Review and trust the
108
+ bundled hooks before use. The ZIP includes plugin-local persona definitions,
109
+ the briefing helper, the skill-audit helper and its local imports, and other
110
+ referenced skill resources. Export rejects symlinked output paths and ancestors.
111
+ Codex IDE does not support plugins.
112
+
94
113
  ### Install Profiles
95
114
 
96
115
  ```bash
@@ -118,15 +137,15 @@ See [CLI Reference](kb/reference/cli-reference.md) for all commands and options.
118
137
  | Claude Chat / Cowork | uploaded plugin ZIP + UI global/folder instructions | Cowork only | account/app |
119
138
  | Cursor | `.cursor/rules/*.mdc` + `.cursor/mcp.json` + `.cursor/skills/*` | ✅ | project (`~/.cursor/mcp.json` for MCP only) |
120
139
  | Windsurf (Devin Desktop) | `~/.config/devin/AGENTS.md` + `.devin/rules/*.md` + `.devin/hooks.v1.json` + `.windsurf/skills/*` | ✅ | global + project |
121
- | Gemini CLI | `~/.gemini/GEMINI.md` | ✅ | global |
140
+ | Gemini CLI | `~/.gemini/GEMINI.md` + `.gemini/settings.json` + `.gemini/{commands,skills,agents}/` | ✅ | project + user |
122
141
  | 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 |
123
- | Cline | `~/Documents/Cline/Rules/*.md` + `~/.cline/skills/*` + `.clinerules/*.md` | | global + project |
142
+ | Cline | Project: `.cline/{rules,hooks,skills}/` + `.clinerules/{hooks,workflows}/`; user: `~/.cline/{rules,hooks,skills}/` + `~/Documents/Cline/{Rules,Hooks}/` compatibility | | global + project |
124
143
  | Roo Code / [Zoo Code](https://zoocode.dev/) | `~/.roo/rules/*.md` + `.roomodes` + `.roo/rules/*.md` | — | global rules + project |
125
144
  | Aider | `~/.aider.conf.yml` + `.aider.conf.yml` + `CONVENTIONS.md` | — | global + project |
126
145
  | Augment | `~/.augment/rules/*.md` + `.augment/rules/ai-toolkit-*.md` | ✅ | global + project |
127
- | Google Antigravity | `.agents/rules/*.md` + `.agents/workflows/*.md` + skill pointer in `.agent/skills/*` (IDE) and `.agents/skills/*` (CLI) | | project |
146
+ | Google Antigravity | Project `.agents/{rules,workflows,skills,agents,hooks}/`; user `~/.gemini/config/{skills,agents,hooks}/`; opt-in native plugin export | | project + user |
128
147
  | 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 |
129
- | opencode | `AGENTS.md` + `.opencode/{agents,commands,plugins}/*` + `opencode.json` | ✅ | project + global (`~/.config/opencode/`) |
148
+ | opencode | `AGENTS.md` + `.opencode/{agents,commands,plugins,skills}/*` + `opencode.{json,jsonc}` | ✅ | project + global (`~/.config/opencode/`) |
130
149
 
131
150
  > 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.
132
151
 
@@ -164,7 +183,7 @@ ai-toolkit/
164
183
  │ └── ARCHITECTURE.md # Full system design
165
184
  ├── kb/ # Reference docs, procedures, plans
166
185
  ├── scripts/ # Validation, install, evaluation scripts
167
- ├── tests/ # Bats and Python test suite (1494 tests)
186
+ ├── tests/ # Bats and Python test suite (1637 tests)
168
187
  └── CHANGELOG.md
169
188
  ```
170
189
 
@@ -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.1",
6
+ "version": "4.25.1",
7
7
  "author": {
8
8
  "name": "SoftSpark",
9
9
  "url": "https://github.com/softspark"
@@ -9,7 +9,6 @@ Stdlib only. No external dependencies.
9
9
  """
10
10
 
11
11
  import json
12
- import os
13
12
  import shutil
14
13
  import subprocess
15
14
  import sys
@@ -141,7 +140,7 @@ def run_audit(eco: dict, root: Path, fix: bool = False) -> dict:
141
140
  except FileNotFoundError:
142
141
  result["error"] = f"Tool '{eco['tool']}' not found in PATH"
143
142
  except subprocess.TimeoutExpired:
144
- result["error"] = f"Audit command timed out after 120s"
143
+ result["error"] = "Audit command timed out after 120s"
145
144
 
146
145
  return result
147
146
 
@@ -168,6 +167,21 @@ def parse_npm_audit(raw: str) -> list[dict]:
168
167
  "url": via.get("url", ""),
169
168
  "fixed_in": info.get("fixAvailable", {}).get("version", "unknown") if isinstance(info.get("fixAvailable"), dict) else "unknown",
170
169
  })
170
+
171
+ for advisory in data.get("advisories", {}).values():
172
+ installed_versions = sorted({
173
+ finding.get("version", "unknown")
174
+ for finding in advisory.get("findings", [])
175
+ })
176
+ findings.append({
177
+ "severity": advisory.get("severity", "unknown").upper(),
178
+ "package": advisory.get("module_name", "unknown"),
179
+ "installed": ", ".join(installed_versions) or "unknown",
180
+ "cve": advisory.get("cves", []) or [advisory.get("github_advisory_id", "N/A")],
181
+ "title": advisory.get("title", "Unknown"),
182
+ "url": advisory.get("url", ""),
183
+ "fixed_in": advisory.get("patched_versions", "unknown"),
184
+ })
171
185
  return findings
172
186
 
173
187
 
@@ -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,