# Claude Code worktree scaffolding
.worktrees/
.claude/worktrees/

# Dependencies
node_modules
.pnpm-store/

# Build outputs
dist/
build/
out/
types/

# ...except the Claude Code plugin's bundle, which is a COMMITTED artifact: an
# installed plugin has no node_modules and no build step, so the shipped bytes
# have to be in the repo. A test asserts it is tracked and byte-identical to a
# fresh build. The directory itself must be re-included before its contents —
# git cannot re-include a file whose parent directory is excluded.
!plugin/dist/

# Environment files
.env
.env.local
.env.*.local

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

# Claude Code local settings (written by SessionStart hook in web sessions)
.claude/settings.local.json

# Claude Code personal notes (recurring nitpicks / review feedback, never committed)
CLAUDE.local.md
.claude/CLAUDE.local.md

# OS
.DS_Store
Thumbs.db

# Logs
*.log
npm-debug.log*
pnpm-debug.log*

# Coverage
coverage/

# Python
__pycache__/
*.pyc
.venv/
.uv/
*.egg-info/

# Generated: the self-contained CLI bundled into the Python wheel at build time
# (see scripts/bundle-python-cli.mjs). A build artifact from src/, never committed.
python/agent_sanitizer/_bundled/

# Stryker mutation testing
.stryker-tmp/
reports/mutation/
reports/stryker-incremental.json
stryker.shard.json

# gh CLI state, written when a tool run puts HOME inside the checkout.
.local/

# `pnpm pack` output: a build artifact regenerated on demand, never a source.
*.tgz
