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

# Distribution / packaging
build/
dist/
wheels/
*.egg-info/
.eggs/
*.egg
MANIFEST

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# uv: uv.lock IS committed -- do not ignore it.

# ------------------------------------------------------- Virtual envs -------
.venv/
venv/
env/
ENV/

# -------------------------------------------------- Test / lint caches ------
# ruff and pytest write self-ignoring .gitignore files inside these, so they
# are usually invisible anyway; listed explicitly so the repo does not depend
# on that behaviour.
.pytest_cache/
.ruff_cache/
.mypy_cache/
.dmypy.json
.pyre/
.pytype/
.nox/
.tox/
.cache/
.coverage
.coverage.*
coverage.xml
htmlcov/
*.cover
.hypothesis/

# ------------------------------------------------------------- Docs ---------
/site/
/docs/examples/*.html

# ------------------------------------------------------------ marimo --------
# session cache created by `marimo check` / `export` / `edit`
**/__marimo__/

# ------------------------------------------------- Agent / dev tooling ------
# NOTE: .kata.toml and .roborev.toml are shared project config and ARE
# committed. Only local overrides and generated state are ignored here.

# kata -- per-developer overrides and local state
.kata.local.toml
.kata/

# roborev -- review snapshots, regenerated on demand
/.roborev/

# superpowers -- local skill state
/.superpowers/

# git worktrees created by the agent tooling
/.worktrees/

# claude code -- CLAUDE.md and AGENTS.md are committed; local settings are not
.claude/settings.local.json

# ---------------------------------------------------------- Editors / OS ----
.DS_Store
.idea/
.vscode/
*.swp
*.swo
*~

# Internal working notes, untracked by decision.
/notes/
