__pycache__/
*.pyc
.venv/
.env

# Tool caches / generated reports
.pytest_cache/
.ruff_cache/
.mypy_cache/
.VSCodeCounter/

# Coverage artifacts from the test runner
.coverage
coverage.xml
htmlcov/

# Python build / packaging artifacts (uv build, pip wheel, etc.)
build/
dist/
*.egg-info/

# Node / Playwright — the e2e-tests workflow runs @playwright/test via npx.
node_modules/
/test-results/
/playwright-report/
/blob-report/
.last-run.json

# OS / editor cruft.
.DS_Store
*.swp

# marim's per-project working dir: offloaded fetch bodies, sub-agent/output
# spill, the last-provider-error payload, and generated test reports — all local
# scratch. Ignored wholesale; commit a specific file with a negation (e.g.
# `!.marim/mcp.json`) if a project ever needs to track project-local config.
.marim/

# Git worktrees created by --worktree / the /worktree command.
.worktrees/

# Claude Code host config — per-machine and duplicated by marim's own plugins.
# marim never reads .claude/ (see test_ignores_claude_agents_dir) nor the root
# .mcp.json (it uses .marim/mcp.json; see mcp/config.py). The playwright agents
# + MCP server ship as the examples/playwright plugin, the source of truth.
.claude/
.mcp.json
# Stray Playwright seed scaffolded at the repo root by `playwright init-agents`.
# The e2e workflow's real seed lives at tests/seed.spec.ts (still trackable);
# only the misplaced root copy is ignored.
/seed.spec.ts

# Playwright e2e workspace scaffolded by `playwright init-agents` (the planner's
# specs/plan.md output dir). Scaffold, not marim source — the workflow itself
# lives in the examples/playwright plugin. Ignored wholesale.
/specs/
