__pycache__/
*.py[cod]
*$py.class
*.egg-info/
dist/
build/
.eggs/
*.egg
.venv/
.env
.ruff_cache/
.pytest_cache/
.coverage
htmlcov/
coverage.xml
.mypy_cache/
*.so

# Local-only symlinked skills — ignore all except maintainer-owned skills
.claude/skills/*
!.claude/skills/release-manager
!.claude/skills/review-agentskills-spec
.claude/commands/super-plan.md
.claude/commands/super-plan-team.md
.claude/commands/chunk.md
.claude/commands/code-review.md
.claude/commands/kickoff.md
.claude/commands/closeout.md
.claude/commands/validate.md
.claude/commands/close-ticket.md
.claude/commands/ralph-run.md
.claude/agents/pr-reviewer.md
.claude/agents/code-reviewer.md
.claude/agents/planner.md

# Clauditor local state (history, saved grade reports) —
# .clauditor/* (not the directory itself) so /badges/ can be
# re-included below. Per git-ignore semantics: a directory-level
# "/clauditor/" exclude prevents children from being re-included,
# but "/clauditor/*" + an explicit "!" re-include works.
.clauditor/*
# Badges ARE committed so shields.io can serve them via
# raw.githubusercontent.com (per docs/badges.md embedding recipe).
!.clauditor/badges/

# Beads / Dolt files (added by bd init)
.dolt/
*.db
.beads-credential-key
work-*/

# Local untracked artifacts
.claude/scheduled_tasks.lock
docs/temp/
site/
.envrc
docs/medium-article-draft.md
