@softspark/ai-toolkit 3.0.0 → 3.0.2

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.
@@ -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.1.0"
6
+ version: "1.2.0"
7
7
  created: "2026-04-23"
8
- last_updated: "2026-04-23"
8
+ last_updated: "2026-04-24"
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
 
@@ -49,7 +49,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
49
49
  | Stable docs mirror | https://cursor.com/llms.txt (all doc pages have .md twins) |
50
50
  | Config paths | `.cursorrules`, `.cursor/rules/*.mdc`, `.cursor/rules/*.md`, `AGENTS.md`, `.cursor/mcp.json`, `~/.cursor/mcp.json`, `.cursor/skills/*/SKILL.md`, `.cursor/agents/*.md`, `.cursor/hooks.json`, `~/.cursor/hooks.json` |
51
51
  | Compat read paths | `.claude/skills/`, `.claude/agents/`, `.codex/skills/`, `.codex/agents/` (Cursor cross-reads these so ai-toolkit's Claude install works automatically) |
52
- | Our generators | `scripts/generate_cursor_rules.py`, `scripts/generate_cursor_mdc.py` |
52
+ | 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) |
53
53
  | Tracked capabilities | `cursorrules`, `.cursor/rules`, `AGENTS.md`, `mcp.json`, Composer, Agent Mode, hooks.json, subagents, skills, plugins |
54
54
 
55
55
  ### Windsurf
@@ -62,7 +62,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
62
62
  | Stable docs mirror | https://docs.windsurf.com/llms.txt + per-page .md twins |
63
63
  | Config paths | `.windsurfrules`, `.windsurf/rules/*.md`, `.windsurf/workflows/*.md`, `AGENTS.md`, `~/.codeium/windsurf/memories/global_rules.md`, `~/.codeium/windsurf/mcp_config.json` |
64
64
  | Compat read paths | `.agents/skills/`, `~/.agents/skills/`, (with Claude Code config-reading) `.claude/skills/`, `~/.claude/skills/` |
65
- | Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py` |
65
+ | Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py`, `scripts/generate_windsurf_hooks.py` (profile=full) |
66
66
  | Tracked capabilities | Cascade, `windsurfrules`, `AGENTS.md`, activation triggers (`always_on`/`glob`/`model_decision`), workflows, MCP, memories, hooks |
67
67
  | Activation modes emitted | always_on (agents/security/quality), glob (testing + language rules), model_decision (code-style/workflow) |
68
68
 
@@ -86,7 +86,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
86
86
  | Docs | https://github.com/google-gemini/gemini-cli/tree/main/docs |
87
87
  | Release notes | https://github.com/google-gemini/gemini-cli/releases |
88
88
  | 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` |
89
- | Our generators | `scripts/generate_gemini.py` |
89
+ | 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) |
90
90
  | Tracked capabilities | `GEMINI.md`, `mcpServers`, tools, `settings.json`, `BeforeTool`, `AfterTool`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `SessionStart`, `SessionEnd`, `Stop`, `SKILL.md`, `activate_skill`, custom commands, `gemini-extension.json` |
91
91
  | Version probe | `gemini --version` |
92
92
  | Latest upstream | v0.39.0 (2026-04-23) |
@@ -136,7 +136,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
136
136
  | Docs | https://docs.augmentcode.com |
137
137
  | Changelog | https://www.augmentcode.com/changelog |
138
138
  | 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` |
139
- | Our generators | `scripts/generate_augment.py`, `scripts/generate_augment_rules.py` |
139
+ | 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) |
140
140
  | 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 |
141
141
  | SPA caveat | Mintlify Next.js SPA; use `https://docs.augmentcode.com/<path>.md` siblings (discoverable via `/llms.txt`) for machine reads |
142
142
 
@@ -160,7 +160,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
160
160
  | Docs | https://github.com/openai/codex (redirects from developers.openai.com/codex) |
161
161
  | Release notes | https://github.com/openai/codex/releases |
162
162
  | Config paths | `AGENTS.md`, `.agents/rules/*.md`, `.codex/hooks.json`, `.codex/skills/*/SKILL.md`, `~/.codex/config.toml` |
163
- | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_rules.py`, `scripts/generate_codex_hooks.py` |
163
+ | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_rules.py`, `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`) |
164
164
  | Tracked hook events | `PreToolUse`, `PostToolUse`, `SessionStart`, `UserPromptSubmit`, `Stop`, `PermissionRequest` (6 events supported upstream in `config.toml`) |
165
165
  | Tracked handler types | `command` (emitted by default); `prompt` and `agent` available upstream but authored by hand |
