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
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: push-skill-to-github
3
+ description: "Commit and push skill changes to the configured skills repository after review and validation."
4
+ category: development
5
+ risk: critical
6
+ source: community
7
+ source_repo: davidondrej/skills
8
+ source_type: community
9
+ date_added: "2026-07-07"
10
+ author: davidondrej
11
+ tags: [skills, git, publishing]
12
+ tools: [claude, codex]
13
+ license: "MIT"
14
+ license_source: "https://github.com/davidondrej/skills/blob/main/LICENSE"
15
+ ---
16
+
17
+ # Push Skills to GitHub
18
+
19
+ ## When to Use
20
+
21
+ - Use when skill changes are ready to commit and push to the configured skills repo.
22
+ - Use when the user asks to save or publish skill updates after validation.
23
+
24
+ For committing any skill change to the user's private skills repo, git root **`~/.agents`** (this is also the canonical skill folder; `.claude` and `.pi/agent/skills` symlink to `~/.agents/skills`). Pushes here auto-publish a sanitized public mirror to `davidondrej/skills` — never push directly to that public repo.
25
+
26
+ Use this after creating or editing a skill. If the skill is distributed to all agents, do that first (`distribute-skill-to-all-agents`), then run this to push the canonical copy.
27
+
28
+ ## Steps
29
+
30
+ **Not in cmux?** (no `$CMUX_WORKSPACE_ID`): skip the cmux pane steps — just run the git commands from step 2 directly in any available terminal, then verify the push output.
31
+
32
+ 1. **Open a fresh cmux pane** in the current workspace, no focus steal:
33
+ ```bash
34
+ cmux new-pane --type terminal --direction right --workspace "$CMUX_WORKSPACE_ID" --focus false
35
+ cmux list-panes --workspace "$CMUX_WORKSPACE_ID" # note the NEW pane + its surface ref
36
+ ```
37
+ 2. **Stage, commit, push** in `~/.agents` (send to the new pane's surface):
38
+ ```bash
39
+ cmux send --surface surface:NEW 'cd ~/.agents && git add -A && git commit -m "<concise message>" && git push'
40
+ cmux send-key --surface surface:NEW enter
41
+ ```
42
+ 3. **Verify** the push landed:
43
+ ```bash
44
+ sleep 2
45
+ cmux read-screen --surface surface:NEW | tail -15 # expect "main -> main"
46
+ ```
47
+ 4. **Close the pane** once confirmed:
48
+ ```bash
49
+ cmux close-surface --surface surface:NEW
50
+ cmux list-panes --workspace "$CMUX_WORKSPACE_ID" # confirm the pane is gone
51
+ ```
52
+
53
+ ## Notes
54
+ - Always run git from `~/.agents` (the repo root), not `~/.agents/skills`.
55
+ - Write a concise, specific commit message describing the skill change.
56
+ - Only push to GitHub when the user asks. Don't push speculatively.
57
+
58
+ ## Limitations
59
+
60
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
61
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
@@ -18,10 +18,11 @@ Generate the autocompletion script for powershell.
18
18
  To load completions in your current shell session:
19
19
 
20
20
  ```console
21
- rclone completion powershell | Out-String | Invoke-Expression
21
+ rclone completion powershell | Out-File -Encoding utf8 "$HOME\Documents\PowerShell\rclone-completion.ps1"
22
22
  ```
23
23
 
24
- To load completions for every new session, add the output of the above command
24
+ Inspect the generated script, then dot-source it from your profile if you want completions
25
+ for every new session.
25
26
  to your powershell profile.
26
27
 
27
28
  If output_file is "-" or missing, then the output will be written to stdout.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: read-all-adrs
3
+ description: "Read every ADR in a project before summarizing architectural context or decisions."
4
+ category: productivity
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: [adr, documentation, architecture]
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
+ <!-- TODO(David): write the strong wording here -->
19
+
20
+ ## When to Use
21
+
22
+ - Use when the user explicitly asks to load ADR context.
23
+ - Use when architectural decisions must be understood before changing or judging a project.
24
+
25
+ Read EVERY single ADR `.md` file in this project's `docs/adr/` folder, start to
26
+ finish.
27
+
28
+ Do not skim. Read each ADR completely before summarizing.
29
+
30
+ Read every single ADR file, for this project, in full.
31
+
32
+ ## Limitations
33
+
34
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
35
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
@@ -22,6 +22,19 @@ import sys
22
22
  from pathlib import Path
23
23
 
24
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
36
+
37
+
25
38
  def main() -> int:
26
39
  ap = argparse.ArgumentParser()
27
40
  ap.add_argument("ckpt_dir", help="Directory containing ablation subdirs (each with best.pth + best_metrics.json)")
@@ -33,7 +46,7 @@ def main() -> int:
33
46
  "needed only when a checkpoint pickles non-tensor objects (e.g. an args Namespace); OFF by default")
