@softspark/ai-toolkit 4.6.0 → 4.8.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/llms-full.txt CHANGED
@@ -4404,9 +4404,9 @@ title: "SOP: Claude Toolkit Maintenance"
4404
4404
  category: procedures
4405
4405
  service: ai-toolkit
4406
4406
  tags: [sop, maintenance, agents, skills, install]
4407
- version: "3.0.1"
4407
+ version: "3.1.0"
4408
4408
  created: "2026-03-23"
4409
- last_updated: "2026-05-25"
4409
+ last_updated: "2026-06-10"
4410
4410
  description: "Standard operating procedures for installing, maintaining, and evolving the ai-toolkit."
4411
4411
  ---
4412
4412
 
@@ -4612,18 +4612,19 @@ Use this when Claude appears to ignore `CLAUDE.md`, `.claude/rules/*.md`, output
4612
4612
  - `https://code.claude.com/docs/en/settings`
4613
4613
  - `https://code.claude.com/docs/en/output-styles`
4614
4614
  - `https://code.claude.com/docs/en/hooks`
4615
- 2. **Verify instruction loading.** Run `/memory` in Claude Code and confirm the expected `CLAUDE.md`, `CLAUDE.local.md`, and `.claude/rules/*.md` files are listed. Remember that Claude Code reads `CLAUDE.md`, not `AGENTS.md`, unless `CLAUDE.md` imports it.
4616
- 3. **Verify the active output style.** Check `.claude/settings.local.json` or `/config`. Output style changes apply after `/clear` or a new session.
4617
- 4. **Inspect installed hooks.** Ensure `~/.claude/settings.json` contains the ai-toolkit `UserPromptSubmit` and `Stop` entries. The governance hook must run with `AI_TOOLKIT_HOOK_QUIET=1 AI_TOOLKIT_HOOK_FORMAT=json` so it injects `additionalContext` without noisy transcript output.
4618
- 5. **Reproduce the hook path directly.**
4615
+ 2. **Isolate with safe mode (v2.1.169+).** Start a session with `claude --safe-mode` (or `CLAUDE_CODE_SAFE_MODE=1`) it disables hooks, skills, agents, and CLAUDE.md. If the problem persists in safe mode, the cause is upstream, not toolkit customization; if it disappears, bisect toolkit components with `ai-toolkit update --only <component>`.
4616
+ 3. **Verify instruction loading.** Run `/memory` in Claude Code and confirm the expected `CLAUDE.md`, `CLAUDE.local.md`, and `.claude/rules/*.md` files are listed. Remember that Claude Code reads `CLAUDE.md`, not `AGENTS.md`, unless `CLAUDE.md` imports it.
4617
+ 4. **Verify the active output style.** Check `.claude/settings.local.json` or `/config`. Output style changes apply after `/clear` or a new session.
4618
+ 5. **Inspect installed hooks.** Ensure `~/.claude/settings.json` contains the ai-toolkit `UserPromptSubmit` and `Stop` entries. The governance hook must run with `AI_TOOLKIT_HOOK_QUIET=1 AI_TOOLKIT_HOOK_FORMAT=json` so it injects `additionalContext` without noisy transcript output.
4619
+ 6. **Reproduce the hook path directly.**
4619
4620
  ```bash
4620
4621
  printf '{"session_id":"debug","prompt":"debug this technical rule issue"}' \
4621
4622
  | AI_TOOLKIT_SEARCH_FIRST=strict AI_TOOLKIT_HOOK_QUIET=1 AI_TOOLKIT_HOOK_FORMAT=json \
4622
4623
  ~/.softspark/ai-toolkit/hooks/user-prompt-submit.sh
4623
4624
  ```
4624
4625
  The output must be valid JSON with `hookSpecificOutput.additionalContext`.
4625
- 6. **Check corrective enforcement.** If the assistant still skips required research, `stop-search-check.sh` should block Stop with the search-first message. If it does not, inspect `~/.softspark/ai-toolkit/state/search-required-*.flag` and the Codex/Claude transcript logs.
4626
- 7. **Repair drift.** Run:
4626
+ 7. **Check corrective enforcement.** If the assistant still skips required research, `stop-search-check.sh` should block Stop with the search-first message. If it does not, inspect `~/.softspark/ai-toolkit/state/search-required-*.flag` and the Codex/Claude transcript logs.
4627
+ 8. **Repair drift.** Run:
4627
4628
  ```bash
4628
4629
  ai-toolkit update --only hooks
4629
4630
  python3 scripts/ecosystem_doctor.py --tool claude-code --format text
@@ -5372,7 +5373,7 @@ python3 scripts/audit_skills.py --ci
5372
5373
  npm test
5373
5374
 
5374
5375
  # 5. Stage and commit
5375
- git add AGENTS.md .agents/rules/ai-toolkit-*.md llms.txt llms-full.txt
5376
+ git add AGENTS.md llms.txt llms-full.txt
5376
5377
  git add -p # stage your other changes
5377
5378
  git commit -m "feat: your change description"
5378
5379
  ```
@@ -6136,9 +6137,9 @@ title: "AI Toolkit - Architecture Overview"
6136
6137
  category: reference
6137
6138
  service: ai-toolkit
6138
6139
  tags: [architecture, overview, design, structure]
6139
- version: "1.4.5"
6140
+ version: "1.4.6"
6140
6141
  created: "2026-03-23"
6141
- last_updated: "2026-05-12"
6142
+ last_updated: "2026-06-10"
6142
6143
  description: "Architecture of ai-toolkit: directory layout, global install model, editor-aware MCP install, Codex translation layer, skill tiers, and integration with projects."
6143
6144
  ---
6144
6145
 
@@ -6242,7 +6243,7 @@ Machine (global) Project (local)
6242
6243
  - `--editors cursor,aider` — install only selected editors
6243
6244
  - (no flag) — auto-detect from existing project files; `update --local` picks up whatever editors already have configs
6244
6245
 
