@softspark/ai-toolkit 1.6.0 → 1.6.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 +13 -0
- package/README.md +3 -3
- package/app/.claude-plugin/plugin.json +1 -1
- package/bin/ai-toolkit.js +1 -1
- package/kb/reference/architecture-overview.md +2 -2
- package/llms-full.txt +2 -2
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/scripts/add_rule.py +5 -4
- package/scripts/generate_aider_conf.py +2 -1
- package/scripts/generate_augment_rules.py +4 -4
- package/scripts/generate_cline_rules.py +11 -6
- package/scripts/install_steps/ai_tools.py +6 -7
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,19 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v1.6.1 — IDE Rule Format Compliance Audit (2026-04-10)
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **Cline rules path** — changed `.cline/rules/` to `.clinerules/` directory per official Cline 3.7+ docs. Old path was silently ignored by Cline
|
|
14
|
+
- **Augment frontmatter type** — changed `auto_attached` to `agent_requested` per official Augment docs
|
|
15
|
+
- **Aider config** — added `CONVENTIONS.md` to `read:` list in `.aider.conf.yml` so Aider auto-loads the conventions we generate
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **`add-rule` help text** — now lists all supported editors (was missing Augment, Roo, Aider, Antigravity)
|
|
19
|
+
- Legacy `.clinerules` single-file is auto-migrated to `.clinerules/` directory on next install
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
10
23
|
## v1.6.0 — IDE Language Rules Propagation, Planning Docs, Cloud Security Pack (2026-04-10)
|
|
11
24
|
|
|
12
25
|
### Added
|
package/README.md
CHANGED
|
@@ -121,7 +121,7 @@ Replaces all symlinks with real files, inlines rules into CLAUDE.md, copies cons
|
|
|
121
121
|
| Windsurf | `~/.codeium/.../global_rules.md` + `.windsurf/rules/*.md` | `ai-toolkit install` / `--local` | global + project |
|
|
122
122
|
| Gemini CLI | `~/.gemini/GEMINI.md` | `ai-toolkit install` | global |
|
|
123
123
|
| GitHub Copilot | `.github/copilot-instructions.md` | `ai-toolkit install --local` | project |
|
|
124
|
-
| Cline | `.clinerules
|
|
124
|
+
| Cline | `.clinerules/*.md` | `ai-toolkit install --local` | project |
|
|
125
125
|
| Roo Code | `.roomodes` + `.roo/rules/*.md` | `ai-toolkit install --local` | project |
|
|
126
126
|
| Aider | `.aider.conf.yml` + `CONVENTIONS.md` | `ai-toolkit install --local` | project |
|
|
127
127
|
| Augment | `.augment/rules/ai-toolkit-*.md` | `ai-toolkit install --local` | project |
|
|
@@ -535,9 +535,9 @@ When `--editors` is used alongside detected or explicit languages, language rule
|
|
|
535
535
|
|--------|-------------------|------------|
|
|
536
536
|
| Cursor | `.cursor/rules/ai-toolkit-lang-<lang>.mdc` | `globs` per file type (e.g. `**/*.py`) |
|
|
537
537
|
| Windsurf | `.windsurf/rules/ai-toolkit-lang-<lang>.md` | always loaded |
|
|
538
|
-
| Cline | `.
|
|
538
|
+
| Cline | `.clinerules/ai-toolkit-lang-<lang>.md` | always loaded |
|
|
539
539
|
| Roo Code | `.roo/rules/ai-toolkit-lang-<lang>.md` | always loaded |
|
|
540
|
-
| Augment | `.augment/rules/ai-toolkit-lang-<lang>.md` | `
|
|
540
|
+
| Augment | `.augment/rules/ai-toolkit-lang-<lang>.md` | `agent_requested` with globs |
|
|
541
541
|
| Antigravity | `.agent/rules/ai-toolkit-lang-<lang>.md` | always loaded |
|
|
542
542
|
|
|
543
543
|
Registered rules (`ai-toolkit add-rule`) are also propagated to directory-based editor configs as `ai-toolkit-custom-<name>` files.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-toolkit",
|
|
3
3
|
"description": "Professional-grade Claude Code toolkit with persona presets, skill security auditor, expanded lifecycle hooks, experimental opt-in plugin packs, benchmark harvesting, and multi-tool support.",
|
|
4
|
-
"version": "1.6.
|
|
4
|
+
"version": "1.6.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "SoftSpark",
|
|
7
7
|
"url": "https://github.com/softspark"
|
package/bin/ai-toolkit.js
CHANGED
|
@@ -83,7 +83,7 @@ const COMMANDS = {
|
|
|
83
83
|
'copilot-instructions': 'Generate .github/copilot-instructions.md',
|
|
84
84
|
'gemini-md': 'Generate GEMINI.md for Gemini CLI',
|
|
85
85
|
'cline-rules': 'Generate .clinerules for Cline (legacy)',
|
|
86
|
-
'cline-dir-rules': 'Generate .
|
|
86
|
+
'cline-dir-rules': 'Generate .clinerules/*.md for Cline (recommended)',
|
|
87
87
|
'roo-modes': 'Generate .roomodes for Roo Code',
|
|
88
88
|
'roo-dir-rules': 'Generate .roo/rules/*.md shared rules for Roo Code',
|
|
89
89
|
'aider-conf': 'Generate .aider.conf.yml for Aider',
|
|
@@ -108,7 +108,7 @@ Machine (global) Project (local)
|
|
|
108
108
|
- `--editors cursor,aider` — install only selected editors
|
|
109
109
|
- (no flag) — auto-detect from existing project files; `update --local` picks up whatever editors already have configs
|
|
110
110
|
|
|
111
|
-
Each editor gets
|
|
111
|
+
Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.windsurf/rules/*.md`, `.clinerules/*.md`, `.roo/rules/*.md`, `.augment/rules/ai-toolkit-*.md`, `.agent/rules/*.md`, `CONVENTIONS.md`). Hooks are global-only — not merged into project settings.
|
|
112
112
|
|
|
113
113
|
## CLI Commands
|
|
114
114
|
|
|
@@ -132,7 +132,7 @@ Each editor gets both legacy single-file format (for backwards compat) and new d
|
|
|
132
132
|
| `copilot-instructions` | `./` | Generates `.github/copilot-instructions.md` |
|
|
133
133
|
| `gemini-md` | `./` | Generates `GEMINI.md` |
|
|
134
134
|
| `cline-rules` | `./` | Generates `.clinerules` (legacy) |
|
|
135
|
-
| `cline-dir-rules` | `./` | Generates `.
|
|
135
|
+
| `cline-dir-rules` | `./` | Generates `.clinerules/*.md` |
|
|
136
136
|
| `roo-modes` | `./` | Generates `.roomodes` |
|
|
137
137
|
| `roo-dir-rules` | `./` | Generates `.roo/rules/*.md` |
|
|
138
138
|
| `aider-conf` | `./` | Generates `.aider.conf.yml` |
|
package/llms-full.txt
CHANGED
|
@@ -5264,7 +5264,7 @@ Machine (global) Project (local)
|
|
|
5264
5264
|
- `--editors cursor,aider` — install only selected editors
|
|
5265
5265
|
- (no flag) — auto-detect from existing project files; `update --local` picks up whatever editors already have configs
|
|
5266
5266
|
|
|
5267
|
-
Each editor gets
|
|
5267
|
+
Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.windsurf/rules/*.md`, `.clinerules/*.md`, `.roo/rules/*.md`, `.augment/rules/ai-toolkit-*.md`, `.agent/rules/*.md`, `CONVENTIONS.md`). Hooks are global-only — not merged into project settings.
|
|
5268
5268
|
|
|
5269
5269
|
## CLI Commands
|
|
5270
5270
|
|
|
@@ -5288,7 +5288,7 @@ Each editor gets both legacy single-file format (for backwards compat) and new d
|
|
|
5288
5288
|
| `copilot-instructions` | `./` | Generates `.github/copilot-instructions.md` |
|
|
5289
5289
|
| `gemini-md` | `./` | Generates `GEMINI.md` |
|
|
5290
5290
|
| `cline-rules` | `./` | Generates `.clinerules` (legacy) |
|
|
5291
|
-
| `cline-dir-rules` | `./` | Generates `.
|
|
5291
|
+
| `cline-dir-rules` | `./` | Generates `.clinerules/*.md` |
|
|
5292
5292
|
| `roo-modes` | `./` | Generates `.roomodes` |
|
|
5293
5293
|
| `roo-dir-rules` | `./` | Generates `.roo/rules/*.md` |
|
|
5294
5294
|
| `aider-conf` | `./` | Generates `.aider.conf.yml` |
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@softspark/ai-toolkit",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"description": "Professional-grade AI coding toolkit: 92 skills, 44 agents, multi-platform support (Claude, Cursor, Windsurf, Copilot, Gemini, Cline, Roo Code, Aider, Augment, Google Antigravity), machine-enforced safety constitution, persona presets, skill security auditor, expanded lifecycle hooks, 11 plugin packs, and benchmark tooling.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
package/scripts/add_rule.py
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
"""add-rule -- Register a rule file in ~/.ai-toolkit/rules/.
|
|
3
3
|
|
|
4
4
|
Registered rules are automatically injected into all AI tool configs
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
on next 'ai-toolkit install' or 'ai-toolkit update':
|
|
6
|
+
Global: Claude, Cursor, Windsurf, Gemini, Augment
|
|
7
|
+
Local (--local): all of the above + Copilot, Cline, Roo, Aider, Antigravity
|
|
7
8
|
|
|
8
9
|
Usage:
|
|
9
10
|
add_rule.py <rule-file> [rule-name]
|
|
@@ -47,8 +48,8 @@ def main() -> None:
|
|
|
47
48
|
print(f"Registered: '{rule_name}' -> {dest}")
|
|
48
49
|
print()
|
|
49
50
|
print("Apply now:")
|
|
50
|
-
print(" ai-toolkit update # global (Claude, Cursor, Windsurf, Gemini)")
|
|
51
|
-
print(" ai-toolkit update --local # project-local (
|
|
51
|
+
print(" ai-toolkit update # global (Claude, Cursor, Windsurf, Gemini, Augment)")
|
|
52
|
+
print(" ai-toolkit update --local # project-local (all editors)")
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
if __name__ == "__main__":
|
|
@@ -18,8 +18,9 @@ def main() -> None:
|
|
|
18
18
|
print("# Use the architect mode for complex tasks, aligned with our 2-phase workflow")
|
|
19
19
|
print("architect: true")
|
|
20
20
|
print()
|
|
21
|
-
print("# Read
|
|
21
|
+
print("# Read project rules (loaded as read-only context)")
|
|
22
22
|
print("read:")
|
|
23
|
+
print(' - "CONVENTIONS.md"')
|
|
23
24
|
print(' - ".claude/CLAUDE.md"')
|
|
24
25
|
print(' - ".claude/constitution.md"')
|
|
25
26
|
print(' - "AGENTS.md"')
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
Augment supports per-file rules with frontmatter:
|
|
5
5
|
- type: always_apply — always in context
|
|
6
|
-
- type:
|
|
6
|
+
- type: agent_requested + globs — attached for matching files
|
|
7
7
|
|
|
8
8
|
The existing generate_augment.py creates a single always_apply file.
|
|
9
9
|
This generator adds granular per-category rules with appropriate types.
|
|
@@ -72,7 +72,7 @@ def _make_rules() -> dict[str, callable]:
|
|
|
72
72
|
f"{PREFIX}code-style.md": lambda: _augment_wrap(
|
|
73
73
|
rule_code_style(),
|
|
74
74
|
description="Code style conventions",
|
|
75
|
-
rule_type="
|
|
75
|
+
rule_type="agent_requested",
|
|
76
76
|
globs=["*.py", "*.ts", "*.tsx", "*.js", "*.jsx", "*.go", "*.rs",
|
|
77
77
|
"*.java", "*.kt", "*.swift", "*.dart", "*.cs", "*.php",
|
|
78
78
|
"*.cpp", "*.cc", "*.rb"],
|
|
@@ -80,7 +80,7 @@ def _make_rules() -> dict[str, callable]:
|
|
|
80
80
|
f"{PREFIX}testing.md": lambda: _augment_wrap(
|
|
81
81
|
rule_testing(),
|
|
82
82
|
description="Testing standards and patterns",
|
|
83
|
-
rule_type="
|
|
83
|
+
rule_type="agent_requested",
|
|
84
84
|
globs=["*.test.*", "*.spec.*", "test_*", "**/tests/**",
|
|
85
85
|
"**/test/**", "**/__tests__/**"],
|
|
86
86
|
),
|
|
@@ -107,7 +107,7 @@ def generate(target_dir: Path, *,
|
|
|
107
107
|
all_rules[filename] = (lambda fn, l, g: lambda: _augment_wrap(
|
|
108
108
|
fn(),
|
|
109
109
|
description=f"{l.title()} language rules",
|
|
110
|
-
rule_type="
|
|
110
|
+
rule_type="agent_requested",
|
|
111
111
|
globs=g,
|
|
112
112
|
))(content_fn, lang, globs)
|
|
113
113
|
else:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
|
-
"""Generate .
|
|
2
|
+
"""Generate .clinerules/*.md files for Cline.
|
|
3
3
|
|
|
4
|
-
Cline reads
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
Cline reads rules from the .clinerules/ directory (since Cline 3.7).
|
|
5
|
+
Each .md file inside .clinerules/ is automatically loaded.
|
|
6
|
+
The legacy .clinerules single-file format is replaced by this directory.
|
|
7
7
|
|
|
8
8
|
Usage:
|
|
9
9
|
python3 scripts/generate_cline_rules.py [target-dir]
|
|
@@ -25,11 +25,16 @@ from dir_rules_shared import (
|
|
|
25
25
|
def generate(target_dir: Path, *,
|
|
26
26
|
language_modules: list[str] | None = None,
|
|
27
27
|
rules_dir: Path | None = None) -> None:
|
|
28
|
-
"""Write .
|
|
28
|
+
"""Write .clinerules/*.md files to target_dir."""
|
|
29
|
+
# Migrate: if .clinerules exists as a single file, remove it
|
|
30
|
+
# so the directory can be created (Cline 3.7+ uses directory format)
|
|
31
|
+
clinerules = target_dir / ".clinerules"
|
|
32
|
+
if clinerules.is_file():
|
|
33
|
+
clinerules.unlink()
|
|
29
34
|
rules = dict(STANDARD_RULES)
|
|
30
35
|
rules.update(build_language_rules(language_modules))
|
|
31
36
|
rules.update(build_registered_rules(rules_dir))
|
|
32
|
-
write_rules(target_dir, rules, ".
|
|
37
|
+
write_rules(target_dir, rules, ".clinerules")
|
|
33
38
|
|
|
34
39
|
|
|
35
40
|
def main() -> None:
|
|
@@ -136,7 +136,6 @@ _EDITOR_MARKERS: dict[str, str] = {
|
|
|
136
136
|
".windsurfrules": "windsurf",
|
|
137
137
|
".windsurf/rules": "windsurf",
|
|
138
138
|
".clinerules": "cline",
|
|
139
|
-
".cline/rules": "cline",
|
|
140
139
|
".roomodes": "roo",
|
|
141
140
|
".roo/rules": "roo",
|
|
142
141
|
".aider.conf.yml": "aider",
|
|
@@ -309,7 +308,7 @@ def _install_local_dry_run(reset: bool, editors: list[str] | None = None) -> Non
|
|
|
309
308
|
"copilot": " Would inject: .github/copilot-instructions.md",
|
|
310
309
|
"cursor": " Would generate: .cursorrules + .cursor/rules/*.mdc",
|
|
311
310
|
"windsurf": " Would generate: .windsurfrules + .windsurf/rules/*.md",
|
|
312
|
-
"cline": " Would generate: .clinerules
|
|
311
|
+
"cline": " Would generate: .clinerules/*.md",
|
|
313
312
|
"roo": " Would generate: .roomodes + .roo/rules/*.md",
|
|
314
313
|
"aider": " Would generate: .aider.conf.yml + CONVENTIONS.md",
|
|
315
314
|
"augment": " Would generate: .augment/rules/ai-toolkit-*.md",
|
|
@@ -429,11 +428,11 @@ def _create_local_ai_tool_configs(cwd: Path, rules_dir: Path,
|
|
|
429
428
|
rules_dir=rules_dir)
|
|
430
429
|
|
|
431
430
|
if "cline" in eds:
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
431
|
+
# Migrate: remove legacy .clinerules single file (replaced by directory)
|
|
432
|
+
legacy_clinerules = cwd / ".clinerules"
|
|
433
|
+
if legacy_clinerules.is_file():
|
|
434
|
+
legacy_clinerules.unlink()
|
|
435
|
+
print(" Migrated: .clinerules file → .clinerules/ directory")
|
|
437
436
|
from generate_cline_rules import generate as gen_cline_rules
|
|
438
437
|
gen_cline_rules(cwd, language_modules=language_modules,
|
|
439
438
|
rules_dir=rules_dir)
|