@softspark/ai-toolkit 2.11.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/AGENTS.md +21 -21
  2. package/CHANGELOG.md +62 -0
  3. package/README.md +16 -9
  4. package/app/.claude-plugin/plugin.json +1 -1
  5. package/app/agents/meta-architect.md +44 -0
  6. package/app/skills/agent-creator/SKILL.md +22 -6
  7. package/app/skills/analyze/SKILL.md +21 -1
  8. package/app/skills/api-patterns/SKILL.md +27 -0
  9. package/app/skills/app-builder/SKILL.md +24 -0
  10. package/app/skills/architecture-audit/SKILL.md +24 -0
  11. package/app/skills/architecture-decision/SKILL.md +24 -0
  12. package/app/skills/biz-scan/SKILL.md +24 -0
  13. package/app/skills/brand-voice/SKILL.md +36 -0
  14. package/app/skills/briefing/SKILL.md +41 -1
  15. package/app/skills/build/SKILL.md +24 -1
  16. package/app/skills/chaos/SKILL.md +22 -1
  17. package/app/skills/ci/SKILL.md +22 -1
  18. package/app/skills/ci-cd-patterns/SKILL.md +25 -0
  19. package/app/skills/command-creator/SKILL.md +31 -2
  20. package/app/skills/content-moderation-patterns/SKILL.md +25 -0
  21. package/app/skills/database-patterns/SKILL.md +25 -0
  22. package/app/skills/debug/SKILL.md +23 -1
  23. package/app/skills/design-engineering/SKILL.md +25 -0
  24. package/app/skills/docker-devops/SKILL.md +26 -0
  25. package/app/skills/ecommerce-patterns/SKILL.md +26 -0
  26. package/app/skills/evaluate/SKILL.md +22 -1
  27. package/app/skills/evolve/SKILL.md +25 -0
  28. package/app/skills/explain/SKILL.md +26 -1
  29. package/app/skills/explore/SKILL.md +25 -0
  30. package/app/skills/fix/SKILL.md +26 -1
  31. package/app/skills/git-mastery/SKILL.md +26 -0
  32. package/app/skills/grill-me/SKILL.md +22 -7
  33. package/app/skills/health/SKILL.md +22 -1
  34. package/app/skills/hipaa-validate/SKILL.md +25 -8
  35. package/app/skills/hook-creator/SKILL.md +107 -14
  36. package/app/skills/index/SKILL.md +22 -1
  37. package/app/skills/instinct-review/SKILL.md +25 -1
  38. package/app/skills/introspect/SKILL.md +26 -1
  39. package/app/skills/lint/SKILL.md +27 -1
  40. package/app/skills/mcp-builder/SKILL.md +27 -0
  41. package/app/skills/mem-search/SKILL.md +40 -0
  42. package/app/skills/migrate/SKILL.md +27 -1
  43. package/app/skills/migration-patterns/SKILL.md +26 -0
  44. package/app/skills/night-watch/SKILL.md +22 -1
  45. package/app/skills/observability-patterns/SKILL.md +26 -0
  46. package/app/skills/onboard/SKILL.md +22 -1
  47. package/app/skills/panic/SKILL.md +21 -1
  48. package/app/skills/performance-profiling/SKILL.md +34 -0
  49. package/app/skills/persona/SKILL.md +21 -4
  50. package/app/skills/plan/SKILL.md +26 -0
  51. package/app/skills/plan-writing/SKILL.md +26 -0
  52. package/app/skills/plugin-creator/SKILL.md +23 -6
  53. package/app/skills/pr/SKILL.md +24 -1
  54. package/app/skills/prd-to-issues/SKILL.md +22 -6
  55. package/app/skills/prd-to-plan/SKILL.md +22 -4
  56. package/app/skills/predict/SKILL.md +25 -0
  57. package/app/skills/qa-session/SKILL.md +23 -7
  58. package/app/skills/rag-patterns/SKILL.md +26 -0
  59. package/app/skills/refactor/SKILL.md +26 -0
  60. package/app/skills/refactor-plan/SKILL.md +23 -6
  61. package/app/skills/rollback/SKILL.md +27 -1
  62. package/app/skills/security-patterns/SKILL.md +27 -0
  63. package/app/skills/skill-audit/SKILL.md +22 -5
  64. package/app/skills/skill-creator/SKILL.md +58 -13
  65. package/app/skills/swift-patterns/SKILL.md +27 -107
  66. package/app/skills/swift-patterns/reference/frameworks.md +111 -0
  67. package/app/skills/test/SKILL.md +23 -1
  68. package/app/skills/testing-patterns/SKILL.md +26 -0
  69. package/app/skills/triage-issue/SKILL.md +22 -4
  70. package/app/skills/ubiquitous-language/SKILL.md +23 -8
  71. package/benchmarks/ecosystem-doctor-snapshot.json +395 -0
  72. package/kb/history/completed/deep-coverage-v3-20260423.md +160 -0
  73. package/kb/history/completed/ecosystem-deep-sweep-20260423.md +273 -0
  74. package/kb/procedures/ecosystem-sync-sop.md +255 -0
  75. package/kb/procedures/maintenance-sop.md +13 -2
  76. package/kb/procedures/release-preparation-sop.md +91 -12
  77. package/kb/procedures/release-verification-sop.md +24 -6
  78. package/kb/reference/global-install-model.md +15 -2
  79. package/kb/reference/supported-tools-registry.md +229 -0
  80. package/llms-full.txt +1105 -43
  81. package/llms.txt +4 -0
  82. package/manifest.json +1 -1
  83. package/package.json +4 -1
  84. package/scripts/ecosystem_doctor.py +348 -0
  85. package/scripts/ecosystem_tools.json +500 -0
  86. package/scripts/evaluate_skills.py +84 -0
  87. package/scripts/generate_aider_conf.py +26 -1
  88. package/scripts/generate_antigravity.py +77 -8
  89. package/scripts/generate_augment_agents.py +161 -0
  90. package/scripts/generate_augment_commands.py +160 -0
  91. package/scripts/generate_augment_hooks.py +162 -0
  92. package/scripts/generate_augment_skills.py +98 -0
  93. package/scripts/generate_cline_rules.py +96 -9
  94. package/scripts/generate_codex_hooks.py +13 -2
  95. package/scripts/generate_codex_skills.py +195 -0
  96. package/scripts/generate_copilot.py +296 -18
  97. package/scripts/generate_cursor_agents.py +144 -0
  98. package/scripts/generate_cursor_hooks.py +155 -0
  99. package/scripts/generate_cursor_mdc.py +20 -8
  100. package/scripts/generate_gemini_commands.py +158 -0
  101. package/scripts/generate_gemini_hooks.py +159 -0
  102. package/scripts/generate_gemini_skills.py +98 -0
  103. package/scripts/generate_roo_modes.py +42 -1
  104. package/scripts/generate_windsurf_hooks.py +143 -0
  105. package/scripts/generate_windsurf_rules.py +162 -10
  106. package/scripts/install.py +11 -2
  107. package/scripts/install_steps/ai_tools.py +120 -5
  108. package/scripts/validate.py +20 -3
