.env
.DS_Store
__pycache__/
*.pyc
.ruff_cache/
.pytest_cache/
dist/
*.egg-info/
.venv/
/dashboard.png
/stitch*.png
/demo/output/
/demo/*_demo_report.md
/demo/*_demo_report.json

# Private strategy docs — never commit
MONETIZATION.md
STRATEGY.md
PRICING.md
ROADMAP.md
ROADMAP_DIFFERENTIATORS.md

# Local AI assistant instructions — machine-specific, never commit
CLAUDE.md
PHASE_COMPLETION_REVIEW.md

# Task management (local only)
.claude/tasks/
.claude/task-list.md
.tasks.json

# Session artifacts — development/presentation files, never commit
CAROUSEL-BLUEPRINT.md
INTEGRATION_PLAN.md
JOURNEY-COMPLETE-v3-to-v7.md
PRESENTATION.md
SECURITY_AUDIT_REPORT.md
SECURITY_REMEDIATION.md
STATUS_v*.md
chronicle-graph.html
journey-into-llm-router-v3-to-v7.md
mcp-registry.json
presentation.html
token-savings-viz.html

# Session memories — Claude Memory database, machine-specific
.serena/

# Tool artifacts — browser tests, decision logs
.lore/
.playwright-cli/
.playwright-mcp/

# User-specific config files — should never be committed
~/.*/
.claude/
.codex/
.config/
.cursor/
.gemini/
.llm-router/
.openclaw/
# Anchored, and for the same reason as the block below: on a case-insensitive
# filesystem an unanchored `Library/` also matches `src/llm_router/library/`,
# which hid six more source files.
/Library/

# Internal planning docs
.internal/

# Development-only directories — not needed by end users.
#
# ANCHORED WITH A LEADING SLASH. Unanchored, `agents/` matches a directory of
# that name at ANY depth, so it silently swallowed src/llm_router/agents/ and
# src/llm_router/library/ — 11 source files that existed locally, were never
# committed, and broke CI with "No module named 'llm_router.agents'".
#
# `llm_router.agents.session` is in server._CRITICAL_MODULES, so a published
# build missing it would have failed its own startup check — the failure would
# have reached users as a server that refuses to boot.
#
# Nothing here is meant to exclude anything under src/.
/research/
/deprecation/
/agents/
/demo/

# Internal docs — dev/strategy, not user-facing

# Unused README SVGs (removed from README)

# Deployment artifacts
Dockerfile
Procfile

# Local MCP config
.mcp.json

# Claude Code session/project artifacts (machine-specific)
.claude/sessions/
.claude/projects/
.claude/settings.json
.claude/mcp.json
tests/hook_rendering/

# Docs are local working notes — never commit (except the CI-generated benchmark page
# and versioned release-evidence packs, which are permanent records, not working notes)
/docs/*
!/docs/BENCHMARKS.md
!/docs/releases/
!/docs/releases/**
