2.0 KiB
2.0 KiB
TODO
Bootstrap installer (next session — 2026-08-14)
Goal: clone this repo on any machine, run one command, and every file lands where the tooling expects it.
git clone <this repo> ~/projects/claude-mds && ~/projects/claude-mds/install.sh
Shape
- A manifest, not a script full of paths. Declare
repo path -> target pathin one file and letinstall.shwalk it. Adding a doc later should mean one manifest line, not editing shell. - Symlinks, not copies. Same reason as here: two copies drift, and the point
of the repo is that an edit lands in git.
ln -sfn. - Idempotent. Safe to re-run after every
git pull. Re-linking an existing correct link is a no-op. - Conditional targets.
user/CLAUDE.mdinstalls everywhere.officer.dev/only where that workspace exists. A manifest entry needs a "only if this path exists" condition. - Never clobber silently. If the target is a real file and not our link,
back it up (
.bak-<date>) and say so. That file may be the only copy of something written by hand on that machine. - Dry run by default, or at least
--dry-run. Show what it would link.
Known problem to fix while doing it
user/CLAUDE.md hardcodes ~/projects/claude-mds/tools/mask-secret.py. That
path is this machine's. Options: have the installer rewrite the path at install
time, put the tools on PATH (~/.local/bin/mask-secret), or resolve it from
$CLAUDE_MDS_HOME. Prefer the PATH option — the doc then names a command
rather than a location, which is true everywhere.
Open questions
- Which files are genuinely universal vs this-machine-only? Right now
officer.dev/CLAUDE.mdis the only machine-specific one, but theplatform-appstore/set is a candidate and was never folded in. - Should
settings.json/ hooks be managed here too, or only.mdfiles? The repo is named for the docs but already carriestools/. - Bootstrapping the bootstrap: the machine needs git and the repo URL before any
of this runs. Worth a one-line
curl | sh, or deliberately not.