@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.
Files changed (40) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +33 -15
  3. package/app/.claude-plugin/plugin.json +11 -19
  4. package/app/ARCHITECTURE.md +6 -6
  5. package/app/claude-app/global-instructions.md +10 -0
  6. package/app/claude-app/hooks/hooks.json +284 -0
  7. package/app/claude-app/skills/ai-toolkit-rules/SKILL.md +359 -0
  8. package/app/hooks/config-desync-guard.sh +63 -23
  9. package/app/plugins/README.md +4 -1
  10. package/benchmarks/ecosystem-doctor-snapshot.json +91 -25
  11. package/bin/ai-toolkit.js +21 -3
  12. package/kb/planning/drop-cascade-hooks-after-sunset.md +13 -8
  13. package/kb/procedures/ecosystem-sync-sop.md +5 -5
  14. package/kb/procedures/maintenance-sop.md +42 -4
  15. package/kb/procedures/release-preparation-sop.md +5 -1
  16. package/kb/procedures/release-verification-sop.md +25 -9
  17. package/kb/reference/architecture-overview.md +7 -2
  18. package/kb/reference/claude-ecosystem-expansion-foundations.md +12 -3
  19. package/kb/reference/cli-reference.md +4 -2
  20. package/kb/reference/global-install-model.md +24 -3
  21. package/kb/reference/hooks-catalog.md +2 -3
  22. package/kb/reference/plugin-pack-conventions.md +5 -5
  23. package/kb/reference/skills-catalog.md +2 -0
  24. package/kb/reference/supported-tools-registry.md +30 -13
  25. package/kb/reference/unique-features.md +3 -2
  26. package/llms-full.txt +179 -60
  27. package/manifest.json +8 -8
  28. package/package.json +4 -3
  29. package/scripts/claude_app.py +347 -0
  30. package/scripts/doctor.py +85 -4
  31. package/scripts/ecosystem_tools.json +33 -5
  32. package/scripts/generate_devin_hooks.py +3 -4
  33. package/scripts/generate_windsurf_skills.py +5 -6
  34. package/scripts/install.py +23 -21
  35. package/scripts/install_steps/ai_tools.py +96 -6
  36. package/scripts/install_steps/install_state.py +2 -0
  37. package/scripts/update_projects.py +12 -1
  38. package/scripts/validate.py +34 -2
  39. package/AGENTS.md +0 -655
  40. package/scripts/generate_windsurf_hooks.py +0 -152
@@ -1,5 +1,5 @@
1
1
  {
2
- "last_run": "2026-07-01T22:55:24Z",
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": "04b55a2b2d496b45",
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": "338d55540b385861",
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.198 (Claude Code)"
167
+ "version": "2.1.206 (Claude Code)"
126
168
  },
127
169
  "cline": {
128
- "docs_hash": "80209baf691558e2",
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": "ad6bbf5e29c7155f",
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
- "Automation",
224
+ "Available on",
225
+ "Blog",
183
226
  "Build",
227
+ "Build with Codex",
228
+ "Capabilities",
184
229
  "Categories",
185
- "Codex",
186
- "Codex for Open Source",
230
+ "Chats",
231
+ "Choose the right GPT-5.6 model",
232
+ "Codex Security",
187
233
  "Community",
188
- "Configuration",
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 use cases",
248
+ "Explore",
249
+ "Extend ChatGPT and Codex",
250
+ "Extend and automate",
198
251
  "File Upload",
252
+ "Foundations",
199
253
  "Get started",
200
- "Getting Started",
254
+ "Getting started",
201
255
  "Going live",
202
256
  "Guides",
203
- "Learn",
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
- "Quickstart",
265
+ "Projects",
209
266
  "Realtime and audio",
210
267
  "Recent",
268
+ "Reference",
211
269
  "Releases",
212
270
  "Resources",
213
271
  "Run and scale",
214
- "Search the Codex docs",
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
- "Using Codex"
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.142.0"
310
+ "version": "codex-cli 0.144.1"
244
311
  },
