@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/llms-full.txt CHANGED
@@ -7041,9 +7041,9 @@ title: "SOP: Post-Release Testing"
7041
7041
  category: procedures
7042
7042
  service: ai-toolkit
7043
7043
  tags: [sop, post-release, smoke-test, npm, sandbox, plugin-pack, provenance, isolation]
7044
- version: "1.1.0"
7044
+ version: "1.2.0"
7045
7045
  created: "2026-07-26"
7046
- last_updated: "2026-08-06"
7046
+ last_updated: "2026-08-19"
7047
7047
  description: "Smoke-test a published @softspark/ai-toolkit release from npm in an isolated HOME and npm prefix, without touching the maintainer's real install. Covers provenance, CLI, doctor, per-skill script resolution, scanner wiring, and the full plugin-pack lifecycle including the degraded-install path. Written for v4.18.0 and not run; v4.18.0 shipped a pack that broke every command it touched. First actually run on v4.22.0, which added Phases 4b and 4c after that release fixed four skills whose documented script path had never resolved and two that shipped a scanner nothing invoked."
7048
7048
  ---
7049
7049
 
@@ -7197,21 +7197,30 @@ cat > "$FX/index.html" <<'EOF'
7197
7197
  <!DOCTYPE html><html><head><title>t</title></head>
7198
7198
  <body><h1>A</h1><h3>skipped h2</h3><img src="x.png"><input type="text"><div onclick="go()">click</div></body></html>
7199
7199
  EOF
