# ── Secrets ──────────────────────────────────────────────
.env

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

# ── Virtual environments ────────────────────────────────
.venv/

# ── Testing & linting ──────────────────────────────────
.pytest_cache/
.ruff_cache/
.mypy_cache/
.coverage
htmlcov/

# ── IDEs ────────────────────────────────────────────────
.idea/
.vscode/
*.swp
*.swo
*~

# ── Docker named-volume fallback (if bind-mounted) ─────
neo4j_data/
neo4j_logs/

# ── Claude Code / Cowork session artifacts ─────────────
.claude/

# ── Development references (not part of codebase) ─────
_obsidian_mcp_ref/
dev/
site/
# ── Skill packaging artifacts ──────────────────────────
# `*.skill` zips are generated from `engrama/skills/<name>/` on
# demand (see issue #14). The in-package directory is the single
# source of truth; the zip is never committed.
*.skill
GEMINI.md
CLAUDE.md
.specify
specs