# 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//.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//.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