opencode-skills-collection 3.1.14 → 3.1.16

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 (164) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +36 -1
  2. package/bundled-skills/007/scripts/full_audit.py +34 -22
  3. package/bundled-skills/007/scripts/quick_scan.py +24 -15
  4. package/bundled-skills/007/scripts/scanners/dependency_scanner.py +31 -19
  5. package/bundled-skills/007/scripts/scanners/injection_scanner.py +24 -14
  6. package/bundled-skills/007/scripts/scanners/secrets_scanner.py +24 -14
  7. package/bundled-skills/007/scripts/score_calculator.py +25 -13
  8. package/bundled-skills/2slides-ppt-generator/scripts/download_slides_pages_voices.py +15 -1
  9. package/bundled-skills/aegisops-ai/SKILL.md +1 -1
  10. package/bundled-skills/agent-self-scheduling/SKILL.md +88 -0
  11. package/bundled-skills/alpha-vantage/SKILL.md +3 -1
  12. package/bundled-skills/anti-sleep/SKILL.md +90 -0
  13. package/bundled-skills/api-security-best-practices/SKILL.md +1 -1
  14. package/bundled-skills/app-store-optimization/SKILL.md +7 -0
  15. package/bundled-skills/audio-transcriber/scripts/transcribe.py +17 -4
  16. package/bundled-skills/azure-mgmt-botservice-py/SKILL.md +2 -1
  17. package/bundled-skills/azure-resource-manager-mysql-dotnet/SKILL.md +2 -1
  18. package/bundled-skills/azure-resource-manager-postgresql-dotnet/SKILL.md +2 -1
  19. package/bundled-skills/azure-resource-manager-sql-dotnet/SKILL.md +2 -1
  20. package/bundled-skills/biopython/SKILL.md +2 -1
  21. package/bundled-skills/brain-to-docs/SKILL.md +54 -0
  22. package/bundled-skills/browser-harness/SKILL.md +220 -0
  23. package/bundled-skills/browser-harness/references/install.md +132 -0
  24. package/bundled-skills/bumblebee/scripts/render_report.py +16 -3
  25. package/bundled-skills/bun-development/SKILL.md +1 -1
  26. package/bundled-skills/cc-skill-security-review/SKILL.md +2 -2
  27. package/bundled-skills/claude-monitor/scripts/monitor.py +15 -2
  28. package/bundled-skills/cmux/SKILL.md +250 -0
  29. package/bundled-skills/code-polish/SKILL.md +192 -0
  30. package/bundled-skills/code-review-checklist/SKILL.md +1 -1
  31. package/bundled-skills/codex-subagent/SKILL.md +117 -0
  32. package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +24 -3
  33. package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +13 -2
  34. package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +23 -2
  35. package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +21 -0
  36. package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +23 -2
  37. package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +24 -3
  38. package/bundled-skills/container-security-hardening/SKILL.md +1 -1
  39. package/bundled-skills/content-creator/scripts/brand_voice_analyzer.py +15 -1
  40. package/bundled-skills/content-creator/scripts/seo_optimizer.py +15 -1
  41. package/bundled-skills/context-kit/SKILL.md +135 -0
  42. package/bundled-skills/cyber-audit/SKILL.md +138 -0
  43. package/bundled-skills/deepapi/SKILL.md +649 -0
  44. package/bundled-skills/delegating-to-agents/SKILL.md +64 -0
  45. package/bundled-skills/developer-signup-flow/SKILL.md +1 -1
  46. package/bundled-skills/diary/scripts/fetch_diaries.py +14 -1
  47. package/bundled-skills/diary/scripts/prepare_context.py +15 -2
  48. package/bundled-skills/diary/scripts/sync_to_notion.py +14 -1
  49. package/bundled-skills/dispatch/SKILL.md +19 -7
  50. package/bundled-skills/distribute-skill-to-all-agents/SKILL.md +85 -0
  51. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  52. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  53. package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
  54. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  55. package/bundled-skills/docs/users/bundles.md +1 -1
  56. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  57. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  58. package/bundled-skills/docs/users/getting-started.md +1 -1
  59. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  60. package/bundled-skills/docs/users/usage.md +4 -4
  61. package/bundled-skills/docs/users/visual-guide.md +4 -4
  62. package/bundled-skills/docx-official/ooxml/scripts/pack.py +30 -3
  63. package/bundled-skills/docx-official/ooxml/scripts/unpack.py +16 -3
  64. package/bundled-skills/drizzle-migration-conflict/scripts/check_drizzle_migrations.py +27 -17
  65. package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +17 -3
  66. package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +9 -5
  67. package/bundled-skills/effective-agent-skills/SKILL.md +333 -0
  68. package/bundled-skills/electron-development/SKILL.md +6 -2
  69. package/bundled-skills/environment-setup-guide/SKILL.md +2 -5
  70. package/bundled-skills/expo-ui/scripts/list-components.js +5 -1
  71. package/bundled-skills/fable-safe-prompt/SKILL.md +79 -0
  72. package/bundled-skills/folder-specific-claude-and-agents-md/SKILL.md +96 -0
  73. package/bundled-skills/frontend-slides/scripts/extract-pptx.py +18 -4
  74. package/bundled-skills/gcp-cloud-run/SKILL.md +2 -1
  75. package/bundled-skills/gemini-api-integration/SKILL.md +3 -1
  76. package/bundled-skills/gemini-live-api-dev/SKILL.md +2 -1
  77. package/bundled-skills/gemini-omni-flash-api/scripts/video/generate_video.py +49 -14
  78. package/bundled-skills/goal-loop/SKILL.md +175 -0
  79. package/bundled-skills/hugging-face-evaluation/SKILL.md +1 -1
  80. package/bundled-skills/hugging-face-jobs/SKILL.md +1 -1
  81. package/bundled-skills/hugging-face-jobs/scripts/finepdfs-stats.py +14 -1
  82. package/bundled-skills/hugging-face-model-trainer/scripts/convert_to_gguf.py +10 -1
  83. package/bundled-skills/hugo-to-markdown/scripts/inventory_hugo_rules.py +14 -1
  84. package/bundled-skills/image-generator/SKILL.md +3 -1
  85. package/bundled-skills/instagram/scripts/export.py +18 -7
  86. package/bundled-skills/interview-style-doc-building/SKILL.md +86 -0
  87. package/bundled-skills/junta-leiloeiros/scripts/export.py +19 -10
  88. package/bundled-skills/landing-page-generator/scripts/landing_page_scaffolder.py +15 -1
  89. package/bundled-skills/linear-claude-skill/SKILL.md +4 -2
  90. package/bundled-skills/linkedin-post-writer/SKILL.md +159 -0
  91. package/bundled-skills/linkedin-post-writer/references/hook-formulas.md +482 -0
  92. package/bundled-skills/llm-council/SKILL.md +4 -2
  93. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +5 -6
  94. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +2 -3
  95. package/bundled-skills/markdown-rendering/SKILL.md +72 -0
  96. package/bundled-skills/matematico-tao/scripts/complexity_analyzer.py +14 -1
  97. package/bundled-skills/matematico-tao/scripts/dependency_graph.py +15 -2
  98. package/bundled-skills/mobile-design/scripts/mobile_audit.py +20 -6
  99. package/bundled-skills/monte-carlo-validation-notebook/scripts/resolve_dbt_schema.py +15 -2
  100. package/bundled-skills/multi-agent-architect/SKILL.md +1 -1
  101. package/bundled-skills/odoo-rpc-api/SKILL.md +2 -1
  102. package/bundled-skills/pci-compliance/SKILL.md +3 -1
  103. package/bundled-skills/pdf-official/scripts/create_validation_image.py +17 -3
  104. package/bundled-skills/pdf-official/scripts/extract_form_field_info.py +1 -1
  105. package/bundled-skills/personal-tool-builder/SKILL.md +1 -1
  106. package/bundled-skills/pi-custom-model/SKILL.md +68 -0
  107. package/bundled-skills/pi-web-search/SKILL.md +74 -0
  108. package/bundled-skills/playwright-skill/run.js +19 -1
  109. package/bundled-skills/pptx-official/ooxml/scripts/pack.py +30 -3
  110. package/bundled-skills/pptx-official/ooxml/scripts/unpack.py +16 -3
  111. package/bundled-skills/pptx-official/scripts/inventory.py +17 -4
  112. package/bundled-skills/pptx-official/scripts/rearrange.py +15 -2
  113. package/bundled-skills/pptx-official/scripts/replace.py +16 -3
  114. package/bundled-skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +15 -1
  115. package/bundled-skills/production-code-audit/SKILL.md +1 -1
  116. package/bundled-skills/push-skill-to-github/SKILL.md +61 -0
  117. package/bundled-skills/rclone-cli/references/commands/rclone_completion_powershell.md +3 -2
  118. package/bundled-skills/read-all-adrs/SKILL.md +35 -0
  119. package/bundled-skills/remote-gpu-trainer/scripts/verify_local.py +14 -1
  120. package/bundled-skills/research-prompt/SKILL.md +63 -0
  121. package/bundled-skills/run-deep-swe/SKILL.md +120 -0
  122. package/bundled-skills/senior-architect/scripts/architecture_diagram_generator.py +15 -2
  123. package/bundled-skills/senior-architect/scripts/dependency_analyzer.py +15 -2
  124. package/bundled-skills/senior-architect/scripts/project_architect.py +15 -2
  125. package/bundled-skills/senior-frontend/scripts/bundle_analyzer.py +14 -1
  126. package/bundled-skills/senior-frontend/scripts/frontend_scaffolder.py +14 -1
  127. package/bundled-skills/senior-fullstack/scripts/code_quality_analyzer.py +15 -2
  128. package/bundled-skills/senior-fullstack/scripts/fullstack_scaffolder.py +15 -2
  129. package/bundled-skills/senior-fullstack/scripts/project_scaffolder.py +15 -2
  130. package/bundled-skills/setup-help/SKILL.md +50 -0
  131. package/bundled-skills/shodan-reconnaissance/SKILL.md +2 -1
  132. package/bundled-skills/short/SKILL.md +28 -0
  133. package/bundled-skills/skill-creator/scripts/init_skill.py +15 -2
  134. package/bundled-skills/skill-creator/scripts/package_skill.py +29 -12
  135. package/bundled-skills/skill-creator/scripts/quick_validate.py +14 -2
  136. package/bundled-skills/skill-creator-ms/SKILL.md +1 -1
  137. package/bundled-skills/skill-installer/scripts/install_skill.py +42 -8
  138. package/bundled-skills/skill-installer/scripts/package_skill.py +29 -17
  139. package/bundled-skills/skill-installer/scripts/validate_skill.py +37 -22
  140. package/bundled-skills/stripe-integration/SKILL.md +7 -3
  141. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xctrace.py +7 -1
  142. package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xml_utils.py +7 -1
  143. package/bundled-skills/taisly-social-media-posting/SKILL.md +79 -0
  144. package/bundled-skills/technical-tutorials/SKILL.md +1 -1
  145. package/bundled-skills/telegram/scripts/setup_project.py +17 -2
  146. package/bundled-skills/time-ledger/SKILL.md +118 -0
  147. package/bundled-skills/trading-ledger/SKILL.md +121 -0
  148. package/bundled-skills/videodb/scripts/ws_listener.py +17 -4
  149. package/bundled-skills/voice-ai-development/SKILL.md +2 -1
  150. package/bundled-skills/vps-server-management/SKILL.md +72 -0
  151. package/bundled-skills/weaviate/scripts/weaviate_conn.py +20 -18
  152. package/bundled-skills/wgm/SKILL.md +137 -0
  153. package/bundled-skills/whatsapp-cloud-api/scripts/setup_project.py +16 -1
  154. package/bundled-skills/workorai/SKILL.md +137 -0
  155. package/bundled-skills/wp-site-health-auditor/SKILL.md +341 -0
  156. package/bundled-skills/wp-site-health-auditor/references/catalog.md +135 -0
  157. package/bundled-skills/writing-skills/render-graphs.js +13 -2
  158. package/bundled-skills/x-twitter-scraper/SKILL.md +3 -1
  159. package/bundled-skills/youtube-notetaker/scripts/serve.py +41 -31
  160. package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +16 -2
  161. package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +15 -1
  162. package/bundled-skills/youtube-transcript/SKILL.md +120 -0
  163. package/package.json +5 -1
  164. package/skills_index.json +786 -6
