← ClaudeAtlas

py-initlisted

Use when the user types `uv init`, `py init`, or otherwise starts a new Python project or fresh repo; asks to scaffold a CLI/library/FastAPI/ML project; or asks how to set up Python linting, formatting, type checking, testing, or pre-commit hooks from scratch — even if they don't name the tools.
akakritagya/py-init · ★ 0 · Code & Development · score 70
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