skills/python-build-tools/SKILL.md
Python project tooling with uv, mise, ruff, basedpyright, and pytest. Use when setting up pyproject.toml, running builds, typechecking, configuring tests, linting, formatting, or managing Python environments.
npx skillsauth add martinffx/claude-code-atelier python-build-toolsInstall 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.
Modern Python development tooling using uv, mise, ruff, basedpyright, and pytest.
[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = ["fastapi", "pydantic"]
[project.optional-dependencies]
dev = ["pytest>=8.0.0", "ruff>=0.8.0", "basedpyright>=1.0.0"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.ruff]
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "N", "UP", "RUF"]
[tool.basedpyright]
typeCheckingMode = "strict"
[tool.pytest.ini_options]
testpaths = ["tests"]
uv init my-project && cd my-project
uv sync
uv add fastapi pydantic
uv add --dev pytest ruff basedpyright
| Tool | Purpose | Replaces | |------|---------|----------| | uv | Package management | pip, virtualenv | | mise | Version & tasks | pyenv, asdf | | ruff | Lint & format | black, isort, flake8 | | basedpyright | Type checking | mypy | | pytest | Testing | unittest |
uv run ruff check --fix .
uv run ruff format .
uv run basedpyright
uv run basedpyright src/main.py
uv run pytest
uv run pytest --cov=src --cov-report=html
uv add fastapi
uv add --dev pytest
uv lock --upgrade
uv tree
Create .mise.toml for consistent development:
[tools]
python = "3.12"
[tasks.lint]
run = "uv run ruff check --fix ."
[tasks.format]
run = "uv run ruff format ."
[tasks.typecheck]
run = "uv run basedpyright"
[tasks.test]
run = "uv run pytest"
[tasks.check]
depends = ["lint", "format", "typecheck", "test"]
Usage:
mise install
mise run check
from decimal import Decimal
from typing import Optional
def calculate_discount(
total: Decimal,
rate: Optional[Decimal] = None
) -> Decimal:
if rate is None:
rate = Decimal("0.1")
return total * rate
For detailed configuration and advanced patterns:
development
Security architecture and threat modeling knowledge. Auto-invokes when designing features that handle untrusted data, authentication, authorization, external integrations, file uploads, or sensitive data. Provides risk assessment frameworks, trust boundary analysis, and security design principles — not implementation code.
testing
Adversarial review of non-trivial decisions using fresh-context scrutiny. Use when correctness matters more than speed, when stakes are high (production, security-sensitive logic, irreversible operations), or before committing significant architectural or implementation choices.
development
Compact the current conversation into a handoff document for another agent to pick up.
testing
Socratic interrogation of plans against the project's domain model and documented decisions. Use when the user wants to stress-test a plan, clarify terminology, or validate assumptions against existing domain language. Updates CONTEXT.md and ADRs inline as decisions crystallise.