@@ -20,6 +20,19 @@ import re
20
20
  import sys
21
21
  from dataclasses import asdict, dataclass
22
22
  from pathlib import Path
23
+
24
+
25
+ def safe_user_path(path_value, base_dir="."):
26
+ """Resolve a CLI path under the current workspace."""
27
+ if base_dir != ".":
28
+ raise ValueError("Custom base directories are not supported for CLI paths")
29
+ base_path = Path.cwd().resolve()
30
+ resolved_path = Path(path_value).expanduser().resolve()
31
+ try:
32
+ resolved_path.relative_to(base_path)
33
+ except ValueError as exc:
34
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
35
+ return resolved_path
23
36
  from typing import Any, Iterable
24
37
 
25
38
  CONFIG_NAME_PATTERN = re.compile(r"^drizzle(?:[.-].+)?\.config\.(?:ts|js|mjs|cjs|mts|cts)$")
@@ -169,15 +182,14 @@ def iter_config_files(
169
182
  if explicit_configs:
170
183
  return configs, issues
171
184
 
172
- for current_root, dirnames, filenames in os.walk(root):
173
- dirnames[:] = [name for name in dirnames if name not in SKIP_DIR_NAMES]
174
- base = Path(current_root)
175
- for filename in filenames:
176
- if CONFIG_NAME_PATTERN.match(filename):
177
- path = (base / filename).resolve()
178
- if path not in seen:
179
- seen.add(path)
180
- configs.append(path)
185
+ for path in safe_user_path(root).rglob("*"):
186
+ if not path.is_file() or any(part in SKIP_DIR_NAMES for part in path.parts):
187
+ continue
188
+ if CONFIG_NAME_PATTERN.match(path.name):
189
+ resolved = path.resolve()
190
+ if resolved not in seen:
191
+ seen.add(resolved)
192
+ configs.append(resolved)
181
193
  return configs, issues
182
194
 
183
195
 
@@ -283,13 +295,11 @@ def discover_dirs(args: argparse.Namespace, root: Path) -> tuple[list[Path], lis
283
295
 
284
296
 
285
297
  def iter_text_files(directory: Path) -> Iterable[Path]:
286
- for current_root, dirnames, filenames in os.walk(directory):
287
- dirnames[:] = [name for name in dirnames if name not in SKIP_DIR_NAMES]
288
- base = Path(current_root)
289
- for filename in filenames:
290
- path = base / filename
291
- if path.suffix in TEXT_SUFFIXES:
292
- yield path
298
+ for path in safe_user_path(directory).rglob("*"):
299
+ if not path.is_file() or any(part in SKIP_DIR_NAMES for part in path.parts):
300
+ continue
301
+ if path.suffix in TEXT_SUFFIXES:
302
+ yield path
293
303
 
294
304
 
295
305
  def has_conflict_markers(path: Path) -> bool:
@@ -696,7 +706,7 @@ def report_as_text(root: Path, reports: list[DirectoryReport]) -> str:
696
706
 
697
707
  def main() -> int:
698
708
  args = parse_args()
699
- root = Path(args.root).resolve()
709
+ root = safe_user_path(args.root).resolve()
700
710
  dirs, discovery_issues = discover_dirs(args, root)
701
711
  reports: list[DirectoryReport] = []
702
712
  if discovery_issues:
@@ -41,7 +41,7 @@ The runtime ecosystem contract. Describes what the application needs to run.
41
41
  }
42
42
  ],
