@tinkcarlos/skillora 0.2.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 (234) hide show
  1. package/.claude/skills/.temp-skill-index.md +245 -0
  2. package/.claude/skills/SKILL.md +264 -0
  3. package/.claude/skills/api-scaffolding/SKILL.md +431 -0
  4. package/.claude/skills/api-scaffolding/agents/backend-architect.md +282 -0
  5. package/.claude/skills/api-scaffolding/agents/django-pro.md +144 -0
  6. package/.claude/skills/api-scaffolding/agents/fastapi-pro.md +156 -0
  7. package/.claude/skills/api-scaffolding/agents/graphql-architect.md +146 -0
  8. package/.claude/skills/api-scaffolding/skills/fastapi-templates/SKILL.md +171 -0
  9. package/.claude/skills/api-testing-observability/SKILL.md +583 -0
  10. package/.claude/skills/api-testing-observability/agents/api-documenter.md +146 -0
  11. package/.claude/skills/api-testing-observability/commands/api-mock.md +1320 -0
  12. package/.claude/skills/brainstorming/SKILL.md +283 -0
  13. package/.claude/skills/bug-fixing/SKILL.md +382 -0
  14. package/.claude/skills/bug-fixing/references/backend-guide.md +132 -0
  15. package/.claude/skills/bug-fixing/references/bug-guide.md +354 -0
  16. package/.claude/skills/bug-fixing/references/bug-record-template.md +134 -0
  17. package/.claude/skills/bug-fixing/references/bug-records.md +88 -0
  18. package/.claude/skills/bug-fixing/references/code-review-gate.md +81 -0
  19. package/.claude/skills/bug-fixing/references/common-bugs.md +140 -0
  20. package/.claude/skills/bug-fixing/references/complete-workflow.md +361 -0
  21. package/.claude/skills/bug-fixing/references/config-driven-fixes.md +136 -0
  22. package/.claude/skills/bug-fixing/references/context-isolation-protocol.md +268 -0
  23. package/.claude/skills/bug-fixing/references/cross-surface-regression.md +120 -0
  24. package/.claude/skills/bug-fixing/references/database-investigation.md +129 -0
  25. package/.claude/skills/bug-fixing/references/dependency-and-integrity-protocol.md +369 -0
  26. package/.claude/skills/bug-fixing/references/fix-completeness-checklist.md +239 -0
  27. package/.claude/skills/bug-fixing/references/frontend-guide.md +219 -0
  28. package/.claude/skills/bug-fixing/references/fullstack-joint-guide.md +123 -0
  29. package/.claude/skills/bug-fixing/references/functional-breakage.md +117 -0
  30. package/.claude/skills/bug-fixing/references/ide-lint-errors-guide.md +176 -0
  31. package/.claude/skills/bug-fixing/references/impact-analysis.md +511 -0
  32. package/.claude/skills/bug-fixing/references/investigation-checklist.md +263 -0
  33. package/.claude/skills/bug-fixing/references/knowledge-extraction-guide.md +531 -0
  34. package/.claude/skills/bug-fixing/references/knowledge-workflow.md +212 -0
  35. package/.claude/skills/bug-fixing/references/post-edit-quality-gate.md +30 -0
  36. package/.claude/skills/bug-fixing/references/python-env-and-testing.md +126 -0
  37. package/.claude/skills/bug-fixing/references/rca-guide.md +428 -0
  38. package/.claude/skills/bug-fixing/references/similar-bug-patterns.md +113 -0
  39. package/.claude/skills/bug-fixing/references/skill-delegation-guide.md +350 -0
  40. package/.claude/skills/bug-fixing/references/skill-orchestration.md +155 -0
  41. package/.claude/skills/bug-fixing/references/testing-strategy.md +350 -0
  42. package/.claude/skills/bug-fixing/references/tooling-build-scripts.md +162 -0
  43. package/.claude/skills/bug-fixing/references/user-input-validation.md +77 -0
  44. package/.claude/skills/bug-fixing/references/ux-patterns.md +158 -0
  45. package/.claude/skills/bug-fixing/references/windows-terminal-hygiene.md +106 -0
  46. package/.claude/skills/bug-fixing/references/zero-regression-matrix.md +239 -0
  47. package/.claude/skills/bug-fixing/references/zero-risk-protocol.md +102 -0
  48. package/.claude/skills/bug-fixing/scripts/format_code.py +611 -0
  49. package/.claude/skills/bug-fixing/scripts/generate_report_template.py +74 -0
  50. package/.claude/skills/bug-fixing/scripts/lint_check.py +816 -0
  51. package/.claude/skills/bug-fixing/scripts/requirements.txt +36 -0
  52. package/.claude/skills/cicd-pipeline/SKILL.md +300 -0
  53. package/.claude/skills/code-review/SKILL.md +535 -0
  54. package/.claude/skills/code-review/references/anti-pattern-scan.md +102 -0
  55. package/.claude/skills/code-review/references/automated-analysis.md +456 -0
  56. package/.claude/skills/code-review/references/backend-common-issues.md +589 -0
  57. package/.claude/skills/code-review/references/backend-expert-guide.md +415 -0
  58. package/.claude/skills/code-review/references/backend-review.md +868 -0
  59. package/.claude/skills/code-review/references/batch-processing-strategy.md +198 -0
  60. package/.claude/skills/code-review/references/call-chain-analysis-protocol.md +166 -0
  61. package/.claude/skills/code-review/references/common-patterns.md +321 -0
  62. package/.claude/skills/code-review/references/configuration-review.md +425 -0
  63. package/.claude/skills/code-review/references/control-flow-completeness.md +114 -0
  64. package/.claude/skills/code-review/references/database-review.md +298 -0
  65. package/.claude/skills/code-review/references/dependency-and-integrity-protocol.md +313 -0
  66. package/.claude/skills/code-review/references/external-standards.md +51 -0
  67. package/.claude/skills/code-review/references/feature-review.md +329 -0
  68. package/.claude/skills/code-review/references/file-review-template.md +326 -0
  69. package/.claude/skills/code-review/references/frontend-advanced.md +654 -0
  70. package/.claude/skills/code-review/references/frontend-common-issues.md +482 -0
  71. package/.claude/skills/code-review/references/frontend-expert-guide.md +342 -0
  72. package/.claude/skills/code-review/references/frontend-review.md +783 -0
  73. package/.claude/skills/code-review/references/fullstack-consistency.md +418 -0
  74. package/.claude/skills/code-review/references/fullstack-review.md +477 -0
  75. package/.claude/skills/code-review/references/functional-completeness.md +386 -0
  76. package/.claude/skills/code-review/references/hidden-bugs-detection.md +473 -0
  77. package/.claude/skills/code-review/references/ide-lint-errors-guide.md +173 -0
  78. package/.claude/skills/code-review/references/infrastructure-review.md +453 -0
  79. package/.claude/skills/code-review/references/iteration-review.md +264 -0
  80. package/.claude/skills/code-review/references/job-review.md +335 -0
  81. package/.claude/skills/code-review/references/layered-checklist-protocol.md +157 -0
  82. package/.claude/skills/code-review/references/logic-completeness.md +535 -0
  83. package/.claude/skills/code-review/references/mandatory-checklist.md +288 -0
  84. package/.claude/skills/code-review/references/multi-language-guide.md +800 -0
  85. package/.claude/skills/code-review/references/new-project-review.md +226 -0
  86. package/.claude/skills/code-review/references/non-code-files-review.md +451 -0
  87. package/.claude/skills/code-review/references/overlooked-issues.md +657 -0
  88. package/.claude/skills/code-review/references/platform-specific-review.md +195 -0
  89. package/.claude/skills/code-review/references/precision-analysis-protocol.md +260 -0
  90. package/.claude/skills/code-review/references/python-patterns.md +494 -0
  91. package/.claude/skills/code-review/references/rca-techniques.md +362 -0
  92. package/.claude/skills/code-review/references/report-template.md +430 -0
  93. package/.claude/skills/code-review/references/resource-limits-and-degradation.md +137 -0
  94. package/.claude/skills/code-review/references/review-dimensions.md +311 -0
  95. package/.claude/skills/code-review/references/review-guide.md +202 -0
  96. package/.claude/skills/code-review/references/review-knowledge-workflow.md +257 -0
  97. package/.claude/skills/code-review/references/review-progress-tracker-protocol.md +172 -0
  98. package/.claude/skills/code-review/references/review-record-template.md +195 -0
  99. package/.claude/skills/code-review/references/skill-orchestration.md +143 -0
  100. package/.claude/skills/code-review/references/ui-ux-review.md +470 -0
  101. package/.claude/skills/containerization/SKILL.md +313 -0
  102. package/.claude/skills/database-migrations/agents/database-admin.md +142 -0
  103. package/.claude/skills/database-migrations/agents/database-optimizer.md +144 -0
  104. package/.claude/skills/database-migrations/commands/migration-observability.md +408 -0
  105. package/.claude/skills/database-migrations/commands/sql-migrations.md +492 -0
  106. package/.claude/skills/finishing-a-development-branch/SKILL.md +319 -0
  107. package/.claude/skills/frontend-design/LICENSE.txt +177 -0
  108. package/.claude/skills/frontend-design/SKILL.md +587 -0
  109. package/.claude/skills/frontend-design/references/color-consistency.md +487 -0
  110. package/.claude/skills/frontend-design/references/color-palettes-full.md +657 -0
  111. package/.claude/skills/frontend-design/references/design-system-generator.md +285 -0
  112. package/.claude/skills/frontend-design/references/font-pairings-full.md +705 -0
  113. package/.claude/skills/frontend-design/references/industry-anti-patterns.md +281 -0
  114. package/.claude/skills/frontend-design/references/layout-anti-patterns.md +582 -0
  115. package/.claude/skills/frontend-design/references/motion-patterns.md +659 -0
  116. package/.claude/skills/frontend-design/references/pre-delivery-checklist.md +153 -0
  117. package/.claude/skills/frontend-design/references/responsive-design.md +555 -0
  118. package/.claude/skills/frontend-design/references/style-modification-rules.md +335 -0
  119. package/.claude/skills/frontend-design/references/ui-styles-full.md +383 -0
  120. package/.claude/skills/frontend-design/references/ui-styles-rating.md +191 -0
  121. package/.claude/skills/frontend-design/references/ux-guidelines.md +640 -0
  122. package/.claude/skills/fullstack-developer/SKILL.md +512 -0
  123. package/.claude/skills/fullstack-developer/references/api-contract-guide.md +312 -0
  124. package/.claude/skills/fullstack-developer/references/api-response-patterns.md +223 -0
  125. package/.claude/skills/fullstack-developer/references/async-patterns.md +220 -0
  126. package/.claude/skills/fullstack-developer/references/bug-prevention.md +914 -0
  127. package/.claude/skills/fullstack-developer/references/code-quality-checklist.md +271 -0
  128. package/.claude/skills/fullstack-developer/references/complete-development-workflow.md +278 -0
  129. package/.claude/skills/fullstack-developer/references/context-isolation-protocol.md +256 -0
  130. package/.claude/skills/fullstack-developer/references/database-migration.md +331 -0
  131. package/.claude/skills/fullstack-developer/references/dependency-and-integrity-protocol.md +390 -0
  132. package/.claude/skills/fullstack-developer/references/development-phases.md +333 -0
  133. package/.claude/skills/fullstack-developer/references/expert-guide.md +214 -0
  134. package/.claude/skills/fullstack-developer/references/file-import-patterns.md +114 -0
  135. package/.claude/skills/fullstack-developer/references/graceful-degradation-patterns.md +78 -0
  136. package/.claude/skills/fullstack-developer/references/ide-lint-errors-guide.md +183 -0
  137. package/.claude/skills/fullstack-developer/references/integration-testing.md +301 -0
  138. package/.claude/skills/fullstack-developer/references/mock-api-patterns.md +307 -0
  139. package/.claude/skills/fullstack-developer/references/phase-gate-template.md +249 -0
  140. package/.claude/skills/fullstack-developer/references/post-edit-quality-gate.md +30 -0
  141. package/.claude/skills/fullstack-developer/references/python-engineering.md +79 -0
  142. package/.claude/skills/fullstack-developer/references/skill-orchestration.md +214 -0
  143. package/.claude/skills/fullstack-developer/references/skill-router-table.md +304 -0
  144. package/.claude/skills/fullstack-developer/references/state-sync.md +217 -0
  145. package/.claude/skills/fullstack-developer/references/ui-testing-checklist.md +292 -0
  146. package/.claude/skills/fullstack-developer/scripts/format_code.py +611 -0
  147. package/.claude/skills/fullstack-developer/scripts/lint_check.py +816 -0
  148. package/.claude/skills/fullstack-developer/scripts/requirements.txt +36 -0
  149. package/.claude/skills/performance-optimization/SKILL.md +250 -0
  150. package/.claude/skills/product-requirements/SKILL.md +357 -0
  151. package/.claude/skills/product-requirements/references/acceptance-criteria.md +335 -0
  152. package/.claude/skills/product-requirements/references/answer-first-questioning-protocol.md +299 -0
  153. package/.claude/skills/product-requirements/references/competitive-analysis-guide.md +183 -0
  154. package/.claude/skills/product-requirements/references/document-accuracy-protocol.md +253 -0
  155. package/.claude/skills/product-requirements/references/document-management-protocol.md +278 -0
  156. package/.claude/skills/product-requirements/references/external-standards.md +62 -0
  157. package/.claude/skills/product-requirements/references/feature-spec-template.md +359 -0
  158. package/.claude/skills/product-requirements/references/knowledge-acquisition-protocol.md +251 -0
  159. package/.claude/skills/product-requirements/references/plan-execution-protocol.md +334 -0
  160. package/.claude/skills/product-requirements/references/plan-generation-protocol.md +264 -0
  161. package/.claude/skills/product-requirements/references/prioritization-frameworks.md +80 -0
  162. package/.claude/skills/product-requirements/references/requirement-decomposition-protocol.md +291 -0
  163. package/.claude/skills/product-requirements/references/user-story-examples.md +297 -0
  164. package/.claude/skills/product-requirements/references/workflow-templates.md +266 -0
  165. package/.claude/skills/react-best-practices/SKILL.md +198 -0
  166. package/.claude/skills/react-best-practices/references/advanced-patterns.md +94 -0
  167. package/.claude/skills/react-best-practices/references/bundle-optimization.md +182 -0
  168. package/.claude/skills/react-best-practices/references/client-data-fetching.md +112 -0
  169. package/.claude/skills/react-best-practices/references/complete-guide.md +2249 -0
  170. package/.claude/skills/react-best-practices/references/eliminating-waterfalls.md +169 -0
  171. package/.claude/skills/react-best-practices/references/javascript-performance.md +256 -0
  172. package/.claude/skills/react-best-practices/references/rendering-performance.md +230 -0
  173. package/.claude/skills/react-best-practices/references/rerender-optimization.md +214 -0
  174. package/.claude/skills/react-best-practices/references/server-performance.md +182 -0
  175. package/.claude/skills/security-audit/SKILL.md +226 -0
  176. package/.claude/skills/shared-references/advanced-debugging-techniques.md +186 -0
  177. package/.claude/skills/shared-references/code-quality-checklist.md +218 -0
  178. package/.claude/skills/shared-references/code-review-efficiency-guide.md +125 -0
  179. package/.claude/skills/shared-references/mcp-dependency-compatibility-protocol.md +276 -0
  180. package/.claude/skills/shared-references/skill-call-graph.md +230 -0
  181. package/.claude/skills/shared-references/skill-orchestration-protocol.md +281 -0
  182. package/.claude/skills/shared-references/subagent-dispatch-templates.md +199 -0
  183. package/.claude/skills/skill-expert-skills/LICENSE.txt +204 -0
  184. package/.claude/skills/skill-expert-skills/QUICK_NAVIGATION.md +374 -0
  185. package/.claude/skills/skill-expert-skills/SKILL.md +247 -0
  186. package/.claude/skills/skill-expert-skills/docs/_index.md +91 -0
  187. package/.claude/skills/skill-expert-skills/references/deep-research-methodology.md +389 -0
  188. package/.claude/skills/skill-expert-skills/references/docs-generation-workflow.md +398 -0
  189. package/.claude/skills/skill-expert-skills/references/domain-expertise-protocol.md +343 -0
  190. package/.claude/skills/skill-expert-skills/references/domain-knowledge/_index.md +54 -0
  191. package/.claude/skills/skill-expert-skills/references/domain-knowledge/backend-expertise.md +517 -0
  192. package/.claude/skills/skill-expert-skills/references/domain-knowledge/bug-fixing-expertise.md +363 -0
  193. package/.claude/skills/skill-expert-skills/references/domain-knowledge/code-review-expertise.md +392 -0
  194. package/.claude/skills/skill-expert-skills/references/domain-knowledge/frontend-expertise.md +410 -0
  195. package/.claude/skills/skill-expert-skills/references/domain-knowledge-template.md +503 -0
  196. package/.claude/skills/skill-expert-skills/references/examples.md +782 -0
  197. package/.claude/skills/skill-expert-skills/references/integration-examples.md +655 -0
  198. package/.claude/skills/skill-expert-skills/references/knowledge-validation-checklist.md +246 -0
  199. package/.claude/skills/skill-expert-skills/references/latest-knowledge-acquisition.md +461 -0
  200. package/.claude/skills/skill-expert-skills/references/mcp-tools-guide.md +439 -0
  201. package/.claude/skills/skill-expert-skills/references/official-best-practices.md +616 -0
  202. package/.claude/skills/skill-expert-skills/references/patterns.md +218 -0
  203. package/.claude/skills/skill-expert-skills/references/plugin-skills-guide.md +432 -0
  204. package/.claude/skills/skill-expert-skills/references/requirement-elicitation-protocol.md +290 -0
  205. package/.claude/skills/skill-expert-skills/references/skill-creator-SKILL.md +353 -0
  206. package/.claude/skills/skill-expert-skills/references/skill-templates.md +583 -0
  207. package/.claude/skills/skill-expert-skills/references/skills-knowledge-base.md +561 -0
  208. package/.claude/skills/skill-expert-skills/references/tools-guide.md +379 -0
  209. package/.claude/skills/skill-expert-skills/references/troubleshooting.md +378 -0
  210. package/.claude/skills/skill-expert-skills/references/universality-guide.md +205 -0
  211. package/.claude/skills/skill-expert-skills/references/writing-style-guide.md +466 -0
  212. package/.claude/skills/skill-expert-skills/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
  213. package/.claude/skills/skill-expert-skills/scripts/__pycache__/universal_validate.cpython-313.pyc +0 -0
  214. package/.claude/skills/skill-expert-skills/scripts/analyze_trigger.py +425 -0
  215. package/.claude/skills/skill-expert-skills/scripts/diff_with_official.py +188 -0
  216. package/.claude/skills/skill-expert-skills/scripts/init_skill.py +349 -0
  217. package/.claude/skills/skill-expert-skills/scripts/package_skill.py +156 -0
  218. package/.claude/skills/skill-expert-skills/scripts/quick_validate.py +493 -0
  219. package/.claude/skills/skill-expert-skills/scripts/requirements.txt +2 -0
  220. package/.claude/skills/skill-expert-skills/scripts/universal_validate.py +182 -0
  221. package/.claude/skills/skill-expert-skills/scripts/upgrade_skill.py +431 -0
  222. package/.claude/skills/subagent-driven-development/SKILL.md +268 -0
  223. package/.claude/skills/test-driven-development/SKILL.md +246 -0
  224. package/.claude/skills/test-driven-development/references/testing-anti-patterns.md +192 -0
  225. package/.claude/skills/using-git-worktrees/SKILL.md +266 -0
  226. package/.claude/skills/using-skillstack/SKILL.md +127 -0
  227. package/.claude/skills/vercel-deploy/SKILL.md +166 -0
  228. package/.claude/skills/vercel-deploy/scripts/deploy.sh +249 -0
  229. package/.claude/skills/verification-before-completion/SKILL.md +305 -0
  230. package/.claude/skills/writing-plans/SKILL.md +259 -0
  231. package/README.md +69 -0
  232. package/bin/cli.js +468 -0
  233. package/lib/init.js +333 -0
  234. package/package.json +29 -0
