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.
- package/bundled-skills/.antigravity-install-manifest.json +36 -1
- package/bundled-skills/007/scripts/full_audit.py +34 -22
- package/bundled-skills/007/scripts/quick_scan.py +24 -15
- package/bundled-skills/007/scripts/scanners/dependency_scanner.py +31 -19
- package/bundled-skills/007/scripts/scanners/injection_scanner.py +24 -14
- package/bundled-skills/007/scripts/scanners/secrets_scanner.py +24 -14
- package/bundled-skills/007/scripts/score_calculator.py +25 -13
- package/bundled-skills/2slides-ppt-generator/scripts/download_slides_pages_voices.py +15 -1
- package/bundled-skills/aegisops-ai/SKILL.md +1 -1
- package/bundled-skills/agent-self-scheduling/SKILL.md +88 -0
- package/bundled-skills/alpha-vantage/SKILL.md +3 -1
- package/bundled-skills/anti-sleep/SKILL.md +90 -0
- package/bundled-skills/api-security-best-practices/SKILL.md +1 -1
- package/bundled-skills/app-store-optimization/SKILL.md +7 -0
- package/bundled-skills/audio-transcriber/scripts/transcribe.py +17 -4
- package/bundled-skills/azure-mgmt-botservice-py/SKILL.md +2 -1
- package/bundled-skills/azure-resource-manager-mysql-dotnet/SKILL.md +2 -1
- package/bundled-skills/azure-resource-manager-postgresql-dotnet/SKILL.md +2 -1
- package/bundled-skills/azure-resource-manager-sql-dotnet/SKILL.md +2 -1
- package/bundled-skills/biopython/SKILL.md +2 -1
- package/bundled-skills/brain-to-docs/SKILL.md +54 -0
- package/bundled-skills/browser-harness/SKILL.md +220 -0
- package/bundled-skills/browser-harness/references/install.md +132 -0
- package/bundled-skills/bumblebee/scripts/render_report.py +16 -3
- package/bundled-skills/bun-development/SKILL.md +1 -1
- package/bundled-skills/cc-skill-security-review/SKILL.md +2 -2
- package/bundled-skills/claude-monitor/scripts/monitor.py +15 -2
- package/bundled-skills/cmux/SKILL.md +250 -0
- package/bundled-skills/code-polish/SKILL.md +192 -0
- package/bundled-skills/code-review-checklist/SKILL.md +1 -1
- package/bundled-skills/codex-subagent/SKILL.md +117 -0
- package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +24 -3
- package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +13 -2
- package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +23 -2
- package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +21 -0
- package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +23 -2
- package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +24 -3
- package/bundled-skills/container-security-hardening/SKILL.md +1 -1
- package/bundled-skills/content-creator/scripts/brand_voice_analyzer.py +15 -1
- package/bundled-skills/content-creator/scripts/seo_optimizer.py +15 -1
- package/bundled-skills/context-kit/SKILL.md +135 -0
- package/bundled-skills/cyber-audit/SKILL.md +138 -0
- package/bundled-skills/deepapi/SKILL.md +649 -0
- package/bundled-skills/delegating-to-agents/SKILL.md +64 -0
- package/bundled-skills/developer-signup-flow/SKILL.md +1 -1
- package/bundled-skills/diary/scripts/fetch_diaries.py +14 -1
- package/bundled-skills/diary/scripts/prepare_context.py +15 -2
- package/bundled-skills/diary/scripts/sync_to_notion.py +14 -1
- package/bundled-skills/dispatch/SKILL.md +19 -7
- package/bundled-skills/distribute-skill-to-all-agents/SKILL.md +85 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +1 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/docx-official/ooxml/scripts/pack.py +30 -3
- package/bundled-skills/docx-official/ooxml/scripts/unpack.py +16 -3
- package/bundled-skills/drizzle-migration-conflict/scripts/check_drizzle_migrations.py +27 -17
- package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +17 -3
- package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +9 -5
- package/bundled-skills/effective-agent-skills/SKILL.md +333 -0
- package/bundled-skills/electron-development/SKILL.md +6 -2
- package/bundled-skills/environment-setup-guide/SKILL.md +2 -5
- package/bundled-skills/expo-ui/scripts/list-components.js +5 -1
- package/bundled-skills/fable-safe-prompt/SKILL.md +79 -0
- package/bundled-skills/folder-specific-claude-and-agents-md/SKILL.md +96 -0
- package/bundled-skills/frontend-slides/scripts/extract-pptx.py +18 -4
- package/bundled-skills/gcp-cloud-run/SKILL.md +2 -1
- package/bundled-skills/gemini-api-integration/SKILL.md +3 -1
- package/bundled-skills/gemini-live-api-dev/SKILL.md +2 -1
- package/bundled-skills/gemini-omni-flash-api/scripts/video/generate_video.py +49 -14
- package/bundled-skills/goal-loop/SKILL.md +175 -0
- package/bundled-skills/hugging-face-evaluation/SKILL.md +1 -1
- package/bundled-skills/hugging-face-jobs/SKILL.md +1 -1
- package/bundled-skills/hugging-face-jobs/scripts/finepdfs-stats.py +14 -1
- package/bundled-skills/hugging-face-model-trainer/scripts/convert_to_gguf.py +10 -1
- package/bundled-skills/hugo-to-markdown/scripts/inventory_hugo_rules.py +14 -1
- package/bundled-skills/image-generator/SKILL.md +3 -1
- package/bundled-skills/instagram/scripts/export.py +18 -7
- package/bundled-skills/interview-style-doc-building/SKILL.md +86 -0
- package/bundled-skills/junta-leiloeiros/scripts/export.py +19 -10
- package/bundled-skills/landing-page-generator/scripts/landing_page_scaffolder.py +15 -1
- package/bundled-skills/linear-claude-skill/SKILL.md +4 -2
- package/bundled-skills/linkedin-post-writer/SKILL.md +159 -0
- package/bundled-skills/linkedin-post-writer/references/hook-formulas.md +482 -0
- package/bundled-skills/llm-council/SKILL.md +4 -2
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +5 -6
- package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +2 -3
- package/bundled-skills/markdown-rendering/SKILL.md +72 -0
- package/bundled-skills/matematico-tao/scripts/complexity_analyzer.py +14 -1
- package/bundled-skills/matematico-tao/scripts/dependency_graph.py +15 -2
- package/bundled-skills/mobile-design/scripts/mobile_audit.py +20 -6
- package/bundled-skills/monte-carlo-validation-notebook/scripts/resolve_dbt_schema.py +15 -2
- package/bundled-skills/multi-agent-architect/SKILL.md +1 -1
- package/bundled-skills/odoo-rpc-api/SKILL.md +2 -1
- package/bundled-skills/pci-compliance/SKILL.md +3 -1
- package/bundled-skills/pdf-official/scripts/create_validation_image.py +17 -3
- package/bundled-skills/pdf-official/scripts/extract_form_field_info.py +1 -1
- package/bundled-skills/personal-tool-builder/SKILL.md +1 -1
- package/bundled-skills/pi-custom-model/SKILL.md +68 -0
- package/bundled-skills/pi-web-search/SKILL.md +74 -0
- package/bundled-skills/playwright-skill/run.js +19 -1
- package/bundled-skills/pptx-official/ooxml/scripts/pack.py +30 -3
- package/bundled-skills/pptx-official/ooxml/scripts/unpack.py +16 -3
- package/bundled-skills/pptx-official/scripts/inventory.py +17 -4
- package/bundled-skills/pptx-official/scripts/rearrange.py +15 -2
- package/bundled-skills/pptx-official/scripts/replace.py +16 -3
- package/bundled-skills/product-manager-toolkit/scripts/customer_interview_analyzer.py +15 -1
- package/bundled-skills/production-code-audit/SKILL.md +1 -1
- package/bundled-skills/push-skill-to-github/SKILL.md +61 -0
- package/bundled-skills/rclone-cli/references/commands/rclone_completion_powershell.md +3 -2
- package/bundled-skills/read-all-adrs/SKILL.md +35 -0
- package/bundled-skills/remote-gpu-trainer/scripts/verify_local.py +14 -1
- package/bundled-skills/research-prompt/SKILL.md +63 -0
- package/bundled-skills/run-deep-swe/SKILL.md +120 -0
- package/bundled-skills/senior-architect/scripts/architecture_diagram_generator.py +15 -2
- package/bundled-skills/senior-architect/scripts/dependency_analyzer.py +15 -2
- package/bundled-skills/senior-architect/scripts/project_architect.py +15 -2
- package/bundled-skills/senior-frontend/scripts/bundle_analyzer.py +14 -1
- package/bundled-skills/senior-frontend/scripts/frontend_scaffolder.py +14 -1
- package/bundled-skills/senior-fullstack/scripts/code_quality_analyzer.py +15 -2
- package/bundled-skills/senior-fullstack/scripts/fullstack_scaffolder.py +15 -2
- package/bundled-skills/senior-fullstack/scripts/project_scaffolder.py +15 -2
- package/bundled-skills/setup-help/SKILL.md +50 -0
- package/bundled-skills/shodan-reconnaissance/SKILL.md +2 -1
- package/bundled-skills/short/SKILL.md +28 -0
- package/bundled-skills/skill-creator/scripts/init_skill.py +15 -2
- package/bundled-skills/skill-creator/scripts/package_skill.py +29 -12
- package/bundled-skills/skill-creator/scripts/quick_validate.py +14 -2
- package/bundled-skills/skill-creator-ms/SKILL.md +1 -1
- package/bundled-skills/skill-installer/scripts/install_skill.py +42 -8
- package/bundled-skills/skill-installer/scripts/package_skill.py +29 -17
- package/bundled-skills/skill-installer/scripts/validate_skill.py +37 -22
- package/bundled-skills/stripe-integration/SKILL.md +7 -3
- package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xctrace.py +7 -1
- package/bundled-skills/swiftui-expert-skill/scripts/instruments_parser/xml_utils.py +7 -1
- package/bundled-skills/taisly-social-media-posting/SKILL.md +79 -0
- package/bundled-skills/technical-tutorials/SKILL.md +1 -1
- package/bundled-skills/telegram/scripts/setup_project.py +17 -2
- package/bundled-skills/time-ledger/SKILL.md +118 -0
- package/bundled-skills/trading-ledger/SKILL.md +121 -0
- package/bundled-skills/videodb/scripts/ws_listener.py +17 -4
- package/bundled-skills/voice-ai-development/SKILL.md +2 -1
- package/bundled-skills/vps-server-management/SKILL.md +72 -0
- package/bundled-skills/weaviate/scripts/weaviate_conn.py +20 -18
- package/bundled-skills/wgm/SKILL.md +137 -0
- package/bundled-skills/whatsapp-cloud-api/scripts/setup_project.py +16 -1
- package/bundled-skills/workorai/SKILL.md +137 -0
- package/bundled-skills/wp-site-health-auditor/SKILL.md +341 -0
- package/bundled-skills/wp-site-health-auditor/references/catalog.md +135 -0
- package/bundled-skills/writing-skills/render-graphs.js +13 -2
- package/bundled-skills/x-twitter-scraper/SKILL.md +3 -1
- package/bundled-skills/youtube-notetaker/scripts/serve.py +41 -31
- package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +16 -2
- package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +15 -1
- package/bundled-skills/youtube-transcript/SKILL.md +120 -0
- package/package.json +5 -1
- 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-
|
|
21
|
+
rclone completion powershell | Out-File -Encoding utf8 "$HOME\Documents\PowerShell\rclone-completion.ps1"
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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=
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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.
|