@softspark/ai-toolkit 4.10.0 → 4.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,20 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v4.10.1 — Copilot AGENTS.md install + Claude KB-first rule (2026-06-23)
11
+
12
+ Patch release. Fixes two governance regressions found in the editor-update audit: Copilot installs now emit the root `AGENTS.md` surface documented in the registry, and Claude Code receives the KB-first rule in `CLAUDE.md`, which it actually reads. Test count: 1195 → 1198.
13
+
14
+ ### Fixed
15
+ - **GitHub Copilot local install now emits root `AGENTS.md`.** `ai-toolkit install --local --editors copilot` writes the generated agent catalog into a `TOOLKIT:copilot-agents` section without clobbering existing Codex/opencode `TOOLKIT:ai-toolkit` sections or user-authored content. Dry-run output and tests now cover the `.github/copilot-instructions.md + AGENTS.md` contract.
16
+ - **Claude Code KB-first rule restored in the right instruction file.** `CLAUDE.md` now explicitly requires `smart_query()` or `hybrid_search_kb()` before technical/project answers; the prior generated `AGENTS.md` placement was not sufficient for Claude Code runtime enforcement.
17
+ - **Codex PostToolUse no longer emits unsupported `suppressOutput`.** `loop-guard.sh` no longer forces `AI_TOOLKIT_HOOK_FORMAT=json`; under Codex it stays quiet/plain unless the generator explicitly opts into a supported JSON schema.
18
+ - **Npm package excludes local Claude session artifacts.** `package.json` now excludes `app/**/.claude/**` so ignored maintainer-local session files cannot leak into `npm pack`.
19
+
20
+ ### Changed
21
+ - **Editor registry/docs aligned with implementation.** README, architecture overview, and the supported-tools registry now describe Copilot's root `AGENTS.md` emission consistently.
22
+ - **Ecosystem doctor baseline refreshed.** Snapshot updated for upstream Claude Code and Gemini CLI documentation content hash drift; no generator changes were required.
23
+
10
24
  ## v4.10.0 — Per-repo session storage outside the repo + drop dead session-context hook (2026-06-17)
11
25
 
12
26
  Minor release. Session lifecycle hooks stop writing auto-generated files into each project's `.claude/` directory and store them per-repo under `~/.softspark/ai-toolkit/`. The dead `session-context.sh` hook (write-only, no consumer) is removed across all editor generators. Test count: 1197 → 1195.
