# OS
.DS_Store
Thumbs.db

# Editor
.vscode/
.idea/
*.swp
*.swo
*~

# Logs and temp
*.log
*.tmp
/tmp/

# Environment
.env
.env.*
!.env.example

# Node (if tooling is added later)
node_modules/

# Claude Code local settings (machine-specific)
.claude/settings.local.json

# APM dependencies
apm_modules/

# APM install output — deployed copies of released plugin content, regenerated
# by `apm install`. The authoring source is plugins/<name>/.apm/; committing a
# deployed copy would add a third mirror of the same skills to drift against.
.claude/skills/
.claude/agents/

# APM MCP deployment output — `apm install` writes the repo-root .mcp.json from
# the MCP servers its dependencies declare, and regenerates it on every install.
# It is apm's output, not repo content; nothing here is hand-authored.
/.mcp.json

# APM hook deployment output — `apm install` copies each package's referenced
# hook scripts here. Regenerated on every install; the authoring source is
# plugins/<name>/.apm/hooks/ (ADR-0019). The .claude/apm-hooks.json ownership
# sidecar is committed, not ignored: without it a fresh clone's install cannot
# claim the committed settings.json entry and duplicates it (ADR-0019).
.claude/hooks/

# `apm pack` bundle output. The pre-push gate runs pack with --dry-run, so this
# only appears after a bare `apm pack` during a release; it is not repo content.
build/

# `apm pack`'s manifest for the *root* package. Emitted beside the marketplace
# manifest by a bare `apm pack`, and never tracked on any branch — the repo's
# own paths hide it, since the apm-pack-check-clean pre-push hook, the only
# thing that runs pack here, passes --dry-run. Scoped
# to the file, not the directory: the sibling .claude-plugin/marketplace.json is
# compiled output that IS committed and must stay tracked.
/.claude-plugin/plugin.json