166
166
  | Other capabilities | `AGENTS.md`, `config.toml`, `mcp_servers`, sandbox policies, `.codex/skills/*/SKILL.md` (native discovery, not auto-emitted by ai-toolkit yet) |
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: "Windows Support"
3
+ category: reference
4
+ service: ai-toolkit
5
+ tags: [windows, wsl, install, dependencies, hooks]
6
+ created: "2026-04-24"
7
+ last_updated: "2026-04-24"
8
+ description: "Windows support model for ai-toolkit: WSL, Git Bash, dependency detection, and hook runtime constraints."
9
+ ---
10
+
11
+ # Windows Support
12
+
13
+ ai-toolkit supports Windows through two practical modes:
14
+
15
+ 1. **WSL recommended** — best compatibility for Bash hooks, POSIX paths, symlinks, and editor configs.
16
+ 2. **Native Windows with Git Bash** — supported for CLI usage when Bash is available on `PATH`.
17
+
18
+ ## Dependency Detection
19
+
20
+ `scripts/check_deps.py` now emits install hints for Windows package managers:
21
+
22
+ | Manager | Command Prefix |
23
+ |---------|----------------|
24
+ | winget | `winget install` |
25
+ | Chocolatey | `choco install -y` |
26
+ | Scoop | `scoop install` |
27
+
28
+ Required dependency package IDs:
29
+
30
+ | Dependency | winget | Chocolatey | Scoop |
31
+ |------------|--------|------------|-------|
32
+ | Python 3 | `Python.Python.3` | `python` | `python` |
33
+ | Git | `Git.Git` | `git` | `git` |
34
+ | Node.js | `OpenJS.NodeJS` | `nodejs` | `nodejs` |
35
+
36
+ ## Hook Runtime
37
+
38
+ ai-toolkit hooks are Bash scripts. On Windows, use WSL or Git Bash so Claude Code can execute `~/.softspark/ai-toolkit/hooks/*.sh`.
39
+
40
+ Cross-platform hooks should keep the Bash entrypoint small and delegate complex work to Python or Node when Windows behavior diverges.
41
+
42
+ ## Verification
43
+
44
+ ```bash
45
+ ai-toolkit doctor
46
+ python3 scripts/check_deps.py
47
+ python3 scripts/validate.py
48
+ ```
49
+
50
+ The Windows support contract is covered by `tests/test_windows_support.bats`.
package/llms-full.txt CHANGED
@@ -58,6 +58,7 @@
58
58
  - [Supported Tools Registry](kb/reference/supported-tools-registry.md)
59
59
  - [Config Sync](kb/reference/sync.md)
60
60
  - [Unique Features & Differentiators](kb/reference/unique-features.md)
61
+ - [Windows Support](kb/reference/windows-support.md)
61
62
  - [Troubleshooting](kb/troubleshooting/README.md)
62
63
 
63
64
  ## Skills
@@ -4242,10 +4243,10 @@ title: "SOP: Release Preparation"
4242
4243
  category: procedures
4243
4244
  service: ai-toolkit
4244
4245
  tags: [sop, release, version, publish, changelog, semver, provenance, sarif, ecosystem]
4245
- version: "1.9.0"
4246
+ version: "1.10.0"
4246
4247
  created: "2026-04-10"
4247
- last_updated: "2026-04-23"
4248
- description: "Step-by-step checklist for preparing a new ai-toolkit release — ecosystem-sync drift check, version sync, changelog, artifact regeneration, validation, and tagging. Run BEFORE every git tag. Includes mandatory Provenance, SARIF, and checksum-pin checks added in v2.8.0, the single-run npm test discipline added in v1.8.0, and the ecosystem-sync gate added in v1.9.0."
4248
+ last_updated: "2026-04-24"
4249
+ description: "Step-by-step checklist for preparing a new ai-toolkit release — ecosystem-sync drift check, version sync, changelog, artifact regeneration, validation, and tagging. Run BEFORE every git tag. Includes mandatory Provenance, SARIF, and checksum-pin checks added in v2.8.0, the single-run npm test discipline added in v1.8.0, the ecosystem-sync gate added in v1.9.0, and the registry-vs-generators drift gate added in v1.10.0."
4249
4250
  ---
4250
4251
 
4251
4252
  # SOP: Release Preparation
@@ -4517,7 +4518,15 @@ python3 scripts/audit_skills.py --ci
4517
4518
  python3 scripts/audit_skills.py --sarif > audit.sarif # MANDATORY — GHAS ingest
4518
4519
  python3 scripts/audit_skills.py --permissions # review Bash/Write/Edit footprint
4519
4520
 
4520
- # Run npm test ONCE, cache output, parse from file. The suite is 669+ bats
4521
+ # Registry / generator drift (added in 1.10.0). Meta-generators excluded.
4522
+ META="generate_agents_md.py|generate_llms_txt.py"
4523
+ diff \
4524
+ <(grep -oE 'scripts/generate_[a-z_]+\.py' kb/reference/supported-tools-registry.md | sort -u) \
4525
+ <(ls scripts/generate_*.py | grep -vE "$META" | sort -u) \
4526
+ && echo "OK: registry matches filesystem" \
4527
+ || { echo "DRIFT: update supported-tools-registry.md before tagging"; exit 1; }
4528
+
4529
+ # Run npm test ONCE, cache output, parse from file. The suite is 900+ bats
4521
4530
  # cases — rerunning it per check wastes minutes. Do not pipe npm test into
4522
4531
  # tail/grep multiple times in the same session.
4523
4532
  npm test > /tmp/npm-test.log 2>&1
@@ -4530,11 +4539,12 @@ echo "ok: $(grep -c '^ok ' /tmp/npm-test.log) | not ok: $(grep -c '^not ok' /tmp
4530
4539
  - `audit_skills.py --ci`: `HIGH: 0 | WARN: 0` (INFO is acceptable)
4531
4540
  - `audit_skills.py --sarif`: valid JSON, non-empty `runs[0].tool.driver.rules`
4532
4541
  - `audit_skills.py --permissions`: review `Skills with Bash + Write + Edit` list — any newly-added skill with broad access MUST be justified in the CHANGELOG entry
4542
+ - Registry drift: `OK: registry matches filesystem`. If `DRIFT:` appears, add the missing `scripts/generate_*.py` rows to `kb/reference/supported-tools-registry.md` before tagging.
4533
4543
  - `npm test`: `1..N` with zero `not ok` (read from the cached `/tmp/npm-test.log`, do not rerun)
