node_modules/
# Block .codex/ contents by default; re-include only the shared hooks config.
# Local state (session caches, plugin material, etc.) stays out of git.
.codex/*
!.codex/hooks.json
# Block .claude/ contents by default; re-include only the shared settings file.
# Hook scripts now live in scripts/hooks/ (provider-neutral) and are tracked
# under their own path. Local state (sessions, caches, etc.) stays out of git.
.claude/*
!.claude/settings.json
.marrow/
.worktrees/
dist/
*.tgz
site/out/
site/out-console/
site/out-docs/
# Brand compiler outputs are generated review artifacts (regenerate via
# brand/compiler/pdf/compile.mjs). Only the README is tracked.
brand/out/**
!brand/out/README.md
graphify-out/*
!graphify-out/graph.json
!graphify-out/GRAPH_REPORT.md
.env
.env.*
!.env.example
.secrets/*
!.secrets/.env.example
*.pem
*.key
*.p8
credentials.json
service-account.json

# Private benchmark artifacts: the committable benchmark surface carries
# numbers/flags/scores/ids only. Answer text, gold, watchlists, and any
# embargoed content stay in *.private.* files (eval-runs answers, corpus gold),
# which are never committed.
*.private.*

# Python bytecode caches (the benchmark GPU bridges + handlers are .py; their
# compiled artifacts are machine-local and must never be committed).
__pycache__/
*.pyc

# local OS/editor noise
.DS_Store

# Compiled Python — the graphrag bridge + gpu handler regenerate these locally
__pycache__/
*.pyc

# clients/ SDK lane — build/packaging/test caches are machine-local. The SDK
# source, the conformance capture harness, and the captured-wire fixtures stay
# tracked (the fixture is the drop-in ground truth); only these regenerate.
clients/python/dist/
clients/python/build/
clients/python/*.egg-info/
clients/python/.pytest_cache/
clients/**/.pytest_cache/
