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

# Cache dirs skills create at run time; regenerated every run
.*-cache/

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