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

# Virtual envs
.venv/
venv/
env/

# Test / tooling caches
.pytest_cache/
.mypy_cache/
.ruff_cache/
.coverage
htmlcov/
.tox/

# Editors / OS
.vscode/
.idea/
*.swp
.DS_Store
Thumbs.db

# Local runtime artifacts
*.log
*.bak
~/.jmunch/
.claude/

# Bench runtime artifacts
bench/nanobot/.metrics*.db
bench/nanobot/results.csv
bench/nanobot/gateway-on-7880.toml
bench/nanobot/demo/demo_doc.txt
bench/nanobot/demo/gateway-left.toml
bench/nanobot/demo/gateway-right.toml

# Local upstream overrides: these carry real credentials and MUST NOT be
# committed or built. Hatchling builds from the WORKING TREE, so an untracked
# file that .gitignore does not name ships in the sdist. See RELEASING.md.
configs/*.local.toml
*.bak-*

# mcp-publisher writes these into the REPO ROOT at login. Untracked and, until
# named here, unignored - the one shape that reaches an sdist. The sdist
# allowlist also excludes them; this is the second lock.
.mcpregistry_*
