@softspark/ai-toolkit 4.24.0 → 4.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +35 -15
  3. package/app/.claude-plugin/plugin.json +1 -1
  4. package/app/skills/hook-creator/SKILL.md +18 -4
  5. package/app/surface.json +4 -0
  6. package/benchmarks/ecosystem-doctor-snapshot.json +67 -19
  7. package/bin/ai-toolkit.js +27 -3
  8. package/kb/reference/architecture-overview.md +13 -5
  9. package/kb/reference/claude-ecosystem-expansion-foundations.md +30 -5
  10. package/kb/reference/cli-reference.md +27 -2
  11. package/kb/reference/codex-cli-compatibility.md +101 -11
  12. package/kb/reference/global-install-model.md +10 -8
  13. package/kb/reference/hooks-catalog.md +41 -5
  14. package/kb/reference/mcp-editor-compatibility.md +3 -3
  15. package/kb/reference/mcp-templates.md +3 -3
  16. package/kb/reference/opencode-compatibility.md +53 -5
  17. package/kb/reference/supported-tools-registry.md +31 -26
  18. package/llms-full.txt +312 -73
  19. package/manifest.json +1 -1
  20. package/package.json +6 -2
  21. package/scripts/antigravity_plugin.py +570 -0
  22. package/scripts/codex_plugin.py +764 -0
  23. package/scripts/ecosystem_tools.json +92 -17
  24. package/scripts/generate_antigravity.py +16 -14
  25. package/scripts/generate_antigravity_agents.py +255 -0
  26. package/scripts/generate_antigravity_hooks.py +344 -0
  27. package/scripts/generate_cline_hooks.py +391 -0
  28. package/scripts/generate_cline_rules.py +210 -43
  29. package/scripts/generate_cline_skills.py +65 -2
  30. package/scripts/generate_codex_hooks.py +70 -8
  31. package/scripts/generate_gemini_agents.py +197 -0
  32. package/scripts/generate_gemini_hooks.py +24 -4
  33. package/scripts/generate_opencode_skills.py +544 -0
  34. package/scripts/inject_hook_cli.py +4 -26
  35. package/scripts/install.py +11 -10
  36. package/scripts/install_steps/ai_tools.py +209 -34
  37. package/scripts/mcp_editors.py +9 -1
  38. package/scripts/plugin.py +21 -0
  39. package/scripts/plugin_schema.py +8 -7
  40. package/scripts/secure_fs.py +35 -0
  41. package/scripts/uninstall.py +162 -18
  42. package/scripts/validate.py +42 -12
@@ -3,9 +3,9 @@ title: "AI Toolkit - Architecture Overview"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [architecture, overview, design, structure]
6
- version: "1.7.0"
6
+ version: "1.8.0"
7
7
  created: "2026-03-23"
8
- last_updated: "2026-08-06"
8
+ last_updated: "2026-08-19"
9
9
  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."
10
10
  ---
11
11
 
@@ -61,7 +61,10 @@ ai-toolkit/
61
61
  generate_copilot.py # Generates Copilot instructions, agents, and portable skills
62
62
  generate_copilot_hooks.py # Generates native Copilot hooks + self-contained runtime
63
63
  generate_gemini.py # Generates GEMINI.md (sources _common.py)
64
- generate_cline.py # Generates .clinerules (sources _common.py)
64
+ generate_gemini_agents.py # Generates native .gemini/agents/*.md definitions
65
+ generate_cline.py # Generates legacy .clinerules (sources _common.py)
66
+ generate_cline_rules.py # Dual-emits .cline/rules + .clinerules compatibility
67
+ generate_cline_hooks.py # Dual-emits .cline/hooks + .clinerules/hooks
65
68
  generate_roo_modes.py # Generates .roomodes
66
69
  generate_aider_conf.py # Generates .aider.conf.yml
67
70
  generate_llms_txt.py # Generates llms.txt
@@ -123,7 +126,11 @@ also emits `.github/instructions`, `.github/prompts`, and native
123
126
  `.github/hooks`. The user target writes the supported personal surfaces below
124
127
  `$COPILOT_HOME` (default `~/.copilot`) and does not generate prompt files there.
125
128
  Full-profile installs also emit native skill pointer catalogues for Cursor,
126
- Windsurf, and Cline. Codex local install generates `AGENTS.md`,
129
+ Windsurf, and Cline. Cline rules dual-emit to `.cline/rules/` and `.clinerules/`;
130
+ profiles `standard`, `strict`, and `full` add executable hooks under both
131
+ `.cline/hooks/<Event>` and `.clinerules/hooks/<Event>`. Gemini receives
132
+ commands, a skill pointer, and native
133
+ `.gemini/agents/*.md` definitions. Codex local install generates `AGENTS.md`,
127
134
  `.agents/skills/*`, `.codex/agents/*.toml`, `.codex/hooks.json`, and
128
135
  self-contained `.codex/hooks/*`. Global Codex install writes its user-owned
129
136
  surfaces below `$CODEX_HOME` (default `~/.codex`) while user skills remain in
@@ -162,7 +169,8 @@ project-scoped native MCP files: `.cursor/mcp.json`, `.github/mcp.json`,
162
169
  | `copilot-instructions` | `./` | Generates `.github/copilot-instructions.md` |
163
170
  | `gemini-md` | `./` | Generates `GEMINI.md` |
164
171
  | `cline-rules` | `./` | Generates `.clinerules` (legacy) |
