@softspark/ai-toolkit 4.31.0 → 4.32.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 +121 -0
- package/README.md +21 -19
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/claude-app/hooks/hooks.json +4 -2
- package/app/claude-app/skills/ai-toolkit-rules/SKILL.md +30 -16
- package/app/hooks/quality-gate.sh +9 -2
- package/app/hooks.json +4 -2
- package/app/rules/common/git-team.md +33 -0
- package/app/rules/common/git-workflow.md +6 -20
- package/app/rules/common/performance.md +25 -1
- package/app/rules/common/testing.md +7 -1
- package/app/skills/analyze/scripts/complexity.py +3 -0
- package/app/skills/deploy/scripts/pre_deploy_check.py +13 -6
- package/app/skills/docs/scripts/doc-inventory.py +3 -0
- package/app/skills/explain/scripts/dependency-graph.py +3 -0
- package/app/skills/migrate/scripts/migration-status.py +3 -0
- package/app/skills/refactor/scripts/refactor-scan.py +3 -0
- package/benchmarks/ecosystem-doctor-snapshot.json +17 -15
- package/bin/ai-toolkit.js +2 -0
- package/kb/procedures/sop-maintenance.md +6 -3
- package/kb/reference/cli-reference.md +3 -2
- package/kb/reference/global-install-model.md +16 -3
- package/kb/reference/hooks-catalog.md +5 -3
- package/kb/reference/language-rules.md +28 -10
- package/kb/reference/plugin-pack-conventions.md +3 -3
- package/kb/reference/unique-features.md +2 -1
- package/llms-full.txt +63 -25
- package/manifest.json +2 -2
- package/package.json +5 -2
- package/scripts/benchmark_ecosystem.py +0 -1
- package/scripts/check_split.py +11 -9
- package/scripts/claude_app.py +5 -7
- package/scripts/codex_skill_adapter.py +4 -12
- package/scripts/compile_slm.py +10 -26
- package/scripts/doctor.py +322 -0
- package/scripts/evaluate_skills.py +1 -1
- package/scripts/frontmatter.py +452 -29
- package/scripts/generate_augment_rules.py +4 -4
- package/scripts/generate_cursor_mdc.py +2 -3
- package/scripts/generate_language_rules_skills.py +8 -14
- package/scripts/generate_llms_txt.py +1 -15
- package/scripts/generate_opencode_agents.py +0 -1
- package/scripts/generate_opencode_skills.py +2 -20
- package/scripts/generate_windsurf_rules.py +0 -1
- package/scripts/generator_base.py +0 -1
- package/scripts/inject_hook_cli.py +15 -2
- package/scripts/inject_mcp_cli.py +1 -2
- package/scripts/install.py +32 -1
- package/scripts/install_git_hooks.py +0 -1
- package/scripts/install_steps/ai_tools.py +65 -25
- package/scripts/install_steps/markers.py +6 -6
- package/scripts/install_steps/skill_scope.py +188 -0
- package/scripts/instruction_core.py +5 -8
- package/scripts/merge-hooks.py +13 -3
- package/scripts/pack_codebase.py +1 -1
- package/scripts/plugin.py +128 -16
- package/scripts/surface_manifest.py +6 -7
- package/scripts/validate.py +180 -11
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"last_run": "2026-09-
|
|
2
|
+
"last_run": "2026-09-04T08:36:45Z",
|
|
3
3
|
"schema_version": 1,
|
|
4
4
|
"tools": {
|
|
5
5
|
"aider": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"augment": {
|
|
27
|
-
"docs_hash": "
|
|
27
|
+
"docs_hash": "0e91c48495240138",
|
|
28
28
|
"headings": [
|
|
29
29
|
"Admin",
|
|
30
30
|
"Auggie CLI",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
68
|
"claude-app": {
|
|
69
|
-
"docs_hash": "
|
|
69
|
+
"docs_hash": "4ba2582ffb78c262",
|
|
70
70
|
"headings": [
|
|
71
71
|
"Add global and folder instructions",
|
|
72
72
|
"Availability",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
}
|
|
109
109
|
},
|
|
110
110
|
"claude-code": {
|
|
111
|
-
"docs_hash": "
|
|
111
|
+
"docs_hash": "10fe9c9fa45efb7a",
|
|
112
112
|
"headings": [
|
|
113
113
|
"Core concepts",
|
|
114
114
|
"Documentation Index",
|
|
@@ -174,10 +174,10 @@
|
|
|
174
174
|
"userConfig": false,
|
|
175
175
|
"workflows": true
|
|
176
176
|
},
|
|
177
|
-
"version": "2.1.
|
|
177
|
+
"version": "2.1.260 (Claude Code)"
|
|
178
178
|
},
|
|
179
179
|
"cline": {
|
|
180
|
-
"docs_hash": "
|
|
180
|
+
"docs_hash": "53d71ba66743ef56",
|
|
181
181
|
"headings": [
|
|
182
182
|
"API Reference",
|
|
183
183
|
"Best Practices",
|
|
@@ -195,6 +195,7 @@
|
|
|
195
195
|
"Kanban",
|
|
196
196
|
"Observability",
|
|
197
197
|
"On this page",
|
|
198
|
+
"Resources",
|
|
198
199
|
"SDK",
|
|
199
200
|
"Security & Governance",
|
|
200
201
|
"Team Management",
|
|
@@ -224,7 +225,7 @@
|
|
|
224
225
|
}
|
|
225
226
|
},
|
|
226
227
|
"codex-cli": {
|
|
227
|
-
"docs_hash": "
|
|
228
|
+
"docs_hash": "5444e9c3b6b4d284",
|
|
228
229
|
"headings": [
|
|
229
230
|
"API",
|
|
230
231
|
"API Reference",
|
|
@@ -241,6 +242,7 @@
|
|
|
241
242
|
"Build with Codex",
|
|
242
243
|
"Capabilities",
|
|
243
244
|
"Categories",
|
|
245
|
+
"ChatGPT Work",
|
|
244
246
|
"ChatGPT web",
|
|
245
247
|
"ChatKit",
|
|
246
248
|
"Choose a model",
|
|
@@ -363,10 +365,10 @@
|
|
|
363
365
|
"plugin marketplace": false,
|
|
364
366
|
"sandbox": true
|
|
365
367
|
},
|
|
366
|
-
"version": "codex-cli 0.
|
|
368
|
+
"version": "codex-cli 0.153.2"
|
|
367
369
|
},
|
|
368
370
|
"cursor": {
|
|
369
|
-
"docs_hash": "
|
|
371
|
+
"docs_hash": "328f32fe1afe3e7e",
|
|
370
372
|
"headings": [
|
|
371
373
|
"Agent",
|
|
372
374
|
"CLI",
|
|
@@ -399,7 +401,7 @@
|
|
|
399
401
|
}
|
|
400
402
|
},
|
|
401
403
|
"dsh": {
|
|
402
|
-
"docs_hash": "
|
|
404
|
+
"docs_hash": "217350a932acc7fb",
|
|
403
405
|
"headings": [],
|
|
404
406
|
"markers": {
|
|
405
407
|
"Agent Preset": false,
|
|
@@ -410,7 +412,7 @@
|
|
|
410
412
|
}
|
|
411
413
|
},
|
|
412
414
|
"gemini-cli": {
|
|
413
|
-
"docs_hash": "
|
|
415
|
+
"docs_hash": "b78dde41b3161819",
|
|
414
416
|
"headings": [
|
|
415
417
|
"Breadcrumbs",
|
|
416
418
|
"Directory actions",
|
|
@@ -451,7 +453,7 @@
|
|
|
451
453
|
"version": "0.57.0"
|
|
452
454
|
},
|
|
453
455
|
"github-copilot": {
|
|
454
|
-
"docs_hash": "
|
|
456
|
+
"docs_hash": "606c4417d0acebed",
|
|
455
457
|
"headings": [
|
|
456
458
|
"About Copilot auto model selection",
|
|
457
459
|
"About Copilot automations",
|
|
@@ -488,7 +490,7 @@
|
|
|
488
490
|
}
|
|
489
491
|
},
|
|
490
492
|
"google-antigravity": {
|
|
491
|
-
"docs_hash": "
|
|
493
|
+
"docs_hash": "8cbf9aaffb6b57bf",
|
|
492
494
|
"headings": [],
|
|
493
495
|
"markers": {
|
|
494
496
|
"AGENTS.md": false,
|
|
@@ -515,7 +517,7 @@
|
|
|
515
517
|
}
|
|
516
518
|
},
|
|
517
519
|
"opencode": {
|
|
518
|
-
"docs_hash": "
|
|
520
|
+
"docs_hash": "4dac69e305e60373",
|
|
519
521
|
"headings": [
|
|
520
522
|
"Add features",
|
|
521
523
|
"Ask questions",
|
|
@@ -577,7 +579,7 @@
|
|
|
577
579
|
}
|
|
578
580
|
},
|
|
579
581
|
"windsurf": {
|
|
580
|
-
"docs_hash": "
|
|
582
|
+
"docs_hash": "121e915ebbd89355",
|
|
581
583
|
"headings": [
|
|
582
584
|
"Accounts",
|
|
583
585
|
"Advanced",
|
package/bin/ai-toolkit.js
CHANGED
|
@@ -311,6 +311,8 @@ function showHelp() {
|
|
|
311
311
|
console.log(' dsh (explicit project target; requires --local; excluded from "all")');
|
|
312
312
|
console.log(' Default with --local: auto-detect from existing project files');
|
|
313
313
|
console.log(' --auto-detect Detect project languages and install matching rule modules');
|
|
314
|
+
console.log(' --language-skills <s> detected (default): turn off <lang>-rules/<lang>-patterns skills for languages');
|
|
315
|
+
console.log(' no registered project uses (skillOverrides, reversible); all: keep every language skill on');
|
|
314
316
|
console.log(' --list, --dry-run Dry-run: show what would be applied');
|
|
315
317
|
console.log('\nOptions for create:');
|
|
316
318
|
console.log(' skill <name> --template=<type> Scaffold skill (types: linter, reviewer, generator, workflow, knowledge)');
|
|
@@ -3,9 +3,9 @@ title: "SOP: AI Toolkit Maintenance"
|
|
|
3
3
|
category: procedures
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [sop, maintenance, agents, skills, install]
|
|
6
|
-
version: "3.
|
|
6
|
+
version: "3.5.0"
|
|
7
7
|
created: "2026-03-23"
|
|
8
|
-
last_updated: "2026-
|
|
8
|
+
last_updated: "2026-09-04"
|
|
9
9
|
description: "Standard operating procedures for installing, maintaining, and evolving the ai-toolkit."
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -229,7 +229,9 @@ that runtime should receive the change.
|
|
|
229
229
|
greets the user with a traceback, and one that reads stdin must answer an
|
|
230
230
|
empty stdin with an error rather than blocking forever.
|
|
231
231
|
3. Update `kb/reference/skills-catalog.md` and `app/ARCHITECTURE.md`
|
|
232
|
-
4. Run `scripts/validate.py` — it checks the invocation, the body budget,
|
|
232
|
+
4. Run `scripts/validate.py` — it checks the invocation, the body budget, the
|
|
233
|
+
description budget (warn over 400 characters, error over 1024; unquoted
|
|
234
|
+
descriptions containing `: ` or ` #` are rejected, use `>-`), and
|
|
233
235
|
`reference/` link resolution
|
|
234
236
|
5. Run `python3 scripts/surface_manifest.py` before the next release to adopt the
|
|
235
237
|
new skill into the protected surface
|
|
@@ -305,6 +307,7 @@ bats tests/test_install.bats tests/test_codex.bats
|
|
|
305
307
|
bats tests/test_claude_app.bats tests/test_hooks_per_editor.bats
|
|
306
308
|
python3 scripts/claude_app.py verify
|
|
307
309
|
python3 scripts/validate.py --strict
|
|
310
|
+
npm run test:py # pytest over scripts/ logic incl. the frontmatter corpus test (dev venv, see CONTRIBUTING.md)
|
|
308
311
|
```
|
|
309
312
|
|
|
310
313
|
## Managing Plugins
|
|
@@ -4,7 +4,7 @@ category: reference
|
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [cli, commands, reference, install, update, plugin, mcp, telemetry]
|
|
6
6
|
created: "2026-04-13"
|
|
7
|
-
last_updated: "2026-
|
|
7
|
+
last_updated: "2026-09-04"
|
|
8
8
|
description: "Complete CLI reference for all ai-toolkit commands, options, and flags."
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -19,6 +19,7 @@ Usage: ai-toolkit <command> [options]
|
|
|
19
19
|
| Command | Description |
|
|
20
20
|
|---------|-------------|
|
|
21
21
|
| `install` | First-time global install into `~/.claude/` + Cursor, Windsurf, Gemini |
|
|
22
|
+
| `install --language-skills detected\|all` | `detected` (default): turn off `<lang>-rules`/`<lang>-patterns` skills for languages no registered project uses, via `skillOverrides` in `~/.claude/settings.json` (entries are tracked in `state.json` and restored when a project brings the language back; a user's own override is never touched); `all`: keep every language skill on. The choice persists across `install`/`update` |
|
|
22
23
|
| `install --local` | Claude Code configs only; add `--editors all` or `--editors cursor,aider` for other tools |
|
|
23
24
|
| `update` | Re-apply toolkit after `npm install -g @softspark/ai-toolkit@latest` |
|
|
24
25
|
| `update --local` | Re-apply + auto-detect editors from existing project files |
|
|
@@ -26,7 +27,7 @@ Usage: ai-toolkit <command> [options]
|
|
|
26
27
|
| `status` | Show installed modules and version |
|
|
27
28
|
| `uninstall` | Remove toolkit from `~/.claude/` |
|
|
28
29
|
| `validate` | Verify toolkit integrity (`--strict` for CI-grade, warnings = errors) |
|
|
29
|
-
| `doctor` | Diagnose install health, hooks, quick-win assets,
|
|
30
|
+
| `doctor` | Diagnose install health, hooks, quick-win assets, artifact drift, context budget (est. resident tokens of the skill/agent listings and user rules, plus skills with zero recorded use; read-only, prints the `skillOverrides` key to paste), and permission rules (`permissions.allow` wildcards on interpreters, task runners, package installs, `gh api`, `curl`, `git fetch`, destructive commands; warns only, never edits) |
|
|
30
31
|
| `doctor --fix` | Auto-repair broken symlinks, missing hooks, stale artifacts |
|
|
31
32
|
| `eject [dir]` | Export standalone config (no symlinks, no toolkit dependency) |
|
|
32
33
|
| `claude-app export [--output FILE] [--no-custom-rules] [--verify]` | Build an uploadable Claude Chat/Desktop/Cowork plugin ZIP and global-instructions file |
|
|
@@ -3,9 +3,9 @@ title: "Global Install Model"
|
|
|
3
3
|
category: reference
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [install, global, claude, codex, plugins, local-setup]
|
|
6
|
-
version: "3.
|
|
6
|
+
version: "3.5.0"
|
|
7
7
|
created: "2026-03-26"
|
|
8
|
-
last_updated: "2026-
|
|
8
|
+
last_updated: "2026-09-04"
|
|
9
9
|
description: "Reference description of Claude Code global install, Claude app plugin export, project-local editor setup, global Codex plugin layering, and command responsibilities in ai-toolkit."
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -17,6 +17,19 @@ description: "Reference description of Claude Code global install, Claude app pl
|
|
|
17
17
|
|
|
18
18
|
That means one machine-level install provides agents, skills, hooks, constitution, and rule files to every project without committing toolkit boilerplate into each repository.
|
|
19
19
|
|
|
20
|
+
Language knowledge skills are the one part of the global install that is
|
|
21
|
+
scoped by evidence (v4.32.0). Every `<lang>-rules` / `<lang>-patterns` skill is
|
|
22
|
+
still symlinked, but `install` and `update` read the languages detected across
|
|
23
|
+
the projects registered in `projects.json` and set `skillOverrides: off` in
|
|
24
|
+
`~/.claude/settings.json` for the others, so their descriptions stop loading
|
|
25
|
+
into every session. The entries the toolkit wrote are listed in `state.json`
|
|
26
|
+
under `managed_skill_overrides`; only those are ever removed again (when a
|
|
27
|
+
newly registered project brings the language back), a user's own override is
|
|
28
|
+
left alone. With no registered project on disk nothing is disabled.
|
|
29
|
+
`--language-skills all` restores everything and persists the choice
|
|
30
|
+
(`language_skill_scope` in `state.json`); `ai-toolkit doctor` reports the
|
|
31
|
+
resulting listing size and zero-use skills.
|
|
32
|
+
|
|
20
33
|
Other editor targets are opt-in and only use documented file surfaces. Cursor
|
|
21
34
|
rules stay project-local because Cursor's global user rules are managed through
|
|
22
35
|
the settings UI, not a stable merge-safe file. Codex supports both project and
|
|
@@ -59,7 +72,7 @@ The `--profile` flag controls how much of each editor's native surface is activa
|
|
|
59
72
|
|---------|-----------|----------|
|
|
60
73
|
| `minimal` | Smallest editor surface. Copilot still receives its root instructions, native agents, and self-contained skills; Codex still receives instructions, agents, skills, and native safety hooks. | You want the smallest supported footprint. |
|
|
61
74
|
| `standard` (default) | Claude Code + editor rule files. Includes Gemini and Antigravity hooks plus native Copilot instructions, agents, portable skills, and hooks. | Day-to-day installs. Most users. |
|
|
62
|
-
| `strict` | Everything in `standard` plus git-hook wiring for commit-time safety checks
|
|
75
|
+
| `strict` | Everything in `standard` plus git-hook wiring for commit-time safety checks and the `git-team` common rule (feature branches, PR size, required approval, review SLA). | Tight team with zero tolerance for drift. A solo maintainer releasing straight to `main` wants `standard`, which keeps the solo-safe `git-workflow` core only. |
|
|
63
76
|
| `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. |
|
|
64
77
|
|
|
65
78
|
Codex installs materialize the full skill catalog under `.agents/skills/`
|
|
@@ -3,9 +3,9 @@ title: "Hooks Catalog"
|
|
|
3
3
|
category: reference
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [hooks, quality, safety, enforcement, settings.json]
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.12.0"
|
|
7
7
|
created: "2026-03-27"
|
|
8
|
-
last_updated: "2026-
|
|
8
|
+
last_updated: "2026-09-04"
|
|
9
9
|
description: "Complete reference of all ai-toolkit hooks: events, scripts, installation, and runtime behavior."
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -190,6 +190,7 @@ Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
|
|
|
190
190
|
| Matcher | *(all)* |
|
|
191
191
|
| Script | `~/.softspark/ai-toolkit/hooks/quality-check.sh` |
|
|
192
192
|
| Fires | After every Claude response |
|
|
193
|
+
| Mode | Background (`"async": true`). The linter (`npx tsc`, `ruff`) was the bulk of a 3.3 s median Stop chain; its output is advisory and reaches you when it finishes instead of holding the turn open |
|
|
193
194
|
|
|
194
195
|
**Action:** Runs language-appropriate linter:
|
|
195
196
|
- Python: `ruff check .`
|
|
@@ -208,6 +209,7 @@ Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
|
|
|
208
209
|
| Matcher | *(all)* |
|
|
209
210
|
| Script | `~/.softspark/ai-toolkit/hooks/save-session.sh` |
|
|
210
211
|
| Fires | After every Claude response |
|
|
212
|
+
| Mode | Background (`"async": true`): writes a file and exits 0, nothing to wait for |
|
|
211
213
|
|
|
212
214
|
**Action:** Writes enriched session context to the per-repo session store (`~/.softspark/ai-toolkit/sessions/<repo-key>/session-context.md`) for cross-session persistence. Captures:
|
|
213
215
|
- Session ID and last assistant message (first 5 lines)
|
|
@@ -225,7 +227,7 @@ Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
|
|
|
225
227
|
| Script | `~/.softspark/ai-toolkit/hooks/quality-gate.sh` |
|
|
226
228
|
| Fires | Before Claude is allowed to finish a response |
|
|
227
229
|
|
|
228
|
-
**Action:** Runs lint/typecheck. **Blocks stopping (exit 2)** if errors found, so Claude must continue and fix the issues. Missing local tooling is reported as skipped rather than blocking the session.
|
|
230
|
+
**Action:** Runs lint/typecheck. **Blocks stopping (exit 2)** if errors found, so Claude must continue and fix the issues. Missing local tooling is reported as skipped rather than blocking the session. Ruff runs only when the project configured it (`ruff.toml`, `.ruff.toml`, or a `[tool.ruff]` table in `pyproject.toml`); a `pyproject.toml` that only carries build or pytest/mypy metadata does not trigger `ruff check .` under whatever configuration the machine resolves (v4.32.0).
|
|
229
231
|
|
|
230
232
|
Skipped when `TOOLKIT_HOOK_PROFILE=minimal`.
|
|
231
233
|
|
|
@@ -3,9 +3,9 @@ title: "Language Rules System"
|
|
|
3
3
|
category: reference
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [rules, languages, coding-style, testing, patterns, security]
|
|
6
|
-
version: "2.
|
|
6
|
+
version: "2.2.0"
|
|
7
7
|
created: "2026-04-07"
|
|
8
|
-
last_updated: "2026-
|
|
8
|
+
last_updated: "2026-09-04"
|
|
9
9
|
description: "Reference for the language-specific rules system: 13 per-language rule sets shipped as knowledge skills, plus common rules installed as Claude Code path-scoped project rules."
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -55,7 +55,7 @@ app/rules/
|
|
|
55
55
|
└── medplum/
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
-
**Total: 13 per-language directories × 5 files + 1 common directory ×
|
|
58
|
+
**Total: 13 per-language directories × 5 files + 1 common directory × 6 files (5 in every profile + `git-team` in `strict`) + 3 standalone files** (see README.md for canonical count). Per-language directories ship as `<lang>-rules` knowledge skills; the common directory is installed as Claude Code `.claude/rules/ai-toolkit-*.md` files.
|
|
59
59
|
|
|
60
60
|
## Supported Languages
|
|
61
61
|
|
|
@@ -145,13 +145,16 @@ Common rules are installed as path-scoped Claude Code rule files:
|
|
|
145
145
|
```
|
|
146
146
|
.claude/rules/
|
|
147
147
|
├── ai-toolkit-coding-style.md
|
|
148
|
+
├── ai-toolkit-git-team.md # --profile strict only
|
|
148
149
|
├── ai-toolkit-git-workflow.md
|
|
149
150
|
├── ai-toolkit-performance.md
|
|
150
151
|
├── ai-toolkit-security.md
|
|
151
152
|
└── ai-toolkit-testing.md
|
|
152
153
|
```
|
|
153
154
|
|
|
154
|
-
|
|
155
|
+
A source rule may also carry `profiles:` (same block-list form). `git-team` declares `profiles: ["strict"]`: branching, pull-request, and review conventions for teams, kept out of `standard` so a solo maintainer who releases straight to `main` is not told to open PRs against themselves. Rerunning `install --local` with a different profile adds or removes the managed file. Only the Claude Code local install honours `profiles`; the Claude app export, `compile-slm`, and editor `lang-common` bundles still receive every common rule (see `DECISIONS.md`, 2026-09-04).
|
|
156
|
+
|
|
157
|
+
Each file's `paths` frontmatter is copied from the source rule in `app/rules/common/<category>.md`. A source rule without a `paths` block is always-on:
|
|
155
158
|
|
|
156
159
|
```yaml
|
|
157
160
|
---
|
|
@@ -160,6 +163,18 @@ paths:
|
|
|
160
163
|
---
|
|
161
164
|
```
|
|
162
165
|
|
|
166
|
+
A source rule with a `paths` block is path-scoped, so Claude Code loads it only when a matching file is touched. As of v4.32.0 `testing` (`**/*.test.*`, `**/*.spec.*`, `**/test_*`, `**/*_test.*`, `**/tests/**`) and `performance` (source-file extensions plus `**/*.sql`) are scoped; `coding-style`, `git-workflow`, and `security` stay always-on because they carry prohibitions that must hold in every session. To change a scope, edit the source frontmatter; `validate.py` rejects inline lists and unquoted globs because the installer reads only the block form:
|
|
167
|
+
|
|
168
|
+
```yaml
|
|
169
|
+
---
|
|
170
|
+
language: common
|
|
171
|
+
category: testing
|
|
172
|
+
version: "1.1.0"
|
|
173
|
+
paths:
|
|
174
|
+
- "**/tests/**"
|
|
175
|
+
---
|
|
176
|
+
```
|
|
177
|
+
|
|
163
178
|
The project `CLAUDE.md` receives only a compact index between a single named marker (the per-language markers from v1.x are no longer used):
|
|
164
179
|
|
|
165
180
|
```
|
|
@@ -167,10 +182,13 @@ The project `CLAUDE.md` receives only a compact index between a single named mar
|
|
|
167
182
|
# Language Rules
|
|
168
183
|
|
|
169
184
|
Common ai-toolkit rules live in `.claude/rules/ai-toolkit-*.md`
|
|
170
|
-
with Claude Code `paths` frontmatter
|
|
171
|
-
|
|
185
|
+
with Claude Code `paths` frontmatter instead of expanding this
|
|
186
|
+
CLAUDE.md. Always-on rules load in every session; path-scoped rules
|
|
187
|
+
load only when a matching file is touched.
|
|
188
|
+
|
|
189
|
+
Always-on: `.claude/rules/ai-toolkit-coding-style.md`, ...
|
|
172
190
|
|
|
173
|
-
|
|
191
|
+
Path-scoped: `.claude/rules/ai-toolkit-performance.md`, ...
|
|
174
192
|
|
|
175
193
|
Language-specific rules live in `<lang>-rules` knowledge skills (e.g.
|
|
176
194
|
`python-rules`, `typescript-rules`) and load automatically when their
|
|
@@ -207,7 +225,7 @@ Language rules are tracked as modules in `manifest.json`:
|
|
|
207
225
|
|
|
208
226
|
| Module | Description |
|
|
209
227
|
|--------|-------------|
|
|
210
|
-
| `rules-common` | Common coding rules (5
|
|
228
|
+
| `rules-common` | Common coding rules (6 files: 5 in every profile, `git-team` in `strict` only), included in `standard` profile |
|
|
211
229
|
| `rules-typescript` | TypeScript-specific rules |
|
|
212
230
|
| `rules-python` | Python-specific rules |
|
|
213
231
|
| `rules-golang` | Go-specific rules |
|
|
@@ -228,9 +246,9 @@ Language rules are tracked as modules in `manifest.json`:
|
|
|
228
246
|
|---|---|---|---|
|
|
229
247
|
| Source | `app/rules/common/` | `app/rules/<lang>/` | `app/skills/<name>/SKILL.md` |
|
|
230
248
|
| Delivery to Claude | Path-scoped `.claude/rules/ai-toolkit-*.md` files (`--local`) + compact `CLAUDE.md` index | Generated as `<lang>-rules` knowledge skills, loaded contextually | Loaded contextually by description match |
|
|
231
|
-
| Visibility |
|
|
249
|
+
| Visibility | Always-on (`coding-style`, `git-workflow`, `security`) or loaded when a matching file is touched (`testing`, `performance`) | Loaded when triggers match (file extensions, framework names) | Loaded when triggers match |
|
|
232
250
|
| Scope | Language-agnostic standards (security, git, testing, perf, style) | Per-language coding-style, frameworks, patterns, security, testing | Domain skills (testing, debugging, RAG, etc.) |
|
|
233
|
-
| Install | `ai-toolkit install --local` | Global install (skills directory is symlinked) | Global install |
|
|
251
|
+
| Install | `ai-toolkit install --local` | Global install (skills directory is symlinked); skills for languages no registered project uses are turned off via `skillOverrides` (`--language-skills detected`, the default) unless `--language-skills all` was chosen | Global install |
|
|
234
252
|
| Other editors | Inlined into editor-specific rule files | Inlined into editor-specific rule files (still full content, not skills) | N/A |
|
|
235
253
|
|
|
236
254
|
Per-language content delivered as a knowledge skill is the same Markdown that other editors receive inlined. The split exists only for Claude, where the Agent Skills progressive-disclosure mechanism keeps the system prompt small.
|
|
@@ -3,9 +3,9 @@ title: "Plugin Pack Conventions"
|
|
|
3
3
|
category: reference
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [plugins, plugin-packs, conventions, manifests, hooks, policy-packs]
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.4.0"
|
|
7
7
|
created: "2026-03-28"
|
|
8
|
-
last_updated: "2026-
|
|
8
|
+
last_updated: "2026-09-04"
|
|
9
9
|
description: "Conventions for experimental ai-toolkit plugin packs, policy packs, hook packs, and plugin-creator scaffolding across supported editors."
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -167,7 +167,7 @@ ai-toolkit plugin status --editor all # show installed packs with r
|
|
|
167
167
|
1. **Claude Code target**: strips plugin hook entries from `~/.claude/settings.json` and removes plugin-local rule sections from `~/.claude/CLAUDE.md`
|
|
168
168
|
2. **Codex target**: strips only command handlers carrying the exact `AI_TOOLKIT_HOOK_OWNER=ai-toolkit-plugin-<pack>` marker from `$CODEX_HOME/hooks.json`, removes owned `$CODEX_HOME/ai-toolkit-hooks/plugin-<pack>-*` assets, and removes the pack's marker-bounded sections from `$CODEX_HOME/AGENTS.md`
|
|
169
169
|
3. **Cursor/Gemini rules**: removes only exact content recorded in `rule_ownership`; foreign or user-modified files/sections are preserved with a warning
|
|
170
|
-
4. **Claude/shared assets** (`~/.softspark/ai-toolkit/hooks/plugin-*`, `plugin-scripts/<pack>/`) are removed only when no remaining runtime still uses that pack
|
|
170
|
+
4. **Claude/shared assets** (`~/.softspark/ai-toolkit/hooks/plugin-*`, `plugin-scripts/<pack>/`) are removed only when no remaining runtime still uses that pack, and only when the file on disk is byte-, mode- and inode-identical to what install recorded in `shared_asset_ownership`; a file the user edited is preserved and named in a `WARN preserved changed plugin asset` line. Before v4.32.1 the Claude and Codex install paths never recorded that ownership, so removal preserved every hook and script as "untracked" and each pack left 4-5 files behind (found by the post-release SOP on v4.32.0)
|
|
171
171
|
5. **Updates** `plugins.json` state per runtime
|
|
172
172
|
6. **Leaves** core agents/skills untouched (they belong to the base install)
|
|
173
173
|
7. **Leaves** plugin data intact (e.g. `memory.db` — use `clean` to prune)
|
|
@@ -4,7 +4,7 @@ category: reference
|
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [features, differentiators, constitution, hooks, security, tdd, memory]
|
|
6
6
|
created: "2026-04-13"
|
|
7
|
-
last_updated: "2026-
|
|
7
|
+
last_updated: "2026-09-04"
|
|
8
8
|
description: "Detailed description of ai-toolkit's unique features: constitution enforcement, hooks system, security scanning, effort budgeting, quality gates, and more."
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -119,6 +119,7 @@ added after the thing it checks had already shipped broken.
|
|
|
119
119
|
| **Public surface** (`surface_manifest.py` + `app/surface.json`) | a skill, agent, CLI command, frontmatter field, hook, KB category or pack disappearing | `BACKWARD_COMPATIBILITY.md` listed the surfaces; renaming one still left every check green |
|
|
120
120
|
| **Script invocation** (`validate.py`) | a skill running its own script by any path other than `${CLAUDE_SKILL_DIR}`, or through the wrong interpreter | nine skills shipped invocations that resolved only in the repo, never on an installed machine |
|
|
121
121
|
| **Skill body budget** (`validate.py`) | a `SKILL.md` body over 20,000 bytes; warns over 18,000 | the body loads on every trigger match, including accidental ones; three skills sat at 24–35 KB |
|
|
122
|
+
| **Skill description budget** (`validate.py`) | a description over 1,024 characters (the Agent Skills cap; the runtime truncates past it), or an unquoted description containing `: ` or ` #` (strict YAML drops every field, `allowed-tools` included); warns over 400; applied to plugin-pack skills too | two installed skills sat at 791 and 883 characters and made up 8% of the model's skill listing on their own |
|
|
122
123
|
| **Split integrity** (`check_split.py`) | a body → `reference/` refactor that lost a fenced code line, a required section, the description, or a working link | run by hand during a split; caught a heading corrupted inside a fenced example on first use |
|
|
123
124
|
|
|
124
125
|
The surface check is deliberately one-directional: **removals fail, additions pass.**
|