6245
- Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.windsurf/rules/*.md`, `.clinerules/*.md`, `.roo/rules/*.md`, `.augment/rules/ai-toolkit-*.md`, `.agents/rules/*.md`, `CONVENTIONS.md`). Full-profile installs also emit native skill pointer catalogues for Cursor, Windsurf, and Cline. Codex local install additionally generates `AGENTS.md` (universal coding rules inlined — Codex reads only AGENTS.md, not `.agents/rules/`), `.agents/skills/*`, and `.codex/hooks.json`. Hooks are global-only — not merged into project settings except for editor-native local hook files such as Codex `.codex/hooks.json`. Experimental plugin packs can also layer a global Codex target in `HOME` (`~/AGENTS.md`, `~/.agents/`, `~/.codex/hooks.json`) when installed with `ai-toolkit plugin install --editor codex`.
6246
+ Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.devin/rules/*.md` + `.windsurf/rules/*.md` (dual-emit since the Devin Desktop rebrand), `.clinerules/*.md`, `.roo/rules/*.md`, `.augment/rules/ai-toolkit-*.md`, `.agents/rules/*.md`, `CONVENTIONS.md`). Full-profile installs also emit native skill pointer catalogues for Cursor, Windsurf, and Cline. Codex local install additionally generates `AGENTS.md` (universal coding rules inlined — Codex reads only AGENTS.md, not `.agents/rules/`), `.agents/skills/*`, and `.codex/hooks.json`. Hooks are global-only — not merged into project settings except for editor-native local hook files such as Codex `.codex/hooks.json`. Experimental plugin packs can also layer a global Codex target in `HOME` (`~/AGENTS.md`, `~/.agents/`, `~/.codex/hooks.json`) when installed with `ai-toolkit plugin install --editor codex`.
6246
6247
 
6247
6248
  If a project already has `.mcp.json`, local install mirrors its `mcpServers` entries into `.claude/settings.local.json` plus any selected editors with project-scoped native MCP files (`.cursor/mcp.json`, `.github/mcp.json`).
6248
6249
 
@@ -6266,7 +6267,7 @@ If a project already has `.mcp.json`, local install mirrors its `mcpServers` ent
6266
6267
  | `cursor-rules` | `./` | Generates `.cursorrules` (legacy) |
6267
6268
  | `cursor-mdc` | `./` | Generates `.cursor/rules/*.mdc` (recommended) |
6268
6269
  | `windsurf-rules` | `./` | Generates `.windsurfrules` (legacy) |
6269
- | `windsurf-dir-rules` | `./` | Generates `.windsurf/rules/*.md` |
6270
+ | `windsurf-dir-rules` | `./` | Generates `.devin/rules/*.md` + `.windsurf/rules/*.md` (dual-emit) |
6270
6271
  | `copilot-instructions` | `./` | Generates `.github/copilot-instructions.md` |
6271
6272
  | `gemini-md` | `./` | Generates `GEMINI.md` |
6272
6273
  | `cline-rules` | `./` | Generates `.clinerules` (legacy) |
@@ -8899,9 +8900,9 @@ title: "Hooks Catalog"
8899
8900
  category: reference
8900
8901
  service: ai-toolkit
8901
8902
  tags: [hooks, quality, safety, enforcement, settings.json]
8902
- version: "1.5.7"
8903
+ version: "1.6.0"
8903
8904
  created: "2026-03-27"
8904
- last_updated: "2026-05-25"
8905
+ last_updated: "2026-06-10"
8905
8906
  description: "Complete reference of all ai-toolkit hooks: events, scripts, installation, and runtime behavior."
8906
8907
  ---
8907
8908
 
@@ -9467,6 +9468,31 @@ commands explicitly silent, and Codex-generated hooks plus Claude's bundled
9467
9468
  - `_source: "ai-toolkit"` tag on every entry — allows idempotent merge/strip
9468
9469
  - Hooks are **global only** — `--local` does not install hooks into project settings
9469
9470
 
9471
+ ## Per-Editor Native Hooks (profile=full)
9472
+
9473
+ Beyond the global Claude Code hooks above, full-profile project installs emit native hook files for editors that support their own hook lifecycle. All reuse the same `~/.softspark/ai-toolkit/hooks/*.sh` scripts and the `_source: ai-toolkit` merge tag.
9474
+
9475
+ | Editor | File | Generator | Format |
9476
+ |--------|------|-----------|--------|
9477
+ | Cursor | `.cursor/hooks.json` | `generate_cursor_hooks.py` | Cursor hooks schema |
9478
+ | Windsurf (Cascade) | `.windsurf/hooks.json` | `generate_windsurf_hooks.py` | Cascade `agent_action_name`/`tool_info` — **deprecated, dies 2026-07-01** |
9479
+ | Devin CLI | `.devin/hooks.v1.json` | `generate_devin_hooks.py` | Claude-compatible (the replacement for Cascade) |
9480
+ | Gemini CLI | `.gemini/settings.json` (hooks block) | `generate_gemini_hooks.py` | Gemini `BeforeTool`/`AfterTool` events |
9481
+ | Augment | `.augment/settings.json` (hooks block) | `generate_augment_hooks.py` | Claude-style events |
9482
+
9483
+ ### Devin CLI hooks (`.devin/hooks.v1.json`)
9484
+
9485
+ Windsurf rebranded to Devin Desktop (2026-06-02); the Cascade agent — and its `.windsurf/hooks.json` surface — is available only through **2026-07-01**. Devin Local / Devin CLI do **not** read `.windsurf/hooks.json` as a fallback, so hooks must be regenerated onto the Devin CLI format.
9486
+
9487
+ Devin CLI uses a **Claude-compatible** hook format (docs.devin.ai/cli/extensibility/hooks). Key facts driving the generator:
9488
+
9489
+ - **Standalone file shape:** in `.devin/hooks.v1.json` the entire file IS the hooks object — no top-level `"hooks"` wrapper key (unlike `.claude/settings.json`).
9490
+ - **Events:** Claude-style PascalCase — `PreToolUse`, `PostToolUse`, `UserPromptSubmit`, `Stop`, `SessionStart`. `post_setup_worktree` has no Devin equivalent (`session-context.sh` moves to `SessionStart`); `post_cascade_response` maps to `Stop` (which carries no response text on stdin).
9491
+ - **Matchers:** regex against the Devin **tool name** (`read`, `edit`, `exec`, `grep`, `glob`, `mcp__<server>__<tool>`) — NOT Claude's `Bash`/`Edit`, so the shared guards reliably fire.
9492
+ - **Block contract:** the guard scripts emit `{"decision":"block","reason":...}` on stdout (plain mode) AND exit 2 — Devin honors both. Hooks run **without** `AI_TOOLKIT_HOOK_FORMAT=json` because Devin expects the flat `{"decision","reason"}` shape, not Claude's `hookSpecificOutput` envelope.
9493
+ - **Stdin payload:** flat `{ "hook_event_name", "tool_name", "tool_input" }` — already handled by `_hook-io.sh` via its `.tool_name` / `.tool_input.*` branches, so no normalizer change was needed.
9494
+ - **Global bonus:** Devin CLI reads `~/.claude/settings.json` + `.claude/settings.json` hooks directly (`read_config_from.claude` default on, since CLI `2026.3.20-2`), so a global `ai-toolkit install` already covers Devin even without the project-local file.
9495
+
9470
9496
  ## Troubleshooting
9471
9497
 
9472
9498
  **Hooks not loading:**
@@ -11769,9 +11795,9 @@ title: "Supported Tools Registry"
11769
11795
  category: reference
11770
11796
  service: ai-toolkit
11771
11797
  tags: [editors, platforms, generators, integration, ecosystem]
11772
- version: "1.4.0"
11798
+ version: "1.6.0"
11773
11799
  created: "2026-04-23"
11774
- last_updated: "2026-06-05"
11800
+ last_updated: "2026-06-10"
11775
11801
  description: "Human-readable view of scripts/ecosystem_tools.json — the canonical list of tools ai-toolkit integrates with (Claude Code + 11 editors), their documentation URLs, config paths, our generators, and tracked capability markers."
11776
11802
  ---
11777
11803
 
@@ -11794,13 +11820,14 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11794
11820
  | ID | `claude-code` |
11795
11821
  | Docs | https://code.claude.com/docs (platform.claude.com/docs 307-redirects here) |
11796
11822
  | Release notes | https://github.com/anthropics/claude-code/releases |
11797
- | Changelog | https://code.claude.com/docs/en/changelog (lists current 2.1.165) |
11798
- | Config paths | `~/.claude/settings.json`, `.claude/settings.local.json`, `CLAUDE.md`, `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`, `~/.claude/themes/*.json` (v2.1.118+) |
11823
+ | Changelog | https://code.claude.com/docs/en/changelog (lists current 2.1.170) |
11824
+ | Config paths | `~/.claude/settings.json`, `.claude/settings.json` (project, committed), `.claude/settings.local.json`, `CLAUDE.md`, `.claude/rules/*.md`, `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`, `~/.claude/themes/*.json` (v2.1.118+) |
11799
11825
  | Our generators | — (Claude Code is the primary target; toolkit content ships directly as `.md` files and `settings.json` merges) |
11800
11826
  | Tracked hook events | Core: `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `Notification`, `MessageDisplay`. Tool: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`. Turn: `Stop`, `StopFailure`, `UserPromptExpansion`. Subagent: `SubagentStart`, `SubagentStop`. Compaction: `PreCompact`, `PostCompact`. Permissions: `PermissionRequest`, `PermissionDenied`. Elicitation: `Elicitation`, `ElicitationResult`. Teams: `TaskCreated`, `TaskCompleted`, `TeammateIdle`. Worktrees/env: `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `FileChanged`, `ConfigChange`. Setup: `Setup`, `InstructionsLoaded` |
11801
- | Tracked handler types | `command`, `prompt`, `agent`, `mcp_tool` |
11827
+ | Tracked handler types | `command`, `prompt`, `agent`, `mcp_tool`, `http` (POST event JSON to allowlisted URLs via `allowedHttpHookUrls`) |
11802
11828
  | Other capabilities | slash commands, MCP server/client, sub-agent, output style, `SKILL.md` (≥500 lines warn) |
11803
11829
  | Version probe | `claude --version` |
11830
+ | Notes | v2.1.169 added `disableBundledSkills` setting + `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` env var (hides bundled skills/built-in slash commands from the model; toolkit skills in `.claude/skills/` are unaffected — useful when toolkit skills overlap built-ins) and `claude --safe-mode` / `CLAUDE_CODE_SAFE_MODE` (starts with hooks, skills, agents, and CLAUDE.md disabled — first isolation step when debugging toolkit rule enforcement). `fallbackModel` settings key (v2.1.166) noted as not-adopted (class C, no toolkit surface writes model settings). |
11804
11831
 
11805
11832
  ---
11806
11833
 
@@ -11814,8 +11841,8 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11814
11841
  | Docs | https://cursor.com/docs |
11815
11842
  | Changelog | https://cursor.com/changelog |
11816
11843
  | Stable docs mirror | https://cursor.com/llms.txt (all doc pages have .md twins) |
11817
- | Config paths | `.cursorrules`, `.cursor/rules/*.mdc`, `.cursor/rules/*.md`, `AGENTS.md`, `.cursor/mcp.json`, `~/.cursor/mcp.json`, `.cursor/skills/*/SKILL.md`, `~/.cursor/skills/*/SKILL.md`, `.cursor/agents/*.md`, `.cursor/hooks.json` |
11818
- | Compat read paths | `.agents/skills/`, `~/.agents/skills/`, `.claude/skills/`, `~/.claude/skills/`, `.codex/skills/`, `~/.codex/skills/` |
11844
+ | Config paths | `.cursorrules`, `.cursor/rules/*.mdc` (plain `.md` files in `.cursor/rules/` are **ignored** by the rules system), `AGENTS.md`, `.cursor/mcp.json`, `~/.cursor/mcp.json`, `.cursor/skills/*/SKILL.md`, `~/.cursor/skills/*/SKILL.md`, `.cursor/agents/*.md`, `~/.cursor/agents/*.md`, `.cursor/hooks.json` |
11845
+ | Compat read paths | skills: `.agents/skills/`, `~/.agents/skills/`, `.claude/skills/`, `~/.claude/skills/`, `.codex/skills/`, `~/.codex/skills/`; subagents: `.claude/agents/`, `~/.claude/agents/`, `.codex/agents/`, `~/.codex/agents/` (`.cursor/` wins on name conflicts) |
11819
11846
  | Our generators | `scripts/generate_cursor_rules.py`, `scripts/generate_cursor_mdc.py`, `scripts/generate_cursor_hooks.py` (profile=full), `scripts/generate_cursor_agents.py` (profile=full), `scripts/generate_cursor_skills.py` (profile=full pointer) |
11820
11847
  | Tracked capabilities | `cursorrules`, `.cursor/rules`, `AGENTS.md`, `mcp.json`, Composer, Agent Mode, hooks.json, subagents, skills, plugins |
11821
11848
 
@@ -11827,11 +11854,13 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11827
11854
  | Docs | https://docs.devin.ai/desktop (Windsurf rebranded to Devin Desktop ~2026-06-02; docs.windsurf.com resolves here) |
11828
11855
  | Changelog | https://docs.devin.ai/desktop/changelog (windsurf.com/changelog 308-permanent-redirects here) |
11829
11856
  | Stable docs mirror | https://docs.devin.ai/desktop/... per-page .md twins; legacy `.windsurf/`, `.windsurfrules`, `~/.codeium/windsurf/` paths still read as fallback (new canonical: `.devin/`) |
11830
- | Config paths | `.windsurfrules`, `.windsurf/rules/*.md`, `.windsurf/workflows/*.md`, `.windsurf/skills/*/SKILL.md`, `AGENTS.md`, `~/.codeium/windsurf/memories/global_rules.md`, `~/.codeium/windsurf/skills/*/SKILL.md`, `~/.codeium/windsurf/mcp_config.json` |
11831
- | Compat read paths | `.agents/skills/`, `~/.agents/skills/`, (with Claude Code config-reading) `.claude/skills/`, `~/.claude/skills/` |
11832
- | Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py`, `scripts/generate_windsurf_hooks.py` (profile=full), `scripts/generate_windsurf_skills.py` (global + profile=full pointer) |
11857
+ | Config paths | **Primary (Devin Desktop):** `.devin/rules/*.md`, `.devin/workflows/*.md`, `.devin/skills/*/SKILL.md`, `.devin/hooks.v1.json` (Devin CLI hooks, Claude format), `.devin/config.json`, `.devin/config.local.json`, `~/.config/devin/config.json` (Devin Local MCP/permissions). **Legacy fallback:** `.windsurfrules`, `.windsurf/rules/*.md`, `.windsurf/workflows/*.md`, `.windsurf/skills/*/SKILL.md`, `~/.codeium/windsurf/memories/global_rules.md`, `~/.codeium/windsurf/skills/*/SKILL.md`, `~/.codeium/windsurf/mcp_config.json`. Plus `AGENTS.md`. |
11858
+ | Compat read paths | skills: `.agents/skills/`, `~/.agents/skills/`, (with Claude Code config-reading) `.claude/skills/`, `~/.claude/skills/`. **Hooks: Devin CLI reads `.claude/settings.json` + `~/.claude/settings.json` hooks directly (`read_config_from.claude` default on), so globally-installed toolkit hooks work under Devin with no project-local file.** |
11859
+ | Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py` (dual-emits `.devin/` + `.windsurf/`), `scripts/generate_windsurf_hooks.py` (profile=full; **Cascade-scoped, deprecated, drop after 2026-07-01**), `scripts/generate_devin_hooks.py` (profile=full; `.devin/hooks.v1.json`, Claude-format Devin CLI hooks), `scripts/generate_windsurf_skills.py` (global + profile=full pointer, dual-emits) |
11833
11860
  | Tracked capabilities | Cascade, `windsurfrules`, `AGENTS.md`, activation triggers (`always_on`/`glob`/`model_decision`), workflows, skills, MCP, memories, hooks |
11834
11861
  | Activation modes emitted | always_on (agents/security/quality), glob (testing + language rules), model_decision (code-style/workflow) |
11862
+ | Hooks migration | **Done.** Cascade `.windsurf/hooks.json` (`agent_action_name`/`tool_info` format) dies 2026-07-01 with no Devin fallback. `generate_devin_hooks.py` emits `.devin/hooks.v1.json` in the Claude-compatible format Devin CLI uses: Claude-style events (PreToolUse/PostToolUse/UserPromptSubmit/Stop/SessionStart), matchers on Devin tool names (`read`/`edit`/`exec`/`mcp__*`), blocking via flat `{"decision":"block","reason":...}` + exit 2 (no `AI_TOOLKIT_HOOK_FORMAT=json` — Devin does not use Claude's `hookSpecificOutput` envelope). `post_setup_worktree`→`SessionStart`; `post_cascade_response`→`Stop` (no response text on stdin). Both hook generators run at profile=full during the transition; drop `generate_windsurf_hooks.py` in the first release after 2026-07-01. |
11863
+ | Sunset notes | Cascade agent is available only through **2026-07-01**; Devin Local is the default agent since 2026-06-02. Devin CLI ("Devin for Terminal") shares the Devin Local harness, reads `AGENTS.md`, the standard `SKILL.md` format, and Claude-format hooks; not yet a separate registry entry. |
11835
11864
 
11836
11865
  ### GitHub Copilot
11837
11866
 
@@ -11852,11 +11881,11 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11852
11881
  | ID | `gemini-cli` |
11853
11882
  | Docs | https://github.com/google-gemini/gemini-cli/tree/main/docs |
11854
11883
  | Release notes | https://github.com/google-gemini/gemini-cli/releases |
11855
- | Config paths | `GEMINI.md`, `.gemini/settings.json`, `~/.gemini/settings.json`, `.gemini/commands/*.toml`, `.gemini/skills/*/SKILL.md`, `.agents/skills/*/SKILL.md`, `.gemini/extensions/gemini-extension.json` |
11884
+ | Config paths | `GEMINI.md`, `.gemini/settings.json`, `~/.gemini/settings.json`, `.gemini/commands/*.toml`, `.gemini/skills/*/SKILL.md`, `.agents/skills/*/SKILL.md`, `~/.gemini/skills/*/SKILL.md`, `~/.agents/skills/*/SKILL.md` (the `.agents/skills` alias wins over `.gemini/skills` within the same tier), `.gemini/extensions/gemini-extension.json` |
11856
11885
  | Our generators | `scripts/generate_gemini.py`, `scripts/generate_gemini_hooks.py` (profile>=standard), `scripts/generate_gemini_commands.py` (profile=full), `scripts/generate_gemini_skills.py` (profile=full) |
11857
- | Tracked capabilities | `GEMINI.md`, `mcpServers`, tools, `settings.json`, `BeforeTool`, `AfterTool`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `SessionStart`, `SessionEnd`, `SKILL.md`, `activate_skill`, custom commands, `gemini-extension.json` (no native `Stop` event — generator maps Stop-equivalent to `AfterAgent`) |
11886
+ | Tracked capabilities | `GEMINI.md`, `mcpServers`, tools, `settings.json`, `BeforeTool`, `AfterTool`, `BeforeToolSelection`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `AfterModel`, `Notification`, `PreCompress`, `SessionStart`, `SessionEnd`, `SKILL.md`, `activate_skill`, custom commands, `gemini-extension.json` (no native `Stop` event — generator maps Stop-equivalent to `AfterAgent`; 11 documented hook events total) |
11858
11887
  | Version probe | `gemini --version` |
11859
- | Latest upstream | v0.45.1 (2026-06-04). NOTE: Gemini CLI drops free/paid tiers 2026-06-18 in favor of Antigravity CLI (we ship `generate_antigravity.py`); enterprise Code Assist keeps Gemini CLI. |
11888
+ | Latest upstream | v0.45.2 (2026-06-05). NOTE: Gemini CLI drops free/paid tiers 2026-06-18 in favor of Antigravity CLI (we ship `generate_antigravity.py`); enterprise Code Assist keeps Gemini CLI. |
11860
11889
 
11861
11890
  ### Cline
11862
11891
 
@@ -11865,9 +11894,10 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11865
11894
  | ID | `cline` |
11866
11895
  | Docs | https://docs.cline.bot |
11867
11896
  | Release notes | https://github.com/cline/cline/releases |
11868
- | Config paths | `.clinerules/*.md`, `.clinerules/workflows/*.md`, `.clinerules/skills/*/SKILL.md`, `.clinerules/hooks/` (project), `.cline/skills/*/SKILL.md`, `~/.cline/skills/*/SKILL.md`, `~/Documents/Cline/Rules/Hooks/` (global hooks), `~/.cline/data/settings/cline_mcp_settings.json`, `.claude/skills/*/SKILL.md` (native discovery, always-on since v3.57.0). NOTE: `.cline/rules/` and `.cline/hooks/` were removed as phantom paths Cline reads rules from `.clinerules/`. |
11897
+ | Config paths | **Extension:** `.clinerules/*.md`, `.clinerules/workflows/*.md`, `.clinerules/skills/*/SKILL.md`, `.clinerules/hooks/` (project), `~/Documents/Cline/Rules/Hooks/` (global hooks), `~/.cline/data/settings/cline_mcp_settings.json`. **CLI/SDK unified layout** (docs.cline.bot/getting-started/config; `.clinerules` is deprecated there): `.cline/{rules,hooks,plugins,skills}/`, `~/.cline/{rules,hooks,plugins,skills}/`, `CLINE_HOOKS_DIR` env var. **Cross-tool:** `AGENTS.md` + `~/.agents/AGENTS.md` (first-class rules sources), `.claude/skills/*/SKILL.md` (native discovery, always-on since v3.57.0). |
11869
11898
  | Our generators | `scripts/generate_cline.py`, `scripts/generate_cline_rules.py`, `scripts/generate_cline_skills.py` |
11870
- | Tracked capabilities | `clinerules`, Plan Mode, Act Mode, MCP, custom modes, workflows, hooks, skills, subagents, conditional rules |
11899
+ | Tracked capabilities | `clinerules`, Plan Mode, Act Mode, MCP, custom modes, workflows, hooks, skills, subagents, conditional rules, `AGENTS.md`, plugins |
11900
+ | Plugins | `.cline/plugins/` + `~/.cline/plugins/` (JS/TS), `package.json` `cline.plugins` manifest; plugins can bundle skills. Not adopted as a distribution channel yet — candidate for shipping toolkit skills to CLI/SDK users. |
11871
11901
  | Notes | Conditional rules (`paths:` YAML frontmatter) are emitted for testing and language-specific rules since 2026-04. Project rules still use `.clinerules/` for compatibility; global rules are written to `~/Documents/Cline/Rules/` (the documented Cline global rules dir — `~/.cline/rules/` is not a Cline-read path). Skills are emitted as a pointer catalogue in `profile=full` and global installs. |
11872
11902
  | Global install | `ai-toolkit install --editors cline` writes documented global rules under `~/Documents/Cline/Rules/` and a skill pointer under `~/.cline/skills/`; MCP remains managed by `ai-toolkit mcp install --editor cline`. |
11873
11903
 
@@ -11904,9 +11934,9 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11904
11934
  | ID | `augment` |
11905
11935
  | Docs | https://docs.augmentcode.com |
11906
11936
  | Changelog | https://www.augmentcode.com/changelog |
11907
- | Config paths | `.augment/rules/*.md`, `.augment/guidelines.md` (legacy), `.augment/agents/*.md`, `.augment/commands/*.md`, `.augment/skills/*/SKILL.md`, `~/.augment/rules/*.md`, `~/.augment/settings.json`, `/etc/augment/settings.json` |
11937
+ | Config paths | `.augment/rules/*.md`, `.augment-guidelines` (workspace root, legacy single-file), `~/.augment/user-guidelines.md`, `.augment/agents/*.md`, `.augment/commands/*.md`, `.augment/skills/*/SKILL.md`, `.augment/settings.json`, `.augment/settings.local.json`, `~/.augment/rules/*.md`, `~/.augment/settings.json`, `/etc/augment/settings.json`. Auggie CLI also discovers skills/commands from `.claude/` and `.agents/` (`.augment/` wins on precedence). |
11908
11938
  | Our generators | `scripts/generate_augment.py`, `scripts/generate_augment_rules.py`, `scripts/generate_augment_agents.py` (profile=full), `scripts/generate_augment_commands.py` (profile=full), `scripts/generate_augment_hooks.py` (profile=full, HOME-scoped), `scripts/generate_augment_skills.py` (profile=full) |
11909
- | Tracked capabilities | `.augment`, Agent mode, Next Edit, MCP, context engine, Auggie CLI, `always_apply`, `agent_requested`, subagents, custom commands, `SKILL.md`, `PreToolUse`, `PostToolUse`, `SessionStart`, `SessionEnd`, `Stop`, ACP Mode |
11939
+ | Tracked capabilities | `.augment`, Agent mode, Next Edit, MCP, context engine, Auggie CLI, `always_apply`, `agent_requested`, subagents, custom commands, `SKILL.md`, `PreToolUse`, `PostToolUse`, `SessionStart`, `SessionEnd`, `Stop`, `Notification`, ACP Mode |
11910
11940
  | SPA caveat | Mintlify Next.js SPA; use `https://docs.augmentcode.com/<path>.md` siblings (discoverable via `/llms.txt`) for machine reads |
11911
11941
 
11912
11942
  ### Google Antigravity
@@ -11916,19 +11946,20 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11916
11946
  | ID | `google-antigravity` |
11917
11947
  | Docs | https://antigravity.google/docs (JavaScript SPA — use bundle strings / sitemap to verify) |
11918
11948
  | Changelog | https://antigravity.google/changelog (SPA; changelog entries embedded in main-*.js) |
11919
- | Config paths | `.agents/rules/*.md`, `.agents/workflows/*.md` (plural is the Antigravity 2.0 default; singular `.agent/rules`, `.agent/workflows` still read as fallback), `.agent/skills/*/SKILL.md`, `AGENTS.md`, `GEMINI.md` |
11920
- | Our generators | `scripts/generate_antigravity.py` (rules + workflows + skill pointer) |
11921
- | Tracked capabilities | Antigravity, agent manager, artifacts, MCP, workflows, rules, skills, `AGENTS.md`, `GEMINI.md`, agent permissions |
11922
- | Doc access note | Docs are JS-SPA verify via `main-*.js` bundle strings or community skill repos. `WebFetch` returns an empty shell. |
11949
+ | Config paths | `.agents/rules/*.md`, `.agents/workflows/*.md` (plural is the Antigravity 2.0 default; singular `.agent/rules`, `.agent/workflows` still read as fallback), `.agent/skills/*/SKILL.md` (IDE), `.agents/skills/*/SKILL.md` (CLI), `.agents/hooks.json` (CLI hooks), `.agents/mcp_config.json` (CLI MCP), `AGENTS.md`, `GEMINI.md` |
11950
+ | Our generators | `scripts/generate_antigravity.py` (rules + workflows + skill pointer dual-emitted to `.agent/skills/` and `.agents/skills/`) |
11951
+ | Tracked capabilities | Antigravity, agent manager, artifacts, MCP, workflows, rules, skills, hooks, `AGENTS.md`, `GEMINI.md`, agent permissions |
11952
+ | CLI notes | Antigravity CLI (GA 2026-05-19): hooks in `.agents/hooks.json` use Claude-style event names (`PreToolUse`, not Gemini's `BeforeTool`) with a JSON stdin/stdout decision contract; MCP config `.agents/mcp_config.json` requires `serverUrl` (legacy `url`/`httpUrl` fail silently). Global MCP config path is inconsistently reported across sources (`~/.gemini/antigravity-cli/` vs `~/.gemini/config/`) — only the workspace path is registered until verified via `agy inspect`. |
11953
+ | Doc access note | Docs are JS-SPA — verify via `main-*.js` bundle strings or community skill repos. `WebFetch` returns an empty shell. The sitemap.xml is stale (omits the `cli-*` doc pages), so sitemap-based monitoring misses CLI doc additions. |
11923
11954
 
11924
11955
  ### Codex CLI
11925
11956
 
11926
11957
  | Field | Value |
11927
11958
  |-------|-------|
11928
11959
  | ID | `codex-cli` |
11929
- | Docs | https://developers.openai.com/codex (now a live docs site with `/codex/{hooks,skills,rules}` pages; latest stable rust-v0.137.0, 2026-06-04) |
11960
+ | Docs | https://developers.openai.com/codex (live docs site; config pages split into `/codex/config-basic`, `/codex/config-reference`, `/codex/config-advanced` plus `/codex/hooks`, `/codex/skills`; latest stable codex-cli 0.138.0, 2026-06) |
11930
11961
  | Release notes | https://github.com/openai/codex/releases |
11931
- | Config paths | `AGENTS.md`, `.agents/skills/*/SKILL.md`, `.codex/hooks.json`, `~/.codex/config.toml` |
11962
+ | Config paths | `AGENTS.md`, `.agents/skills/*/SKILL.md`, `.codex/hooks.json`, `.codex/config.toml` (project layers, root→cwd, closest wins, trusted projects only), `~/.codex/config.toml` |
11932
11963
  | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`) |
11933
11964
  | Rules delivery | Universal coding rules are inlined into `AGENTS.md` (Codex reads instructions only from AGENTS.md, not `.agents/rules/`); language rules ship as `<lang>-rules` skills under `.agents/skills/`. |
11934
11965
  | Tracked hook events | Upstream canonical (codex-rs `HookEventName` enum): `PreToolUse`, `PostToolUse`, `PermissionRequest`, `PreCompact`, `PostCompact`, `SessionStart`, `UserPromptSubmit`, `SubagentStart`, `SubagentStop`, `Stop` (10 events). We wire all 10 to shared toolkit hook scripts, mirroring the Claude Code mapping in `app/hooks.json`. |
@@ -11942,12 +11973,13 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11942
11973
  |-------|-------|
11943
11974
  | ID | `opencode` |
11944
11975
  | Docs | https://opencode.ai/docs |
11945
- | Release notes | https://github.com/sst/opencode/releases |
11946
- | Config paths | `opencode.json`, `.opencode/agents/*.md`, `.opencode/commands/*.md`, `.opencode/plugins/*`, `.opencode/skills/*/SKILL.md` (v1.14+), `AGENTS.md`, `.claude/skills/*/SKILL.md` (fallback discovery) |
11976
+ | Release notes | https://github.com/sst/opencode/releases (redirects to anomalyco/opencode) |
11977
+ | Config paths | `opencode.json`, `.opencode/agents/*.md`, `.opencode/commands/*.md`, `.opencode/plugins/*`, `.opencode/skills/*/SKILL.md` (v1.14+), `AGENTS.md`; skill fallback discovery: `.claude/skills/`, `.agents/skills/`, `~/.config/opencode/skills/`, `~/.claude/skills/`, `~/.agents/skills/` |
11947
11978
  | Our generators | `scripts/generate_opencode.py`, `scripts/generate_opencode_agents.py`, `scripts/generate_opencode_commands.py`, `scripts/generate_opencode_json.py`, `scripts/generate_opencode_plugin.py` |
11948
11979
  | Tracked plugin events | `session.created`, `session.compacted`, `session.deleted`, `message.updated`, `tool.execute.before`, `tool.execute.after`, `permission.asked`, `command.executed` |
11949
11980
  | Other capabilities | `opencode.json` config, primary + subagent modes, `@`-mention subagents, `/`-invocation commands, MCP (local + remote), plugin hooks in JS/TS, native `SKILL.md` discovery with Claude-compatible fallback, `permission.skill.*` matrix |
11950
11981
  | Version probe | `opencode --version` |
11982
+ | Watch item | v1.16.0 (2026-06-05) ships an experimental v2 skill registry (flat-file skills, `slash` frontmatter key) — undocumented as of 2026-06-09; re-check next sync before touching `generate_opencode*.py`. |
11951
11983
 
11952
11984
  ---
11953
11985
 
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.6.0",
2
+ "version": "4.8.0",
3
3
  "components": {
4
4
  "agents": {
5
5
  "description": "44 specialized agents (orchestrator, backend, frontend, security, devops, etc.)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@softspark/ai-toolkit",
3
- "version": "4.6.0",
3
+ "version": "4.8.0",
4
4
  "description": "AI coding toolkit: 107 skills, 44 agents, 12-editor write-through (Claude, Cursor, Windsurf, Copilot, Gemini, Cline, Roo, Aider, Augment, Antigravity, Codex, opencode), machine-enforced safety constitution, SARIF audit, signed npm provenance.",
5
5
  "keywords": [
6
6
  "claude",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "description": "Authoritative registry of tools ai-toolkit integrates with. Consumed by scripts/ecosystem_doctor.py to detect upstream doc/version drift.",
4
- "last_updated": "2026-06-05",
4
+ "last_updated": "2026-06-10",
5
5
  "tools": [
6
6
  {
7
7
  "id": "claude-code",
@@ -14,8 +14,10 @@
14
14
  },
15
15
  "config_paths": [
16
16
  "~/.claude/settings.json",
17
+ ".claude/settings.json",
17
18
  ".claude/settings.local.json",
18
19
  "CLAUDE.md",
20
+ ".claude/rules/*.md",
19
21
  ".claude/agents/*.md",
20
22
  ".claude/skills/*/SKILL.md",
21
23
  "~/.claude/themes/*.json"
@@ -60,7 +62,8 @@
60
62
  "hook handler: command",
61
63
  "hook handler: prompt",
62
64
  "hook handler: agent",
63
- "hook handler: mcp_tool"
65
+ "hook handler: mcp_tool",
66
+ "hook handler: http"
64
67
  ],
65
68
  "version_probe": {
66
69
  "kind": "command",
@@ -79,7 +82,6 @@
79
82
  "config_paths": [
80
83
  ".cursorrules",
81
84
  ".cursor/rules/*.mdc",
82
- ".cursor/rules/*.md",
83
85
  "AGENTS.md",
84
86
  ".cursor/mcp.json",
85
87
  "~/.cursor/mcp.json",
@@ -92,6 +94,11 @@
92
94
  ".codex/skills/*/SKILL.md",
93
95
  "~/.codex/skills/*/SKILL.md",
94
96
  ".cursor/agents/*.md",
97
+ "~/.cursor/agents/*.md",
98
+ ".claude/agents/*.md",
99
+ "~/.claude/agents/*.md",
100
+ ".codex/agents/*.md",
101
+ "~/.codex/agents/*.md",
95
102
  ".cursor/hooks.json"
96
103
  ],
97
104
  "our_generators": [
@@ -125,6 +132,13 @@
125
132
  "changelog": "https://docs.devin.ai/desktop/changelog"
126
133
  },
127
134
  "config_paths": [
135
+ ".devin/rules/*.md",
136
+ ".devin/workflows/*.md",
137
+ ".devin/skills/*/SKILL.md",
138
+ ".devin/hooks.v1.json",
139
+ ".devin/config.json",
140
+ ".devin/config.local.json",
141
+ "~/.config/devin/config.json",
128
142
  ".windsurfrules",
129
143
  ".windsurf/rules/*.md",
130
144
  ".windsurf/workflows/*.md",
@@ -138,8 +152,11 @@
138
152
  "our_generators": [
139
153
  "scripts/generate_windsurf.py",
140
154
  "scripts/generate_windsurf_rules.py",
141
- "scripts/generate_windsurf_skills.py"
155
+ "scripts/generate_windsurf_skills.py",
156
+ "scripts/generate_windsurf_hooks.py",
157
+ "scripts/generate_devin_hooks.py"
142
158
  ],
159
+ "status_note": "Windsurf rebranded to Devin Desktop on 2026-06-02. .devin/ is the primary read+write workspace tree; .windsurfrules, .windsurf/* and ~/.codeium/windsurf/* are legacy read-only fallbacks. Our generators dual-emit .devin/* + .windsurf/*. HOOKS MIGRATION (done): Cascade agent is available only through 2026-07-01 (Devin Local default since 2026-06-02), and the Cascade-scoped .windsurf/hooks.json (generate_windsurf_hooks.py, agent_action_name/tool_info format) dies with it — Devin CLI/Local do NOT read it as a fallback. generate_devin_hooks.py now emits .devin/hooks.v1.json in the Claude-compatible hook format Devin CLI uses (docs.devin.ai/cli/extensibility/hooks): Claude-style events (PreToolUse/PostToolUse/UserPromptSubmit/Stop/SessionStart) with matchers on Devin tool names (read/edit/exec/mcp__*), flat {decision,reason} block contract + exit 2. Globally-installed users ALSO inherit ~/.claude/settings.json hooks automatically (Devin read_config_from.claude defaults on). Both hook generators run at profile=full; drop generate_windsurf_hooks.py in the first release after 2026-07-01. Devin CLI ('Devin for Terminal', launched 2026-04-29) shares the Devin Local harness, reads AGENTS.md and the same SKILL.md standard; not yet tracked as a separate registry entry.",
143
160
  "capability_markers": [
144
161
  "Cascade",
145
162
  "windsurfrules",
@@ -204,6 +221,7 @@
204
221
  ".gemini/skills/*/SKILL.md",
205
222
  ".agents/skills/*/SKILL.md",
206
223
  "~/.gemini/skills/*/SKILL.md",
224
+ "~/.agents/skills/*/SKILL.md",
207
225
  ".gemini/extensions/gemini-extension.json"
208
226
  ],
209
227
  "our_generators": [
@@ -216,9 +234,13 @@
216
234
  "settings.json",
217
235
  "BeforeTool",
218
236
  "AfterTool",
237
+ "BeforeToolSelection",
219
238
  "BeforeAgent",
220
239
  "AfterAgent",
221
240
  "BeforeModel",
241
+ "AfterModel",
242
+ "Notification",
243
+ "PreCompress",
222
244
  "SessionStart",
223
245
  "SessionEnd",
224
246
  "SKILL.md",
@@ -246,11 +268,19 @@
246
268
  ".clinerules/workflows/*.md",
247
269
  ".clinerules/skills/*/SKILL.md",
248
270
  ".clinerules/hooks/",
271
+ ".cline/rules/*.md",
272
+ ".cline/hooks/",
273
+ ".cline/plugins/",
249
274
  ".cline/skills/*/SKILL.md",
275
+ "~/.cline/rules/",
276
+ "~/.cline/hooks/",
277
+ "~/.cline/plugins/",
250
278
  "~/.cline/skills/*/SKILL.md",
251
279
  "~/Documents/Cline/Rules/Hooks/",
252
280
  "~/.cline/data/settings/cline_mcp_settings.json",
253
- ".claude/skills/*/SKILL.md"
281
+ ".claude/skills/*/SKILL.md",
282
+ "AGENTS.md",
283
+ "~/.agents/AGENTS.md"
254
284
  ],
255
285
  "our_generators": [
256
286
  "scripts/generate_cline.py",
@@ -267,7 +297,9 @@
267
297
  "hooks",
268
298
  "skills",
269
299
  "subagents",
270
- "conditional rules"
300
+ "conditional rules",
301
+ "AGENTS.md",
302
+ "plugins"
271
303
  ],
272
304
  "version_probe": null
273
305
  },
@@ -357,11 +389,16 @@
357
389
  },
358
390
  "config_paths": [
359
391
  ".augment/rules/*.md",
360
- ".augment/guidelines.md",
392
+ ".augment-guidelines",
361
393
  ".augment/agents/*.md",
362
394
  ".augment/commands/*.md",
363
395
  ".augment/skills/*/SKILL.md",
396
+ ".augment/settings.json",
397
+ ".augment/settings.local.json",
398
+ ".claude/skills/*/SKILL.md",
399
+ ".agents/skills/*/SKILL.md",
364
400
  "~/.augment/rules/*.md",
401
+ "~/.augment/user-guidelines.md",
365
402
  "~/.augment/agents/*.md",
366
403
  "~/.augment/commands/*.md",
367
404
  "~/.augment/settings.json",
@@ -369,7 +406,11 @@
369
406
  ],
370
407
  "our_generators": [
371
408
  "scripts/generate_augment.py",
372
- "scripts/generate_augment_rules.py"
409
+ "scripts/generate_augment_rules.py",
410
+ "scripts/generate_augment_agents.py",
411
+ "scripts/generate_augment_commands.py",
412
+ "scripts/generate_augment_skills.py",
413
+ "scripts/generate_augment_hooks.py"
373
414
  ],
374
415
  "capability_markers": [
375
416
  ".augment",
@@ -388,6 +429,7 @@
388
429
  "SessionStart",
389
430
  "SessionEnd",
390
431
  "Stop",
432
+ "Notification",
391
433
  "ACP Mode"
392
434
  ],
393
435
  "version_probe": null
@@ -404,6 +446,9 @@
404
446
  "config_paths": [
405
447
  ".agents/rules/*.md",
406
448
  ".agents/workflows/*.md",
449
+ ".agents/skills/*/SKILL.md",
450
+ ".agents/hooks.json",
451
+ ".agents/mcp_config.json",
407
452
  ".agent/rules/*.md",
408
453
  ".agent/workflows/*.md",
409
454
  ".agent/skills/*/SKILL.md",
@@ -413,6 +458,7 @@
413
458
  "our_generators": [
414
459
  "scripts/generate_antigravity.py"
415
460
  ],
461
+ "status_note": "Antigravity CLI (GA 2026-05-19) reads workspace skills from .agents/skills/ (plural); the IDE still uses .agent/skills/ (singular) — our generator dual-emits the skill pointer to both. CLI hooks live in .agents/hooks.json with Claude-style event names (PreToolUse, not BeforeTool) and a JSON stdin/stdout decision contract. CLI MCP config is .agents/mcp_config.json with a required serverUrl field (url/httpUrl rejected silently); the GLOBAL MCP config path is reported inconsistently across sources (~/.gemini/antigravity-cli/ vs ~/.gemini/config/), so only the workspace path is registered until verified via agy inspect. Official docs are fully JS-rendered — the doctor is blind to them; verify changes manually each sync.",
416
462
  "capability_markers": [
417
463
  "Antigravity",
418
464
  "agent manager",
@@ -421,6 +467,7 @@
421
467
  "workflows",
422
468
  "rules",
423
469
  "skills",
470
+ "hooks",
424
471
  "AGENTS.md",
425
472
  "GEMINI.md",
426
473
  "agent permissions"
@@ -440,6 +487,7 @@
440
487
  "AGENTS.md",
441
488
  ".agents/skills/*/SKILL.md",
442
489
  ".codex/hooks.json",
490
+ ".codex/config.toml",
443
491
  "~/.codex/config.toml"
444
492
  ],
445
493
  "our_generators": [
@@ -489,8 +537,13 @@
489
537
  ".opencode/plugins/*",
490
538
  ".opencode/skills/*/SKILL.md",
491
539
  "AGENTS.md",
492
- ".claude/skills/*/SKILL.md"
540
+ ".claude/skills/*/SKILL.md",
541
+ ".agents/skills/*/SKILL.md",
542
+ "~/.config/opencode/skills/*/SKILL.md",
543
+ "~/.claude/skills/*/SKILL.md",
544
+ "~/.agents/skills/*/SKILL.md"
493
545
  ],
546
+ "status_note": "opencode v1.16.0 (2026-06-05) ships an experimental v2 skill registry with flat-file skills and a 'slash' frontmatter key; undocumented as of 2026-06-09. Watch item: re-check next sync whether the v2 format reaches the documented SKILL.md spec before touching generate_opencode*.py. Note sst/opencode redirects to anomalyco/opencode.",
494
547
  "our_generators": [
495
548
  "scripts/generate_opencode.py",
496
549
  "scripts/generate_opencode_agents.py",
@@ -11,19 +11,19 @@ Antigravity reads rules from:
11
11
  * ``.agents/rules/*.md`` — per-category rule files (this generator)
12
12
  * ``.agents/workflows/*.md`` — workflow templates (this generator)
13
13
 
14
- Antigravity also supports the Agent Skills standard via ``.agent/skills/
15
- <skill-name>/SKILL.md`` (the changelog entry "Agent Skills now available in
16
- Antigravity" confirms this surface). We do not duplicate our full skill
17
- catalogue into ``.agent/skills/``; instead we emit a single pointer skill
18
- that teaches Antigravity to look up the real catalogue in
19
- ``~/.softspark/ai-toolkit/app/skills/`` (global install) or
14
+ Antigravity also supports the Agent Skills standard. The IDE reads
15
+ ``.agent/skills/<skill-name>/SKILL.md`` (singular), while the Antigravity CLI
16
+ (GA 2026-05-19) reads ``.agents/skills/`` (plural) so the skill pointer is
17
+ dual-emitted to both. We do not duplicate our full skill catalogue; instead we
18
+ emit a single pointer skill that teaches Antigravity to look up the real
19
+ catalogue in ``~/.softspark/ai-toolkit/app/skills/`` (global install) or
20
20
  ``.claude/skills/`` (local install).
21
21
 
22
22
  Usage:
23
23
  python3 scripts/generate_antigravity.py [target-dir]
24
24
 
25
25
  Writes rules/workflows to target-dir/.agents/{rules,workflows}/ and the skill
26
- pointer to target-dir/.agent/skills/ (skills location is unchanged upstream).
26
+ pointer to target-dir/.agent/skills/ (IDE) + target-dir/.agents/skills/ (CLI).
27
27
  """
28
28
  from __future__ import annotations
29
29
 
@@ -82,11 +82,17 @@ def _pointer_skill_md() -> str:
82
82
 
83
83
 
84
84
  def _write_skill_pointer(target_dir: Path) -> None:
85
- """Write the pointer SKILL.md under .agent/skills/<name>/."""
86
- skill_dir = target_dir / ".agent" / "skills" / POINTER_SKILL_NAME
87
- skill_dir.mkdir(parents=True, exist_ok=True)
88
- (skill_dir / "SKILL.md").write_text(_pointer_skill_md(), encoding="utf-8")
89
- print(f" Generated: .agent/skills/{POINTER_SKILL_NAME}/SKILL.md")
85
+ """Write the pointer SKILL.md for both the IDE and the CLI surface.
86
+
87
+ The IDE reads ``.agent/skills/`` (singular); the Antigravity CLI reads
88
+ ``.agents/skills/`` (plural).
89
+ """
90
+ content = _pointer_skill_md()
91
+ for tree in (".agent", ".agents"):
92
+ skill_dir = target_dir / tree / "skills" / POINTER_SKILL_NAME
93
+ skill_dir.mkdir(parents=True, exist_ok=True)
94
+ (skill_dir / "SKILL.md").write_text(content, encoding="utf-8")
95
+ print(f" Generated: {tree}/skills/{POINTER_SKILL_NAME}/SKILL.md")
90
96
 
91
97
 
92
98
  # ---------------------------------------------------------------------------
@@ -97,10 +103,11 @@ def generate(target_dir: Path, *,
97
103
  language_modules: list[str] | None = None,
98
104
  rules_dir: Path | None = None,
99
105
  emit_skill_pointer: bool = True) -> None:
100
- """Write ``.agents/rules/``, ``.agents/workflows/``, and ``.agent/skills/``.
106
+ """Write ``.agents/{rules,workflows}/`` and the dual skill pointers.
101
107
 
102
- ``emit_skill_pointer`` controls whether the pointer SKILL.md is written.
103
- Set to ``False`` if you manage ``.agent/skills/`` yourself.
108
+ ``emit_skill_pointer`` controls whether the pointer SKILL.md is written
109
+ to ``.agent/skills/`` (IDE) and ``.agents/skills/`` (CLI). Set to
110
+ ``False`` if you manage those directories yourself.
104
111
  """
105
112
  rules = dict(STANDARD_RULES)
106
113
  rules.update(build_language_rules(language_modules))
@@ -1,9 +1,10 @@
1
1
  #!/usr/bin/env python3
2
2
  """Generate ``.cursor/rules/*.mdc`` files for Cursor IDE.
3
3
 
4
- Cursor reads rules from ``.cursor/rules/`` (since Cursor 0.45). Both ``.mdc``
5
- and plain ``.md`` extensions are accepted; we emit ``.mdc`` because only it
6
- carries the full YAML frontmatter used to control activation:
4
+ Cursor reads rules from ``.cursor/rules/`` (since Cursor 0.45). Only ``.mdc``
5
+ files are read — plain ``.md`` files in ``.cursor/rules/`` are ignored by the
6
+ rules system (per cursor.com/docs/context/rules). ``.mdc`` carries the YAML
7
+ frontmatter used to control activation:
7
8
 
8
9
  - ``alwaysApply: true`` — always in context
9
10
  - ``globs: ["**/*.ts"]`` — auto-attached for matching files