165
- | `cline-dir-rules` | `./` | Generates `.clinerules/*.md` |
172
+ | `cline-dir-rules` | `./` | Generates `.cline/rules/*.md` plus `.clinerules/*.md` compatibility |
173
+ | `cline-hooks` | `./` | Generates eight executable files under `.cline/hooks/` and `.clinerules/hooks/` |
166
174
  | `roo-modes` | `./` | Generates `.roomodes` |
167
175
  | `roo-dir-rules` | `./` | Generates `.roo/rules/*.md` |
168
176
  | `aider-conf` | `./` | Generates `.aider.conf.yml` |
@@ -3,9 +3,9 @@ title: "Claude Ecosystem Expansion Foundations"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [benchmark, claude-code, ecosystem, hooks, plugins, architecture]
6
- version: "1.1.0"
6
+ version: "1.2.0"
7
7
  created: "2026-03-27"
8
- last_updated: "2026-07-10"
8
+ last_updated: "2026-08-19"
9
9
  description: "Reference summary of the ecosystem signals and implementation foundations adopted in ai-toolkit, including runtime-aware plugin packaging."
10
10
  ---
11
11
 
@@ -43,9 +43,21 @@ hooks and sub-agents are Cowork-only.
43
43
 
44
44
  ### 2. Broader lifecycle coverage
45
45
 
46
- The toolkit now covers prompt, edit, subagent, compaction, and session-end phases.
47
-
48
- Implemented events:
46
+ The validator tracks the complete current Claude Code hook schema. Tracking an
47
+ event means plugin manifests and hand-authored hook configuration can use it; it
48
+ does not mean the default toolkit bundle registers a handler for that event.
49
+
50
+ Tracked schema events:
51
+ - `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `Notification`, `MessageDisplay`
52
+ - `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`
53
+ - `Stop`, `StopFailure`, `UserPromptExpansion`
54
+ - `SubagentStart`, `SubagentStop`, `PreCompact`, `PostCompact`
55
+ - `PermissionRequest`, `PermissionDenied`, `Elicitation`, `ElicitationResult`
56
+ - `TaskCreated`, `TaskCompleted`, `TeammateIdle`
57
+ - `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `DirectoryAdded`, `FileChanged`, `ConfigChange`
58
+ - `Setup`, `InstructionsLoaded`
59
+
60
+ Toolkit-wired events in `app/hooks.json`:
49
61
  - `SessionStart`
50
62
  - `Notification`
51
63
  - `PreToolUse`
@@ -58,6 +70,19 @@ Implemented events:
58
70
  - `SubagentStop`
59
71
  - `PreCompact`
60
72
  - `SessionEnd`
73
+ - `InstructionsLoaded`
74
+ - `ConfigChange`
75
+
76
+ `MessageDisplay` and `DirectoryAdded` are tracked but intentionally have no
77
+ default toolkit handler. `DirectoryAdded` runs asynchronously after `/add-dir`
78
+ or SDK `register_repo_root` and cannot block the add. `MessageDisplay` can
79
+ replace rendered text through `displayContent` without changing the transcript.
80
+
81
+ Claude Code also recognizes native plugin workflows, output styles, LSP
82
+ servers, experimental themes and monitors, MCP-backed channels, and root plugin
83
+ settings. Those are documented class C surfaces rather than generated toolkit
84
+ output; root plugin settings currently support only `agent` and
85
+ `subagentStatusLine`.
61
86
 
62
87
  ### 3. Creator workflows
63
88
 
@@ -4,7 +4,7 @@ category: reference
4
4
  service: ai-toolkit
5
5
  tags: [cli, commands, reference, install, update, plugin, mcp, telemetry]
6
6
  created: "2026-04-13"
7
- last_updated: "2026-07-26"
7
+ last_updated: "2026-08-19"
8
8
  description: "Complete CLI reference for all ai-toolkit commands, options, and flags."
9
9
  ---
10
10
 
@@ -31,6 +31,8 @@ Usage: ai-toolkit <command> [options]
31
31
  | `eject [dir]` | Export standalone config (no symlinks, no toolkit dependency) |
32
32
  | `claude-app export [--output FILE] [--no-custom-rules] [--verify]` | Build an uploadable Claude Chat/Desktop/Cowork plugin ZIP and global-instructions file |
33
33
  | `claude-app verify` | Validate a clean staged plugin with structural checks and the official Claude plugin validator |
34
+ | `codex-plugin export [--output FILE]` | Build a deterministic native Codex plugin ZIP with skills and self-contained hooks |
35
+ | `codex-plugin verify` | Validate a clean native Codex plugin stage without installing it or changing user configuration |
34
36
 
35
37
  ## Rule & Hook Injection
36
38
 
@@ -54,6 +56,9 @@ Usage: ai-toolkit <command> [options]
54
56
 
55
57
  ## Plugin Management
56
58
 
59
+ `plugin ...` manages ai-toolkit's experimental runtime packs. Native Codex
60
+ plugin packaging uses the separate `codex-plugin ...` command above.
61
+
57
62
  | Command | Description |
58
63
  |---------|-------------|
59
64
  | `plugin list` | Show available plugin packs with install status |
@@ -65,6 +70,23 @@ Usage: ai-toolkit <command> [options]
65
70
  | `plugin remove <name> [--editor claude\|codex\|all]` | Remove a plugin pack |
66
71
  | `plugin status [--editor claude\|codex\|all]` | Show installed plugins with runtime-specific details |
67
72
 