34
47
  args = ap.parse_args()
35
48
 
36
- root = Path(args.ckpt_dir)
49
+ root = safe_user_path(args.ckpt_dir)
37
50
  if not root.exists():
38
51
  print(f"ERROR: {root} does not exist")
39
52
  return 1
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: research-prompt
3
+ description: "Turn vague research needs into one precise deep-research prompt with context and output criteria."
4
+ category: research
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: [research, prompting, briefs]
12
+ tools: [claude, codex]
13
+ license: "MIT"
14
+ license_source: "https://github.com/davidondrej/skills/blob/main/LICENSE"
15
+ ---
16
+
17
+ # Research Prompt
18
+
19
+ ## When to Use
20
+
21
+ - Use when the user wants a deep-research brief or researcher prompt.
22
+ - Use when a vague research question needs to become one precise self-contained paragraph.
23
+
24
+ Goal: turn a vague research need into ONE self-contained paragraph that a researcher with zero prior knowledge of the project can act on with zero back-and-forth.
25
+
26
+ ## Rules
27
+
28
+ - **One paragraph.** No headers, no bullet list in the deliverable.
29
+ - **Prompt the job, not the topic.** Give search handles (timeframe, ranking, source type, decision logic) — not just a subject.
30
+ - **Assume zero prior knowledge.** Write for a researcher who has never heard of the project. Open by explaining, in plain English, what the project/product is, why it exists, and the current situation — so they understand what's going on, what we need, and why we need it.
31
+ - **Lead with the goal + decision.** Right after that explainer, state the single question the research must answer and the decision/use it informs.
32
+ - **Embed all context.** Names, dates, product, prior known facts, constraints. The researcher must not need to ask anything or guess.
33
+ - **Number the sub-questions inline** (1, 2, 3…) so coverage is explicit. Keep to 3–6. One mission per prompt — don't cram unrelated questions.
34
+ - **State constraints.** What to include, what to avoid (e.g. "only non-Chinese competitors", "no marketing fluff").
35
+ - **Source hierarchy.** Prefer primary sources (official docs, GitHub, papers, filings, changelogs); forums/X/Reddit are weak signal only, never factual proof.
36
+ - **Contradiction handling.** If sources conflict, separate confirmed facts / inference / unresolved uncertainty — don't force fake consensus. Flag low-confidence claims for verification.
37
+ - **Completion bar (define "done").** Don't stop at the first plausible answer. Corroborate each key claim with multiple independent primary sources where they exist; where sources are scarce, say so explicitly instead of padding. Keep going until every numbered sub-question is covered to this bar.
38
+ - **Gap round before finishing.** Require a final self-critique pass: list gaps, contradictions, and any single-source claims, then run another round of searches to close them — repeat until clean.
39
+ - **Constrain output hard, method loosely.** Be strict on the deliverable; leave the search path flexible so the researcher can explore.
40
+ - **Demand a fixed output per finding:** source link + specific claim + one-line "why it matters / why a viewer should care".
41
+ - Verifiable, citable facts only. No opinions.
42
+ - **Last sentence:** instruct them to output everything into a single detailed markdown file.
43
+
44
+ ## Process
45
+
46
+ 1. Pull context from the relevant project files / conversation (dates, names, known facts, audience, end use), and write a 1–2 sentence plain-English explainer of what the project is and why it exists for a reader who knows nothing.
47
+ 2. Identify the ONE question the research answers.
48
+ 3. Draft 3–6 numbered sub-questions that fully cover it.
49
+ 4. Add include/avoid constraints + the per-finding output format.
50
+ 5. Compress to one clean paragraph. Cut filler.
51
+
52
+ ## Template
53
+
54
+ > [For a reader with zero prior knowledge: in 1–2 plain-English sentences, what the project/product is, why it exists, and the current situation.] Research [TOPIC + key identifying facts] to answer one question: [THE QUESTION] — for [DECISION / END USE]. Find: (1) …; (2) …; (3) …; (4) …. [Constraints: include X, avoid Y.] Prefer primary sources; treat forums/social as weak signal only; if sources conflict, separate fact from inference and flag what needs verification. Don't stop at the first plausible answer: corroborate each key claim with multiple independent primary sources where they exist (and say so explicitly where they don't), continuing until every numbered question is covered to that bar. Before finishing, do a self-critique pass — list gaps, contradictions, and any single-source claims, then run another round of searches to close them, repeating until clean. For each point, give the source link, the specific claim, and a one-line "why it matters". No marketing fluff — verifiable, citable facts only. Output everything into a single detailed markdown file.
55
+
56
+ ## Executing the prompt
57
+
58
+ To run the finished prompt with an AI researcher, execute it via DeepAPI `POST /v1/research/deep` — follow the `deep-research` skill.
59
+
60
+ ## Limitations
61
+
62
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
63
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: run-deep-swe
3
+ description: "Run reproducible DeepSWE coding-agent benchmark evaluations through OpenRouter and mini-swe-agent."
4
+ category: agent-evaluation
5
+ risk: critical
6
+ source: community
7
+ source_repo: davidondrej/skills
8
+ source_type: community
9
+ date_added: "2026-07-07"
10
+ author: davidondrej
11
+ tags: [benchmark, deepswe, openrouter, evaluation]
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
+ # Run DeepSWE via OpenRouter
19
+
20
+ ## When to Use
21
+
22
+ - Use when the user wants to benchmark a model on DeepSWE or mini-swe-agent tasks.
23
+ - Use when you need a reproducible coding-agent evaluation plan and output artifacts.
24
+
25
+ DeepSWE (deepswe.datacurve.ai) is a 113-task Harbor-compatible coding-agent benchmark. It runs via **Pier** (Harbor fork) driving **mini-swe-agent** (model-agnostic). Any model reachable through OpenRouter can be scored.
26
+
27
+ ## Prerequisites — state-check first
28
+
29
+ ```bash
30
+ which uv git docker || echo "MISSING: install uv, git, docker"
31
+ docker info >/dev/null 2>&1 || echo "MISSING: Docker daemon not running (Pier's default sandbox)"
32
+ echo "OPENROUTER_API_KEY set? ${OPENROUTER_API_KEY:+YES}"
33
+ ```
34
+
35
+ **Docker must be running** — Pier sandboxes each task in Docker by default (`--env modal` for cloud instead).
36
+
37
+ `OPENROUTER_API_KEY` must already be present in the environment. If it is unset,
38
+ ask the user to configure their preferred secret-management path; do not read
39
+ shell startup files, print secrets, or invent a key.
40
+
41
+ ## Setup
42
+
43
+ ```bash
44
+ git clone https://github.com/datacurve-ai/deep-swe && cd deep-swe
45
+ uv tool install datacurve-pier # PyPI (preferred)
46
+ # or: uv tool install git+https://github.com/datacurve-ai/pier
47
+ # pier bundles mini-swe-agent as the --agent driver
48
+ ```
49
+
50
+ Run all `pier` commands from inside `deep-swe/`, using relative `-p tasks/...`.
51
+
52
+ ## OpenRouter wiring (the part the docs don't spell out)
53
+
54
+ mini-swe-agent has a native OpenRouter model class. Both routes below use `OPENROUTER_API_KEY` and the OpenRouter slug (`vendor/model`, e.g. `minimax/minimax-m3`):
55
+
56
+ **Route A — native OpenRouter class (preferred, hits openrouter.ai/api/v1 directly):**
57
+ ```bash
58
+ pier run -p deep-swe/tasks --agent mini-swe-agent \
59
+ --model minimax/minimax-m3 --model-class openrouter
60
+ ```
61
+
62
+ **Route B — LiteLLM provider prefix (fallback; same key):**
63
+ ```bash
64
+ pier run -p deep-swe/tasks --agent mini-swe-agent \
65
+ --model openrouter/minimax/minimax-m3
66
+ ```
67
+
68
+ Notes:
69
+ - Slug = the exact OpenRouter slug. Verify it at openrouter.ai/models before running.
70
+ - Free/zero-cost models: OpenRouter cost tracking can error. Set `export MSWEA_COST_TRACKING=ignore_errors`.
71
+ - Flag spelling can vary by version — confirm with `pier run --help` and `mini --help`.
72
+
73
+ ## Smoke test FIRST (1 task — do this before any full run)
74
+
75
+ Always validate end-to-end wiring on a single task before spending tokens on the corpus:
76
+
77
+ ```bash
78
+ pier run -p deep-swe/tasks/<task-id> --agent mini-swe-agent \
79
+ --model minimax/minimax-m3 --model-class openrouter
80
+ # list available task ids:
81
+ ls deep-swe/tasks
82
+ ```
83
+
84
+ Pass criteria: run completes, model returns actions (not auth/format errors), a score/trajectory is emitted. If it 401s → key wrong. If "provider not provided"/"model not mapped" → fix slug or switch route.
85
+
86
+ ## Subset run (deterministic sample)
87
+
88
+ ```bash
89
+ pier run -p deep-swe/tasks --agent mini-swe-agent \
90
+ --model minimax/minimax-m3 --model-class openrouter \
91
+ --n-tasks 10 --sample-seed 0
92
+ ```
93
+
94
+ ## Full 113-task corpus (costs tokens + time — confirm with user first)
95
+
96
+ ```bash
97
+ pier run -p deep-swe/tasks --agent mini-swe-agent \
98
+ --model minimax/minimax-m3 --model-class openrouter
99
+ # add `--env modal` to run in parallel Modal sandboxes (needs Modal configured)
100
+ ```
101
+
102
+ ## Output & leaderboard
103
+
104
+ - Trials land in `jobs/<run>/<trial_id>/`. Inspect with `pier view jobs/<run>`, `pier analyze jobs/<run>`, or `pier critique run jobs/<run>`.
105
+ - Report: the exact command used, pass/fail, score, and any blockers.
106
+ - Submit results for the official leaderboard to: **<email-address>**
107
+
108
+ ## Failure modes
109
+
110
+ | Symptom | Cause | Fix |
111
+ |---|---|---|
112
+ | HTTP 401 | bad/missing key | re-export `OPENROUTER_API_KEY` |
113
+ | "LLM Provider NOT provided" | missing slug prefix | use Route B `openrouter/...` or Route A with `--model-class openrouter` |
114
+ | "model isn't mapped"/cost error | unknown cost for model | `export MSWEA_COST_TRACKING=ignore_errors` |
115
+ | unknown flag | version drift | check `pier run --help` |
116
+
117
+ ## Limitations
118
+
119
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
120
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.
@@ -9,13 +9,26 @@ import sys
9
9
  import json
