@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.
- package/CHANGELOG.md +66 -0
- package/README.md +35 -15
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/skills/hook-creator/SKILL.md +18 -4
- package/app/surface.json +4 -0
- package/benchmarks/ecosystem-doctor-snapshot.json +67 -19
- package/bin/ai-toolkit.js +27 -3
- package/kb/reference/architecture-overview.md +13 -5
- package/kb/reference/claude-ecosystem-expansion-foundations.md +30 -5
- package/kb/reference/cli-reference.md +27 -2
- package/kb/reference/codex-cli-compatibility.md +101 -11
- package/kb/reference/global-install-model.md +10 -8
- package/kb/reference/hooks-catalog.md +41 -5
- package/kb/reference/mcp-editor-compatibility.md +3 -3
- package/kb/reference/mcp-templates.md +3 -3
- package/kb/reference/opencode-compatibility.md +53 -5
- package/kb/reference/supported-tools-registry.md +31 -26
- package/llms-full.txt +312 -73
- package/manifest.json +1 -1
- package/package.json +6 -2
- package/scripts/antigravity_plugin.py +570 -0
- package/scripts/codex_plugin.py +764 -0
- package/scripts/ecosystem_tools.json +92 -17
- package/scripts/generate_antigravity.py +16 -14
- package/scripts/generate_antigravity_agents.py +255 -0
- package/scripts/generate_antigravity_hooks.py +344 -0
- package/scripts/generate_cline_hooks.py +391 -0
- package/scripts/generate_cline_rules.py +210 -43
- package/scripts/generate_cline_skills.py +65 -2
- package/scripts/generate_codex_hooks.py +70 -8
- package/scripts/generate_gemini_agents.py +197 -0
- package/scripts/generate_gemini_hooks.py +24 -4
- package/scripts/generate_opencode_skills.py +544 -0
- package/scripts/inject_hook_cli.py +4 -26
- package/scripts/install.py +11 -10
- package/scripts/install_steps/ai_tools.py +209 -34
- package/scripts/mcp_editors.py +9 -1
- package/scripts/plugin.py +21 -0
- package/scripts/plugin_schema.py +8 -7
- package/scripts/secure_fs.py +35 -0
- package/scripts/uninstall.py +162 -18
- 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.
|
|
6
|
+
version: "1.8.0"
|
|
7
7
|
created: "2026-03-23"
|
|
8
|
-
last_updated: "2026-08-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
6
|
+
version: "1.2.0"
|
|
7
7
|
created: "2026-03-27"
|
|
8
|
-
last_updated: "2026-
|
|
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
|
|
47
|
-
|
|
48
|
-
|
|
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-
|
|
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`
|
|
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
|
|
6
|
+
version: "1.1.0"
|
|
7
7
|
created: "2026-04-12"
|
|
8
|
-
last_updated: "2026-
|
|
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.
|
|
127
|
-
|
|
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`,
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
164
|
-
config terminology (`AGENTS.md`, `.codex/config.toml`) instead
|
|
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.
|
|
6
|
+
version: "3.4.0"
|
|
7
7
|
created: "2026-03-26"
|
|
8
|
-
last_updated: "2026-
|
|
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
|
|
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
|
|
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`
|
|
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
|
|
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.
|
|
6
|
+
version: "1.11.0"
|
|
7
7
|
created: "2026-03-27"
|
|
8
|
-
last_updated: "2026-
|
|
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` |
|
|
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
|
|
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
|
|
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.
|
|
6
|
+
version: "1.3.1"
|
|
7
7
|
created: "2026-04-12"
|
|
8
|
-
last_updated: "2026-
|
|
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` |
|
|
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.
|
|
6
|
+
version: "1.4.1"
|
|
7
7
|
created: "2026-04-07"
|
|
8
|
-
last_updated: "2026-
|
|
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` |
|
|
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
|
|
6
|
+
version: "1.1.0"
|
|
7
7
|
created: "2026-04-16"
|
|
8
|
-
last_updated: "2026-
|
|
9
|
-
description: "Reference for how ai-toolkit integrates with opencode — AGENTS.md, subagents, slash commands, JS plugin
|
|
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
|
|
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
|
|
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
|
|