73
+ ### Native Codex plugin package
74
+
75
+ ```bash
76
+ ai-toolkit codex-plugin export --output ai-toolkit-codex-plugin.zip
77
+ ai-toolkit codex-plugin verify
78
+ ```
79
+
80
+ Extract the ZIP to `<marketplace-root>/plugins/ai-toolkit/`, add an entry with
81
+ `source.path: ./plugins/ai-toolkit` in
82
+ `<marketplace-root>/.agents/plugins/marketplace.json`, then run
83
+ `codex plugin marketplace add <marketplace-root>` for that non-default local
84
+ marketplace. Open `/plugins` in Codex CLI, install the plugin, review/trust the
85
+ bundled hooks, and start a new session. The ZIP includes plugin-local skill
86
+ runtime resources, including the skill-audit helper and its Python imports.
87
+ Export refuses symlinked output files and ancestors instead of resolving them
88
+ to another destination. Codex IDE does not support plugins.
89
+
68
90
  ## Config Inheritance
69
91
 
70
92
  | Command | Description |
@@ -105,7 +127,8 @@ Usage: ai-toolkit <command> [options]
105
127
  | `copilot-instructions` | Generate `.github/copilot-instructions.md` |
106
128
  | `gemini-md` | Generate `GEMINI.md` for Gemini CLI |
107
129
  | `cline-rules` | Generate `.clinerules` (legacy) |
108
- | `cline-dir-rules` | Generate `.clinerules/*.md` (recommended) |
130
+ | `cline-dir-rules` | Generate `.cline/rules/*.md` plus `.clinerules/*.md` compatibility |
131
+ | `cline-hooks` | Generate eight executable `.cline/hooks/<Event>` files plus `.clinerules/hooks/<Event>` extension compatibility |
109
132
  | `roo-modes` | Generate `.roomodes` |
110
133
  | `roo-dir-rules` | Generate `.roo/rules/*.md` |
111
134
  | `aider-conf` | Generate `.aider.conf.yml` |
@@ -113,6 +136,8 @@ Usage: ai-toolkit <command> [options]
113
136
  | `augment-rules` | Generate `.augment/rules/ai-toolkit.md` (legacy) |
114
137
  | `augment-dir-rules` | Generate `.augment/rules/ai-toolkit-*.md` (recommended) |
115
138
  | `antigravity-rules` | Generate `.agents/rules/` and `.agents/workflows/` |