4534
4544
 
4535
4545
  **One-liner:**
4536
4546
  ```bash
4537
- python3 scripts/validate.py --strict && python3 scripts/audit_skills.py --ci && python3 scripts/audit_skills.py --sarif > audit.sarif && npm test
4547
+ python3 scripts/validate.py --strict && python3 scripts/audit_skills.py --ci && python3 scripts/audit_skills.py --sarif > audit.sarif && diff <(grep -oE 'scripts/generate_[a-z_]+\.py' kb/reference/supported-tools-registry.md | sort -u) <(ls scripts/generate_*.py | grep -vE 'generate_agents_md\.py|generate_llms_txt\.py' | sort -u) && npm test
4538
4548
  ```
4539
4549
 
4540
4550
  **If tests fail:** Fix the issue, do NOT skip. Common failures:
@@ -4678,10 +4688,10 @@ title: "SOP: Release Verification"
4678
4688
  category: procedures
4679
4689
  service: ai-toolkit
4680
4690
  tags: [sop, verification, release, smoke-test, install, update, qa, provenance, sarif]
4681
- version: "1.3.0"
4691
+ version: "1.4.0"
4682
4692
  created: "2026-04-08"
4683
- last_updated: "2026-04-21"
4684
- description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI, install, doctor, validation, tests, eject, npm provenance attestation, SARIF audit, and per-skill permissions. Reflects the v2.8.0 supply-chain standard. v1.3.0 adds the single-run npm test discipline (cache to file, parse ok/not-ok once)."
4693
+ last_updated: "2026-04-24"
4694
+ description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI, install, doctor, validation, tests, eject, npm provenance attestation, SARIF audit, and per-skill permissions. Reflects the v2.8.0 supply-chain standard. v1.3.0 added the single-run npm test discipline; v1.4.0 adds v3.0.0 deep-coverage checks (--profile full, --codex-skills, breaking-change surfaces, idempotence, registry drift, live-JSON parse) and refreshes stale thresholds."
4685
4695
  ---
4686
4696
 
4687
4697
  # SOP: Release Verification
@@ -4727,6 +4737,10 @@ python3 scripts/audit_skills.py --ci # 10. Security audit
4727
4737
  python3 scripts/audit_skills.py --sarif | python3 -c "import json,sys; assert json.load(sys.stdin)['version']=='2.1.0'; print('SARIF OK')" # 11. SARIF 2.1.0 well-formed?
4728
4738
  python3 scripts/audit_skills.py --permissions | head -30 # 12. Broad-access skills reviewed?
4729
4739
  npm view @softspark/ai-toolkit@X.Y.Z --json | python3 -c "import json,sys; d=json.load(sys.stdin); assert d['dist']['attestations']['provenance']['predicateType']=='https://slsa.dev/provenance/v1'; print('PROVENANCE OK')" # 13. Provenance attested on npm?
4740
+
4741
+ # Deep-coverage verification (Phase 9, v3.0.0+)
4742
+ META="generate_agents_md.py|generate_llms_txt.py"
4743
+ diff <(grep -oE 'scripts/generate_[a-z_]+\.py' kb/reference/supported-tools-registry.md | sort -u) <(ls scripts/generate_*.py | grep -vE "$META" | sort -u) && echo "OK: registry matches" # 14. Registry <-> generators drift?
4730
4744
  ```
4731
4745
 
4732
4746
  ---
@@ -4792,8 +4806,8 @@ ai-toolkit status
4792
4806
  ```
4793
4807
 
4794
4808
  **Verify `--dry-run`:**
4795
- - [ ] Agents >= 40
4796
- - [ ] Skills >= 80
4809
+ - [ ] Agents >= 44
4810
+ - [ ] Skills >= 99
4797
4811
  - [ ] Hooks merged into settings.json
4798
4812
  - [ ] "Other AI Tools" section lists cursor, windsurf, gemini, augment (antigravity via --local)
4799
4813
 
@@ -4843,7 +4857,7 @@ cd - && rm -rf /tmp/ai-toolkit-verify
4843
4857
  - [ ] Would create: CLAUDE.md
4844
4858
  - [ ] Would create: .claude/settings.local.json
4845
4859
  - [ ] Would inject: .claude/constitution.md
4846
- - [ ] Editors: all 8 listed (copilot, cursor, windsurf, cline, roo, aider, augment, antigravity)
4860
+ - [ ] Editors: all 11 listed (copilot, cursor, windsurf, cline, roo, aider, augment, antigravity, codex, gemini, opencode)
4847
4861
  - [ ] Would generate configs for each editor (legacy + directory-based)
4848
4862
  - [ ] Would install: .git/hooks/pre-commit
4849
4863
  - [ ] Would inject language rules (auto-detected)
