node_modules/
# Local pi state (operator's settings.json, etc.) stays ignored. Repo-shared
# pi prompts live in .pi/prompts/ and ARE tracked — that path is the SSOT for
# /make-release.
.pi/*
!.pi/prompts/
.tmp-verify/
/.agent-shell/
/.codex
# This repo is a daily-driver bridge primarily exercised through pi, not
# through Claude Code in this cwd. The .claude/ scratch directory stays out
# of git entirely — slash commands have been migrated to .pi/prompts/.
/.claude/

CHECKLIST.md
*.html
*.cast

# Local `pnpm pack` / `npm pack` artifacts produced by `./run.sh check-pack-install`
# and the publish-prep smoke flow. The real publish artifact is fetched from npm.
*.tgz

# demo/ recordings — script + README are tracked; recorded artifacts are not.
demo/*.gif
demo/*.log

# compaction-policy-smoke probes + fixtures — raw turn captures and
# preserved session JSONLs are local operator evidence. Probe outcomes
# are summarized in compaction-policy-smoke/README.md and reproducible
# from the smoke driver + documented recipes.
demo/compaction-policy-smoke/probes/
demo/compaction-policy-smoke/fixtures/

# Local agent incident reports / handoff notes (not for GitHub)
.agent-reports/

# Husky 9+ auto-managed hook plumbing — only the hook scripts under .husky/
# (pre-commit, etc.) are committed; .husky/_/ is regenerated on `pnpm prepare`.
.husky/_/

# plugins/* — workspace sibling packages.
#
# dist/ is intentionally NOT ignored during prerelease: OpenClaw 5.12
# installed-plugin classification requires a JS runtime artifact (see
# `package-entry-resolution.ts` + `openclaw.runtimeExtensions` manifest
# key), and Phase 1 distributes via git-source install — so the dist/
# tree must travel inside the repo until publish ships.
#
# Switch to `plugins/*/dist/` ignore + `prepublishOnly: pnpm build`
# when Phase 2 npm/ClawHub publish lands (tarball owns dist via the
# package `files` allowlist).
plugins/*/node_modules/