139
+ | `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) |
140
+ | `antigravity-plugin verify <archive-or-dir>` | Verify Antigravity plugin schema, paths, hooks, modes, and self-containment offline |
116
141
  | `llms-txt` | Generate `llms.txt` and `llms-full.txt` |
117
142
 
118
143
  ## Other Commands
@@ -3,9 +3,9 @@ title: "AI Toolkit - Codex CLI Compatibility"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [codex, compatibility, install, skills, hooks]
6
- version: "1.0.4"
6
+ version: "1.1.0"
7
7
  created: "2026-04-12"
8
- last_updated: "2026-07-14"
8
+ last_updated: "2026-08-19"
9
9
  description: "Reference for how ai-toolkit maps Claude-oriented skills, hooks, and plugin packs to Codex CLI."
10
10
  ---
11
11
 
@@ -74,6 +74,72 @@ Codex base. Codex hooks no longer depend on executable paths under
74
74
  `~/.softspark/ai-toolkit/`; project assets live beside `.codex/hooks.json`, and
75
75
  user assets live under `$CODEX_HOME/ai-toolkit-hooks/`.
76
76
 
77
+ ## Native Codex Plugin Export
78
+
79
+ The separate native distribution command packages the toolkit for Codex's
80
+ plugin marketplace flow without writing user configuration:
81
+
82
+ ```bash
83
+ ai-toolkit codex-plugin export --output ai-toolkit-codex-plugin.zip
84
+ ai-toolkit codex-plugin verify
85
+ ```
86
+
87
+ The deterministic archive has this root layout:
88
+
89
+ ```text
90
+ .codex-plugin/plugin.json
91
+ skills/*/SKILL.md
92
+ skills/persona/personas/*.md
93
+ skills/briefing/scripts/session_token_stats.py
94
+ scripts/audit_skills.py
95
+ scripts/{_common,frontmatter,injection,emission,instruction_core}.py
96
+ hooks/hooks.json
97
+ hooks/*
98
+ constitution.md
99
+ LICENSE
100
+ ```
101
+
102
+ The manifest name is `ai-toolkit`, its version comes from `package.json`, and
103
+ `skills` points to `./skills/`. It intentionally omits a `hooks` field because
104
+ Codex discovers the default `hooks/hooks.json` file. Every bundled hook command
105
+ uses `${PLUGIN_ROOT}/hooks/...`; no command depends on a git root, `CODEX_HOME`,
106
+ or the toolkit's global-install hook directory. Executable modes, archive order,
107
+ and timestamps are fixed so identical sources produce identical ZIP bytes.
108
+ Skill references are adapted to plugin-local paths. Validation covers every
109
+ intentionally bundled cross-skill/runtime dependency, including persona
110
+ definitions, the briefing helper, the documentation standards skill, and the
111
+ constitution referenced by the security skill. Bare `scripts/...` references
112
+ are classified as plugin runtime, target-workspace, skill-local, or
113
+ source-toolkit references; unclassified paths fail validation. The skill-audit
114
+ command uses the staged helper, whose local imports are bundled at plugin root.
115
+
116
+ `verify` stages a clean plugin under a temporary directory and checks the
117
+ manifest, component paths, skills, exact canonical command-only hooks,
118
+ executable assets, `SessionEnd` timeout, and symlink safety. The check is
119
+ self-contained: it does not execute mutable validators selected from `$HOME`
120
+ or environment-provided paths, add a marketplace, install a plugin, or write
121
+ under `~/.agents` or `~/.codex`.
122
+ Archive output uses the shared pinned-directory transaction and rejects a
123
+ symlink at the destination or in any requested ancestor, so a redirected path
124
+ cannot write outside the lexical destination.
125
+
126
+ To test the exported archive through a non-default local marketplace:
127
+
128
+ 1. Extract it to `<marketplace-root>/plugins/ai-toolkit/`.
129
+ 2. Add an `ai-toolkit` entry to
130
+ `<marketplace-root>/.agents/plugins/marketplace.json` with
131
+ `source.path: ./plugins/ai-toolkit`.
132
+ 3. Run `codex plugin marketplace add <marketplace-root>` once for that
133
+ non-default marketplace.
134
+ 4. Open `/plugins` in Codex CLI, install `ai-toolkit`, review/trust its hooks,
135
+ and start a new session.
136
+
137
+ Codex IDE does not support plugins. Use Codex CLI or the ChatGPT desktop app for
138
+ plugin browsing and installation.
139
+
140
+ Sources: [Codex plugin packaging](https://developers.openai.com/plugins/build/plugins),
141
+ [plugin availability](https://learn.chatgpt.com/docs/plugins).
142
+
77
143
  ## Skill Translation Model
78
144
 
79
145
  Two delivery modes are used for Codex:
@@ -123,9 +189,8 @@ even when its tool list is otherwise portable. Examples include:
123
189
 
124
190
  ## Hook Compatibility
125
191
 
126
- Codex does not expose the full Claude hook event surface. Codex's
127
- `HookEventName` enum defines 10 events; the Codex hook generator wires 9 of
128
- them:
192
+ Codex does not expose the full Claude hook event surface. The current native
193
+ contract defines 11 events; the Codex hook generator wires 10 of them:
129
194
 
130
195
  - `SessionStart`
131
196
  - `PreToolUse`
@@ -135,13 +200,34 @@ them:
135
200
  - `SubagentStart`
136
201
  - `SubagentStop`
137
202
  - `PreCompact`
203
+ - `SessionEnd`
138
204
  - `Stop`
139
205
 
140
206
  `PostCompact` is the one enum event left unwired (its only hook was the removed
141
207
  environment-snapshot probe). Claude-only events such as `TaskCompleted`,
142
- `TeammateIdle`, `SessionEnd`, and `Notification` have no Codex equivalent and
143
- are not available in `.codex/hooks.json`. Handler types: only `command` runs;
144
- `prompt` and `agent` are parsed by Codex but not yet executed.
208
+ `TeammateIdle`, and `Notification` have no Codex equivalent and are not
209
+ available in `.codex/hooks.json`.
210
+
211
+ The generated `SessionEnd` handler runs the self-contained `session-end.sh`
212
+ asset with `timeout: 3`, Codex's documented maximum. It runs only for the main
213
+ thread, always synchronously, and is advisory: its output cannot steer Codex or
214
+ keep the thread open. The asset therefore stays silent, cleans the session's
215
+ toolkit state when available, and writes the handoff snapshot outside the
216
+ repository with Codex-native `AGENTS.md` restart guidance.
217
+
218
+ Existing native hook documents may include an optional top-level string
219
+ `description`; merges preserve it unchanged. Command handlers may include a
220
+ non-negative integer `additionalContextLimit`, including zero, and valid user
221
+ values are also preserved. Booleans, negative values, and non-integers are
222
+ rejected before any file is changed. `SessionEnd` timeouts above three seconds
223
+ are rejected.
224
+
225
+ Only executable `type: "command"` handlers are accepted. The current official
226
+ hooks page says `prompt` and `agent` handlers are parsed but skipped, and does
227
+ not establish an executable `mcp_tool` handler schema. Codex CLI 0.148.0 release
228
+ notes mention MCP hooks, which conflicts with that page. Toolkit support stays
229
+ command-only until OpenAI confirms the native config schema and execution
230
+ semantics in the canonical hooks documentation.
145
231
 
146
232
  The generator merges these Codex-compatible events into project or user
147
233
  `hooks.json`, preserving unrelated user handlers and replacing only commands
@@ -159,10 +245,12 @@ After installation or any hook change, open `/hooks` in Codex and review/trust
159
245
  the exact definitions. Project hooks additionally require a trusted `.codex`
160
246
  project layer. The installer never bypasses hook trust.
161
247
 
248
+ Source: [Codex hooks](https://learn.chatgpt.com/docs/hooks).
249
+
162
250
  Generated Codex hook commands include `AI_TOOLKIT_HOOK_QUIET=1`. Native
163
- `SessionStart`, `PreCompact`, and MCP-health adapters use Codex instruction and
164
- config terminology (`AGENTS.md`, `.codex/config.toml`) instead of Claude-only
165
- paths. The generated
251
+ `SessionStart`, `SessionEnd`, `PreCompact`, and MCP-health adapters use Codex
252
+ instruction and config terminology (`AGENTS.md`, `.codex/config.toml`) instead
253
+ of Claude-only paths. The generated
166
254
  `UserPromptSubmit` governance hook does not set `AI_TOOLKIT_HOOK_FORMAT=json`
167
255
  by default because Codex currently renders `additionalContext` as visible hook
168
256
  context in the TUI. This keeps prompt-submit output quiet while preserving hook
@@ -234,6 +322,8 @@ The Codex compatibility path is verified by:
234
322
  2. Local install tests for `.agents/skills/` and `.codex/hooks.json`
235
323
  3. Plugin install tests for global Codex rules, hooks, and cleanup paths
236
324
  4. CLI tests for `codex-md` and `codex-hooks`
325
+ 5. Native plugin export tests for layout, hooks, determinism, validation, CLI
326
+ dispatch, and no-home-mutation behavior
237
327
 
238
328
  ## Related
239
329
 
@@ -3,9 +3,9 @@ title: "Global Install Model"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [install, global, claude, codex, plugins, local-setup]
6
- version: "3.3.1"
6
+ version: "3.4.0"
7
7
  created: "2026-03-26"
8
- last_updated: "2026-07-15"
8
+ last_updated: "2026-08-19"
9
9
  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."
10
10
  ---
11
11
 
@@ -55,7 +55,7 @@ The `--profile` flag controls how much of each editor's native surface is activa
55
55
  | Profile | What runs | Use when |
56
56
  |---------|-----------|----------|
57
57
  | `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. |
58
- | `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. |
58
+ | `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. |
59
59
  | `strict` | Everything in `standard` plus git-hook wiring for commit-time safety checks. | Solo dev or tight team with zero tolerance for drift. |
60
60
  | `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. |
61
61
 
@@ -98,20 +98,20 @@ store, so toolkit updates require re-export and re-upload.
98
98
  with documented, file-based config surfaces:
99
99
 
100
100
  - `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`)
101
- - `gemini`: `~/.gemini/GEMINI.md`; hooks at `~/.gemini/settings.json` (profile ≥ standard); `~/.gemini/commands/` and `~/.gemini/skills/` pointer (profile full)
101
+ - `gemini`: `~/.gemini/GEMINI.md`; hooks at `~/.gemini/settings.json` (profile ≥ standard); `~/.gemini/commands/`, `~/.gemini/skills/` pointer, and native `~/.gemini/agents/*.md` (profile full)
102
102
  - `augment`: `~/.augment/rules/ai-toolkit.md`; `~/.augment/agents/`, `~/.augment/commands/`, and hooks in `~/.augment/settings.json` (profile full)
103
- - `cline`: `~/Documents/Cline/Rules/ai-toolkit-*.md` plus `~/.cline/skills/ai-toolkit-skill-catalogue/SKILL.md`
103
+ - `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
104
104
  - `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)
105
105
  - `aider`: `~/.aider.conf.yml` plus `~/.aider-ai-toolkit-CONVENTIONS.md` when the YAML file does not already exist
106
106
  - `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
107
- - `opencode`: `~/.config/opencode/*`
107
+ - `opencode`: `~/.config/opencode/{AGENTS.md,agents/,commands/,plugins/,opencode.json}`; `profile=full` also copies complete native skills to `~/.config/opencode/skills/<name>/`
108
108
 
109
109
  Cursor, GitHub Copilot, and Google Antigravity now have partial global support,
110
110
  scoped to whatever documented HOME file surface each exposes:
111
111
 
112
112
  - `cursor`: `~/.cursor/hooks.json` (safety/quality hooks; profile ≥ standard). Cursor RULES stay project-local — their only global surface is the Settings UI.
113
113
  - `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.
114
- - `antigravity`: skill pointer at `~/.gemini/config/skills/` and `~/.gemini/antigravity-cli/skills/`. Antigravity RULES stay project-local.
114
+ - `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.
115
115
 
116
116
  Their global MCP support, where available, is handled by `ai-toolkit mcp
117
117
  install`, not by the rule installer.
@@ -146,7 +146,9 @@ These files still stay local to a repository as part of the core install model:
146
146
  - `.github/agents/ai-toolkit-*.agent.md`
147
147
  - `.github/skills/ai-toolkit-*/SKILL.md` plus required assets and helper scripts
148
148
  - `.github/hooks/ai-toolkit.json` plus `.github/hooks/ai-toolkit/copilot_hook.py` (profile ≥ `standard`)
149
- - `.clinerules`
149
+ - `.cline/rules/ai-toolkit-*.md` plus `.clinerules/ai-toolkit-*.md` compatibility
150
+ - `.cline/hooks/<Event>` plus `.clinerules/hooks/<Event>` compatibility for Cline profiles `standard`, `strict`, and `full`
151
+ - `.clinerules/workflows/ai-toolkit-*.md`
150
152
  - `.roomodes`
151
153
  - `.aider.conf.yml`
152
154
  - `.augment/rules/ai-toolkit-*.md`
@@ -3,9 +3,9 @@ title: "Hooks Catalog"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [hooks, quality, safety, enforcement, settings.json]
6
- version: "1.9.0"
6
+ version: "1.11.0"
7
7
  created: "2026-03-27"
8
- last_updated: "2026-07-26"
8
+ last_updated: "2026-08-19"
9
9
  description: "Complete reference of all ai-toolkit hooks: events, scripts, installation, and runtime behavior."
10
10
  ---
11
11
 
@@ -607,12 +607,47 @@ Beyond the global Claude Code hooks above, editor profiles emit native hook file
607
607
  |--------|------|-----------|--------|
608
608
  | Cursor | `.cursor/hooks.json` | `generate_cursor_hooks.py` | Cursor hooks schema |
609
609
  | Devin CLI | `.devin/hooks.v1.json` | `generate_devin_hooks.py` | Claude-compatible (the replacement for Cascade) |
610
- | Gemini CLI | `.gemini/settings.json` (hooks block) | `generate_gemini_hooks.py` | Gemini `BeforeTool`/`AfterTool` events |
610
+ | 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` |
611
611
  | Augment | `.augment/settings.json` (hooks block) | `generate_augment_hooks.py` | Claude-style events |