@@ -0,0 +1,425 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Trigger Analyzer - Analyze and improve skill description for better triggering
4
+
5
+ Features:
6
+ - Extract trigger keywords from description
7
+ - Suggest missing trigger scenarios
8
+ - Generate alternative phrasings
9
+ - Score trigger coverage
10
+
11
+ Usage:
12
+ python analyze_trigger.py <path/to/skill-folder>
13
+ python analyze_trigger.py <path/to/skill-folder> --suggest
14
+ """
15
+
16
+ import sys
17
+ import re
18
+ from pathlib import Path
19
+ from typing import List, Dict, Set, Tuple
20
+
21
+
22
+ def _configure_stdio() -> None:
23
+ for stream in (sys.stdout, sys.stderr):
24
+ try:
25
+ stream.reconfigure(encoding="utf-8", errors="replace")
26
+ except Exception:
27
+ pass
28
+
29
+
30
+ _configure_stdio()
31
+
32
+
33
+ # Common trigger patterns by category
34
+ TRIGGER_CATEGORIES = {
35
+ "action_verbs": [
36
+ "create",
37
+ "build",
38
+ "generate",
39
+ "make",
40
+ "design",
41
+ "develop",
42
+ "edit",
43
+ "modify",
44
+ "update",
45
+ "change",
46
+ "fix",
47
+ "repair",
48
+ "analyze",
49
+ "review",
50
+ "check",
51
+ "validate",
52
+ "verify",
53
+ "audit",
54
+ "convert",
55
+ "transform",
56
+ "export",
57
+ "import",
58
+ "migrate",
59
+ "optimize",
60
+ "improve",
61
+ "enhance",
62
+ "refactor",
63
+ "debug",
64
+ "troubleshoot",
65
+ "diagnose",
66
+ "deploy",
67
+ "publish",
68
+ "release",
69
+ "package",
70
+ ],
71
+ "artifact_types": [
72
+ "file",
73
+ "document",
74
+ "code",
75
+ "script",
76
+ "function",
77
+ "class",
78
+ "api",
79
+ "endpoint",
80
+ "service",
81
+ "component",
82
+ "module",
83
+ "config",
84
+ "configuration",
85
+ "settings",
86
+ "template",
87
+ "report",
88
+ "dashboard",
89
+ "chart",
90
+ "diagram",
91
+ "test",
92
+ "spec",
93
+ "documentation",
94
+ "readme",
95
+ ".md",
96
+ ".py",
97
+ ".js",
98
+ ".ts",
99
+ ".json",
100
+ ".yaml",
101
+ ".html",
102
+ ".css",
103
+ "pdf",
104
+ "docx",
105
+ "pptx",
106
+ "xlsx",
107
+ ],
108
+ "context_indicators": [
109
+ "skill",
110
+ "skills",
111
+ "SKILL.md",
112
+ ".claude/skills",
113
+ "frontmatter",
114
+ "description",
115
+ "trigger",
116
+ "references/",
117
+ "scripts/",
118
+ "assets/",
119
+ "validate",
120
+ "package",
121
+ "distribute",
122
+ ],
123
+ }
124
+
125
+
126
+ def parse_frontmatter(content: str) -> Dict:
127
+ """Parse YAML frontmatter"""
128
+ try:
129
+ import yaml
130
+ except ImportError:
131
+ return {}
132
+
133
+ match = re.match(r"^---\r?\n(.*?)\r?\n---", content, re.DOTALL)
134
+ if match:
135
+ try:
136
+ return yaml.safe_load(match.group(1)) or {}
137
+ except Exception:
138
+ pass
139
+ return {}
140
+
141
+
142
+ def extract_keywords(description: str) -> Set[str]:
143
+ """Extract meaningful keywords from description"""
144
+ # Normalize
145
+ text = description.lower()
146
+
147
+ # Remove common stop words
148
+ stop_words = {
149
+ "a",
150
+ "an",
151
+ "the",
152
+ "is",
153
+ "are",
154
+ "was",
155
+ "were",
156
+ "be",
157
+ "been",
158
+ "this",
159
+ "that",
160
+ "these",
161
+ "those",
162
+ "it",
163
+ "its",
164
+ "to",
165
+ "for",
166
+ "with",
167
+ "from",
168
+ "by",
169
+ "on",
170
+ "in",
171
+ "at",
172
+ "of",
173
+ "and",
174
+ "or",
175
+ "but",
176
+ "if",
177
+ "when",
178
+ "where",
179
+ "how",
180
+ "what",
181
+ "can",
182
+ "could",
183
+ "will",
184
+ "would",
185
+ "should",
186
+ "may",
187
+ "might",
188
+ "use",
189
+ "used",
190
+ "using",
191
+ "not",
192
+ }
193
+
194
+ # Extract words
195
+ words = re.findall(r"\b[a-z][a-z0-9_-]*\b", text)
196
+ words.extend(re.findall(r"\.[a-z]+", text)) # file extensions
197
+
198
+ # Filter
199
+ keywords = set()
200
+ for word in words:
201
+ if word not in stop_words and len(word) > 2:
202
+ keywords.add(word)
203
+
204
+ return keywords
205
+
206
+
207
+ def analyze_coverage(keywords: Set[str]) -> Dict[str, List[str]]:
208
+ """Analyze keyword coverage against trigger categories"""
209
+ coverage = {}
210
+
211
+ for category, patterns in TRIGGER_CATEGORIES.items():
212
+ matched = []
213
+ for pattern in patterns:
214
+ pattern_lower = pattern.lower()
215
+ if any(pattern_lower in kw or kw in pattern_lower for kw in keywords):
216
+ matched.append(pattern)
217
+ coverage[category] = matched
218
+
219
+ return coverage
220
+
221
+
222
+ def suggest_triggers(skill_name: str, current_keywords: Set[str]) -> List[str]:
223
+ """Suggest additional trigger phrases based on skill name"""
224
+ suggestions = []
225
+
226
+ # Parse skill name
227
+ name_parts = skill_name.replace("-", " ").split()
228
+
229
+ # Generate suggestions based on name
230
+ if "skill" in name_parts or "skills" in name_parts:
231
+ suggestions.extend(
232
+ [
233
+ "Creating a new skill",
234
+ "How to write a skill",
235
+ "Make a Claude skill",
236
+ "Build skill for...",
237
+ "åˆ›å»ŗäø€äøŖę–°ēš„skill",
238
+ "写一个skill",
239
+ ]
240
+ )
241
+
242
+ if "validate" in name_parts or "validator" in name_parts:
243
+ suggestions.extend(
244
+ ["Check if skill is valid", "Validate my skill structure", "验证skillę ¼å¼"]
245
+ )
246
+
247
+ if "expert" in name_parts:
248
+ suggestions.extend(["Best practices for...", "How to optimize...", "ęœ€ä½³å®žč·µ"])
249
+
250
+ # Common patterns not in keywords
251
+ if "optimize" not in current_keywords and "optimization" not in current_keywords:
252
+ suggestions.append("Optimize/improve existing skill")
253
+
254
+ if "debug" not in current_keywords and "troubleshoot" not in current_keywords:
255
+ suggestions.append("Debug/troubleshoot skill issues")
256
+
257
+ return suggestions
258
+
259
+
260
+ def calculate_score(
261
+ coverage: Dict[str, List[str]], description: str
262
+ ) -> Tuple[int, str]:
263
+ """Calculate trigger quality score (0-100)"""
264
+ score = 0
265
+ feedback = []
266
+
267
+ # Action verbs (30 points)
268
+ action_count = len(coverage.get("action_verbs", []))
269
+ if action_count >= 5:
270
+ score += 30
271
+ elif action_count >= 3:
272
+ score += 20
273
+ elif action_count >= 1:
274
+ score += 10
275
+ else:
276
+ feedback.append("Add more action verbs (create, analyze, validate, etc.)")
277
+
278
+ # Artifact types (20 points)
279
+ artifact_count = len(coverage.get("artifact_types", []))
280
+ if artifact_count >= 3:
281
+ score += 20
282
+ elif artifact_count >= 1:
283
+ score += 10
284
+ else:
285
+ feedback.append("Mention specific file types or artifacts")
286
+
287
+ # Context indicators (20 points)
288
+ context_count = len(coverage.get("context_indicators", []))
289
+ if context_count >= 3:
290
+ score += 20
291
+ elif context_count >= 1:
292
+ score += 10
293
+
294
+ # "Use when:" section (15 points)
295
+ if "use when" in description.lower():
296
+ score += 15
297
+ else:
298
+ feedback.append("Add 'Use when:' section with bullet points")
299
+
300
+ # "Not for:" boundary (10 points)
301
+ if "not for" in description.lower():
302
+ score += 10
303
+ else:
304
+ feedback.append("Add 'Not for:' to set scope boundaries")
305
+
306
+ # Length check (5 points)
307
+ desc_len = len(description)
308
+ if 200 <= desc_len <= 800:
309
+ score += 5
310
+ elif desc_len < 100:
311
+ feedback.append("Description is too short - add more trigger scenarios")
312
+ elif desc_len > 900:
313
+ feedback.append("Description is too long - consider condensing")
314
+
315
+ return min(score, 100), "; ".join(feedback) if feedback else "Good coverage!"
316
+
317
+
318
+ def format_report(
319
+ skill_name: str,
320
+ description: str,
321
+ keywords: Set[str],
322
+ coverage: Dict[str, List[str]],
323
+ score: int,
324
+ feedback: str,
325
+ suggestions: List[str],
326
+ ) -> str:
327
+ """Format analysis as report"""
328
+ lines = []
329
+ lines.append("=" * 70)
330
+ lines.append("šŸŽÆ TRIGGER ANALYSIS REPORT")
331
+ lines.append("=" * 70)
332
+ lines.append(f"\nSkill: {skill_name}")
333
+ lines.append(f"Description length: {len(description)} chars")
334
+
335
+ # Score
336
+ score_bar = "ā–ˆ" * (score // 10) + "ā–‘" * (10 - score // 10)
337
+ if score >= 80:
338
+ score_label = "Excellent"
339
+ elif score >= 60:
340
+ score_label = "Good"
341
+ elif score >= 40:
342
+ score_label = "Fair"
343
+ else:
344
+ score_label = "Needs Work"
345
+ lines.append(f"\nšŸ“Š Trigger Score: {score}/100 {score_bar} ({score_label})")
346
+
347
+ if feedback:
348
+ lines.append(f" Feedback: {feedback}")
349
+
350
+ # Coverage breakdown
351
+ lines.append("\nšŸ“Œ KEYWORD COVERAGE:")
352
+ for category, matched in coverage.items():
353
+ category_name = category.replace("_", " ").title()
354
+ if matched:
355
+ lines.append(f" āœ… {category_name}: {', '.join(matched[:8])}")
356
+ if len(matched) > 8:
357
+ lines.append(f" ...and {len(matched) - 8} more")
358
+ else:
359
+ lines.append(f" āš ļø {category_name}: (none detected)")
360
+
361
+ # Extracted keywords
362
+ lines.append(f"\nšŸ”‘ EXTRACTED KEYWORDS ({len(keywords)}):")
363
+ sorted_kw = sorted(keywords)
364
+ for i in range(0, len(sorted_kw), 8):
365
+ chunk = sorted_kw[i : i + 8]
366
+ lines.append(f" {', '.join(chunk)}")
367
+
368
+ # Suggestions
369
+ if suggestions:
370
+ lines.append("\nšŸ’” SUGGESTED TRIGGER PHRASES:")
371
+ for i, suggestion in enumerate(suggestions[:6], 1):
372
+ lines.append(f' {i}. "{suggestion}"')
373
+
374
+ lines.append("\n" + "=" * 70)
375
+ lines.append("šŸ“ IMPROVEMENT TIPS:")
376
+ lines.append(" 1. Include 3-5 realistic 'Use when:' scenarios")
377
+ lines.append(" 2. Use action verbs users would actually say")
378
+ lines.append(" 3. Mention specific file types/artifacts")
379
+ lines.append(" 4. Add 'Not for:' to prevent false triggers")
380
+ lines.append("=" * 70)
381
+
382
+ return "\n".join(lines)
383
+
384
+
385
+ def main():
386
+ if len(sys.argv) < 2:
387
+ print("Usage: python analyze_trigger.py <path/to/skill-folder>")
388
+ print("\nAnalyzes skill description for trigger keyword coverage")
389
+ sys.exit(1)
390
+
391
+ skill_path = Path(sys.argv[1]).resolve()
392
+ skill_md = skill_path / "SKILL.md"
393
+
394
+ if not skill_md.exists():
395
+ print(f"āŒ Error: SKILL.md not found in {skill_path}")
396
+ sys.exit(1)
397
+
398
+ try:
399
+ content = skill_md.read_text(encoding="utf-8-sig")
400
+ except Exception as e:
401
+ print(f"āŒ Error reading SKILL.md: {e}")
402
+ sys.exit(1)
403
+
404
+ frontmatter = parse_frontmatter(content)
405
+ description = frontmatter.get("description", "")
406
+
407
+ if not description:
408
+ print("āŒ Error: No description found in frontmatter")
409
+ sys.exit(1)
410
+
411
+ keywords = extract_keywords(description)
412
+ coverage = analyze_coverage(keywords)
413
+ score, feedback = calculate_score(coverage, description)
414
+ suggestions = suggest_triggers(skill_path.name, keywords)
415
+
416
+ report = format_report(
417
+ skill_path.name, description, keywords, coverage, score, feedback, suggestions
418
+ )
419
+ print(report)
420
+
421
+ sys.exit(0 if score >= 60 else 1)
422
+
423
+
424
+ if __name__ == "__main__":
425
+ main()
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Diff with Official - Compare a skill against official skill-creator standards
4
+
5
+ This tool helps identify:
6
+ - Deviations from official frontmatter spec
7
+ - Extended fields that may not be compatible
8
+ - Best practices alignment
9
+
10
+ Usage:
11
+ python diff_with_official.py <path/to/skill-folder>
12
+ """
13
+
14
+ import sys
15
+ import re
16
+ from pathlib import Path
17
+ from typing import Dict, List, Tuple
18
+
19
+
20
+ def _configure_stdio() -> None:
21
+ for stream in (sys.stdout, sys.stderr):
22
+ try:
23
+ stream.reconfigure(encoding='utf-8', errors='replace')
24
+ except Exception:
25
+ pass
26
+
27
+
28
+ _configure_stdio()
29
+
30
+ # Official Agent Skills spec (minimal)
31
+ OFFICIAL_ALLOWED_FIELDS = {'name', 'description'}
32
+
33
+ # Extended fields (skill-expert-skills allows)
34
+ EXTENDED_ALLOWED_FIELDS = {'name', 'description', 'license', 'allowed-tools', 'metadata'}
35
+
36
+
37
+ def parse_frontmatter(content: str) -> Tuple[Dict, str]:
38
+ """Parse YAML frontmatter and return (dict, body)"""
39
+ try:
40
+ import yaml
41
+ except ImportError:
42
+ return {}, content
43
+
44
+ match = re.match(r'^---\r?\n(.*?)\r?\n---', content, re.DOTALL)
45
+ if not match:
46
+ return {}, content
47
+
48
+ try:
49
+ fm = yaml.safe_load(match.group(1)) or {}
50
+ return fm, content[match.end():]
51
+ except Exception:
52
+ return {}, content
53
+
54
+
55
+ def analyze_compatibility(skill_path: Path) -> Dict:
56
+ """Analyze skill for official compatibility"""
57
+ result = {
58
+ 'skill_name': skill_path.name,
59
+ 'official_compatible': True,
60
+ 'issues': [],
61
+ 'warnings': [],
62
+ 'info': []
63
+ }
64
+
65
+ skill_md = skill_path / 'SKILL.md'
66
+ if not skill_md.exists():
67
+ result['official_compatible'] = False
68
+ result['issues'].append("SKILL.md not found")
69
+ return result
70
+
71
+ try:
72
+ content = skill_md.read_text(encoding='utf-8-sig')
73
+ except Exception as e:
74
+ result['issues'].append(f"Cannot read SKILL.md: {e}")
75
+ return result
76
+
77
+ frontmatter, body = parse_frontmatter(content)
78
+
79
+ # Check for non-official fields
80
+ current_fields = set(frontmatter.keys())
81
+ non_official = current_fields - OFFICIAL_ALLOWED_FIELDS
82
+
83
+ if non_official:
84
+ result['official_compatible'] = False
85
+ for field in non_official:
86
+ if field in EXTENDED_ALLOWED_FIELDS:
87
+ result['warnings'].append(
88
+ f"Extended field '{field}' - OK for skill-expert-skills, "
89
+ f"but NOT supported by official Agent Skills"
90
+ )
91
+ else:
92
+ result['issues'].append(
93
+ f"Unknown field '{field}' - not in any known spec"
94
+ )
95
+
96
+ # Check name format
97
+ name = frontmatter.get('name', '')
98
+ if name:
99
+ if not re.match(r'^[a-z0-9-]+$', name):
100
+ result['issues'].append(f"Name '{name}' violates hyphen-case rule")
101
+ if len(name) > 64:
102
+ result['issues'].append(f"Name too long ({len(name)} > 64 chars)")
103
+
104
+ # Check description
105
+ desc = frontmatter.get('description', '')
106
+ if desc:
107
+ if '<' in desc or '>' in desc:
108
+ result['issues'].append("Description contains angle brackets (< or >)")
109
+ if len(desc) > 1024:
110
+ result['issues'].append(f"Description too long ({len(desc)} > 1024 chars)")
111
+
112
+ # Check body length
113
+ body_lines = body.count('\n')
114
+ if body_lines > 500:
115
+ result['warnings'].append(f"SKILL.md body is {body_lines} lines (recommend < 500)")
116
+ if body_lines > 800:
117
+ result['issues'].append(f"SKILL.md body exceeds 800 lines hard limit")
118
+
119
+ # Info about extended features used
120
+ if 'allowed-tools' in frontmatter:
121
+ result['info'].append(f"Uses allowed-tools: {frontmatter['allowed-tools']}")
122
+ if 'metadata' in frontmatter:
123
+ result['info'].append(f"Uses metadata: {list(frontmatter['metadata'].keys())}")
124
+ if 'license' in frontmatter:
125
+ result['info'].append(f"Uses license: {frontmatter['license']}")
126
+
127
+ return result
128
+
129
+
130
+ def format_report(result: Dict) -> str:
131
+ """Format analysis as report"""
132
+ lines = []
133
+ lines.append("=" * 70)
134
+ lines.append("šŸ“‹ OFFICIAL COMPATIBILITY CHECK")
135
+ lines.append("=" * 70)
136
+ lines.append(f"\nSkill: {result['skill_name']}")
137
+
138
+ if result['official_compatible']:
139
+ lines.append("\nāœ… OFFICIAL AGENT SKILLS COMPATIBLE")
140
+ lines.append(" This skill uses only official spec fields (name, description)")
141
+ else:
142
+ lines.append("\nāš ļø NOT FULLY OFFICIAL COMPATIBLE")
143
+ lines.append(" This skill uses extended fields from skill-expert-skills")
144
+
145
+ if result['issues']:
146
+ lines.append("\nšŸ”“ ISSUES (Must fix for any environment):")
147
+ for issue in result['issues']:
148
+ lines.append(f" • {issue}")
149
+
150
+ if result['warnings']:
151
+ lines.append("\n🟔 WARNINGS (Extended features):")
152
+ for warning in result['warnings']:
153
+ lines.append(f" • {warning}")
154
+
155
+ if result['info']:
156
+ lines.append("\nšŸ“Œ INFO (Extended features in use):")
157
+ for info in result['info']:
158
+ lines.append(f" • {info}")
159
+
160
+ lines.append("\n" + "=" * 70)
161
+ lines.append("šŸ’” MIGRATION GUIDE (if needed for official Agent Skills):")
162
+ lines.append(" 1. Keep only 'name' and 'description' in frontmatter")
163
+ lines.append(" 2. Remove 'allowed-tools', 'license', 'metadata' fields")
164
+ lines.append(" 3. Move any removed metadata to SKILL.md body or references/")
165
+ lines.append("=" * 70)
166
+
167
+ return "\n".join(lines)
168
+
169
+
170
+ def main():
171
+ if len(sys.argv) < 2:
172
+ print("Usage: python diff_with_official.py <path/to/skill-folder>")
173
+ sys.exit(1)
174
+
175
+ skill_path = Path(sys.argv[1]).resolve()
176
+ if not skill_path.exists():
177
+ print(f"āŒ Error: Path not found: {skill_path}")
178
+ sys.exit(1)
179
+
180
+ result = analyze_compatibility(skill_path)
181
+ print(format_report(result))
182
+
183
+ sys.exit(0 if result['official_compatible'] else 1)
184
+
185
+
186
+ if __name__ == "__main__":
187
+ main()
188
+