# Python
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg
*.egg-info/
dist/
build/
.eggs/
*.manifest
*.spec
pip-log.txt
pip-delete-this-directory.txt

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

# Tooling
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
htmlcov/
.tox/
.nox/
.hypothesis/
.cache/

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

# Local env / secrets
.env
.env.*
!.env.example
*.pem
*.key

# Build artifacts
*.tar.gz
*.whl

# Notebooks
.ipynb_checkpoints/

# Docker volumes
docker-volumes/

# Logs
*.log
logs/

# Eval scratch
evals/**/results/
evals/**/.scratch/

# Q10 LongMemEval-S corpus regenerated locally via
# evals/spike_q10_cross_tool/corpus/pin_longmemeval.py — too large to
# commit (~265 MB raw, ~52 MB pilot incl. haystacks). SHA-pinned in
# SOURCE.md so the regen is reproducible.
evals/spike_q10_cross_tool/corpus/longmemeval_s_cleaned.json
evals/spike_q10_cross_tool/corpus/longmemeval_s_cleaned.jsonl
evals/spike_q10_cross_tool/corpus/pilot_*.jsonl

# Claude Code project config
# Global ~/.gitignore_global ignores .claude/ wholesale; this project
# versions agents + commands while keeping user-local settings private.
!.claude/
!.claude/agents/
!.claude/agents/*.md
!.claude/commands/
!.claude/commands/*.md
.claude/settings.local.json
.serena/
