Skip to content
Agentmart
Submit a tool

python-uv-starter

Scaffolds an empty directory as a Python CLI project with uv, src/ layout, pytest, ruff, a Makefile, a Docker-first wheel build, and GitHub Actions CI.

Skill by twistingmercury

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/twistingmercury-python-uv-starter

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Scaffolds an empty directory as a Python CLI project with uv, src/ layout, pytest, ruff, a Makefile, a Docker-first wheel build, and GitHub Actions CI. Use when standing up a new Python project; not for modifying an existing one.

Use cases: testing, devops

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Shell scripts

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/python-uv-starter

What's inside

Skill name
python-uv-starter
Description
Scaffolds an empty directory as a Python CLI project with uv, src/ layout, pytest, ruff, a Makefile, a Docker-first wheel build, and GitHub Actions CI. Use when standing up a new Python project; not for modifying an existing one.
License
MIT
Instructions
62 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (22)

  • SKILL.md
  • openai.yaml · agents/
  • .dockerignore.tmpl · assets/project/
  • .editorconfig.tmpl · assets/project/
  • {{PROJECT_NAME}}-ci.yaml.tmpl · assets/project/.github/workflows/
  • .gitignore.tmpl · assets/project/
  • CHANGELOG.md.tmpl · assets/project/
  • Makefile.tmpl · assets/project/
  • README.md.tmpl · assets/project/
  • Dockerfile.tmpl · assets/project/build/
  • build.sh.tmpl · assets/project/build/
  • .gitkeep.tmpl · assets/project/deploy/
  • .gitkeep.tmpl · assets/project/docs/
  • pyproject.toml.tmpl · assets/project/
  • .gitkeep.tmpl · assets/project/scripts/
  • __init__.py.tmpl · assets/project/src/{{PACKAGE_NAME}}/
  • cli.py.tmpl · assets/project/src/{{PACKAGE_NAME}}/
  • main.py.tmpl · assets/project/src/{{PACKAGE_NAME}}/
  • test_cli.py.tmpl · assets/project/tests/
  • test_main.py.tmpl · assets/project/tests/
  • scaffold.sh · scripts/
  • scaffold.bats · tests/

SKILL.md (first lines)

# Python uv Starter

Scaffolds the current directory as a minimal Python CLI project. It's deterministic: every file comes from
`assets/project/` via `scripts/scaffold.sh`. Don't hand-write the files.

## Generated layout

| Path | Purpose |
| --- | --- |
| `pyproject.toml` | setuptools backend, `dev` group (pytest, ruff), `[project.scripts]` entry point |
| `src/<package>/main.py`, `cli.py` | `main(argv=None)` entry point; argparse lives in `cli.py` |
| `tests/test_main.py`, `test_cli.py` | Passing pytest stubs |
| `Makefile` | `help`, `test`, `analyze`, `build`, `install`, `uninstall` |
| `build/Dockerfile`, `build/build.sh` | Formats, lints, tests, then exports the wheel to `dist/` |
| `.github/workflows/<project>-ci.yaml` | Runs `build/build.sh` on `develop`/`main` |
| `.editorconfig`, `.gitignore`, `.dockerignore`, `README.md`, `CHANGELOG.md` | Repo hygiene |
| `deploy/`, `scripts/`, `docs/` | Empty placeholders (`.gitkeep`) |

## Steps

1. **Pick names.** Ask for the project name if the user didn't give one.
   `--project-name` is the distribution and CLI name (lowercase, hyphens
   allowed). The rest is optional; pass a flag only when the user supplied the
   value. Defaults: package = name with `-` → `_`, display name = name,
   description = "A new Python project", Python floor = 3.12.
2. **Check the target.** Run from the directory that becomes the repo root.
   It may only hold `.git`, `.claude`, `.codex`, or `.agents`. The script
   checks this itself and refuses anything else before writing. On refusal,
   report the blocking entry and ask the user whether to move it or choose
   another directory. Never delete it or render somewhere else yourself.
3. **Render.** Run the script through bash, using this skill's absolute path:

   ```sh
   bash /absolute/path/to/python-uv-starter/scripts/scaffold.sh \
     --project-name <name> \
     [--package-name <snake_name>] \
     [--display-name "<Title>"] \
     [--description "<one line, no double quotes>"] \
     [--python-version 3.12]
   ```

4. **Verify** from the project root, checking exit codes. Run `make test`. It
   syncs, formats, lints, runs pytest, and creates `uv.lock`, which the Docker
   build needs. If `docker info` succeeds, run `bash build/build.sh` too. If it
   doesn't, say so and don't claim the build passes. Locally uv may pick any
   interpreter ≥ the floor; the Docker build pins the floor version.
5. **Hand off.** Summarize the layout and the commands (`uv run <name>`,
   `make test`, `make build`).

Don't `git init`, commit, push, or add runtime dependencies unless the user
asks for it.

## Common mistakes

- Running the script with a bare path. Always use `bash scripts/scaffold.sh`,
  since installers can drop the executable bit.
- Skipping `make test` before `build/build.sh`. The Dockerfile uses
  `uv sync --frozen`, which fails without `uv.lock`.
- Using `dist/<project-name>-*.whl` with a hyphenated name. Wheels use the
  underscored package name. The Makefile already handles this.

From twistingmercury/agents-skills, MIT.

More from twistingmercury/agents-skills

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 5, 2026 (24 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from twistingmercury

Cite this page

python-uv-starter skill. Agent Mart. https://agentmart.dev/skills/twistingmercury-python-uv-starter (last updated 2026-10-24)