Create cli
Scaffolds production-ready CLI projects from language templates, supporting Go with Cobra, Makefile, golangci-lint, goreleaser, and GitHub Pages docs; and Python with Typer, uv, ruff+mypy, PyPI OIDC trusted publishing, and GitHub Pages docs. Use when the user wants to bootstrap a new command-line tool project from scratch.From its SKILL.md
npx -y skills add pavelsimo/skills --skill create-cliAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.9 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
create-cli skill
Scaffold a complete CLI project from a language template, applying CLI design conventions from clig.dev.
Available templates: go, python.
features
- scaffolds complete CLI projects from
goorpythontemplates - designs the CLI contract before generating files
- applies clig.dev conventions to flags, output, errors, and prompts
- creates GitHub repositories, docs, CI, release workflows, hooks, and Homebrew publishing paths
- performs template variable substitution and post-copy renames from reference guidance
- produces a concise completion summary with generated files and next steps
usage
/create-cli
/create-cli name=my-tool template=go
/create-cli name=my-tool template=python color_scheme=ocean
Read templates/ in this skill's directory to understand available templates and the files each generates.
Apply the CLI design rubric from clig.dev to every interface decision.
Read reference/default-conventions.md before finalizing interface decisions, and reference/template-variables.md before copying template files.
workflow
1. clarify
Ask only for what cannot be inferred. Proceed with best-guess defaults if the user is unsure:
- name — CLI tool name (lowercase, hyphenated; e.g.
my-tool) - template — language template to use (default:
go)go— Cobra, Makefile, golangci-lint, goreleaser, Homebrew tap, Node.js docs sitepython— Typer, uv, ruff+mypy, pytest, PyPI OIDC publishing, Homebrew tap, Node.js docs site
- description — one-sentence purpose (e.g. "search and sync files across storage backends")
- github_user — detect with
gh api user --jq .login; confirm with user - homebrew_tap — Homebrew tap repo (default:
{github_user}/homebrew-tap) - color_scheme — documentation color theme (default:
teal)teal— teal/cyan accent, near-black background (modern, default)ocean— blue accent, dark navy background (familiar, developer-friendly)purple— violet accent, deep purple background (creative, distinctive)amber— gold accent, warm dark background (warm, unique)
Template-specific derived values — do not ask for these:
goonly: derivemodule_pathasgithub.com/{github_user}/{name}pythononly: derivemodule_nameas{name}with-replaced by_(e.g.my-tool→my_tool); derivetool_classas PascalCase of{name}(e.g.my-tool→MyTool)
2. design
Produce a compact CLI spec the user can review before scaffolding:
- USAGE synopsis —
{name} [global flags] <subcommand> [args] - Subcommands — what each does; idempotence; state changes
- Args/flags table — name, type, default, required, example
- I/O contract — stdout (primary data), stderr (errors/progress)
- Exit codes —
0success ·1runtime failure ·2bad usage - 5+ example invocations — common flows including piped/stdin
Apply these defaults unless the user overrides:
-h/--helpalways shows help, ignores other args--version/-Vprints version to stdout--jsonfor machine-readable output--no-color+NO_COLORenv respected--dry-run/-nfor any state-changing operation--no-inputdisables interactive prompts- Prompts only when stdin is a TTY
- Destructive ops require
--forceor--confirm=…in non-interactive mode - Ctrl-C exits fast with bounded cleanup
Python template additional notes:
- Typer generates
--helpand-hautomatically viacontext_settings={"help_option_names": ["-h", "--help"]} - Shell completions use
{name} --install-completion(Typer built-in, notcompletion <shell>) - A
versionsubcommand is provided in addition to the--versioneager flag
Show the spec to the user and wait for confirmation before scaffolding.
3. scaffold
After the user approves the CLI spec, generate the project:
# 1. Create GitHub repo
gh repo create {github_user}/{name} \
--public \
--description "{description}" \
--clone
cd {name}
# 2. Copy templates/{template}/* with variable substitution; see reference/template-variables.md
# — go template only —
# 3. Initialize Go module
go mod init github.com/{github_user}/{name}
go get github.com/spf13/cobra@latest
go mod tidy
# 4. Install lefthook and activate git hooks
go install github.com/evilmartians/lefthook@latest
lefthook install
# — end go template steps —
# — python template only —
# 3. Rename the placeholder module directory to the actual package name
mv MODULE_NAME {module_name}
# 4. Rename the placeholder formula file to the actual tool name
mv Formula/TOOL_NAME.rb Formula/{name}.rb
# 5. Install dependencies and activate git hooks
uv sync --dev
lefthook install
# 6. Seed the Homebrew tap formula (skip if tap repo does not exist yet)
git clone "https://x-access-token:$(gh auth token)@github.com/{homebrew_tap}.git" tap 2>/dev/null && \
mkdir -p tap/Formula && \
cp Formula/{name}.rb tap/Formula/ && \
cd tap && git add . && git commit -m "🎉 add {name} formula" && git push && cd .. && rm -rf tap || true
# — end python template steps —
# 5 (go) / 7 (python). Initial commit
git add .
git commit -m "🎉 init {name}"
git push -u origin main
# Disable wiki, ensure issues are enabled
gh repo edit --enable-wiki=false
# Enable GitHub Pages (docs will deploy on first push that touches docs/)
gh api repos/{github_user}/{name}/pages \
-X POST \
-f build_type=workflow 2>/dev/null || true
# Set HOMEBREW_TAP_TOKEN so the release workflow can publish to the Homebrew tap
gh secret set HOMEBREW_TAP_TOKEN \
--repo {github_user}/{name} \
--body "$(gh auth token)"
4. output summary
After scaffolding succeeds, report the created GitHub repository, docs URL, selected template, generated file groups, and next steps. Use reference/output-summary.md for the full Go and Python summary templates.
best practices
- confirm before scaffolding — show the CLI spec and wait for approval before creating a GitHub repo or files
- stdout is data — diagnostics, progress, and errors go to stderr
- prefer safe defaults — include
--dry-run,--no-input,--no-color, and force/confirmation guards for state changes - derive template-only values — do not ask the user for module paths, package names, or class names that can be computed from the chosen name
- read references on demand — use
reference/template-variables.md,reference/output-summary.md, andreference/default-conventions.mdonly when those details are needed
What ships with it: 40 files
99.9 KB alongside SKILL.md, 3 of them executable
reference/
- default-conventions.md1.3 KB
- output-summary.md3.3 KB
- template-variables.md1.2 KB
templates/
- go/AGENTS.md.tmpl2.9 KB
- go/cmd/root.go.tmpl821 B
- go/cmd/version.go.tmpl363 B
- go/docs/index.md.tmpl560 B
- go/docs/install.md.tmpl475 B
- go/docs/quickstart.md.tmpl674 B
- go/docs/reference.md.tmpl1.1 KB
- go/.gitignore42 B
- go/.golangci.yml658 B
- go/go.mod.tmpl71 B
- go/.goreleaser.yaml.tmpl1.1 KB
- go/.lefthook.yml114 B
- go/main.go.tmpl127 B
- go/Makefile1.9 KB
- go/README.md.tmpl1.4 KB
- go/scripts/build-docs-site.mjsruns30.1 KB
- python/AGENTS.md.tmpl3.2 KB
- python/docs/index.md.tmpl546 B
- python/docs/install.md.tmpl629 B
- python/docs/quickstart.md.tmpl586 B
- python/docs/reference.md.tmpl1.2 KB
- python/Formula/TOOL_NAME.rb.tmpl2.1 KB
- python/.gitignore362 B
- python/.lefthook.yml193 B
- python/Makefile1.4 KB
- python/MODULE_NAME/cli.py.tmpl1.8 KB
- python/MODULE_NAME/__init__.py.tmpl45 B
- python/MODULE_NAME/__main__.py.tmpl74 B
- python/pyproject.toml.tmpl1.6 KB
- python/README.md.tmpl1.5 KB
- python/scripts/build-docs-site.mjsruns30.1 KB
- python/tests/__init__.pyruns0 B
- python/tests/test_cli.py.tmpl849 B
- CHANGELOG.md269 B
- LICENSE1.0 KB
- .markdownlint.json76 B
- README.md4.4 KB