py-initlisted
Install: claude install-skill akakritagya/py-init
# py-init
Scaffold a Python project that formats, lints, types and tests itself.
Five tools, all configured in `pyproject.toml`:
| Tool | Job |
|---|---|
| uv | Python versions, environments, dependencies, lockfile |
| ruff | linter *and* formatter (replaces black, flake8, isort, pyupgrade, pydocstyle) |
| mypy | checks that annotations aren't lying |
| pytest | test runner + coverage |
| pre-commit | wires the other four to git |
Config text lives in `assets/`. **Copy those files; do not retype or
regenerate their contents.** Rewriting config from memory is how
`exclude_also` silently becomes `exclude_lines` (which replaces coverage's
defaults instead of extending them) and how `[[tool.mypy.overrides]]` loses a
bracket. The only edits to make are the substitutions listed in step 5 and 6.
## Step 1 — Guard
Check the target directory for `pyproject.toml` or `.git/`. If either exists,
**stop and ask the user** before touching anything. This skill scaffolds new
projects; it must never overwrite an existing one.
One legitimate exception: scaffolding into a freshly cloned empty repo, where
`.git/` exists by design and there's no `pyproject.toml`. Confirm that's the
situation and proceed. `pyproject.toml` present is never waved through.
## Step 2 — Ask three questions
1. **Project name** — or **current directory**. Two shapes:
- **New subdirectory**: `uv init <name>` creates `<name>/` and scaffolds
inside it.
- **Current directory**: `uv init` with no name scaf