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

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

# Virtualenvs
.venv/
venv/

# Tooling caches
.mypy_cache/
.pytest_cache/
.ruff_cache/

# Test / coverage artifacts
.coverage
coverage.xml
coverage.json
htmlcov/

# MkDocs build output
site/

# Local environment
.env
.env.local

# --- Development / ecosystem ignores (don't ship)
.mcpregistry_*
.worktrees/
# Everything under .claude/ is local EXCEPT skills/ — that subtree ships the
# contributor-facing authoring skill(s), template-owned and re-rendered on
# copier update.  .claude/CLAUDE.md is project-owned and tracked, so it needs
# its own negation.
.claude/*
!.claude/skills/
!.claude/CLAUDE.md
docs/superpowers/
.repowise/

# Vale-synced style packages (downloaded by `vale sync`). Custom config
# (vocabularies, ini overrides) under .vale/styles/config/ stays
# versioned — sync never touches that subtree. A glob rather than a list of
# pack names, so adding a pack to .vale.ini's `Packages` cannot leak it
# into git.
.vale/styles/*
!.vale/styles/config/

# Editor-local config. Deliberately just this one — several tools (repowise
# among them) write into it unprompted, so it reappears in `git status` for
# contributors who never opted in. A team that does want to share workspace
# settings can track a specific file with `git add -f .vscode/settings.json`.
.vscode/

# --- Scholar-specific local artifacts
*.npy
*.npz
.playwright-mcp/
# No trailing slash: `.mcp.json/` would match a *directory* of that name and
# leave the actual file tracked.
.mcp.json