7200
- printf '{"name":"fx","dependencies":{"react":"18"}}\n' > "$FX/package.json"
7201
-
7202
- for s in a11y-validate seo-validate hipaa-validate cve-scan; do
7203
- D="$HOME/.claude/skills/$s"
7204
- script=$(ls "$D"/scripts/*.py 2>/dev/null | head -1)
7205
- [ -n "$script" ] || continue
7206
- echo "=== $s ==="
7207
- CLAUDE_SKILL_DIR="$D" timeout 60 python3 "$script" "$FX" --output json </dev/null 2>&1 | head -3
7208
- done
7200
+ cat > "$FX/patient.py" <<'EOF'
7201
+ patient = {"ssn": "123-45-6789", "diagnosis": "fixture"}
7202
+ endpoint = "http://example.com/patient"
7203
+ encrypt = False
7204
+ EOF
7205
+ printf '{"name":"fx","dependencies":{"lodash":"4.17.20","react":"18"}}\n' > "$FX/package.json"
7206
+ npm install --package-lock-only --ignore-scripts --prefix "$FX"
7207
+
7208
+ D="$HOME/.claude/skills/a11y-validate"
7209
+ CLAUDE_SKILL_DIR="$D" timeout 60 python3 "$D/scripts/a11y-scanner.py" "$FX" --output json </dev/null
7210
+ D="$HOME/.claude/skills/seo-validate"
7211
+ CLAUDE_SKILL_DIR="$D" timeout 60 python3 "$D/scripts/seo-scanner.py" "$FX" --output json </dev/null
7212
+ D="$HOME/.claude/skills/hipaa-validate"
7213
+ CLAUDE_SKILL_DIR="$D" timeout 60 python3 "$D/scripts/hipaa_scan.py" "$FX" --output json </dev/null
7214
+ D="$HOME/.claude/skills/cve-scan"
7215
+ CLAUDE_SKILL_DIR="$D" timeout 60 python3 "$D/scripts/cve_scan.py" "$FX" --json </dev/null
7209
7216
  ```
7210
7217
 
7211
7218
  **Verify:**
7212
7219
  - [ ] The scanner returns findings, not an empty set — the fixture has real defects
7213
7220
  - [ ] Findings span more than one category, proving the whole check set ran
7214
7221
  - [ ] A scanner that exits non-zero on findings is doing its job, not failing
7222
+ - [ ] CVE output has `total_findings > 0`; raw npm advisories with an empty
7223
+ normalized `findings` array are a parser failure, not a clean scan
7215
7224
 
7216
7225
  `a11y-validate` and `seo-validate` shipped working scanners that **no step in
7217
7226
  either skill invoked** for their entire life before v4.22.0. The model was told to
@@ -8805,9 +8814,9 @@ title: "AI Toolkit - Architecture Overview"
8805
8814
  category: reference
8806
8815
  service: ai-toolkit
8807
8816
  tags: [architecture, overview, design, structure]
8808
- version: "1.7.0"
8817
+ version: "1.8.0"
8809
8818
  created: "2026-03-23"
8810
- last_updated: "2026-08-06"
8819
+ last_updated: "2026-08-19"
8811
8820
  description: "Architecture of ai-toolkit: directory layout, Claude app export, global install model, editor-aware MCP install, Codex translation layer, skill tiers, and integration with projects."
8812
8821
  ---
8813
8822
 
@@ -8863,7 +8872,10 @@ ai-toolkit/
8863
8872
  generate_copilot.py # Generates Copilot instructions, agents, and portable skills
8864
8873
  generate_copilot_hooks.py # Generates native Copilot hooks + self-contained runtime
8865
8874
  generate_gemini.py # Generates GEMINI.md (sources _common.py)
8866
- generate_cline.py # Generates .clinerules (sources _common.py)
8875
+ generate_gemini_agents.py # Generates native .gemini/agents/*.md definitions
8876
+ generate_cline.py # Generates legacy .clinerules (sources _common.py)
8877
+ generate_cline_rules.py # Dual-emits .cline/rules + .clinerules compatibility
8878
+ generate_cline_hooks.py # Dual-emits .cline/hooks + .clinerules/hooks
8867
8879
  generate_roo_modes.py # Generates .roomodes
8868
8880
  generate_aider_conf.py # Generates .aider.conf.yml
8869
8881
  generate_llms_txt.py # Generates llms.txt
@@ -8925,7 +8937,11 @@ also emits `.github/instructions`, `.github/prompts`, and native
8925
8937
  `.github/hooks`. The user target writes the supported personal surfaces below
8926
8938
  `$COPILOT_HOME` (default `~/.copilot`) and does not generate prompt files there.
8927
8939
  Full-profile installs also emit native skill pointer catalogues for Cursor,
8928
- Windsurf, and Cline. Codex local install generates `AGENTS.md`,
8940
+ Windsurf, and Cline. Cline rules dual-emit to `.cline/rules/` and `.clinerules/`;
8941
+ profiles `standard`, `strict`, and `full` add executable hooks under both
8942
+ `.cline/hooks/<Event>` and `.clinerules/hooks/<Event>`. Gemini receives
8943
+ commands, a skill pointer, and native
8944
+ `.gemini/agents/*.md` definitions. Codex local install generates `AGENTS.md`,
8929
8945
  `.agents/skills/*`, `.codex/agents/*.toml`, `.codex/hooks.json`, and
8930
8946
  self-contained `.codex/hooks/*`. Global Codex install writes its user-owned
8931
8947
  surfaces below `$CODEX_HOME` (default `~/.codex`) while user skills remain in
@@ -8964,7 +8980,8 @@ project-scoped native MCP files: `.cursor/mcp.json`, `.github/mcp.json`,
8964
8980
  | `copilot-instructions` | `./` | Generates `.github/copilot-instructions.md` |
8965
8981
  | `gemini-md` | `./` | Generates `GEMINI.md` |
8966
8982
  | `cline-rules` | `./` | Generates `.clinerules` (legacy) |
8967
- | `cline-dir-rules` | `./` | Generates `.clinerules/*.md` |
8983
+ | `cline-dir-rules` | `./` | Generates `.cline/rules/*.md` plus `.clinerules/*.md` compatibility |
8984
+ | `cline-hooks` | `./` | Generates eight executable files under `.cline/hooks/` and `.clinerules/hooks/` |
8968
8985
  | `roo-modes` | `./` | Generates `.roomodes` |
8969
8986
  | `roo-dir-rules` | `./` | Generates `.roo/rules/*.md` |
8970
8987
  | `aider-conf` | `./` | Generates `.aider.conf.yml` |
@@ -9406,9 +9423,9 @@ title: "Claude Ecosystem Expansion Foundations"
9406
9423
  category: reference
9407
9424
  service: ai-toolkit
9408
9425
  tags: [benchmark, claude-code, ecosystem, hooks, plugins, architecture]
9409
- version: "1.1.0"
9426
+ version: "1.2.0"
9410
9427
  created: "2026-03-27"
9411
- last_updated: "2026-07-10"
9428
+ last_updated: "2026-08-19"
9412
9429
  description: "Reference summary of the ecosystem signals and implementation foundations adopted in ai-toolkit, including runtime-aware plugin packaging."
9413
9430
  ---
9414
9431
 
@@ -9446,9 +9463,21 @@ hooks and sub-agents are Cowork-only.
9446
9463
 
9447
9464
  ### 2. Broader lifecycle coverage
9448
9465
 
9449
- The toolkit now covers prompt, edit, subagent, compaction, and session-end phases.
9450
-
9451
- Implemented events:
9466
+ The validator tracks the complete current Claude Code hook schema. Tracking an
9467
+ event means plugin manifests and hand-authored hook configuration can use it; it
9468
+ does not mean the default toolkit bundle registers a handler for that event.
9469
+
9470
+ Tracked schema events:
9471
+ - `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `Notification`, `MessageDisplay`
9472
+ - `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`
9473
+ - `Stop`, `StopFailure`, `UserPromptExpansion`
9474
+ - `SubagentStart`, `SubagentStop`, `PreCompact`, `PostCompact`
9475
+ - `PermissionRequest`, `PermissionDenied`, `Elicitation`, `ElicitationResult`
9476
+ - `TaskCreated`, `TaskCompleted`, `TeammateIdle`
9477
+ - `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `DirectoryAdded`, `FileChanged`, `ConfigChange`
9478
+ - `Setup`, `InstructionsLoaded`
9479
+
9480
+ Toolkit-wired events in `app/hooks.json`:
9452
9481
  - `SessionStart`
9453
9482
  - `Notification`
9454
9483
  - `PreToolUse`
@@ -9461,6 +9490,19 @@ Implemented events:
9461
9490
  - `SubagentStop`
9462
9491
  - `PreCompact`
9463
9492
  - `SessionEnd`
9493
+ - `InstructionsLoaded`
9494
+ - `ConfigChange`
9495
+
9496
+ `MessageDisplay` and `DirectoryAdded` are tracked but intentionally have no
9497
+ default toolkit handler. `DirectoryAdded` runs asynchronously after `/add-dir`
9498
+ or SDK `register_repo_root` and cannot block the add. `MessageDisplay` can
9499
+ replace rendered text through `displayContent` without changing the transcript.
9500
+
9501
+ Claude Code also recognizes native plugin workflows, output styles, LSP
9502
+ servers, experimental themes and monitors, MCP-backed channels, and root plugin
9503
+ settings. Those are documented class C surfaces rather than generated toolkit
9504
+ output; root plugin settings currently support only `agent` and
9505
+ `subagentStatusLine`.
9464
9506
 
9465
9507
  ### 3. Creator workflows
9466
9508
 
@@ -9523,7 +9565,7 @@ category: reference
9523
9565
  service: ai-toolkit
9524
9566
  tags: [cli, commands, reference, install, update, plugin, mcp, telemetry]
9525
9567
  created: "2026-04-13"
9526
- last_updated: "2026-07-26"
9568
+ last_updated: "2026-08-19"
9527
9569
  description: "Complete CLI reference for all ai-toolkit commands, options, and flags."
9528
9570
  ---
9529
9571
 
@@ -9550,6 +9592,8 @@ Usage: ai-toolkit <command> [options]
9550
9592
  | `eject [dir]` | Export standalone config (no symlinks, no toolkit dependency) |
9551
9593
  | `claude-app export [--output FILE] [--no-custom-rules] [--verify]` | Build an uploadable Claude Chat/Desktop/Cowork plugin ZIP and global-instructions file |
9552
9594
  | `claude-app verify` | Validate a clean staged plugin with structural checks and the official Claude plugin validator |
9595
+ | `codex-plugin export [--output FILE]` | Build a deterministic native Codex plugin ZIP with skills and self-contained hooks |
9596
+ | `codex-plugin verify` | Validate a clean native Codex plugin stage without installing it or changing user configuration |
9553
9597
 
9554
9598
  ## Rule & Hook Injection
9555
9599
 
@@ -9573,6 +9617,9 @@ Usage: ai-toolkit <command> [options]
9573
9617
 
9574
9618
  ## Plugin Management
9575
9619
 
9620
+ `plugin ...` manages ai-toolkit's experimental runtime packs. Native Codex
9621
+ plugin packaging uses the separate `codex-plugin ...` command above.
9622
+
9576
9623
  | Command | Description |
9577
9624
  |---------|-------------|
9578
9625
  | `plugin list` | Show available plugin packs with install status |
@@ -9584,6 +9631,23 @@ Usage: ai-toolkit <command> [options]
9584
9631
  | `plugin remove <name> [--editor claude\|codex\|all]` | Remove a plugin pack |
9585
9632
  | `plugin status [--editor claude\|codex\|all]` | Show installed plugins with runtime-specific details |
9586
9633
 
9634
+ ### Native Codex plugin package
9635
+
9636
+ ```bash
9637
+ ai-toolkit codex-plugin export --output ai-toolkit-codex-plugin.zip
9638
+ ai-toolkit codex-plugin verify
9639
+ ```
9640
+
9641
+ Extract the ZIP to `<marketplace-root>/plugins/ai-toolkit/`, add an entry with
9642
+ `source.path: ./plugins/ai-toolkit` in
9643
+ `<marketplace-root>/.agents/plugins/marketplace.json`, then run
9644
+ `codex plugin marketplace add <marketplace-root>` for that non-default local
9645
+ marketplace. Open `/plugins` in Codex CLI, install the plugin, review/trust the
9646
+ bundled hooks, and start a new session. The ZIP includes plugin-local skill
9647
+ runtime resources, including the skill-audit helper and its Python imports.
9648
+ Export refuses symlinked output files and ancestors instead of resolving them
9649
+ to another destination. Codex IDE does not support plugins.
9650
+
9587
9651
  ## Config Inheritance
9588
9652
 
9589
9653
  | Command | Description |
@@ -9624,7 +9688,8 @@ Usage: ai-toolkit <command> [options]
9624
9688
  | `copilot-instructions` | Generate `.github/copilot-instructions.md` |
9625
9689
  | `gemini-md` | Generate `GEMINI.md` for Gemini CLI |
9626
9690
  | `cline-rules` | Generate `.clinerules` (legacy) |
9627
- | `cline-dir-rules` | Generate `.clinerules/*.md` (recommended) |
9691
+ | `cline-dir-rules` | Generate `.cline/rules/*.md` plus `.clinerules/*.md` compatibility |
9692
+ | `cline-hooks` | Generate eight executable `.cline/hooks/<Event>` files plus `.clinerules/hooks/<Event>` extension compatibility |
9628
9693
  | `roo-modes` | Generate `.roomodes` |
9629
9694
  | `roo-dir-rules` | Generate `.roo/rules/*.md` |
9630
9695
  | `aider-conf` | Generate `.aider.conf.yml` |
@@ -9632,6 +9697,8 @@ Usage: ai-toolkit <command> [options]
9632
9697
  | `augment-rules` | Generate `.augment/rules/ai-toolkit.md` (legacy) |
9633
9698
  | `augment-dir-rules` | Generate `.augment/rules/ai-toolkit-*.md` (recommended) |
9634
9699
  | `antigravity-rules` | Generate `.agents/rules/` and `.agents/workflows/` |
9700
+ | `antigravity-plugin export [output]` | Export deterministic native Antigravity plugin ZIP for `.agents/plugins/<name>/`, `~/.gemini/antigravity-cli/plugins/<name>/` (CLI), or `~/.gemini/config/plugins/<name>/` (IDE/shared product) |
9701
+ | `antigravity-plugin verify <archive-or-dir>` | Verify Antigravity plugin schema, paths, hooks, modes, and self-containment offline |
9635
9702
  | `llms-txt` | Generate `llms.txt` and `llms-full.txt` |
9636
9703
 
9637
9704
  ## Other Commands
@@ -9681,9 +9748,9 @@ title: "AI Toolkit - Codex CLI Compatibility"
9681
9748
  category: reference
9682
9749
  service: ai-toolkit
9683
9750
  tags: [codex, compatibility, install, skills, hooks]
9684
- version: "1.0.4"
9751
+ version: "1.1.0"
9685
9752
  created: "2026-04-12"
9686
- last_updated: "2026-07-14"
9753
+ last_updated: "2026-08-19"
9687
9754
  description: "Reference for how ai-toolkit maps Claude-oriented skills, hooks, and plugin packs to Codex CLI."
9688
9755
  ---
9689
9756
 
@@ -9752,6 +9819,72 @@ Codex base. Codex hooks no longer depend on executable paths under
9752
9819
  `~/.softspark/ai-toolkit/`; project assets live beside `.codex/hooks.json`, and
9753
9820
  user assets live under `$CODEX_HOME/ai-toolkit-hooks/`.
9754
9821
 
9822
+ ## Native Codex Plugin Export
9823
+
9824
+ The separate native distribution command packages the toolkit for Codex's
9825
+ plugin marketplace flow without writing user configuration:
9826
+
9827
+ ```bash
9828
+ ai-toolkit codex-plugin export --output ai-toolkit-codex-plugin.zip
9829
+ ai-toolkit codex-plugin verify
9830
+ ```
9831
+
9832
+ The deterministic archive has this root layout:
9833
+
9834
+ ```text
9835
+ .codex-plugin/plugin.json
9836
+ skills/*/SKILL.md
9837
+ skills/persona/personas/*.md
9838
+ skills/briefing/scripts/session_token_stats.py
9839
+ scripts/audit_skills.py
9840
+ scripts/{_common,frontmatter,injection,emission,instruction_core}.py
9841
+ hooks/hooks.json
9842
+ hooks/*
9843
+ constitution.md
9844
+ LICENSE
9845
+ ```
9846
+
9847
+ The manifest name is `ai-toolkit`, its version comes from `package.json`, and
9848
+ `skills` points to `./skills/`. It intentionally omits a `hooks` field because
9849
+ Codex discovers the default `hooks/hooks.json` file. Every bundled hook command
9850
+ uses `${PLUGIN_ROOT}/hooks/...`; no command depends on a git root, `CODEX_HOME`,
9851
+ or the toolkit's global-install hook directory. Executable modes, archive order,
9852
+ and timestamps are fixed so identical sources produce identical ZIP bytes.
9853
+ Skill references are adapted to plugin-local paths. Validation covers every
9854
+ intentionally bundled cross-skill/runtime dependency, including persona
9855
+ definitions, the briefing helper, the documentation standards skill, and the
9856
+ constitution referenced by the security skill. Bare `scripts/...` references
9857
+ are classified as plugin runtime, target-workspace, skill-local, or
9858
+ source-toolkit references; unclassified paths fail validation. The skill-audit
9859
+ command uses the staged helper, whose local imports are bundled at plugin root.
9860
+
9861
+ `verify` stages a clean plugin under a temporary directory and checks the
9862
+ manifest, component paths, skills, exact canonical command-only hooks,
9863
+ executable assets, `SessionEnd` timeout, and symlink safety. The check is
9864
+ self-contained: it does not execute mutable validators selected from `$HOME`
9865
+ or environment-provided paths, add a marketplace, install a plugin, or write
9866
+ under `~/.agents` or `~/.codex`.
9867
+ Archive output uses the shared pinned-directory transaction and rejects a
9868
+ symlink at the destination or in any requested ancestor, so a redirected path
9869
+ cannot write outside the lexical destination.
9870
+
9871
+ To test the exported archive through a non-default local marketplace:
9872
+
9873
+ 1. Extract it to `<marketplace-root>/plugins/ai-toolkit/`.
9874
+ 2. Add an `ai-toolkit` entry to
9875
+ `<marketplace-root>/.agents/plugins/marketplace.json` with
9876
+ `source.path: ./plugins/ai-toolkit`.
9877
+ 3. Run `codex plugin marketplace add <marketplace-root>` once for that
9878
+ non-default marketplace.
9879
+ 4. Open `/plugins` in Codex CLI, install `ai-toolkit`, review/trust its hooks,
9880
+ and start a new session.
9881
+
9882
+ Codex IDE does not support plugins. Use Codex CLI or the ChatGPT desktop app for
9883
+ plugin browsing and installation.
9884
+
9885
+ Sources: [Codex plugin packaging](https://developers.openai.com/plugins/build/plugins),
9886
+ [plugin availability](https://learn.chatgpt.com/docs/plugins).
9887
+
9755
9888
  ## Skill Translation Model
9756
9889
 
9757
9890
  Two delivery modes are used for Codex:
@@ -9801,9 +9934,8 @@ even when its tool list is otherwise portable. Examples include:
9801
9934
 
9802
9935
  ## Hook Compatibility
9803
9936
 
9804
- Codex does not expose the full Claude hook event surface. Codex's
9805
- `HookEventName` enum defines 10 events; the Codex hook generator wires 9 of
9806
- them:
9937
+ Codex does not expose the full Claude hook event surface. The current native
9938
+ contract defines 11 events; the Codex hook generator wires 10 of them:
9807
9939
 
9808
9940
  - `SessionStart`
9809
9941
  - `PreToolUse`
@@ -9813,13 +9945,34 @@ them:
9813
9945
  - `SubagentStart`
9814
9946
  - `SubagentStop`
9815
9947
  - `PreCompact`
9948
+ - `SessionEnd`
9816
9949
  - `Stop`
9817
9950
 
9818
9951
  `PostCompact` is the one enum event left unwired (its only hook was the removed
9819
9952
  environment-snapshot probe). Claude-only events such as `TaskCompleted`,
9820
- `TeammateIdle`, `SessionEnd`, and `Notification` have no Codex equivalent and
9821
- are not available in `.codex/hooks.json`. Handler types: only `command` runs;
9822
- `prompt` and `agent` are parsed by Codex but not yet executed.
9953
+ `TeammateIdle`, and `Notification` have no Codex equivalent and are not
9954
+ available in `.codex/hooks.json`.
9955
+
9956
+ The generated `SessionEnd` handler runs the self-contained `session-end.sh`
9957
+ asset with `timeout: 3`, Codex's documented maximum. It runs only for the main
9958
+ thread, always synchronously, and is advisory: its output cannot steer Codex or
9959
+ keep the thread open. The asset therefore stays silent, cleans the session's
9960
+ toolkit state when available, and writes the handoff snapshot outside the
9961
+ repository with Codex-native `AGENTS.md` restart guidance.
9962
+
9963
+ Existing native hook documents may include an optional top-level string
9964
+ `description`; merges preserve it unchanged. Command handlers may include a
9965
+ non-negative integer `additionalContextLimit`, including zero, and valid user
9966
+ values are also preserved. Booleans, negative values, and non-integers are
9967
+ rejected before any file is changed. `SessionEnd` timeouts above three seconds
9968
+ are rejected.
9969
+
9970
+ Only executable `type: "command"` handlers are accepted. The current official
9971
+ hooks page says `prompt` and `agent` handlers are parsed but skipped, and does
9972
+ not establish an executable `mcp_tool` handler schema. Codex CLI 0.148.0 release
9973
+ notes mention MCP hooks, which conflicts with that page. Toolkit support stays
9974
+ command-only until OpenAI confirms the native config schema and execution
9975
+ semantics in the canonical hooks documentation.
9823
9976
 
9824
9977
  The generator merges these Codex-compatible events into project or user
9825
9978
  `hooks.json`, preserving unrelated user handlers and replacing only commands
@@ -9837,10 +9990,12 @@ After installation or any hook change, open `/hooks` in Codex and review/trust
9837
9990
  the exact definitions. Project hooks additionally require a trusted `.codex`
9838
9991
  project layer. The installer never bypasses hook trust.
9839
9992
 
9993
+ Source: [Codex hooks](https://learn.chatgpt.com/docs/hooks).
9994
+
9840
9995
  Generated Codex hook commands include `AI_TOOLKIT_HOOK_QUIET=1`. Native
9841
- `SessionStart`, `PreCompact`, and MCP-health adapters use Codex instruction and
9842
- config terminology (`AGENTS.md`, `.codex/config.toml`) instead of Claude-only
9843
- paths. The generated
9996
+ `SessionStart`, `SessionEnd`, `PreCompact`, and MCP-health adapters use Codex
9997
+ instruction and config terminology (`AGENTS.md`, `.codex/config.toml`) instead
9998
+ of Claude-only paths. The generated
9844
9999
  `UserPromptSubmit` governance hook does not set `AI_TOOLKIT_HOOK_FORMAT=json`
9845
10000
  by default because Codex currently renders `additionalContext` as visible hook
9846
10001
  context in the TUI. This keeps prompt-submit output quiet while preserving hook
@@ -9912,6 +10067,8 @@ The Codex compatibility path is verified by:
9912
10067
  2. Local install tests for `.agents/skills/` and `.codex/hooks.json`
9913
10068
  3. Plugin install tests for global Codex rules, hooks, and cleanup paths
9914
10069
  4. CLI tests for `codex-md` and `codex-hooks`
10070
+ 5. Native plugin export tests for layout, hooks, determinism, validation, CLI
10071
+ dispatch, and no-home-mutation behavior
9915
10072
 
9916
10073
  ## Related
9917
10074
 
@@ -10898,7 +11055,7 @@ tags:
10898
11055
  doc_type: reference
10899
11056
  created: "2026-04-11"
10900
11057
  last_updated: "2026-07-26"
10901
- description: "Comprehensive guide for setting up and using ai-toolkit configuration inheritance. Covers base config creation, project setup, enforcement rules, CI integration, and troubleshooting."
11058
+ description: "Configuration inheritance for ai-toolkit projects extends base settings from npm packages, Git URLs, or local paths. Defines merge semantics, enforcement rules, and CLI commands for validating and diffing configurations."
10902
11059
  ---
10903
11060
 
10904
11061
  # Enterprise Config Inheritance Guide
@@ -11547,9 +11704,9 @@ title: "Global Install Model"
11547
11704
  category: reference
11548
11705
  service: ai-toolkit
11549
11706
  tags: [install, global, claude, codex, plugins, local-setup]
11550
- version: "3.3.1"
11707
+ version: "3.4.0"
11551
11708
  created: "2026-03-26"
11552
- last_updated: "2026-07-15"
11709
+ last_updated: "2026-08-19"
11553
11710
  description: "Reference description of Claude Code global install, Claude app plugin export, project-local editor setup, global Codex plugin layering, and command responsibilities in ai-toolkit."
11554
11711
  ---
11555
11712
 
@@ -11599,7 +11756,7 @@ The `--profile` flag controls how much of each editor's native surface is activa
11599
11756
  | Profile | What runs | Use when |
11600
11757
  |---------|-----------|----------|
11601
11758
  | `minimal` | Smallest editor surface. Copilot still receives its root instructions, native agents, and self-contained skills; Codex still receives instructions, agents, skills, and native safety hooks. | You want the smallest supported footprint. |
11602
- | `standard` (default) | Claude Code + editor rule files. Includes Gemini hooks and native Copilot instructions, agents, portable skills, and hooks. | Day-to-day installs. Most users. |
11759
+ | `standard` (default) | Claude Code + editor rule files. Includes Gemini and Antigravity hooks plus native Copilot instructions, agents, portable skills, and hooks. | Day-to-day installs. Most users. |
11603
11760
  | `strict` | Everything in `standard` plus git-hook wiring for commit-time safety checks. | Solo dev or tight team with zero tolerance for drift. |
11604
11761
  | `full` | Every native surface across every editor: hooks, sub-agents, custom commands, skill pointers for Cursor / Windsurf / Gemini / Augment / Antigravity. | You want maximum coverage and understand that each editor will carry generated files under its own layout. |
11605
11762
 
@@ -11642,20 +11799,20 @@ store, so toolkit updates require re-export and re-upload.
11642
11799
  with documented, file-based config surfaces:
11643
11800
 
11644
11801
  - `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`)
11645
- - `gemini`: `~/.gemini/GEMINI.md`; hooks at `~/.gemini/settings.json` (profile ≥ standard); `~/.gemini/commands/` and `~/.gemini/skills/` pointer (profile full)
11802
+ - `gemini`: `~/.gemini/GEMINI.md`; hooks at `~/.gemini/settings.json` (profile ≥ standard); `~/.gemini/commands/`, `~/.gemini/skills/` pointer, and native `~/.gemini/agents/*.md` (profile full)
11646
11803
  - `augment`: `~/.augment/rules/ai-toolkit.md`; `~/.augment/agents/`, `~/.augment/commands/`, and hooks in `~/.augment/settings.json` (profile full)
11647
- - `cline`: `~/Documents/Cline/Rules/ai-toolkit-*.md` plus `~/.cline/skills/ai-toolkit-skill-catalogue/SKILL.md`
11804
+ - `cline`: `~/.cline/rules/ai-toolkit-*.md` plus `~/Documents/Cline/Rules/ai-toolkit-*.md` compatibility; profiles `standard`, `strict`, and `full` add the exact eight executable hooks under both `~/.cline/hooks/` and `~/Documents/Cline/Hooks/`; a `~/.cline/skills/ai-toolkit-skill-catalogue/SKILL.md` pointer is used only when Cline cannot discover real Claude skills
11648
11805
  - `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)
11649
11806
  - `aider`: `~/.aider.conf.yml` plus `~/.aider-ai-toolkit-CONVENTIONS.md` when the YAML file does not already exist
11650
11807
  - `codex`: `$CODEX_HOME/AGENTS.md`, `$CODEX_HOME/agents/*.toml`, `$CODEX_HOME/hooks.json`, `$CODEX_HOME/ai-toolkit-hooks/*`, plus `$HOME/.agents/skills/*`; `CODEX_HOME` defaults to `~/.codex`, and `~/AGENTS.md` is not Codex's user-instruction file
11651
- - `opencode`: `~/.config/opencode/*`
11808
+ - `opencode`: `~/.config/opencode/{AGENTS.md,agents/,commands/,plugins/,opencode.json}`; `profile=full` also copies complete native skills to `~/.config/opencode/skills/<name>/`
11652
11809
 
11653
11810
  Cursor, GitHub Copilot, and Google Antigravity now have partial global support,
11654
11811
  scoped to whatever documented HOME file surface each exposes:
11655
11812
 
11656
11813
  - `cursor`: `~/.cursor/hooks.json` (safety/quality hooks; profile ≥ standard). Cursor RULES stay project-local — their only global surface is the Settings UI.
11657
11814
  - `copilot`: instructions, native agents, portable skills, and native hooks under `$COPILOT_HOME` when set or `~/.copilot` otherwise. The hook config is `hooks/ai-toolkit.json`; its self-contained runtime is `hooks/ai-toolkit/copilot_hook.py`. VS Code and GitHub.com still use repo `.github/` files, which local install emits.
11658
- - `antigravity`: skill pointer at `~/.gemini/config/skills/` and `~/.gemini/antigravity-cli/skills/`. Antigravity RULES stay project-local.
11815
+ - `antigravity`: current canonical skill pointers at `~/.gemini/antigravity-cli/skills/` for CLI and `~/.gemini/config/skills/` for the IDE/shared product; native hooks at `~/.gemini/config/hooks.json` for standard/strict/full; native agents at `~/.gemini/config/agents/` for full. Only workspace `.agent/skills/` is legacy. Antigravity rules stay project-local. Native plugins are opt-in exports installed manually under `~/.gemini/antigravity-cli/plugins/<name>/` for CLI or `~/.gemini/config/plugins/<name>/` for the IDE/shared product.
11659
11816
 
11660
11817
  Their global MCP support, where available, is handled by `ai-toolkit mcp
11661
11818
  install`, not by the rule installer.
@@ -11690,7 +11847,9 @@ These files still stay local to a repository as part of the core install model:
11690
11847
  - `.github/agents/ai-toolkit-*.agent.md`
11691
11848
  - `.github/skills/ai-toolkit-*/SKILL.md` plus required assets and helper scripts
11692
11849
  - `.github/hooks/ai-toolkit.json` plus `.github/hooks/ai-toolkit/copilot_hook.py` (profile ≥ `standard`)
11693
- - `.clinerules`
11850
+ - `.cline/rules/ai-toolkit-*.md` plus `.clinerules/ai-toolkit-*.md` compatibility
11851
+ - `.cline/hooks/<Event>` plus `.clinerules/hooks/<Event>` compatibility for Cline profiles `standard`, `strict`, and `full`
11852
+ - `.clinerules/workflows/ai-toolkit-*.md`
11694
11853
  - `.roomodes`
11695
11854
  - `.aider.conf.yml`
11696
11855
  - `.augment/rules/ai-toolkit-*.md`
@@ -11987,9 +12146,9 @@ title: "Hooks Catalog"
11987
12146
  category: reference
11988
12147
  service: ai-toolkit
11989
12148
  tags: [hooks, quality, safety, enforcement, settings.json]
11990
- version: "1.9.0"
12149
+ version: "1.11.0"
11991
12150
  created: "2026-03-27"
11992
- last_updated: "2026-07-26"
12151
+ last_updated: "2026-08-19"
11993
12152
  description: "Complete reference of all ai-toolkit hooks: events, scripts, installation, and runtime behavior."
11994
12153
  ---
11995
12154
 
@@ -12591,12 +12750,47 @@ Beyond the global Claude Code hooks above, editor profiles emit native hook file
12591
12750
  |--------|------|-----------|--------|
12592
12751
  | Cursor | `.cursor/hooks.json` | `generate_cursor_hooks.py` | Cursor hooks schema |
12593
12752
  | Devin CLI | `.devin/hooks.v1.json` | `generate_devin_hooks.py` | Claude-compatible (the replacement for Cascade) |
12594
- | Gemini CLI | `.gemini/settings.json` (hooks block) | `generate_gemini_hooks.py` | Gemini `BeforeTool`/`AfterTool` events |
12753
+ | Gemini CLI | `.gemini/settings.json` (hooks block) | `generate_gemini_hooks.py` | Native 11-event contract: `BeforeTool`, `AfterTool`, `BeforeToolSelection`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `AfterModel`, `Notification`, `PreCompress`, `SessionStart`, `SessionEnd`; toolkit handlers use the applicable subset and never emit `Stop` |
12595
12754
  | Augment | `.augment/settings.json` (hooks block) | `generate_augment_hooks.py` | Claude-style events |
12755
+ | Cline | `.cline/hooks/<Event>` plus `.clinerules/hooks/<Event>`; user `~/.cline/hooks/<Event>`; extension compatibility `~/Documents/Cline/Hooks/<Event>` | `generate_cline_hooks.py` | Eight extensionless executable files using Cline's native stdin/stdout contract (profile ≥ `standard`) |
12596
12756
  | GitHub Copilot | `.github/hooks/ai-toolkit.json`; user `$COPILOT_HOME/hooks/ai-toolkit.json` | `generate_copilot_hooks.py` | GitHub version 1, camelCase events (profile ≥ `standard`) |
12597
12757
  | Codex CLI | `.codex/hooks.json`; user `$CODEX_HOME/hooks.json` | `generate_codex_hooks.py` | Native Codex schema, PascalCase events, command ownership markers |
12758
+ | Google Antigravity | `.agents/hooks.json`; user `~/.gemini/config/hooks.json` | `generate_antigravity_hooks.py` | Native five-event schema plus adjacent Python adapter |
12598
12759
  | OpenCode | `.opencode/plugins/ai-toolkit-hooks.js`; user `~/.config/opencode/plugins/ai-toolkit-hooks.js` | `generate_opencode_plugin.py` | Native JavaScript plugin hooks |
12599
12760
 
12761
+ ### Cline hooks (`.cline/hooks/<Event>` and `.clinerules/hooks/<Event>`)
12762
+
12763
+ Cline CLI/SDK loads `.cline/hooks`, while the VS Code and JetBrains extension
12764
+ loads project hooks from `.clinerules/hooks`; project generation emits both.
12765
+ Cline loads extensionless executable files named `TaskStart`, `TaskResume`,
12766
+ `TaskCancel`, `TaskComplete`, `PreToolUse`, `PostToolUse`, `UserPromptSubmit`,
12767
+ and `PreCompact`. The toolkit adapter is self-contained, reads bounded JSON
12768
+ from stdin, and emits only Cline's documented `cancel`, `contextModification`,
12769
+ and `errorMessage` keys. `PreToolUse` validates the documented
12770
+ `preToolUse.toolName` plus `parameters` shape and cancels recognized destructive
12771
+ shell operations, including `run_commands` arrays; start, resume, prompt, and compaction events may inject safe
12772
+ context. Input size and runtime are bounded, and regeneration replaces only
12773
+ marked toolkit files while preserving user-owned hooks.
12774
+
12775
+ ### Google Antigravity hooks (`.agents/hooks.json`)
12776
+
12777
+ The toolkit owns only the top-level `ai-toolkit` namespace and preserves
12778
+ unrelated namespaces. The exact event set is `PreToolUse`, `PostToolUse`,
12779
+ `PreInvocation`, `PostInvocation`, and `Stop`. Tool events use matcher groups;
12780
+ the other events use direct command-handler lists. Every handler has a bounded
12781
+ timeout.
12782
+
12783
+ The adjacent Python runtime maps `.toolCall.name` and
12784
+ `.toolCall.args.CommandLine` to native camelCase responses. `PreToolUse`
12785
+ returns `allow`, `deny`, or `ask`; `PostToolUse` returns `{}`; invocation events
12786
+ use object-shaped `injectSteps` and a native `terminationBehavior`; `Stop`
12787
+ reads the official `executionNum`, `terminationReason`, optional `error`, and
12788
+ `fullyIdle` inputs. It returns `decision: continue` only when the invocation is
12789
+ not fully idle and has not passed its first execution; later executions and
12790
+ fully idle invocations stop, which bounds re-entry.
12791
+ Project commands use `.agents/hooks/`; exported plugin commands resolve through
12792
+ `${extensionPath}`.
12793
+
12600
12794
  ### Cursor hooks (`.cursor/hooks.json`)
12601
12795
 
12602
12796
  Cursor hooks follow the native [version-1 hooks contract](https://cursor.com/docs/hooks):
@@ -12625,10 +12819,11 @@ Codex hooks follow the native [Codex hooks contract](https://learn.chatgpt.com/d
12625
12819
 
12626
12820
  - **Locations:** repository hooks live in `.codex/hooks.json`; user hooks live in `$CODEX_HOME/hooks.json` (default `~/.codex/hooks.json`). Project hooks load only for a trusted `.codex` layer.
12627
12821
  - **Assets:** repository commands use self-contained `.codex/hooks/*`; user commands use `$CODEX_HOME/ai-toolkit-hooks/*`. They do not call Claude's `~/.softspark/ai-toolkit/hooks/` paths.
12628
- - **Events:** Codex documents 10 events. ai-toolkit wires 9: `SessionStart`, `PreToolUse`, `PostToolUse`, `PermissionRequest`, `UserPromptSubmit`, `SubagentStart`, `SubagentStop`, `PreCompact`, and `Stop`. `PostCompact` is intentionally unwired.
12822
+ - **Events:** Codex documents 11 events. ai-toolkit wires 10: `SessionStart`, `SessionEnd`, `PreToolUse`, `PostToolUse`, `PermissionRequest`, `UserPromptSubmit`, `SubagentStart`, `SubagentStop`, `PreCompact`, and `Stop`. `PostCompact` remains a valid event for injected command hooks but is intentionally unwired in the base bundle.
12823
+ - **Session end:** `SessionEnd` runs the self-contained `session-end.sh` asset with a three-second timeout. Its result is advisory, so the adapter records the handoff without emitting steering output.
12629
12824
  - **Compaction:** `PreCompact` runs `codex-pre-compact.sh`, a Codex-native reminder that refers to the active `AGENTS.md` chain, plan, and git state. It does not run Claude's `pre-compact.sh` or `pre-compact-save.sh` payload adapters.
12630
12825
  - **Ownership:** native JSON contains no private `_source` keys. Core handlers carry `AI_TOOLKIT_HOOK_OWNER=ai-toolkit` in their command; plugin and external handlers use exact source-specific command markers.
12631
- - **Preservation:** generation replaces only toolkit-owned handlers and assets. Unrelated user handlers and plugin-owned handlers remain intact.
12826
+ - **Preservation:** generation replaces only toolkit-owned handlers and assets. Unrelated user handlers, plugin-owned handlers, an optional top-level `description`, and valid handler-level `additionalContextLimit` values remain intact.
12632
12827
  - **Trust:** installation never bypasses trust. Review the active definitions with `/hooks` after install or update.
12633
12828
 
12634
12829
  ### Devin CLI hooks (`.devin/hooks.v1.json`)
@@ -13334,9 +13529,9 @@ title: "AI Toolkit - MCP Editor Compatibility"
13334
13529
  category: reference
13335
13530
  service: ai-toolkit
13336
13531
  tags: [mcp, editors, compatibility, codex, cursor, antigravity]
13337
- version: "1.3.0"
13532
+ version: "1.3.1"
13338
13533
  created: "2026-04-12"
13339
- last_updated: "2026-07-14"
13534
+ last_updated: "2026-08-19"
13340
13535
  description: "Official MCP support matrix and native config targets for editors supported by ai-toolkit."
13341
13536
  ---
13342
13537
 
@@ -13354,7 +13549,7 @@ ai-toolkit keeps `.mcp.json` as the project-level canonical template format and
13354
13549
  | Cursor | project + global | `.cursor/mcp.json`, `~/.cursor/mcp.json` | Mirrors `mcpServers` directly |
13355
13550
  | GitHub Copilot | project + global | `.github/mcp.json`, `$COPILOT_HOME/mcp-config.json` (default `~/.copilot/mcp-config.json`) | Adds Copilot-required `type` and `tools` fields |
13356
13551
  | Gemini CLI | project + global | `.gemini/settings.json`, `~/.gemini/settings.json` | Merges `mcpServers` into settings JSON |
13357
- | Google Antigravity | project + global | `.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json` | Preserves documented `command`, `serverUrl`, and `url` transports plus optional authentication, disablement, and tool-filter fields |
13552
+ | Google Antigravity | project + global | `.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json` | Emits current `command` or `serverUrl` transports; consumes portable `transport` metadata, normalizes legacy input `url` to `serverUrl`, rejects `httpUrl`, and preserves optional authentication, disablement, and tool-filter fields |
13358
13553
  | Roo Code | project | `.roo/mcp.json` | Mirrors `mcpServers` into the documented project-level MCP file |
13359
13554
  | Windsurf | global | `~/.codeium/windsurf/mcp_config.json` | Global-only JSON config |
13360
13555
  | Cline | global | `~/.cline/data/settings/cline_mcp_settings.json` | Global-only JSON config |
@@ -13423,9 +13618,9 @@ title: "MCP Server Templates"
13423
13618
  category: reference
13424
13619
  service: ai-toolkit
13425
13620
  tags: [mcp, templates, servers, configuration, editors, inject-mcp, external-templates]
13426
- version: "1.4.0"
13621
+ version: "1.4.1"
13427
13622
  created: "2026-04-07"
13428
- last_updated: "2026-07-14"
13623
+ last_updated: "2026-08-19"
13429
13624
  description: "Reference for 26 built-in MCP server templates, external template injection via inject-mcp, and native editor MCP installation support."
13430
13625
  ---
13431
13626
 
@@ -13471,7 +13666,7 @@ When `install` runs with `--scope project`, ai-toolkit also updates the project'
13471
13666
  | `cursor` | project + global | `.cursor/mcp.json`, `~/.cursor/mcp.json` | Mirrors canonical `mcpServers` |
13472
13667
  | `copilot` | project + global | `.github/mcp.json`, `$COPILOT_HOME/mcp-config.json` (default `~/.copilot/mcp-config.json`) | Adds `type` and `tools: ["*"]` automatically |
13473
13668
  | `gemini` | project + global | `.gemini/settings.json`, `~/.gemini/settings.json` | Uses Gemini CLI `mcpServers` format |
13474
- | `antigravity` | project + global | `.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json` | Preserves `url` or `serverUrl` remote transports and Antigravity authentication/tool-control fields |
13669
+ | `antigravity` | project + global | `.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json` | Emits `serverUrl` for remote transports, consumes portable `transport` metadata, normalizes legacy input `url`, rejects `httpUrl`, and preserves Antigravity authentication/tool-control fields |
13475
13670
  | `roo` | project | `.roo/mcp.json` | Mirrors canonical `mcpServers` into Roo's project MCP file |
13476
13671
  | `windsurf` | global | `~/.codeium/windsurf/mcp_config.json` | Global-only official config |
13477
13672
  | `cline` | global | `~/.cline/data/settings/cline_mcp_settings.json` | Global-only official config |
@@ -14176,17 +14371,17 @@ title: "AI Toolkit - opencode Compatibility"
14176
14371
  category: reference
14177
14372
  service: ai-toolkit
14178
14373
  tags: [opencode, compatibility, install, skills, hooks, mcp, plugins]
14179
- version: "1.0.1"
14374
+ version: "1.1.0"
14180
14375
  created: "2026-04-16"
14181
- last_updated: "2026-07-14"
14182
- description: "Reference for how ai-toolkit integrates with opencode — AGENTS.md, subagents, slash commands, JS plugin hook bridge, and MCP merge into opencode.json."
14376
+ last_updated: "2026-08-19"
14377
+ description: "Reference for how ai-toolkit integrates with opencode — AGENTS.md, Agent Skills, subagents, slash commands, JS plugin hooks, and MCP config."
14183
14378
  ---
14184
14379
 
14185
14380
  # AI Toolkit - opencode Compatibility
14186
14381
 
14187
14382
  ## Summary
14188
14383
 
14189
- opencode (https://opencode.ai) is the 11th supported editor. `ai-toolkit install --editors opencode` (or `--editors all`) lays down a full native integration: shared `AGENTS.md`, per-agent `.opencode/agents/` files, per-command `.opencode/commands/` files, a JS plugin bridging toolkit Bash hooks to opencode lifecycle events, and MCP server merge into `opencode.json`.
14384
+ opencode (https://opencode.ai) is the 11th supported editor. `ai-toolkit install --editors opencode` (or `--editors all`) lays down shared `AGENTS.md`, per-agent `.opencode/agents/` files, per-command `.opencode/commands/` files, a JS plugin bridging toolkit Bash hooks to opencode lifecycle events, and MCP server merge into `opencode.json`. The `full` profile also installs complete native Agent Skills.
14190
14385
 
14191
14386
  opencode also reads `CLAUDE.md` as a fallback, so a user without the native integration still gets baseline rules. The native path adds subagents, slash commands, hooks, and MCP.
14192
14387
 
@@ -14197,6 +14392,7 @@ opencode also reads `CLAUDE.md` as a fallback, so a user without the native inte
14197
14392
  - `AGENTS.md` (shared with Codex CLI via distinct marker sections)
14198
14393
  - `.opencode/agents/ai-toolkit-*.md` (one per ai-toolkit agent, `mode: subagent`)
14199
14394
  - `.opencode/commands/ai-toolkit-*.md` (one per user-invocable skill; the prompt lives in the markdown body)
14395
+ - `.opencode/skills/<name>/SKILL.md` plus its resources (`profile=full`)
14200
14396
  - `.opencode/plugins/ai-toolkit-hooks.js` (JS plugin bridging Bash hooks)
14201
14397
  - `opencode.json` (MCP key merged from `.mcp.json`, user keys preserved)
14202
14398
 
@@ -14207,6 +14403,7 @@ opencode also reads `CLAUDE.md` as a fallback, so a user without the native inte
14207
14403
  - `~/.config/opencode/AGENTS.md`
14208
14404
  - `~/.config/opencode/agents/ai-toolkit-*.md`
14209
14405
  - `~/.config/opencode/commands/ai-toolkit-*.md`
14406
+ - `~/.config/opencode/skills/<name>/SKILL.md` plus resources (`profile=full`)
14210
14407
  - `~/.config/opencode/plugins/ai-toolkit-hooks.js`
14211
14408
  - `~/.config/opencode/opencode.json` (MCP merge, user keys preserved)
14212
14409
 
@@ -14219,6 +14416,7 @@ Files land directly under `~/.config/opencode/` (no `.opencode/` nesting) becaus
14219
14416
  | Rules file | `CLAUDE.md` | `AGENTS.md` | `AGENTS.md` + `CLAUDE.md` fallback |
14220
14417
  | Subagents | Yes | Yes (`.codex/agents/*.toml`) | Yes (`mode: subagent`) |
14221
14418
  | Slash commands | Skills | Adapted skills | Native commands with frontmatter |
14419
+ | Agent Skills | Yes | Yes | Yes (`.opencode/skills/*/SKILL.md`) |
14222
14420
  | MCP | Yes | Yes | Yes (`opencode.json`) |
14223
14421
  | Lifecycle hooks | JSON config | `.codex/hooks` | JS/TS plugins (~30+ events) |
14224
14422
  | Global config dir | `~/.claude` | `$CODEX_HOME` (default `~/.codex`) | `~/.config/opencode` |
@@ -14252,6 +14450,31 @@ OpenCode while translating Claude-only skill-directory variables and runtime
14252
14450
  APIs. Codex output uses a separate renderer and converts prompt placeholders to
14253
14451
  durable user-input prose.
14254
14452
 
14453
+ ## Native Agent Skills
14454
+
14455
+ OpenCode's stable Agent Skills surface discovers one directory per skill at
14456
+ `.opencode/skills/<name>/SKILL.md` or
14457
+ `~/.config/opencode/skills/<name>/SKILL.md`. The `full` profile copies each
14458
+ complete ai-toolkit skill directory so relative scripts, references,
14459
+ templates, and assets remain available. Lower profiles use OpenCode's
14460
+ documented `.claude/skills/` and `.agents/skills/` compatibility discovery and
14461
+ remove only toolkit-managed native copies when downgrading.
14462
+
14463
+ `generate_opencode_skills.py` preserves the stable portable fields `name`,
14464
+ `description`, `license`, `compatibility`, and `metadata`. Claude-only runtime
14465
+ fields and orchestration primitives are not emitted. The adapter maps
14466
+ `user-invocable: false` to the v2-compatible `slash: false` hint and
14467
+ `disable-model-invocation: true` to metadata
14468
+ `opencode/autoinvoke: false`. Stable OpenCode ignores unknown frontmatter and
14469
+ loads Agent Skills on demand through the `skill` tool; slash commands continue
14470
+ to come only from `.opencode/commands/`.
14471
+
14472
+ Managed manifests let profile downgrade and uninstall remove generated files
14473
+ while preserving user-owned skill directories and files added beside managed
14474
+ resources. Source and destination symlinks are rejected before writes. Pinned
14475
+ destination descriptors remain active through generation, cleanup, and
14476
+ rollback, so an ancestor swap cannot redirect mutations outside the target.
14477
+
14255
14478
  ## Hook Bridge (JS Plugin)
14256
14479
 
14257
14480
  `.opencode/plugins/ai-toolkit-hooks.js` is a single-file plugin that maps opencode events to the shared Bash hooks in `~/.softspark/ai-toolkit/hooks/`:
@@ -14299,12 +14522,31 @@ The installer detects opencode as configured when any of these markers exist:
14299
14522
 
14300
14523
  - Generated `.opencode/agents/ai-toolkit-*.md`
14301
14524
  - Generated `.opencode/commands/ai-toolkit-*.md`
14525
+ - Manifest-owned files under generated `.opencode/skills/<name>/` directories
14302
14526
  - Generated `.opencode/plugins/ai-toolkit-hooks.js`
14303
14527
  - Managed markers from `AGENTS.md`
14304
14528
  - `mcp` key entries injected by the toolkit (user keys preserved)
14305
14529
 
14306
14530
  User-authored opencode files and user-authored `opencode.json` keys are never deleted.
14307
14531
 
14532
+ Native skill cleanup removes only manifest-owned files. A user-owned skill or
14533
+ an extra file inside a formerly managed directory is preserved. The native
14534
+ skills tree participates in the uninstall transaction, so a later cleanup
14535
+ failure restores managed files without discarding those user additions.
14536
+
14537
+ ## Current Config and v2 Beta Surfaces
14538
+
14539
+ Stable OpenCode supports both `opencode.json` and `opencode.jsonc`. Its current
14540
+ config directory uses plural `agents/`, `commands/`, `plugins/`, and `skills/`
14541
+ subdirectories. The v2 plugin API is still beta and additionally recognizes
14542
+ root-package `skills/*.md`, nested `skills/**/SKILL.md`, and a `skills` config
14543
+ array containing local paths or HTTP URLs.
14544
+
14545
+ There is no migration in ai-toolkit for v2 yet. The existing stable JavaScript
14546
+ plugin generator remains the supported path until the v2 API stabilizes; the
14547
+ beta surfaces are tracked in the ecosystem registry so a later sync cannot
14548
+ silently miss their promotion.
14549
+
14308
14550
  ## Behavioral Limits
14309
14551
 
14310
14552
  - opencode does not expose the full Claude hook event surface; only the events in the mapping table above are bridged. Claude-only events (`TaskCompleted`, `TeammateIdle`, `SubagentStart`, `SubagentStop`, `PreCompact`) are silently skipped.
@@ -14314,7 +14556,7 @@ User-authored opencode files and user-authored `opencode.json` keys are never de
14314
14556
 
14315
14557
  The opencode integration is verified by:
14316
14558
 
14317
- 1. Generator contract tests for the five `generate_opencode*.py` scripts (bats)
14559
+ 1. Generator contract tests for the six `generate_opencode*.py` scripts (bats)
14318
14560
  2. MCP merge idempotency and user-key preservation tests
14319
14561
  3. Plugin export shape and event coverage tests
14320
14562
  4. Auto-detection tests for install / update flow
@@ -14327,6 +14569,7 @@ The opencode integration is verified by:
14327
14569
  | `ai-toolkit opencode-md` | Generate `AGENTS.md` body for opencode |
14328
14570
  | `ai-toolkit opencode-agents` | Generate `.opencode/agents/ai-toolkit-*.md` |
14329
14571
  | `ai-toolkit opencode-commands` | Generate `.opencode/commands/ai-toolkit-*.md` |
14572
+ | `ai-toolkit opencode-skills` | Generate complete `.opencode/skills/<name>/` directories |
14330
14573
  | `ai-toolkit opencode-plugin` | Generate `.opencode/plugins/ai-toolkit-hooks.js` |
14331
14574
  | `ai-toolkit opencode-json` | Merge MCP servers into `opencode.json` |
14332
14575
 
@@ -15199,9 +15442,9 @@ title: "Supported Tools Registry"
15199
15442
  category: reference
15200
15443
  service: ai-toolkit
15201
15444
  tags: [editors, platforms, generators, integration, ecosystem]
15202
- version: "1.11.0"
15445
+ version: "1.13.0"
15203
15446
  created: "2026-04-23"
15204
- last_updated: "2026-07-23"
15447
+ last_updated: "2026-08-19"
15205
15448
  description: "Human-readable view of scripts/ecosystem_tools.json — the canonical list of tools ai-toolkit integrates with (Claude Code, Claude Chat/Cowork, and 11 editors), their documentation URLs, config paths, our generators, and tracked capability markers."
15206
15449
  ---
15207
15450
 
@@ -15225,11 +15468,12 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
15225
15468
  | Docs | https://code.claude.com/docs (platform.claude.com/docs 307-redirects here) |
15226
15469
  | Release notes | https://github.com/anthropics/claude-code/releases |
15227
15470
  | Changelog | https://code.claude.com/docs/en/changelog; GitHub release feed is authoritative when the generated page lags (current local/release: 2.1.206, 2026-07-10) |
15228
- | Config paths | `~/.claude/settings.json`, `.claude/settings.json` (project, committed), `.claude/settings.local.json`, `CLAUDE.md`, `.claude/rules/*.md`, `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`, `~/.claude/themes/*.json` (v2.1.118+) |
15471
+ | Config paths | Settings and direct content: `~/.claude/settings.json`, `.claude/settings.json` (project, committed), `.claude/settings.local.json`, `CLAUDE.md`, `.claude/rules/*.md`, `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`, `~/.claude/themes/*.json` (v2.1.118+). Native plugin root: `.claude-plugin/plugin.json`, `skills/*/SKILL.md`, `commands/*.md`, `agents/*.md`, `workflows/`, `output-styles/`, `themes/`, `hooks/hooks.json`, `.mcp.json`, `.lsp.json`, `monitors/monitors.json`, `bin/*`, `settings.json` |
15229
15472
  | Our generators | — (Claude Code is the primary target; toolkit content ships directly as `.md` files and `settings.json` merges) |
15230
- | Tracked hook events | Core: `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `Notification`, `MessageDisplay`. Tool: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`. Turn: `Stop`, `StopFailure`, `UserPromptExpansion`. Subagent: `SubagentStart`, `SubagentStop`. Compaction: `PreCompact`, `PostCompact`. Permissions: `PermissionRequest`, `PermissionDenied`. Elicitation: `Elicitation`, `ElicitationResult`. Teams: `TaskCreated`, `TaskCompleted`, `TeammateIdle`. Worktrees/env: `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `FileChanged`, `ConfigChange`. Setup: `Setup`, `InstructionsLoaded` |
15473
+ | Tracked hook events | Core: `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `Notification`, `MessageDisplay`. Tool: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`. Turn: `Stop`, `StopFailure`, `UserPromptExpansion`. Subagent: `SubagentStart`, `SubagentStop`. Compaction: `PreCompact`, `PostCompact`. Permissions: `PermissionRequest`, `PermissionDenied`. Elicitation: `Elicitation`, `ElicitationResult`. Teams: `TaskCreated`, `TaskCompleted`, `TeammateIdle`. Worktrees/env: `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `DirectoryAdded`, `FileChanged`, `ConfigChange`. Setup: `Setup`, `InstructionsLoaded` |
15231
15474
  | Tracked handler types | `command`, `prompt`, `agent`, `mcp_tool`, `http` (POST event JSON to allowlisted URLs via `allowedHttpHookUrls`) |
15232
15475
  | Other capabilities | slash commands, MCP server/client, sub-agent, output style, `SKILL.md` (≥500 lines warn) |
15476
+ | Plugin component coverage | Existing plugin packaging uses skills and hooks. Native workflows, output styles, LSP servers, experimental themes and monitors, MCP-backed channels, and root plugin `settings.json` are recognized class C surfaces and are not generated. Claude Code accepts only `agent` and `subagentStatusLine` in root plugin settings. |
15233
15477
  | Version probe | `claude --version` |
15234
15478
  | Notes | v2.1.169 added `disableBundledSkills` setting + `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` env var (hides bundled skills/built-in slash commands from the model; toolkit skills in `.claude/skills/` are unaffected — useful when toolkit skills overlap built-ins) and `claude --safe-mode` / `CLAUDE_CODE_SAFE_MODE` (starts with hooks, skills, agents, and CLAUDE.md disabled — first isolation step when debugging toolkit rule enforcement). `fallbackModel` settings key (v2.1.166) noted as not-adopted (class C, no toolkit surface writes model settings). |
15235
15479
 
@@ -15308,12 +15552,13 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
15308
15552
  | ID | `gemini-cli` |
15309
15553
  | Docs | https://github.com/google-gemini/gemini-cli/tree/main/docs |
15310
15554
  | Release notes | https://github.com/google-gemini/gemini-cli/releases |
15311
- | Config paths | `GEMINI.md`, `.gemini/settings.json`, `~/.gemini/settings.json`, `.gemini/commands/*.toml`, `.gemini/skills/*/SKILL.md`, `.agents/skills/*/SKILL.md`, `~/.gemini/skills/*/SKILL.md`, `~/.agents/skills/*/SKILL.md` (the `.agents/skills` alias wins over `.gemini/skills` within the same tier), `.gemini/extensions/gemini-extension.json` |
15312
- | Our generators | `scripts/generate_gemini.py`, `scripts/generate_gemini_hooks.py` (profile>=standard), `scripts/generate_gemini_commands.py` (profile=full), `scripts/generate_gemini_skills.py` (profile=full) |
15313
- | Global install | `ai-toolkit install --editors gemini` writes `~/.gemini/GEMINI.md` **plus** hooks at `~/.gemini/settings.json` (profile ≥ standard) and `~/.gemini/commands/` + `~/.gemini/skills/` pointer (profile=full) all documented user-tier surfaces. A global-only Gemini user previously got zero hooks. |
15555
+ | Config paths | `GEMINI.md`, `.gemini/settings.json`, `~/.gemini/settings.json`, `.gemini/commands/*.toml`, `.gemini/skills/*/SKILL.md`, `.gemini/agents/*.md`, `.agents/skills/*/SKILL.md`, `~/.gemini/skills/*/SKILL.md`, `~/.gemini/agents/*.md`, `~/.agents/skills/*/SKILL.md` (the `.agents/skills` alias wins over `.gemini/skills` within the same tier). Extension packages keep `gemini-extension.json` at the package root and install below `~/.gemini/extensions/<name>/`. |
15556
+ | Our generators | `scripts/generate_gemini.py`, `scripts/generate_gemini_hooks.py` (profile>=standard), `scripts/generate_gemini_commands.py` (profile=full), `scripts/generate_gemini_skills.py` (profile=full), `scripts/generate_gemini_agents.py` (profile=full) |
15557
+ | Global install | `ai-toolkit install --editors gemini` writes `~/.gemini/GEMINI.md` **plus** hooks at `~/.gemini/settings.json` (profile ≥ standard) and `~/.gemini/{commands,skills,agents}/` (profile=full). Agents use native `name`, `description`, and `kind: local` metadata; incompatible Claude `model` and `tools` fields are omitted. |
15314
15558
  | Tracked capabilities | `GEMINI.md`, `mcpServers`, tools, `settings.json`, `BeforeTool`, `AfterTool`, `BeforeToolSelection`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `AfterModel`, `Notification`, `PreCompress`, `SessionStart`, `SessionEnd`, `SKILL.md`, `activate_skill`, custom commands, `.gemini/agents/*.md` subagents, `gemini-extension.json` (no native `Stop` event — generator maps Stop-equivalent to `AfterAgent`; 11 documented hook events total) |
15315
15559
  | Version probe | `gemini --version` |
15316
- | Latest upstream | v0.49.0 (2026-06-25; the stable line skipped v0.48.0 — its preview content was promoted into v0.49.0). NOTE: Gemini CLI dropped free/paid individual tiers on 2026-06-18 in favor of Antigravity CLI (we ship `generate_antigravity.py`); enterprise Code Assist and paid API keys keep Gemini CLI, so the integration stays. The 11 hook events are unchanged. v0.49.0 completed the `coreTools` `tools.core` migration (auto-migrated; `tools.exclude` deprecated) — both are tool-allowlist keys we do not emit, so no generator change. Watch item: `.gemini/agents/*.md` / `~/.gemini/agents/*.md` native subagents are documented but we do not yet emit them (candidate `generate_gemini_agents.py`). |
15560
+ | Extension coverage | Current Gemini extensions can bundle root `GEMINI.md`, `commands/`, `hooks/hooks.json`, `skills/`, `agents/`, and `policies/`. ai-toolkit does not export a Gemini extension package; this distribution surface is class C / not adopted. |
15561
+ | Latest upstream | v0.49.0 (2026-06-25; the stable line skipped v0.48.0 — its preview content was promoted into v0.49.0). NOTE: Gemini CLI dropped free/paid individual tiers on 2026-06-18 in favor of Antigravity CLI (we ship `generate_antigravity.py`); enterprise Code Assist and paid API keys keep Gemini CLI, so the integration stays. The 11 hook events are unchanged. v0.49.0 completed the `coreTools` → `tools.core` migration (auto-migrated; `tools.exclude` deprecated) — both are tool-allowlist keys we do not emit, so no generator change. Native project and user-tier subagents are now emitted by `generate_gemini_agents.py` for profile `full`. |
15317
15562
 
15318
15563
  ### Cline
15319
15564
 
@@ -15322,12 +15567,12 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
15322
15567
  | ID | `cline` |
15323
15568
  | Docs | https://docs.cline.bot |
15324
15569
  | Release notes | https://github.com/cline/cline/releases |
15325
- | Config paths | **Extension:** `.clinerules/*.md`, `.clinerules/workflows/*.md`, `.clinerules/skills/*/SKILL.md`, `.clinerules/hooks/` (project), `~/Documents/Cline/Rules/Hooks/` (global hooks), `~/.cline/data/settings/cline_mcp_settings.json`. **CLI/SDK unified layout** (docs.cline.bot/getting-started/config; `.clinerules` is deprecated there): `.cline/{rules,hooks,plugins,skills}/`, `~/.cline/{rules,hooks,plugins,skills}/`, `CLINE_HOOKS_DIR` env var. **Cross-tool:** `AGENTS.md` + `~/.agents/AGENTS.md` (first-class rules sources), `.claude/skills/*/SKILL.md` (native discovery, always-on since v3.57.0). |
15326
- | Our generators | `scripts/generate_cline.py`, `scripts/generate_cline_rules.py`, `scripts/generate_cline_skills.py` |
15570
+ | Config paths | **Extension compatibility:** `.clinerules/*.md`, `.clinerules/workflows/*.md`, `.clinerules/skills/*/SKILL.md`, `.clinerules/hooks/` (project), `~/Documents/Cline/Rules/` (global rules), `~/Documents/Cline/Hooks/` (global hooks), `~/.cline/data/settings/cline_mcp_settings.json`. **CLI/SDK primary layout:** `.cline/{rules,hooks,agents,plugins,skills}/`, `~/.cline/{rules,hooks,agents,plugins,skills}/`; CLI `--hooks-dir` defaults to `~/.cline/hooks`. **Cross-tool:** `AGENTS.md` + `~/.agents/AGENTS.md` (rules sources), `.claude/skills/*/SKILL.md` (native skill discovery). |
15571
+ | Our generators | `scripts/generate_cline.py`, `scripts/generate_cline_rules.py` (native + compatibility rules), `scripts/generate_cline_skills.py`, `scripts/generate_cline_hooks.py` (exact eight extensionless events with a self-contained adapter) |
15327
15572
  | Tracked capabilities | `clinerules`, Plan Mode, Act Mode, MCP, custom modes, workflows, hooks, skills, subagents, conditional rules, `AGENTS.md`, plugins |
15328
- | Plugins | `.cline/plugins/` + `~/.cline/plugins/` (JS/TS), `package.json` `cline.plugins` manifest; plugins can bundle skills. Not adopted as a distribution channel yet candidate for shipping toolkit skills to CLI/SDK users. |
15329
- | Notes | Conditional rules (`paths:` YAML frontmatter) are emitted for testing and language-specific rules since 2026-04. Project rules still use `.clinerules/` for compatibility; global rules are written to `~/Documents/Cline/Rules/` (the documented Cline global rules dir `~/.cline/rules/` is not a Cline-read path). Skills are emitted as a pointer catalogue in `profile=full` and global installs. |
15330
- | Global install | `ai-toolkit install --editors cline` writes documented global rules under `~/Documents/Cline/Rules/` and a skill pointer under `~/.cline/skills/`; MCP remains managed by `ai-toolkit mcp install --editor cline`. |
15573
+ | Plugins | `.cline/plugins/` + `~/.cline/plugins/` and the `package.json` `cline.plugins` manifest belong to Cline CLI/SDK and Kanban plugin flows. They are not a plugin-loading surface for the VS Code or JetBrains extension, so ai-toolkit does not auto-package or install a Cline plugin. |
15574
+ | Notes | Conditional rules (`paths:` YAML frontmatter) are emitted for testing and language-specific rules. Project installs write `.cline/rules/` as the native primary plus `.clinerules/` compatibility, and dual-emit hooks to `.cline/hooks/` plus extension-native `.clinerules/hooks/`. The documented `.cline/agents/` and `~/.cline/agents/` paths are tracked, but ai-toolkit does not emit agents until a portable file schema is verified. Hook input validates `preToolUse.toolName` and command parameters, including CLI `run_commands`; output uses only `cancel`, `contextModification`, and `errorMessage`, with bounded input and runtime. |
15575
+ | Global install | `ai-toolkit install --editors cline` writes `~/.cline/{rules,hooks}/` as the CLI primary and `~/Documents/Cline/{Rules,Hooks}/` for extension compatibility. Hooks are absent in `minimal` and present in `standard`, `strict`, and `full`. A skill pointer is emitted under `~/.cline/skills/` only when real Claude skills are not already discoverable. MCP remains managed by `ai-toolkit mcp install --editor cline`. |
15331
15576
 
15332
15577
  ### Roo Code
15333
15578
 
@@ -15376,12 +15621,13 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
15376
15621
  | ID | `google-antigravity` |
15377
15622
  | Docs | https://antigravity.google/docs (JavaScript SPA — use bundle strings / sitemap to verify) |
15378
15623
  | Changelog | https://antigravity.google/changelog (SPA; changelog entries embedded in main-*.js) |
15379
- | Config paths | `.agents/rules/*.md`, `.agents/workflows/*.md` (plural is the Antigravity 2.0 default; singular `.agent/rules`, `.agent/workflows` still read as fallback), `.agent/skills/*/SKILL.md` (IDE), `.agents/skills/*/SKILL.md` (CLI), `.agents/hooks.json` (CLI hooks), `.agents/mcp_config.json` (workspace MCP), `AGENTS.md`, `GEMINI.md` |
15380
- | Global config paths | Skills: `~/.gemini/config/skills/*/SKILL.md` (shared across all Antigravity products) and `~/.gemini/antigravity-cli/skills/*/SKILL.md` (CLI-private) both documented in the official Skills codelab. MCP: `~/.gemini/config/mcp_config.json` (shared global, resolved by CLI v1.0.14; the `~/.gemini/antigravity-cli/mcp_config.json` path is legacy). Rules: `~/.gemini/GEMINI.md` (dual-owner with Gemini CLI Antigravity's IDE "+ Global" writes the same file; gemini-cli#16058 closed "not planned"). Hooks: `~/.gemini/config/hooks.json` (shared, since CLI v1.0.8). |
15381
- | Our generators | `scripts/generate_antigravity.py` (rules + workflows + skill pointer dual-emitted to `.agent/skills/` and `.agents/skills/`; `generate_global()` writes the pointer to the two HOME skill dirs). Native MCP project/global merge and removal are provided by `scripts/mcp_editors.py`. |
15382
- | Global install | `ai-toolkit install --editors antigravity` writes the skill pointer to `~/.gemini/config/skills/` and `~/.gemini/antigravity-cli/skills/`. Rules stay project-local (no mergeable global rules file beyond the Gemini-CLI-shared `~/.gemini/GEMINI.md`, covered by `--editors gemini`). `ai-toolkit mcp install --editor antigravity <template>` writes the global MCP config; add `--scope project --target <repo>` for `.agents/mcp_config.json`. |
15383
- | Tracked capabilities | Antigravity, agent manager, artifacts, MCP, workflows, rules, skills, hooks, `AGENTS.md`, `GEMINI.md`, agent permissions, global skills, `~/.gemini/config/mcp_config.json` |
15384
- | CLI notes | Antigravity CLI (GA 2026-05-19; latest CLI v1.0.14 2026-06-30, IDE 2.2.1). Hooks are IDE + CLI (`.agents/hooks.json` workspace, `~/.gemini/config/hooks.json` global; event set `PreToolUse`/`PostToolUse`/`PreInvocation`/`PostInvocation`/`Stop` — `PreInvocation`/`PostInvocation` have no Claude equivalent; shell tool is `run_command` with args at `.toolCall.args.CommandLine`). MCP: the official 2.1.4 changelog (2026-06-11) confirms that `url` is accepted alongside `serverUrl`; `httpUrl` is not documented and the adapter rejects it. The native adapter preserves documented `args`, `env`, `cwd`, `headers`, `authProviderType`, `oauth`, `disabled`, and `disabledTools` fields. A `generate_antigravity_hooks.py` remains backlog. |
15624
+ | Config paths | Rules/workflows: `.agents/rules/*.md`, `.agents/workflows/*.md`. Skills: canonical `.agents/skills/*/SKILL.md`; `.agent/skills/*/SKILL.md` is compatibility-only. Agents: `.agents/agents/ai-toolkit-*/agent.md`. Hooks: `.agents/hooks.json` plus `.agents/hooks/ai-toolkit-antigravity-hook.py`. Plugins: `.agents/plugins/<plugin>/plugin.json`. MCP: `.agents/mcp_config.json`. Cross-tool instructions: `AGENTS.md`, `GEMINI.md`. |
15625
+ | Global config paths | CLI skills `~/.gemini/antigravity-cli/skills/*/SKILL.md` and CLI plugins `~/.gemini/antigravity-cli/plugins/<plugin>/plugin.json` are current canonical CLI surfaces. IDE/shared-product skills use `~/.gemini/config/skills/*/SKILL.md`; agents use `~/.gemini/config/agents/ai-toolkit-*/agent.md`; hooks use `~/.gemini/config/hooks.json` plus adjacent runtime; IDE/shared plugins use `~/.gemini/config/plugins/<plugin>/plugin.json`; MCP uses `~/.gemini/config/mcp_config.json`. Rules stay project-local; only workspace `.agent/skills/` is legacy. `~/.gemini/GEMINI.md` remains the Gemini-CLI-shared instruction surface. |
15626
+ | Our generators | `scripts/generate_antigravity.py` (rules, workflows, canonical + compatibility skill pointer), `scripts/generate_antigravity_hooks.py` (exact five-event schema and self-contained adapter), `scripts/generate_antigravity_agents.py` (native subagents and explicit tool mapping), `scripts/antigravity_plugin.py` (deterministic opt-in export/verify), and `scripts/mcp_editors.py` (transactional project/global MCP adapter). |
15627
+ | Install profiles | `minimal`: rules/workflows/skills only. `standard` and `strict`: add native hooks. `full`: additionally adds native agents. Global install follows the same gates under `~/.gemini/config/`; it never auto-installs the plugin. |
15628
+ | Plugin flow | `ai-toolkit antigravity-plugin export [output]` creates a self-contained ZIP with exact manifest fields `$schema`, `name`, `description`, rules, skills, agents, hooks, runtime, and LICENSE. Verify offline with `ai-toolkit antigravity-plugin verify <archive-or-dir>`, then install manually under `.agents/plugins/<plugin>/` for a workspace, `~/.gemini/antigravity-cli/plugins/<plugin>/` for CLI, or `~/.gemini/config/plugins/<plugin>/` for the IDE/shared product. Hook commands resolve from `${extensionPath}`. |
15629
+ | Tracked capabilities | Antigravity, agent manager, artifacts, MCP, workflows, rules, skills, hooks, five native hook events, subagents, agent permissions, plugins, global skills/hooks/agents, `AGENTS.md`, `GEMINI.md`, `serverUrl` |
15630
+ | Current versions / notes | Antigravity 2.0 v2.8.1, Antigravity CLI v1.1.14, IDE v2.5.5 (verified 2026-08-19). Hooks use `PreToolUse`, `PostToolUse`, `PreInvocation`, `PostInvocation`, and `Stop`; the shell tool is `run_command` with the command at `.toolCall.args.CommandLine`. The adapter returns native camelCase payloads, object-shaped `injectSteps`, empty default `terminationBehavior`, and a `decision` string for Stop while preventing re-entry loops. MCP consumes portable `transport` metadata, accepts input `url` only for migration and emits it as `serverUrl`; `httpUrl` is rejected. Optional `args`, `env`, `cwd`, `headers`, `authProviderType`, `oauth`, `disabled`, and `disabledTools` are preserved. |
15385
15631
  | Doc access note | Docs are a JavaScript SPA, but the official search index exposes the current MCP guide and changelog text. Verify changelog claims against the dated official entry because the MCP guide's warning can lag schema releases. |
15386
15632
 
15387
15633
  ### Codex CLI
@@ -15391,12 +15637,13 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
15391
15637
  | ID | `codex-cli` |
15392
15638
  | Docs | https://learn.chatgpt.com/docs/codex/cli (official Codex CLI documentation; the previous `https://developers.openai.com/codex` endpoint now redirects to the generic ChatGPT Learn overview; latest verified local/npm release: codex-cli 0.144.4, 2026-07-14) |
15393
15639
  | Release notes | https://github.com/openai/codex/releases |
15394
- | Config paths | **Instructions:** project `AGENTS.md` (root→cwd chain, closest wins) and global `~/.codex/AGENTS.md` (`$CODEX_HOME/AGENTS.md`; `~/.codex/AGENTS.override.md` takes precedence). NOTE: `~/AGENTS.md` is NOT a global-instruction surface — Codex only reads it if a session's cwd is exactly `$HOME`. Plus `.agents/skills/*/SKILL.md`, `.codex/agents/*.toml`, `~/.codex/agents/*.toml`, `.codex/hooks.json`, `~/.codex/hooks.json`, `.codex/config.toml` (project layers, root→cwd, closest wins, trusted projects only), `~/.codex/config.toml`. |
15395
- | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_agents.py` (native custom-agent TOML), `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`) |
15640
+ | Config paths | **Instructions:** project `AGENTS.md` (root→cwd chain, closest wins) and global `~/.codex/AGENTS.md` (`$CODEX_HOME/AGENTS.md`; `~/.codex/AGENTS.override.md` takes precedence). NOTE: `~/AGENTS.md` is NOT a global-instruction surface — Codex only reads it if a session's cwd is exactly `$HOME`. Plus `.agents/skills/*/SKILL.md`, `.codex/agents/*.toml`, `~/.codex/agents/*.toml`, `.codex/hooks.json`, `~/.codex/hooks.json`, `.codex/config.toml` (project layers, root→cwd, closest wins, trusted projects only), `~/.codex/config.toml`. **Native plugins:** `.codex-plugin/plugin.json`, root `skills/*/SKILL.md`, default `hooks/hooks.json`, and `.agents/plugins/marketplace.json`. |
15641
+ | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_agents.py` (native custom-agent TOML), `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`), `scripts/codex_plugin.py` (deterministic native plugin exporter/validator) |
15396
15642
  | Rules delivery | Universal coding rules are inlined into `AGENTS.md` (Codex reads instructions only from AGENTS.md, not `.agents/rules/`); language rules ship as `<lang>-rules` skills under `.agents/skills/`. Global install writes `~/.codex/AGENTS.md` (not `~/AGENTS.md`, which Codex never loads globally); plugin-pack rules are marker-injected into the same file. `project_doc_max_bytes` default is 32 KiB and Codex silently truncates AGENTS.md past that (see codex-cli-compatibility.md). |
