@softspark/ai-toolkit 2.11.0 → 3.0.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/AGENTS.md +21 -21
- package/CHANGELOG.md +62 -0
- package/README.md +16 -9
- package/app/.claude-plugin/plugin.json +1 -1
- package/app/agents/meta-architect.md +44 -0
- package/app/skills/agent-creator/SKILL.md +22 -6
- package/app/skills/analyze/SKILL.md +21 -1
- package/app/skills/api-patterns/SKILL.md +27 -0
- package/app/skills/app-builder/SKILL.md +24 -0
- package/app/skills/architecture-audit/SKILL.md +24 -0
- package/app/skills/architecture-decision/SKILL.md +24 -0
- package/app/skills/biz-scan/SKILL.md +24 -0
- package/app/skills/brand-voice/SKILL.md +36 -0
- package/app/skills/briefing/SKILL.md +41 -1
- package/app/skills/build/SKILL.md +24 -1
- package/app/skills/chaos/SKILL.md +22 -1
- package/app/skills/ci/SKILL.md +22 -1
- package/app/skills/ci-cd-patterns/SKILL.md +25 -0
- package/app/skills/command-creator/SKILL.md +31 -2
- package/app/skills/content-moderation-patterns/SKILL.md +25 -0
- package/app/skills/database-patterns/SKILL.md +25 -0
- package/app/skills/debug/SKILL.md +23 -1
- package/app/skills/design-engineering/SKILL.md +25 -0
- package/app/skills/docker-devops/SKILL.md +26 -0
- package/app/skills/ecommerce-patterns/SKILL.md +26 -0
- package/app/skills/evaluate/SKILL.md +22 -1
- package/app/skills/evolve/SKILL.md +25 -0
- package/app/skills/explain/SKILL.md +26 -1
- package/app/skills/explore/SKILL.md +25 -0
- package/app/skills/fix/SKILL.md +26 -1
- package/app/skills/git-mastery/SKILL.md +26 -0
- package/app/skills/grill-me/SKILL.md +22 -7
- package/app/skills/health/SKILL.md +22 -1
- package/app/skills/hipaa-validate/SKILL.md +25 -8
- package/app/skills/hook-creator/SKILL.md +107 -14
- package/app/skills/index/SKILL.md +22 -1
- package/app/skills/instinct-review/SKILL.md +25 -1
- package/app/skills/introspect/SKILL.md +26 -1
- package/app/skills/lint/SKILL.md +27 -1
- package/app/skills/mcp-builder/SKILL.md +27 -0
- package/app/skills/mem-search/SKILL.md +40 -0
- package/app/skills/migrate/SKILL.md +27 -1
- package/app/skills/migration-patterns/SKILL.md +26 -0
- package/app/skills/night-watch/SKILL.md +22 -1
- package/app/skills/observability-patterns/SKILL.md +26 -0
- package/app/skills/onboard/SKILL.md +22 -1
- package/app/skills/panic/SKILL.md +21 -1
- package/app/skills/performance-profiling/SKILL.md +34 -0
- package/app/skills/persona/SKILL.md +21 -4
- package/app/skills/plan/SKILL.md +26 -0
- package/app/skills/plan-writing/SKILL.md +26 -0
- package/app/skills/plugin-creator/SKILL.md +23 -6
- package/app/skills/pr/SKILL.md +24 -1
- package/app/skills/prd-to-issues/SKILL.md +22 -6
- package/app/skills/prd-to-plan/SKILL.md +22 -4
- package/app/skills/predict/SKILL.md +25 -0
- package/app/skills/qa-session/SKILL.md +23 -7
- package/app/skills/rag-patterns/SKILL.md +26 -0
- package/app/skills/refactor/SKILL.md +26 -0
- package/app/skills/refactor-plan/SKILL.md +23 -6
- package/app/skills/rollback/SKILL.md +27 -1
- package/app/skills/security-patterns/SKILL.md +27 -0
- package/app/skills/skill-audit/SKILL.md +22 -5
- package/app/skills/skill-creator/SKILL.md +58 -13
- package/app/skills/swift-patterns/SKILL.md +27 -107
- package/app/skills/swift-patterns/reference/frameworks.md +111 -0
- package/app/skills/test/SKILL.md +23 -1
- package/app/skills/testing-patterns/SKILL.md +26 -0
- package/app/skills/triage-issue/SKILL.md +22 -4
- package/app/skills/ubiquitous-language/SKILL.md +23 -8
- package/benchmarks/ecosystem-doctor-snapshot.json +395 -0
- package/kb/history/completed/deep-coverage-v3-20260423.md +160 -0
- package/kb/history/completed/ecosystem-deep-sweep-20260423.md +273 -0
- package/kb/procedures/ecosystem-sync-sop.md +255 -0
- package/kb/procedures/maintenance-sop.md +13 -2
- package/kb/procedures/release-preparation-sop.md +91 -12
- package/kb/procedures/release-verification-sop.md +24 -6
- package/kb/reference/global-install-model.md +15 -2
- package/kb/reference/supported-tools-registry.md +229 -0
- package/llms-full.txt +1105 -43
- package/llms.txt +4 -0
- package/manifest.json +1 -1
- package/package.json +4 -1
- package/scripts/ecosystem_doctor.py +348 -0
- package/scripts/ecosystem_tools.json +500 -0
- package/scripts/evaluate_skills.py +84 -0
- package/scripts/generate_aider_conf.py +26 -1
- package/scripts/generate_antigravity.py +77 -8
- package/scripts/generate_augment_agents.py +161 -0
- package/scripts/generate_augment_commands.py +160 -0
- package/scripts/generate_augment_hooks.py +162 -0
- package/scripts/generate_augment_skills.py +98 -0
- package/scripts/generate_cline_rules.py +96 -9
- package/scripts/generate_codex_hooks.py +13 -2
- package/scripts/generate_codex_skills.py +195 -0
- package/scripts/generate_copilot.py +296 -18
- package/scripts/generate_cursor_agents.py +144 -0
- package/scripts/generate_cursor_hooks.py +155 -0
- package/scripts/generate_cursor_mdc.py +20 -8
- package/scripts/generate_gemini_commands.py +158 -0
- package/scripts/generate_gemini_hooks.py +159 -0
- package/scripts/generate_gemini_skills.py +98 -0
- package/scripts/generate_roo_modes.py +42 -1
- package/scripts/generate_windsurf_hooks.py +143 -0
- package/scripts/generate_windsurf_rules.py +162 -10
- package/scripts/install.py +11 -2
- package/scripts/install_steps/ai_tools.py +120 -5
- package/scripts/validate.py +20 -3
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"description": "Authoritative registry of tools ai-toolkit integrates with. Consumed by scripts/ecosystem_doctor.py to detect upstream doc/version drift.",
|
|
4
|
+
"last_updated": "2026-04-23",
|
|
5
|
+
"tools": [
|
|
6
|
+
{
|
|
7
|
+
"id": "claude-code",
|
|
8
|
+
"display_name": "Claude Code",
|
|
9
|
+
"kind": "primary",
|
|
10
|
+
"urls": {
|
|
11
|
+
"docs": "https://platform.claude.com/docs/en/claude-code",
|
|
12
|
+
"release_notes": "https://github.com/anthropics/claude-code/releases",
|
|
13
|
+
"changelog": null
|
|
14
|
+
},
|
|
15
|
+
"config_paths": [
|
|
16
|
+
"~/.claude/settings.json",
|
|
17
|
+
".claude/settings.local.json",
|
|
18
|
+
"CLAUDE.md",
|
|
19
|
+
".claude/agents/*.md",
|
|
20
|
+
".claude/skills/*/SKILL.md",
|
|
21
|
+
"~/.claude/themes/*.json"
|
|
22
|
+
],
|
|
23
|
+
"our_generators": [],
|
|
24
|
+
"capability_markers": [
|
|
25
|
+
"PreToolUse",
|
|
26
|
+
"PostToolUse",
|
|
27
|
+
"SessionStart",
|
|
28
|
+
"SessionEnd",
|
|
29
|
+
"SubagentStart",
|
|
30
|
+
"SubagentStop",
|
|
31
|
+
"UserPromptSubmit",
|
|
32
|
+
"Notification",
|
|
33
|
+
"Stop",
|
|
34
|
+
"StopFailure",
|
|
35
|
+
"PreCompact",
|
|
36
|
+
"PostCompact",
|
|
37
|
+
"PermissionRequest",
|
|
38
|
+
"PermissionDenied",
|
|
39
|
+
"Elicitation",
|
|
40
|
+
"ElicitationResult",
|
|
41
|
+
"TaskCreated",
|
|
42
|
+
"TaskCompleted",
|
|
43
|
+
"TeammateIdle",
|
|
44
|
+
"WorktreeCreate",
|
|
45
|
+
"WorktreeRemove",
|
|
46
|
+
"CwdChanged",
|
|
47
|
+
"FileChanged",
|
|
48
|
+
"ConfigChange",
|
|
49
|
+
"Setup",
|
|
50
|
+
"InstructionsLoaded",
|
|
51
|
+
"slash command",
|
|
52
|
+
"MCP server",
|
|
53
|
+
"sub-agent",
|
|
54
|
+
"output style",
|
|
55
|
+
"SKILL.md",
|
|
56
|
+
"hook handler: command",
|
|
57
|
+
"hook handler: prompt",
|
|
58
|
+
"hook handler: agent",
|
|
59
|
+
"hook handler: mcp_tool"
|
|
60
|
+
],
|
|
61
|
+
"version_probe": {
|
|
62
|
+
"kind": "command",
|
|
63
|
+
"command": "claude --version"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "cursor",
|
|
68
|
+
"display_name": "Cursor",
|
|
69
|
+
"kind": "editor",
|
|
70
|
+
"urls": {
|
|
71
|
+
"docs": "https://cursor.com/docs",
|
|
72
|
+
"release_notes": "https://cursor.com/changelog",
|
|
73
|
+
"changelog": "https://cursor.com/changelog"
|
|
74
|
+
},
|
|
75
|
+
"config_paths": [
|
|
76
|
+
".cursorrules",
|
|
77
|
+
".cursor/rules/*.mdc",
|
|
78
|
+
".cursor/rules/*.md",
|
|
79
|
+
"AGENTS.md",
|
|
80
|
+
".cursor/mcp.json",
|
|
81
|
+
"~/.cursor/mcp.json",
|
|
82
|
+
".cursor/skills/*/SKILL.md",
|
|
83
|
+
".cursor/agents/*.md",
|
|
84
|
+
".cursor/hooks.json",
|
|
85
|
+
"~/.cursor/hooks.json"
|
|
86
|
+
],
|
|
87
|
+
"our_generators": [
|
|
88
|
+
"scripts/generate_cursor_rules.py",
|
|
89
|
+
"scripts/generate_cursor_mdc.py"
|
|
90
|
+
],
|
|
91
|
+
"capability_markers": [
|
|
92
|
+
"cursorrules",
|
|
93
|
+
".cursor/rules",
|
|
94
|
+
"AGENTS.md",
|
|
95
|
+
"mcp.json",
|
|
96
|
+
"Composer",
|
|
97
|
+
"Agent Mode",
|
|
98
|
+
"hooks.json",
|
|
99
|
+
"subagents",
|
|
100
|
+
"skills",
|
|
101
|
+
"plugins"
|
|
102
|
+
],
|
|
103
|
+
"version_probe": null
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "windsurf",
|
|
107
|
+
"display_name": "Windsurf",
|
|
108
|
+
"kind": "editor",
|
|
109
|
+
"urls": {
|
|
110
|
+
"docs": "https://docs.windsurf.com",
|
|
111
|
+
"release_notes": "https://windsurf.com/changelog",
|
|
112
|
+
"changelog": "https://windsurf.com/changelog"
|
|
113
|
+
},
|
|
114
|
+
"config_paths": [
|
|
115
|
+
".windsurfrules",
|
|
116
|
+
".windsurf/rules/*.md",
|
|
117
|
+
".windsurf/workflows/*.md",
|
|
118
|
+
"AGENTS.md",
|
|
119
|
+
"~/.codeium/windsurf/memories/global_rules.md",
|
|
120
|
+
"~/.codeium/windsurf/mcp_config.json",
|
|
121
|
+
"~/.codeium/windsurf/global_workflows/*.md"
|
|
122
|
+
],
|
|
123
|
+
"our_generators": [
|
|
124
|
+
"scripts/generate_windsurf.py",
|
|
125
|
+
"scripts/generate_windsurf_rules.py"
|
|
126
|
+
],
|
|
127
|
+
"capability_markers": [
|
|
128
|
+
"Cascade",
|
|
129
|
+
"windsurfrules",
|
|
130
|
+
"AGENTS.md",
|
|
131
|
+
"always_on",
|
|
132
|
+
"glob",
|
|
133
|
+
"model_decision",
|
|
134
|
+
"workflows",
|
|
135
|
+
"MCP",
|
|
136
|
+
"memories",
|
|
137
|
+
"hooks"
|
|
138
|
+
],
|
|
139
|
+
"version_probe": null
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "github-copilot",
|
|
143
|
+
"display_name": "GitHub Copilot",
|
|
144
|
+
"kind": "editor",
|
|
145
|
+
"urls": {
|
|
146
|
+
"docs": "https://docs.github.com/en/copilot",
|
|
147
|
+
"release_notes": "https://github.blog/changelog/label/copilot/",
|
|
148
|
+
"changelog": null
|
|
149
|
+
},
|
|
150
|
+
"config_paths": [
|
|
151
|
+
".github/copilot-instructions.md",
|
|
152
|
+
".github/instructions/*.instructions.md",
|
|
153
|
+
".github/prompts/*.prompt.md",
|
|
154
|
+
"AGENTS.md"
|
|
155
|
+
],
|
|
156
|
+
"our_generators": [
|
|
157
|
+
"scripts/generate_copilot.py"
|
|
158
|
+
],
|
|
159
|
+
"capability_markers": [
|
|
160
|
+
"copilot-instructions.md",
|
|
161
|
+
"Copilot Chat",
|
|
162
|
+
"Copilot Workspace",
|
|
163
|
+
"Copilot cloud agent",
|
|
164
|
+
"applyTo",
|
|
165
|
+
"custom agents",
|
|
166
|
+
"prompt files",
|
|
167
|
+
"instructions.md",
|
|
168
|
+
"MCP"
|
|
169
|
+
],
|
|
170
|
+
"version_probe": null
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
"id": "gemini-cli",
|
|
174
|
+
"display_name": "Gemini CLI",
|
|
175
|
+
"kind": "editor",
|
|
176
|
+
"urls": {
|
|
177
|
+
"docs": "https://github.com/google-gemini/gemini-cli/tree/main/docs",
|
|
178
|
+
"release_notes": "https://github.com/google-gemini/gemini-cli/releases",
|
|
179
|
+
"changelog": null
|
|
180
|
+
},
|
|
181
|
+
"config_paths": [
|
|
182
|
+
"GEMINI.md",
|
|
183
|
+
".gemini/settings.json",
|
|
184
|
+
"~/.gemini/settings.json",
|
|
185
|
+
".gemini/commands/*.toml",
|
|
186
|
+
".gemini/skills/*/SKILL.md",
|
|
187
|
+
".agents/skills/*/SKILL.md",
|
|
188
|
+
"~/.gemini/skills/*/SKILL.md",
|
|
189
|
+
".gemini/extensions/gemini-extension.json"
|
|
190
|
+
],
|
|
191
|
+
"our_generators": [
|
|
192
|
+
"scripts/generate_gemini.py"
|
|
193
|
+
],
|
|
194
|
+
"capability_markers": [
|
|
195
|
+
"GEMINI.md",
|
|
196
|
+
"mcpServers",
|
|
197
|
+
"tools",
|
|
198
|
+
"settings.json",
|
|
199
|
+
"BeforeTool",
|
|
200
|
+
"AfterTool",
|
|
201
|
+
"BeforeAgent",
|
|
202
|
+
"AfterAgent",
|
|
203
|
+
"BeforeModel",
|
|
204
|
+
"SessionStart",
|
|
205
|
+
"SessionEnd",
|
|
206
|
+
"Stop",
|
|
207
|
+
"SKILL.md",
|
|
208
|
+
"activate_skill",
|
|
209
|
+
"custom commands",
|
|
210
|
+
"gemini-extension.json"
|
|
211
|
+
],
|
|
212
|
+
"version_probe": {
|
|
213
|
+
"kind": "command",
|
|
214
|
+
"command": "gemini --version"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"id": "cline",
|
|
219
|
+
"display_name": "Cline",
|
|
220
|
+
"kind": "editor",
|
|
221
|
+
"urls": {
|
|
222
|
+
"docs": "https://docs.cline.bot",
|
|
223
|
+
"release_notes": "https://github.com/cline/cline/releases",
|
|
224
|
+
"changelog": null
|
|
225
|
+
},
|
|
226
|
+
"config_paths": [
|
|
227
|
+
".clinerules/*.md",
|
|
228
|
+
".clinerules/workflows/*.md",
|
|
229
|
+
".clinerules/hooks/",
|
|
230
|
+
".cline/skills/",
|
|
231
|
+
"~/.cline/data/settings/cline_mcp_settings.json",
|
|
232
|
+
"~/Documents/Cline/Rules/"
|
|
233
|
+
],
|
|
234
|
+
"our_generators": [
|
|
235
|
+
"scripts/generate_cline.py",
|
|
236
|
+
"scripts/generate_cline_rules.py"
|
|
237
|
+
],
|
|
238
|
+
"capability_markers": [
|
|
239
|
+
"clinerules",
|
|
240
|
+
"Plan Mode",
|
|
241
|
+
"Act Mode",
|
|
242
|
+
"MCP",
|
|
243
|
+
"custom modes",
|
|
244
|
+
"workflows",
|
|
245
|
+
"hooks",
|
|
246
|
+
"skills",
|
|
247
|
+
"subagents",
|
|
248
|
+
"conditional rules"
|
|
249
|
+
],
|
|
250
|
+
"version_probe": null
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"id": "roo-code",
|
|
254
|
+
"display_name": "Roo Code",
|
|
255
|
+
"kind": "editor",
|
|
256
|
+
"urls": {
|
|
257
|
+
"docs": "https://docs.roocode.com",
|
|
258
|
+
"release_notes": "https://github.com/RooCodeInc/Roo-Code/releases",
|
|
259
|
+
"changelog": null
|
|
260
|
+
},
|
|
261
|
+
"config_paths": [
|
|
262
|
+
".roomodes",
|
|
263
|
+
".roo/rules/*.md",
|
|
264
|
+
".roo/rules-{slug}/*.md",
|
|
265
|
+
".roo/mcp.json",
|
|
266
|
+
"~/.roo/rules/",
|
|
267
|
+
"~/.roo/settings/custom_modes.yaml",
|
|
268
|
+
"~/.roo/settings/mcp_settings.json"
|
|
269
|
+
],
|
|
270
|
+
"our_generators": [
|
|
271
|
+
"scripts/generate_roo_modes.py",
|
|
272
|
+
"scripts/generate_roo_rules.py"
|
|
273
|
+
],
|
|
274
|
+
"capability_markers": [
|
|
275
|
+
"roomodes",
|
|
276
|
+
"custom modes",
|
|
277
|
+
"Code Actions",
|
|
278
|
+
"MCP",
|
|
279
|
+
"Orchestrator mode",
|
|
280
|
+
"whenToUse",
|
|
281
|
+
"description",
|
|
282
|
+
"roleDefinition",
|
|
283
|
+
"groups"
|
|
284
|
+
],
|
|
285
|
+
"version_probe": null
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"id": "aider",
|
|
289
|
+
"display_name": "Aider",
|
|
290
|
+
"kind": "editor",
|
|
291
|
+
"urls": {
|
|
292
|
+
"docs": "https://aider.chat/docs",
|
|
293
|
+
"release_notes": "https://aider.chat/HISTORY.html",
|
|
294
|
+
"changelog": "https://aider.chat/HISTORY.html"
|
|
295
|
+
},
|
|
296
|
+
"config_paths": [
|
|
297
|
+
".aider.conf.yml",
|
|
298
|
+
"CONVENTIONS.md",
|
|
299
|
+
"~/.aider.conf.yml"
|
|
300
|
+
],
|
|
301
|
+
"our_generators": [
|
|
302
|
+
"scripts/generate_aider_conf.py",
|
|
303
|
+
"scripts/generate_conventions.py"
|
|
304
|
+
],
|
|
305
|
+
"capability_markers": [
|
|
306
|
+
".aider.conf.yml",
|
|
307
|
+
"CONVENTIONS.md",
|
|
308
|
+
"architect",
|
|
309
|
+
"auto-accept-architect",
|
|
310
|
+
"read",
|
|
311
|
+
"lint-cmd",
|
|
312
|
+
"test-cmd",
|
|
313
|
+
"commit-prompt",
|
|
314
|
+
"attribute-co-authored-by",
|
|
315
|
+
"chat-language",
|
|
316
|
+
"commit-language",
|
|
317
|
+
"watch-files",
|
|
318
|
+
"auto-commits"
|
|
319
|
+
],
|
|
320
|
+
"version_probe": {
|
|
321
|
+
"kind": "command",
|
|
322
|
+
"command": "aider --version"
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"id": "augment",
|
|
327
|
+
"display_name": "Augment",
|
|
328
|
+
"kind": "editor",
|
|
329
|
+
"urls": {
|
|
330
|
+
"docs": "https://docs.augmentcode.com",
|
|
331
|
+
"release_notes": "https://www.augmentcode.com/changelog",
|
|
332
|
+
"changelog": null
|
|
333
|
+
},
|
|
334
|
+
"config_paths": [
|
|
335
|
+
".augment/rules/*.md",
|
|
336
|
+
".augment/guidelines.md",
|
|
337
|
+
".augment/agents/*.md",
|
|
338
|
+
".augment/commands/*.md",
|
|
339
|
+
".augment/skills/*/SKILL.md",
|
|
340
|
+
"~/.augment/rules/*.md",
|
|
341
|
+
"~/.augment/agents/*.md",
|
|
342
|
+
"~/.augment/commands/*.md",
|
|
343
|
+
"~/.augment/settings.json",
|
|
344
|
+
"/etc/augment/settings.json"
|
|
345
|
+
],
|
|
346
|
+
"our_generators": [
|
|
347
|
+
"scripts/generate_augment.py",
|
|
348
|
+
"scripts/generate_augment_rules.py"
|
|
349
|
+
],
|
|
350
|
+
"capability_markers": [
|
|
351
|
+
".augment",
|
|
352
|
+
"Agent mode",
|
|
353
|
+
"Next Edit",
|
|
354
|
+
"MCP",
|
|
355
|
+
"context engine",
|
|
356
|
+
"Auggie CLI",
|
|
357
|
+
"always_apply",
|
|
358
|
+
"agent_requested",
|
|
359
|
+
"subagents",
|
|
360
|
+
"custom commands",
|
|
361
|
+
"SKILL.md",
|
|
362
|
+
"PreToolUse",
|
|
363
|
+
"PostToolUse",
|
|
364
|
+
"SessionStart",
|
|
365
|
+
"SessionEnd",
|
|
366
|
+
"Stop",
|
|
367
|
+
"ACP Mode"
|
|
368
|
+
],
|
|
369
|
+
"version_probe": null
|
|
370
|
+
},
|
|
371
|
+
{
|
|
372
|
+
"id": "google-antigravity",
|
|
373
|
+
"display_name": "Google Antigravity",
|
|
374
|
+
"kind": "editor",
|
|
375
|
+
"urls": {
|
|
376
|
+
"docs": "https://antigravity.google/docs",
|
|
377
|
+
"release_notes": "https://antigravity.google/changelog",
|
|
378
|
+
"changelog": null
|
|
379
|
+
},
|
|
380
|
+
"config_paths": [
|
|
381
|
+
".agent/rules/*.md",
|
|
382
|
+
".agent/workflows/*.md",
|
|
383
|
+
".agent/skills/*/SKILL.md",
|
|
384
|
+
"AGENTS.md",
|
|
385
|
+
"GEMINI.md"
|
|
386
|
+
],
|
|
387
|
+
"our_generators": [
|
|
388
|
+
"scripts/generate_antigravity.py"
|
|
389
|
+
],
|
|
390
|
+
"capability_markers": [
|
|
391
|
+
"Antigravity",
|
|
392
|
+
"agent manager",
|
|
393
|
+
"artifacts",
|
|
394
|
+
"MCP",
|
|
395
|
+
"workflows",
|
|
396
|
+
"rules",
|
|
397
|
+
"skills",
|
|
398
|
+
"AGENTS.md",
|
|
399
|
+
"GEMINI.md",
|
|
400
|
+
"agent permissions"
|
|
401
|
+
],
|
|
402
|
+
"version_probe": null
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"id": "codex-cli",
|
|
406
|
+
"display_name": "Codex CLI",
|
|
407
|
+
"kind": "editor",
|
|
408
|
+
"urls": {
|
|
409
|
+
"docs": "https://github.com/openai/codex",
|
|
410
|
+
"release_notes": "https://github.com/openai/codex/releases",
|
|
411
|
+
"changelog": null
|
|
412
|
+
},
|
|
413
|
+
"config_paths": [
|
|
414
|
+
"AGENTS.md",
|
|
415
|
+
".agents/rules/*.md",
|
|
416
|
+
".codex/hooks.json",
|
|
417
|
+
".codex/skills/*/SKILL.md",
|
|
418
|
+
"~/.codex/config.toml"
|
|
419
|
+
],
|
|
420
|
+
"our_generators": [
|
|
421
|
+
"scripts/generate_codex.py",
|
|
422
|
+
"scripts/generate_codex_rules.py",
|
|
423
|
+
"scripts/generate_codex_hooks.py"
|
|
424
|
+
],
|
|
425
|
+
"capability_markers": [
|
|
426
|
+
"AGENTS.md",
|
|
427
|
+
"config.toml",
|
|
428
|
+
"mcp_servers",
|
|
429
|
+
"hooks",
|
|
430
|
+
"sandbox",
|
|
431
|
+
"hook event: PreToolUse",
|
|
432
|
+
"hook event: PostToolUse",
|
|
433
|
+
"hook event: SessionStart",
|
|
434
|
+
"hook event: UserPromptSubmit",
|
|
435
|
+
"hook event: Stop",
|
|
436
|
+
"hook event: PermissionRequest",
|
|
437
|
+
"hook handler: command",
|
|
438
|
+
"hook handler: prompt",
|
|
439
|
+
"hook handler: agent",
|
|
440
|
+
".codex/skills"
|
|
441
|
+
],
|
|
442
|
+
"version_probe": {
|
|
443
|
+
"kind": "command",
|
|
444
|
+
"command": "codex --version"
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"id": "opencode",
|
|
449
|
+
"display_name": "opencode",
|
|
450
|
+
"kind": "editor",
|
|
451
|
+
"urls": {
|
|
452
|
+
"docs": "https://opencode.ai/docs",
|
|
453
|
+
"release_notes": "https://github.com/sst/opencode/releases",
|
|
454
|
+
"changelog": null
|
|
455
|
+
},
|
|
456
|
+
"config_paths": [
|
|
457
|
+
"opencode.json",
|
|
458
|
+
".opencode/agents/*.md",
|
|
459
|
+
".opencode/commands/*.md",
|
|
460
|
+
".opencode/plugins/*",
|
|
461
|
+
".opencode/skills/*/SKILL.md",
|
|
462
|
+
"AGENTS.md",
|
|
463
|
+
".claude/skills/*/SKILL.md"
|
|
464
|
+
],
|
|
465
|
+
"our_generators": [
|
|
466
|
+
"scripts/generate_opencode.py",
|
|
467
|
+
"scripts/generate_opencode_agents.py",
|
|
468
|
+
"scripts/generate_opencode_commands.py",
|
|
469
|
+
"scripts/generate_opencode_json.py",
|
|
470
|
+
"scripts/generate_opencode_plugin.py"
|
|
471
|
+
],
|
|
472
|
+
"capability_markers": [
|
|
473
|
+
"opencode.json",
|
|
474
|
+
"agents",
|
|
475
|
+
"commands",
|
|
476
|
+
"plugins",
|
|
477
|
+
"MCP",
|
|
478
|
+
"rules",
|
|
479
|
+
"AGENTS.md",
|
|
480
|
+
"skills (native .opencode/skills)",
|
|
481
|
+
"skills (via .claude/skills fallback)",
|
|
482
|
+
"permission.skill",
|
|
483
|
+
"subagent mode",
|
|
484
|
+
"primary mode",
|
|
485
|
+
"plugin event: session.created",
|
|
486
|
+
"plugin event: session.compacted",
|
|
487
|
+
"plugin event: session.deleted",
|
|
488
|
+
"plugin event: tool.execute.before",
|
|
489
|
+
"plugin event: tool.execute.after",
|
|
490
|
+
"plugin event: permission.asked",
|
|
491
|
+
"plugin event: command.executed",
|
|
492
|
+
"plugin event: message.updated"
|
|
493
|
+
],
|
|
494
|
+
"version_probe": {
|
|
495
|
+
"kind": "command",
|
|
496
|
+
"command": "opencode --version"
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
]
|
|
500
|
+
}
|
|
@@ -212,6 +212,80 @@ def _collect_quality_metrics() -> tuple[int, int, int, int, int, int]:
|
|
|
212
212
|
return ref_count, tmpl_count, inject_count, over500, depends_count, orphan_deps
|
|
213
213
|
|
|
214
214
|
|
|
215
|
+
def _meta_architect_audit() -> tuple[dict[int, int], list[tuple[str, int, list[str]]]]:
|
|
216
|
+
"""Score each skill against the 5 meta-architect binary criteria.
|
|
217
|
+
|
|
218
|
+
Criteria (all binary yes=pass):
|
|
219
|
+
description : frontmatter description is >= 50 chars and not generic
|
|
220
|
+
example : SKILL.md contains at least one fenced code block or an
|
|
221
|
+
'## Example' heading
|
|
222
|
+
constraint : SKILL.md uses at least one of MUST / NEVER / CRITICAL /
|
|
223
|
+
MANDATORY / REQUIRED / DO NOT as an uppercase marker
|
|
224
|
+
edge_case : SKILL.md mentions edge cases, failure modes, fallbacks,
|
|
225
|
+
or when NOT to use the skill
|
|
226
|
+
length : SKILL.md is under 500 lines
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
(score_distribution, weak_skills) where
|
|
230
|
+
score_distribution maps score -> count of skills,
|
|
231
|
+
weak_skills is a list of (name, score, failed_criteria) for score <= 3.
|
|
232
|
+
"""
|
|
233
|
+
score_dist: dict[int, int] = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0}
|
|
234
|
+
weak: list[tuple[str, int, list[str]]] = []
|
|
235
|
+
|
|
236
|
+
desc_generic = {"tbd", "todo", "fixme", "placeholder"}
|
|
237
|
+
constraint_re = re.compile(r"\b(MUST|NEVER|CRITICAL|MANDATORY|REQUIRED|DO NOT)\b")
|
|
238
|
+
edge_re = re.compile(
|
|
239
|
+
r"(?i)\b(edge case|edge-case|corner case|failure mode|when not to|"
|
|
240
|
+
r"do not use for|fallback|error handling|limitations?)\b"
|
|
241
|
+
)
|
|
242
|
+
example_heading_re = re.compile(
|
|
243
|
+
r"(?im)^##+\s*(example|examples|usage|worked example)"
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
for sf in sorted(skills_dir.glob("*/SKILL.md")):
|
|
247
|
+
text = sf.read_text(encoding="utf-8")
|
|
248
|
+
fm = frontmatter_block(sf)
|
|
249
|
+
desc = _fm_value(fm, "description")
|
|
250
|
+
line_count = text.count("\n") + (1 if text and not text.endswith("\n") else 0)
|
|
251
|
+
|
|
252
|
+
passed: list[str] = []
|
|
253
|
+
failed: list[str] = []
|
|
254
|
+
|
|
255
|
+
if len(desc) >= 50 and not any(g in desc.lower() for g in desc_generic):
|
|
256
|
+
passed.append("description")
|
|
257
|
+
else:
|
|
258
|
+
failed.append("description")
|
|
259
|
+
|
|
260
|
+
if re.search(r"^```", text, re.M) or example_heading_re.search(text):
|
|
261
|
+
passed.append("example")
|
|
262
|
+
else:
|
|
263
|
+
failed.append("example")
|
|
264
|
+
|
|
265
|
+
if constraint_re.search(text):
|
|
266
|
+
passed.append("constraint")
|
|
267
|
+
else:
|
|
268
|
+
failed.append("constraint")
|
|
269
|
+
|
|
270
|
+
if edge_re.search(text):
|
|
271
|
+
passed.append("edge_case")
|
|
272
|
+
else:
|
|
273
|
+
failed.append("edge_case")
|
|
274
|
+
|
|
275
|
+
if line_count < 500:
|
|
276
|
+
passed.append("length")
|
|
277
|
+
else:
|
|
278
|
+
failed.append("length")
|
|
279
|
+
|
|
280
|
+
score = len(passed)
|
|
281
|
+
score_dist[score] = score_dist.get(score, 0) + 1
|
|
282
|
+
if score <= 3:
|
|
283
|
+
weak.append((sf.parent.name, score, failed))
|
|
284
|
+
|
|
285
|
+
weak.sort(key=lambda r: (r[1], r[0]))
|
|
286
|
+
return score_dist, weak
|
|
287
|
+
|
|
288
|
+
|
|
215
289
|
def main() -> None:
|
|
216
290
|
"""Run evaluation across all skills and print report."""
|
|
217
291
|
print("AI Toolkit Skill Evaluation")
|
|
@@ -249,6 +323,16 @@ def main() -> None:
|
|
|
249
323
|
print(f" Orphan dependencies: {orphan_deps}")
|
|
250
324
|
print()
|
|
251
325
|
|
|
326
|
+
score_dist, weak = _meta_architect_audit()
|
|
327
|
+
print("Meta-Architect Audit (advisory, non-failing):")
|
|
328
|
+
print(f" Score distribution (of 5): {dict(sorted(score_dist.items()))}")
|
|
329
|
+
print(f" Skills scoring <= 3: {len(weak)}")
|
|
330
|
+
if weak:
|
|
331
|
+
print(" Bottom 10 (score, name, failed criteria):")
|
|
332
|
+
for name, score, failed in weak[:10]:
|
|
333
|
+
print(f" {score}/5 {name:<28} {','.join(failed)}")
|
|
334
|
+
print()
|
|
335
|
+
|
|
252
336
|
if fail_count > 0:
|
|
253
337
|
print("EVALUATION: ISSUES FOUND")
|
|
254
338
|
sys.exit(1)
|
|
@@ -17,9 +17,13 @@ def main() -> None:
|
|
|
17
17
|
default_model = DEFAULT_CLAUDE_MODELS["sonnet"]
|
|
18
18
|
print("# Aider configuration generated by ai-toolkit")
|
|
19
19
|
print("# Regenerate using: ai-toolkit install --local")
|
|
20
|
+
print("# Aider docs: https://aider.chat/docs/config/aider_conf.html")
|
|
20
21
|
print()
|
|
21
22
|
print("# Use the architect mode for complex tasks, aligned with our 2-phase workflow")
|
|
22
23
|
print("architect: true")
|
|
24
|
+
print("# Auto-accept architect proposals (default: true in aider >=0.82). Set to false")
|
|
25
|
+
print("# if you want to approve every architect-mode edit manually.")
|
|
26
|
+
print("auto-accept-architect: true")
|
|
23
27
|
print()
|
|
24
28
|
print("# Read project rules (loaded as read-only context)")
|
|
25
29
|
print("read:")
|
|
@@ -36,16 +40,37 @@ def main() -> None:
|
|
|
36
40
|
print(' - "php: ./vendor/bin/phpstan analyse"')
|
|
37
41
|
print(' - "go: go vet"')
|
|
38
42
|
print()
|
|
43
|
+
print("# Test commands (uncomment and customize per project). aider >=0.80 supports a")
|
|
44
|
+
print("# single `test-cmd`; run with `--test` or enable `auto-test: true` to run after edits.")
|
|
45
|
+
print("# test-cmd: pytest -q")
|
|
46
|
+
print("# auto-test: false")
|
|
47
|
+
print()
|
|
39
48
|
print("# Model configuration")
|
|
40
49
|
print(f"model: {default_model}")
|
|
41
50
|
print(f"editor-model: {default_model}")
|
|
42
51
|
print()
|
|
43
52
|
print("# Auto-commit message formatting (matches our conventional commits)")
|
|
44
53
|
print(
|
|
45
|
-
'
|
|
54
|
+
'commit-prompt: "Write a short, concise commit message following'
|
|
46
55
|
' Conventional Commits (feat/fix/chore/docs/test/refactor)."'
|
|
47
56
|
)
|
|
48
57
|
print()
|
|
58
|
+
print("# Git attribution (ai-toolkit policy: no AI co-authorship in commits).")
|
|
59
|
+
print("# Do not flip this to true -- conflicts with the toolkit git-workflow rule")
|
|
60
|
+
print("# (see app/rules/common/git-workflow.md).")
|
|
61
|
+
print("attribute-co-authored-by: false")
|
|
62
|
+
print("attribute-commit-message-author: false")
|
|
63
|
+
print("attribute-commit-message-committer: false")
|
|
64
|
+
print()
|
|
65
|
+
print("# Language settings (aider >=0.83 `commit-language`, >=0.85 confirmed stable).")
|
|
66
|
+
print("# Leave unset to inherit the user's system locale. Uncomment to pin.")
|
|
67
|
+
print("# chat-language: en")
|
|
68
|
+
print("# commit-language: en")
|
|
69
|
+
print()
|
|
70
|
+
print("# Watch-files mode scans for `# AI!` / `# ai?` comments (aider >=0.75). Opt-in")
|
|
71
|
+
print("# because it changes how aider reads your editor buffers.")
|
|
72
|
+
print("# watch-files: false")
|
|
73
|
+
print()
|
|
49
74
|
print("# Disable auto-commits if you prefer using the /commit slash skill explicitly")
|
|
50
75
|
print("# auto-commits: false")
|
|
51
76
|
print()
|