# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
.build/

# Virtual environments and env files
.env
.env*
.venv
env/
venv/
ENV/

# IDE
.idea/
.vscode/
*.swp
*.swo
*~

# Testing
.pytest_cache/
.coverage
htmlcov/
.tox/
.nox/

# Type checking
.mypy_cache/
.pytype/

# Local data
*.log
.current_project
.agent-bus/
.agents/
.users/
/Data/

# OS
.DS_Store
Thumbs.db

# Node.js (frontend)
node_modules/
*.tsbuildinfo
.bus-files/
.agent-prompt.txt
.navigator-state/
.playwright-session/

# Claude Code — per-user and ephemeral only; keep .claude/settings.json
# and .claude/commands/ trackable if/when the team wants to share them.
.claude/settings.local.json
.claude/worktrees/
scripts/sample-prompts/

# Provider benchmark outputs (evals/) — generated result CSV/JSON/PNG
evals/results/

# design-sync (/design-sync skill): staged converter + regenerated output.
# The durable inputs under .design-sync/ (config.json, NOTES.md,
# conventions.md, previews/, overrides/) ARE committed.
.ds-sync/
ds-bundle/
.design-sync/.cache/
.design-sync/learnings/
.design-sync/node_modules

# Agent-pool improvement loop (evals/spend.py, evals/loop.py): the project spend
# journal and its locks, and per-idea staging, are local state, never committed.
evals/results/spend-journal.jsonl
evals/results/spend.lock
evals/results/spend-owners/
evals/results/loop-staging/
