# macOS
.DS_Store

# Secrets & local env
.env
.env.local
.env.*.local

# Claude Code local state — ignored, EXCEPT the shipped operator skill
# (`.claude/skills/aeon/` gives every fork the `/aeon` setup skill; see docs/aeon-setup.md)
.claude/*
!.claude/skills/
.claude/skills/*
!.claude/skills/aeon/

# Working scratch dirs some skills stage during a run, then clean up:
# .pending-notify (notify re-delivery), .pending-deploy (deploy-prototype build),
# plus .pending-notify-temp where skills stage notify bodies for `./notify -f`
.pending-*/
# ...and the FILE form. The trailing slash above matches directories only, so the
# json-render staging file (.pending-<skill>.md) was tracked and committed; a later
# read-only run that could not overwrite it had the previous run's digest published
# as its own. It now lives outside the repo ($AEON_PENDING_DIR); this is the guard
# against it coming back.
.pending-*.md
apps/dashboard/outputs/.pending-*.md

# Audit log staged into the workspace only to be uploaded as a run artifact
# (scripts/audit.sh). The authoritative copy lives outside the repo in
# $AEON_PENDING_DIR; this staged copy must never be committed.
/audit-artifact/
# Dry-run gate verdicts (scripts/dry-run.sh) are ephemeral run artifacts, not source.
output/.dry-run/

# deploy-uni-hook stages its key-safe runner + chain registry at the repo root
# (like ./notify / ./secretcurl) from skills/deploy-uni-hook/templates/; these are
# run-time copies, not sources, so they must never be committed.
/hook-deploy.sh
/chains.tsv

# Skill provenance lock (per-repo, not committed)
/skills.lock

# Scratch / temp files
/tmp_*
*.tmp
.*-tmp.md
.*-draft.md
.*-msg.txt
/*_msg.txt
/*_raw.txt

# Python bytecode
__pycache__/
*.pyc

# Node
node_modules/

# remotion skill: render outputs + the working storyboard are runtime-only
skills/remotion/project/out/
skills/remotion/project/props.json

# eyebrow local snapshot cache (content-addressed; not committed)
.eyebrow/

# Run scratch: the sandbox blocks reads of /tmp, so skills stage payloads, parsers
# and notify bodies repo-locally, and the run's `git add -A` then commits them
# (aeon-agent#274 removed 340 such files). All root-anchored so real files deeper
# in the tree are never caught. output/.chains/ (chain artifacts) and
# output/.attest/ (attestation snapshots) are real run output and stay tracked.
/.aeon-update-*
/.tmp*
/.xai*
/.notify*
/output/.*
!/output/.chains/
!/output/.attest/
/output/articles/.*
!/output/articles/.gitkeep
/output/*notify*.md
/output/xai-*.json
