**/.env
Dockerfile
.dockerignore
.git
.gitignore
docker/

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
.venv/

# Web
node_modules
npm-debug.log
.next

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

# OS
.DS_Store
Thumbs.db

# Project specific
conf.yaml
web/
docs/
examples/
assets/
tests/
*.log

# Exclude directories not needed in Docker context
# Frontend build only needs frontend/
# Backend build only needs backend/
scripts/
logs/
docker/
skills/
frontend/.next
frontend/node_modules
backend/.venv
backend/htmlcov
backend/.coverage

# Runtime data written by a running DeerFlow, not build inputs. backend/Dockerfile
# does `COPY backend ./backend`, so leaving these in the context both bakes the
# sqlite database, per-user uploads and the JWT secret into the image and breaks
# the build outright once the app has created directories owned by the container's
# root that the build client cannot read.
**/.deer-flow/
backend/sandbox/
*.md
!README.md
!frontend/README.md
!backend/README.md

# Extension manager snapshots must enter the backend builder intact. A Python
# package may require README metadata, native modules, or package assets that
# the general image-context exclusions above intentionally omit elsewhere.
!backend/extensions/
!backend/extensions/sources/
!backend/extensions/sources/**
