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

# Virtual environments
.venv/
venv/
env/

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

# Secrets and local config
.env
config/config.yaml
config/whatsapp.yaml

# Local data (never committed)
data/photos/
data/embeddings/
data/memory.db
data/memory/
data/auth/
data/perception/
data/models/
# Sandbox state lives outside the project tree by default
# (under /var/lib/boxbot-sandbox/). The patterns below cover legacy
# in-tree sandbox paths in case anyone bootstraps the older layout.
data/sandbox/

# Hailo runtime logs
hailort*.log
pyhailort*.log

# Preview renders (scripts/preview_display.py, scripts/block_gallery.py)
data/previews/

# Logs
logs/

# OS
.DS_Store
Thumbs.db
*:Zone.Identifier

# Session-local tooling state
.claude/

# Runtime state
data/scheduler/
data/integrations/

# Voice-ID diagnostic recordings (scripts/diag/) — private audio, Pi-local
data/voice_diag/

# Ad-hoc audio artifacts (test output)
/*.wav
/tts_samples/

# User-installed plugins (committed built-ins only)
skills/*/
!skills/bb/
!skills/onboarding/
!skills/hal-sandbox-ref/
!skills/skill_authoring/
!skills/home/
integrations/*/
!integrations/weather/
!integrations/calendar/
!integrations/home_assistant/
displays/*/
!displays/example_display/
# Pre-seeded displays ship with the repo. Custom user/agent-authored
# displays land in displays/<name>/ on the Pi and stay gitignored —
# add them here individually if they should become pre-seeded too.
!displays/morning_brief/
!displays/focus_clock/
!displays/home_metrics/
!displays/now_listening/
data/credentials/

# Agent workspace — directory committed, runtime contents ignored
data/workspace/*
!data/workspace/.gitkeep
.pytest-tmp/