612
+ | 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`) |
612
613
  | 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`) |
613
614
  | Codex CLI | `.codex/hooks.json`; user `$CODEX_HOME/hooks.json` | `generate_codex_hooks.py` | Native Codex schema, PascalCase events, command ownership markers |
615
+ | Google Antigravity | `.agents/hooks.json`; user `~/.gemini/config/hooks.json` | `generate_antigravity_hooks.py` | Native five-event schema plus adjacent Python adapter |
614
616
  | OpenCode | `.opencode/plugins/ai-toolkit-hooks.js`; user `~/.config/opencode/plugins/ai-toolkit-hooks.js` | `generate_opencode_plugin.py` | Native JavaScript plugin hooks |
615
617
 
618
+ ### Cline hooks (`.cline/hooks/<Event>` and `.clinerules/hooks/<Event>`)
619
+
620
+ Cline CLI/SDK loads `.cline/hooks`, while the VS Code and JetBrains extension
621
+ loads project hooks from `.clinerules/hooks`; project generation emits both.
622
+ Cline loads extensionless executable files named `TaskStart`, `TaskResume`,
623
+ `TaskCancel`, `TaskComplete`, `PreToolUse`, `PostToolUse`, `UserPromptSubmit`,
624
+ and `PreCompact`. The toolkit adapter is self-contained, reads bounded JSON
625
+ from stdin, and emits only Cline's documented `cancel`, `contextModification`,
626
+ and `errorMessage` keys. `PreToolUse` validates the documented
627
+ `preToolUse.toolName` plus `parameters` shape and cancels recognized destructive
628
+ shell operations, including `run_commands` arrays; start, resume, prompt, and compaction events may inject safe
629
+ context. Input size and runtime are bounded, and regeneration replaces only
630
+ marked toolkit files while preserving user-owned hooks.
631
+
632
+ ### Google Antigravity hooks (`.agents/hooks.json`)
633
+
634
+ The toolkit owns only the top-level `ai-toolkit` namespace and preserves
635
+ unrelated namespaces. The exact event set is `PreToolUse`, `PostToolUse`,
636
+ `PreInvocation`, `PostInvocation`, and `Stop`. Tool events use matcher groups;
637
+ the other events use direct command-handler lists. Every handler has a bounded
638
+ timeout.
639
+
640
+ The adjacent Python runtime maps `.toolCall.name` and
641
+ `.toolCall.args.CommandLine` to native camelCase responses. `PreToolUse`
642
+ returns `allow`, `deny`, or `ask`; `PostToolUse` returns `{}`; invocation events
643
+ use object-shaped `injectSteps` and a native `terminationBehavior`; `Stop`
644
+ reads the official `executionNum`, `terminationReason`, optional `error`, and
645
+ `fullyIdle` inputs. It returns `decision: continue` only when the invocation is
646
+ not fully idle and has not passed its first execution; later executions and
647
+ fully idle invocations stop, which bounds re-entry.
648
+ Project commands use `.agents/hooks/`; exported plugin commands resolve through
649
+ `${extensionPath}`.
650
+
616
651
  ### Cursor hooks (`.cursor/hooks.json`)