@@ -4864,7 +4878,7 @@ python3 scripts/audit_skills.py --ci
4864
4878
  ```
4865
4879
 
4866
4880
  **Verify validate.py:**
4867
- - [ ] Agents >= 40, Skills >= 80, Tests >= 350
4881
+ - [ ] Agents >= 44, Skills >= 99, Tests >= 900
4868
4882
  - [ ] Hook events: 12, Hook scripts: >= 20
4869
4883
  - [ ] Plugin packs >= 10, KB documents >= 20
4870
4884
  - [ ] `Errors: 0 | Warnings: 0` → `VALIDATION PASSED`
@@ -4892,7 +4906,7 @@ echo "exit: $exit"
4892
4906
 
4893
4907
  **Verify:**
4894
4908
  - [ ] `exit == 0`
4895
- - [ ] `ok == expected test count` (e.g., 669)
4909
+ - [ ] `ok == expected test count` (e.g., 945 on v3.0.0)
4896
4910
  - [ ] `not ok == 0`
4897
4911
  - [ ] Bats runs tests in parallel (4 jobs)
4898
4912
  - [ ] Groups: agents, autodetect, cli, generators, guards, hooks, inject,
@@ -4997,6 +5011,101 @@ AI_TOOLKIT_STRICT_PIN=1 ai-toolkit update --dry-run
4997
5011
 
4998
5012
  ---
4999
5013
 
5014
+ ## Phase 9: Deep-Coverage Checks (v3.0.0+)
5015
+
5016
+ These verify the native-surface generators shipped in v3.0.0 actually emit the right files for the right profiles, and that the tool registry stays in sync with shipped generators.
5017
+
5018
+ > **Safety warning — HOME-scoped writes:** Running `--profile full` with `augment` in the editor list writes to `$HOME/.augment/settings.json` (Augment stores hooks under HOME, not per-project). Use `--dry-run` for verification unless you intend to carry ai-toolkit hook entries on this machine. The generator is marker-safe (only rewrites its own `_source: ai-toolkit` entries) but is still a side-effect.
5019
+
5020
+ ### 9.1 `--profile full` emits every native surface
5021
+
5022
+ ```bash
5023
+ D=/tmp/aitk-profile-full-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
5024
+ ai-toolkit install --local --editors cursor,windsurf,gemini,augment,codex \
5025
+ --profile full --codex-skills --dry-run 2>&1 \
5026
+ | grep -E "\\.cursor/(hooks\\.json|agents)|\\.windsurf/hooks\\.json|\\.gemini/(settings\\.json|commands)|\\.augment/(agents|commands)|\\.codex/skills"
5027
+ ```
5028
+
5029
+ **Verify** — at least the following lines appear:
5030
+ - [ ] `.cursor/hooks.json` and `.cursor/agents/`
5031
+ - [ ] `.windsurf/hooks.json`
5032
+ - [ ] `.gemini/settings.json` hooks AND `.gemini/commands/`
5033
+ - [ ] `.augment/agents/` + `.augment/commands/` + `$HOME/.augment/settings.json`
5034
+ - [ ] `.codex/skills/` (opt-in via `--codex-skills`)
5035
+
5036
+ ### 9.2 `--codex-skills` is orthogonal to `--profile`
5037
+
5038
+ ```bash
5039
+ D=/tmp/aitk-codex-skills-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
5040
+ ai-toolkit install --local --editors codex --profile standard --codex-skills --dry-run 2>&1 \
5041
+ | grep -q "Would generate: .codex/skills" && echo "OK: --codex-skills works without --profile full"
5042
+ ai-toolkit install --local --editors codex --profile full --dry-run 2>&1 \
5043
+ | grep -q "Would generate: .codex/skills" && echo "FAIL: --profile full should NOT auto-emit .codex/skills" \
5044
+ || echo "OK: --profile full alone does not auto-emit .codex/skills (correct — opt-in only)"
5045
+ ```
5046
+
5047
+ **Verify:**
5048
+ - [ ] `--codex-skills` emits `.codex/skills/` at any profile
5049
+ - [ ] `--profile full` alone does NOT emit `.codex/skills/` (must be opt-in)
5050
+
5051
+ ### 9.3 Breaking-change surfaces land on `--profile standard`
5052
+
5053
+ v3.0.0 moved two surfaces from opt-in to default:
5054
+ - Copilot directory layout (`.github/instructions/`, `.github/prompts/`)
5055
+ - Gemini hooks (`.gemini/settings.json`)
5056
+
5057
+ ```bash
5058
+ D=/tmp/aitk-breaking-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
5059
+ ai-toolkit install --local --editors copilot,gemini --profile standard --dry-run 2>&1 \
5060
+ | tee /tmp/aitk-breaking.log
5061
+ grep -q "\\.github/instructions/" /tmp/aitk-breaking.log && echo "OK: Copilot dir layout at standard"
5062
+ grep -q "\\.gemini/settings\\.json hooks" /tmp/aitk-breaking.log && echo "OK: Gemini hooks at standard"
5063
+ ```
5064
+
5065
+ **Verify both lines print `OK:`**. If either is missing, a regression has unwound the v3.0.0 breaking change.
5066
+
5067
+ ### 9.4 Install is idempotent
5068
+
5069
+ ```bash
5070
+ D=/tmp/aitk-idem-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
5071
+ ai-toolkit install --local --editors cursor,gemini --profile full >/dev/null 2>&1
5072
+ SHA1=$(find .cursor .gemini -type f -exec shasum {} + | shasum | awk '{print $1}')
5073
+ ai-toolkit install --local --editors cursor,gemini --profile full >/dev/null 2>&1
5074
+ SHA2=$(find .cursor .gemini -type f -exec shasum {} + | shasum | awk '{print $1}')
5075
+ [ "$SHA1" = "$SHA2" ] && echo "OK: idempotent" || echo "FAIL: install is not idempotent"
5076
+ ```
5077
+
5078
+ **Verify:** prints `OK: idempotent`. A second run must produce byte-identical files in every managed path.
5079
+
5080
+ ### 9.5 Live-install JSON outputs parse
5081
+
5082
+ The bats suite validates JSON shape at generation time. This re-checks that what actually landed on disk after a live install parses without errors.
5083
+
5084
+ ```bash
5085
+ D=/tmp/aitk-json-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
5086
+ ai-toolkit install --local --editors cursor,windsurf,gemini,augment --profile full >/dev/null 2>&1
5087
+ for f in .cursor/hooks.json .windsurf/hooks.json .gemini/settings.json $HOME/.augment/settings.json; do
5088
+ [ -f "$f" ] && python3 -c "import json; json.load(open('$f'))" && echo "OK: $f"
5089
+ done
5090
+ ```
5091
+
5092
+ **Verify:** each emitted file prints `OK: <path>`. Any `json.decoder.JSONDecodeError` means the merge logic corrupted the output.
5093
+
5094
+ ### 9.6 Registry / generator drift check
5095
+
5096
+ `kb/reference/supported-tools-registry.md` should enumerate every per-editor `scripts/generate_*.py` we ship. Meta-generators (`generate_agents_md.py`, `generate_llms_txt.py`) are excluded — they produce docs/artifacts, not editor configs.
5097
+
5098
+ ```bash
5099
+ META="generate_agents_md.py|generate_llms_txt.py"
5100
+ REG=$(grep -oE 'scripts/generate_[a-z_]+\.py' kb/reference/supported-tools-registry.md | sort -u)
5101
+ FS=$(ls scripts/generate_*.py | grep -vE "$META" | sort -u)
5102
+ diff <(echo "$REG") <(echo "$FS") && echo "OK: registry matches filesystem" || echo "DRIFT: update supported-tools-registry.md"
5103
+ ```
5104
+
5105
+ **Verify:** prints `OK: registry matches filesystem`. If not, add the missing rows to the registry before tagging the next release.
5106
+
5107
+ ---
5108
+
5000
5109
  ## Troubleshooting
5001
5110
 
5002
5111
  ### `ai-toolkit: command not found`
@@ -5051,6 +5160,11 @@ ai-toolkit eject /tmp/test # retry
5051
5160
  | Tests | `npm test`: N/N passed, 0 failures |
5052
5161
  | Eject | Standalone `.claude/` with real files AND `output-styles/` directory |
5053
5162
  | Guards | Destructive commands blocked |
5163
+ | Deep coverage | `--profile full` emits all 9 v3.0.0 native surfaces; `--codex-skills` works orthogonally |
5164
+ | Breaking changes | Copilot directory layout + Gemini hooks emit at `--profile standard` (v3.0.0 contract) |
5165
+ | Idempotence | Second `install` run produces byte-identical output in every managed path |
5166
+ | Live JSON | Every generated `.json` file on disk parses as valid JSON |
5167
+ | Registry | `supported-tools-registry.md` enumerates every `scripts/generate_*.py` we ship |
5054
5168
 
5055
5169
  ---
5056
5170
 
@@ -6095,9 +6209,9 @@ The reference benchmark set is intentionally curated:
6095
6209
  title: "CLI Reference"
6096
6210
  category: reference
6097
6211
  service: ai-toolkit
6098
- tags: [cli, commands, reference, install, update, plugin, mcp]
6212
+ tags: [cli, commands, reference, install, update, plugin, mcp, telemetry]
6099
6213
  created: "2026-04-13"
6100
- last_updated: "2026-04-15"
6214
+ last_updated: "2026-04-24"
6101
6215
  description: "Complete CLI reference for all ai-toolkit commands, options, and flags."
6102
6216
  ---
6103
6217
 
@@ -6204,7 +6318,7 @@ Usage: ai-toolkit <command> [options]
6204
6318
 
6205
6319
  | Command | Description |
6206
6320
  |---------|-------------|
6207
- | `stats` | Show skill usage statistics (`--reset` to clear, `--json` for raw output) |
6321
+ | `stats` | Show skill usage statistics (`--summary` for product telemetry, `--reset` to clear, `--json` for raw output) |
6208
6322
  | `benchmark --my-config` | Compare your config vs defaults vs ecosystem |
6209
6323
  | `benchmark-ecosystem` | Generate ecosystem benchmark snapshot |
6210
6324
  | `create skill <name>` | Scaffold new skill from template (`--template=linter\|reviewer\|generator\|workflow\|knowledge`) |
@@ -6212,6 +6326,17 @@ Usage: ai-toolkit <command> [options]
6212
6326
  | `compile-slm` | Compile toolkit into minimal SLM system prompt (`--budget`, `--model-size`, `--dry-run`) |
6213
6327
  | `evaluate` | Run skill evaluation suite |
6214
6328
 
6329
+ ### `stats`
6330
+
6331
+ ```bash
6332
+ ai-toolkit stats # table of local skill usage
6333
+ ai-toolkit stats --summary # product telemetry summary
6334
+ ai-toolkit stats --summary --json # machine-readable telemetry
6335
+ ai-toolkit stats --reset # clear local stats
6336
+ ```
6337
+
6338
+ `--summary` reports total invocations, unique skills used, catalog coverage, unused catalog skills, active skills in the last 7 days, and top skills. Data stays local in `~/.softspark/ai-toolkit/stats.json`.
6339
+
6215
6340
  ## Install / Update Options
6216
6341
 
6217
6342
  ```bash