package/README.md CHANGED
@@ -6,16 +6,18 @@
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
7
  [![Skills](https://img.shields.io/badge/skills-108-brightgreen)](app/skills/)
8
8
  [![Agents](https://img.shields.io/badge/agents-44-blue)](app/agents/)
9
- [![Tests](https://img.shields.io/badge/tests-1195%20passing-success)](tests/)
9
+ [![Tests](https://img.shields.io/badge/tests-1198%20passing-success)](tests/)
10
10
 
11
- ## What's New in v4.10.0
11
+ ## What's New in v4.10.1
12
12
 
13
- v4.10.0 gets auto-generated session files out of your repositories and removes a dead lifecycle hook.
13
+ v4.10.1 fixes editor-governance gaps found in the release audit.
14
14
 
15
- - **Per-repo session storage outside the repo**: `save-session.sh`, `session-end.sh`, `session-start.sh`, and `pre-compact.sh` now keep `session-context.md`, `session-end.md`, checkpoints, and `decisions.md` under `~/.softspark/ai-toolkit/sessions/<repo-key>/` instead of each project's `.claude/` no more generated files piling up in every repo. Keyed per repo (git root with `/` → `-`) so projects stay isolated.
16
- - **No silent migration**: the new store starts fresh; pre-existing in-repo `.claude/session-*.md` are left for you to delete.
17
- - **Dropped the dead `session-context.sh` hook**: it wrote a `${SESSION}.json` environment snapshot nobody ever read (Constitution Art. VI.1). Removed across `app/hooks.json` and all 7 editor hook generators (cursor, windsurf, codex, devin, augment, gemini, opencode).
18
- - **Test count**: 1197 1195.
15
+ - **Copilot local installs now emit root `AGENTS.md`**: `ai-toolkit install --local --editors copilot` writes the generated agent catalog into a `TOOLKIT:copilot-agents` section while preserving existing Codex/opencode sections and user text.
16
+ - **Claude Code KB-first enforcement restored**: `CLAUDE.md` now carries the mandatory `smart_query()` / `hybrid_search_kb()` rule before technical/project answers, instead of relying on generated `AGENTS.md`.
17
+ - **Codex PostToolUse hook output fixed**: `loop-guard.sh` no longer forces Claude-style JSON with `suppressOutput` under quiet Codex hooks.
18
+ - **Release packaging hardened**: local `.claude` session artifacts under `app/` are excluded from `npm pack`, even if they exist in a maintainer checkout.
19
+ - **Docs and ecosystem baseline refreshed**: README, registry, and architecture docs now match the Copilot implementation; ecosystem-doctor snapshot is refreshed for upstream Claude/Gemini docs hash drift.
20
+ - **Test count**: 1195 → 1198.
19
21
 
20
22
  See [CHANGELOG.md](CHANGELOG.md) for full history.
21
23
 
@@ -104,7 +106,7 @@ See [CLI Reference](kb/reference/cli-reference.md) for all commands and options.
104
106
  | Cursor | `.cursor/rules/*.mdc` + `.cursor/mcp.json` + `.cursor/skills/*` | ✅ | project (`~/.cursor/mcp.json` for MCP only) |
105
107
  | Windsurf (Devin Desktop) | `~/.codeium/.../global_rules.md` + `~/.codeium/windsurf/skills/*` + `.devin/rules/*.md` + `.windsurf/rules/*.md` (legacy) | ✅ | global + project |
106
108
  | Gemini CLI | `~/.gemini/GEMINI.md` | ✅ | global |
107
- | GitHub Copilot | `.github/copilot-instructions.md` | — | project |
109
+ | GitHub Copilot | `.github/copilot-instructions.md` + `.github/instructions/*` + `.github/prompts/*` + `AGENTS.md` | — | project |
108
110
  | Cline | `~/Documents/Cline/Rules/*.md` + `~/.cline/skills/*` + `.clinerules/*.md` | — | global + project |
109
111
  | Roo Code | `~/.roo/rules/*.md` + `.roomodes` + `.roo/rules/*.md` | — | global rules + project |
110
112
  | Aider | `~/.aider.conf.yml` + `.aider.conf.yml` + `CONVENTIONS.md` | — | global + project |
@@ -148,7 +150,7 @@ ai-toolkit/
148
150
  │ └── ARCHITECTURE.md # Full system design
149
151
  ├── kb/ # Reference docs, procedures, plans
150
152
  ├── scripts/ # Validation, install, evaluation scripts
151
- ├── tests/ # Bats test suite (1195 tests)
153
+ ├── tests/ # Bats test suite (1198 tests)
152
154
  └── CHANGELOG.md
153
155
  ```
154
156
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ai-toolkit",
3
3
  "description": "Professional-grade Claude Code toolkit with persona presets, skill security auditor, expanded lifecycle hooks, experimental opt-in plugin packs, benchmark harvesting, and multi-tool support.",
4
- "version": "4.10.0",
4
+ "version": "4.10.1",
5
5
  "author": {
6
6
  "name": "SoftSpark",
7
7
  "url": "https://github.com/softspark"
@@ -53,7 +53,6 @@ fi
53
53
  COUNT=$(grep -cxF "$HASH" "$LOG" 2>/dev/null | tr -d ' ')
54
54
  [ -z "$COUNT" ] && COUNT=0
55
55
  if [ "$COUNT" -ge "$THRESHOLD" ]; then
56
- export AI_TOOLKIT_HOOK_FORMAT=json
57
56
  hook_emit_context "PostToolUse" \
58
57
  "Loop guard: the same ${TOOL_NAME} action has repeated ${COUNT}x within the last ${WINDOW} steps. If you are not making progress, stop and reassess — try a different approach or ask the user — instead of retrying the identical action."
59
58
  fi
@@ -1,5 +1,5 @@
1
1
  {
2
- "last_run": "2026-06-09T22:04:06Z",
2
+ "last_run": "2026-06-23T07:06:46Z",
3
3
  "schema_version": 1,
4
4
  "tools": {
5
5
  "aider": {
@@ -24,7 +24,7 @@
24
24
  }
25
25
  },
26
26
  "augment": {
27
- "docs_hash": "f4c5995e8333a4d5",
27
+ "docs_hash": "a0c51061febc16c4",
28
28
  "headings": [
29
29
  "Admin",
30
30
  "Auggie CLI",
@@ -66,7 +66,7 @@
66
66
  }
67
67
  },
68
68
  "claude-code": {
69
- "docs_hash": "e6f6b4d9d4057cb0",
69
+ "docs_hash": "c20e5688ed230a66",
70
70
  "headings": [
71
71
  "Core concepts",
72
72
  "Documentation Index",
@@ -122,10 +122,10 @@
122
122
  "slash command": true,
123
123
  "sub-agent": true
124
124
  },
125
- "version": "2.1.170 (Claude Code)"
125
+ "version": "2.1.186 (Claude Code)"
126
126
  },
127
127
  "cline": {
128
- "docs_hash": "806fa530c90e227d",
128
+ "docs_hash": "858fa542e2aacde5",
129
129
  "headings": [
130
130
  "API Reference",
131
131
  "Best Practices",
@@ -168,7 +168,7 @@
168
168
  }
169
169
  },
170
170
  "codex-cli": {
171
- "docs_hash": "1b4a56a8e918d721",
171
+ "docs_hash": "eeb0e17a839b09bd",
172
172
  "headings": [
173
173
  "API",
174
174
  "API Reference",
@@ -235,10 +235,10 @@
235
235
  "mcp_servers": false,
236
236
  "sandbox": true
237
237
  },
238
- "version": "codex-cli 0.138.0"
238
+ "version": "codex-cli 0.142.0"
239
239
  },
240
240
  "cursor": {
241
- "docs_hash": "b68e4adf6e21f543",
241
+ "docs_hash": "86b6d48e8ab40d90",
242
242
  "headings": [],
243
243
  "markers": {
244
244
  ".cursor/rules": false,
@@ -254,7 +254,7 @@
254
254
  }
255
255
  },
256
256
  "gemini-cli": {
257
- "docs_hash": "a0e9a213229063c8",
257
+ "docs_hash": "c3ba6d09d810f9c3",
258
258
  "headings": [
259
259
  "Breadcrumbs",
260
260
  "Directory actions",
@@ -296,7 +296,7 @@
296
296
  }
297
297
  },
298
298
  "github-copilot": {
299
- "docs_hash": "ead818d74ead1f2e",
299
+ "docs_hash": "df7c22e121dbb3d1",
300
300
  "headings": [
301
301
  "About Copilot auto model selection",
302
302
  "About Copilot automations",
@@ -317,6 +317,7 @@
317
317
  "Still need help?"
318
318
  ],
319
319
  "markers": {
320
+ "AGENTS.md": false,
320
321
  "Copilot Chat": true,
321
322
  "Copilot Workspace": false,
322
323
  "Copilot cloud agent": true,
@@ -329,7 +330,7 @@
329
330
  }
330
331
  },
331
332
  "google-antigravity": {
332
- "docs_hash": "5ea5426c4445e746",
333
+ "docs_hash": "e6c90b9d937dd9f0",
333
334
  "headings": [],
334
335
  "markers": {
335
336
  "AGENTS.md": false,
@@ -346,7 +347,7 @@
346
347
  }
347
348
  },
348
349
  "opencode": {
349
- "docs_hash": "f546c8b741790cb8",
350
+ "docs_hash": "302de3ac69940747",
350
351
  "headings": [
351
352
  "Add features",
352
353
  "Ask questions",
@@ -406,8 +407,9 @@
406
407
  }
407
408
  },
408
409
  "windsurf": {
409
- "docs_hash": "91034c064d9f8290",
410
+ "docs_hash": "cdd657d4d684c68a",
410
411
  "headings": [
412
+ "Accounts",
411
413
  "Advanced",
412
414
  "Agent Command Center",
413
415
  "App Deploys",
@@ -420,15 +422,15 @@
420
422
  "On this page",
421
423
  "Recommended Plugins",
422
424
  "Releases",
425
+ "Security",
423
426
  "Terminal",
424
427
  "Usage",
425
428
  "Welcome to Devin Desktop",
426
429
  "Windsurf Plugins",
427
430
  "Workflows",
428
- "\u200b1. Select setup flow",
429
- "\u200b2. Choose editor theme",
430
- "\u200b3. Sign up / Log in",
431
- "\u200b4. Let\u2019s Surf!",
431
+ "\u200b1. Select your preferred theme",
432
+ "\u200b2. Log In / Sign Up",
433
+ "\u200b3. Start Building with Devin!",
432
434
  "\u200bCustom App Icons (beta)",
433
435
  "\u200bDevin Desktop Next",
434
436
  "\u200bForgot to Import VS Code Configurations?",
@@ -436,8 +438,7 @@
436
438
  "\u200bOnboarding",
437
439
  "\u200bSet Up",
438
440
  "\u200bThings to Try",
439
- "\u200bUninstall Devin Desktop",
440
- "\u200bUpdate Devin Desktop"
441
+ "\u200bUninstall Devin Desktop"
441
442
  ],
442
443
  "markers": {
443
444
  "AGENTS.md": true,
@@ -54,7 +54,7 @@ ai-toolkit/
54
54
  generate_agents_md.py # Regenerates AGENTS.md
55
55
  generate_cursor_rules.py # Generates .cursorrules (sources _common.py)
56
56
  generate_windsurf.py # Generates .windsurfrules (sources _common.py)
57
- generate_copilot.py # Generates .github/copilot-instructions.md (sources _common.py)
57
+ generate_copilot.py # Generates Copilot .github/* surfaces; install also injects AGENTS.md
58
58
  generate_gemini.py # Generates GEMINI.md (sources _common.py)
59
59
  generate_cline.py # Generates .clinerules (sources _common.py)
60
60
  generate_roo_modes.py # Generates .roomodes
@@ -109,7 +109,7 @@ Machine (global) Project (local)
109
109
  - `--editors cursor,aider` — install only selected editors
110
110
  - (no flag) — auto-detect from existing project files; `update --local` picks up whatever editors already have configs
111
111
 
112
- 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`.
112
+ Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.devin/rules/*.md` + `.windsurf/rules/*.md` (dual-emit since the Devin Desktop rebrand), `.github/instructions/*.instructions.md` + `.github/prompts/*.prompt.md` + root `AGENTS.md` for Copilot agent instructions, `.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`.
113
113
 
114
114
  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`).
115
115
 
@@ -116,16 +116,22 @@ by default because Codex currently renders `additionalContext` as visible hook
116
116
  context in the TUI. This keeps prompt-submit output quiet while preserving hook
117
117
  side effects and blocking decisions such as search-first Stop enforcement.
118
118
 
119
- Codex `UserPromptSubmit` JSON output is event-specific. When emitting context,
120
- the hook must include the event name alongside the context:
119
+ Codex hooks must not force Claude-only JSON output fields such as
120
+ `suppressOutput`. In particular, advisory `PostToolUse` hooks like
121
+ `loop-guard.sh` run in quiet/plain mode under Codex; they keep side effects but
122
+ do not emit hidden Claude-style context unless a future Codex runtime explicitly
123
+ supports that schema.
124
+
125
+ If a future Codex runtime enables JSON context output for `UserPromptSubmit`,
126
+ the output must be event-specific and include the event name alongside the
127
+ context:
121
128
 
122
129
  ```json
123
130
  {
124
131
  "hookSpecificOutput": {
125
132
  "hookEventName": "UserPromptSubmit",
126
133
  "additionalContext": "..."
127
- },
128
- "suppressOutput": true
134
+ }
129
135
  }
130
136
  ```
131
137
 
@@ -3,9 +3,9 @@ title: "Supported Tools Registry"
3
3
  category: reference
4
4
  service: ai-toolkit
5
5
  tags: [editors, platforms, generators, integration, ecosystem]
6
- version: "1.6.0"
6
+ version: "1.7.0"
7
7
  created: "2026-04-23"
8
- last_updated: "2026-06-10"
8
+ last_updated: "2026-06-23"
9
9
  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."
10
10
  ---
11
11
 
@@ -28,7 +28,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
28
28
  | ID | `claude-code` |
29
29
  | Docs | https://code.claude.com/docs (platform.claude.com/docs 307-redirects here) |
30
30
  | Release notes | https://github.com/anthropics/claude-code/releases |
31
- | Changelog | https://code.claude.com/docs/en/changelog (lists current 2.1.170) |
31
+ | Changelog | https://code.claude.com/docs/en/changelog (lists current 2.1.186) |
32
32
  | 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+) |
33
33
  | Our generators | — (Claude Code is the primary target; toolkit content ships directly as `.md` files and `settings.json` merges) |
34
34
  | 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` |
@@ -79,8 +79,8 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
79
79
  | Release notes | https://github.blog/changelog/label/copilot/ |
80
80
  | Config paths | `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md`, `.github/prompts/*.prompt.md`, `AGENTS.md` |
81
81
  | Our generators | `scripts/generate_copilot.py` |
82
- | Tracked capabilities | `copilot-instructions.md`, Copilot Chat, Copilot Workspace, Copilot cloud agent, `applyTo`, custom agents, prompt files, `instructions.md`, MCP |
83
- | Tier notes | Custom agents (`.github/agents/*.agent.md`) and repo-level MCP config are Pro/Pro+/Business/Enterprise only and intentionally not integrated (class C per ecosystem-sync SOP). |
82
+ | Tracked capabilities | `copilot-instructions.md`, Copilot Chat, Copilot Workspace, Copilot cloud agent, `applyTo`, custom agents, prompt files, `instructions.md`, `AGENTS.md`, MCP |
83
+ | Tier notes | Custom agents (`.github/agents/*.agent.md`) and repo-level MCP config are Pro/Pro+/Business/Enterprise only and intentionally not integrated (class C per ecosystem-sync SOP). Copilot code review reads the nearest `AGENTS.md` automatically since the 2026-06-18 GA (all tiers); `ai-toolkit install --local --editors copilot` injects a `TOOLKIT:copilot-agents` section generated from `generate_agents_md.py` without clobbering Codex/opencode sections in the same file. The 4000-char cap on `copilot-instructions.md` / `*.instructions.md` was also removed (2026-06-12). |
84
84
 
85
85
  ### Gemini CLI
86
86
 
@@ -93,7 +93,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
93
93
  | 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) |
94
94
  | 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) |
95
95
  | Version probe | `gemini --version` |
96
- | 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. |
96
+ | Latest upstream | v0.47.0 (2026-06-18). NOTE: Gemini CLI dropped free/paid individual tiers on 2026-06-18 in favor of Antigravity CLI (we ship `generate_antigravity.py`); enterprise Code Assist and paid API keys keep Gemini CLI, so the integration stays. The 11 hook events are unchanged. v0.48 preview migrates the `coreTools` setting to `tools.core` (a tool-allowlist key we do not emit, so no generator change). |
97
97
 
98
98
  ### Cline
99
99
 
@@ -165,7 +165,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
165
165
  | Field | Value |
166
166
  |-------|-------|
167
167
  | ID | `codex-cli` |
168
- | 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) |
168
+ | 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.142.0, 2026-06) |
169
169
  | Release notes | https://github.com/openai/codex/releases |
170
170
  | 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` |
171
171
  | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`) |
@@ -187,7 +187,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
187
187
  | Tracked plugin events | `session.created`, `session.compacted`, `session.deleted`, `message.updated`, `tool.execute.before`, `tool.execute.after`, `permission.asked`, `command.executed` |
188
188
  | 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 |
189
189
  | Version probe | `opencode --version` |
190
- | 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`. |
190
+ | Watch item | v1.16.0 (2026-06-05) shipped an experimental v2 skill registry (flat-file skills, `slash` frontmatter key). As of the 2026-06-23 sync (upstream v1.17.9) it is still undocumented and not stabilized: the skills docs show only the nested `SKILL.md` layout with no `slash` key, so `generate_opencode*.py` is unchanged. Re-check next sync. |
191
191
 
192
192
  ---
193
193
 
package/llms-full.txt CHANGED
@@ -6286,7 +6286,7 @@ ai-toolkit/
6286
6286
  generate_agents_md.py # Regenerates AGENTS.md
6287
6287
  generate_cursor_rules.py # Generates .cursorrules (sources _common.py)
6288
6288
  generate_windsurf.py # Generates .windsurfrules (sources _common.py)
6289
- generate_copilot.py # Generates .github/copilot-instructions.md (sources _common.py)
6289
+ generate_copilot.py # Generates Copilot .github/* surfaces; install also injects AGENTS.md
6290
6290
  generate_gemini.py # Generates GEMINI.md (sources _common.py)
6291
6291
  generate_cline.py # Generates .clinerules (sources _common.py)
6292
6292
  generate_roo_modes.py # Generates .roomodes
@@ -6341,7 +6341,7 @@ Machine (global) Project (local)
6341
6341
  - `--editors cursor,aider` — install only selected editors
6342
6342
  - (no flag) — auto-detect from existing project files; `update --local` picks up whatever editors already have configs
6343
6343
 
6344
- 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`.
6344
+ Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.devin/rules/*.md` + `.windsurf/rules/*.md` (dual-emit since the Devin Desktop rebrand), `.github/instructions/*.instructions.md` + `.github/prompts/*.prompt.md` + root `AGENTS.md` for Copilot agent instructions, `.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`.
6345
6345
 
6346
6346
  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`).
6347
6347
 
@@ -7181,16 +7181,22 @@ by default because Codex currently renders `additionalContext` as visible hook
7181
7181
  context in the TUI. This keeps prompt-submit output quiet while preserving hook
7182
7182
  side effects and blocking decisions such as search-first Stop enforcement.
7183
7183
 
7184
- Codex `UserPromptSubmit` JSON output is event-specific. When emitting context,
7185
- the hook must include the event name alongside the context:
7184
+ Codex hooks must not force Claude-only JSON output fields such as
7185
+ `suppressOutput`. In particular, advisory `PostToolUse` hooks like
7186
+ `loop-guard.sh` run in quiet/plain mode under Codex; they keep side effects but
7187
+ do not emit hidden Claude-style context unless a future Codex runtime explicitly
7188
+ supports that schema.
7189
+
7190
+ If a future Codex runtime enables JSON context output for `UserPromptSubmit`,
7191
+ the output must be event-specific and include the event name alongside the
7192
+ context:
7186
7193
 
7187
7194
  ```json
7188
7195
  {
7189
7196
  "hookSpecificOutput": {
7190
7197
  "hookEventName": "UserPromptSubmit",
7191
7198
  "additionalContext": "..."
7192
- },
7193
- "suppressOutput": true
7199
+ }
7194
7200
  }
7195
7201
  ```
7196
7202
 
@@ -11891,9 +11897,9 @@ title: "Supported Tools Registry"
11891
11897
  category: reference
11892
11898
  service: ai-toolkit
11893
11899
  tags: [editors, platforms, generators, integration, ecosystem]
11894
- version: "1.6.0"
11900
+ version: "1.7.0"
11895
11901
  created: "2026-04-23"
11896
- last_updated: "2026-06-10"
11902
+ last_updated: "2026-06-23"
11897
11903
  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."
11898
11904
  ---
11899
11905
 
@@ -11916,7 +11922,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11916
11922
  | ID | `claude-code` |
11917
11923
  | Docs | https://code.claude.com/docs (platform.claude.com/docs 307-redirects here) |
11918
11924
  | Release notes | https://github.com/anthropics/claude-code/releases |
11919
- | Changelog | https://code.claude.com/docs/en/changelog (lists current 2.1.170) |
11925
+ | Changelog | https://code.claude.com/docs/en/changelog (lists current 2.1.186) |
11920
11926
  | 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+) |
11921
11927
  | Our generators | — (Claude Code is the primary target; toolkit content ships directly as `.md` files and `settings.json` merges) |
11922
11928
  | 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` |
@@ -11967,8 +11973,8 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11967
11973
  | Release notes | https://github.blog/changelog/label/copilot/ |
11968
11974
  | Config paths | `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md`, `.github/prompts/*.prompt.md`, `AGENTS.md` |
11969
11975
  | Our generators | `scripts/generate_copilot.py` |
11970
- | Tracked capabilities | `copilot-instructions.md`, Copilot Chat, Copilot Workspace, Copilot cloud agent, `applyTo`, custom agents, prompt files, `instructions.md`, MCP |
11971
- | Tier notes | Custom agents (`.github/agents/*.agent.md`) and repo-level MCP config are Pro/Pro+/Business/Enterprise only and intentionally not integrated (class C per ecosystem-sync SOP). |
11976
+ | Tracked capabilities | `copilot-instructions.md`, Copilot Chat, Copilot Workspace, Copilot cloud agent, `applyTo`, custom agents, prompt files, `instructions.md`, `AGENTS.md`, MCP |
11977
+ | Tier notes | Custom agents (`.github/agents/*.agent.md`) and repo-level MCP config are Pro/Pro+/Business/Enterprise only and intentionally not integrated (class C per ecosystem-sync SOP). Copilot code review reads the nearest `AGENTS.md` automatically since the 2026-06-18 GA (all tiers); `ai-toolkit install --local --editors copilot` injects a `TOOLKIT:copilot-agents` section generated from `generate_agents_md.py` without clobbering Codex/opencode sections in the same file. The 4000-char cap on `copilot-instructions.md` / `*.instructions.md` was also removed (2026-06-12). |
11972
11978
 
11973
11979
  ### Gemini CLI
11974
11980
 
@@ -11981,7 +11987,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
11981
11987
  | 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) |
11982
11988
  | 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) |
11983
11989
  | Version probe | `gemini --version` |
11984
- | 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. |
11990
+ | Latest upstream | v0.47.0 (2026-06-18). NOTE: Gemini CLI dropped free/paid individual tiers on 2026-06-18 in favor of Antigravity CLI (we ship `generate_antigravity.py`); enterprise Code Assist and paid API keys keep Gemini CLI, so the integration stays. The 11 hook events are unchanged. v0.48 preview migrates the `coreTools` setting to `tools.core` (a tool-allowlist key we do not emit, so no generator change). |
11985
11991
 
11986
11992
  ### Cline
11987
11993
 
@@ -12053,7 +12059,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
12053
12059
  | Field | Value |
12054
12060
  |-------|-------|
12055
12061
  | ID | `codex-cli` |
12056
- | 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) |
12062
+ | 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.142.0, 2026-06) |
12057
12063
  | Release notes | https://github.com/openai/codex/releases |
12058
12064
  | 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` |
12059
12065
  | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`) |
@@ -12075,7 +12081,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
12075
12081
  | Tracked plugin events | `session.created`, `session.compacted`, `session.deleted`, `message.updated`, `tool.execute.before`, `tool.execute.after`, `permission.asked`, `command.executed` |
12076
12082
  | 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 |
12077
12083
  | Version probe | `opencode --version` |
12078
- | 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`. |
12084
+ | Watch item | v1.16.0 (2026-06-05) shipped an experimental v2 skill registry (flat-file skills, `slash` frontmatter key). As of the 2026-06-23 sync (upstream v1.17.9) it is still undocumented and not stabilized: the skills docs show only the nested `SKILL.md` layout with no `slash` key, so `generate_opencode*.py` is unchanged. Re-check next sync. |
12079
12085
 
12080
12086
  ---
12081
12087
 
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.10.0",
2
+ "version": "4.10.1",
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.10.0",
3
+ "version": "4.10.1",
4
4
  "description": "AI coding toolkit: 108 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",
@@ -71,6 +71,8 @@
71
71
  "files": [
72
72
  "bin/",
73
73
  "app/",
74
+ "!app/**/.claude",
75
+ "!app/**/.claude/**",
74
76
  "!app/**/__pycache__",
75
77
  "!app/**/*.pyc",
76
78
  "scripts/",
@@ -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-10",
4
+ "last_updated": "2026-06-23",
5
5
  "tools": [
6
6
  {
7
7
  "id": "claude-code",
@@ -200,6 +200,7 @@
200
200
  "custom agents",
201
201
  "prompt files",
202
202
  "instructions.md",
203
+ "AGENTS.md",
203
204
  "MCP"
204
205
  ],
205
206
  "version_probe": null
@@ -17,6 +17,12 @@ This generator produces three surfaces, all on the OSS/Free/Pro tier
17
17
  Invoked manually in VS Code Copilot Chat via ``/name``. Written only
18
18
  when ``generate()`` is called with a target directory.
19
19
 
20
+ GitHub Copilot code review (generally available 2026-06-18, all tiers) now
21
+ automatically reads the root-level ``AGENTS.md`` when generating review
22
+ feedback. We already emit that file via ``scripts/generate_agents_md.py``, so
23
+ no Copilot-specific emission is added here; ``AGENTS.md`` is tracked in this
24
+ tool's ``capability_markers`` in ``scripts/ecosystem_tools.json``.
25
+
20
26
  Features that live on Pro/Pro+/Business/Enterprise tiers are intentionally
21
27
  not generated (classified as class C in the ecosystem-sync SOP):
22
28
  * ``.github/agents/*.agent.md`` — custom agent profiles (tier-gated)
@@ -352,6 +352,39 @@ def inject_with_rules(
352
352
  print(f" Updated: {target_file}")
353
353
 
354
354
 
355
+ def _inject_text_section(target_file: Path, section: str, text: str) -> None:
356
+ """Inject generated text into one marker section without touching others."""
357
+ target_file.parent.mkdir(parents=True, exist_ok=True)
358
+ existing = target_file.read_text(encoding="utf-8") if target_file.is_file() else ""
359
+ existing = _trim_trailing_blanks(_strip_section(existing, section))
360
+
361
+ parts: list[str] = []
362
+ if existing.strip():
363
+ parts.append(existing)
364
+ parts.append("")
365
+ parts.extend([
366
+ f"<!-- TOOLKIT:{section} START -->",
367
+ "<!-- Auto-injected by ai-toolkit. Re-run to update. -->",
368
+ "",
369
+ text.rstrip("\n"),
370
+ "",
371
+ f"<!-- TOOLKIT:{section} END -->",
372
+ ])
373
+
374
+ output = _collapse_blank_runs("\n".join(parts) + "\n").lstrip("\n")
375
+ target_file.write_text(output, encoding="utf-8")
376
+
377
+
378
+ def _install_copilot_agents_md(cwd: Path) -> None:
379
+ """Emit root AGENTS.md for GitHub Copilot without clobbering other tools."""
380
+ generated = run_script("generate_agents_md.py", capture=True)
381
+ if not generated.strip():
382
+ print(" ERROR: generate_agents_md.py produced no output")
383
+ return
384
+ _inject_text_section(cwd / "AGENTS.md", "copilot-agents", generated)
385
+ print(" Updated: AGENTS.md (Copilot agent instructions)")
386
+
387
+
355
388
  def run_script(script_name: str, *args: str, capture: bool = False) -> str:
356
389
  """Run a script from the scripts/ directory (prefers .py over .sh)."""
357
390
  scripts_dir = toolkit_dir / "scripts"
@@ -724,7 +757,7 @@ def _install_local_dry_run(reset: bool, editors: list[str] | None = None,
724
757
 
725
758
  # Editor-specific dry-run messages
726
759
  _EDITOR_DRY_RUN = {
727
- "copilot": " Would inject: .github/copilot-instructions.md",
760
+ "copilot": " Would inject: .github/copilot-instructions.md + AGENTS.md",
728
761
  "cursor": " Would generate: .cursorrules + .cursor/rules/*.mdc",
729
762
  "windsurf": " Would generate: .windsurfrules + .devin/rules/*.md + .windsurf/rules/*.md",
730
763
  "cline": " Would generate: .clinerules/*.md",
@@ -949,6 +982,7 @@ def _create_local_ai_tool_configs(cwd: Path, rules_dir: Path,
949
982
  cwd / ".github" / "copilot-instructions.md",
950
983
  rules_dir,
951
984
  )
985
+ _install_copilot_agents_md(cwd)
952
986
  # `standard` and above: emit path-specific instructions + prompt files
953
987
  # (directory mode). `minimal` stays backwards-compatible with v2.
954
988
  if add_copilot_dir: