skills/generate-runner/SKILL.md
Generate a customized precommit runner for any ecosystem. Use when: non-Node projects need a runner, eject from generic runner, customize runner for project. Not for: running precommit (use /precommit), installing runner (handled by auto-install). Output: customized runner script with eject header.
npx skillsauth add sd0xdev/sd0x-dev-flow generate-runnerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Need | Use Instead |
|------|-------------|
| Run precommit checks | /precommit or /precommit-fast |
| Install existing runner | /project-setup (auto-installs) |
| Configure lint globs | Edit .claude/runner-config.json |
flowchart LR
A[Detect Ecosystem] --> B[Select Template]
B --> C[Customize]
C --> D[Write Runner]
D --> E[Verify]
Scan project root for manifest files:
| Manifest | Ecosystem | Template ID |
|----------|-----------|-------------|
| pnpm-lock.yaml | Node.js (pnpm) | node-pnpm |
| yarn.lock | Node.js (yarn) | node-yarn |
| package-lock.json or package.json | Node.js (npm) | node-npm |
| pyproject.toml | Python | python |
| Cargo.toml | Rust | rust |
| go.mod | Go | go |
If multiple detected, prefer Node.js > Python > Rust > Go. If none detected, ask user.
Load template from references/templates.md for the detected ecosystem.
Read project-specific configuration:
| Source | What |
|--------|------|
| package.json scripts | Lint command, test command, build command |
| .claude/runner-config.json | Custom lint globs (if exists) |
| Lock file | Package manager selection |
Write to .claude/scripts/precommit-runner.js (Node) or .claude/scripts/precommit-runner.sh (non-Node).
Include eject header:
@generated_at <ISO 8601>
@plugin_version <current version>
@template <template-id>
@ecosystem <ecosystem>
Conflict handling: If target file exists, AskUserQuestion with diff preview.
chmod +x)| Argument | Description | Default |
|----------|-------------|---------|
| --ecosystem <name> | Force ecosystem (skip detection) | auto-detect |
| --output <path> | Custom output path | .claude/scripts/precommit-runner.js |
| --force | Overwrite existing without asking | off |
## Generated Runner
- Ecosystem: <detected>
- Template: <template-id>
- Output: <path>
- Package manager: <pm>
The generated runner is **user-owned** — plugin updates will not overwrite it.
Edit freely to customize for your project.
references/templates.mdInput: /generate-runner
Action: Detect Node.js (yarn) → load node-yarn template → customize → write .claude/scripts/precommit-runner.js
Input: /generate-runner --ecosystem python
Action: Load python template → customize → write .claude/scripts/precommit-runner.sh
Input: /generate-runner --force
Action: Detect ecosystem → overwrite existing runner without asking
documentation
Rewrite the previous reply in Traditional Chinese
development
Monitor GitHub Actions CI runs until completion. Use when: watching CI after push, checking build status, monitoring PR checks, waiting for CI completion, user says 'watch CI', 'check CI', 'CI status', 'monitor build', or /watch-ci. Not for: pushing code (use push-ci), creating PRs (use create-pr). Output: per-run verdict (pass/fail/timeout).
development
Verification loop — lint -> typecheck -> unit -> integration -> e2e
development
Research current code state then update corresponding docs, ensuring docs stay in sync with code.