@softspark/ai-toolkit 2.12.0 → 3.0.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 +50 -0
- package/README.md +25 -8
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/skills/hook-creator/SKILL.md +84 -8
- package/app/skills/skill-creator/SKILL.md +8 -4
- package/benchmarks/ecosystem-doctor-snapshot.json +395 -0
- package/kb/history/completed/deep-coverage-v3-20260423.md +160 -0
- package/kb/history/completed/ecosystem-deep-sweep-20260423.md +273 -0
- package/kb/procedures/ecosystem-sync-sop.md +255 -0
- package/kb/procedures/maintenance-sop.md +13 -2
- package/kb/procedures/release-preparation-sop.md +94 -12
- package/kb/procedures/release-verification-sop.md +112 -8
- package/kb/reference/global-install-model.md +15 -2
- package/kb/reference/supported-tools-registry.md +229 -0
- package/llms-full.txt +1175 -24
- package/llms.txt +4 -0
- package/manifest.json +1 -1
- package/package.json +4 -1
- package/scripts/ecosystem_doctor.py +348 -0
- package/scripts/ecosystem_tools.json +500 -0
- package/scripts/generate_aider_conf.py +26 -1
- package/scripts/generate_antigravity.py +77 -8
- package/scripts/generate_augment_agents.py +161 -0
- package/scripts/generate_augment_commands.py +160 -0
- package/scripts/generate_augment_hooks.py +162 -0
- package/scripts/generate_augment_skills.py +98 -0
- package/scripts/generate_cline_rules.py +96 -9
- package/scripts/generate_codex_hooks.py +13 -2
- package/scripts/generate_codex_skills.py +195 -0
- package/scripts/generate_copilot.py +296 -18
- package/scripts/generate_cursor_agents.py +144 -0
- package/scripts/generate_cursor_hooks.py +155 -0
- package/scripts/generate_cursor_mdc.py +20 -8
- package/scripts/generate_gemini_commands.py +158 -0
- package/scripts/generate_gemini_hooks.py +159 -0
- package/scripts/generate_gemini_skills.py +98 -0
- package/scripts/generate_roo_modes.py +42 -1
- package/scripts/generate_windsurf_hooks.py +143 -0
- package/scripts/generate_windsurf_rules.py +162 -10
- package/scripts/install.py +11 -2
- package/scripts/install_steps/ai_tools.py +120 -5
- package/scripts/validate.py +20 -3
package/llms-full.txt
CHANGED
|
@@ -13,10 +13,13 @@
|
|
|
13
13
|
|
|
14
14
|
- [Best Practices](kb/best-practices/README.md)
|
|
15
15
|
- [No Hardcoded Counts in Secondary Docs](kb/best-practices/no-hardcoded-counts.md)
|
|
16
|
+
- [Plan: Deep Coverage v3.0 — 100% Native Surface Utilization](kb/history/completed/deep-coverage-v3-20260423.md)
|
|
17
|
+
- [Plan: Ecosystem Deep Sweep — All 12 Supported Tools](kb/history/completed/ecosystem-deep-sweep-20260423.md)
|
|
16
18
|
- [Plan: Enterprise Config Inheritance — Multi-Repo Governance with `extends`](kb/history/completed/enterprise-config-inheritance-plan-20260412.md)
|
|
17
19
|
- [Plan: Offline-First SLM Profile — Lightweight Mode for Local Models](kb/history/completed/offline-slm-profile-plan-20260411.md)
|
|
18
20
|
- [How-To Guides](kb/howto/README.md)
|
|
19
21
|
- [Plan: Cloud Security Pack — Multi-Cloud Audit](kb/planning/cloud-security-pack-plan.md)
|
|
22
|
+
- [SOP: Ecosystem Sync](kb/procedures/ecosystem-sync-sop.md)
|
|
20
23
|
- [SOP: Claude Toolkit Maintenance](kb/procedures/maintenance-sop.md)
|
|
21
24
|
- [SOP: Release Preparation](kb/procedures/release-preparation-sop.md)
|
|
22
25
|
- [SOP: Release Verification](kb/procedures/release-verification-sop.md)
|
|
@@ -52,6 +55,7 @@
|
|
|
52
55
|
- [Skills Catalog](kb/reference/skills-catalog.md)
|
|
53
56
|
- [Skills Unification Model](kb/reference/skills-unification.md)
|
|
54
57
|
- [Usage Statistics](kb/reference/stats.md)
|
|
58
|
+
- [Supported Tools Registry](kb/reference/supported-tools-registry.md)
|
|
55
59
|
- [Config Sync](kb/reference/sync.md)
|
|
56
60
|
- [Unique Features & Differentiators](kb/reference/unique-features.md)
|
|
57
61
|
- [Troubleshooting](kb/troubleshooting/README.md)
|
|
@@ -269,6 +273,449 @@ Shared AI development toolkit with multi-platform support
|
|
|
269
273
|
|
|
270
274
|
---
|
|
271
275
|
|
|
276
|
+
## kb/history/completed/deep-coverage-v3-20260423.md
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
title: "Plan: Deep Coverage v3.0 — 100% Native Surface Utilization Across 12 Tools"
|
|
280
|
+
category: planning
|
|
281
|
+
service: ai-toolkit
|
|
282
|
+
doc_type: plan
|
|
283
|
+
status: completed
|
|
284
|
+
tags: [v3, deep-coverage, ecosystem, generators, hooks, skills, subagents, commands, profile-full]
|
|
285
|
+
created: "2026-04-23"
|
|
286
|
+
last_updated: "2026-04-23"
|
|
287
|
+
completed: "2026-04-23"
|
|
288
|
+
completion: "100%"
|
|
289
|
+
description: "Ship v3.0.0 where every supported editor exposes the full ai-toolkit surface it is capable of hosting natively: hooks, subagents, custom commands, skill pointers. Introduce --profile full. Skip the 2.13.0 interim release and fold the completed deep sweep into 3.0.0."
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
# Plan: Deep Coverage v3.0 — 100% Native Surface Utilization
|
|
293
|
+
|
|
294
|
+
**Status:** :yellow_circle: IN PROGRESS
|
|
295
|
+
**Invocation:** continuation of `ecosystem-deep-sweep-2026-04-23` — same orchestration model
|
|
296
|
+
**Estimated effort:** 10-15h orchestrated (~3h wall-clock across 4 parallel buckets + consolidation)
|
|
297
|
+
**Deliverable:** v3.0.0 release where every editor's native surface is fully utilized; `--profile full` available
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 1. Objective
|
|
302
|
+
|
|
303
|
+
After the 2026-04-23 deep sweep closed the doc-drift gap, **v3.0.0 closes the capability-utilization gap**: each editor now exposes the full ai-toolkit surface it can host natively.
|
|
304
|
+
|
|
305
|
+
Definition of "100% coverage" chosen: **each editor works at 100% of its native capability** (compat-read counts). No cargo-cult duplication. No writing to `~/.cursor/`, `~/.augment/rules/` etc. globally.
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 2. Policy decisions (immutable constraints for all buckets)
|
|
310
|
+
|
|
311
|
+
| # | Decision | Rule |
|
|
312
|
+
|---|----------|------|
|
|
313
|
+
| 1 | Skill propagation | `.claude/skills/` canonical. Cursor/Windsurf/opencode → compat-read (nothing). Augment/Gemini/Antigravity → **pointer skill** (1 file per editor). Codex → opt-in `--codex-skills` flag emits full mirror |
|
|
314
|
+
| 2 | Global writes | Only `~/.claude/`. Cursor/Windsurf/opencode get global coverage via compat-read. Augment/Gemini/Roo require `--local` |
|
|
315
|
+
| 3 | Surface activation | **`--profile full`** turns on every native surface. `standard` stays close to today's defaults but adds niepodważalne wypełnienia (Copilot wiring + Gemini hooks). `minimal` unchanged |
|
|
316
|
+
| 4 | Default behavior | `--editors <name>` alone uses `standard`. Users who want the full stack pass `--profile full` |
|
|
317
|
+
| 5 | Version | Skip 2.13. Ship everything (completed sweep + v3 work) as **3.0.0** with migration notes |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## 3. What's missing → what each bucket delivers
|
|
322
|
+
|
|
323
|
+
### Bucket 1 — Hooks generators (backend-specialist)
|
|
324
|
+
|
|
325
|
+
**Owned files**
|
|
326
|
+
- New: `scripts/generate_gemini_hooks.py` (writes `.gemini/settings.json` hooks merge)
|
|
327
|
+
- New: `scripts/generate_cursor_hooks.py` (writes `.cursor/hooks.json`)
|
|
328
|
+
- New: `scripts/generate_windsurf_hooks.py` (writes `.windsurf/hooks.json`)
|
|
329
|
+
- New: `scripts/generate_augment_hooks.py` (writes `~/.augment/settings.json` hooks merge)
|
|
330
|
+
- New: `tests/test_hooks_per_editor.bats` (≥20 tests covering all 4 generators)
|
|
331
|
+
|
|
332
|
+
**Must-haves**
|
|
333
|
+
- All generators reuse `~/.softspark/ai-toolkit/hooks/*.sh` scripts (no duplicate shell code).
|
|
334
|
+
- Preserve user-authored hook entries; mark our entries with `_source: ai-toolkit`.
|
|
335
|
+
- Idempotent on regeneration.
|
|
336
|
+
- Event mapping informed by each editor's docs (Claude Code events ↔ target editor events).
|
|
337
|
+
|
|
338
|
+
### Bucket 2 — Native agents + custom commands (ai-engineer)
|
|
339
|
+
|
|
340
|
+
**Owned files**
|
|
341
|
+
- New: `scripts/generate_augment_agents.py` (`.augment/agents/*.md` with YAML frontmatter: name, description, model, color, tools, disabled_tools)
|
|
342
|
+
- New: `scripts/generate_augment_commands.py` (`.augment/commands/*.md` from user-invocable skills)
|
|
343
|
+
- New: `scripts/generate_cursor_agents.py` (`.cursor/agents/*.md` mirroring Claude Code agents)
|
|
344
|
+
- New: `scripts/generate_gemini_commands.py` (`.gemini/commands/*.toml` custom slash commands)
|
|
345
|
+
- New: `tests/test_native_surfaces.bats` (≥25 tests)
|
|
346
|
+
|
|
347
|
+
**Must-haves**
|
|
348
|
+
- Filter: only `user-invocable: true` skills become custom commands.
|
|
349
|
+
- `ai-toolkit-*` prefix everywhere for install/uninstall sweep.
|
|
350
|
+
- Do not touch files without our prefix.
|
|
351
|
+
|
|
352
|
+
### Bucket 3 — Skill pointers + Codex mirror (ai-engineer)
|
|
353
|
+
|
|
354
|
+
**Owned files**
|
|
355
|
+
- New: `scripts/generate_gemini_skills.py` (`.gemini/skills/ai-toolkit-skill-catalogue/SKILL.md` — pointer)
|
|
356
|
+
- New: `scripts/generate_augment_skills.py` (`.augment/skills/ai-toolkit-skill-catalogue/SKILL.md` — pointer)
|
|
357
|
+
- New: `scripts/generate_codex_skills.py` (full mirror to `.codex/skills/<name>/SKILL.md` — gated by `--codex-skills` flag)
|
|
358
|
+
- New: `tests/test_skills_native.bats` (≥15 tests)
|
|
359
|
+
|
|
360
|
+
**Must-haves**
|
|
361
|
+
- Pointer pattern same as Antigravity: 1 file per editor referencing `~/.claude/skills/<name>` and listing the catalogue.
|
|
362
|
+
- Codex mirror respects `user-invocable: false` (knowledge skills stay, task skills stay — Codex reads them all).
|
|
363
|
+
- `--codex-skills` must be opt-in; default OFF.
|
|
364
|
+
|
|
365
|
+
### Bucket 4 — Install wiring + profile full + docs (devops-implementer)
|
|
366
|
+
|
|
367
|
+
**Owned files**
|
|
368
|
+
- `scripts/install_steps/ai_tools.py` — wire in all new generators from buckets 1-3
|
|
369
|
+
- `scripts/install.py` — parse `--profile full`, propagate to `_create_local_ai_tool_configs`
|
|
370
|
+
- `scripts/config_validator.py` — ensure `full` profile is accepted (already present, verify)
|
|
371
|
+
- `README.md` — "What's New in v3.0.0" + migration notes
|
|
372
|
+
- `CHANGELOG.md` — v3.0.0 entry
|
|
373
|
+
- `kb/reference/global-install-model.md` — document profile semantics
|
|
374
|
+
- `kb/reference/supported-tools-registry.md` — per-tool "generators by profile" column
|
|
375
|
+
- `kb/procedures/maintenance-sop.md` — profile table update
|
|
376
|
+
- `package.json` version bump → `3.0.0`
|
|
377
|
+
- `package-lock.json` sync
|
|
378
|
+
- `tests/test_install_profiles.bats` (≥15 tests covering minimal/standard/strict/full × 3 editors)
|
|
379
|
+
|
|
380
|
+
**Must-haves**
|
|
381
|
+
- `standard` profile: Copilot directory mode ON, Gemini hooks ON (non-breaking additions).
|
|
382
|
+
- `full` profile: everything from `standard` + all native surfaces from buckets 1-3.
|
|
383
|
+
- Migration note: users on `standard` today get Copilot instructions/prompts and Gemini hooks automatically after upgrading (acceptable breaking for major bump, documented).
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## 4. Success criteria
|
|
388
|
+
|
|
389
|
+
- [ ] 13 new Python generators (6+4+3, minus wiring)
|
|
390
|
+
- [ ] ≥75 new bats tests across buckets
|
|
391
|
+
- [ ] `npm test` green
|
|
392
|
+
- [ ] `python3 scripts/validate.py --strict` 0/0
|
|
393
|
+
- [ ] `python3 scripts/ecosystem_doctor.py --check` exit 0
|
|
394
|
+
- [ ] `ai-toolkit install --local --editors all --profile full` produces every native surface per editor
|
|
395
|
+
- [ ] `ai-toolkit install --local --editors all --profile standard` is still minimal-invasive (no subagents, no hooks for non-Claude editors) **except** Copilot + Gemini hooks (both documented migration notes)
|
|
396
|
+
- [ ] README test badge bumped
|
|
397
|
+
- [ ] CHANGELOG v3.0.0 entry
|
|
398
|
+
- [ ] All docs updated (registry, install model, maintenance SOP)
|
|
399
|
+
- [ ] Single atomic commit
|
|
400
|
+
- [ ] Tag `v3.0.0` ready (push held for user confirmation)
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## 5. Safety rails
|
|
405
|
+
|
|
406
|
+
- **Do not commit during bucket work.** Orchestrator consolidates.
|
|
407
|
+
- **Do not touch files outside your bucket's ownership list.**
|
|
408
|
+
- **Preserve user files** via `ai-toolkit-*` prefix on generated artifacts.
|
|
409
|
+
- **Do not write to global editor paths** (`~/.cursor/`, `~/.augment/rules/`, etc.) — policy decision 2.
|
|
410
|
+
- **Do not change `standard` profile in ways that break existing users**, beyond the two documented additions (Copilot directory mode + Gemini hooks).
|
|
411
|
+
- **Test per bucket locally before reporting.** Bucket reports must include a "tests green" line.
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
415
|
+
## 6. Consolidation steps (orchestrator)
|
|
416
|
+
|
|
417
|
+
1. Merge all 4 bucket registry deltas into `scripts/ecosystem_tools.json`
|
|
418
|
+
2. Run `python3 scripts/ecosystem_doctor.py --update`
|
|
419
|
+
3. Run `npm run generate:all`
|
|
420
|
+
4. Bump `package.json` → `3.0.0`; sync `package-lock.json`
|
|
421
|
+
5. Update `README.md` badge + "What's New"
|
|
422
|
+
6. Update `CHANGELOG.md` with v3.0.0 entry (include migration notes)
|
|
423
|
+
7. Run `python3 scripts/validate.py --strict` (must pass 0/0)
|
|
424
|
+
8. Run `npm test` (all green)
|
|
425
|
+
9. Run `python3 scripts/ecosystem_doctor.py --check` (exit 0)
|
|
426
|
+
10. Move this plan doc to `kb/history/completed/deep-coverage-v3-20260423.md`
|
|
427
|
+
11. Single commit + tag `v3.0.0`
|
|
428
|
+
12. Hold push pending user confirmation
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
## 7. Related
|
|
433
|
+
|
|
434
|
+
- `kb/history/completed/ecosystem-deep-sweep-20260423.md` — predecessor plan (doc-drift closure)
|
|
435
|
+
- `kb/reference/global-install-model.md` — install scope semantics
|
|
436
|
+
- `kb/reference/supported-tools-registry.md` — tool registry
|
|
437
|
+
- `scripts/config_validator.py` — `VALID_PROFILES` already includes `full`
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## kb/history/completed/ecosystem-deep-sweep-20260423.md
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
title: "Plan: Ecosystem Deep Sweep — All 12 Supported Tools"
|
|
445
|
+
category: planning
|
|
446
|
+
service: ai-toolkit
|
|
447
|
+
doc_type: plan
|
|
448
|
+
status: completed
|
|
449
|
+
tags: [ecosystem, editors, generators, deep-sweep, orchestrate, drift, integration]
|
|
450
|
+
created: "2026-04-23"
|
|
451
|
+
last_updated: "2026-04-23"
|
|
452
|
+
completed: "2026-04-23"
|
|
453
|
+
completion: "100%"
|
|
454
|
+
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."
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
# Plan: Ecosystem Deep Sweep — All 12 Supported Tools
|
|
458
|
+
|
|
459
|
+
**Status:** :yellow_circle: PROPOSED
|
|
460
|
+
**Invocation:** `/orchestrate deep ecosystem sweep per kb/planning/ecosystem-deep-sweep-2026-04-23.md`
|
|
461
|
+
**Estimated effort:** 4-6 hours orchestrated (1-1.5 h per agent in parallel)
|
|
462
|
+
**Deliverable:** Per-tool drift report + concrete generator/skill patches + updated registry
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## 1. Objective
|
|
467
|
+
|
|
468
|
+
For every supported tool in `scripts/ecosystem_tools.json`:
|
|
469
|
+
|
|
470
|
+
1. Read the current official documentation end-to-end (not just landing page)
|
|
471
|
+
2. Identify every feature that ai-toolkit could integrate with but does not currently
|
|
472
|
+
3. Classify each gap using the ecosystem-sync SOP taxonomy (class A-F)
|
|
473
|
+
4. Produce minimal, reviewable patches for class B/D/E/F gaps
|
|
474
|
+
5. Update the registry (`ecosystem_tools.json`) with new capability markers and config paths
|
|
475
|
+
6. Refresh the snapshot (`benchmarks/ecosystem-doctor-snapshot.json`)
|
|
476
|
+
|
|
477
|
+
**Explicit non-goals:** complete feature parity, deep refactor of generators, adding new editors to the roster.
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## 2. Parallelization Strategy
|
|
482
|
+
|
|
483
|
+
12 tools → **4 agents × 3 tools each** by affinity and complexity:
|
|
484
|
+
|
|
485
|
+
| Agent | Role | Tools | Rationale |
|
|
486
|
+
|-------|------|-------|-----------|
|
|
487
|
+
| `backend-specialist` | Deep CLI / config analysis | `claude-code`, `codex-cli`, `opencode` | CLI + config.toml + agents/commands/plugins — backend integration depth |
|
|
488
|
+
| `frontend-specialist` | Editor UI integrations | `cursor`, `windsurf`, `google-antigravity` | Editor-embedded AI, rule files, MCP-via-UI |
|
|
489
|
+
| `devops-implementer` | Pipeline + rules tools | `github-copilot`, `cline`, `roo-code` | Rules directories, MCP JSON variants, mode configs |
|
|
490
|
+
| `ai-engineer` | LLM-native tools | `gemini-cli`, `aider`, `augment` | Pure LLM workflows, minimal IDE coupling |
|
|
491
|
+
|
|
492
|
+
Each agent works **in parallel**, independent file scopes (different generators). Cross-file coordination only at the registry update (single JSON file).
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
|
|
496
|
+
## 3. Per-Tool Task Template
|
|
497
|
+
|
|
498
|
+
Every agent applies the **same 7-step protocol** per tool in their bucket:
|
|
499
|
+
|
|
500
|
+
### Step 1 — Baseline our current integration
|
|
501
|
+
|
|
502
|
+
Read these files (read-only):
|
|
503
|
+
- `scripts/generate_<tool>_*.py` — every generator targeting this tool
|
|
504
|
+
- `scripts/ecosystem_tools.json` — the tool's registry entry
|
|
505
|
+
- `kb/reference/supported-tools-registry.md` — human docs section
|
|
506
|
+
- `benchmarks/ecosystem-doctor-snapshot.json` — last-seen headings/markers/version
|
|
507
|
+
|
|
508
|
+
Produce a 3-line summary: "we currently generate X, Y, Z for this tool".
|
|
509
|
+
|
|
510
|
+
### Step 2 — Fetch official docs
|
|
511
|
+
|
|
512
|
+
Primary URL is in `ecosystem_tools.json::urls.docs`. Additionally fetch:
|
|
513
|
+
- `urls.release_notes` — recent changes (last 6 months)
|
|
514
|
+
- `urls.changelog` — if distinct from release notes
|
|
515
|
+
- Any deep-link from the docs landing page that corresponds to an integration surface (rules, hooks, MCP, agents, commands, plugins, config schema)
|
|
516
|
+
|
|
517
|
+
Use `WebFetch` (for general) or `gh api` (for GitHub-hosted docs like Codex CLI, opencode).
|
|
518
|
+
|
|
519
|
+
### Step 3 — Extract the feature surface
|
|
520
|
+
|
|
521
|
+
For the current version of the tool, enumerate:
|
|
522
|
+
- Config file paths (the tool's OWN paths, not ours)
|
|
523
|
+
- Rule / instruction / prompt formats
|
|
524
|
+
- Hook / lifecycle event names (if any)
|
|
525
|
+
- MCP config target path (if supported)
|
|
526
|
+
- Agent / custom-mode / preset concepts (if any)
|
|
527
|
+
- Slash command / CLI subcommand surface
|
|
528
|
+
- Supported model providers (note, do not integrate)
|
|
529
|
+
- Authentication / API-key mechanisms
|
|
530
|
+
|
|
531
|
+
Produce a structured markdown table: `Feature | Since version | Stable? | Our integration?`
|
|
532
|
+
|
|
533
|
+
### Step 4 — Diff against our output
|
|
534
|
+
|
|
535
|
+
For each feature in the table, compare against:
|
|
536
|
+
- What our `generate_<tool>_*.py` produces
|
|
537
|
+
- What fields are in our registry's `capability_markers`
|
|
538
|
+
|
|
539
|
+
Mark each row with one of:
|
|
540
|
+
- `✅ supported` — we already emit / track it
|
|
541
|
+
- `⚠️ partial` — we emit a subset; specific sub-feature missing
|
|
542
|
+
- `❌ missing` — we do not support at all
|
|
543
|
+
- `➖ out of scope` — tool has it, but not applicable to ai-toolkit's mission
|
|
544
|
+
|
|
545
|
+
### Step 5 — Classify each gap
|
|
546
|
+
|
|
547
|
+
For each `⚠️` / `❌` row, assign one of the SOP drift classes:
|
|
548
|
+
|
|
549
|
+
| Class | Name | Action |
|
|
550
|
+
|-------|------|--------|
|
|
551
|
+
| A | Cosmetic | No code change; update snapshot only |
|
|
552
|
+
| B | New feature — integrate | Patch generator(s), add tests |
|
|
553
|
+
| C | New feature — not adopted | Note in registry, no code |
|
|
554
|
+
| D | Deprecation | Migration warning in generator + CHANGELOG |
|
|
555
|
+
| E | Feature promoted to default | Simplify generator; keep fallback comment |
|
|
556
|
+
| F | Newly globally available | New generator / extended generator |
|
|
557
|
+
|
|
558
|
+
### Step 6 — Produce patches (class B/D/E/F only)
|
|
559
|
+
|
|
560
|
+
For every class B/D/E/F gap:
|
|
561
|
+
1. Edit the relevant generator in `scripts/generate_<tool>_*.py`
|
|
562
|
+
2. If a new capability marker emerges, add to `ecosystem_tools.json::capability_markers`
|
|
563
|
+
3. If a new config path emerges, add to `ecosystem_tools.json::config_paths`
|
|
564
|
+
4. If a hook event or skill frontmatter field emerges (for Claude Code), update:
|
|
565
|
+
- `app/skills/hook-creator/SKILL.md` (hooks table)
|
|
566
|
+
- `app/skills/skill-creator/SKILL.md` (frontmatter reference)
|
|
567
|
+
- `scripts/validate.py` (allowlist)
|
|
568
|
+
5. Add a bats test under `tests/test_<tool>.bats` covering the new output
|
|
569
|
+
6. Update the tool's section in `kb/reference/supported-tools-registry.md`
|
|
570
|
+
|
|
571
|
+
**Constraints on patches:**
|
|
572
|
+
- One generator change per logical feature (no "big bang" commits)
|
|
573
|
+
- Preserve existing output format for backward compatibility
|
|
574
|
+
- New output opt-in via flag if it would change existing user-visible state
|
|
575
|
+
- Every new capability marker must pass the doctor's probe on the live docs page
|
|
576
|
+
|
|
577
|
+
### Step 7 — Report
|
|
578
|
+
|
|
579
|
+
Each agent emits a single markdown report with:
|
|
580
|
+
- Feature matrix table (step 3+4+5 combined)
|
|
581
|
+
- List of patches applied (files changed, bats tests added)
|
|
582
|
+
- List of class B/D/E/F gaps NOT patched (with reason: "out of scope", "requires user decision", "blocker")
|
|
583
|
+
- Registry diff (before/after for the tool's JSON entry)
|
|
584
|
+
|
|
585
|
+
---
|
|
586
|
+
|
|
587
|
+
## 4. Consolidation (after all agents finish)
|
|
588
|
+
|
|
589
|
+
Run in order:
|
|
590
|
+
|
|
591
|
+
1. Merge registry entries — single edit to `ecosystem_tools.json` combining all 12 per-tool updates
|
|
592
|
+
2. Regenerate human registry doc: manually update `kb/reference/supported-tools-registry.md` from JSON
|
|
593
|
+
3. `python3 scripts/ecosystem_doctor.py --update` — baseline new capability markers
|
|
594
|
+
4. `python3 scripts/validate.py --strict` — must pass
|
|
595
|
+
5. `npm test` — must pass (includes the newly added bats tests per tool)
|
|
596
|
+
6. `python3 scripts/ecosystem_doctor.py --check` — exit 0
|
|
597
|
+
7. Regenerate downstream artifacts:
|
|
598
|
+
```bash
|
|
599
|
+
npm run generate:all
|
|
600
|
+
```
|
|
601
|
+
8. Collect all per-agent reports into `kb/learnings/ecosystem-sweep-2026-04-23.md`
|
|
602
|
+
|
|
603
|
+
---
|
|
604
|
+
|
|
605
|
+
## 5. Success Criteria
|
|
606
|
+
|
|
607
|
+
- [ ] All 12 tools covered (no "skipped for time" items)
|
|
608
|
+
- [ ] Every class B/D/E/F gap has either a patch OR a documented reason for deferral
|
|
609
|
+
- [ ] Registry `capability_markers` list grew for at least 6 of 12 tools (signals real gap coverage)
|
|
610
|
+
- [ ] `validate.py --strict`: 0 errors, 0 warnings
|
|
611
|
+
- [ ] `npm test`: all green (including new per-tool bats tests)
|
|
612
|
+
- [ ] `ecosystem_doctor.py --check`: exit 0 after snapshot refresh
|
|
613
|
+
- [ ] Single consolidated commit per agent-bucket, plus one final consolidation commit
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## 6. Known Traps (from prior ecosystem work)
|
|
618
|
+
|
|
619
|
+
- **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".
|
|
620
|
+
- **GitHub docs** rate-limit aggressively on repeated reads. Space out fetches or use `gh api`.
|
|
621
|
+
- **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).
|
|
622
|
+
- **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.
|
|
623
|
+
- **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.
|
|
624
|
+
|
|
625
|
+
---
|
|
626
|
+
|
|
627
|
+
## 7. Orchestrate Invocation
|
|
628
|
+
|
|
629
|
+
In a fresh Claude Code session (to avoid context rot from this session):
|
|
630
|
+
|
|
631
|
+
```
|
|
632
|
+
/orchestrate deep ecosystem sweep for ai-toolkit per kb/planning/ecosystem-deep-sweep-2026-04-23.md
|
|
633
|
+
|
|
634
|
+
Spawn 4 agents in parallel:
|
|
635
|
+
- backend-specialist: claude-code, codex-cli, opencode
|
|
636
|
+
- frontend-specialist: cursor, windsurf, google-antigravity
|
|
637
|
+
- devops-implementer: github-copilot, cline, roo-code
|
|
638
|
+
- ai-engineer: gemini-cli, aider, augment
|
|
639
|
+
|
|
640
|
+
Each agent follows the 7-step per-tool protocol in section 3.
|
|
641
|
+
After all 4 report, run consolidation (section 4) and produce the sweep summary.
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
---
|
|
645
|
+
|
|
646
|
+
## 8. Deliverables (per agent)
|
|
647
|
+
|
|
648
|
+
Each agent's final output to orchestrator:
|
|
649
|
+
1. **Feature matrix** — one table per assigned tool (step 3+4+5)
|
|
650
|
+
2. **Patch log** — list of commits staged (not committed yet — orchestrator consolidates)
|
|
651
|
+
3. **Registry delta** — proposed JSON diff for `ecosystem_tools.json`
|
|
652
|
+
4. **Gaps not patched** — with rationale (out-of-scope, blocker, deferred)
|
|
653
|
+
5. **Test additions** — bats test file names + test count
|
|
654
|
+
|
|
655
|
+
Orchestrator's final output:
|
|
656
|
+
1. Consolidated commit with message `feat(ecosystem): deep sweep 2026-04-23 — N class B/F integrations`
|
|
657
|
+
2. Version bump decision (minor if any class B/F, patch if only class A updates)
|
|
658
|
+
3. `kb/learnings/ecosystem-sweep-2026-04-23.md` — retrospective noting which tools needed most work (informs priority for next sweep)
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
## 9. Safety Rails
|
|
663
|
+
|
|
664
|
+
- **Do not** silently upgrade default behavior — every user-visible change lands behind a flag OR goes through a minor version bump with CHANGELOG mention
|
|
665
|
+
- **Do not** rewrite generators wholesale — incremental additions only
|
|
666
|
+
- **Do not** commit during the sweep — orchestrator consolidates at the end
|
|
667
|
+
- **Do not** modify files outside the tool's scope (e.g., backend-specialist touching frontend-specialist's files requires a handoff)
|
|
668
|
+
- **Do** preserve existing symlinks and file-path expectations — the installer depends on them
|
|
669
|
+
|
|
670
|
+
---
|
|
671
|
+
|
|
672
|
+
## 10. Related
|
|
673
|
+
|
|
674
|
+
- [Ecosystem Sync SOP](../procedures/ecosystem-sync-sop.md) — the process this plan instantiates
|
|
675
|
+
- [Supported Tools Registry](../reference/supported-tools-registry.md) — source of truth for tool list
|
|
676
|
+
- `scripts/ecosystem_doctor.py` — drift detector consumed by orchestrator consolidation
|
|
677
|
+
- `scripts/ecosystem_tools.json` — registry file edited by every agent
|
|
678
|
+
|
|
679
|
+
---
|
|
680
|
+
|
|
681
|
+
## 11. Retrospective — 2026-04-23
|
|
682
|
+
|
|
683
|
+
### Execution summary
|
|
684
|
+
|
|
685
|
+
- 4 parallel agents, 3 tools each — full 12/12 coverage, one consolidation pass.
|
|
686
|
+
- 161 new bats tests (679 → 840); validate.py 0 errors / 0 warnings; `ecosystem_doctor --check` exit 0.
|
|
687
|
+
- 14 files modified, 12 new test files, 2 registry docs updated, 1 snapshot rebaselined.
|
|
688
|
+
|
|
689
|
+
### What worked
|
|
690
|
+
|
|
691
|
+
- **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.
|
|
692
|
+
- **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).
|
|
693
|
+
- **SPA-wall compensation patterns** (Antigravity bundle strings, Cursor/Windsurf llms.txt mirrors, GitHub release notes as fallback) were reusable across buckets.
|
|
694
|
+
|
|
695
|
+
### What surprised us
|
|
696
|
+
|
|
697
|
+
- **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.
|
|
698
|
+
- **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.
|
|
699
|
+
- **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).
|
|
700
|
+
- **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.
|
|
701
|
+
|
|
702
|
+
### Open items flagged for future passes
|
|
703
|
+
|
|
704
|
+
1. **Native `.codex/skills/*/SKILL.md` emission** (class B) — would write ~99 skill directories. Needs opt-in flag + minor bump.
|
|
705
|
+
2. **`.opencode/skills/` duplication** — deferred indefinitely; `.claude/skills/` fallback already works.
|
|
706
|
+
3. **New generators needed**: `generate_gemini_hooks.py`, `generate_augment_agents.py`, `generate_augment_commands.py`, `generate_augment_hooks.py`.
|
|
707
|
+
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.
|
|
708
|
+
5. **Roo `.roomodes` YAML variant** — upstream-preferred; deferred until a YAML multi-line helper is added.
|
|
709
|
+
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.
|
|
710
|
+
|
|
711
|
+
### Process refinements for next sweep
|
|
712
|
+
|
|
713
|
+
- **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.
|
|
714
|
+
- **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.
|
|
715
|
+
- **Search docs via llms.txt first** when the vendor publishes one — bypasses SPA walls with zero fallback logic.
|
|
716
|
+
|
|
717
|
+
---
|
|
718
|
+
|
|
272
719
|
## kb/history/completed/enterprise-config-inheritance-plan-20260412.md
|
|
273
720
|
|
|
274
721
|
---
|
|
@@ -3127,6 +3574,266 @@ Examples:
|
|
|
3127
3574
|
|
|
3128
3575
|
---
|
|
3129
3576
|
|
|
3577
|
+
## kb/procedures/ecosystem-sync-sop.md
|
|
3578
|
+
|
|
3579
|
+
---
|
|
3580
|
+
title: "SOP: Ecosystem Sync"
|
|
3581
|
+
category: procedures
|
|
3582
|
+
service: ai-toolkit
|
|
3583
|
+
tags: [sop, ecosystem, editors, generators, drift-detection, sync]
|
|
3584
|
+
version: "1.0.0"
|
|
3585
|
+
created: "2026-04-23"
|
|
3586
|
+
last_updated: "2026-04-23"
|
|
3587
|
+
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."
|
|
3588
|
+
---
|
|
3589
|
+
|
|
3590
|
+
# SOP: Ecosystem Sync
|
|
3591
|
+
|
|
3592
|
+
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.
|
|
3593
|
+
|
|
3594
|
+
**When to run:**
|
|
3595
|
+
- **Every quarter** as a baseline health check (calendar reminder)
|
|
3596
|
+
- **Before every minor release** of ai-toolkit (Phase 0 of release prep)
|
|
3597
|
+
- **Whenever an editor ships a major version** (subscribe to their changelogs)
|
|
3598
|
+
- **On demand** if a user reports "feature X exists but toolkit doesn't support it"
|
|
3599
|
+
|
|
3600
|
+
**Time:** 30 minutes for drift review + variable for any generator updates
|
|
3601
|
+
|
|
3602
|
+
---
|
|
3603
|
+
|
|
3604
|
+
## Quick Reference
|
|
3605
|
+
|
|
3606
|
+
```bash
|
|
3607
|
+
# Full check (all 12 tools, online)
|
|
3608
|
+
python3 scripts/ecosystem_doctor.py --format text
|
|
3609
|
+
|
|
3610
|
+
# Single tool
|
|
3611
|
+
python3 scripts/ecosystem_doctor.py --tool cursor --format text
|
|
3612
|
+
|
|
3613
|
+
# First-ever run — baseline the snapshot
|
|
3614
|
+
python3 scripts/ecosystem_doctor.py --update > /dev/null
|
|
3615
|
+
|
|
3616
|
+
# CI / gating mode
|
|
3617
|
+
python3 scripts/ecosystem_doctor.py --check
|
|
3618
|
+
|
|
3619
|
+
# Offline (no network) — validates our side only
|
|
3620
|
+
python3 scripts/ecosystem_doctor.py --offline --format text
|
|
3621
|
+
```
|
|
3622
|
+
|
|
3623
|
+
---
|
|
3624
|
+
|
|
3625
|
+
## Inputs
|
|
3626
|
+
|
|
3627
|
+
| File | Purpose |
|
|
3628
|
+
|------|---------|
|
|
3629
|
+
| `scripts/ecosystem_tools.json` | Authoritative registry: 12 tools with doc URLs, config paths, our generators, capability markers |
|
|
3630
|
+
| `benchmarks/ecosystem-doctor-snapshot.json` | Last-seen state (headings, content hash, markers, version) — updated via `--update` |
|
|
3631
|
+
| `scripts/ecosystem_doctor.py` | Drift detector |
|
|
3632
|
+
| `kb/reference/supported-tools-registry.md` | Human-readable view of the registry |
|
|
3633
|
+
|
|
3634
|
+
---
|
|
3635
|
+
|
|
3636
|
+
## Phase 1: Run the Doctor
|
|
3637
|
+
|
|
3638
|
+
```bash
|
|
3639
|
+
python3 scripts/ecosystem_doctor.py --format text > /tmp/eco-report.txt
|
|
3640
|
+
cat /tmp/eco-report.txt
|
|
3641
|
+
```
|
|
3642
|
+
|
|
3643
|
+
The report classifies every tool into:
|
|
3644
|
+
|
|
3645
|
+
- **Clean** — doc page, headings, and markers match the last snapshot; no action
|
|
3646
|
+
- **Drift** — something changed upstream. Each drift entry has a `kind`:
|
|
3647
|
+
- `headings_added` — the doc grew new sections (new features? reorg?)
|
|
3648
|
+
- `headings_removed` — a section disappeared (deprecation? renaming?)
|
|
3649
|
+
- `marker_flips` — an expected capability marker appeared (`+`) or vanished (`-`)
|
|
3650
|
+
- `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.
|
|
3651
|
+
- `version_changed` — the CLI version bumped (for tools that expose `--version`)
|
|
3652
|
+
- **Errored** — couldn't fetch docs (timeout, 404, auth wall). Doctor does not overwrite
|
|
3653
|
+
the snapshot for errored tools; the last-known-good state persists.
|
|
3654
|
+
|
|
3655
|
+
---
|
|
3656
|
+
|
|
3657
|
+
## Phase 2: Classify Each Drift
|
|
3658
|
+
|
|
3659
|
+
For every drifting tool, read its docs URL and classify the change into exactly one bucket:
|
|
3660
|
+
|
|
3661
|
+
| Drift class | What it means | Action owner |
|
|
3662
|
+
|-------------|---------------|--------------|
|
|
3663
|
+
| **A. Cosmetic reword** | Prose edited, same feature set | Update snapshot (`--update`), no code change |
|
|
3664
|
+
| **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` |
|
|
3665
|
+
| **C. New feature — not our concern** | Enterprise SSO, billing, proprietary UI-only features | Note in registry `capability_markers` as "not adopted"; update snapshot |
|
|
3666
|
+
| **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 |
|
|
3667
|
+
| **E. Feature promoted to default** | Was behind a flag, now global | Remove the flag from generator output; simplify our installer |
|
|
3668
|
+
| **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 |
|
|
3669
|
+
|
|
3670
|
+
Write one line per drift in `/tmp/eco-report.txt` with its class. Example:
|
|
3671
|
+
|
|
3672
|
+
```
|
|
3673
|
+
cursor: headings_added [AGENTS.md support] -> class B (integrate: extend generate_cursor_mdc.py)
|
|
3674
|
+
aider: version_changed 0.70 -> 0.72 -> class A (cosmetic, --update)
|
|
3675
|
+
windsurf: marker_flips +Cascade -> class B (already supported, verify snapshot)
|
|
3676
|
+
```
|
|
3677
|
+
|
|
3678
|
+
---
|
|
3679
|
+
|
|
3680
|
+
## Phase 3: Execute Changes
|
|
3681
|
+
|
|
3682
|
+
### For class B (new feature — integrate)
|
|
3683
|
+
|
|
3684
|
+
1. Read the tool's docs section that introduced the feature. Note the exact config key / hook name / file path.
|
|
3685
|
+
2. Open the relevant generator (`scripts/generate_<tool>_*.py`) and add output for the new surface.
|
|
3686
|
+
3. If the feature is a **hook event**, also update:
|
|
3687
|
+
- `app/hooks.json` (if Claude-Code-native)
|
|
3688
|
+
- `app/skills/hook-creator/SKILL.md` — add the event to the Supported Hook Events table
|
|
3689
|
+
- `scripts/inject_hook_cli.py` — if the hook target path differs
|
|
3690
|
+
4. If the feature is a **skill/agent schema extension**:
|
|
3691
|
+
- Update `app/skills/skill-creator/SKILL.md` and `app/skills/command-creator/SKILL.md` templates
|
|
3692
|
+
- Update `scripts/validate.py` field allowlists
|
|
3693
|
+
- Update `kb/reference/agent-skills-spec.md` (if the change is an upstream spec change)
|
|
3694
|
+
5. Add a bats test under `tests/test_<tool>.bats` covering the new output.
|
|
3695
|
+
6. Regenerate artifacts: `npm run generate:all`.
|
|
3696
|
+
|
|
3697
|
+
### For class D (deprecation)
|
|
3698
|
+
|
|
3699
|
+
1. Open a migration issue in GitHub with "class: deprecation" and a link to the upstream changelog.
|
|
3700
|
+
2. In the generator, mark the deprecated output path as emitting a comment: `# DEPRECATED: <link>, removed in <version>`.
|
|
3701
|
+
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.
|
|
3702
|
+
|
|
3703
|
+
### For class E / F (feature promotion)
|
|
3704
|
+
|
|
3705
|
+
1. Simplify the generator to emit the new-default form; keep a fallback comment for users on older tool versions.
|
|
3706
|
+
2. Update `kb/reference/supported-tools-registry.md` config-paths column.
|
|
3707
|
+
|
|
3708
|
+
### For class A / C (no code change)
|
|
3709
|
+
|
|
3710
|
+
1. Run `python3 scripts/ecosystem_doctor.py --update --tool <id>` to refresh that tool's snapshot.
|
|
3711
|
+
|
|
3712
|
+
---
|
|
3713
|
+
|
|
3714
|
+
## Phase 4: Update the Registry
|
|
3715
|
+
|
|
3716
|
+
If new capability markers, config paths, or doc URLs emerged during Phase 3, edit `scripts/ecosystem_tools.json`:
|
|
3717
|
+
|
|
3718
|
+
```bash
|
|
3719
|
+
${EDITOR:-nvim} scripts/ecosystem_tools.json
|
|
3720
|
+
```
|
|
3721
|
+
|
|
3722
|
+
Fields to consider updating:
|
|
3723
|
+
- `urls.docs` — if the vendor moved their docs
|
|
3724
|
+
- `urls.release_notes` — if the changelog location changed
|
|
3725
|
+
- `config_paths` — if new files now ship in our install output
|
|
3726
|
+
- `our_generators` — if a new generator was added
|
|
3727
|
+
- `capability_markers` — if a new feature was adopted
|
|
3728
|
+
- `version_probe.command` — if the CLI binary was renamed
|
|
3729
|
+
|
|
3730
|
+
After editing, increment `last_updated` in the registry and save the snapshot:
|
|
3731
|
+
|
|
3732
|
+
```bash
|
|
3733
|
+
python3 scripts/ecosystem_doctor.py --update
|
|
3734
|
+
```
|
|
3735
|
+
|
|
3736
|
+
---
|
|
3737
|
+
|
|
3738
|
+
## Phase 5: Validate
|
|
3739
|
+
|
|
3740
|
+
```bash
|
|
3741
|
+
python3 scripts/validate.py --strict
|
|
3742
|
+
python3 scripts/audit_skills.py --ci
|
|
3743
|
+
python3 scripts/ecosystem_doctor.py --check # exits 0 after --update
|
|
3744
|
+
npm test
|
|
3745
|
+
```
|
|
3746
|
+
|
|
3747
|
+
All four must pass before committing generator / registry changes.
|
|
3748
|
+
|
|
3749
|
+
---
|
|
3750
|
+
|
|
3751
|
+
## Phase 6: Commit
|
|
3752
|
+
|
|
3753
|
+
Use a structured commit per change class:
|
|
3754
|
+
|
|
3755
|
+
```bash
|
|
3756
|
+
git add scripts/ecosystem_tools.json benchmarks/ecosystem-doctor-snapshot.json
|
|
3757
|
+
git add scripts/generate_<tool>_*.py # if class B/D/E/F
|
|
3758
|
+
git add app/skills/<skill>/SKILL.md # if templates touched
|
|
3759
|
+
git add kb/reference/supported-tools-registry.md
|
|
3760
|
+
git commit -m "chore(ecosystem): sync <tool> — <brief summary>"
|
|
3761
|
+
```
|
|
3762
|
+
|
|
3763
|
+
Recommended commit messages by class:
|
|
3764
|
+
|
|
3765
|
+
| Class | Template |
|
|
3766
|
+
|-------|----------|
|
|
3767
|
+
| A | `chore(ecosystem): refresh <tool> snapshot (cosmetic docs update)` |
|
|
3768
|
+
| B | `feat(<tool>): add support for <feature>` |
|
|
3769
|
+
| C | `chore(ecosystem): note <tool> <feature> as not-adopted` |
|
|
3770
|
+
| D | `feat(<tool>): deprecation warning for <old-path>` |
|
|
3771
|
+
| E | `refactor(<tool>): remove flag for <feature> (now default)` |
|
|
3772
|
+
| F | `feat(<tool>): add <new-surface> generator` |
|
|
3773
|
+
|
|
3774
|
+
---
|
|
3775
|
+
|
|
3776
|
+
## Gotchas
|
|
3777
|
+
|
|
3778
|
+
- **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.
|
|
3779
|
+
- **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.
|
|
3780
|
+
- **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.
|
|
3781
|
+
- **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.
|
|
3782
|
+
- **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.
|
|
3783
|
+
- **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.
|
|
3784
|
+
- **`--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.
|
|
3785
|
+
|
|
3786
|
+
---
|
|
3787
|
+
|
|
3788
|
+
## Scheduling
|
|
3789
|
+
|
|
3790
|
+
Recommended cadence:
|
|
3791
|
+
|
|
3792
|
+
| Trigger | Action |
|
|
3793
|
+
|---------|--------|
|
|
3794
|
+
| Every Monday morning | `python3 scripts/ecosystem_doctor.py --format text` — scan during coffee |
|
|
3795
|
+
| Before a minor release | Full sync + clean snapshot before tagging |
|
|
3796
|
+
| After any drift report | Act within 1 week or record explicit "ignore, low priority" in the commit message |
|
|
3797
|
+
| New tool added to the registry | Baseline with `--update --tool <id>` |
|
|
3798
|
+
| Tool removed from support | Delete its entry from the registry AND from the snapshot JSON |
|
|
3799
|
+
|
|
3800
|
+
An optional GitHub Action can run `--check` weekly and open an issue on drift. Template:
|
|
3801
|
+
|
|
3802
|
+
```yaml
|
|
3803
|
+
# .github/workflows/ecosystem-doctor.yml (proposed, not yet committed)
|
|
3804
|
+
on:
|
|
3805
|
+
schedule:
|
|
3806
|
+
- cron: '0 9 * * 1' # Mondays 09:00 UTC
|
|
3807
|
+
workflow_dispatch: {}
|
|
3808
|
+
jobs:
|
|
3809
|
+
doctor:
|
|
3810
|
+
runs-on: ubuntu-latest
|
|
3811
|
+
steps:
|
|
3812
|
+
- uses: actions/checkout@v4
|
|
3813
|
+
- run: python3 scripts/ecosystem_doctor.py --format text | tee /tmp/doctor.txt
|
|
3814
|
+
- run: python3 scripts/ecosystem_doctor.py --check
|
|
3815
|
+
```
|
|
3816
|
+
|
|
3817
|
+
---
|
|
3818
|
+
|
|
3819
|
+
## When NOT to Use
|
|
3820
|
+
|
|
3821
|
+
- For **runtime** user support (user hit a bug with an editor) — use `/debug` or `/triage-issue`
|
|
3822
|
+
- For **picking** an editor to add — that is a product decision, not a sync; use `/architecture-decision`
|
|
3823
|
+
- For **one-off** testing of a specific tool's install flow — use the release-verification SOP
|
|
3824
|
+
- For **scaling up** the supported-tools list — add the new tool to the registry, then run the SOP to baseline it
|
|
3825
|
+
|
|
3826
|
+
---
|
|
3827
|
+
|
|
3828
|
+
## Related Documentation
|
|
3829
|
+
|
|
3830
|
+
- [Supported Tools Registry](../reference/supported-tools-registry.md) — human-readable per-tool breakdown
|
|
3831
|
+
- [MCP Editor Compatibility](../reference/mcp-editor-compatibility.md) — MCP-specific adapter table
|
|
3832
|
+
- [Maintenance SOP](maintenance-sop.md) — general toolkit upkeep
|
|
3833
|
+
- [Release Preparation SOP](release-preparation-sop.md) — run the doctor before tagging
|
|
3834
|
+
|
|
3835
|
+
---
|
|
3836
|
+
|
|
3130
3837
|
## kb/procedures/maintenance-sop.md
|
|
3131
3838
|
|
|
3132
3839
|
---
|
|
@@ -3134,9 +3841,9 @@ title: "SOP: Claude Toolkit Maintenance"
|
|
|
3134
3841
|
category: procedures
|
|
3135
3842
|
service: ai-toolkit
|
|
3136
3843
|
tags: [sop, maintenance, agents, skills, install]
|
|
3137
|
-
version: "
|
|
3844
|
+
version: "3.0.0"
|
|
3138
3845
|
created: "2026-03-23"
|
|
3139
|
-
last_updated: "2026-04-
|
|
3846
|
+
last_updated: "2026-04-23"
|
|
3140
3847
|
description: "Standard operating procedures for installing, maintaining, and evolving the ai-toolkit."
|
|
3141
3848
|
---
|
|
3142
3849
|
|
|
@@ -3222,6 +3929,17 @@ What `install` and `update` do (merge-friendly — user content never overwritte
|
|
|
3222
3929
|
|
|
3223
3930
|
Re-running updates only toolkit content. Old whole-directory symlinks are auto-upgraded to per-file on next run.
|
|
3224
3931
|
|
|
3932
|
+
### Install Profiles (v3.0.0)
|
|
3933
|
+
|
|
3934
|
+
| Profile | Claude Code core | Editor rules | Gemini hooks | Copilot dir layout | Per-editor hooks / sub-agents / commands | Git hooks |
|
|
3935
|
+
|---------|:---------------:|:------------:|:------------:|:------------------:|:---------------------------------------:|:---------:|
|
|
3936
|
+
| `minimal` | yes | pointer only | no | no | no | no |
|
|
3937
|
+
| `standard` (default) | yes | yes | **yes** (new in v3) | **yes** (new in v3) | no | no |
|
|
3938
|
+
| `strict` | yes | yes | yes | yes | no | yes |
|
|
3939
|
+
| `full` | yes | yes | yes | yes | **yes, all editors** | optional |
|
|
3940
|
+
|
|
3941
|
+
`--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.
|
|
3942
|
+
|
|
3225
3943
|
---
|
|
3226
3944
|
|
|
3227
3945
|
## Update Toolkit
|
|
@@ -3523,11 +4241,11 @@ What `uninstall` does:
|
|
|
3523
4241
|
title: "SOP: Release Preparation"
|
|
3524
4242
|
category: procedures
|
|
3525
4243
|
service: ai-toolkit
|
|
3526
|
-
tags: [sop, release, version, publish, changelog, semver, provenance, sarif]
|
|
3527
|
-
version: "1.
|
|
4244
|
+
tags: [sop, release, version, publish, changelog, semver, provenance, sarif, ecosystem]
|
|
4245
|
+
version: "1.10.0"
|
|
3528
4246
|
created: "2026-04-10"
|
|
3529
|
-
last_updated: "2026-04-
|
|
3530
|
-
description: "Step-by-step checklist for preparing a new ai-toolkit release — 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,
|
|
4247
|
+
last_updated: "2026-04-24"
|
|
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, the ecosystem-sync gate added in v1.9.0, and the registry-vs-generators drift gate added in v1.10.0."
|
|
3531
4249
|
---
|
|
3532
4250
|
|
|
3533
4251
|
# SOP: Release Preparation
|
|
@@ -3538,20 +4256,33 @@ Run this **before** tagging. After tagging and publishing, run the
|
|
|
3538
4256
|
|
|
3539
4257
|
**Pipeline:**
|
|
3540
4258
|
```
|
|
3541
|
-
|
|
4259
|
+
Ecosystem Sync SOP (drift check + generator updates)
|
|
4260
|
+
↓
|
|
4261
|
+
Release Preparation (this SOP)
|
|
4262
|
+
↓
|
|
4263
|
+
git tag → CI publish → Release Verification SOP
|
|
3542
4264
|
```
|
|
3543
4265
|
|
|
3544
|
-
**Time:**
|
|
4266
|
+
**Time:** 10-20 minutes (includes ecosystem sync review)
|
|
3545
4267
|
|
|
3546
4268
|
---
|
|
3547
4269
|
|
|
3548
4270
|
## Quick Checklist (TL;DR)
|
|
3549
4271
|
|
|
3550
4272
|
```bash
|
|
4273
|
+
# 0. Ecosystem sync (mandatory for minor/major releases; optional for patch)
|
|
4274
|
+
# Full procedure: kb/procedures/ecosystem-sync-sop.md
|
|
4275
|
+
python3 scripts/ecosystem_doctor.py --format text > /tmp/eco-report.txt
|
|
4276
|
+
cat /tmp/eco-report.txt
|
|
4277
|
+
# If drift detected: stop here, follow ecosystem-sync-sop.md Phase 2-4 to
|
|
4278
|
+
# classify each drift (A-F), update generators as needed, refresh snapshot,
|
|
4279
|
+
# THEN resume this SOP.
|
|
4280
|
+
python3 scripts/ecosystem_doctor.py --update # after all drift resolved
|
|
4281
|
+
|
|
3551
4282
|
# 1. Decide version bump
|
|
3552
4283
|
# patch (1.4.2 → 1.4.3): bugfix, typo, doc fix
|
|
3553
|
-
# minor (1.4.2 → 1.5.0): new feature, new skill, new flag
|
|
3554
|
-
# major (1.4.2 → 2.0.0): breaking change
|
|
4284
|
+
# minor (1.4.2 → 1.5.0): new feature, new skill, new flag, any ecosystem-class-B/F change
|
|
4285
|
+
# major (1.4.2 → 2.0.0): breaking change, any ecosystem-class-D removed path
|
|
3555
4286
|
|
|
3556
4287
|
# 2. Sync version across all files
|
|
3557
4288
|
python3 scripts/sync_version.py X.Y.Z # if script exists, else manual
|
|
@@ -3563,7 +4294,7 @@ python3 scripts/generate_codex_rules.py .
|
|
|
3563
4294
|
python3 scripts/generate_llms_txt.py > llms.txt
|
|
3564
4295
|
python3 scripts/generate_llms_txt.py --full > llms-full.txt
|
|
3565
4296
|
|
|
3566
|
-
# 5. Validate + audit + SARIF + test
|
|
4297
|
+
# 5. Validate + audit + SARIF + test + ecosystem check
|
|
3567
4298
|
python3 scripts/validate.py --strict && python3 scripts/audit_skills.py --ci && python3 scripts/audit_skills.py --sarif > /tmp/audit.sarif && npm test
|
|
3568
4299
|
|
|
3569
4300
|
# 5a. Supply-chain standard (v2.8.0+) — non-negotiable
|
|
@@ -3571,6 +4302,9 @@ grep -q -- '--provenance' .github/workflows/publish.yml || { echo "MISSING --pro
|
|
|
3571
4302
|
grep -q 'id-token: write' .github/workflows/publish.yml || { echo "MISSING id-token: write"; exit 1; }
|
|
3572
4303
|
python3 scripts/audit_skills.py --permissions # review Bash/Write/Edit footprint
|
|
3573
4304
|
|
|
4305
|
+
# 5b. Ecosystem gate — snapshot must be current before tag
|
|
4306
|
+
python3 scripts/ecosystem_doctor.py --offline --check || { echo "STALE ecosystem snapshot — re-run doctor"; exit 1; }
|
|
4307
|
+
|
|
3574
4308
|
# 6. Commit + tag + push
|
|
3575
4309
|
git add -A && git commit -m "chore: release vX.Y.Z"
|
|
3576
4310
|
git tag vX.Y.Z
|
|
@@ -3579,6 +4313,60 @@ git push origin main --tags
|
|
|
3579
4313
|
|
|
3580
4314
|
---
|
|
3581
4315
|
|
|
4316
|
+
## Phase 0: Ecosystem Sync (MANDATORY for minor/major)
|
|
4317
|
+
|
|
4318
|
+
Before touching version numbers, confirm the toolkit is aligned with the current state of every editor / platform it integrates with. Skipping this phase ships a release whose generators may lag a month-old CLI refactor, a rename of `.cursorrules` to `.cursor/rules/`, or a new hook event we do not yet emit.
|
|
4319
|
+
|
|
4320
|
+
**When this phase is mandatory:**
|
|
4321
|
+
- Minor release (X.Y.0) — always
|
|
4322
|
+
- Major release (X.0.0) — always
|
|
4323
|
+
- Patch release (X.Y.Z) — only if the patch touches a generator or install flow
|
|
4324
|
+
|
|
4325
|
+
**When to skip:** pure doc-only patches, SOP edits, internal refactors that do not touch `scripts/generate_*` or `app/skills/*/SKILL.md`.
|
|
4326
|
+
|
|
4327
|
+
### 0.1 Run the doctor
|
|
4328
|
+
|
|
4329
|
+
```bash
|
|
4330
|
+
python3 scripts/ecosystem_doctor.py --format text | tee /tmp/eco-report.txt
|
|
4331
|
+
```
|
|
4332
|
+
|
|
4333
|
+
Output classifies every registered tool as **Clean**, **Drift**, or **Errored**.
|
|
4334
|
+
|
|
4335
|
+
### 0.2 Act on drift
|
|
4336
|
+
|
|
4337
|
+
For each drifting tool, follow [ecosystem-sync-sop.md](ecosystem-sync-sop.md) Phase 2-4:
|
|
4338
|
+
|
|
4339
|
+
| Drift class | Release impact |
|
|
4340
|
+
|-------------|----------------|
|
|
4341
|
+
| A (cosmetic reword) | No version impact — refresh snapshot, continue |
|
|
4342
|
+
| B (new feature — integrate) | **Minor** version bump at minimum; new generator or extended generator |
|
|
4343
|
+
| C (new feature — not adopted) | No impact — note in registry |
|
|
4344
|
+
| D (deprecation) | **Minor** or **major** depending on user impact; add migration warning |
|
|
4345
|
+
| E (feature promoted to default) | **Minor**; simplify generator, keep fallback comment |
|
|
4346
|
+
| F (feature newly globally available) | **Minor**; may require new generator or new config path |
|
|
4347
|
+
|
|
4348
|
+
If any B/D/E/F changes land in this preparation pass, mention them explicitly in the CHANGELOG entry (Phase 3) under a `Ecosystem` subsection.
|
|
4349
|
+
|
|
4350
|
+
### 0.3 Refresh snapshot
|
|
4351
|
+
|
|
4352
|
+
Once every drift is resolved (either by code change or by re-classifying as acceptable):
|
|
4353
|
+
|
|
4354
|
+
```bash
|
|
4355
|
+
python3 scripts/ecosystem_doctor.py --update
|
|
4356
|
+
```
|
|
4357
|
+
|
|
4358
|
+
This writes the new baseline to `benchmarks/ecosystem-doctor-snapshot.json`. Commit it as part of the release commit.
|
|
4359
|
+
|
|
4360
|
+
### 0.4 Gate
|
|
4361
|
+
|
|
4362
|
+
```bash
|
|
4363
|
+
python3 scripts/ecosystem_doctor.py --offline --check
|
|
4364
|
+
```
|
|
4365
|
+
|
|
4366
|
+
Must exit `0`. If it exits `1`, the snapshot is stale — rerun Phase 0.3 or review the remaining drift.
|
|
4367
|
+
|
|
4368
|
+
---
|
|
4369
|
+
|
|
3582
4370
|
## Phase 1: Determine Version Bump
|
|
3583
4371
|
|
|
3584
4372
|
Follow [Semantic Versioning](https://semver.org/):
|
|
@@ -3729,7 +4517,15 @@ python3 scripts/audit_skills.py --ci
|
|
|
3729
4517
|
python3 scripts/audit_skills.py --sarif > audit.sarif # MANDATORY — GHAS ingest
|
|
3730
4518
|
python3 scripts/audit_skills.py --permissions # review Bash/Write/Edit footprint
|
|
3731
4519
|
|
|
3732
|
-
#
|
|
4520
|
+
# Registry / generator drift (added in 1.10.0). Meta-generators excluded.
|
|
4521
|
+
META="generate_agents_md.py|generate_llms_txt.py"
|
|
4522
|
+
diff \
|
|
4523
|
+
<(grep -oE 'scripts/generate_[a-z_]+\.py' kb/reference/supported-tools-registry.md | sort -u) \
|
|
4524
|
+
<(ls scripts/generate_*.py | grep -vE "$META" | sort -u) \
|
|
4525
|
+
&& echo "OK: registry matches filesystem" \
|
|
4526
|
+
|| { echo "DRIFT: update supported-tools-registry.md before tagging"; exit 1; }
|
|
4527
|
+
|
|
4528
|
+
# Run npm test ONCE, cache output, parse from file. The suite is 900+ bats
|
|
3733
4529
|
# cases — rerunning it per check wastes minutes. Do not pipe npm test into
|
|
3734
4530
|
# tail/grep multiple times in the same session.
|
|
3735
4531
|
npm test > /tmp/npm-test.log 2>&1
|
|
@@ -3742,11 +4538,12 @@ echo "ok: $(grep -c '^ok ' /tmp/npm-test.log) | not ok: $(grep -c '^not ok' /tmp
|
|
|
3742
4538
|
- `audit_skills.py --ci`: `HIGH: 0 | WARN: 0` (INFO is acceptable)
|
|
3743
4539
|
- `audit_skills.py --sarif`: valid JSON, non-empty `runs[0].tool.driver.rules`
|
|
3744
4540
|
- `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
|
|
4541
|
+
- 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.
|
|
3745
4542
|
- `npm test`: `1..N` with zero `not ok` (read from the cached `/tmp/npm-test.log`, do not rerun)
|
|
3746
4543
|
|
|
3747
4544
|
**One-liner:**
|
|
3748
4545
|
```bash
|
|
3749
|
-
python3 scripts/validate.py --strict && python3 scripts/audit_skills.py --ci && python3 scripts/audit_skills.py --sarif > audit.sarif && npm test
|
|
4546
|
+
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
|
|
3750
4547
|
```
|
|
3751
4548
|
|
|
3752
4549
|
**If tests fail:** Fix the issue, do NOT skip. Common failures:
|
|
@@ -3859,13 +4656,16 @@ git push origin --delete vX.Y.Z
|
|
|
3859
4656
|
|
|
3860
4657
|
| # | Step | Command / Action | Pass Criteria |
|
|
3861
4658
|
|---|------|-----------------|---------------|
|
|
4659
|
+
| 0a | Ecosystem drift check | `ecosystem_doctor.py --format text` | All tools Clean, or drift classified and resolved |
|
|
4660
|
+
| 0b | Ecosystem snapshot refresh | `ecosystem_doctor.py --update` | `benchmarks/ecosystem-doctor-snapshot.json` updated |
|
|
4661
|
+
| 0c | Ecosystem gate | `ecosystem_doctor.py --offline --check` | Exit 0 |
|
|
3862
4662
|
| 1 | Version bump type | Decide patch/minor/major | — |
|
|
3863
4663
|
| 2 | `package.json` version | Edit `"version"` | Matches target |
|
|
3864
4664
|
| 3 | `manifest.json` version | Edit `"version"` | Matches target |
|
|
3865
4665
|
| 4 | `plugin.json` version | Edit `"version"` | Matches target |
|
|
3866
4666
|
| 5 | `package-lock.json` | `npm install --package-lock-only` | Matches target |
|
|
3867
4667
|
| 6 | Count sync | Check `package.json` description, README | `validate.py` passes |
|
|
3868
|
-
| 7 | CHANGELOG.md | Add release entry | Entry exists for vX.Y.Z |
|
|
4668
|
+
| 7 | CHANGELOG.md | Add release entry (incl. `Ecosystem` subsection if any B/D/E/F drift) | Entry exists for vX.Y.Z |
|
|
3869
4669
|
| 8 | Regenerate artifacts | `generate_agents_md.py`, `generate_codex_rules.py`, `generate_llms_txt.py` | No unexpected diff |
|
|
3870
4670
|
| 9 | Validate | `validate.py --strict` | 0 errors, 0 warnings |
|
|
3871
4671
|
| 10 | Security audit (CI mode) | `audit_skills.py --ci` | 0 HIGH |
|
|
@@ -3887,10 +4687,10 @@ title: "SOP: Release Verification"
|
|
|
3887
4687
|
category: procedures
|
|
3888
4688
|
service: ai-toolkit
|
|
3889
4689
|
tags: [sop, verification, release, smoke-test, install, update, qa, provenance, sarif]
|
|
3890
|
-
version: "1.
|
|
4690
|
+
version: "1.4.0"
|
|
3891
4691
|
created: "2026-04-08"
|
|
3892
|
-
last_updated: "2026-04-
|
|
3893
|
-
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
|
|
4692
|
+
last_updated: "2026-04-24"
|
|
4693
|
+
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."
|
|
3894
4694
|
---
|
|
3895
4695
|
|
|
3896
4696
|
# SOP: Release Verification
|
|
@@ -3936,6 +4736,10 @@ python3 scripts/audit_skills.py --ci # 10. Security audit
|
|
|
3936
4736
|
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?
|
|
3937
4737
|
python3 scripts/audit_skills.py --permissions | head -30 # 12. Broad-access skills reviewed?
|
|
3938
4738
|
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?
|
|
4739
|
+
|
|
4740
|
+
# Deep-coverage verification (Phase 9, v3.0.0+)
|
|
4741
|
+
META="generate_agents_md.py|generate_llms_txt.py"
|
|
4742
|
+
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?
|
|
3939
4743
|
```
|
|
3940
4744
|
|
|
3941
4745
|
---
|
|
@@ -4001,8 +4805,8 @@ ai-toolkit status
|
|
|
4001
4805
|
```
|
|
4002
4806
|
|
|
4003
4807
|
**Verify `--dry-run`:**
|
|
4004
|
-
- [ ] Agents >=
|
|
4005
|
-
- [ ] Skills >=
|
|
4808
|
+
- [ ] Agents >= 44
|
|
4809
|
+
- [ ] Skills >= 99
|
|
4006
4810
|
- [ ] Hooks merged into settings.json
|
|
4007
4811
|
- [ ] "Other AI Tools" section lists cursor, windsurf, gemini, augment (antigravity via --local)
|
|
4008
4812
|
|
|
@@ -4052,7 +4856,7 @@ cd - && rm -rf /tmp/ai-toolkit-verify
|
|
|
4052
4856
|
- [ ] Would create: CLAUDE.md
|
|
4053
4857
|
- [ ] Would create: .claude/settings.local.json
|
|
4054
4858
|
- [ ] Would inject: .claude/constitution.md
|
|
4055
|
-
- [ ] Editors: all
|
|
4859
|
+
- [ ] Editors: all 11 listed (copilot, cursor, windsurf, cline, roo, aider, augment, antigravity, codex, gemini, opencode)
|
|
4056
4860
|
- [ ] Would generate configs for each editor (legacy + directory-based)
|
|
4057
4861
|
- [ ] Would install: .git/hooks/pre-commit
|
|
4058
4862
|
- [ ] Would inject language rules (auto-detected)
|
|
@@ -4073,7 +4877,7 @@ python3 scripts/audit_skills.py --ci
|
|
|
4073
4877
|
```
|
|
4074
4878
|
|
|
4075
4879
|
**Verify validate.py:**
|
|
4076
|
-
- [ ] Agents >=
|
|
4880
|
+
- [ ] Agents >= 44, Skills >= 99, Tests >= 900
|
|
4077
4881
|
- [ ] Hook events: 12, Hook scripts: >= 20
|
|
4078
4882
|
- [ ] Plugin packs >= 10, KB documents >= 20
|
|
4079
4883
|
- [ ] `Errors: 0 | Warnings: 0` → `VALIDATION PASSED`
|
|
@@ -4101,7 +4905,7 @@ echo "exit: $exit"
|
|
|
4101
4905
|
|
|
4102
4906
|
**Verify:**
|
|
4103
4907
|
- [ ] `exit == 0`
|
|
4104
|
-
- [ ] `ok == expected test count` (e.g.,
|
|
4908
|
+
- [ ] `ok == expected test count` (e.g., 945 on v3.0.0)
|
|
4105
4909
|
- [ ] `not ok == 0`
|
|
4106
4910
|
- [ ] Bats runs tests in parallel (4 jobs)
|
|
4107
4911
|
- [ ] Groups: agents, autodetect, cli, generators, guards, hooks, inject,
|
|
@@ -4206,6 +5010,101 @@ AI_TOOLKIT_STRICT_PIN=1 ai-toolkit update --dry-run
|
|
|
4206
5010
|
|
|
4207
5011
|
---
|
|
4208
5012
|
|
|
5013
|
+
## Phase 9: Deep-Coverage Checks (v3.0.0+)
|
|
5014
|
+
|
|
5015
|
+
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.
|
|
5016
|
+
|
|
5017
|
+
> **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.
|
|
5018
|
+
|
|
5019
|
+
### 9.1 `--profile full` emits every native surface
|
|
5020
|
+
|
|
5021
|
+
```bash
|
|
5022
|
+
D=/tmp/aitk-profile-full-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
5023
|
+
ai-toolkit install --local --editors cursor,windsurf,gemini,augment,codex \
|
|
5024
|
+
--profile full --codex-skills --dry-run 2>&1 \
|
|
5025
|
+
| grep -E "\\.cursor/(hooks\\.json|agents)|\\.windsurf/hooks\\.json|\\.gemini/(settings\\.json|commands)|\\.augment/(agents|commands)|\\.codex/skills"
|
|
5026
|
+
```
|
|
5027
|
+
|
|
5028
|
+
**Verify** — at least the following lines appear:
|
|
5029
|
+
- [ ] `.cursor/hooks.json` and `.cursor/agents/`
|
|
5030
|
+
- [ ] `.windsurf/hooks.json`
|
|
5031
|
+
- [ ] `.gemini/settings.json` hooks AND `.gemini/commands/`
|
|
5032
|
+
- [ ] `.augment/agents/` + `.augment/commands/` + `$HOME/.augment/settings.json`
|
|
5033
|
+
- [ ] `.codex/skills/` (opt-in via `--codex-skills`)
|
|
5034
|
+
|
|
5035
|
+
### 9.2 `--codex-skills` is orthogonal to `--profile`
|
|
5036
|
+
|
|
5037
|
+
```bash
|
|
5038
|
+
D=/tmp/aitk-codex-skills-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
5039
|
+
ai-toolkit install --local --editors codex --profile standard --codex-skills --dry-run 2>&1 \
|
|
5040
|
+
| grep -q "Would generate: .codex/skills" && echo "OK: --codex-skills works without --profile full"
|
|
5041
|
+
ai-toolkit install --local --editors codex --profile full --dry-run 2>&1 \
|
|
5042
|
+
| grep -q "Would generate: .codex/skills" && echo "FAIL: --profile full should NOT auto-emit .codex/skills" \
|
|
5043
|
+
|| echo "OK: --profile full alone does not auto-emit .codex/skills (correct — opt-in only)"
|
|
5044
|
+
```
|
|
5045
|
+
|
|
5046
|
+
**Verify:**
|
|
5047
|
+
- [ ] `--codex-skills` emits `.codex/skills/` at any profile
|
|
5048
|
+
- [ ] `--profile full` alone does NOT emit `.codex/skills/` (must be opt-in)
|
|
5049
|
+
|
|
5050
|
+
### 9.3 Breaking-change surfaces land on `--profile standard`
|
|
5051
|
+
|
|
5052
|
+
v3.0.0 moved two surfaces from opt-in to default:
|
|
5053
|
+
- Copilot directory layout (`.github/instructions/`, `.github/prompts/`)
|
|
5054
|
+
- Gemini hooks (`.gemini/settings.json`)
|
|
5055
|
+
|
|
5056
|
+
```bash
|
|
5057
|
+
D=/tmp/aitk-breaking-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
5058
|
+
ai-toolkit install --local --editors copilot,gemini --profile standard --dry-run 2>&1 \
|
|
5059
|
+
| tee /tmp/aitk-breaking.log
|
|
5060
|
+
grep -q "\\.github/instructions/" /tmp/aitk-breaking.log && echo "OK: Copilot dir layout at standard"
|
|
5061
|
+
grep -q "\\.gemini/settings\\.json hooks" /tmp/aitk-breaking.log && echo "OK: Gemini hooks at standard"
|
|
5062
|
+
```
|
|
5063
|
+
|
|
5064
|
+
**Verify both lines print `OK:`**. If either is missing, a regression has unwound the v3.0.0 breaking change.
|
|
5065
|
+
|
|
5066
|
+
### 9.4 Install is idempotent
|
|
5067
|
+
|
|
5068
|
+
```bash
|
|
5069
|
+
D=/tmp/aitk-idem-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
5070
|
+
ai-toolkit install --local --editors cursor,gemini --profile full >/dev/null 2>&1
|
|
5071
|
+
SHA1=$(find .cursor .gemini -type f -exec shasum {} + | shasum | awk '{print $1}')
|
|
5072
|
+
ai-toolkit install --local --editors cursor,gemini --profile full >/dev/null 2>&1
|
|
5073
|
+
SHA2=$(find .cursor .gemini -type f -exec shasum {} + | shasum | awk '{print $1}')
|
|
5074
|
+
[ "$SHA1" = "$SHA2" ] && echo "OK: idempotent" || echo "FAIL: install is not idempotent"
|
|
5075
|
+
```
|
|
5076
|
+
|
|
5077
|
+
**Verify:** prints `OK: idempotent`. A second run must produce byte-identical files in every managed path.
|
|
5078
|
+
|
|
5079
|
+
### 9.5 Live-install JSON outputs parse
|
|
5080
|
+
|
|
5081
|
+
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.
|
|
5082
|
+
|
|
5083
|
+
```bash
|
|
5084
|
+
D=/tmp/aitk-json-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
5085
|
+
ai-toolkit install --local --editors cursor,windsurf,gemini,augment --profile full >/dev/null 2>&1
|
|
5086
|
+
for f in .cursor/hooks.json .windsurf/hooks.json .gemini/settings.json $HOME/.augment/settings.json; do
|
|
5087
|
+
[ -f "$f" ] && python3 -c "import json; json.load(open('$f'))" && echo "OK: $f"
|
|
5088
|
+
done
|
|
5089
|
+
```
|
|
5090
|
+
|
|
5091
|
+
**Verify:** each emitted file prints `OK: <path>`. Any `json.decoder.JSONDecodeError` means the merge logic corrupted the output.
|
|
5092
|
+
|
|
5093
|
+
### 9.6 Registry / generator drift check
|
|
5094
|
+
|
|
5095
|
+
`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.
|
|
5096
|
+
|
|
5097
|
+
```bash
|
|
5098
|
+
META="generate_agents_md.py|generate_llms_txt.py"
|
|
5099
|
+
REG=$(grep -oE 'scripts/generate_[a-z_]+\.py' kb/reference/supported-tools-registry.md | sort -u)
|
|
5100
|
+
FS=$(ls scripts/generate_*.py | grep -vE "$META" | sort -u)
|
|
5101
|
+
diff <(echo "$REG") <(echo "$FS") && echo "OK: registry matches filesystem" || echo "DRIFT: update supported-tools-registry.md"
|
|
5102
|
+
```
|
|
5103
|
+
|
|
5104
|
+
**Verify:** prints `OK: registry matches filesystem`. If not, add the missing rows to the registry before tagging the next release.
|
|
5105
|
+
|
|
5106
|
+
---
|
|
5107
|
+
|
|
4209
5108
|
## Troubleshooting
|
|
4210
5109
|
|
|
4211
5110
|
### `ai-toolkit: command not found`
|
|
@@ -4260,6 +5159,11 @@ ai-toolkit eject /tmp/test # retry
|
|
|
4260
5159
|
| Tests | `npm test`: N/N passed, 0 failures |
|
|
4261
5160
|
| Eject | Standalone `.claude/` with real files AND `output-styles/` directory |
|
|
4262
5161
|
| Guards | Destructive commands blocked |
|
|
5162
|
+
| Deep coverage | `--profile full` emits all 9 v3.0.0 native surfaces; `--codex-skills` works orthogonally |
|
|
5163
|
+
| Breaking changes | Copilot directory layout + Gemini hooks emit at `--profile standard` (v3.0.0 contract) |
|
|
5164
|
+
| Idempotence | Second `install` run produces byte-identical output in every managed path |
|
|
5165
|
+
| Live JSON | Every generated `.json` file on disk parses as valid JSON |
|
|
5166
|
+
| Registry | `supported-tools-registry.md` enumerates every `scripts/generate_*.py` we ship |
|
|
4263
5167
|
|
|
4264
5168
|
---
|
|
4265
5169
|
|
|
@@ -6915,9 +7819,9 @@ title: "Global Install Model"
|
|
|
6915
7819
|
category: reference
|
|
6916
7820
|
service: ai-toolkit
|
|
6917
7821
|
tags: [install, global, claude, codex, plugins, local-setup]
|
|
6918
|
-
version: "
|
|
7822
|
+
version: "3.0.0"
|
|
6919
7823
|
created: "2026-03-26"
|
|
6920
|
-
last_updated: "2026-04-
|
|
7824
|
+
last_updated: "2026-04-23"
|
|
6921
7825
|
description: "Reference description of the global install target, project-local editor setup, global Codex plugin layering, and command responsibilities in ai-toolkit."
|
|
6922
7826
|
---
|
|
6923
7827
|
|
|
@@ -6951,6 +7855,19 @@ installed with `ai-toolkit plugin install --editor codex`.
|
|
|
6951
7855
|
| `ai-toolkit plugin update --editor claude|codex|all <name>` | runtime-native config | re-apply plugin pack after toolkit updates |
|
|
6952
7856
|
| `ai-toolkit plugin remove --editor claude|codex|all <name>` | runtime-native config | remove plugin pack from selected runtime(s) |
|
|
6953
7857
|
|
|
7858
|
+
## Install Profiles (v3.0.0)
|
|
7859
|
+
|
|
7860
|
+
The `--profile` flag controls how much of each editor's native surface is activated.
|
|
7861
|
+
|
|
7862
|
+
| Profile | What runs | Use when |
|
|
7863
|
+
|---------|-----------|----------|
|
|
7864
|
+
| `minimal` | Agents and skills only. No editor generators beyond pointer skills for editors that require them. | You want the smallest possible footprint, or you manage editor configs by hand. |
|
|
7865
|
+
| `standard` (default) | Claude Code + editor rule files. Includes **Gemini hooks** and the **Copilot directory layout** (v3.0.0 change from prior `standard`). | Day-to-day installs. Most users. |
|
|
7866
|
+
| `strict` | Everything in `standard` plus git-hook wiring for commit-time safety checks. | Solo dev or tight team with zero tolerance for drift. |
|
|
7867
|
+
| `full` | Every native surface across every editor: hooks, sub-agents, custom commands, skill pointers for Cursor / Windsurf / Gemini / Augment / Antigravity. | You want maximum coverage and understand that each editor will carry generated files under its own layout. |
|
|
7868
|
+
|
|
7869
|
+
`--codex-skills` is an independent opt-in flag (not part of profile) that materializes the full `.claude/skills/` catalog under `.agents/skills/` for Codex. Other editors stay on compat-read or the per-editor pointer skill.
|
|
7870
|
+
|
|
6954
7871
|
## Why global install is the default
|
|
6955
7872
|
|
|
6956
7873
|
- less setup friction,
|
|
@@ -9876,6 +10793,240 @@ Reset: ai-toolkit stats --reset
|
|
|
9876
10793
|
|
|
9877
10794
|
---
|
|
9878
10795
|
|
|
10796
|
+
## kb/reference/supported-tools-registry.md
|
|
10797
|
+
|
|
10798
|
+
---
|
|
10799
|
+
title: "Supported Tools Registry"
|
|
10800
|
+
category: reference
|
|
10801
|
+
service: ai-toolkit
|
|
10802
|
+
tags: [editors, platforms, generators, integration, ecosystem]
|
|
10803
|
+
version: "1.2.0"
|
|
10804
|
+
created: "2026-04-23"
|
|
10805
|
+
last_updated: "2026-04-24"
|
|
10806
|
+
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."
|
|
10807
|
+
---
|
|
10808
|
+
|
|
10809
|
+
# Supported Tools Registry
|
|
10810
|
+
|
|
10811
|
+
The canonical data lives in **`scripts/ecosystem_tools.json`** and is consumed by `scripts/ecosystem_doctor.py`. This document is a derived view — when the JSON changes, update this table too.
|
|
10812
|
+
|
|
10813
|
+
## Tool Count: 12
|
|
10814
|
+
|
|
10815
|
+
1 primary runtime (Claude Code) + 11 editor integrations.
|
|
10816
|
+
|
|
10817
|
+
---
|
|
10818
|
+
|
|
10819
|
+
## Primary Runtime
|
|
10820
|
+
|
|
10821
|
+
### Claude Code
|
|
10822
|
+
|
|
10823
|
+
| Field | Value |
|
|
10824
|
+
|-------|-------|
|
|
10825
|
+
| ID | `claude-code` |
|
|
10826
|
+
| Docs | https://platform.claude.com/docs/en/claude-code |
|
|
10827
|
+
| Release notes | https://github.com/anthropics/claude-code/releases |
|
|
10828
|
+
| Config paths | `~/.claude/settings.json`, `.claude/settings.local.json`, `CLAUDE.md`, `.claude/agents/*.md`, `.claude/skills/*/SKILL.md`, `~/.claude/themes/*.json` (v2.1.118+) |
|
|
10829
|
+
| Our generators | — (Claude Code is the primary target; toolkit content ships directly as `.md` files and `settings.json` merges) |
|
|
10830
|
+
| Tracked hook events | Core: `SessionStart`, `SessionEnd`, `UserPromptSubmit`, `Notification`. Tool: `PreToolUse`, `PostToolUse`. Turn: `Stop`, `StopFailure`. 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` |
|
|
10831
|
+
| Tracked handler types | `command`, `prompt`, `agent`, `mcp_tool` |
|
|
10832
|
+
| Other capabilities | slash commands, MCP server/client, sub-agent, output style, `SKILL.md` (≥500 lines warn) |
|
|
10833
|
+
| Version probe | `claude --version` |
|
|
10834
|
+
|
|
10835
|
+
---
|
|
10836
|
+
|
|
10837
|
+
## Editor Integrations
|
|
10838
|
+
|
|
10839
|
+
### Cursor
|
|
10840
|
+
|
|
10841
|
+
| Field | Value |
|
|
10842
|
+
|-------|-------|
|
|
10843
|
+
| ID | `cursor` |
|
|
10844
|
+
| Docs | https://cursor.com/docs |
|
|
10845
|
+
| Changelog | https://cursor.com/changelog |
|
|
10846
|
+
| Stable docs mirror | https://cursor.com/llms.txt (all doc pages have .md twins) |
|
|
10847
|
+
| 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` |
|
|
10848
|
+
| Compat read paths | `.claude/skills/`, `.claude/agents/`, `.codex/skills/`, `.codex/agents/` (Cursor cross-reads these so ai-toolkit's Claude install works automatically) |
|
|
10849
|
+
| 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) |
|
|
10850
|
+
| Tracked capabilities | `cursorrules`, `.cursor/rules`, `AGENTS.md`, `mcp.json`, Composer, Agent Mode, hooks.json, subagents, skills, plugins |
|
|
10851
|
+
|
|
10852
|
+
### Windsurf
|
|
10853
|
+
|
|
10854
|
+
| Field | Value |
|
|
10855
|
+
|-------|-------|
|
|
10856
|
+
| ID | `windsurf` |
|
|
10857
|
+
| Docs | https://docs.windsurf.com |
|
|
10858
|
+
| Changelog | https://windsurf.com/changelog |
|
|
10859
|
+
| Stable docs mirror | https://docs.windsurf.com/llms.txt + per-page .md twins |
|
|
10860
|
+
| Config paths | `.windsurfrules`, `.windsurf/rules/*.md`, `.windsurf/workflows/*.md`, `AGENTS.md`, `~/.codeium/windsurf/memories/global_rules.md`, `~/.codeium/windsurf/mcp_config.json` |
|
|
10861
|
+
| Compat read paths | `.agents/skills/`, `~/.agents/skills/`, (with Claude Code config-reading) `.claude/skills/`, `~/.claude/skills/` |
|
|
10862
|
+
| Our generators | `scripts/generate_windsurf.py`, `scripts/generate_windsurf_rules.py`, `scripts/generate_windsurf_hooks.py` (profile=full) |
|
|
10863
|
+
| Tracked capabilities | Cascade, `windsurfrules`, `AGENTS.md`, activation triggers (`always_on`/`glob`/`model_decision`), workflows, MCP, memories, hooks |
|
|
10864
|
+
| Activation modes emitted | always_on (agents/security/quality), glob (testing + language rules), model_decision (code-style/workflow) |
|
|
10865
|
+
|
|
10866
|
+
### GitHub Copilot
|
|
10867
|
+
|
|
10868
|
+
| Field | Value |
|
|
10869
|
+
|-------|-------|
|
|
10870
|
+
| ID | `github-copilot` |
|
|
10871
|
+
| Docs | https://docs.github.com/en/copilot |
|
|
10872
|
+
| Release notes | https://github.blog/changelog/label/copilot/ |
|
|
10873
|
+
| Config paths | `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md`, `.github/prompts/*.prompt.md`, `AGENTS.md` |
|
|
10874
|
+
| Our generators | `scripts/generate_copilot.py` |
|
|
10875
|
+
| Tracked capabilities | `copilot-instructions.md`, Copilot Chat, Copilot Workspace, Copilot cloud agent, `applyTo`, custom agents, prompt files, `instructions.md`, MCP |
|
|
10876
|
+
| 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). |
|
|
10877
|
+
|
|
10878
|
+
### Gemini CLI
|
|
10879
|
+
|
|
10880
|
+
| Field | Value |
|
|
10881
|
+
|-------|-------|
|
|
10882
|
+
| ID | `gemini-cli` |
|
|
10883
|
+
| Docs | https://github.com/google-gemini/gemini-cli/tree/main/docs |
|
|
10884
|
+
| Release notes | https://github.com/google-gemini/gemini-cli/releases |
|
|
10885
|
+
| 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` |
|
|
10886
|
+
| 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) |
|
|
10887
|
+
| 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` |
|
|
10888
|
+
| Version probe | `gemini --version` |
|
|
10889
|
+
| Latest upstream | v0.39.0 (2026-04-23) |
|
|
10890
|
+
|
|
10891
|
+
### Cline
|
|
10892
|
+
|
|
10893
|
+
| Field | Value |
|
|
10894
|
+
|-------|-------|
|
|
10895
|
+
| ID | `cline` |
|
|
10896
|
+
| Docs | https://docs.cline.bot |
|
|
10897
|
+
| Release notes | https://github.com/cline/cline/releases |
|
|
10898
|
+
| Config paths | `.clinerules/*.md`, `.clinerules/workflows/*.md`, `.clinerules/hooks/`, `.cline/skills/`, `~/.cline/data/settings/cline_mcp_settings.json`, `~/Documents/Cline/Rules/` |
|
|
10899
|
+
| Our generators | `scripts/generate_cline.py`, `scripts/generate_cline_rules.py` |
|
|
10900
|
+
| Tracked capabilities | `clinerules`, Plan Mode, Act Mode, MCP, custom modes, workflows, hooks, skills, subagents, conditional rules |
|
|
10901
|
+
| Notes | Conditional rules (`paths:` YAML frontmatter) are emitted for testing and language-specific rules since 2026-04. Skills (`.cline/skills/`) and hooks (`.clinerules/hooks/`) remain experimental upstream and are not yet generated. |
|
|
10902
|
+
|
|
10903
|
+
### Roo Code
|
|
10904
|
+
|
|
10905
|
+
| Field | Value |
|
|
10906
|
+
|-------|-------|
|
|
10907
|
+
| ID | `roo-code` |
|
|
10908
|
+
| Docs | https://docs.roocode.com |
|
|
10909
|
+
| Release notes | https://github.com/RooCodeInc/Roo-Code/releases |
|
|
10910
|
+
| Config paths | `.roomodes`, `.roo/rules/*.md`, `.roo/rules-{slug}/*.md`, `.roo/mcp.json`, `~/.roo/rules/`, `~/.roo/settings/custom_modes.yaml`, `~/.roo/settings/mcp_settings.json` |
|
|
10911
|
+
| Our generators | `scripts/generate_roo_modes.py`, `scripts/generate_roo_rules.py` |
|
|
10912
|
+
| Tracked capabilities | `roomodes`, custom modes, Code Actions, MCP, Orchestrator mode, `whenToUse`, `description`, `roleDefinition`, `groups` |
|
|
10913
|
+
| Notes | `.roomodes` now includes `description` and `whenToUse` for every mode (since 2026-04). YAML `.roomodes` is upstream-preferred but not yet emitted — JSON is still accepted by Roo. |
|
|
10914
|
+
|
|
10915
|
+
### Aider
|
|
10916
|
+
|
|
10917
|
+
| Field | Value |
|
|
10918
|
+
|-------|-------|
|
|
10919
|
+
| ID | `aider` |
|
|
10920
|
+
| Docs | https://aider.chat/docs |
|
|
10921
|
+
| Changelog | https://aider.chat/HISTORY.html |
|
|
10922
|
+
| Config paths | `.aider.conf.yml`, `CONVENTIONS.md`, `~/.aider.conf.yml` |
|
|
10923
|
+
| Our generators | `scripts/generate_aider_conf.py`, `scripts/generate_conventions.py` |
|
|
10924
|
+
| Tracked capabilities | `.aider.conf.yml`, `CONVENTIONS.md`, `architect`, `auto-accept-architect`, `read`, `lint-cmd`, `test-cmd`, `commit-prompt`, `attribute-co-authored-by`, `chat-language`, `commit-language`, `watch-files`, `auto-commits` |
|
|
10925
|
+
| Version probe | `aider --version` |
|
|
10926
|
+
| Latest upstream | v0.86.1 (Aug 2025) |
|
|
10927
|
+
|
|
10928
|
+
### Augment
|
|
10929
|
+
|
|
10930
|
+
| Field | Value |
|
|
10931
|
+
|-------|-------|
|
|
10932
|
+
| ID | `augment` |
|
|
10933
|
+
| Docs | https://docs.augmentcode.com |
|
|
10934
|
+
| Changelog | https://www.augmentcode.com/changelog |
|
|
10935
|
+
| 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` |
|
|
10936
|
+
| 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) |
|
|
10937
|
+
| 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 |
|
|
10938
|
+
| SPA caveat | Mintlify Next.js SPA; use `https://docs.augmentcode.com/<path>.md` siblings (discoverable via `/llms.txt`) for machine reads |
|
|
10939
|
+
|
|
10940
|
+
### Google Antigravity
|
|
10941
|
+
|
|
10942
|
+
| Field | Value |
|
|
10943
|
+
|-------|-------|
|
|
10944
|
+
| ID | `google-antigravity` |
|
|
10945
|
+
| Docs | https://antigravity.google/docs (JavaScript SPA — use bundle strings / sitemap to verify) |
|
|
10946
|
+
| Changelog | https://antigravity.google/changelog (SPA; changelog entries embedded in main-*.js) |
|
|
10947
|
+
| Config paths | `.agent/rules/*.md`, `.agent/workflows/*.md`, `.agent/skills/*/SKILL.md`, `AGENTS.md`, `GEMINI.md` |
|
|
10948
|
+
| Our generators | `scripts/generate_antigravity.py` (rules + workflows + skill pointer) |
|
|
10949
|
+
| Tracked capabilities | Antigravity, agent manager, artifacts, MCP, workflows, rules, skills, `AGENTS.md`, `GEMINI.md`, agent permissions |
|
|
10950
|
+
| Doc access note | Docs are JS-SPA — verify via `main-*.js` bundle strings or community skill repos. `WebFetch` returns an empty shell. |
|
|
10951
|
+
|
|
10952
|
+
### Codex CLI
|
|
10953
|
+
|
|
10954
|
+
| Field | Value |
|
|
10955
|
+
|-------|-------|
|
|
10956
|
+
| ID | `codex-cli` |
|
|
10957
|
+
| Docs | https://github.com/openai/codex (redirects from developers.openai.com/codex) |
|
|
10958
|
+
| Release notes | https://github.com/openai/codex/releases |
|
|
10959
|
+
| Config paths | `AGENTS.md`, `.agents/rules/*.md`, `.codex/hooks.json`, `.codex/skills/*/SKILL.md`, `~/.codex/config.toml` |
|
|
10960
|
+
| 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`) |
|
|
10961
|
+
| Tracked hook events | `PreToolUse`, `PostToolUse`, `SessionStart`, `UserPromptSubmit`, `Stop`, `PermissionRequest` (6 events supported upstream in `config.toml`) |
|
|
10962
|
+
| Tracked handler types | `command` (emitted by default); `prompt` and `agent` available upstream but authored by hand |
|
|
10963
|
+
| Other capabilities | `AGENTS.md`, `config.toml`, `mcp_servers`, sandbox policies, `.codex/skills/*/SKILL.md` (native discovery, not auto-emitted by ai-toolkit yet) |
|
|
10964
|
+
| Version probe | `codex --version` |
|
|
10965
|
+
|
|
10966
|
+
### opencode
|
|
10967
|
+
|
|
10968
|
+
| Field | Value |
|
|
10969
|
+
|-------|-------|
|
|
10970
|
+
| ID | `opencode` |
|
|
10971
|
+
| Docs | https://opencode.ai/docs |
|
|
10972
|
+
| Release notes | https://github.com/sst/opencode/releases |
|
|
10973
|
+
| Config paths | `opencode.json`, `.opencode/agents/*.md`, `.opencode/commands/*.md`, `.opencode/plugins/*`, `.opencode/skills/*/SKILL.md` (v1.14+), `AGENTS.md`, `.claude/skills/*/SKILL.md` (fallback discovery) |
|
|
10974
|
+
| Our generators | `scripts/generate_opencode.py`, `scripts/generate_opencode_agents.py`, `scripts/generate_opencode_commands.py`, `scripts/generate_opencode_json.py`, `scripts/generate_opencode_plugin.py` |
|
|
10975
|
+
| Tracked plugin events | `session.created`, `session.compacted`, `session.deleted`, `message.updated`, `tool.execute.before`, `tool.execute.after`, `permission.asked`, `command.executed` |
|
|
10976
|
+
| 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 |
|
|
10977
|
+
| Version probe | `opencode --version` |
|
|
10978
|
+
|
|
10979
|
+
---
|
|
10980
|
+
|
|
10981
|
+
## How the Registry is Consumed
|
|
10982
|
+
|
|
10983
|
+
```
|
|
10984
|
+
┌─────────────────────────┐
|
|
10985
|
+
│ ecosystem_tools.json │ ← authoritative config (this doc mirrors it)
|
|
10986
|
+
└──────────┬──────────────┘
|
|
10987
|
+
│ read
|
|
10988
|
+
▼
|
|
10989
|
+
┌─────────────────────────┐ ┌─────────────────────────────────┐
|
|
10990
|
+
│ ecosystem_doctor.py │◄───►│ ecosystem-doctor-snapshot.json │ (last-seen state)
|
|
10991
|
+
└──────────┬──────────────┘ └─────────────────────────────────┘
|
|
10992
|
+
│ emits
|
|
10993
|
+
▼
|
|
10994
|
+
Drift report (JSON or text) → human review → generator updates → commit
|
|
10995
|
+
```
|
|
10996
|
+
|
|
10997
|
+
---
|
|
10998
|
+
|
|
10999
|
+
## Adding a New Tool
|
|
11000
|
+
|
|
11001
|
+
1. Append an entry to `scripts/ecosystem_tools.json` with all required fields (schema: `schema_version: 1`).
|
|
11002
|
+
2. Add a generator under `scripts/generate_<tool>_*.py` (or link to an existing one).
|
|
11003
|
+
3. Update this registry doc with a new section matching the format above.
|
|
11004
|
+
4. Baseline the snapshot: `python3 scripts/ecosystem_doctor.py --update --tool <id>`.
|
|
11005
|
+
5. Run the doctor again to confirm clean state: `python3 scripts/ecosystem_doctor.py --tool <id> --format text`.
|
|
11006
|
+
6. Update tool count at the top of this document.
|
|
11007
|
+
|
|
11008
|
+
---
|
|
11009
|
+
|
|
11010
|
+
## Removing a Tool
|
|
11011
|
+
|
|
11012
|
+
1. Delete the tool's entry from `scripts/ecosystem_tools.json`.
|
|
11013
|
+
2. Delete its section from this document.
|
|
11014
|
+
3. Delete its snapshot entry from `benchmarks/ecosystem-doctor-snapshot.json` (or let the next `--update` prune it — currently not pruned automatically).
|
|
11015
|
+
4. Decide whether to keep the generator (`scripts/generate_<tool>_*.py`) for backwards compatibility or delete it.
|
|
11016
|
+
5. Remove references from `README.md`, `manifest.json` `description` field, and `kb/procedures/maintenance-sop.md` `Supported editors` line.
|
|
11017
|
+
|
|
11018
|
+
---
|
|
11019
|
+
|
|
11020
|
+
## Related
|
|
11021
|
+
|
|
11022
|
+
- [Ecosystem Sync SOP](../procedures/ecosystem-sync-sop.md) — how to use the doctor
|
|
11023
|
+
- [MCP Editor Compatibility](./mcp-editor-compatibility.md) — MCP-specific subset
|
|
11024
|
+
- `scripts/ecosystem_tools.json` — source of truth
|
|
11025
|
+
- `scripts/ecosystem_doctor.py` — drift detector
|
|
11026
|
+
- `benchmarks/ecosystem-doctor-snapshot.json` — last-seen state
|
|
11027
|
+
|
|
11028
|
+
---
|
|
11029
|
+
|
|
9879
11030
|
## kb/reference/sync.md
|
|
9880
11031
|
|
|
9881
11032
|
---
|