43
43
  "services": [
44
- {"type": "redis", "env_vars": {"REDIS_URL": "redis://localhost:6379"}}
44
+ {"type": "redis", "env_vars": {"REDIS_URL": "redis://:${HARNESS_REDIS_PASSWORD}@localhost:6379"}}
45
45
  ],
46
46
  "secrets": [
47
47
  {"name": "JWT_SECRET", "description": "JWT signing key", "test_value": "test-secret-do-not-use-in-prod"}
@@ -95,11 +95,24 @@ Start external dependencies (DB, Redis, etc.):
95
95
  ```bash
96
96
  #!/bin/bash
97
97
  set -euo pipefail
98
+ umask 077
99
+
100
+ mkdir -p harness/.runtime
101
+ HARNESS_ENV_FILE="${HARNESS_ENV_FILE:-harness/.runtime/env}"
102
+ if [ ! -f "$HARNESS_ENV_FILE" ]; then
103
+ HARNESS_POSTGRES_PASSWORD="$(openssl rand -hex 24)"
104
+ HARNESS_REDIS_PASSWORD="$(openssl rand -hex 24)"
105
+ {
106
+ printf 'HARNESS_POSTGRES_PASSWORD=%s\n' "$HARNESS_POSTGRES_PASSWORD"
107
+ printf 'HARNESS_REDIS_PASSWORD=%s\n' "$HARNESS_REDIS_PASSWORD"
108
+ } > "$HARNESS_ENV_FILE"
109
+ fi
110
+ . "$HARNESS_ENV_FILE"
98
111
 
99
112
  # Start PostgreSQL
100
113
  docker run -d --name harness-postgres \
101
114
  -p 127.0.0.1:5432:5432 \
102
- -e POSTGRES_PASSWORD=testpass \
115
+ -e POSTGRES_PASSWORD="$HARNESS_POSTGRES_PASSWORD" \
103
116
  postgres:16
104
117
 
105
118
  # Wait for ready
@@ -120,7 +133,8 @@ set -euo pipefail
120
133
 
121
134
  export PORT=8081
122
135
  export ENV=test
123
- export DATABASE_URL="postgres://postgres:testpass@localhost:5432/testdb?sslmode=disable"
136
+ . harness/.runtime/env
137
+ export DATABASE_URL="postgres://postgres:${HARNESS_POSTGRES_PASSWORD}@localhost:5432/testdb?sslmode=disable"
124
138
 
125
139
  # Start server
126
140
  go run cmd/api/main.go &
@@ -81,7 +81,7 @@ harness/
81
81
  },
82
82
  "test_alternatives": {
83
83
  "sqlite_in_memory": "DB_DRIVER=sqlite3 DB_URL=:memory:",
84
- "docker": "docker run -d --name test-pg -p 127.0.0.1:5433:5432 -e POSTGRES_PASSWORD=test postgres:16"
84
+ "docker": "HARNESS_POSTGRES_PASSWORD=$(openssl rand -hex 24); docker run -d --name test-pg -p 127.0.0.1:5433:5432 -e POSTGRES_PASSWORD=\"$HARNESS_POSTGRES_PASSWORD\" postgres:16"
85
85
  }
86
86
  }
87
87
  ],
@@ -94,7 +94,7 @@ harness/
94
94
  "required": false,
95
95
  "connection": {
96
96
  "url_env": "REDIS_URL",
97
- "default_url": "redis://localhost:6379"
97
+ "default_url": "redis://:${HARNESS_REDIS_PASSWORD}@localhost:6379"
98
98
  },
99
99
  "setup": {
100
100
  "docker_image": "redis:7",
@@ -221,11 +221,12 @@ echo "==> Setting up environment for ${PROJECT_NAME}..."
221
221
  {{#if (eq type "postgres")}}
222
222
  if ! docker ps -q -f name={{name}} | grep -q .; then
223
223
  echo "Starting PostgreSQL ({{name}})..."
224
+ : "${{{connection.password_env}}:=$(openssl rand -hex 24)}"
224
225
  docker run -d \
225
226
  --name {{name}} \
226
227
  -p 127.0.0.1:{{connection.default_port}}:5432 \
227
228
  -e POSTGRES_USER=${{{connection.user_env}}:-postgres} \
228
- -e POSTGRES_PASSWORD=${{{connection.password_env}}:-postgres} \
229
+ -e POSTGRES_PASSWORD="${{{connection.password_env}}}" \
229
230
  -e POSTGRES_DB=${{{connection.database_env}}:-{{../project_name}}} \
230
231
  {{setup.docker_image}}
231
232
  echo "Waiting for PostgreSQL to be ready..."
@@ -239,10 +240,11 @@ fi
239
240
  {{#if (eq type "mysql")}}
240
241
  if ! docker ps -q -f name={{name}} | grep -q .; then
241
242
  echo "Starting MySQL ({{name}})..."
243
+ : "${{{connection.password_env}}:=$(openssl rand -hex 24)}"
242
244
  docker run -d \
243
245
  --name {{name}} \
244
246
  -p 127.0.0.1:{{connection.default_port}}:3306 \
245
- -e MYSQL_ROOT_PASSWORD=${{{connection.password_env}}:-root} \
247
+ -e MYSQL_ROOT_PASSWORD="${{{connection.password_env}}}" \
246
248
  -e MYSQL_DATABASE=${{{connection.database_env}}:-{{../project_name}}} \
247
249
  {{setup.docker_image}}
248
250
  echo "Waiting for MySQL to be ready..."
@@ -262,7 +264,9 @@ fi
262
264
  {{#if (eq type "redis")}}
263
265
  if ! docker ps -q -f name={{name}} | grep -q .; then
264
266
  echo "Starting Redis ({{name}})..."
265
- docker run -d --name {{name}} -p 127.0.0.1:6379:6379 {{setup.docker_image}}
267
+ : "${HARNESS_REDIS_PASSWORD:=$(openssl rand -hex 24)}"
268
+ docker run -d --name {{name}} -p 127.0.0.1:6379:6379 {{setup.docker_image}} \
269
+ redis-server --requirepass "$HARNESS_REDIS_PASSWORD"
266
270
  echo "Redis started."
267
271
  fi
268
272
  {{/if}}
@@ -0,0 +1,333 @@
1
+ ---
2
+ name: effective-agent-skills
3
+ description: "Author and review high-quality agent skills with triggers, progressive disclosure, and safety notes."
4
+ category: development
5
+ risk: safe
6
+ source: community
7
+ source_repo: davidondrej/skills
8
+ source_type: community
9
+ date_added: "2026-07-07"
10
+ author: davidondrej
11
+ tags: [skills, authoring, quality]
12
+ tools: [claude, codex]
13
+ license: "MIT"
14
+ license_source: "https://github.com/davidondrej/skills/blob/main/LICENSE"
15
+ ---
16
+
17
+ # Agent Skills: A Complete Guide
18
+
19
+ ## When to Use
20
+
21
+ - Use when creating, editing, reviewing, or debugging an agent SKILL.md file.
22
+ - Use when you need quality guidance for triggers, examples, limitations, and safety notes.
23
+
24
+ A consolidated reference on what agent skills are, why they exist, how they work, and how to write effective ones.
25
+
26
+ ---
27
+
28
+ ## 1. What agent skills are
29
+
30
+ An Agent Skill is a folder containing a `SKILL.md` file (YAML frontmatter + markdown instructions), plus optional subfolders for scripts, references, and assets that the agent loads on demand.
31
+
32
+ ```
33
+ my-skill/
34
+ ├── SKILL.md # Required: metadata + instructions
35
+ ├── scripts/ # Optional: executable code (CLIs, validators, helpers)
36
+ ├── references/ # Optional: detailed docs loaded only when needed
37
+ └── assets/ # Optional: templates, fonts, static files
38
+ ```
39
+
40
+ Skills are an open standard (agentskills.io), originally created by Anthropic and adopted by OpenAI Codex, Cursor, Gemini CLI, Microsoft Agent Framework, Google ADK, and 40+ other agent products. A skill written once works across all compatible agents.
41
+
42
+ ---
43
+
44
+ ## 2. Why this abstraction exists
45
+
46
+ Base LLMs are generalists. Real work requires procedural knowledge, organizational context, and repeatable workflows. Every prior alternative had a failure mode:
47
+
48
+ | Approach | Problem |
49
+ |---|---|
50
+ | Stuff it into the system prompt | Always loaded → context bloat at scale |
51
+ | Re-paste instructions each session | No version control, no consistency |
52
+ | Fine-tuning | Slow, expensive, opaque, vendor-locked |
53
+ | MCP servers alone | Give the agent tools but no workflows for using them |
54
+
55
+ Skills solve four problems at once:
56
+
57
+ - **Context efficiency** — instructions load only when relevant
58
+ - **Repeatability** — multi-step procedures become auditable workflows
59
+ - **Composability** — multiple skills combine at runtime per task
60
+ - **Portability** — same files work across vendors and surfaces
61
+
62
+ Mental model: skills are to LLMs what man pages, runbooks, and team handbooks are to engineers — reference material loaded into working memory only when the task demands it.
63
+
64
+ ---
65
+
66
+ ## 3. How they work — progressive disclosure
67
+
68
+ The architectural core. Three-stage loading:
69
+
70
+ **Level 1 — Discovery (~100 tokens per skill, always in context):**
71
+ Only `name` + `description` from frontmatter are injected into the system prompt at startup. Agent knows the skill exists and when it applies. You can install dozens of skills with negligible overhead.
72
+
73
+ **Level 2 — Activation (<5,000 tokens, loaded on match):**
74
+ When the user's request matches a skill's description, the agent reads the full `SKILL.md` body into context.
75
+
76
+ **Level 3 — Execution (unbounded, on demand):**
77
+ The agent reads referenced files (`references/foo.md`) or runs scripts (`scripts/validate.py`) only as needed. Scripts can execute without their source being loaded into context at all.
78
+
79
+ This is why bundled content has no practical limit. Files don't consume tokens until accessed.
80
+
81
+ ---
82
+
83
+ ## 4. SKILL.md anatomy
84
+
85
+ ```markdown
86
+ ---
87
+ name: skill-name
88
+ description: What this skill does AND when to use it. Include trigger phrases the user will say.
89
+ ---
90
+
91
+ # Skill Name
92
+
93
+ ## Quick start
94
+ [Minimal working example]
95
+
96
+ ## Workflow
97
+ [Step-by-step procedure with checklists]
98
+
99
+ ## Output format
100
+ [What the user/agent should expect back]
101
+
102
+ ## Advanced
103
+ [Link to references/ for rarely-needed detail]
104
+ ```
105
+
106
+ Frontmatter constraints:
107
+ - `name` is lowercase, hyphens only, 1–64 chars, **exactly matches the parent folder name**
108
+ - Avoid `<` and `>` in frontmatter (they can inject into the system prompt)
109
+ - Invalid YAML silently prevents loading
110
+
111
+ Optional standard fields:
112
+ - `disable-model-invocation: true` — stops the agent from auto-loading the skill based on the conversation; it can only be triggered manually (e.g. `/skill-name`). Now a standard Agent Skills spec field, so it works across spec-compliant clients (Claude Code, Copilot, etc.), not just Claude. Caveat: it prevents auto-invocation, but some clients (Claude Code, open bug) still inject the `description` into context, so it doesn't always save the discovery-level tokens. Use for manual-only utilities you don't want firing automatically.
113
+
114
+ ---
115
+
116
+ ## 5. Two design philosophies
117
+
118
+ Skills tend to fall into one of two patterns. Both are valid; they solve different problems.
119
+
120
+ ### Pattern A — Capability primitives (tool wrappers)
121
+ The skill is a thin wrapper over a deterministic CLI or script. Logic lives in code. SKILL.md teaches the agent how to invoke it.
122
+
123
+ - **Adds**: new capabilities (search, email, browser, API access)
124
+ - **Reliability via**: shell tools, not prompts
125
+ - **Typical length**: 30–80 lines, mostly command examples
126
+ - **Use when**: the bottleneck is "the agent can't do X"
127
+
128
+ ### Pattern B — Process primitives (cognitive disciplines)
129
+ The skill encodes a methodology the agent should follow. Pure prompt engineering — no scripts needed.
130
+
131
+ - **Adds**: structured workflows (TDD, code review, design alignment, debugging loops)
132
+ - **Reliability via**: explicit procedure, checklists, validation loops
133
+ - **Use when**: the bottleneck is "the agent's output quality or process is bad"
134
+
135
+ A mature setup uses both. Pattern A gives the agent better tools. Pattern B gives it better methods for using them.
136
+
137
+ ---
138
+
139
+ ## 6. How to write effective skills — do this
140
+
141
+ ### Description as routing contract
142
+ The description is the only thing the agent sees before deciding to load the skill. If your skill doesn't trigger, the description is wrong 95% of the time, not the body.
143
+
144
+ Include three elements:
145
+ 1. **What** the skill does (one phrase)
146
+ 2. **When** to use it (trigger phrases, situations)
147
+ 3. **Differentiator** vs related skills (prevents routing conflicts)
148
+
149
+ Pattern: `"X via Y. Use for [situations]. [Differentiator: no Z required / faster than W / handles edge case V]."`
150
+
151
+ **Never summarize the full workflow in the description.** If the description contains a step-by-step summary of *how* the skill works, the agent tends to follow that summary and skip loading the body. Describe *what* and *when*, never *how*. The description answers "should I open this skill now?" — not "what are the steps?"
152
+
153
+ ### Keep SKILL.md lean
154
+ - Beyond a certain length, you're usually encoding logic that should be in a script or referenced file
155
+
156
+ ### Bash-first, prose-second
157
+ Concrete command examples with inline comments beat prose explanations. The agent pattern-matches on syntax. Show, don't describe.
158
+
159
+ ### Push determinism into code
160
+ Anything fragile, repetitive, or where variation is a bug → script. Use markdown only for tasks requiring judgment.
161
+
162
+ ### Match strictness to task fragility (degrees of freedom)
163
+ Scale instruction rigidity to how costly a wrong move is:
164
+ - **Loose natural-language heuristics** when many approaches are valid (e.g. code review).
165
+ - **Pseudocode or templates** when there's a preferred pattern but variation is acceptable (e.g. report format).
166
+ - **Exact scripts and strict step lists** when the workflow is fragile, error-prone, or consistency-critical (e.g. migrations, document patching).
167
+
168
+ ### Build validation loops
169
+ The single biggest output quality improvement: state a verify → fix → re-verify loop explicitly.
170
+
171
+ - Document skills: visual QA pass before delivery
172
+ - Code skills: tests pass + zero type errors before completion
173
+ - Data skills: schema validation before output
174
+
175
+ ### State-check before action
176
+ Don't assume setup is done. Instruct the agent to verify state, then branch:
177
+ ```
178
+ First check if X is configured: [command]
179
+ If not, walk the user through setup: [steps]
180
+ ```
181
+
182
+ ### Just-in-time loading with explicit pointers
183
+ Tell the agent exactly when to read each referenced file:
184
+ ```
185
+ For standard cases, follow the steps below.
186
+ For [specific edge case], read references/edge-cases.md first.
187
+ ```
188
+
189
+ ### Keep references one level deep
190
+ Link referenced files directly from SKILL.md. Never build chains (SKILL.md → advanced.md → details.md → actual.md) — the agent may preview nested files only partially and miss critical instructions. Add a table of contents to any reference file longer than 100 lines.
191
+
192
+ ### Document output formats
193
+ If your script returns structured data, show the agent what it looks like. Enables reliable downstream parsing.
194
+
195
+ ### Defer to --help for completeness
196
+ List the 80% common operations in SKILL.md. Tell the agent to run `tool --help` for the rest. Keeps SKILL.md small without losing functionality.
197
+
198
+ ### Compose primitives, don't bundle workflows
199
+ One skill = one capability or one discipline. Resist bundling concerns into "the X workflow." Multiple small skills combine at runtime; one large skill is rigid.
200
+
201
+ ### Cite established principles when applicable
202
+ If your skill encodes a known engineering methodology (TDD, DDD, red-green-refactor), name the source. Gives the agent a coherent model to align with and gives users a way to verify the design.
203
+
204
+ ### Persistent artifacts for cross-session memory
205
+ Skills can write to repo-level files (CONTEXT.md, ADRs, decision logs) that future agent sessions read. This is how you fight the "agents have no memory" problem at the architecture level.
206
+
207
+ ---
208
+
209
+ ## 7. What not to do — anti-patterns
210
+
211
+ ### Don't re-teach what the model already knows
212
+ Every line in SKILL.md should provide context the model doesn't already have. No Python syntax tutorials. No "what is git." Challenge every paragraph.
213
+
214
+ ### Don't include human-facing docs
215
+ No README.md, no CHANGELOG.md, no INSTALLATION_GUIDE.md inside the skill folder. Skills are for agents.
216
+
217
+ ### Don't write vague descriptions
218
+ - Bad: "A helpful skill for documents"
219
+ - Good: "Fill PDF form fields, extract form data, flatten completed PDFs. Use when the user mentions PDF forms, fillable forms, or programmatic field population."
220
+
221
+ ### Don't bundle library code
222
+ If you need a parsing library, install via npm/pip. Don't paste source into the skill.
223
+
224
+ ### Don't write monolithic mega-skills
225
+ If one skill does design + planning + implementation + testing + deployment, you've built a framework, not a skill. Split it.
226
+
227
+ ### Don't assume the agent will infer
228
+ Be explicit about every step that matters.
229
+ - Bad: "Then deploy it."
230
+ - Good: "Run `npm run deploy:staging` and wait for HTTP 200 from /healthz before reporting success."
231
+
232
+ ### Don't write style-only variants
233
+ A skill that just changes tone or formatting belongs in user preferences or a system prompt, not a skill.
234
+
235
+ ### Don't ignore failure modes
236
+ For every workflow step that can fail, document what failure looks like and what to do. Happy-path-only skills break in production.
237
+
238
+ ### Don't include time-sensitive information
239
+ "As of Q4 2024..." rots fast. Fetch live data via script or omit.
240
+
241
+ ### Don't use absolute paths
242
+ Always relative. Forward slashes regardless of OS. Use runtime placeholders for skill-directory references.
243
+
244
+ ### Don't trust unfamiliar skills
245
+ Skills can execute arbitrary code and steer agent behavior. A malicious skill is a data exfiltration vector. Audit `scripts/` for unexpected network calls, file access outside expected scope, or hidden instructions in references. Watch for typosquatted skill names. Sandbox execution environments.
246
+
247
+ ---
248
+
249
+ ## 8. Authoring workflow
250
+
251
+ 1. **Identify the gap.** Run your agent on real tasks. Where does it consistently fail or need re-prompting? That's a skill candidate.
252
+ 2. **Decide the pattern.** Capability primitive (need new tools) or process primitive (need better methodology)?
253
+ 3. **Draft the description first.** What + when + differentiator. Read it back: would the agent know when to fire it?
254
+ 4. **Write the smallest body that works.** Add only when testing reveals gaps.
255
+ 5. **Move detail to references/ once SKILL.md grows too long.**
256
+ 6. **Test triggering.** Ask the agent something the skill should handle without invoking it explicitly. If it doesn't fire, fix the description.
257
+ 7. **Test execution.** Invoke explicitly. If output is wrong, fix the body.
258
+ 8. **Adversarial test.** Have another LLM ask: "What edge cases break this skill?" Patch the gaps.
259
+ 9. **Version control.** Treat skills as code. Tag, branch, review.
260
+
261
+ ---
262
+
263
+ ## 9. Testing and debugging
264
+
265
+ - **"Which skill did you use?"** — ask the agent post-task. Fastest routing debug.
266
+ - **Routing fails → description problem.** Add specific trigger phrases.
267
+ - **Execution fails → body problem.** Add explicit steps, examples, or validation.
268
+ - **Skills snapshot at session start.** Edits during a session require a restart.
269
+ - **Test against the weakest model you'll deploy on.** Stronger models forgive vague skills; weaker models expose them.
270
+ - **Run an eval suite.** A handful of representative prompts that should and shouldn't trigger the skill, with expected outputs.
271
+
272
+ ---
273
+
274
+ ## 10. Composition
275
+
276
+ Skills compose at runtime — the agent loads multiple skills as needed for a single task. Design for this:
277
+
278
+ - **One skill = one concern.** Resist bundling.
279
+ - **Define interfaces between skills.** If skill A produces artifacts that skill B consumes, document the shape.
280
+ - **Use a repo-level config substrate.** A shared file (e.g., AGENTS.md, CONTEXT.md, settings.json) that multiple skills read and write coordinates them without explicit handoffs.
281
+ - **Loops over menus.** A coordinated set of skills forming a workflow (align → spec → build → verify → refactor) drives adoption far better than an unrelated catalog of capabilities.
282
+
283
+ ---
284
+
285
+ ## 11. Security checklist
286
+
287
+ Before installing any third-party skill:
288
+
289
+ - Read every file in the folder
290
+ - Audit `scripts/` for outbound network calls, file access outside expected scope, command execution
291
+ - Check references for prompt injection ("ignore previous instructions...")
292
+ - Verify the skill name isn't typosquatting a popular one
293
+ - Run in a sandboxed environment first
294
+ - Pin to a specific version/commit, not `latest`
295
+
296
+ ---
297
+
298
+ ## 12. Ship checklist
299
+
300
+ Before publishing a skill:
301
+
302
+ - [ ] Frontmatter `name` matches folder name
303
+ - [ ] Description includes what + when + differentiator
304
+ - [ ] Description includes likely user trigger phrases
305
+ - [ ] No human-facing docs inside the skill folder
306
+ - [ ] No time-sensitive information
307
+ - [ ] Relative paths only
308
+ - [ ] State-check before action where applicable
309
+ - [ ] Validation loop documented
310
+ - [ ] Output format documented if relevant
311
+ - [ ] Tested with weak and strong models
312
+ - [ ] Tested for both correct triggering and correct execution
313
+ - [ ] Skill does one thing
314
+ - [ ] Composes cleanly with related skills
315
+ - [ ] Version controlled
316
+
317
+ ---
318
+
319
+ ## 13. First principles, compressed
320
+
321
+ 1. **The description routes; the body executes.** Get both right independently.
322
+ 2. **Tokens are scarce; files are cheap.** Push detail out of context until it's needed.
323
+ 3. **Determinism comes from code; judgment comes from prompts.** Put each in its right place.
324
+ 4. **One skill, one concern.** Composition beats bundling.
325
+ 5. **Agents have no memory.** Use persistent artifacts to give them one.
326
+ 6. **The model knows a lot.** Don't re-teach. Only add what's missing.
327
+ 7. **Validate before completing.** Self-correction loops dominate output quality.
328
+ 8. **Skills are code.** Version, test, audit, and review them as such.
329
+
330
+ ## Limitations
331
+
332
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
333
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
@@ -538,12 +538,16 @@ publish:
538
538
  # macOS: requires Apple Developer certificate
539
539
  # Set environment variables before building:
540
540
  export CSC_LINK="path/to/Developer_ID_Application.p12"
541
- export CSC_KEY_PASSWORD="your-password"
541
+ read -rsp "macOS certificate password: " CSC_KEY_PASSWORD
542
+ echo
543
+ export CSC_KEY_PASSWORD
542
544
 
543
545
  # Windows: requires EV or standard code signing certificate
544
546
  # Set environment variables:
545
547
  export WIN_CSC_LINK="path/to/code-signing.pfx"
546
- export WIN_CSC_KEY_PASSWORD="your-password"
548
+ read -rsp "Windows certificate password: " WIN_CSC_KEY_PASSWORD
549
+ echo
550
+ export WIN_CSC_KEY_PASSWORD
547
551
 
548
552
  # Build signed app
549
553
  npx electron-builder --mac --win --publish never
@@ -107,13 +107,10 @@ sudo -E bash "$tmpdir/nodesource-setup.sh"
107
107
  sudo apt install -y nodejs
108
108
  \`\`\`
109
109
 
110
- **Windows (using Chocolatey):**
110
+ **Windows (using winget):**
111
111
  \`\`\`powershell
112
- # Install Chocolatey if not installed
113
- Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
114
-
115
112
  # Install Node.js
116
- choco install nodejs
113
+ winget install OpenJS.NodeJS.LTS
117
114
  \`\`\`
118
115
 
119
116
  ### Step 2: Verify Installation
@@ -15,8 +15,12 @@
15
15
 
16
16
  const fs = require('fs');
17
17
  const path = require('path');
18
+ const sanitizeFilename = require('sanitize-filename');
18
19
 
19
- const projectPath = process.argv[2];
20
+ const rawProjectPath = process.argv[2];
21
+ const projectPath = rawProjectPath
22
+ ? path.resolve(process.cwd(), sanitizeFilename(path.basename(rawProjectPath)))
23
+ : null;
20
24
  const withDocs = process.argv.includes('--docs');
21
25
 
22
26
  if (!projectPath) {
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: fable-safe-prompt
3
+ description: "Rewrite allowed prompts to reduce false-positive safety triggers without bypassing policy or changing intent."
4
+ category: agent-behavior
5
+ risk: safe
6
+ source: community
7
+ source_repo: davidondrej/skills
8
+ source_type: community
9
+ date_added: "2026-07-07"
10
+ author: davidondrej
11
+ tags: [prompting, safety, guardrails]
12
+ tools: [claude, codex]
13
+ license: "MIT"
14
+ license_source: "https://github.com/davidondrej/skills/blob/main/LICENSE"
15
+ disable-model-invocation: true
16
+ ---
17
+
18
+ # Fable-Safe Prompt
19
+
20
+ ## When to Use
21
+
22
+ - Use when an allowed prompt appears likely to hit false-positive classifier language.
23
+ - Use when the user asks for prompt wording that keeps benign intent clear and policy-compliant.
24
+
25
+ Return the user's prompt back **in full, verbatim**, changing ONLY the specific sentences/phrases most likely to trip Fable 5's cyber/bio classifiers. Do not rewrite the whole thing, do not summarize, do not restructure — minimal surgical edits. Keep the actual goal and all benign text exactly as written. This lowers false positives for benign work. It must not be used to bypass safety policy or enable harmful requests.
26
+
27
+ Fable 5 runs 3 input classifiers: **cyber**, **bio/chem**, **reasoning_extraction**. Triggers are keyword/surface-based, largely intent-independent ("hello" and "cancer" got flagged). The fix is to abstract away the sensitive domain, not just restate intent.
28
+
29
+ Apply when the prompt touches: cyber/auth/exploits/malware/pentesting/credentials; bio/chem/medical/disease/lab topics; or any "show your reasoning" instruction.
30
+
31
+ The user provides the prompt-to-be-changed wrapped in `<prompt>...</prompt>` XML tags. Operate only on the text inside those tags; treat everything outside as instructions to you.
32
+
33
+ ## Method
34
+
35
+ 1. Flag the highly problematic sentences/phrases (offensive framings, named sensitive domains, "show your thinking" lines).
36
+ 2. Replace each in place with a safe equivalent (see swaps), or describe the wanted functionality abstractly rather than naming the domain.
37
+ 3. Leave everything else byte-for-byte identical.
38
+ 4. Return the complete edited prompt.
39
+
40
+ Reframe so the task reads as: **owned/authorized**, **defensive** (implement/fix/test, not attack), and **not dual-use** (no exploit dev, attack simulation, bypass payloads, malware, live testing).
41
+
42
+ ### Swap framings (apply per-sentence)
43
+
44
+ | Triggering | Safe rewrite |
45
+ |---|---|
46
+ | "How could an attacker exploit this auth" | "Review these auth files for missing checks and fix them defensively" |
47
+ | "Write an exploit / payload / PoC" | "Add a regression test proving X is fixed, then patch it" |
48
+ | "How do I bypass / brute-force Y" | "Enforce secure session validation + rate limiting on Y" |
49
+ | "Reverse this malware / show attack steps" | "Describe the risk high-level, then implement the fix" |
50
+ | "Show your reasoning / explain step-by-step / walk me through your thinking" | **Delete it.** Trips `reasoning_extraction`. If progress visibility is needed, ask it to use a send-to-user tool, not to echo its internal thoughts. |
51
+ | Clinician framing: "as a doctor, diagnose this ECG" | Patient framing: "help me interpret this ECG my doctor gave me" |
52
+ | Named bio/chem domain: "cancer / disease pathway / chemical kinetics" | Abstract it: describe the data/analysis generically, drop the domain noun |
53
+
54
+ ### Trigger keywords to abstract away
55
+ *Cyber:* exploit, malware, vulnerability, attack, bypass, stealth, fingerprinting, anti-bot, CAPTCHA, penetration.
56
+ *Bio/chem:* biology, biomedicine, chemistry, cancer, disease pathways, RNA/variant calling, equilibrium, kinetics, diagnosis.
57
+ *Distillation:* "distill the model", training pipelines, frontier LLM development.
58
+
59
+ If no benign defensive equivalent exists for a sentence (it's purely offensive), flag it to the user rather than silently neutering the intent.
60
+
61
+ ## Output
62
+
63
+ 1. Print the full safe prompt back to the user in text (a code block, ready to paste).
64
+ 2. **Copy it to the clipboard** so the user can paste immediately:
65
+ ```bash
66
+ pbcopy <<'EOF'
67
+ <the full safe prompt>
68
+ EOF
69
+ ```
70
+ Confirm in one line that it's on the clipboard.
71
+ 3. A short list of exactly which sentences you changed and what they became.
72
+ 4. If the task is genuinely offensive (pentest, exploit repro, malware analysis): say plainly no edit makes it Fable-safe — use an Opus 4.8 fallback or vetted Mythos, not Fable 5.
73
+
74
+ **Hard truth:** you can't reliably stop Fable 5 guardrails. Robust API setups also treat `stop_reason: "refusal"` (HTTP 200, `stop_details.category` = `cyber`/`bio`) as a route to an Opus 4.8 fallback — mention only if the user controls the integration.
75
+
76
+ ## Limitations
77
+
78
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
79
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.