Establish this repo as a collection of independent script folders for the self-hosted environment (odin, an Unraid host). - CLAUDE.md: repo conventions, the odin stack, and MemPalace usage. The infrastructure facts are carried over from the FamilySync project, where they are documented and verified; the mapping of the name "odin" to that host is assumed and flagged for confirmation, along with the SSH/deploy gaps marked "?". - Core rule: each collection is a self-contained top-level folder owning its own docs, config, and dependencies. No shared/ or utils/ at the root — duplication is preferred over coupling so a collection stays independently deletable. - _template/: scaffold making that rule concrete. The bash entrypoint ships strict mode, --dry-run, and a required-env guard (all four paths tested). - mempalace.yaml: wing "odin-scripts", set explicitly because basename auto-detection would produce the colliding wing "scripts". Tracked rather than gitignored so a fresh clone keeps the config; entities.json stays ignored. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
One sentence: what this collection does and why it exists.
Prerequisites
- Where it runs:
odin(Unraid) / this workstation / either - Interpreters: bash / Python 3 / Node 22
- External tools: e.g.
docker,tea,curl - Access needed: e.g. SSH to odin, Gitea API token
Configuration
Copy .env.example to .env and fill it in. Real values live in <where>.
| Variable | Required | Description |
|---|---|---|
EXAMPLE_HOST |
yes | Target host to operate against |
Usage
bin/example --dry-run # preview, changes nothing
bin/example # apply
Behaviour notes
- Idempotent: yes/no — and what happens on a re-run.
- Destructive operations: list them, or state "none".
- Scheduling: cron entry / Unraid User Scripts / manual only.
Gotchas
Anything that cost time to discover. This is the section that earns the collection its own folder — keep it honest and current.