npx claudepluginhub martinffx/atelier --plugin pythonThis skill uses the workspace's default tool permissions.
Modern Python development tooling using uv, mise, ruff, basedpyright, and pytest.
Sets up opinionated Python dev environment with uv for packages, ty for type checking, ruff for linting/formatting, pytest for testing, just for tasks. For new projects, pyproject.toml config, modernizing setups.
Sets up Python projects with uv for deps/envs, ruff for linting/formatting, ty for types, pytest for testing. Use for new projects, scripts, or migrations from pip/Poetry.
Sets up modern Python projects with uv package manager for fast dependencies, pyproject.toml config, virtual environments, ruff linting/formatting, src layout, and PyPI publishing.
Share bugs, ideas, or general feedback.
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: