# Python
__pycache__/
*.py[cod]
*.egg-info/
build/
dist/

# Ignore all dot-directories (.venv, .pytest_cache, .ruff_cache, .vscode, ...)
.*/
# ...except the project's tracked Claude config. Private working notes stay out:
# settings.local.json is per-machine, and plans/ + housekeeping.md are internal
# planning that names hardware and unshipped ideas.
!.claude/
.claude/settings.local.json
.claude/plans/
.claude/housekeeping.md
# ...and except the GitHub configuration, which only works where GitHub looks for
# it. The catch-all above hid it silently: a workflow that is never committed is
# indistinguishable from one that never runs.
!.github/

# Other virtual environments
venv/

# MeshTerm runtime data
*.db
output/

# Developer environment: the machine-specific half of the .claude/ skills (device
# addresses, logins, the local venv path). .dev.env.example is tracked and shows the shape.
.dev.env

# Built radio firmware (scripts/xiao-radio/build-firmware.sh writes it here)
scripts/xiao-radio/*.uf2
scripts/xiao-radio/_meshcore-build/
