@softspark/ai-toolkit 4.12.0 → 4.13.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 +30 -0
- package/README.md +33 -15
- package/app/.claude-plugin/plugin.json +11 -19
- package/app/ARCHITECTURE.md +6 -6
- package/app/claude-app/global-instructions.md +10 -0
- package/app/claude-app/hooks/hooks.json +284 -0
- package/app/claude-app/skills/ai-toolkit-rules/SKILL.md +359 -0
- package/app/hooks/config-desync-guard.sh +63 -23
- package/app/plugins/README.md +4 -1
- package/benchmarks/ecosystem-doctor-snapshot.json +91 -25
- package/bin/ai-toolkit.js +21 -3
- package/kb/planning/drop-cascade-hooks-after-sunset.md +13 -8
- package/kb/procedures/ecosystem-sync-sop.md +5 -5
- package/kb/procedures/maintenance-sop.md +42 -4
- package/kb/procedures/release-preparation-sop.md +5 -1
- package/kb/procedures/release-verification-sop.md +25 -9
- package/kb/reference/architecture-overview.md +7 -2
- package/kb/reference/claude-ecosystem-expansion-foundations.md +12 -3
- package/kb/reference/cli-reference.md +4 -2
- package/kb/reference/global-install-model.md +24 -3
- package/kb/reference/hooks-catalog.md +2 -3
- package/kb/reference/plugin-pack-conventions.md +5 -5
- package/kb/reference/skills-catalog.md +2 -0
- package/kb/reference/supported-tools-registry.md +30 -13
- package/kb/reference/unique-features.md +3 -2
- package/llms-full.txt +179 -60
- package/manifest.json +8 -8
- package/package.json +4 -3
- package/scripts/claude_app.py +347 -0
- package/scripts/doctor.py +85 -4
- package/scripts/ecosystem_tools.json +33 -5
- package/scripts/generate_devin_hooks.py +3 -4
- package/scripts/generate_windsurf_skills.py +5 -6
- package/scripts/install.py +23 -21
- package/scripts/install_steps/ai_tools.py +96 -6
- package/scripts/install_steps/install_state.py +2 -0
- package/scripts/update_projects.py +12 -1
- package/scripts/validate.py +34 -2
- package/AGENTS.md +0 -655
- package/scripts/generate_windsurf_hooks.py +0 -152
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"last_run": "2026-07-
|
|
2
|
+
"last_run": "2026-07-10T06:43:18Z",
|
|
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": "880db45231fef284",
|
|
28
28
|
"headings": [
|
|
29
29
|
"Admin",
|
|
30
30
|
"Auggie CLI",
|
|
@@ -65,8 +65,50 @@
|
|
|
65
65
|
"subagents": true
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
|
+
"claude-app": {
|
|
69
|
+
"docs_hash": "bd1483491a8a64e2",
|
|
70
|
+
"headings": [
|
|
71
|
+
"Add global and folder instructions",
|
|
72
|
+
"Availability",
|
|
73
|
+
"Claude Cowork plugins",
|
|
74
|
+
"Claude stopped working on my task",
|
|
75
|
+
"Current limitations",
|
|
76
|
+
"Data and analysis",
|
|
77
|
+
"Document creation",
|
|
78
|
+
"Example use cases",
|
|
79
|
+
"File and document management",
|
|
80
|
+
"Files aren't appearing where expected",
|
|
81
|
+
"Folder instructions",
|
|
82
|
+
"Get started",
|
|
83
|
+
"Get started with Claude Cowork",
|
|
84
|
+
"Global instructions",
|
|
85
|
+
"How Claude Cowork runs your tasks",
|
|
86
|
+
"I don't see Cowork on web or mobile",
|
|
87
|
+
"I'm hitting usage limits quickly",
|
|
88
|
+
"I'm seeing "Setting up Claude's workspace" when I start Cowork; what does this mean?",
|
|
89
|
+
"Key capabilities",
|
|
90
|
+
"Permission modes",
|
|
91
|
+
"Permissions",
|
|
92
|
+
"Permissions and security",
|
|
93
|
+
"Requirements",
|
|
94
|
+
"Research and analysis",
|
|
95
|
+
"Schedule recurring tasks",
|
|
96
|
+
"Start a Cowork session",
|
|
97
|
+
"Troubleshooting",
|
|
98
|
+
"Usage limits",
|
|
99
|
+
"What is Claude Cowork?",
|
|
100
|
+
"What to expect during a task"
|
|
101
|
+
],
|
|
102
|
+
"markers": {
|
|
103
|
+
"Folder instructions": true,
|
|
104
|
+
"Global instructions": true,
|
|
105
|
+
"plugins": true,
|
|
106
|
+
"skills": true,
|
|
107
|
+
"sub-agents": true
|
|
108
|
+
}
|
|
109
|
+
},
|
|
68
110
|
"claude-code": {
|
|
69
|
-
"docs_hash": "
|
|
111
|
+
"docs_hash": "50b46c4f57d16b9e",
|
|
70
112
|
"headings": [
|
|
71
113
|
"Core concepts",
|
|
72
114
|
"Documentation Index",
|
|
@@ -122,10 +164,10 @@
|
|
|
122
164
|
"slash command": true,
|
|
123
165
|
"sub-agent": true
|
|
124
166
|
},
|
|
125
|
-
"version": "2.1.
|
|
167
|
+
"version": "2.1.206 (Claude Code)"
|
|
126
168
|
},
|
|
127
169
|
"cline": {
|
|
128
|
-
"docs_hash": "
|
|
170
|
+
"docs_hash": "1726cf1ff3f402b6",
|
|
129
171
|
"headings": [
|
|
130
172
|
"API Reference",
|
|
131
173
|
"Best Practices",
|
|
@@ -172,52 +214,77 @@
|
|
|
172
214
|
}
|
|
173
215
|
},
|
|
174
216
|
"codex-cli": {
|
|
175
|
-
"docs_hash": "
|
|
217
|
+
"docs_hash": "46073353f24772e6",
|
|
176
218
|
"headings": [
|
|
177
219
|
"API",
|
|
178
220
|
"API Reference",
|
|
179
|
-
"Administration",
|
|
180
221
|
"Advertiser API",
|
|
222
|
+
"Agent configuration",
|
|
181
223
|
"Agents SDK",
|
|
182
|
-
"
|
|
224
|
+
"Available on",
|
|
225
|
+
"Blog",
|
|
183
226
|
"Build",
|
|
227
|
+
"Build with Codex",
|
|
228
|
+
"Capabilities",
|
|
184
229
|
"Categories",
|
|
185
|
-
"
|
|
186
|
-
"
|
|
230
|
+
"Chats",
|
|
231
|
+
"Choose the right GPT-5.6 model",
|
|
232
|
+
"Codex Security",
|
|
187
233
|
"Community",
|
|
188
|
-
"
|
|
234
|
+
"Config file",
|
|
235
|
+
"Continue a task on another host",
|
|
189
236
|
"Contribute",
|
|
190
237
|
"Conversion apps",
|
|
191
238
|
"Core Concepts",
|
|
192
239
|
"Core concepts",
|
|
240
|
+
"Customization",
|
|
193
241
|
"Deploy",
|
|
242
|
+
"Deployment and model providers",
|
|
243
|
+
"Development workflows",
|
|
194
244
|
"Docs agent",
|
|
245
|
+
"Environments",
|
|
195
246
|
"Evaluation",
|
|
196
247
|
"Events",
|
|
197
|
-
"Explore
|
|
248
|
+
"Explore",
|
|
249
|
+
"Extend ChatGPT and Codex",
|
|
250
|
+
"Extend and automate",
|
|
198
251
|
"File Upload",
|
|
252
|
+
"Foundations",
|
|
199
253
|
"Get started",
|
|
200
|
-
"Getting
|
|
254
|
+
"Getting started",
|
|
201
255
|
"Going live",
|
|
202
256
|
"Guides",
|
|
203
|
-
"
|
|
257
|
+
"Identity and authentication",
|
|
204
258
|
"Legacy APIs",
|
|
205
259
|
"Measurement",
|
|
260
|
+
"Overview",
|
|
261
|
+
"Permissions",
|
|
206
262
|
"Plan",
|
|
263
|
+
"Plugin and connector controls",
|
|
207
264
|
"Programs",
|
|
208
|
-
"
|
|
265
|
+
"Projects",
|
|
209
266
|
"Realtime and audio",
|
|
210
267
|
"Recent",
|
|
268
|
+
"Reference",
|
|
211
269
|
"Releases",
|
|
212
270
|
"Resources",
|
|
213
271
|
"Run and scale",
|
|
214
|
-
"
|
|
272
|
+
"Safety",
|
|
273
|
+
"Search the docs",
|
|
215
274
|
"Spaces",
|
|
216
275
|
"Specialized models",
|
|
217
276
|
"Suggested",
|
|
277
|
+
"Take on ambitious work with ChatGPT Work",
|
|
278
|
+
"Third-party integrations",
|
|
218
279
|
"Tools",
|
|
219
280
|
"Topics",
|
|
220
|
-
"
|
|
281
|
+
"Turn demonstrated workflows into reusable skills",
|
|
282
|
+
"Usage, governance, and compliance",
|
|
283
|
+
"What should we get done?",
|
|
284
|
+
"What\u2019s new",
|
|
285
|
+
"Windows",
|
|
286
|
+
"Workflows",
|
|
287
|
+
"Workspace access, policy, and models"
|
|
221
288
|
],
|
|
222
289
|
"markers": {
|
|
223
290
|
".agents/skills": false,
|
|
@@ -240,10 +307,10 @@
|
|
|
240
307
|
"mcp_servers": false,
|
|
241
308
|
"sandbox": true
|
|
242
309
|
},
|
|
243
|
-
"version": "codex-cli 0.
|
|
310
|
+
"version": "codex-cli 0.144.1"
|
|
244
311
|
},
|
|
245
312
|
"cursor": {
|
|
246
|
-
"docs_hash": "
|
|
313
|
+
"docs_hash": "63246f9f6c354976",
|
|
247
314
|
"headings": [],
|
|
248
315
|
"markers": {
|
|
249
316
|
".cursor/rules": false,
|
|
@@ -259,7 +326,7 @@
|
|
|
259
326
|
}
|
|
260
327
|
},
|
|
261
328
|
"gemini-cli": {
|
|
262
|
-
"docs_hash": "
|
|
329
|
+
"docs_hash": "7a28426194187480",
|
|
263
330
|
"headings": [
|
|
264
331
|
"Breadcrumbs",
|
|
265
332
|
"Directory actions",
|
|
@@ -302,7 +369,7 @@
|
|
|
302
369
|
}
|
|
303
370
|
},
|
|
304
371
|
"github-copilot": {
|
|
305
|
-
"docs_hash": "
|
|
372
|
+
"docs_hash": "788efbd31f39bd11",
|
|
306
373
|
"headings": [
|
|
307
374
|
"About Copilot auto model selection",
|
|
308
375
|
"About Copilot automations",
|
|
@@ -336,11 +403,10 @@
|
|
|
336
403
|
}
|
|
337
404
|
},
|
|
338
405
|
"google-antigravity": {
|
|
339
|
-
"docs_hash": "
|
|
406
|
+
"docs_hash": "e484097e498581f4",
|
|
340
407
|
"headings": [],
|
|
341
408
|
"markers": {
|
|
342
409
|
"AGENTS.md": false,
|
|
343
|
-
"Antigravity": false,
|
|
344
410
|
"GEMINI.md": false,
|
|
345
411
|
"MCP": false,
|
|
346
412
|
"agent manager": false,
|
|
@@ -353,7 +419,7 @@
|
|
|
353
419
|
}
|
|
354
420
|
},
|
|
355
421
|
"opencode": {
|
|
356
|
-
"docs_hash": "
|
|
422
|
+
"docs_hash": "8713591669c1683f",
|
|
357
423
|
"headings": [
|
|
358
424
|
"Add features",
|
|
359
425
|
"Ask questions",
|
|
@@ -413,7 +479,7 @@
|
|
|
413
479
|
}
|
|
414
480
|
},
|
|
415
481
|
"windsurf": {
|
|
416
|
-
"docs_hash": "
|
|
482
|
+
"docs_hash": "93e7f46747f42e11",
|
|
417
483
|
"headings": [
|
|
418
484
|
"Accounts",
|
|
419
485
|
"Advanced",
|
package/bin/ai-toolkit.js
CHANGED
|
@@ -52,6 +52,7 @@ const SCRIPT_COMMANDS = {
|
|
|
52
52
|
'stats': { script: 'stats.py' },
|
|
53
53
|
'compile-slm': { script: 'compile_slm.py' },
|
|
54
54
|
'pack-codebase': { script: 'pack_codebase.py' },
|
|
55
|
+
'claude-app': { script: 'claude_app.py', toolkitCwd: true },
|
|
55
56
|
};
|
|
56
57
|
|
|
57
58
|
// ---------------------------------------------------------------------------
|
|
@@ -109,6 +110,7 @@ const COMMANDS = {
|
|
|
109
110
|
'agents-md': 'Regenerate AGENTS.md from agent definitions',
|
|
110
111
|
'compile-slm': 'Compile toolkit into a minimal SLM system prompt (--budget, --model-size, --dry-run)',
|
|
111
112
|
'pack-codebase': 'Pack the current codebase into a single AI-friendly markdown file (--budget, --include, --exclude, --dry-run)',
|
|
113
|
+
'claude-app': 'Export or verify the uploadable Claude Chat/Desktop/Cowork plugin',
|
|
112
114
|
'llms-txt': 'Generate llms.txt and llms-full.txt',
|
|
113
115
|
'generate-all': 'Generate all platform configs at once (agents, cursor, windsurf, copilot, gemini, cline, roo, aider, augment, antigravity, codex, opencode, llms)',
|
|
114
116
|
help: 'Show this help message',
|
|
@@ -280,6 +282,10 @@ function showHelp() {
|
|
|
280
282
|
console.log(' list Show available plugin packs with install status');
|
|
281
283
|
console.log(' status Show currently installed plugins with data stats');
|
|
282
284
|
console.log(' --editor <list> Runtime target: claude, codex, or all (default: claude)');
|
|
285
|
+
console.log('\nOptions for claude-app:');
|
|
286
|
+
console.log(' export [--output FILE] [--no-custom-rules] [--verify]');
|
|
287
|
+
console.log(' Build a ZIP for Customize > Plugins and Cowork instructions');
|
|
288
|
+
console.log(' verify Run structural checks and the official Claude plugin validator');
|
|
283
289
|
console.log('\nOptions for mcp:');
|
|
284
290
|
console.log(' list List available MCP templates');
|
|
285
291
|
console.log(' editors List editors with native MCP config adapters');
|
|
@@ -539,6 +545,7 @@ function handleStatus(_args) {
|
|
|
539
545
|
*/
|
|
540
546
|
function handleUpdate(args) {
|
|
541
547
|
const isLocal = args.includes('--local');
|
|
548
|
+
const isDryRun = args.includes('--dry-run') || args.includes('--list');
|
|
542
549
|
let statePath = path.join(process.env.HOME, '.softspark', 'ai-toolkit', 'state.json');
|
|
543
550
|
// Fallback to legacy path for first run after upgrade (before migration runs)
|
|
544
551
|
if (!fs.existsSync(statePath)) {
|
|
@@ -568,7 +575,7 @@ function handleUpdate(args) {
|
|
|
568
575
|
run(scriptPath('install.py'), [...stateArgs, ...args]);
|
|
569
576
|
|
|
570
577
|
// After global update (not --local), propagate to all registered projects
|
|
571
|
-
if (!isLocal) {
|
|
578
|
+
if (!isLocal && !isDryRun) {
|
|
572
579
|
const registryPath = path.join(process.env.HOME, '.softspark', 'ai-toolkit', 'projects.json');
|
|
573
580
|
if (fs.existsSync(registryPath)) {
|
|
574
581
|
try {
|
|
@@ -578,8 +585,19 @@ function handleUpdate(args) {
|
|
|
578
585
|
console.log('');
|
|
579
586
|
console.log('## Updating registered projects');
|
|
580
587
|
console.log('');
|
|
581
|
-
// Pass
|
|
582
|
-
|
|
588
|
+
// Pass project-relevant overrides through. In particular, an
|
|
589
|
+
// explicit `--editors all` must override each project's saved editor
|
|
590
|
+
// subset during this propagation run.
|
|
591
|
+
const passthrough = [];
|
|
592
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
593
|
+
const arg = args[i];
|
|
594
|
+
if (arg.startsWith('--skip') || arg === '--refresh-base' || arg.startsWith('--editors=') || arg.startsWith('--profile=')) {
|
|
595
|
+
passthrough.push(arg);
|
|
596
|
+
} else if ((arg === '--editors' || arg === '--profile') && args[i + 1]) {
|
|
597
|
+
passthrough.push(arg, args[i + 1]);
|
|
598
|
+
i += 1;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
583
601
|
run(scriptPath('update_projects.py'), passthrough);
|
|
584
602
|
}
|
|
585
603
|
} catch (_err) {
|
|
@@ -10,16 +10,18 @@ tags:
|
|
|
10
10
|
- deprecation
|
|
11
11
|
- cleanup
|
|
12
12
|
doc_type: plan
|
|
13
|
-
status:
|
|
13
|
+
status: completed
|
|
14
14
|
created: "2026-06-10"
|
|
15
|
-
last_updated: "2026-
|
|
16
|
-
completion: "
|
|
15
|
+
last_updated: "2026-07-10"
|
|
16
|
+
completion: "100%"
|
|
17
17
|
trigger_date: "2026-07-01"
|
|
18
|
-
description: "
|
|
18
|
+
description: "Completed cleanup of the deprecated Windsurf Cascade hooks generator after the 2026-07-01 sunset; Devin CLI .devin/hooks.v1.json is now the sole live hook surface."
|
|
19
19
|
---
|
|
20
20
|
|
|
21
21
|
# Plan: Drop Cascade hooks after 2026-07-01 sunset
|
|
22
22
|
|
|
23
|
+
**Completed in v4.13.0 (2026-07-10).** The deprecated generator and install/test wiring were removed; the Devin hook generator remains.
|
|
24
|
+
|
|
23
25
|
## Why this exists
|
|
24
26
|
|
|
25
27
|
Windsurf rebranded to Devin Desktop on 2026-06-02. The Cascade agent — and its
|
|
@@ -72,10 +74,13 @@ removing it before the sunset breaks Cascade users who are still on the old agen
|
|
|
72
74
|
- `python3 scripts/validate.py --strict` — 0/0 (editor-hooks-honesty must still
|
|
73
75
|
report windsurf as hook-enabled via the `devin` generator alias).
|
|
74
76
|
- `python3 scripts/ecosystem_doctor.py --offline --check` — exit 0.
|
|
75
|
-
- `npm test` — 0 `not ok`;
|
|
76
|
-
`generate_windsurf_hooks.py`
|
|
77
|
-
- `grep -rn "generate_windsurf_hooks
|
|
78
|
-
|
|
77
|
+
- `npm test` — 0 `not ok`; no test recreates the deleted
|
|
78
|
+
`generate_windsurf_hooks.py` generator.
|
|
79
|
+
- `grep -rn "generate_windsurf_hooks" scripts/ tests/` returns nothing
|
|
80
|
+
(Art. VI.1 orphan check — the deleted generator is fully unwired).
|
|
81
|
+
`.windsurf/hooks.json` intentionally remains referenced by the one-time
|
|
82
|
+
migration/strip cleanup (`scripts/install_steps/ai_tools.py`) and its test,
|
|
83
|
+
and in narrative docs (CHANGELOG, README, `kb/`, docstrings).
|
|
79
84
|
|
|
80
85
|
## Do NOT touch
|
|
81
86
|
|
|
@@ -3,10 +3,10 @@ title: "SOP: Ecosystem Sync"
|
|
|
3
3
|
category: procedures
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [sop, ecosystem, editors, generators, drift-detection, sync]
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.1.0"
|
|
7
7
|
created: "2026-04-23"
|
|
8
|
-
last_updated: "2026-
|
|
9
|
-
description: "Quarterly (or event-triggered) sync procedure that detects documentation and capability drift in supported tools (Claude Code
|
|
8
|
+
last_updated: "2026-07-10"
|
|
9
|
+
description: "Quarterly (or event-triggered) sync procedure that detects documentation and capability drift in supported tools (Claude Code, Claude app, and 11 editors), analyses our generators and skills for missing features, and walks through the migration + generator-update workflow."
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# SOP: Ecosystem Sync
|
|
@@ -26,7 +26,7 @@ Keeps ai-toolkit aligned with the tools it integrates with. When an editor adds
|
|
|
26
26
|
## Quick Reference
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
# Full check (all
|
|
29
|
+
# Full check (all 13 tools, online)
|
|
30
30
|
python3 scripts/ecosystem_doctor.py --format text
|
|
31
31
|
|
|
32
32
|
# Single tool
|
|
@@ -48,7 +48,7 @@ python3 scripts/ecosystem_doctor.py --offline --format text
|
|
|
48
48
|
|
|
49
49
|
| File | Purpose |
|
|
50
50
|
|------|---------|
|
|
51
|
-
| `scripts/ecosystem_tools.json` | Authoritative registry:
|
|
51
|
+
| `scripts/ecosystem_tools.json` | Authoritative registry: 13 tools with doc URLs, config paths, our generators, capability markers |
|
|
52
52
|
| `benchmarks/ecosystem-doctor-snapshot.json` | Last-seen state (headings, content hash, markers, version) — updated via `--update` |
|
|
53
53
|
| `scripts/ecosystem_doctor.py` | Drift detector |
|
|
54
54
|
| `kb/reference/supported-tools-registry.md` | Human-readable view of the registry |
|
|
@@ -3,9 +3,9 @@ title: "SOP: Claude Toolkit Maintenance"
|
|
|
3
3
|
category: procedures
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [sop, maintenance, agents, skills, install]
|
|
6
|
-
version: "3.
|
|
6
|
+
version: "3.2.0"
|
|
7
7
|
created: "2026-03-23"
|
|
8
|
-
last_updated: "2026-
|
|
8
|
+
last_updated: "2026-07-10"
|
|
9
9
|
description: "Standard operating procedures for installing, maintaining, and evolving the ai-toolkit."
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -92,6 +92,24 @@ What `install` and `update` do (merge-friendly — user content never overwritte
|
|
|
92
92
|
|
|
93
93
|
Re-running updates only toolkit content. Old whole-directory symlinks are auto-upgraded to per-file on next run.
|
|
94
94
|
|
|
95
|
+
### Install in Claude Chat / Desktop / Cowork
|
|
96
|
+
|
|
97
|
+
The Claude app does not read Claude Code's `~/.claude/rules/`, `CLAUDE.md`,
|
|
98
|
+
agents, skills, or settings. Build the separate app-native plugin:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
ai-toolkit claude-app export --verify
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
1. Open Claude and choose `Customize > Plugins > + > Upload plugin`.
|
|
105
|
+
2. Select `ai-toolkit-claude-app.zip`.
|
|
106
|
+
3. Paste `ai-toolkit-claude-app-global-instructions.md` into
|
|
107
|
+
`Settings > Cowork > Global instructions`.
|
|
108
|
+
|
|
109
|
+
The export includes registered rules by default; use `--no-custom-rules` for a
|
|
110
|
+
shareable clean bundle. Re-export and re-upload after toolkit or registered-rule
|
|
111
|
+
updates. Skills work in Chat and Cowork. Hooks and sub-agents run only in Cowork.
|
|
112
|
+
|
|
95
113
|
### Install Profiles (v3.0.0)
|
|
96
114
|
|
|
97
115
|
| Profile | Claude Code core | Editor rules | Gemini hooks | Copilot dir layout | Per-editor hooks / sub-agents / commands | Git hooks |
|
|
@@ -150,6 +168,9 @@ ai-toolkit remove-rule my-project-rules
|
|
|
150
168
|
|
|
151
169
|
Rule names derive from the filename (`my-project-rules.md` → marker `TOOLKIT:my-project-rules`).
|
|
152
170
|
|
|
171
|
+
After adding or removing a registered rule, re-export the Claude app plugin if
|
|
172
|
+
that runtime should receive the change.
|
|
173
|
+
|
|
153
174
|
---
|
|
154
175
|
|
|
155
176
|
## Adding a New Agent
|
|
@@ -231,6 +252,21 @@ Use this when Claude appears to ignore `CLAUDE.md`, `.claude/rules/*.md`, output
|
|
|
231
252
|
scripts/validate.py
|
|
232
253
|
```
|
|
233
254
|
|
|
255
|
+
## Troubleshooting Rule Enforcement in Claude Chat / Cowork
|
|
256
|
+
|
|
257
|
+
Do not use `/memory` or inspect `~/.claude/rules/` for the app runtime; those
|
|
258
|
+
checks apply only to Claude Code.
|
|
259
|
+
|
|
260
|
+
1. Run `ai-toolkit claude-app verify` and fix any manifest/component error.
|
|
261
|
+
2. Re-export the ZIP and upload it from `Customize > Plugins`.
|
|
262
|
+
3. Confirm `ai-toolkit-rules` appears in the `/` or `+` skill picker.
|
|
263
|
+
4. Confirm the generated standing instructions are saved under
|
|
264
|
+
`Settings > Cowork > Global instructions`.
|
|
265
|
+
5. In regular Chat, expect skills only. Hooks and sub-agents are intentionally
|
|
266
|
+
unavailable there; test those in Cowork.
|
|
267
|
+
6. Start a new chat/task after updating the plugin so the new component catalog
|
|
268
|
+
is loaded.
|
|
269
|
+
|
|
234
270
|
## Verification
|
|
235
271
|
|
|
236
272
|
After changing rule-enforcement behavior, run at minimum:
|
|
@@ -238,6 +274,8 @@ After changing rule-enforcement behavior, run at minimum:
|
|
|
238
274
|
```bash
|
|
239
275
|
bats tests/test_hooks.bats tests/test_search_first_flow.bats
|
|
240
276
|
bats tests/test_install.bats tests/test_codex.bats
|
|
277
|
+
bats tests/test_claude_app.bats tests/test_hooks_per_editor.bats
|
|
278
|
+
python3 scripts/claude_app.py verify
|
|
241
279
|
python3 scripts/validate.py --strict
|
|
242
280
|
```
|
|
243
281
|
|
|
@@ -245,7 +283,7 @@ python3 scripts/validate.py --strict
|
|
|
245
283
|
|
|
246
284
|
```bash
|
|
247
285
|
ai-toolkit plugin list # show available packs
|
|
248
|
-
ai-toolkit plugin install --editor claude <name> # install for Claude global target
|
|
286
|
+
ai-toolkit plugin install --editor claude <name> # install for Claude Code global target
|
|
249
287
|
ai-toolkit plugin install --editor codex <name> # install for Codex global target
|
|
250
288
|
ai-toolkit plugin install --editor all --all # install all 11 packs for both runtimes
|
|
251
289
|
ai-toolkit plugin update --editor all --all # re-apply all installed packs after toolkit updates
|
|
@@ -283,7 +321,7 @@ Follow the `documentation-standards` knowledge skill (`app/skills/documentation-
|
|
|
283
321
|
|
|
284
322
|
**Every addition — skill, hook, MCP template, agent, rule — MUST be verified against all supported editors before merge.**
|
|
285
323
|
|
|
286
|
-
|
|
324
|
+
The ecosystem registry tracks 13 targets: Claude Code, the Claude Chat/Cowork app, and 11 editor integrations. Each has its own config format, file path conventions, and runtime capabilities. A feature that works in Claude Code may silently break in Cursor, Codex, or Copilot if the editor's official spec diverges.
|
|
287
325
|
|
|
288
326
|
### Verification checklist
|
|
289
327
|
|
|
@@ -371,7 +371,11 @@ Stage all release files:
|
|
|
371
371
|
git add package.json manifest.json app/.claude-plugin/plugin.json
|
|
372
372
|
git add package-lock.json
|
|
373
373
|
git add CHANGELOG.md
|
|
374
|
-
git add
|
|
374
|
+
git add llms.txt llms-full.txt
|
|
375
|
+
# NOTE: AGENTS.md, GEMINI.md, and .github/copilot-instructions.md are generated
|
|
376
|
+
# editor configs and are gitignored — do NOT commit them. `prepublishOnly` runs
|
|
377
|
+
# `npm run generate:all`, so the shipped package (which lists AGENTS.md in
|
|
378
|
+
# package.json `files`) gets a fresh copy at publish time.
|
|
375
379
|
git add -p # review and stage any other changes
|
|
376
380
|
```
|
|
377
381
|
|
|
@@ -3,10 +3,10 @@ title: "SOP: Release Verification"
|
|
|
3
3
|
category: procedures
|
|
4
4
|
service: ai-toolkit
|
|
5
5
|
tags: [sop, verification, release, smoke-test, install, update, qa, provenance, sarif]
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.6.0"
|
|
7
7
|
created: "2026-04-08"
|
|
8
|
-
last_updated: "2026-
|
|
9
|
-
description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI,
|
|
8
|
+
last_updated: "2026-07-02"
|
|
9
|
+
description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI, installs, Claude app plugin export, doctor, validation, tests, eject, npm provenance attestation, SARIF audit, and per-skill permissions. v1.6.0 adds the Claude Chat/Cowork plugin validation and replaces the retired Cascade hook surface with Devin hooks."
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# SOP: Release Verification
|
|
@@ -51,10 +51,11 @@ python3 scripts/audit_skills.py --ci # 10. Security audit
|
|
|
51
51
|
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?
|
|
52
52
|
python3 scripts/audit_skills.py --permissions | head -30 # 12. Broad-access skills reviewed?
|
|
53
53
|
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?
|
|
54
|
+
python3 scripts/claude_app.py verify # 14. Claude Chat/Cowork plugin contract valid?
|
|
54
55
|
|
|
55
56
|
# Deep-coverage verification (Phase 9, v3.0.0+)
|
|
56
57
|
META="generate_agents_md.py|generate_llms_txt.py|generate_language_rules_skills.py"
|
|
57
|
-
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" #
|
|
58
|
+
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" # 15. Registry <-> generators drift?
|
|
58
59
|
```
|
|
59
60
|
|
|
60
61
|
---
|
|
@@ -80,7 +81,10 @@ python3 scripts/audit_skills.py --ci
|
|
|
80
81
|
npm test
|
|
81
82
|
|
|
82
83
|
# 5. Stage and commit
|
|
83
|
-
|
|
84
|
+
# AGENTS.md, GEMINI.md, and .github/copilot-instructions.md are generated and
|
|
85
|
+
# gitignored — do NOT commit them (regenerated at prepublishOnly). Only the
|
|
86
|
+
# doc artifacts llms.txt / llms-full.txt are committed.
|
|
87
|
+
git add llms.txt llms-full.txt
|
|
84
88
|
git add -p # stage your other changes
|
|
85
89
|
git commit -m "feat: your change description"
|
|
86
90
|
```
|
|
@@ -122,7 +126,7 @@ ai-toolkit status
|
|
|
122
126
|
- [ ] Agents >= 44
|
|
123
127
|
- [ ] Skills >= 99
|
|
124
128
|
- [ ] Hooks merged into settings.json
|
|
125
|
-
- [ ] "Other AI Tools" section lists documented global targets
|
|
129
|
+
- [ ] "Other AI Tools" section lists documented global targets (with `--editors`): aider, antigravity, augment, cline, codex, copilot, cursor, gemini, opencode, roo, windsurf. Scope varies (v4.12.0+): cursor = `~/.cursor/hooks.json` only, copilot = `~/.copilot/` instructions, antigravity = `~/.gemini/*/skills` pointer; Cursor and Antigravity RULES still install only via `--local` (no mergeable global rules file)
|
|
126
130
|
|
|
127
131
|
**Verify `status`:**
|
|
128
132
|
- [ ] Version matches expected
|
|
@@ -338,12 +342,12 @@ These verify the native-surface generators shipped in v3.0.0 actually emit the r
|
|
|
338
342
|
D=/tmp/aitk-profile-full-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
339
343
|
ai-toolkit install --local --editors cursor,windsurf,gemini,augment,codex \
|
|
340
344
|
--profile full --codex-skills --dry-run 2>&1 \
|
|
341
|
-
| grep -E "\\.cursor/(hooks\\.json|agents)|\\.
|
|
345
|
+
| grep -E "\\.cursor/(hooks\\.json|agents)|\\.devin/hooks\\.v1\\.json|\\.gemini/(settings\\.json|commands)|\\.augment/(agents|commands)|\\.agents/skills"
|
|
342
346
|
```
|
|
343
347
|
|
|
344
348
|
**Verify** — at least the following lines appear:
|
|
345
349
|
- [ ] `.cursor/hooks.json` and `.cursor/agents/`
|
|
346
|
-
- [ ] `.
|
|
350
|
+
- [ ] `.devin/hooks.v1.json`
|
|
347
351
|
- [ ] `.gemini/settings.json` hooks AND `.gemini/commands/`
|
|
348
352
|
- [ ] `.augment/agents/` + `.augment/commands/` + `$HOME/.augment/settings.json`
|
|
349
353
|
- [ ] `.agents/skills/` (Codex native discovery path; refreshed by `--codex-skills`)
|
|
@@ -401,7 +405,7 @@ The bats suite validates JSON shape at generation time. This re-checks that what
|
|
|
401
405
|
```bash
|
|
402
406
|
D=/tmp/aitk-json-${RANDOM} && mkdir -p "$D" && cd "$D" && git init -q
|
|
403
407
|
ai-toolkit install --local --editors cursor,windsurf,gemini,augment --profile full >/dev/null 2>&1
|
|
404
|
-
for f in .cursor/hooks.json .
|
|
408
|
+
for f in .cursor/hooks.json .devin/hooks.v1.json .gemini/settings.json $HOME/.augment/settings.json; do
|
|
405
409
|
[ -f "$f" ] && python3 -c "import json; json.load(open('$f'))" && echo "OK: $f"
|
|
406
410
|
done
|
|
407
411
|
```
|
|
@@ -421,6 +425,18 @@ diff <(echo "$REG") <(echo "$FS") && echo "OK: registry matches filesystem" || e
|
|
|
421
425
|
|
|
422
426
|
**Verify:** prints `OK: registry matches filesystem`. If not, add the missing rows to the registry before tagging the next release.
|
|
423
427
|
|
|
428
|
+
### 9.7 Claude Chat / Cowork plugin validates and exports
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
python3 scripts/claude_app.py verify
|
|
432
|
+
D=/tmp/aitk-claude-app-${RANDOM}
|
|
433
|
+
python3 scripts/claude_app.py export --output "$D.zip" --no-custom-rules
|
|
434
|
+
python3 -c "import zipfile; z=zipfile.ZipFile('$D.zip'); assert '.claude-plugin/plugin.json' in z.namelist(); assert 'claude-app/skills/ai-toolkit-rules/SKILL.md' in z.namelist(); print('OK: Claude app archive')"
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Verify:** the official validator exits 0; the archive contains the manifest,
|
|
438
|
+
app-native rules skill, bundled agents/skills, and plugin-relative Cowork hooks.
|
|
439
|
+
|
|
424
440
|
---
|
|
425
441
|
|
|
426
442
|
## Troubleshooting
|
|
@@ -6,14 +6,14 @@ tags: [architecture, overview, design, structure]
|
|
|
6
6
|
version: "1.4.6"
|
|
7
7
|
created: "2026-03-23"
|
|
8
8
|
last_updated: "2026-06-10"
|
|
9
|
-
description: "Architecture of ai-toolkit: directory layout, global install model, editor-aware MCP install, Codex translation layer, skill tiers, and integration with projects."
|
|
9
|
+
description: "Architecture of ai-toolkit: directory layout, Claude app export, global install model, editor-aware MCP install, Codex translation layer, skill tiers, and integration with projects."
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# AI Toolkit Architecture
|
|
13
13
|
|
|
14
14
|
## Purpose
|
|
15
15
|
|
|
16
|
-
Shared, project-agnostic AI development toolkit for Claude Code
|
|
16
|
+
Shared, project-agnostic AI development toolkit for Claude Code, Claude Chat/Cowork, and compatible assistants such as Cursor, Devin, Copilot, Gemini, Cline, Roo/Zoo Code, Aider, Augment, and Google Antigravity. Provides agents, skills, lifecycle hooks, persona presets, and runtime-specific plugin packaging.
|
|
17
17
|
|
|
18
18
|
## Design Principles
|
|
19
19
|
|
|
@@ -33,6 +33,7 @@ ai-toolkit/
|
|
|
33
33
|
agents/ # Agent definitions (.md + YAML frontmatter)
|
|
34
34
|
skills/ # skills: task, hybrid, knowledge
|
|
35
35
|
rules/ # Source rules synced into Claude/editor rule files
|
|
36
|
+
claude-app/ # Generated app-only rules skill, hooks, instructions
|
|
36
37
|
hooks/ # Hook scripts (copied to ~/.softspark/ai-toolkit/hooks/)
|
|
37
38
|
hooks.json # Hook definitions (merged into ~/.claude/settings.json)
|
|
38
39
|
constitution.md # Immutable safety rules, 7 articles (marker-injected)
|
|
@@ -62,6 +63,7 @@ ai-toolkit/
|
|
|
62
63
|
generate_llms_txt.py # Generates llms.txt
|
|
63
64
|
install_git_hooks.py # Installs fallback pre-commit hook
|
|
64
65
|
plugin.py # Plugin pack management (install, remove, list, status)
|
|
66
|
+
claude_app.py # Claude Chat/Desktop/Cowork plugin export + validation
|
|
65
67
|
benchmark_ecosystem.py # Generates ecosystem benchmark snapshot
|
|
66
68
|
harvest_ecosystem.py # Writes machine-readable ecosystem harvest JSON
|
|
67
69
|
compile_slm.py # Compiles toolkit into minimal SLM system prompt (2K-16K tokens)
|
|
@@ -112,6 +114,8 @@ Machine (global) Project (local)
|
|
|
112
114
|
|
|
113
115
|
Each editor gets directory-based format (`.cursor/rules/*.mdc`, `.devin/rules/*.md` + `.windsurf/rules/*.md` (dual-emit since the Devin Desktop rebrand), `.github/instructions/*.instructions.md` + `.github/prompts/*.prompt.md` + root `AGENTS.md` for Copilot agent instructions, `.clinerules/*.md`, `.roo/rules/*.md`, `.augment/rules/ai-toolkit-*.md`, `.agents/rules/*.md`, `CONVENTIONS.md`). Full-profile installs also emit native skill pointer catalogues for Cursor, Windsurf, and Cline. Codex local install additionally generates `AGENTS.md` (universal coding rules inlined — Codex reads only AGENTS.md, not `.agents/rules/`), `.agents/skills/*`, and `.codex/hooks.json`. Hooks are global-only — not merged into project settings except for editor-native local hook files such as Codex `.codex/hooks.json`. Experimental plugin packs can also layer a global Codex target in `HOME` (`~/AGENTS.md`, `~/.agents/`, `~/.codex/hooks.json`) when installed with `ai-toolkit plugin install --editor codex`.
|
|
114
116
|
|
|
117
|
+
Claude Chat/Desktop/Cowork is deliberately outside `--editors`: the app does not scan filesystem configuration under `~/.claude`. `ai-toolkit claude-app export` creates a self-contained plugin ZIP with skills, agents, Cowork hooks, app-native rules, and bundled hook dependencies. It also emits the compact text that users paste into Cowork global instructions. Updating requires re-export and re-upload because the app owns its plugin store.
|
|
118
|
+
|
|
115
119
|
If a project already has `.mcp.json`, local install mirrors its `mcpServers` entries into `.claude/settings.local.json` plus any selected editors with project-scoped native MCP files (`.cursor/mcp.json`, `.github/mcp.json`).
|
|
116
120
|
|
|
117
121
|
## CLI Commands
|
|
@@ -120,6 +124,7 @@ If a project already has `.mcp.json`, local install mirrors its `mcpServers` ent
|
|
|
120
124
|
|---------|--------|-------------|
|
|
121
125
|
| `install` | `~/.claude/` | First-time: per-file symlinks + JSON merge + marker injection + rules |
|
|
122
126
|
| `install --local` | `./` | Claude Code configs + editors via `--editors` (auto-detect or explicit) |
|
|
127
|
+
| `claude-app export` | output ZIP + Markdown | Uploadable Claude Chat/Cowork plugin and global instructions |
|
|
123
128
|
| `update` | `~/.claude/` | Re-apply after npm update or after add-rule/remove-rule |
|
|
124
129
|
| `update --local` | `./` | Re-apply + refresh project-local configs |
|
|
125
130
|
| `uninstall` | `~/.claude/` | Strips toolkit components (preserves user content) |
|