@@ -6425,7 +6550,7 @@ tags:
6425
6550
  doc_type: plan
6426
6551
  status: completed
6427
6552
  created: "2026-04-07"
6428
- last_updated: "2026-04-09"
6553
+ last_updated: "2026-04-24"
6429
6554
  completion: "100%"
6430
6555
  description: "Implementation plan for features identified from competitive analysis of everything-claude-code and claude-mem. Focus on learning system, language rules, advanced hooks, MCP templates, and rag-mcp integration. COMPLETED: 8/9 features shipped (1 skipped). See kb/reference/ for permanent documentation."
6431
6556
  ---
@@ -6554,8 +6679,8 @@ app/rules/
6554
6679
  - [x] 13 languages × 5 rule files created (70 files: 13 dirs × 5 + 5 common)
6555
6680
  - [x] `ai-toolkit install --local` auto-detects language and injects rules (two-phase: marker files + extension scan)
6556
6681
  - [x] Manual override: `ai-toolkit install --local --lang typescript` (with aliases: go→golang, c++→cpp, cs→csharp)
6557
- - [ ] validate.py checks rules format (not yet implemented)
6558
- - [ ] Tests: >=13 (no test_rules file yet)
6682
+ - [x] validate.py checks rules format
6683
+ - [x] Tests: dedicated `tests/test_rules.bats`
6559
6684
 
