# macOS metadata — recursive (root `.DS_Store` alone misses nested dirs)
**/.DS_Store

# Personal — untrack to keep local: `git rm --cached TODO.md`
TODO.md

# AI harness, project memory, and planning/thinking documents.
# Kept local-only: these stay on disk for Claude to read, but are not
# published to this public repo. Cloud sync is handled separately via a
# private repo (TODO); do NOT re-track them here.
# NOTE: no trailing slash — in git worktrees the post-checkout hook installs
# these as SYMLINKS (not dirs), and a trailing-slash pattern matches dirs only,
# so `git add -A` in a worktree would otherwise re-track the harness symlinks.
/.claude
/CLAUDE.md
/AGENTS.md
/conventions
/.codex
/memory/
/docs/

# Playwright MCP scratch output (live-debugging snapshots/screenshots)
.playwright-mcp/

# Environment / secrets
.env
.env.local
.env.*.local

# Dependencies
node_modules/
vendor/

# Python build / cache
__pycache__/
*.py[cod]
*$py.class
*.egg-info/
.pytest_cache/
.coverage
htmlcov/
.tox/
.venv/
venv/

# Vite / electron-vite
dist/
out/
.vite/

# Electron / electron-builder
release/
build/
*.dmg
*.exe
*.AppImage
*.snap
*.blockmap
mac/
mac-arm64/
win-unpacked/
linux-unpacked/

# PyInstaller
*.spec.bak

# Runtime — keep the directory, ignore artifact contents
apps/desktop/resources/sidecar/*
!apps/desktop/resources/sidecar/.gitkeep

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

# OS
.DS_Store
Thumbs.db

# Logs
*.log
logs/
!apps/desktop/logs/
apps/desktop/logs/*
!apps/desktop/logs/.gitkeep

# Audit reports produced by .claude/skills/audit
/reports/

# Note: uv.lock and package-lock.json are intentionally committed
#   (BeatOS is an application, not a library — lockfiles must be reproducible)

# superpowers brainstorming companion
.superpowers/