10
10
  import argparse
11
11
  from pathlib import Path
12
+
13
+
14
+ def safe_user_path(path_value, base_dir="."):
15
+ """Resolve a CLI path under the current workspace."""
16
+ if base_dir != ".":
17
+ raise ValueError("Custom base directories are not supported for CLI paths")
18
+ base_path = Path.cwd().resolve()
19
+ resolved_path = Path(path_value).expanduser().resolve()
20
+ try:
21
+ resolved_path.relative_to(base_path)
22
+ except ValueError as exc:
23
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
24
+ return resolved_path
12
25
  from typing import Dict, List, Optional
13
26
 
14
27
  class ArchitectureDiagramGenerator:
15
28
  """Main class for architecture diagram generator functionality"""
16
29
 
17
30
  def __init__(self, target_path: str, verbose: bool = False):
18
- self.target_path = Path(target_path)
31
+ self.target_path = safe_user_path(target_path)
19
32
  self.verbose = verbose
20
33
  self.results = {}
21
34
 
@@ -104,7 +117,7 @@ def main():
104
117
  if args.json:
105
118
  output = json.dumps(results, indent=2)
106
119
  if args.output:
107
- with open(args.output, 'w') as f:
120
+ with safe_user_path(args.output).open('w') as f:
108
121
  f.write(output)