6560
6685
  ---
6561
6686
 
@@ -6909,7 +7034,7 @@ context: fork
6909
7034
  - [x] `/council` invocable
6910
7035
  - [x] 4 perspectives generated
6911
7036
  - [x] Structured output with recommendation
6912
- - [ ] Tests: dedicated council tests not yet written
7037
+ - [x] Tests: dedicated council skill contract
6913
7038
 
6914
7039
  ---
6915
7040
 
@@ -6928,7 +7053,7 @@ context: fork
6928
7053
  **Success Criteria:**
6929
7054
  - [x] Skill auto-loads when writing docs/content
6930
7055
  - [x] Anti-trope list prevents generic LLM rhetoric
6931
- - [ ] Tests: dedicated brand-voice tests not yet written
7056
+ - [x] Tests: dedicated brand-voice skill contract
6932
7057
 
6933
7058
  ---
6934
7059
 
@@ -6950,7 +7075,7 @@ context: fork
6950
7075
  - [x] `/introspect` invocable when agent is stuck
6951
7076
  - [x] Classifies failure pattern
6952
7077
  - [x] Suggests recovery action
6953
- - [ ] Tests: dedicated introspect tests not yet written
7078
+ - [x] Tests: dedicated introspect skill contract
6954
7079
 
6955
7080
  ---
6956
7081
 
@@ -7072,9 +7197,9 @@ npx @softspark/ai-toolkit inject-hook ./rag-mcp-hooks.json # NEW
7072
7197
 
7073
7198
  All major features shipped. Outstanding items:
7074
7199
 
7075
- 1. [ ] `validate.py` does not check rules format (1.1)
7076
- 2. [ ] No dedicated `test_rules` test file (1.1)
7077
- 3. [ ] No dedicated tests for council, brand-voice, introspect skills (3.1-3.3)
7200
+ 1. [x] `validate.py` checks rules format (1.1)
7201
+ 2. [x] Dedicated `test_rules` test file exists (1.1)
7202
+ 3. [x] Dedicated tests exist for council, brand-voice, introspect skills (3.1-3.3)
7078
7203
  4. [x] `observe-session.sh` lives in rag-mcp (consumer), not ai-toolkit — by design
7079
7204
 
7080
7205
  ---
@@ -8046,9 +8171,9 @@ title: "Hooks Catalog"
8046
8171
  category: reference
8047
8172
  service: ai-toolkit
8048
8173
  tags: [hooks, quality, safety, enforcement, settings.json]
8049
- version: "1.4.2"
8174
+ version: "1.5.0"
8050
8175
  created: "2026-03-27"
8051
- last_updated: "2026-04-09"
8176
+ last_updated: "2026-04-24"
8052
8177
  description: "Complete reference of all ai-toolkit hooks: events, scripts, installation, and runtime behavior."
8053
8178
  ---
8054
8179
 
@@ -8058,6 +8183,12 @@ description: "Complete reference of all ai-toolkit hooks: events, scripts, insta
8058
8183
 
8059
8184
  ai-toolkit provides 21 global hook entries across 12 lifecycle events that enforce quality, safety, and workflow rules across all Claude Code sessions. Hooks are merged into `~/.claude/settings.json` on install, with logic in standalone scripts at `~/.softspark/ai-toolkit/hooks/`.
8060
8185
 
8186
+ ## Supported Surface
8187
+
8188
+ `scripts/validate.py` validates both event names and handler shapes before release. The accepted lifecycle surface includes `PostToolUseFailure`, `PostToolBatch`, and `UserPromptExpansion` in addition to the installed ai-toolkit events below.
8189
+
8190
+ Supported handler types are `command`, `http`, `prompt`, `agent`, and `mcp_tool`. ai-toolkit ships command hooks by default; non-command handlers are validated so external consumers can safely inject richer hook definitions through `inject-hook`.
8191
+
8061
8192
  ## Installation
8062
8193
 