617
652
 
618
653
  Cursor hooks follow the native [version-1 hooks contract](https://cursor.com/docs/hooks):
@@ -641,10 +676,11 @@ Codex hooks follow the native [Codex hooks contract](https://learn.chatgpt.com/d
641
676
 
642
677
  - **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.
643
678
  - **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.
644
- - **Events:** Codex documents 10 events. ai-toolkit wires 9: `SessionStart`, `PreToolUse`, `PostToolUse`, `PermissionRequest`, `UserPromptSubmit`, `SubagentStart`, `SubagentStop`, `PreCompact`, and `Stop`. `PostCompact` is intentionally unwired.
679
+ - **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.
680
+ - **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.
645
681
  - **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.
646
682
  - **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.
647
- - **Preservation:** generation replaces only toolkit-owned handlers and assets. Unrelated user handlers and plugin-owned handlers remain intact.
683
+ - **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.
648
684
  - **Trust:** installation never bypasses trust. Review the active definitions with `/hooks` after install or update.
649
685
 
650
686
  ### Devin CLI hooks (`.devin/hooks.v1.json`)
@@ -3,9 +3,9 @@ title: "AI Toolkit - MCP Editor Compatibility"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [mcp, editors, compatibility, codex, cursor, antigravity]
6
- version: "1.3.0"
6
+ version: "1.3.1"
7
7
  created: "2026-04-12"
8
- last_updated: "2026-07-14"
8
+ last_updated: "2026-08-19"
9
9
  description: "Official MCP support matrix and native config targets for editors supported by ai-toolkit."
10
10
  ---
11
11
 
@@ -23,7 +23,7 @@ ai-toolkit keeps `.mcp.json` as the project-level canonical template format and
23
23
  | Cursor | project + global | `.cursor/mcp.json`, `~/.cursor/mcp.json` | Mirrors `mcpServers` directly |
24
24
  | GitHub Copilot | project + global | `.github/mcp.json`, `$COPILOT_HOME/mcp-config.json` (default `~/.copilot/mcp-config.json`) | Adds Copilot-required `type` and `tools` fields |
25
25
  | Gemini CLI | project + global | `.gemini/settings.json`, `~/.gemini/settings.json` | Merges `mcpServers` into settings JSON |
26
- | 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 |
26
+ | 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 |
27
27
  | Roo Code | project | `.roo/mcp.json` | Mirrors `mcpServers` into the documented project-level MCP file |
28
28
  | Windsurf | global | `~/.codeium/windsurf/mcp_config.json` | Global-only JSON config |
29
29
  | Cline | global | `~/.cline/data/settings/cline_mcp_settings.json` | Global-only JSON config |
@@ -3,9 +3,9 @@ title: "MCP Server Templates"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [mcp, templates, servers, configuration, editors, inject-mcp, external-templates]
6
- version: "1.4.0"
6
+ version: "1.4.1"
7
7
  created: "2026-04-07"
8
- last_updated: "2026-07-14"
8
+ last_updated: "2026-08-19"
9
9
  description: "Reference for 26 built-in MCP server templates, external template injection via inject-mcp, and native editor MCP installation support."
10
10
  ---
11
11
 
@@ -51,7 +51,7 @@ When `install` runs with `--scope project`, ai-toolkit also updates the project'
51
51
  | `cursor` | project + global | `.cursor/mcp.json`, `~/.cursor/mcp.json` | Mirrors canonical `mcpServers` |
52
52
  | `copilot` | project + global | `.github/mcp.json`, `$COPILOT_HOME/mcp-config.json` (default `~/.copilot/mcp-config.json`) | Adds `type` and `tools: ["*"]` automatically |
53
53
  | `gemini` | project + global | `.gemini/settings.json`, `~/.gemini/settings.json` | Uses Gemini CLI `mcpServers` format |
54
- | `antigravity` | project + global | `.agents/mcp_config.json`, `~/.gemini/config/mcp_config.json` | Preserves `url` or `serverUrl` remote transports and Antigravity authentication/tool-control fields |
54
+ | `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 |
55
55
  | `roo` | project | `.roo/mcp.json` | Mirrors canonical `mcpServers` into Roo's project MCP file |
56
56
  | `windsurf` | global | `~/.codeium/windsurf/mcp_config.json` | Global-only official config |
57
57
  | `cline` | global | `~/.cline/data/settings/cline_mcp_settings.json` | Global-only official config |
@@ -3,17 +3,17 @@ title: "AI Toolkit - opencode Compatibility"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [opencode, compatibility, install, skills, hooks, mcp, plugins]
6
- version: "1.0.1"
6
+ version: "1.1.0"
7
7
  created: "2026-04-16"
8
- last_updated: "2026-07-14"
9
- description: "Reference for how ai-toolkit integrates with opencode — AGENTS.md, subagents, slash commands, JS plugin hook bridge, and MCP merge into opencode.json."
8
+ last_updated: "2026-08-19"
9
+ description: "Reference for how ai-toolkit integrates with opencode — AGENTS.md, Agent Skills, subagents, slash commands, JS plugin hooks, and MCP config."
10
10
  ---
11
11
 
12
12
  # AI Toolkit - opencode Compatibility
13
13
 
14
14
  ## Summary
15
15
 
16
- 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`.
16
+ 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.
17
17
 
18
18
  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.
19
19
 
@@ -24,6 +24,7 @@ opencode also reads `CLAUDE.md` as a fallback, so a user without the native inte
24
24
  - `AGENTS.md` (shared with Codex CLI via distinct marker sections)
25
25
  - `.opencode/agents/ai-toolkit-*.md` (one per ai-toolkit agent, `mode: subagent`)
26
26
  - `.opencode/commands/ai-toolkit-*.md` (one per user-invocable skill; the prompt lives in the markdown body)
27
+ - `.opencode/skills/<name>/SKILL.md` plus its resources (`profile=full`)
27
28
  - `.opencode/plugins/ai-toolkit-hooks.js` (JS plugin bridging Bash hooks)
28
29
  - `opencode.json` (MCP key merged from `.mcp.json`, user keys preserved)
29
30
 
@@ -34,6 +35,7 @@ opencode also reads `CLAUDE.md` as a fallback, so a user without the native inte
34
35
  - `~/.config/opencode/AGENTS.md`
35
36
  - `~/.config/opencode/agents/ai-toolkit-*.md`
36
37
  - `~/.config/opencode/commands/ai-toolkit-*.md`
38
+ - `~/.config/opencode/skills/<name>/SKILL.md` plus resources (`profile=full`)
37
39
  - `~/.config/opencode/plugins/ai-toolkit-hooks.js`
38
40
  - `~/.config/opencode/opencode.json` (MCP merge, user keys preserved)
39
41
 
@@ -46,6 +48,7 @@ Files land directly under `~/.config/opencode/` (no `.opencode/` nesting) becaus
46
48
  | Rules file | `CLAUDE.md` | `AGENTS.md` | `AGENTS.md` + `CLAUDE.md` fallback |
47
49
  | Subagents | Yes | Yes (`.codex/agents/*.toml`) | Yes (`mode: subagent`) |
48
50
  | Slash commands | Skills | Adapted skills | Native commands with frontmatter |
51
+ | Agent Skills | Yes | Yes | Yes (`.opencode/skills/*/SKILL.md`) |
49
52
  | MCP | Yes | Yes | Yes (`opencode.json`) |
50
53
  | Lifecycle hooks | JSON config | `.codex/hooks` | JS/TS plugins (~30+ events) |
51
54
  | Global config dir | `~/.claude` | `$CODEX_HOME` (default `~/.codex`) | `~/.config/opencode` |
@@ -79,6 +82,31 @@ OpenCode while translating Claude-only skill-directory variables and runtime
79
82
  APIs. Codex output uses a separate renderer and converts prompt placeholders to
80
83
  durable user-input prose.
81
84
 
85
+ ## Native Agent Skills
86
+
87
+ OpenCode's stable Agent Skills surface discovers one directory per skill at
88
+ `.opencode/skills/<name>/SKILL.md` or
89
+ `~/.config/opencode/skills/<name>/SKILL.md`. The `full` profile copies each
90
+ complete ai-toolkit skill directory so relative scripts, references,
91
+ templates, and assets remain available. Lower profiles use OpenCode's
92
+ documented `.claude/skills/` and `.agents/skills/` compatibility discovery and
93
+ remove only toolkit-managed native copies when downgrading.
94
+
95
+ `generate_opencode_skills.py` preserves the stable portable fields `name`,
96
+ `description`, `license`, `compatibility`, and `metadata`. Claude-only runtime
97
+ fields and orchestration primitives are not emitted. The adapter maps
98
+ `user-invocable: false` to the v2-compatible `slash: false` hint and
99
+ `disable-model-invocation: true` to metadata
100
+ `opencode/autoinvoke: false`. Stable OpenCode ignores unknown frontmatter and
101
+ loads Agent Skills on demand through the `skill` tool; slash commands continue
102
+ to come only from `.opencode/commands/`.
103
+
104
+ Managed manifests let profile downgrade and uninstall remove generated files
105
+ while preserving user-owned skill directories and files added beside managed
106
+ resources. Source and destination symlinks are rejected before writes. Pinned
107
+ destination descriptors remain active through generation, cleanup, and
108
+ rollback, so an ancestor swap cannot redirect mutations outside the target.
109
+
82
110
  ## Hook Bridge (JS Plugin)
83
111
 
84
112
  `.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/`:
@@ -126,12 +154,31 @@ The installer detects opencode as configured when any of these markers exist:
126
154
 
127
155
  - Generated `.opencode/agents/ai-toolkit-*.md`
128
156
  - Generated `.opencode/commands/ai-toolkit-*.md`
157
+ - Manifest-owned files under generated `.opencode/skills/<name>/` directories
129
158
  - Generated `.opencode/plugins/ai-toolkit-hooks.js`
130
159
  - Managed markers from `AGENTS.md`
131
160
  - `mcp` key entries injected by the toolkit (user keys preserved)
132
161
 
133
162
  User-authored opencode files and user-authored `opencode.json` keys are never deleted.
134
163
 
164
+ Native skill cleanup removes only manifest-owned files. A user-owned skill or
165
+ an extra file inside a formerly managed directory is preserved. The native
166
+ skills tree participates in the uninstall transaction, so a later cleanup
167
+ failure restores managed files without discarding those user additions.
168
+
169
+ ## Current Config and v2 Beta Surfaces
170
+
171
+ Stable OpenCode supports both `opencode.json` and `opencode.jsonc`. Its current
172
+ config directory uses plural `agents/`, `commands/`, `plugins/`, and `skills/`
173
+ subdirectories. The v2 plugin API is still beta and additionally recognizes
174
+ root-package `skills/*.md`, nested `skills/**/SKILL.md`, and a `skills` config
175
+ array containing local paths or HTTP URLs.
176
+
177
+ There is no migration in ai-toolkit for v2 yet. The existing stable JavaScript
178
+ plugin generator remains the supported path until the v2 API stabilizes; the
179
+ beta surfaces are tracked in the ecosystem registry so a later sync cannot
180
+ silently miss their promotion.
181
+
135
182
  ## Behavioral Limits
136
183
 
137
184
  - 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.
@@ -141,7 +188,7 @@ User-authored opencode files and user-authored `opencode.json` keys are never de
141
188
 
142
189
  The opencode integration is verified by:
143
190
 
144
- 1. Generator contract tests for the five `generate_opencode*.py` scripts (bats)
191
+ 1. Generator contract tests for the six `generate_opencode*.py` scripts (bats)
145
192
  2. MCP merge idempotency and user-key preservation tests
146
193
  3. Plugin export shape and event coverage tests
147
194
  4. Auto-detection tests for install / update flow
@@ -154,6 +201,7 @@ The opencode integration is verified by:
154
201
  | `ai-toolkit opencode-md` | Generate `AGENTS.md` body for opencode |
155
202
  | `ai-toolkit opencode-agents` | Generate `.opencode/agents/ai-toolkit-*.md` |
156
203
  | `ai-toolkit opencode-commands` | Generate `.opencode/commands/ai-toolkit-*.md` |
204
+ | `ai-toolkit opencode-skills` | Generate complete `.opencode/skills/<name>/` directories |
157
205
  | `ai-toolkit opencode-plugin` | Generate `.opencode/plugins/ai-toolkit-hooks.js` |
158
206
  | `ai-toolkit opencode-json` | Merge MCP servers into `opencode.json` |
159
207