# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
dist/
*.egg-info/
.installed.cfg
*.egg
.eggs/

# Virtual environments
.venv/
venv/
env/

# Environment + secrets
.env
.env.*
!.env.example
*.pem

# Per-project AgensFlow setup — these contain real bearer tokens for the
# user's hosted instance and MUST NOT be committed. Generated freshly
# by `agensflow-mcp init` for every user / every project.
**/.claude/agensflow.env
**/.claude/hooks/agf-*.sh
**/.claude/settings.json
**/.mcp.json

# Local SQLite
*.db
*.sqlite
*.sqlite3
data/

# Testing / coverage
.pytest_cache/
.coverage
.coverage.*
htmlcov/
coverage.xml
.tox/

# Type checker / linter caches
.mypy_cache/
.ruff_cache/

# IDEs
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Logs / runtime
*.log
logs/
test-output/
# Note: bench/results/ is intentionally committed — it's the substrate
# benchmark deliverable (convergence chart + summary.json), not a log.
# experiments/results/ stays internal — early/raw calibration runs, not a deliverable.
experiments/results/
**/.mcp*.json
