Best for
- Use when the user asks to set up the project, get it running, write run instructions, or verify build/run steps work from a clean environment.
asgeirtj/system_prompts_leaks/Anthropic/Claude Code/bundled-skills/run-skill-generator/SKILL.md
Author or improve the run-<unit> skill — a per-project skill that tells agents how to build, launch, and drive this project's app. Use when the user asks to set up the project, get it running, write run instructions, or verify build/run steps work from a clean environment.
Decision brief
You are done when all of these are true:
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/asgeirtj/system_prompts_leaks --skill "Anthropic/Claude Code/bundled-skills/run-skill-generator"Inspect the Agent Skill "run-skill-generator" from https://github.com/asgeirtj/system_prompts_leaks/blob/656021e2fb804aa60b6f75b3ea29ffcfcf26bd85/Anthropic/Claude%20Code/bundled-skills/run-skill-generator/SKILL.md at commit 656021e2fb804aa60b6f75b3ea29ffcfcf26bd85. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
List the project's skills with their descriptions (same probe /run uses — users name these variously, so match on description, not name):
You are done when all of these are true:
Typical output is a skill directory containing both:
The skill lives at /.claude/skills/run-/, where is the directory for one deployable thing — an app, a service, a library.
List the project's skills with their descriptions (same probe /run uses — users name these variously, so match on description, not name):
Permission review
The documentation asks the agent to create, modify, or delete local files.
skill dir, and delete the old file.)The documentation asks the agent to run terminal commands or scripts.
latter an agent wants `NODE_ENV=test bun run script.ts` (orEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 83/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 62,262 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Your job is to produce a skill at <unit>/.claude/skills/run-<unit-name>/
that lets a future agent build, launch, and drive this project from
a clean machine.
The skill has two parts that live together:
<unit>/.claude/skills/run-<unit-name>/
SKILL.md ← agent-facing instructions — SHORT. Points at the driver.
driver.mjs ← (or driver.py, smoke.sh, … — or none: web apps use
chromium-cli off-the-shelf, and the heredoc in
SKILL.md is the script)
That almost always means writing code, not just prose. If the app
has any interactive surface (GUI, TUI, long-running server, REPL), the
future agent needs a programmatic way to poke it. A markdown file by
itself cannot click a button — but sometimes the button-clicker
already exists: for web apps it's chromium-cli, for servers it's
curl. You build (or script) that harness now, commit it alongside
the skill, and the SKILL.md documents how to use it.
You are done when all of these are true:
chromium-cli heredoc
inline in SKILL.md — whatever you used to drive the app in step 1.
(Graduated into scripts//e2e/? — fine, point at it. Web app with
chromium-cli off-the-shelf? — the inline script is the harness; no
separate file.)SKILL.md documents the harness as the primary agent path —
the section a future agent reads first is "run this driver / pipe
these commands to chromium-cli," not "run npm start and a window
opens."SKILL.md is a command you ran that worked.
This session. This container. Not from the README, not inferred.If you're about to write the skill and you don't have (1), stop. You are about to paraphrase existing docs. That document already exists — it's called the README, and the whole reason you're here is that it wasn't enough.
Typical output is a skill directory containing both:
<unit>/.claude/skills/run-<unit>/
SKILL.md ← SHORT. Points at the driver. Has the frontmatter
that lets Claude auto-load it when someone asks
to "run <unit>" or "screenshot <unit>".
driver.mjs ← (or driver.py, smoke.sh, … — or none: web apps
use chromium-cli off-the-shelf, and the heredoc
in SKILL.md is the script)
The driver lives inside the skill directory by default. They are a pair — the skill's instructions and the code that implements them. A driver that lives here is allowed to be a bit messier than production code; it's agent tooling, not product surface.
Graduation: if the driver grows into something the project's own
test suite wants to reuse — shared launch helpers, a real e2e harness —
move it to scripts/ or e2e/ and update SKILL.md to reference the
new path. The skill stays; the driver finds a better home.
The exact shape depends on the project, but the principle is constant:
the driver is the deliverable. The SKILL.md is its man page. For
a web app, the driver already exists — chromium-cli
(examples/playwright.md) — and the skill is
the script that runs it. For a desktop app
(examples/electron.md), the driver is a custom
REPL under tmux that exposes launch/ss/click/eval. For a server,
the driver is curl. Whatever shape it takes, without something that
reaches into the running app, the skill is a description of a window
nobody can touch.
The skill lives at <unit>/.claude/skills/run-<unit-name>/, where
<unit> is the directory for one deployable thing — an app, a
service, a library.
Claude Code natively discovers skills from nested .claude/skills/
directories: an agent working anywhere inside <unit> will see
/run-<unit-name> as an available skill, and it auto-loads when the
request matches its description (e.g. "run the desktop app," "take a
screenshot of billing").
.claude/skills/run-<repo-name>/ at repo root.apps/billing/.claude/skills/run-billing/,
apps/desktop/.claude/skills/run-desktop/.## Run: <name> section
per binary.If you're not sure where the unit boundary is, ask the user.
Slugify the directory name: lowercase, dashes for spaces, no slashes
(run-billing-api, not run-billing/api). The directory name and
the frontmatter name: should match — that's the slash command.
List the project's skills with their descriptions (same probe /run
uses — users name these variously, so match on description, not name):
d=$PWD; while :; do
grep -Hm1 '^description:' "$d"/.claude/skills/*/SKILL.md 2>/dev/null
[ -e "$d/.git" ] || [ "$d" = / ] && break
d=$(dirname "$d")
done
If one is about launching/driving this app — whatever it's named — refine, don't rewrite: verify its claims, fix what's wrong, add what's missing, preserve what works. Re-run the driver if there is one. Keep its existing name.
(Also check for a legacy .claude/run.md — earlier versions of this
tool produced those. If you find one, migrate it: the body becomes
the skill's SKILL.md content, any referenced scripts move into the
skill dir, and delete the old file.)
If none exists, decide where to create it (see above) and continue.
Figure out what you're authoring for:
package.json, go.mod, pyproject.toml…) and
it's one self-contained thing → this is the unit.apps/, packages/, services/) →
ask which one. List candidates, let them pick, cd there.Survey the usual places: README.md, package.json scripts,
Dockerfile, Makefile, .github/workflows/, CONTRIBUTING.md. CI
configs are often more accurate than READMEs.
Every claim in existing docs is a hypothesis. Especially the negative ones:
| When docs say… | What you do |
|---|---|
| "Requires macOS/Windows" | Launch it on Linux anyway. Apps rarely refuse to start — they crash on a missing .so, which apt-get fixes. Native modules for your host's keychain/notifications may no-op; the core usually runs. |
| "Requires a GPU" | Try software rendering. Electron/Chrome fall back with --disable-gpu. |
| "Requires a paid account / feature flag" | The gate is code you can read. Find it (env var? build define? SSR-embedded JSON?) and patch it for your local run. Document the patch. |
"Run npm start" | That's the human path (spawns a window, waits forever). Find or build the programmatic path — electron-forge start to build then launch via Playwright, or equivalent. |
"Not supported on Linux" in a README written by a macOS developer means "I never tried." You're about to try. If you give up here, the skill you write is the README with extra steps.
You're in a headless Linux container. The app is going to fight you. That fight is the content of the skill.
Keep a running NOTES.md as you go. Every error → every fix → every
command that finally worked. This scratchpad becomes the
Troubleshooting section.
Work up to a real interaction:
Install + build. When something's missing, note the exact
apt-get / npm install that fixed it.
Launch the app. Not the test suite — the app. A desktop GUI
(Electron, native) needs xvfb-run and a handful of lib*
packages; a web app driven by chromium-cli runs headless and
needs neither. Launch timeouts and cryptic crashes are normal at
this stage. Read the stack trace, install the missing thing, try
again.
Build a harness to drive it. You need a handle on the running app that lets you send input and observe output programmatically. The shape depends on the project (see table below).
Cover the layer(s) PRs actually touch. A tmux driver that pokes
the CLI's user surface is the right handle for UI changes — and the
wrong one for a PR that touches one internal function. For the
latter an agent wants NODE_ENV=test bun run script.ts (or
equivalent): import the function, call it, observe. If most PRs
here touch internals, that direct-invocation path is the driver's
main entry point, and the tmux launch is secondary. Look at recent
merged PRs: what layer do they touch? Cover that.
For a web app, chromium-cli is the driver — you script it,
you don't write it (see examples/playwright.md).
For a desktop GUI (Electron), write a REPL driver (stdin
commands → click/type/screenshot), run it inside tmux, and use
send-keys / capture-pane. You will iterate on that driver — it
starts minimal (launch, ss, quit) and grows whatever commands
you need to reach the interesting part of the app.
Do one real user flow end-to-end. Click the button. Fill the form. See the result in the DOM. Take a screenshot. Actually look at the screenshot. If it's blank or showing an error page, you're not done.
Then run the tests. Unit tests are a sanity check, not the main event.
Stop cleanly.
Obstacles are content. You will hit weird ones — coordinate systems that don't line up, APIs that return empty on this Electron version, feature gates that hide the thing you need to test. Each of these gets a bullet in Gotchas and (often) a helper in your driver. The gold standard is a Gotchas section full of things nobody could have guessed.
The driver script gets committed alongside the skill. It is not
scaffolding. It is the way future agents (and humans) will drive this
app. It defaults to living inside the skill directory (for a web app
using chromium-cli, that means inline in SKILL.md — the heredoc
is the script). If it outgrows that — if the project's real test
suite wants to import from it — move it to scripts/ or e2e/ and
update SKILL.md to point there.
Short. Point at the driver. Use template.md as the starting structure — it has the frontmatter shape.
The frontmatter matters. The name: becomes the slash command
(/run-billing). The description: is what Claude scans to decide
whether to auto-load this skill — put the verbs an agent would
actually type in it: "run," "start," "build," "test," "screenshot."
Generic descriptions ("helpful utilities for billing") won't match.
Body structure:
<driver-path> under xvfb/tmux for desktop, chromium-cli for
web, curl for a server.apt-get install line you ran.sed
or edit.npm start → window
opens → Ctrl-C. Brief. Note that it's useless headless.Keep it verified (you ran it), prescriptive (one path, not options), honest (flaky? slow? say so).
Paths in SKILL.md are relative to <unit>/, not to the skill
directory. State this at the top if there's any ambiguity. When the
driver lives inside the skill, its path from <unit> is
.claude/skills/run-<unit-name>/driver.mjs — it's long, but explicit.
Fresh shell, cd into the unit, follow the skill's SKILL.md
line-by-line without deviating. Any improvisation = a gap. Fix it.
Pick a starting shape for your driver. These examples are shared with
the /run skill (same per-project-type patterns are used as the
fallback when no project-specific run skill exists) — if you're
authoring a new one, the example is your starting template.
| Project type | Driver shape | Example |
|---|---|---|
| Web server / API | Background-launch + curl-based smoke script | examples/server.md |
| CLI tool | Representative-args smoke script, check exit codes + output | examples/cli.md |
| TUI / interactive terminal | tmux wrapper: send-keys / capture-pane | examples/tui.md |
| Electron / desktop GUI | Playwright _electron REPL driver under xvfb, screenshots, tmux-wrapped | examples/electron.md |
| Browser-driven | dev server + chromium-cli script | examples/playwright.md |
| Library / SDK | Import-and-call smoke script | examples/library.md |
For a web app, start from examples/playwright.md
— drive it with chromium-cli, no custom driver needed. For a
desktop app, start from examples/electron.md
— it has the full _electron REPL driver skeleton, the tmux wrapping,
and the catalog of obstacles you'll hit.
apt-get
lines. The exact ones.scripts//e2e/), or inline in SKILL.md for chromium-cli
web apps; referenced from SKILL.md either way.yarn start:prod and
you never ran it, it's not in the skill. Full stop.Stop and reconsider if:
chromium-cli? — the heredoc in SKILL.md is the driver;
no separate file needed.)Alternatives
huggingface/skills
AI demos and GPU compute with Gradio Spaces and Hugging Face Spaces ZeroGPU. Use when writing or reviewing code that uses `@spaces.GPU`, configuring `python_version` or `requirements.txt` for a ZeroGPU Space, or handling ZeroGPU-specific code constraints — pickle-based process isolation, `gr.State` semantics across the worker boundary, no `torch.compile` (use AoTI instead), CUDA wheel-only builds (no `nvcc` at build or runtime), large vs xlarge sizing, and dynamic duration callables. Make sure t
K-Dense-AI/scientific-agent-skills
Use when working directly with the `esm` Python SDK, ESM3 or ESMC model IDs, Forge/Biohub inference clients, or ESMFold2 folding workflows.
event4u-app/agent-config
ONLY when user asks for single-pass tech-stack detection or `agents/evidence/analysis/` write-up. Deep multi-pass audit → `universal-project-analysis`. Raw primitives → `project-analysis-core`.
mgiovani/cc-arsenal
Multi-agent review team: architecture, security, performance, testing, style, docs/UX, plus an adversary that cross-examines the other 6, for security-sensitive, architectural, or large PRs (15+ files) where a single-agent pass risks missing cross-cutting issues. Use for auth/payments/PII changes, schema/pattern changes, compliance sign-off, or when asked to 'get the review team on this' / 'multi-agent review' / 'thorough review before merge'. For a standard PR or a quick pre-merge check, use /r