15397
- | Tracked hook events | Upstream canonical (codex-rs `HookEventName` enum): `PreToolUse`, `PostToolUse`, `PermissionRequest`, `PreCompact`, `PostCompact`, `SessionStart`, `UserPromptSubmit`, `SubagentStart`, `SubagentStop`, `Stop` (10 events). We wire 9 through an explicit Codex map, including destructive-command and wrong-home path guards on both Bash `PreToolUse` and `PermissionRequest`. `PostCompact` is not wired (its only hook was the removed environment-snapshot probe). |
15643
+ | Tracked hook events | Official Codex hooks contract: `PreToolUse`, `PostToolUse`, `PermissionRequest`, `PreCompact`, `PostCompact`, `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `SubagentStart`, `SubagentStop`, `Stop` (11 events). We wire 10 through the Codex map, including the advisory `SessionEnd` handoff and destructive-command and wrong-home path guards on both Bash `PreToolUse` and `PermissionRequest`. `PostCompact` remains valid for injected command hooks but is not wired in the base bundle (its only hook was the removed environment-snapshot probe). |
15398
15644
  | Tracked handler types | `command` (emitted by default; the only handler Codex actually runs). `prompt` and `agent` are parsed by Codex but NOT yet executed, so hand-authored handlers of those types are inert. |
15399
15645
  | Other capabilities | `AGENTS.md`, `config.toml`, `mcp_servers`, sandbox policies, `.agents/skills/*/SKILL.md` (native Codex skill discovery path), `.codex/agents/*.toml` (native custom agents) |
15646
+ | Native plugin distribution | `ai-toolkit codex-plugin export` packages `.codex-plugin/plugin.json`, plugin-adapted skills, default lifecycle hooks, executable assets, and LICENSE. Hook commands resolve through `${PLUGIN_ROOT}`. Installation uses a local marketplace and `/plugins`; Codex IDE does not support plugins. |
15400
15647
  | Version probe | `codex --version` |
15401
15648
 
15402
15649
  ### opencode
@@ -15406,13 +15653,14 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
15406
15653
  | ID | `opencode` |
15407
15654
  | Docs | https://opencode.ai/docs |
15408
15655
  | Release notes | https://github.com/sst/opencode/releases (redirects to anomalyco/opencode) |
15409
- | Config paths | `opencode.json`, `.opencode/agents/*.md`, `.opencode/commands/*.md`, `.opencode/plugins/*`, `.opencode/skills/*/SKILL.md` (v1.14+), `AGENTS.md`; skill fallback discovery: `.claude/skills/`, `.agents/skills/`, `~/.config/opencode/skills/`, `~/.claude/skills/`, `~/.agents/skills/` |
15410
- | Our generators | `scripts/generate_opencode.py`, `scripts/generate_opencode_agents.py`, `scripts/generate_opencode_commands.py`, `scripts/generate_opencode_json.py`, `scripts/generate_opencode_plugin.py` |
15656
+ | Config paths | `opencode.json`, `opencode.jsonc`, `.opencode/agents/*.md`, `.opencode/commands/*.md`, `.opencode/plugins/*`, `.opencode/skills/*/SKILL.md`, `AGENTS.md`; skill fallback discovery: `.claude/skills/`, `.agents/skills/`, `~/.config/opencode/skills/`, `~/.claude/skills/`, `~/.agents/skills/`; v2 beta package/config surfaces: `skills/*.md`, `skills/**/SKILL.md`, `skills` array with local paths or HTTP URLs |
15657
+ | Our generators | `scripts/generate_opencode.py`, `scripts/generate_opencode_agents.py`, `scripts/generate_opencode_commands.py`, `scripts/generate_opencode_json.py`, `scripts/generate_opencode_plugin.py`, `scripts/generate_opencode_skills.py` |
15658
+ | Native skills delivery | `profile=full` copies complete skill directories to the native project/global roots. Lower profiles use compatibility discovery and remove only toolkit-managed native copies. |
15411
15659
  | Hook isolation | Tool hooks preserve native `sessionID` as normalized `session_id`; exit code 2 from a blocking pre-tool guard is raised back to OpenCode instead of being ignored. |
15412
- | Tracked plugin events | `session.created`, `session.compacted`, `session.deleted`, `message.updated`, `tool.execute.before`, `tool.execute.after`, `permission.asked`, `command.executed` |
15660
+ | Tracked plugin events | `session.created`, `session.compacted`, `session.deleted`, `message.updated`, `message.part.updated`, `tool.execute.before`, `tool.execute.after`, `permission.asked`, `command.executed` |
15413
15661
  | Other capabilities | `opencode.json` config, primary + subagent modes, `@`-mention subagents, `/`-invocation commands, MCP (local + remote), plugin hooks in JS/TS, native `SKILL.md` discovery with Claude-compatible fallback, `permission.skill.*` matrix |
15414
15662
  | Version probe | `opencode --version` |
15415
- | Watch item | v1.16.0 (2026-06-05) shipped an experimental v2 skill registry (flat-file skills, `slash` frontmatter key). As of the 2026-06-23 sync (upstream v1.17.9) it is still undocumented and not stabilized: the skills docs show only the nested `SKILL.md` layout with no `slash` key, so `generate_opencode*.py` is unchanged. Re-check next sync. |
15663
+ | Watch item | The v2 plugin API is beta. It adds root-package skill files and configurable local/HTTP skill sources, but there is no migration: keep the stable JavaScript plugin generator until v2 stabilizes. |
15416
15664
 
15417
15665
  ---
15418
15666