@@ -0,0 +1,273 @@
1
+ ---
2
+ title: "Plan: Ecosystem Deep Sweep — All 12 Supported Tools"
3
+ category: planning
4
+ service: ai-toolkit
5
+ doc_type: plan
6
+ status: completed
7
+ tags: [ecosystem, editors, generators, deep-sweep, orchestrate, drift, integration]
8
+ created: "2026-04-23"
9
+ last_updated: "2026-04-23"
10
+ completed: "2026-04-23"
11
+ completion: "100%"
12
+ description: "Orchestrate-ready plan for a deep per-tool documentation sweep across all 12 supported tools (Claude Code + 11 editors). Each agent owns 2-3 tools: fetches docs, diffs against our generators, proposes minimal patches. Consolidation step collects results into a single changeset."
13
+ ---
14
+
15
+ # Plan: Ecosystem Deep Sweep — All 12 Supported Tools
16
+
17
+ **Status:** :yellow_circle: PROPOSED
18
+ **Invocation:** `/orchestrate deep ecosystem sweep per kb/planning/ecosystem-deep-sweep-2026-04-23.md`
19
+ **Estimated effort:** 4-6 hours orchestrated (1-1.5 h per agent in parallel)
20
+ **Deliverable:** Per-tool drift report + concrete generator/skill patches + updated registry
21
+
22
+ ---
23
+
24
+ ## 1. Objective
25
+
26
+ For every supported tool in `scripts/ecosystem_tools.json`:
27
+
28
+ 1. Read the current official documentation end-to-end (not just landing page)
29
+ 2. Identify every feature that ai-toolkit could integrate with but does not currently
30
+ 3. Classify each gap using the ecosystem-sync SOP taxonomy (class A-F)
31
+ 4. Produce minimal, reviewable patches for class B/D/E/F gaps
32
+ 5. Update the registry (`ecosystem_tools.json`) with new capability markers and config paths
33
+ 6. Refresh the snapshot (`benchmarks/ecosystem-doctor-snapshot.json`)
34
+
35
+ **Explicit non-goals:** complete feature parity, deep refactor of generators, adding new editors to the roster.
36
+
37
+ ---
38
+
39
+ ## 2. Parallelization Strategy
40
+
41
+ 12 tools → **4 agents × 3 tools each** by affinity and complexity:
42
+
43
+ | Agent | Role | Tools | Rationale |
44
+ |-------|------|-------|-----------|
45
+ | `backend-specialist` | Deep CLI / config analysis | `claude-code`, `codex-cli`, `opencode` | CLI + config.toml + agents/commands/plugins — backend integration depth |
46
+ | `frontend-specialist` | Editor UI integrations | `cursor`, `windsurf`, `google-antigravity` | Editor-embedded AI, rule files, MCP-via-UI |
47
+ | `devops-implementer` | Pipeline + rules tools | `github-copilot`, `cline`, `roo-code` | Rules directories, MCP JSON variants, mode configs |
48
+ | `ai-engineer` | LLM-native tools | `gemini-cli`, `aider`, `augment` | Pure LLM workflows, minimal IDE coupling |
49
+
50
+ Each agent works **in parallel**, independent file scopes (different generators). Cross-file coordination only at the registry update (single JSON file).
51
+
52
+ ---
53
+
54
+ ## 3. Per-Tool Task Template
55
+
56
+ Every agent applies the **same 7-step protocol** per tool in their bucket:
57
+
58
+ ### Step 1 — Baseline our current integration
59
+
60
+ Read these files (read-only):
61
+ - `scripts/generate_<tool>_*.py` — every generator targeting this tool
62
+ - `scripts/ecosystem_tools.json` — the tool's registry entry
63
+ - `kb/reference/supported-tools-registry.md` — human docs section
64
+ - `benchmarks/ecosystem-doctor-snapshot.json` — last-seen headings/markers/version
65
+
66
+ Produce a 3-line summary: "we currently generate X, Y, Z for this tool".
67
+
68
+ ### Step 2 — Fetch official docs
69
+
70
+ Primary URL is in `ecosystem_tools.json::urls.docs`. Additionally fetch:
71
+ - `urls.release_notes` — recent changes (last 6 months)
72
+ - `urls.changelog` — if distinct from release notes
73
+ - Any deep-link from the docs landing page that corresponds to an integration surface (rules, hooks, MCP, agents, commands, plugins, config schema)
74
+
75
+ Use `WebFetch` (for general) or `gh api` (for GitHub-hosted docs like Codex CLI, opencode).
76
+
77
+ ### Step 3 — Extract the feature surface
78
+
79
+ For the current version of the tool, enumerate:
80
+ - Config file paths (the tool's OWN paths, not ours)
81
+ - Rule / instruction / prompt formats
82
+ - Hook / lifecycle event names (if any)
83
+ - MCP config target path (if supported)
84
+ - Agent / custom-mode / preset concepts (if any)
85
+ - Slash command / CLI subcommand surface
86
+ - Supported model providers (note, do not integrate)
87
+ - Authentication / API-key mechanisms
88
+
89
+ Produce a structured markdown table: `Feature | Since version | Stable? | Our integration?`
90
+
91
+ ### Step 4 — Diff against our output
92
+
93
+ For each feature in the table, compare against:
94
+ - What our `generate_<tool>_*.py` produces
95
+ - What fields are in our registry's `capability_markers`
96
+
97
+ Mark each row with one of:
98
+ - `✅ supported` — we already emit / track it
99
+ - `⚠️ partial` — we emit a subset; specific sub-feature missing
100
+ - `❌ missing` — we do not support at all
101
+ - `➖ out of scope` — tool has it, but not applicable to ai-toolkit's mission
102
+
103
+ ### Step 5 — Classify each gap
104
+
105
+ For each `⚠️` / `❌` row, assign one of the SOP drift classes:
106
+
107
+ | Class | Name | Action |
108
+ |-------|------|--------|
109
+ | A | Cosmetic | No code change; update snapshot only |
110
+ | B | New feature — integrate | Patch generator(s), add tests |
111
+ | C | New feature — not adopted | Note in registry, no code |
112
+ | D | Deprecation | Migration warning in generator + CHANGELOG |
113
+ | E | Feature promoted to default | Simplify generator; keep fallback comment |
114
+ | F | Newly globally available | New generator / extended generator |
115
+
116
+ ### Step 6 — Produce patches (class B/D/E/F only)
117
+
118
+ For every class B/D/E/F gap:
119
+ 1. Edit the relevant generator in `scripts/generate_<tool>_*.py`
120
+ 2. If a new capability marker emerges, add to `ecosystem_tools.json::capability_markers`
121
+ 3. If a new config path emerges, add to `ecosystem_tools.json::config_paths`
122
+ 4. If a hook event or skill frontmatter field emerges (for Claude Code), update:
123
+ - `app/skills/hook-creator/SKILL.md` (hooks table)
124
+ - `app/skills/skill-creator/SKILL.md` (frontmatter reference)
125
+ - `scripts/validate.py` (allowlist)
126
+ 5. Add a bats test under `tests/test_<tool>.bats` covering the new output
127
+ 6. Update the tool's section in `kb/reference/supported-tools-registry.md`
128
+
129
+ **Constraints on patches:**
130
+ - One generator change per logical feature (no "big bang" commits)
131
+ - Preserve existing output format for backward compatibility
132
+ - New output opt-in via flag if it would change existing user-visible state
133
+ - Every new capability marker must pass the doctor's probe on the live docs page
134
+
135
+ ### Step 7 — Report
136
+
137
+ Each agent emits a single markdown report with:
138
+ - Feature matrix table (step 3+4+5 combined)
139
+ - List of patches applied (files changed, bats tests added)
140
+ - List of class B/D/E/F gaps NOT patched (with reason: "out of scope", "requires user decision", "blocker")
141
+ - Registry diff (before/after for the tool's JSON entry)
142
+
143
+ ---
144
+
145
+ ## 4. Consolidation (after all agents finish)
146
+
147
+ Run in order:
148
+
149
+ 1. Merge registry entries — single edit to `ecosystem_tools.json` combining all 12 per-tool updates
150
+ 2. Regenerate human registry doc: manually update `kb/reference/supported-tools-registry.md` from JSON
151
+ 3. `python3 scripts/ecosystem_doctor.py --update` — baseline new capability markers
152
+ 4. `python3 scripts/validate.py --strict` — must pass
153
+ 5. `npm test` — must pass (includes the newly added bats tests per tool)
154
+ 6. `python3 scripts/ecosystem_doctor.py --check` — exit 0
155
+ 7. Regenerate downstream artifacts:
156
+ ```bash
157
+ npm run generate:all
158
+ ```
159
+ 8. Collect all per-agent reports into `kb/learnings/ecosystem-sweep-2026-04-23.md`
160
+
161
+ ---
162
+
163
+ ## 5. Success Criteria
164
+
165
+ - [ ] All 12 tools covered (no "skipped for time" items)
166
+ - [ ] Every class B/D/E/F gap has either a patch OR a documented reason for deferral
167
+ - [ ] Registry `capability_markers` list grew for at least 6 of 12 tools (signals real gap coverage)
168
+ - [ ] `validate.py --strict`: 0 errors, 0 warnings
169
+ - [ ] `npm test`: all green (including new per-tool bats tests)
170
+ - [ ] `ecosystem_doctor.py --check`: exit 0 after snapshot refresh
171
+ - [ ] Single consolidated commit per agent-bucket, plus one final consolidation commit
172
+
173
+ ---
174
+
175
+ ## 6. Known Traps (from prior ecosystem work)
176
+
177
+ - **SPA docs** (Cursor, Antigravity, some Augment pages): `urllib` gets empty HTML skeleton. Agents should note this and do a **manual browser visit** or use a JS-aware fetcher. Do not treat "0 headings" as "nothing new".
178
+ - **GitHub docs** rate-limit aggressively on repeated reads. Space out fetches or use `gh api`.
179
+ - **Feature gates** vary by user plan. Copilot Business vs Individual vs Enterprise have different surface. Integrate with the OSS surface; document gated features as C (not adopted).
180
+ - **Version skew** on config schemas. A setting that existed in v1.x may be deprecated in v2.x. When docs reference "available since v1.5" and we don't know what version users run, default to generating the newer form with a comment.
181
+ - **Markdown vs MDX**: Cursor uses `.mdc`, Claude Code uses `.md`, Cline uses `.md` in `.clinerules/`, Roo uses `.md` in `.roo/rules/`. Don't assume one format fits all.
182
+
183
+ ---
184
+
185
+ ## 7. Orchestrate Invocation
186
+
187
+ In a fresh Claude Code session (to avoid context rot from this session):
188
+
189
+ ```
190
+ /orchestrate deep ecosystem sweep for ai-toolkit per kb/planning/ecosystem-deep-sweep-2026-04-23.md
191
+
192
+ Spawn 4 agents in parallel:
193
+ - backend-specialist: claude-code, codex-cli, opencode
194
+ - frontend-specialist: cursor, windsurf, google-antigravity
195
+ - devops-implementer: github-copilot, cline, roo-code
196
+ - ai-engineer: gemini-cli, aider, augment
197
+
198
+ Each agent follows the 7-step per-tool protocol in section 3.
199
+ After all 4 report, run consolidation (section 4) and produce the sweep summary.
200
+ ```
201
+
202
+ ---
203
+
204
+ ## 8. Deliverables (per agent)
205
+
206
+ Each agent's final output to orchestrator:
207
+ 1. **Feature matrix** — one table per assigned tool (step 3+4+5)
208
+ 2. **Patch log** — list of commits staged (not committed yet — orchestrator consolidates)
209
+ 3. **Registry delta** — proposed JSON diff for `ecosystem_tools.json`
210
+ 4. **Gaps not patched** — with rationale (out-of-scope, blocker, deferred)
211
+ 5. **Test additions** — bats test file names + test count
212
+
213
+ Orchestrator's final output:
214
+ 1. Consolidated commit with message `feat(ecosystem): deep sweep 2026-04-23 — N class B/F integrations`
215
+ 2. Version bump decision (minor if any class B/F, patch if only class A updates)
216
+ 3. `kb/learnings/ecosystem-sweep-2026-04-23.md` — retrospective noting which tools needed most work (informs priority for next sweep)
217
+
218
+ ---
219
+
220
+ ## 9. Safety Rails
221
+
222
+ - **Do not** silently upgrade default behavior — every user-visible change lands behind a flag OR goes through a minor version bump with CHANGELOG mention
223
+ - **Do not** rewrite generators wholesale — incremental additions only
224
+ - **Do not** commit during the sweep — orchestrator consolidates at the end
225
+ - **Do not** modify files outside the tool's scope (e.g., backend-specialist touching frontend-specialist's files requires a handoff)
226
+ - **Do** preserve existing symlinks and file-path expectations — the installer depends on them
227
+
228
+ ---
229
+
230
+ ## 10. Related
231
+
232
+ - [Ecosystem Sync SOP](../procedures/ecosystem-sync-sop.md) — the process this plan instantiates
233
+ - [Supported Tools Registry](../reference/supported-tools-registry.md) — source of truth for tool list
234
+ - `scripts/ecosystem_doctor.py` — drift detector consumed by orchestrator consolidation
235
+ - `scripts/ecosystem_tools.json` — registry file edited by every agent
236
+
237
+ ---
238
+
239
+ ## 11. Retrospective — 2026-04-23
240
+
241
+ ### Execution summary
242
+
243
+ - 4 parallel agents, 3 tools each — full 12/12 coverage, one consolidation pass.
244
+ - 161 new bats tests (679 → 840); validate.py 0 errors / 0 warnings; `ecosystem_doctor --check` exit 0.
245
+ - 14 files modified, 12 new test files, 2 registry docs updated, 1 snapshot rebaselined.
246
+
247
+ ### What worked
248
+
249
+ - **Bucket-level file ownership** eliminated merge conflicts entirely. Agents that flagged cross-bucket edits (`ecosystem_tools.json`, registry markdown) correctly left them for the orchestrator.
250
+ - **The 7-step protocol** caught high-impact bugs we would have shipped otherwise — Windsurf rules missing `trigger:` frontmatter (silent invisibility to Cascade), Aider's default `attribute-co-authored-by: true` violating our own git policy, Roo modes lacking `whenToUse` (invisible to Orchestrator).
251
+ - **SPA-wall compensation patterns** (Antigravity bundle strings, Cursor/Windsurf llms.txt mirrors, GitHub release notes as fallback) were reusable across buckets.
252
+
253
+ ### What surprised us
254
+
255
+ - **Claude Code 2.1.x grew ~14 new hook events** and 3 new handler types since our last sync. Our validate.py allowlist was the bottleneck, not any generator.
256
+ - **Cross-editor compat reads**: Cursor, Windsurf, and opencode now natively read `.claude/skills/` and `.claude/agents/` — we get skill/agent discovery in those editors "for free" without emitting duplicates. Saved ~300 generated files.
257
+ - **Copilot tier-gating is heavy**: half of the upstream surface (custom agents, repo MCP, org instructions) is Business/Enterprise-only and was classified as C (documented non-integration).
258
+ - **Test #755 regression** from the Codex `PermissionRequest` addition: the test counted `guard-destructive.sh` occurrences with `== 1`. Fixed by updating the expected count to 2 with a comment explaining why base hooks legitimately register it twice now.
259
+
260
+ ### Open items flagged for future passes
261
+
262
+ 1. **Native `.codex/skills/*/SKILL.md` emission** (class B) — would write ~99 skill directories. Needs opt-in flag + minor bump.
263
+ 2. **`.opencode/skills/` duplication** — deferred indefinitely; `.claude/skills/` fallback already works.
264
+ 3. **New generators needed**: `generate_gemini_hooks.py`, `generate_augment_agents.py`, `generate_augment_commands.py`, `generate_augment_hooks.py`.
265
+ 4. **Cross-editor hooks unification**: Cursor and Windsurf both shipped `.cursor/hooks.json` and `.windsurf/hooks.json` — worth a dedicated shared-schema pass rather than per-editor copies.
266
+ 5. **Roo `.roomodes` YAML variant** — upstream-preferred; deferred until a YAML multi-line helper is added.
267
+ 6. **Copilot install wiring**: new `.github/instructions/` and `.github/prompts/` directories are emitted when `generate_copilot.py` is called with a target dir, but `install_steps/ai_tools.py` doesn't invoke that path yet. Wire behind minor bump.
268
+
269
+ ### Process refinements for next sweep
270
+
271
+ - **Add a "class B/F deferred" register**: buckets produced these ad-hoc; a structured list in the plan would make prioritization for the next sweep trivial.
272
+ - **Cross-bucket test impact**: adding per-tool bats tests inflates the test count and trips the README badge validator. Next time, bump the badge at the start of consolidation, not at the end.
273
+ - **Search docs via llms.txt first** when the vendor publishes one — bypasses SPA walls with zero fallback logic.
@@ -0,0 +1,255 @@
1
+ ---
2
+ title: "SOP: Ecosystem Sync"
3
+ category: procedures
4
+ service: ai-toolkit
5
+ tags: [sop, ecosystem, editors, generators, drift-detection, sync]
6
+ version: "1.0.0"
7
+ created: "2026-04-23"
8
+ last_updated: "2026-04-23"
9
+ description: "Quarterly (or event-triggered) sync procedure that detects documentation and capability drift in supported tools (Claude Code + 11 editors), analyses our generators and skills for missing features, and walks through the migration + generator-update workflow."
10
+ ---
11
+
12
+ # SOP: Ecosystem Sync
13
+
14
+ Keeps ai-toolkit aligned with the tools it integrates with. When an editor adds a new hook lifecycle, makes a feature globally available, changes a config path, or deprecates a flag, this SOP surfaces it before it surprises users.
15
+
16
+ **When to run:**
17
+ - **Every quarter** as a baseline health check (calendar reminder)
18
+ - **Before every minor release** of ai-toolkit (Phase 0 of release prep)
19
+ - **Whenever an editor ships a major version** (subscribe to their changelogs)
20
+ - **On demand** if a user reports "feature X exists but toolkit doesn't support it"
21
+
22
+ **Time:** 30 minutes for drift review + variable for any generator updates
23
+
24
+ ---
25
+
26
+ ## Quick Reference
27
+
28
+ ```bash
29
+ # Full check (all 12 tools, online)
30
+ python3 scripts/ecosystem_doctor.py --format text
31
+
32
+ # Single tool
33
+ python3 scripts/ecosystem_doctor.py --tool cursor --format text
34
+
35
+ # First-ever run — baseline the snapshot
36
+ python3 scripts/ecosystem_doctor.py --update > /dev/null
37
+
38
+ # CI / gating mode
39
+ python3 scripts/ecosystem_doctor.py --check
40
+
41
+ # Offline (no network) — validates our side only
42
+ python3 scripts/ecosystem_doctor.py --offline --format text
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Inputs
48
+
49
+ | File | Purpose |
50
+ |------|---------|
51
+ | `scripts/ecosystem_tools.json` | Authoritative registry: 12 tools with doc URLs, config paths, our generators, capability markers |
52
+ | `benchmarks/ecosystem-doctor-snapshot.json` | Last-seen state (headings, content hash, markers, version) — updated via `--update` |
53
+ | `scripts/ecosystem_doctor.py` | Drift detector |
54
+ | `kb/reference/supported-tools-registry.md` | Human-readable view of the registry |
55
+
56
+ ---
57
+
58
+ ## Phase 1: Run the Doctor
59
+
60
+ ```bash
61
+ python3 scripts/ecosystem_doctor.py --format text > /tmp/eco-report.txt
62
+ cat /tmp/eco-report.txt
63
+ ```
64
+
65
+ The report classifies every tool into:
66
+
67
+ - **Clean** — doc page, headings, and markers match the last snapshot; no action
68
+ - **Drift** — something changed upstream. Each drift entry has a `kind`:
69
+ - `headings_added` — the doc grew new sections (new features? reorg?)
70
+ - `headings_removed` — a section disappeared (deprecation? renaming?)
71
+ - `marker_flips` — an expected capability marker appeared (`+`) or vanished (`-`)
72
+ - `content_changed_no_heading_delta` — prose edits, reorder, minor rewrites, OR HTML churn (timestamps, ads, CSRF nonces). Reported but **not** treated as drift by `--check` — too noisy on dynamic pages.
73
+ - `version_changed` — the CLI version bumped (for tools that expose `--version`)
74
+ - **Errored** — couldn't fetch docs (timeout, 404, auth wall). Doctor does not overwrite
75
+ the snapshot for errored tools; the last-known-good state persists.
76
+
77
+ ---
78
+
79
+ ## Phase 2: Classify Each Drift
80
+
81
+ For every drifting tool, read its docs URL and classify the change into exactly one bucket:
82
+
83
+ | Drift class | What it means | Action owner |
84
+ |-------------|---------------|--------------|
85
+ | **A. Cosmetic reword** | Prose edited, same feature set | Update snapshot (`--update`), no code change |
86
+ | **B. New feature — we should integrate** | New hook event, new config key, new CLI flag, new rule surface | Update the relevant generator in `scripts/generate_<tool>_*.py`; extend `app/skills/*` or `app/agents/*` if the feature maps onto our skills; document in `kb/reference/supported-tools-registry.md` |
87
+ | **C. New feature — not our concern** | Enterprise SSO, billing, proprietary UI-only features | Note in registry `capability_markers` as "not adopted"; update snapshot |
88
+ | **D. Deprecation** | Flag or path removed / renamed | Open migration issue; coordinate with `ai-toolkit install` and generator output; add deprecation warning to CLAUDE.md rules if user-facing |
89
+ | **E. Feature promoted to default** | Was behind a flag, now global | Remove the flag from generator output; simplify our installer |
90
+ | **F. Global availability** | Was editor-only, now also available via CLI / hooks / settings.json | Map new config surface; may require a new generator or extending an existing one |
91
+
92
+ Write one line per drift in `/tmp/eco-report.txt` with its class. Example:
93
+
94
+ ```
95
+ cursor: headings_added [AGENTS.md support] -> class B (integrate: extend generate_cursor_mdc.py)
96
+ aider: version_changed 0.70 -> 0.72 -> class A (cosmetic, --update)
97
+ windsurf: marker_flips +Cascade -> class B (already supported, verify snapshot)
98
+ ```
99
+
100
+ ---
101
+
102
+ ## Phase 3: Execute Changes
103
+
104
+ ### For class B (new feature — integrate)
105
+
106
+ 1. Read the tool's docs section that introduced the feature. Note the exact config key / hook name / file path.
107
+ 2. Open the relevant generator (`scripts/generate_<tool>_*.py`) and add output for the new surface.
108
+ 3. If the feature is a **hook event**, also update:
109
+ - `app/hooks.json` (if Claude-Code-native)
110
+ - `app/skills/hook-creator/SKILL.md` — add the event to the Supported Hook Events table
111
+ - `scripts/inject_hook_cli.py` — if the hook target path differs
112
+ 4. If the feature is a **skill/agent schema extension**:
113
+ - Update `app/skills/skill-creator/SKILL.md` and `app/skills/command-creator/SKILL.md` templates
114
+ - Update `scripts/validate.py` field allowlists
115
+ - Update `kb/reference/agent-skills-spec.md` (if the change is an upstream spec change)
116
+ 5. Add a bats test under `tests/test_<tool>.bats` covering the new output.
117
+ 6. Regenerate artifacts: `npm run generate:all`.
118
+
119
+ ### For class D (deprecation)
120
+
121
+ 1. Open a migration issue in GitHub with "class: deprecation" and a link to the upstream changelog.
122
+ 2. In the generator, mark the deprecated output path as emitting a comment: `# DEPRECATED: <link>, removed in <version>`.
123
+ 3. If deprecation affects `ai-toolkit install --local --editors <tool>`, add a doctor check that warns when a user's repo still contains the deprecated file.
124
+
125
+ ### For class E / F (feature promotion)
126
+
127
+ 1. Simplify the generator to emit the new-default form; keep a fallback comment for users on older tool versions.
128
+ 2. Update `kb/reference/supported-tools-registry.md` config-paths column.
129
+
130
+ ### For class A / C (no code change)
131
+
132
+ 1. Run `python3 scripts/ecosystem_doctor.py --update --tool <id>` to refresh that tool's snapshot.
133
+
134
+ ---
135
+
136
+ ## Phase 4: Update the Registry
137
+
138
+ If new capability markers, config paths, or doc URLs emerged during Phase 3, edit `scripts/ecosystem_tools.json`:
139
+
140
+ ```bash
141
+ ${EDITOR:-nvim} scripts/ecosystem_tools.json
142
+ ```
143
+
144
+ Fields to consider updating:
145
+ - `urls.docs` — if the vendor moved their docs
146
+ - `urls.release_notes` — if the changelog location changed
147
+ - `config_paths` — if new files now ship in our install output
148
+ - `our_generators` — if a new generator was added
149
+ - `capability_markers` — if a new feature was adopted
150
+ - `version_probe.command` — if the CLI binary was renamed
151
+
152
+ After editing, increment `last_updated` in the registry and save the snapshot:
153
+
154
+ ```bash
155
+ python3 scripts/ecosystem_doctor.py --update
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Phase 5: Validate
161
+
162
+ ```bash
163
+ python3 scripts/validate.py --strict
164
+ python3 scripts/audit_skills.py --ci
165
+ python3 scripts/ecosystem_doctor.py --check # exits 0 after --update
166
+ npm test
167
+ ```
168
+
169
+ All four must pass before committing generator / registry changes.
170
+
171
+ ---
172
+
173
+ ## Phase 6: Commit
174
+
175
+ Use a structured commit per change class:
176
+
177
+ ```bash
178
+ git add scripts/ecosystem_tools.json benchmarks/ecosystem-doctor-snapshot.json
179
+ git add scripts/generate_<tool>_*.py # if class B/D/E/F
180
+ git add app/skills/<skill>/SKILL.md # if templates touched
181
+ git add kb/reference/supported-tools-registry.md
182
+ git commit -m "chore(ecosystem): sync <tool> — <brief summary>"
183
+ ```
184
+
185
+ Recommended commit messages by class:
186
+
187
+ | Class | Template |
188
+ |-------|----------|
189
+ | A | `chore(ecosystem): refresh <tool> snapshot (cosmetic docs update)` |
190
+ | B | `feat(<tool>): add support for <feature>` |
191
+ | C | `chore(ecosystem): note <tool> <feature> as not-adopted` |
192
+ | D | `feat(<tool>): deprecation warning for <old-path>` |
193
+ | E | `refactor(<tool>): remove flag for <feature> (now default)` |
194
+ | F | `feat(<tool>): add <new-surface> generator` |
195
+
196
+ ---
197
+
198
+ ## Gotchas
199
+
200
+ - **First run has no baseline.** On a machine where `benchmarks/ecosystem-doctor-snapshot.json` does not exist, every tool shows as clean (no prior state to diff against). Run `--update` once to seed, then run again to see real drift.
201
+ - **Documentation sites use client-side rendering.** Aider, opencode, and Antigravity serve most content via JavaScript. `urllib` fetches the bare HTML skeleton — the doctor only sees a few headings. Combine the automated check with a manual visit to the docs on these tools.
202
+ - **Release notes pages change structure more often than docs.** Cursor and Windsurf refactor their changelog layouts periodically; a heading delta from a changelog page is often a presentation change, not a feature change. Classify as A when in doubt.
203
+ - **Version probes require the CLI to be installed locally.** `gemini --version`, `aider --version`, etc. are skipped silently when the binary isn't on `$PATH`. The snapshot therefore omits version drift for tools you haven't installed — that is intentional, not a bug.
204
+ - **GitHub release pages have anti-scraping.** `github.com/<org>/<repo>/releases` works via `urllib` but rate-limits aggressively. If the doctor errors on repeated runs, wait 10 minutes or manually review the release page.
205
+ - **Marker list is intentionally small.** Capability markers are a "did we adopt this?" checklist, not a feature coverage map. Adding every sub-feature bloats the JSON and produces noisy flips — keep markers at the top-level-capability tier.
206
+ - **`--check` only gates on structural drift.** Heading/marker/version changes and fetch errors exit `1`. Pure content-hash differences (`content_changed_no_heading_delta`) exit `0` — otherwise dynamic pages with timestamps or rotating ads would page you every run. If you want the strictest possible gate, grep for `Content changed` in the text report instead.
207
+
208
+ ---
209
+
210
+ ## Scheduling
211
+
212
+ Recommended cadence:
213
+
214
+ | Trigger | Action |
215
+ |---------|--------|
216
+ | Every Monday morning | `python3 scripts/ecosystem_doctor.py --format text` — scan during coffee |
217
+ | Before a minor release | Full sync + clean snapshot before tagging |
218
+ | After any drift report | Act within 1 week or record explicit "ignore, low priority" in the commit message |
219
+ | New tool added to the registry | Baseline with `--update --tool <id>` |
220
+ | Tool removed from support | Delete its entry from the registry AND from the snapshot JSON |
221
+
222
+ An optional GitHub Action can run `--check` weekly and open an issue on drift. Template:
223
+
224
+ ```yaml
225
+ # .github/workflows/ecosystem-doctor.yml (proposed, not yet committed)
226
+ on:
227
+ schedule:
228
+ - cron: '0 9 * * 1' # Mondays 09:00 UTC
229
+ workflow_dispatch: {}
230
+ jobs:
231
+ doctor:
232
+ runs-on: ubuntu-latest
233
+ steps:
234
+ - uses: actions/checkout@v4
235
+ - run: python3 scripts/ecosystem_doctor.py --format text | tee /tmp/doctor.txt
236
+ - run: python3 scripts/ecosystem_doctor.py --check
237
+ ```
238
+
239
+ ---
240
+
241
+ ## When NOT to Use
242
+
243
+ - For **runtime** user support (user hit a bug with an editor) — use `/debug` or `/triage-issue`
244
+ - For **picking** an editor to add — that is a product decision, not a sync; use `/architecture-decision`
245
+ - For **one-off** testing of a specific tool's install flow — use the release-verification SOP
246
+ - For **scaling up** the supported-tools list — add the new tool to the registry, then run the SOP to baseline it
247
+
248
+ ---
249
+
250
+ ## Related Documentation
251
+
252
+ - [Supported Tools Registry](../reference/supported-tools-registry.md) — human-readable per-tool breakdown
253
+ - [MCP Editor Compatibility](../reference/mcp-editor-compatibility.md) — MCP-specific adapter table
254
+ - [Maintenance SOP](maintenance-sop.md) — general toolkit upkeep
255
+ - [Release Preparation SOP](release-preparation-sop.md) — run the doctor before tagging
@@ -3,9 +3,9 @@ title: "SOP: Claude Toolkit Maintenance"
3
3
  category: procedures
4
4
  service: ai-toolkit
5
5
  tags: [sop, maintenance, agents, skills, install]
6
- version: "1.4.4"
6
+ version: "3.0.0"
7
7
  created: "2026-03-23"
8
- last_updated: "2026-04-13"
8
+ last_updated: "2026-04-23"
9
9
  description: "Standard operating procedures for installing, maintaining, and evolving the ai-toolkit."
10
10
  ---
11
11
 
@@ -91,6 +91,17 @@ What `install` and `update` do (merge-friendly — user content never overwritte
91
91
 
92
92
  Re-running updates only toolkit content. Old whole-directory symlinks are auto-upgraded to per-file on next run.
93
93
 
94
+ ### Install Profiles (v3.0.0)
95
+
96
+ | Profile | Claude Code core | Editor rules | Gemini hooks | Copilot dir layout | Per-editor hooks / sub-agents / commands | Git hooks |
97
+ |---------|:---------------:|:------------:|:------------:|:------------------:|:---------------------------------------:|:---------:|
98
+ | `minimal` | yes | pointer only | no | no | no | no |
99
+ | `standard` (default) | yes | yes | **yes** (new in v3) | **yes** (new in v3) | no | no |
100
+ | `strict` | yes | yes | yes | yes | no | yes |
101
+ | `full` | yes | yes | yes | yes | **yes, all editors** | optional |
102
+
103
+ `--codex-skills` is orthogonal to `--profile` and materializes the full skill catalog under `.agents/skills/` for Codex. See `kb/reference/global-install-model.md` for the full semantic breakdown.
104
+
94
105
  ---
95
106
 
96
107
  ## Update Toolkit