109
122
  print(f"Results written to {args.output}")
110
123
  else:
@@ -9,13 +9,26 @@ import sys
9
9
  import json
10
10
  import argparse
11
11
  from pathlib import Path
12
+
13
+
14
+ def safe_user_path(path_value, base_dir="."):
15
+ """Resolve a CLI path under the current workspace."""
16
+ if base_dir != ".":
17
+ raise ValueError("Custom base directories are not supported for CLI paths")
18
+ base_path = Path.cwd().resolve()
19
+ resolved_path = Path(path_value).expanduser().resolve()
20
+ try:
21
+ resolved_path.relative_to(base_path)
22
+ except ValueError as exc:
23
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
24
+ return resolved_path
12
25
  from typing import Dict, List, Optional
13
26
 
14
27
  class DependencyAnalyzer:
15
28
  """Main class for dependency analyzer functionality"""
16
29
 
17
30
  def __init__(self, target_path: str, verbose: bool = False):
18
- self.target_path = Path(target_path)
31
+ self.target_path = safe_user_path(target_path)
19
32
  self.verbose = verbose
20
33
  self.results = {}
21
34
 
@@ -104,7 +117,7 @@ def main():
104
117
  if args.json:
105
118
  output = json.dumps(results, indent=2)
106
119
  if args.output:
