## Python
__pycache__/
*.py[cod]
*$py.class
*.so

# Distribution / packaging
build/
dist/
*.egg-info/
*.egg

# Virtual environments
.venv/
venv/
env/
ENV/

# uv lockfile — generated locally by `uv sync` / `uv run` in dev
# worktrees. The project doesn't ship a committed lock (CI uses pip
# against pyproject.toml); adding one silently would change the
# workflow for contributors.
uv.lock

# pyenv
.python-version

# pytest / coverage
.pytest_cache/
.coverage
.coverage.*
coverage.xml
htmlcov/
.tox/
nox/
.cache

# mypy / ruff / pyright
.mypy_cache/
.ruff_cache/
.pyright_cache/

# Jupyter
.ipynb_checkpoints/

# Editors
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.idea/

# OS
.DS_Store
Thumbs.db

# ---------------------------------------------------------------
# Repo-specific
# ---------------------------------------------------------------

# Claude Code local settings (per-machine)
.claude/settings.local.json

# Local env overrides
.env
.env.local
.env.*.local