8063
8194
  ```bash
@@ -10687,9 +10818,9 @@ title: "Supported Tools Registry"
10687
10818
  category: reference
10688
10819
  service: ai-toolkit
10689
10820
  tags: [editors, platforms, generators, integration, ecosystem]
10690
- version: "1.1.0"
10821
+ version: "1.2.0"
10691
10822
  created: "2026-04-23"
10692
- last_updated: "2026-04-23"
10823
+ last_updated: "2026-04-24"
10693
10824
  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."
10694
10825
  ---
10695
10826
 
@@ -10733,7 +10864,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
10733
10864
  | Stable docs mirror | https://cursor.com/llms.txt (all doc pages have .md twins) |
10734
10865
  | Config paths | `.cursorrules`, `.cursor/rules/*.mdc`, `.cursor/rules/*.md`, `AGENTS.md`, `.cursor/mcp.json`, `~/.cursor/mcp.json`, `.cursor/skills/*/SKILL.md`, `.cursor/agents/*.md`, `.cursor/hooks.json`, `~/.cursor/hooks.json` |
10735
10866
  | Compat read paths | `.claude/skills/`, `.claude/agents/`, `.codex/skills/`, `.codex/agents/` (Cursor cross-reads these so ai-toolkit's Claude install works automatically) |
10736
- | Our generators | `scripts/generate_cursor_rules.py`, `scripts/generate_cursor_mdc.py` |
10867
+ | 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) |
10737
10868
  | Tracked capabilities | `cursorrules`, `.cursor/rules`, `AGENTS.md`, `mcp.json`, Composer, Agent Mode, hooks.json, subagents, skills, plugins |
10738
10869
 
10739
10870
  ### Windsurf
@@ -10746,7 +10877,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
10746
10877
  | Stable docs mirror | https://docs.windsurf.com/llms.txt + per-page .md twins |
10747
10878
  | Config paths | `.windsurfrules`, `.windsurf/rules/*.md`, `.windsurf/workflows/*.md`, `AGENTS.md`, `~/.codeium/windsurf/memories/global_rules.md`, `~/.codeium/windsurf/mcp_config.json` |
10748
10879
  | Compat read paths | `.agents/skills/`, `~/.agents/skills/`, (with Claude Code config-reading) `.claude/skills/`, `~/.claude/skills/` |
10749
- | Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py` |
10880
+ | Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py`, `scripts/generate_windsurf_hooks.py` (profile=full) |
10750
10881
  | Tracked capabilities | Cascade, `windsurfrules`, `AGENTS.md`, activation triggers (`always_on`/`glob`/`model_decision`), workflows, MCP, memories, hooks |
10751
10882
  | Activation modes emitted | always_on (agents/security/quality), glob (testing + language rules), model_decision (code-style/workflow) |
10752
10883
 
@@ -10770,7 +10901,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
10770
10901
  | Docs | https://github.com/google-gemini/gemini-cli/tree/main/docs |
10771
10902
  | Release notes | https://github.com/google-gemini/gemini-cli/releases |
10772
10903
  | 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` |
10773
- | Our generators | `scripts/generate_gemini.py` |
10904
+ | 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) |
10774
10905
  | Tracked capabilities | `GEMINI.md`, `mcpServers`, tools, `settings.json`, `BeforeTool`, `AfterTool`, `BeforeAgent`, `AfterAgent`, `BeforeModel`, `SessionStart`, `SessionEnd`, `Stop`, `SKILL.md`, `activate_skill`, custom commands, `gemini-extension.json` |
10775
10906
  | Version probe | `gemini --version` |
10776
10907
  | Latest upstream | v0.39.0 (2026-04-23) |
@@ -10820,7 +10951,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
10820
10951
  | Docs | https://docs.augmentcode.com |
10821
10952
  | Changelog | https://www.augmentcode.com/changelog |
10822
10953
  | 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` |
10823
- | Our generators | `scripts/generate_augment.py`, `scripts/generate_augment_rules.py` |
10954
+ | 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) |
10824
10955
  | 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 |
10825
10956
  | SPA caveat | Mintlify Next.js SPA; use `https://docs.augmentcode.com/<path>.md` siblings (discoverable via `/llms.txt`) for machine reads |
10826
10957
 
@@ -10844,7 +10975,7 @@ The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed b
10844
10975
  | Docs | https://github.com/openai/codex (redirects from developers.openai.com/codex) |
10845
10976
  | Release notes | https://github.com/openai/codex/releases |
10846
10977
  | Config paths | `AGENTS.md`, `.agents/rules/*.md`, `.codex/hooks.json`, `.codex/skills/*/SKILL.md`, `~/.codex/config.toml` |
10847
- | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_rules.py`, `scripts/generate_codex_hooks.py` |
10978
+ | Our generators | `scripts/generate_codex.py`, `scripts/generate_codex_rules.py`, `scripts/generate_codex_hooks.py`, `scripts/generate_codex_skills.py` (opt-in via `--codex-skills`) |
10848
10979
  | Tracked hook events | `PreToolUse`, `PostToolUse`, `SessionStart`, `UserPromptSubmit`, `Stop`, `PermissionRequest` (6 events supported upstream in `config.toml`) |
10849
10980
  | Tracked handler types | `command` (emitted by default); `prompt` and `agent` available upstream but authored by hand |
10850
10981
  | Other capabilities | `AGENTS.md`, `config.toml`, `mcp_servers`, sandbox policies, `.codex/skills/*/SKILL.md` (native discovery, not auto-emitted by ai-toolkit yet) |
@@ -11213,6 +11344,61 @@ Agents follow a research-before-action protocol enforced via rules:
11213
11344
 
11214
11345
  ---
11215
11346
 
11347
+ ## kb/reference/windows-support.md
11348
+
11349
+ ---
11350
+ title: "Windows Support"
11351
+ category: reference
11352
+ service: ai-toolkit
11353
+ tags: [windows, wsl, install, dependencies, hooks]
11354
+ created: "2026-04-24"
11355
+ last_updated: "2026-04-24"
11356
+ description: "Windows support model for ai-toolkit: WSL, Git Bash, dependency detection, and hook runtime constraints."
11357
+ ---
11358
+
11359
+ # Windows Support
11360
+
11361
+ ai-toolkit supports Windows through two practical modes:
11362
+
11363
+ 1. **WSL recommended** — best compatibility for Bash hooks, POSIX paths, symlinks, and editor configs.
11364
+ 2. **Native Windows with Git Bash** — supported for CLI usage when Bash is available on `PATH`.
11365
+
11366
+ ## Dependency Detection
11367
+
11368
+ `scripts/check_deps.py` now emits install hints for Windows package managers:
11369
+
11370
+ | Manager | Command Prefix |
11371
+ |---------|----------------|
11372
+ | winget | `winget install` |
11373
+ | Chocolatey | `choco install -y` |
11374
+ | Scoop | `scoop install` |
11375
+
11376
+ Required dependency package IDs:
11377
+
11378
+ | Dependency | winget | Chocolatey | Scoop |
11379
+ |------------|--------|------------|-------|
11380
+ | Python 3 | `Python.Python.3` | `python` | `python` |
11381
+ | Git | `Git.Git` | `git` | `git` |
11382
+ | Node.js | `OpenJS.NodeJS` | `nodejs` | `nodejs` |
11383
+
11384
+ ## Hook Runtime
11385
+
11386
+ ai-toolkit hooks are Bash scripts. On Windows, use WSL or Git Bash so Claude Code can execute `~/.softspark/ai-toolkit/hooks/*.sh`.
11387
+
11388
+ Cross-platform hooks should keep the Bash entrypoint small and delegate complex work to Python or Node when Windows behavior diverges.
11389
+
11390
+ ## Verification
11391
+
11392
+ ```bash
11393
+ ai-toolkit doctor
11394
+ python3 scripts/check_deps.py
11395
+ python3 scripts/validate.py
11396
+ ```
11397
+
11398
+ The Windows support contract is covered by `tests/test_windows_support.bats`.
11399
+
11400
+ ---
11401
+
11216
11402
  ## kb/troubleshooting/README.md
11217
11403
 
11218
11404
  ---
package/llms.txt CHANGED
@@ -58,4 +58,5 @@
58
58
  - [Supported Tools Registry](kb/reference/supported-tools-registry.md)
59
59
  - [Config Sync](kb/reference/sync.md)
60
60
  - [Unique Features & Differentiators](kb/reference/unique-features.md)
61
+ - [Windows Support](kb/reference/windows-support.md)
61
62
  - [Troubleshooting](kb/troubleshooting/README.md)
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.0.0",
2
+ "version": "3.0.2",
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": "3.0.0",
3
+ "version": "3.0.2",
4
4
  "description": "AI coding toolkit: 99 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",
@@ -62,7 +62,11 @@
62
62
  "generate:codex-rules": "python3 scripts/generate_codex_rules.py .",
63
63
  "generate:opencode-agents": "python3 scripts/generate_opencode_agents.py .",
64
64
  "generate:opencode-commands": "python3 scripts/generate_opencode_commands.py .",
65
- "generate:all": "npm run generate:agents && npm run generate:codex-rules && npm run generate:opencode-agents && npm run generate:opencode-commands && npm run generate:cursor && npm run generate:windsurf && npm run generate:copilot && npm run generate:gemini && npm run generate:cline && npm run generate:roo && npm run generate:aider && npm run generate:llms"
65
+ "generate:cursor-mdc": "python3 scripts/generate_cursor_mdc.py .",
66
+ "generate:windsurf-rules": "python3 scripts/generate_windsurf_rules.py .",
67
+ "generate:roo-rules": "python3 scripts/generate_roo_rules.py .",
68
+ "generate:augment-rules": "python3 scripts/generate_augment_rules.py .",
69
+ "generate:all": "npm run generate:agents && npm run generate:codex-rules && npm run generate:opencode-agents && npm run generate:opencode-commands && npm run generate:cursor && npm run generate:cursor-mdc && npm run generate:windsurf && npm run generate:windsurf-rules && npm run generate:copilot && npm run generate:gemini && npm run generate:cline && npm run generate:roo && npm run generate:roo-rules && npm run generate:aider && npm run generate:augment-rules && npm run generate:llms"
66
70
  },
67
71
  "files": [
68
72
  "bin/",
@@ -165,6 +165,27 @@ def detect_os() -> dict[str, str]:
165
165
  "install_cmd": install_cmd,
166
166
  }
167
167
 
168
+ if system == "windows":
169
+ managers = (
170
+ ("winget", "winget install"),
171
+ ("choco", "choco install -y"),
172
+ ("scoop", "scoop install"),
173
+ )
174
+ for manager, install_cmd in managers:
175
+ if shutil.which(manager):
176
+ return {
177
+ "os": "Windows",
178
+ "distro": platform.version(),
179
+ "pkg_manager": manager,
180
+ "install_cmd": install_cmd,
181
+ }
182
+ return {
183
+ "os": "Windows",
184
+ "distro": platform.version(),
185
+ "pkg_manager": "none",
186
+ "install_cmd": "",
187
+ }
188
+
168
189
  return {
169
190
  "os": system,
170
191
  "distro": "",