@softspark/ai-toolkit 4.31.0 → 4.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +89 -0
- package/README.md +26 -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/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/unique-features.md +2 -1
- package/llms-full.txt +60 -22
- 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/surface_manifest.py +6 -7
- package/scripts/validate.py +180 -11
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,95 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v4.32.0 - Context budget: scoped rules, scoped language skills, doctor budget checks (2026-09-04)
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`install --language-skills detected|all`.** Language knowledge skills
|
|
15
|
+
(`<lang>-rules`, `<lang>-patterns`) for languages no registered project uses
|
|
16
|
+
are turned off through `skillOverrides` in `~/.claude/settings.json`. The
|
|
17
|
+
entries the toolkit wrote are tracked in `state.json` and restored when a
|
|
18
|
+
newly registered project brings the language back; a user's own override is
|
|
19
|
+
never touched; with no registered project on disk nothing is disabled. `all`
|
|
20
|
+
restores everything and persists the choice.
|
|
21
|
+
- **`doctor` check 12, Context Budget.** Estimated resident tokens of the
|
|
22
|
+
model-visible skill listing (against `skillListingBudgetFraction`), the agent
|
|
23
|
+
listing, and always-loaded user memory, plus skills with zero recorded use in
|
|
24
|
+
both Claude Code's counters and the toolkit's `stats.json`. Read-only; prints
|
|
25
|
+
the `skillOverrides` key to paste.
|
|
26
|
+
- **`doctor` check 13, Permission Rules.** Warns on `permissions.allow`
|
|
27
|
+
wildcards that pre-approve execution or writes: interpreters, task runners,
|
|
28
|
+
package installs, `gh api`, `curl`/`wget`, `git fetch`/`pull`, destructive
|
|
29
|
+
commands, `find -exec`. Never edits.
|
|
30
|
+
- **`validate.py` skill description budget.** Error over 1024 characters (the
|
|
31
|
+
Agent Skills cap), warning over 400, and an error for an unquoted description
|
|
32
|
+
containing `: ` or ` #` (strict YAML drops every field, `allowed-tools`
|
|
33
|
+
included). Applied to plugin-pack skills too.
|
|
34
|
+
- **`git-team` common rule.** Branching, pull-request, and review conventions
|
|
35
|
+
moved out of `git-workflow` into a rule that ships with `--profile strict`
|
|
36
|
+
only, via a new `profiles:` frontmatter gate. See `DECISIONS.md`.
|
|
37
|
+
- **One frontmatter parser.** `scripts/frontmatter.py` now parses the whole
|
|
38
|
+
toolkit subset (scalars, quoted scalars, `>-`/`|` blocks, block and flow
|
|
39
|
+
lists, nested maps) strictly and is the only parser; twelve private
|
|
40
|
+
strip/parse copies in `validate.py`, `doctor.py`, `install_steps/ai_tools.py`,
|
|
41
|
+
`claude_app.py`, `compile_slm.py`, `surface_manifest.py`, `instruction_core.py`,
|
|
42
|
+
`check_split.py`, `codex_skill_adapter.py`, `generate_opencode_skills.py`, and
|
|
43
|
+
`generate_language_rules_skills.py` are gone. Every shipped `app/` and `kb/`
|
|
44
|
+
Markdown file parses under the strict grammar (pytest corpus test).
|
|
45
|
+
- **Repo dev tooling, stdlib runtime.** `requirements-dev.txt` + `pytest.ini`
|
|
46
|
+
+ `mypy.ini` (pytest, ruff, mypy) and a `python-quality` CI job:
|
|
47
|
+
`npm run test:py` (348 pytest tests under `tests/python/`), `npm run lint:py`
|
|
48
|
+
(ruff `E,F`, rule set in `package.json`), `npm run typecheck:py` (mypy
|
|
49
|
+
`--strict` over an allowlist). No `pyproject.toml`: the toolkit's own
|
|
50
|
+
`quality-gate.sh` reads one as "Python project, run `ruff check .`", which
|
|
51
|
+
is not what an npm-first repo wants. Nothing is added to the published
|
|
52
|
+
package or to user machines. See `DECISIONS.md` for why no runtime
|
|
53
|
+
dependency.
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- **Common rules are path-scoped from their source.** `app/rules/common/*.md`
|
|
58
|
+
may declare `paths:`; the generated `.claude/rules/ai-toolkit-*.md` copies it.
|
|
59
|
+
`testing` and `performance` load only for matching files; `coding-style`,
|
|
60
|
+
`git-workflow`, and `security` stay always-on. The `.claude/CLAUDE.md` index
|
|
61
|
+
now lists which rules are always-on and which are path-scoped instead of
|
|
62
|
+
claiming lazy loading for all of them.
|
|
63
|
+
- **Stop hooks `quality-check.sh` and `save-session.sh` run with
|
|
64
|
+
`"async": true`.** Both are advisory and always exit 0; the linter was the
|
|
65
|
+
bulk of a 3.3 s median Stop chain. `quality-gate.sh` (exit 2) and
|
|
66
|
+
`stop-search-check.sh` stay synchronous.
|
|
67
|
+
- **`git-workflow` is the solo-safe core** (commit format, no secrets, `main`
|
|
68
|
+
deployable, tags, recovery). Version 2.0.0.
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
|
|
72
|
+
- **`quality-gate.sh` runs ruff only for projects that configured it.** A bare
|
|
73
|
+
`pyproject.toml` (build metadata, pytest/mypy tables) used to trigger
|
|
74
|
+
`ruff check .` on every Stop under whatever ruff configuration the machine
|
|
75
|
+
resolves; found when this repository's own gate went red on 348 unrelated
|
|
76
|
+
findings. Ruff now needs `ruff.toml`, `.ruff.toml`, or a `[tool.ruff]` table.
|
|
77
|
+
- **Codex/DSH skill sync no longer flattens nested frontmatter.** Native
|
|
78
|
+
(non-adapted) skills had their frontmatter re-rendered line by line, which
|
|
79
|
+
turned a `hooks:` block into stray top-level `PreToolUse:` / `- matcher:`
|
|
80
|
+
lines. The frontmatter now passes through verbatim.
|
|
81
|
+
- **Hook merge de-duplicates legacy untagged toolkit hooks by command identity.**
|
|
82
|
+
Scheduling fields (`async`, `timeout`, `statusMessage`, ...) no longer defeat
|
|
83
|
+
the match, so adding one in `app/hooks.json` does not leave existing installs
|
|
84
|
+
running the old and the new copy side by side. Fixed in both
|
|
85
|
+
`scripts/merge-hooks.py` and `scripts/inject_hook_cli.py`.
|
|
86
|
+
- **Test count.** Bats increased from 1931 to 1966; 348 pytest tests added under
|
|
87
|
+
`tests/python/` (run by the new `python-quality` CI job).
|
|
88
|
+
|
|
89
|
+
### Ecosystem
|
|
90
|
+
|
|
91
|
+
- Ecosystem doctor run for this minor release: 12 tools drifted since the
|
|
92
|
+
v4.30.3 snapshot, all class A (content edits with no heading delta) or class
|
|
93
|
+
C (Cline gained a "Resources" heading, Codex CLI a "ChatGPT Work" heading;
|
|
94
|
+
neither adds a surface the toolkit integrates). Tracked versions moved:
|
|
95
|
+
Claude Code 2.1.252 -> 2.1.260 (its hooks documentation now lists the
|
|
96
|
+
`async` command-hook field this release relies on), Codex CLI 0.151.0 ->
|
|
97
|
+
0.153.2. No generator changed; snapshot refreshed.
|
|
98
|
+
|
|
10
99
|
## v4.31.0 - Toolkit rules reach every editor (2026-09-03)
|
|
11
100
|
|
|
12
101
|
### Added
|
package/README.md
CHANGED
|
@@ -6,25 +6,30 @@
|
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](app/skills/)
|
|
8
8
|
[](app/agents/)
|
|
9
|
-
[](tests/)
|
|
10
|
+
|
|
11
|
+
## What's New in v4.32.0
|
|
12
|
+
|
|
13
|
+
**v4.32.0** cuts what every session pays for before you type, and adds the
|
|
14
|
+
checks that keep it cut:
|
|
15
|
+
|
|
16
|
+
- Common rules are path-scoped from their source: `testing` and `performance`
|
|
17
|
+
load only for matching files, and the project `.claude/CLAUDE.md` index says
|
|
18
|
+
which rules are always-on instead of claiming lazy loading for all of them.
|
|
19
|
+
- Language knowledge skills follow your projects: `install --language-skills
|
|
20
|
+
detected` (default) turns off `<lang>-rules`/`<lang>-patterns` skills for
|
|
21
|
+
languages no registered project uses, reversibly, and restores them when a
|
|
22
|
+
project brings the language back.
|
|
23
|
+
- `ai-toolkit doctor` gains a Context Budget check (est. resident tokens,
|
|
24
|
+
zero-use skills) and a Permission Rules check (over-broad `permissions.allow`
|
|
25
|
+
wildcards). Both read-only.
|
|
26
|
+
- One strict frontmatter parser replaces twelve private copies; `validate.py`
|
|
27
|
+
now rejects descriptions over 1024 characters or unquoted ones containing
|
|
28
|
+
`: `. Every shipped Markdown file parses under the strict grammar.
|
|
29
|
+
- Team-only git conventions moved to a `git-team` rule that ships with
|
|
30
|
+
`--profile strict`; `quality-gate.sh` lints with ruff only when the project
|
|
31
|
+
configured ruff; advisory Stop hooks run in the background. Test count:
|
|
32
|
+
1931 -> 1966 bats + 348 pytest.
|
|
28
33
|
|
|
29
34
|
See [CHANGELOG.md](CHANGELOG.md) for full history.
|
|
30
35
|
|
|
@@ -62,6 +67,8 @@ npx @softspark/ai-toolkit install
|
|
|
62
67
|
|
|
63
68
|
**That's it.** Claude Code picks up 114 skills, 44 agents, quality hooks, and the safety constitution automatically.
|
|
64
69
|
|
|
70
|
+
Language knowledge skills (`rust-rules`, `kotlin-patterns`, ...) are scoped to the languages your registered projects use: once you have run `ai-toolkit install --local` in at least one project, the global install turns the other languages' skills off through `skillOverrides` in `~/.claude/settings.json` so their descriptions stop loading into every session. A new project in a new language turns its skills back on. `ai-toolkit install --language-skills all` keeps every language skill on and remembers that choice; `ai-toolkit doctor` shows the resulting context budget.
|
|
71
|
+
|
|
65
72
|
**Windows:** WSL is the recommended runtime. Native Windows works when Git Bash is available for hook scripts; dependency hints cover `winget`, Chocolatey, and Scoop. See [Windows Support](kb/reference/windows-support.md).
|
|
66
73
|
|
|
67
74
|
### Update
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "ai-toolkit",
|
|
4
4
|
"displayName": "AI Toolkit",
|
|
5
5
|
"description": "Professional-grade engineering skills, agents, rules, and lifecycle guardrails for Claude Code, Claude Chat, and Cowork.",
|
|
6
|
-
"version": "4.
|
|
6
|
+
"version": "4.32.0",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "SoftSpark",
|
|
9
9
|
"url": "https://github.com/softspark"
|
|
@@ -151,7 +151,8 @@
|
|
|
151
151
|
"hooks": [
|
|
152
152
|
{
|
|
153
153
|
"type": "command",
|
|
154
|
-
"command": "AI_TOOLKIT_DIR=\"${CLAUDE_PLUGIN_ROOT}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/quality-check.sh\""
|
|
154
|
+
"command": "AI_TOOLKIT_DIR=\"${CLAUDE_PLUGIN_ROOT}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/quality-check.sh\"",
|
|
155
|
+
"async": true
|
|
155
156
|
}
|
|
156
157
|
]
|
|
157
158
|
},
|
|
@@ -160,7 +161,8 @@
|
|
|
160
161
|
"hooks": [
|
|
161
162
|
{
|
|
162
163
|
"type": "command",
|
|
163
|
-
"command": "AI_TOOLKIT_DIR=\"${CLAUDE_PLUGIN_ROOT}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/save-session.sh\""
|
|
164
|
+
"command": "AI_TOOLKIT_DIR=\"${CLAUDE_PLUGIN_ROOT}\" \"${CLAUDE_PLUGIN_ROOT}/hooks/save-session.sh\"",
|
|
165
|
+
"async": true
|
|
164
166
|
}
|
|
165
167
|
]
|
|
166
168
|
},
|
|
@@ -207,27 +207,22 @@ Default response mode for this project is **concise**. The `brand-voice` skill (
|
|
|
207
207
|
- Magic numbers/strings: use named constants.
|
|
208
208
|
- Mutable global state: use dependency injection instead.
|
|
209
209
|
|
|
210
|
-
## Source: `app/rules/common/git-
|
|
211
|
-
|
|
212
|
-
# Git Workflow Rules
|
|
210
|
+
## Source: `app/rules/common/git-team.md`
|
|
213
211
|
|
|
214
|
-
|
|
215
|
-
- Use conventional commits: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`.
|
|
216
|
-
- First line: imperative mood, max 72 chars (`feat: add user registration endpoint`).
|
|
217
|
-
- Body (optional): explain *why*, not *what*. The diff shows what.
|
|
218
|
-
- Reference tickets: `fix: prevent duplicate orders (PROJ-456)`.
|
|
212
|
+
# Git Team Workflow Rules
|
|
219
213
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
-
|
|
214
|
+
These rules assume more than one person merges into `main`. They ship only with
|
|
215
|
+
the `strict` profile; a solo maintainer who commits straight to `main` is not
|
|
216
|
+
doing anything wrong, and a reviewer that keeps flagging "use a feature branch"
|
|
217
|
+
in that setting is noise. The solo-safe core (commit format, no secrets, no
|
|
218
|
+
force-push) lives in `git-workflow`.
|
|
225
219
|
|
|
226
220
|
## Branching
|
|
227
|
-
- `main`
|
|
228
|
-
-
|
|
221
|
+
- Protect `main` with required reviews and CI. Never commit broken code to it.
|
|
222
|
+
- Work on feature branches: `feat/user-registration`, `fix/order-total-calc`.
|
|
223
|
+
- Rebase feature branches on `main` before opening a PR to keep linear history.
|
|
224
|
+
- Squash fixup commits before merging to keep history clean.
|
|
229
225
|
- Delete branches after merge. Stale branches are clutter.
|
|
230
|
-
- Rebase feature branches on main before PR to keep linear history.
|
|
231
226
|
|
|
232
227
|
## Pull Requests
|
|
233
228
|
- Keep PRs small: <400 lines changed. Split large features into stacked PRs.
|
|
@@ -240,6 +235,25 @@ Default response mode for this project is **concise**. The `brand-voice` skill (
|
|
|
240
235
|
- Approve with comments if nits only. Block for: bugs, security, missing tests.
|
|
241
236
|
- Respond to reviews within 24 hours. Do not let PRs rot.
|
|
242
237
|
|
|
238
|
+
## Source: `app/rules/common/git-workflow.md`
|
|
239
|
+
|
|
240
|
+
# Git Workflow Rules
|
|
241
|
+
|
|
242
|
+
Solo-safe core: everything here holds whether one person or twenty merge into
|
|
243
|
+
`main`. Branching, pull-request, and review conventions for teams live in
|
|
244
|
+
`git-team` and ship only with the `strict` profile.
|
|
245
|
+
|
|
246
|
+
## Commit Messages
|
|
247
|
+
- Use conventional commits: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`.
|
|
248
|
+
- First line: imperative mood, max 72 chars (`feat: add user registration endpoint`).
|
|
249
|
+
- Body (optional): explain *why*, not *what*. The diff shows what.
|
|
250
|
+
- Reference tickets: `fix: prevent duplicate orders (PROJ-456)`.
|
|
251
|
+
|
|
252
|
+
## Commit Practices
|
|
253
|
+
- Commit small, atomic changes. One commit = one logical change.
|
|
254
|
+
- Never commit: secrets, `.env` files, build artifacts, large binaries.
|
|
255
|
+
- `main` is always deployable: run the project's gates before every commit that lands there.
|
|
256
|
+
|
|
243
257
|
## Tags and Releases
|
|
244
258
|
- Use semantic versioning: MAJOR.MINOR.PATCH.
|
|
245
259
|
- Tag releases: `git tag v1.2.3`. Automate changelog from commits.
|
|
@@ -98,8 +98,15 @@ if [ -f .claude/test-cohesion-map.json ] || \
|
|
|
98
98
|
fi
|
|
99
99
|
|
|
100
100
|
if [ -f pyproject.toml ] || [ -f setup.py ]; then
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
# Lint only what the project itself configured. A bare pyproject.toml
|
|
102
|
+
# (build metadata, pytest/mypy tables) says nothing about ruff, and running
|
|
103
|
+
# `ruff check .` under whatever config the machine resolves turns the Stop
|
|
104
|
+
# gate red on findings the project never signed up for (v4.32.0 postmortem:
|
|
105
|
+
# 348 findings in a repo whose ruff rule set lives in a package.json script).
|
|
106
|
+
if [ -f ruff.toml ] || [ -f .ruff.toml ] || grep -qs '^\[tool\.ruff' pyproject.toml; then
|
|
107
|
+
if require_command ruff; then
|
|
108
|
+
run_required "ruff found errors" "head -30" ruff check .
|
|
109
|
+
fi
|
|
103
110
|
fi
|
|
104
111
|
if [ -d src ] && [ "$PROFILE" = "strict" ]; then
|
|
105
112
|
if require_command mypy; then
|
package/app/hooks.json
CHANGED
|
@@ -167,7 +167,8 @@
|
|
|
167
167
|
"hooks": [
|
|
168
168
|
{
|
|
169
169
|
"type": "command",
|
|
170
|
-
"command": "\"$HOME/.softspark/ai-toolkit/hooks/quality-check.sh\""
|
|
170
|
+
"command": "\"$HOME/.softspark/ai-toolkit/hooks/quality-check.sh\"",
|
|
171
|
+
"async": true
|
|
171
172
|
}
|
|
172
173
|
]
|
|
173
174
|
},
|
|
@@ -177,7 +178,8 @@
|
|
|
177
178
|
"hooks": [
|
|
178
179
|
{
|
|
179
180
|
"type": "command",
|
|
180
|
-
"command": "\"$HOME/.softspark/ai-toolkit/hooks/save-session.sh\""
|
|
181
|
+
"command": "\"$HOME/.softspark/ai-toolkit/hooks/save-session.sh\"",
|
|
182
|
+
"async": true
|
|
181
183
|
}
|
|
182
184
|
]
|
|
183
185
|
},
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
language: common
|
|
3
|
+
category: git-team
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
profiles:
|
|
6
|
+
- "strict"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Git Team Workflow Rules
|
|
10
|
+
|
|
11
|
+
These rules assume more than one person merges into `main`. They ship only with
|
|
12
|
+
the `strict` profile; a solo maintainer who commits straight to `main` is not
|
|
13
|
+
doing anything wrong, and a reviewer that keeps flagging "use a feature branch"
|
|
14
|
+
in that setting is noise. The solo-safe core (commit format, no secrets, no
|
|
15
|
+
force-push) lives in `git-workflow`.
|
|
16
|
+
|
|
17
|
+
## Branching
|
|
18
|
+
- Protect `main` with required reviews and CI. Never commit broken code to it.
|
|
19
|
+
- Work on feature branches: `feat/user-registration`, `fix/order-total-calc`.
|
|
20
|
+
- Rebase feature branches on `main` before opening a PR to keep linear history.
|
|
21
|
+
- Squash fixup commits before merging to keep history clean.
|
|
22
|
+
- Delete branches after merge. Stale branches are clutter.
|
|
23
|
+
|
|
24
|
+
## Pull Requests
|
|
25
|
+
- Keep PRs small: <400 lines changed. Split large features into stacked PRs.
|
|
26
|
+
- PR title follows conventional commit format.
|
|
27
|
+
- Include: summary, test plan, and screenshots/recordings for UI changes.
|
|
28
|
+
- Require at least one approval before merge.
|
|
29
|
+
|
|
30
|
+
## Code Review
|
|
31
|
+
- Review for: correctness, security, performance, readability.
|
|
32
|
+
- Approve with comments if nits only. Block for: bugs, security, missing tests.
|
|
33
|
+
- Respond to reviews within 24 hours. Do not let PRs rot.
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
language: common
|
|
3
3
|
category: git-workflow
|
|
4
|
-
version: "
|
|
4
|
+
version: "2.0.0"
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Git Workflow Rules
|
|
8
8
|
|
|
9
|
+
Solo-safe core: everything here holds whether one person or twenty merge into
|
|
10
|
+
`main`. Branching, pull-request, and review conventions for teams live in
|
|
11
|
+
`git-team` and ship only with the `strict` profile.
|
|
12
|
+
|
|
9
13
|
## Commit Messages
|
|
10
14
|
- Use conventional commits: `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`.
|
|
11
15
|
- First line: imperative mood, max 72 chars (`feat: add user registration endpoint`).
|
|
@@ -15,25 +19,7 @@ version: "1.0.0"
|
|
|
15
19
|
## Commit Practices
|
|
16
20
|
- Commit small, atomic changes. One commit = one logical change.
|
|
17
21
|
- Never commit: secrets, `.env` files, build artifacts, large binaries.
|
|
18
|
-
-
|
|
19
|
-
- Squash fixup commits before merging to keep history clean.
|
|
20
|
-
|
|
21
|
-
## Branching
|
|
22
|
-
- `main` is always deployable. Protect it with required reviews and CI.
|
|
23
|
-
- Feature branches: `feat/user-registration`, `fix/order-total-calc`.
|
|
24
|
-
- Delete branches after merge. Stale branches are clutter.
|
|
25
|
-
- Rebase feature branches on main before PR to keep linear history.
|
|
26
|
-
|
|
27
|
-
## Pull Requests
|
|
28
|
-
- Keep PRs small: <400 lines changed. Split large features into stacked PRs.
|
|
29
|
-
- PR title follows conventional commit format.
|
|
30
|
-
- Include: summary, test plan, and screenshots/recordings for UI changes.
|
|
31
|
-
- Require at least one approval before merge.
|
|
32
|
-
|
|
33
|
-
## Code Review
|
|
34
|
-
- Review for: correctness, security, performance, readability.
|
|
35
|
-
- Approve with comments if nits only. Block for: bugs, security, missing tests.
|
|
36
|
-
- Respond to reviews within 24 hours. Do not let PRs rot.
|
|
22
|
+
- `main` is always deployable: run the project's gates before every commit that lands there.
|
|
37
23
|
|
|
38
24
|
## Tags and Releases
|
|
39
25
|
- Use semantic versioning: MAJOR.MINOR.PATCH.
|
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
language: common
|
|
3
3
|
category: performance
|
|
4
|
-
version: "1.
|
|
4
|
+
version: "1.1.0"
|
|
5
|
+
paths:
|
|
6
|
+
- "**/*.py"
|
|
7
|
+
- "**/*.ts"
|
|
8
|
+
- "**/*.tsx"
|
|
9
|
+
- "**/*.js"
|
|
10
|
+
- "**/*.jsx"
|
|
11
|
+
- "**/*.mjs"
|
|
12
|
+
- "**/*.cjs"
|
|
13
|
+
- "**/*.go"
|
|
14
|
+
- "**/*.rs"
|
|
15
|
+
- "**/*.java"
|
|
16
|
+
- "**/*.kt"
|
|
17
|
+
- "**/*.kts"
|
|
18
|
+
- "**/*.swift"
|
|
19
|
+
- "**/*.dart"
|
|
20
|
+
- "**/*.cs"
|
|
21
|
+
- "**/*.php"
|
|
22
|
+
- "**/*.cpp"
|
|
23
|
+
- "**/*.cc"
|
|
24
|
+
- "**/*.cxx"
|
|
25
|
+
- "**/*.hpp"
|
|
26
|
+
- "**/*.h"
|
|
27
|
+
- "**/*.rb"
|
|
28
|
+
- "**/*.sql"
|
|
5
29
|
---
|
|
6
30
|
|
|
7
31
|
# Universal Performance Rules
|
|
@@ -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 |
|