107
- with open(args.output, 'w') as f:
120
+ with safe_user_path(args.output).open('w') as f:
108
121
  f.write(output)
109
122
  print(f"Results written to {args.output}")
110
123
  else:
@@ -9,13 +9,26 @@ import sys
9
9
  import json
10
10
  import argparse
11
11
  from pathlib import Path
12
+
13
+
14
+ def safe_user_path(path_value, base_dir="."):
15
+ """Resolve a CLI path under the current workspace."""
16
+ if base_dir != ".":
17
+ raise ValueError("Custom base directories are not supported for CLI paths")
18
+ base_path = Path.cwd().resolve()
19
+ resolved_path = Path(path_value).expanduser().resolve()
20
+ try:
21
+ resolved_path.relative_to(base_path)
22
+ except ValueError as exc:
23
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
24
+ return resolved_path
12
25
  from typing import Dict, List, Optional
13
26
 
14
27
  class ProjectArchitect:
15
28
  """Main class for project architect functionality"""
16
29
 
17
30
  def __init__(self, target_path: str, verbose: bool = False):
18
- self.target_path = Path(target_path)
31
+ self.target_path = safe_user_path(target_path)
19
32
  self.verbose = verbose
20
33
  self.results = {}
21
34
 
@@ -104,7 +117,7 @@ def main():
104
117
  if args.json:
105
118
  output = json.dumps(results, indent=2)
106
119
  if args.output:
107
- with open(args.output, 'w') as f:
120
+ with safe_user_path(args.output).open('w') as f:
108
121
  f.write(output)
109
122
  print(f"Results written to {args.output}")
110
123
  else:
@@ -17,6 +17,19 @@ import os
17
17
  import re
18
18
  import sys
19
19
  from pathlib import Path
20
+
21
+
22
+ def safe_user_path(path_value, base_dir="."):
23
+ """Resolve a CLI path under the current workspace."""
24
+ if base_dir != ".":
25
+ raise ValueError("Custom base directories are not supported for CLI paths")
26
+ base_path = Path.cwd().resolve()
27
+ resolved_path = Path(path_value).expanduser().resolve()
28
+ try:
29
+ resolved_path.relative_to(base_path)
30
+ except ValueError as exc:
31
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
32
+ return resolved_path
20
33
  from typing import Dict, List, Optional, Any, Tuple
