__pycache__/
*.py[cod]
.pytest_cache/
.ruff_cache/
*.egg-info/
build/
dist/
.venv/
.env
*.sqlite
*.sqlite3
*.db
.outrage/
.rage/
.DS_Store

# Nothing under .claude/ is committed. Every part of it is one of three things:
# rendered output whose source of truth is src/outrage/ - settings.json, and
# the skill and agents that `outrage init` writes or that this checkout links
# at src/outrage/ to dogfood them; this machine's own configuration, in
# settings.local.json; or the SessionStart canary, which probes the client
# rather than this project and stays on the machine that runs it. Recreate the
# lot with `outrage init`. A project that is not outrage itself has every
# reason to commit some of this.
.claude/

# Everything under .codex/ is rendered output on the same rule as .claude/
# above: `outrage init` writes the skill bundle there from src/outrage/codex/,
# which is the source of truth, and the config and the canary belong to the
# machine that runs them. Recreate it with `outrage init`. A project that is not
# outrage itself has every reason to commit some of this.
.codex/

# The root .agents/ tree is local harness state too. Repository-owned agent
# sources live under src/outrage/, so nothing here is a source of truth.
.agents/

# The Copilot CLI hook and agents are rendered output too, on the same rule as
# .claude/ above: the templates in src/ are the source of truth, and a canary
# belongs on the machine that runs it rather than in the repository. A project
# that is not outrage itself has every reason to commit these files.
.github/hooks/outrage.json
.github/agents/

# .mcp.json is the last of the files `outrage init` writes, and was the only one
# still committed. Its `command` is an absolute path into a conda environment
# and its `--dir` an absolute path to a store, so the committed copy was true on
# exactly one machine; it was excluded from the sdist for that reason before it
# was excluded from here. Recreate it with `outrage init`.
.mcp.json

# CLAUDE.md and AGENTS.md were pointers saying "the store is the record, go read
# its readme". That sentence is delivered twice already, by the SessionStart
# hook `outrage init` installs and by the MCP server's own instructions, and
# `context/74`/`context/75` in the store are the work that made the second of
# those reliable. A third copy in a file nothing tests is the copy that goes
# stale, which AGENTS.md did: it still named the `project` key that became
# `contents`, and a `.Codex/` directory that `outrage init` writes as `.codex/`.
#
# A project that is not outrage itself has every reason to commit these. This
# one has the hook, and no store to point at in a fresh clone anyway - .outrage/
# is ignored above.
CLAUDE.md
AGENTS.md
.outrage-*/
.rage-*/

# Sphinx build output
docs/_build/