245
312
  "cursor": {
246
- "docs_hash": "080c1289cb353e6c",
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": "a0ff94dabdb6cd8a",
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": "1f9817b3477c576b",
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": "4d2e384b2c2add18",
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": "28dcd5b88aeb84e0",
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": "b457c990c531efc4",
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 through --skip, --refresh-base flags to project updates
582
- const passthrough = args.filter(a => a.startsWith('--skip') || a === '--refresh-base');
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: scheduled
13
+ status: completed
14
14
  created: "2026-06-10"
15
- last_updated: "2026-06-10"
16
- completion: "0%"
15
+ last_updated: "2026-07-10"
16
+ completion: "100%"
17
17
  trigger_date: "2026-07-01"
18
- description: "Scheduled cleanup: remove the deprecated Windsurf Cascade hooks generator (.windsurf/hooks.json) in the first ai-toolkit release after the 2026-07-01 Cascade sunset. The Devin CLI replacement (.devin/hooks.v1.json) shipped in v4.8.0; this plan removes the dead Cascade half once it can no longer run."
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`; confirm no test still references
76
- `generate_windsurf_hooks.py` or `.windsurf/hooks.json`.
77
- - `grep -rn "generate_windsurf_hooks\|windsurf/hooks.json" scripts/ tests/ kb/ README.md`
78
- returns nothing (Art. VI.1 orphan check).
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.0.0"
6
+ version: "1.1.0"
7
7
  created: "2026-04-23"
8
- last_updated: "2026-04-23"
9
- description: "Quarterly (or event-triggered) sync procedure that detects documentation and capability drift in supported tools (Claude Code + 11 editors), analyses our generators and skills for missing features, and walks through the migration + generator-update workflow."
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 12 tools, online)
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: 12 tools with doc URLs, config paths, our generators, capability markers |
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.1.0"
6
+ version: "3.2.0"
7
7
  created: "2026-03-23"
8
- last_updated: "2026-06-10"
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
- This toolkit targets 10 platforms. 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.
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 AGENTS.md llms.txt llms-full.txt
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.4.3"
6
+ version: "1.6.0"
7
7
  created: "2026-04-08"
8
- last_updated: "2026-05-19"
9
- description: "End-to-end smoke test after installing or updating @softspark/ai-toolkit — verifies CLI, install, doctor, validation, tests, eject, npm provenance attestation, SARIF audit, and per-skill permissions. Reflects the v2.8.0 supply-chain standard. v1.3.0 added the single-run npm test discipline; v1.4.0 adds v3.0.0 deep-coverage checks (--profile full, --codex-skills, breaking-change surfaces, idempotence, registry drift, live-JSON parse) and refreshes stale thresholds. v1.4.2 makes the Phase 9.4 idempotence check deterministic by sorting file paths before hashing. v1.4.3 tightens the Phase 8.4 URL pin check so the success-message count includes only entries with a `url:` field, not local `path:` entries, and documents the `sources.json` envelope shape."
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" # 14. Registry <-> generators drift?
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
- git add AGENTS.md llms.txt llms-full.txt
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 only: aider, augment, cline, codex, gemini, opencode, roo, windsurf (Cursor, Copilot, Antigravity via --local for rules)
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)|\\.windsurf/hooks\\.json|\\.gemini/(settings\\.json|commands)|\\.augment/(agents|commands)|\\.agents/skills"
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
- - [ ] `.windsurf/hooks.json`
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 .windsurf/hooks.json .gemini/settings.json $HOME/.augment/settings.json; do
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 (and compatible assistants like Cursor, Windsurf, Copilot, Gemini, Cline, Roo Code, Aider, Augment, and Google Antigravity). Provides specialized agents, skills (slash commands + knowledge), expanded lifecycle hooks, persona presets, and experimental opt-in plugin packs that teams can adopt separately from the default global install.
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) |