21
34
 
22
35
 
@@ -375,7 +388,7 @@ def main():
375
388
  )
376
389
 
377
390
  args = parser.parse_args()
378
- project_dir = Path(args.project_dir).resolve()
391
+ project_dir = safe_user_path(args.project_dir).resolve()
379
392
 
380
393
  if not project_dir.exists():
381
394
  print(f"Error: Directory not found: {project_dir}", file=sys.stderr)
@@ -16,6 +16,19 @@ import json
16
16
  import os
17
17
  import sys
18
18
  from pathlib import Path
19
+
20
+
21
+ def safe_user_path(path_value, base_dir="."):
22
+ """Resolve a CLI path under the current workspace."""
23
+ if base_dir != ".":
24
+ raise ValueError("Custom base directories are not supported for CLI paths")
25
+ base_path = Path.cwd().resolve()
26
+ resolved_path = Path(path_value).expanduser().resolve()
27
+ try:
28
+ resolved_path.relative_to(base_path)
29
+ except ValueError as exc:
30
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
31
+ return resolved_path
19
32
  from typing import Dict, List, Optional
20
33
 
21
34
 
@@ -989,7 +1002,7 @@ def main():
989
1002
 
990
1003
  result = scaffold_project(
991
1004
  name=args.name,
992
- output_dir=Path(args.dir),
1005
+ output_dir=safe_user_path(args.dir),
993
1006
  template=args.template,
994
1007
  features=features,
995
1008
  dry_run=args.dry_run,
@@ -9,13 +9,26 @@ import sys
9
9
  import json
10
10
  import argparse
11
11
  from pathlib import Path
12
+
13
+
14
+ def safe_user_path(path_value, base_dir="."):
15
+ """Resolve a CLI path under the current workspace."""
16
+ if base_dir != ".":
17
+ raise ValueError("Custom base directories are not supported for CLI paths")
18
+ base_path = Path.cwd().resolve()
19
+ resolved_path = Path(path_value).expanduser().resolve()
20
+ try:
21
+ resolved_path.relative_to(base_path)
22
+ except ValueError as exc:
23
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
24
+ return resolved_path
12
25
  from typing import Dict, List, Optional
13
26
 
14
27
  class CodeQualityAnalyzer:
15
28
  """Main class for code quality analyzer functionality"""
16
29
 
17
30
  def __init__(self, target_path: str, verbose: bool = False):
18
- self.target_path = Path(target_path)
31
+ self.target_path = safe_user_path(target_path)
19
32
  self.verbose = verbose
20
33
  self.results = {}
21
34
 
@@ -104,7 +117,7 @@ def main():
104
117
  if args.json:
105
118
  output = json.dumps(results, indent=2)
106
119
  if args.output:
107
- with open(args.output, 'w') as f:
120
+ with safe_user_path(args.output).open('w') as f:
108
121
  f.write(output)
109
122
  print(f"Results written to {args.output}")
110
123
  else:
@@ -9,13 +9,26 @@ import sys
9
9
  import json
10
10
  import argparse
11
11
  from pathlib import Path
12
+
13
+
14
+ def safe_user_path(path_value, base_dir="."):
15
+ """Resolve a CLI path under the current workspace."""
16
+ if base_dir != ".":
17
+ raise ValueError("Custom base directories are not supported for CLI paths")
18
+ base_path = Path.cwd().resolve()
19
+ resolved_path = Path(path_value).expanduser().resolve()
20
+ try:
21
+ resolved_path.relative_to(base_path)
22
+ except ValueError as exc:
23
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
24
+ return resolved_path
12
25
  from typing import Dict, List, Optional
13
26
 
14
27
  class FullstackScaffolder:
15
28
  """Main class for fullstack scaffolder functionality"""
16
29
 
17
30
  def __init__(self, target_path: str, verbose: bool = False):
18
- self.target_path = Path(target_path)
31
+ self.target_path = safe_user_path(target_path)
19
32
  self.verbose = verbose
20
33
  self.results = {}
21
34
 
@@ -104,7 +117,7 @@ def main():
104
117
  if args.json:
105
118
  output = json.dumps(results, indent=2)
106
119
  if args.output:
107
- with open(args.output, 'w') as f:
120
+ with safe_user_path(args.output).open('w') as f:
108
121
  f.write(output)
109
122
  print(f"Results written to {args.output}")
110
123
  else:
@@ -9,13 +9,26 @@ import sys
9
9
  import json
10
10
  import argparse
11
11
  from pathlib import Path
12
+
13
+
14
+ def safe_user_path(path_value, base_dir="."):
15
+ """Resolve a CLI path under the current workspace."""
16
+ if base_dir != ".":
17
+ raise ValueError("Custom base directories are not supported for CLI paths")
18
+ base_path = Path.cwd().resolve()
19
+ resolved_path = Path(path_value).expanduser().resolve()
20
+ try:
21
+ resolved_path.relative_to(base_path)
22
+ except ValueError as exc:
23
+ raise ValueError(f"Path escapes allowed directory: {path_value}") from exc
24
+ return resolved_path
12
25
  from typing import Dict, List, Optional
13
26
 
14
27
  class ProjectScaffolder:
15
28
  """Main class for project scaffolder functionality"""
16
29
 
17
30
  def __init__(self, target_path: str, verbose: bool = False):
18
- self.target_path = Path(target_path)
31
+ self.target_path = safe_user_path(target_path)
19
32
  self.verbose = verbose
20
33
  self.results = {}
21
34
 
@@ -104,7 +117,7 @@ def main():
104
117
  if args.json:
105
118
  output = json.dumps(results, indent=2)
106
119
  if args.output:
107
- with open(args.output, 'w') as f:
120
+ with safe_user_path(args.output).open('w') as f:
108
121
  f.write(output)
109
122
  print(f"Results written to {args.output}")
110
123
  else:
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: setup-help
3
+ description: "Walk a user through setup or installation one step at a time with the remaining steps visible."
4
+ category: productivity
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: [setup, onboarding, installation]
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
+ # setup-help
19
+
20
+ ## When to Use
21
+
22
+ - Use when the user asks to set up, install, configure, or get something working step by step.
23
+ - Use when the setup has multiple steps and benefits from one-at-a-time guidance.
24
+
25
+ Guide the user through any setup, one step at a time, in plain English.
26
+
27
+ ## Response format (every single response)
28
+
29
+ 1. **Current step** — ONE atomic action. A single click, field, or command — not a checklist. 1–2 lines max. If it needs sub-steps, it's too big: split it and push the rest into "Still remaining". Plain English.
30
+ 2. A `----` divider.
31
+ 3. **Still remaining** — a numbered list of the setup steps left after this one. Max 8 items, ever.
32
+
33
+ Repeat this format for every response until setup is done.
34
+
35
+ ## Rules
36
+
37
+ - Before the first step, build a complete canonical checklist from the user's outline, repo/docs, current screen, and any discovered prerequisites.
38
+ - The **Still remaining** list must never exceed 8 items — more is overwhelming. Track ALL unfinished checklist items internally; if more than 8 remain, show the nearest steps individually and merge the later ones into broader phase-level items so the list stays at 8 or fewer. Never silently drop a required step from internal tracking.
39
+ - If a new required step is discovered mid-setup, add it to **Still remaining** immediately in the correct order.
40
+ - Before every response, audit the current step plus **Still remaining** against the canonical checklist. If any unfinished step is missing, fix the list before replying.
41
+ - Only give instructions for the current step. Do not jump ahead.
42
+ - Keep it concise. Short sentences. No filler.
43
+ - After the user finishes a step, move the next "remaining" item up to "Current step".
44
+ - Update the "Still remaining" list each time as steps get done.
45
+ - When nothing remains, say setup is complete instead of showing the list.
46
+
47
+ ## Limitations
48
+
49
+ - Adapted from `davidondrej/skills`; verify local paths, tools, credentials, and agent features before acting.
50
+ - For commands, remote access, scheduling, browser automation, or file-changing workflows, get explicit user approval and confirm the target environment first.