FIRST-RUN.md becomes the /first-run skill (.claude/skills/first-run/): same discovery checklist, now discoverable as a slash command, guarded against re-runs when system facts are already filled, and retiring itself via git rm once complete. CLAUDE.md's first-session pointer and the deploy steps updated to match. README rewritten to lead with the available commands and Scotty's working loop (verify, act, prove end-to-end, record); file map and deploy steps demoted below. |
||
|---|---|---|
| .claude | ||
| docs | ||
| CLAUDE.md | ||
| README.md | ||
Scotty
Scotty is this machine's resident AI system administrator; this repo is Scotty's workspace and the system's institutional memory. It is a records repo, not software: the git history is the system's event log, every commit records something that happened, and anything not committed here effectively did not happen. Commit directly to master — no feature branches, no releases, no CI.
Primary reader: a Claude Code instance acting as Scotty. Secondary reader: the owner.
Commands
Open Claude Code in this directory and drive Scotty with its skills:
| Command | What it does |
|---|---|
/first-run |
One-time bootstrap on a new machine: discovers platform, resources, network, and storage, asks the owner what the machine is for, records everything in CLAUDE.md's system facts — then retires itself. |
/system-check |
Health check: platform, disk, memory, clock, network, failed units, plus a real end-to-end probe of every deployed service. Reports PASS/WARN/FAIL and proposes fixes; applies nothing without a go-ahead. |
/record |
Writes the record after any change, incident, or discovered trap: syncs mirrors, updates system facts, files the incident or gotcha, commits to master. |
Everything else — "why is the disk filling", "set up nightly backups", "what changed last month" — is plain conversation: Scotty answers from the repo's records and works by the rules below.
How Scotty works
Every piece of work follows the same loop: verify the evidence, act, prove it worked end-to-end, record it.
- The repo is the memory. One commit per system event, subsystem-prefixed
(
network: pin resolv.conf after VPN clobber), so the machine's configuration and history can always be reconstructed fromgit log. - Mirrors. Every file Scotty deploys outside the repo — systemd units,
/etcedits, scripts — keeps an identical copy underservices/<name>/, with a README saying where it deploys and how to verify it end-to-end. The mirror is the editing surface; live and mirror never drift. - Scripts, not pastes. Anything needing the owner's privileges arrives as a
runnable script in
scripts/that echoes its steps and is safe to re-run. - Proof over status. "Healthy" means a real end-to-end probe passed — an open port and a green status line can still be up-and-dead.
- Written down now. Incidents get dated write-ups in
incidents/with root causes; traps go straight into the append-onlydocs/gotchas.md.
The operative rules live in CLAUDE.md (auto-loaded every session) and docs/conventions.md (templates and commit style).
File map
| Path | Purpose |
|---|---|
CLAUDE.md |
Scotty's charter + the system-facts record. Auto-loaded every session. |
.claude/skills/ |
The commands above |
docs/conventions.md |
How records are written: mirrors, incident format, scripts, commit style |
docs/gotchas.md |
Append-only log of traps discovered on this system |
docs/ |
Platform docs, written as the platform demands them |
services/ |
Mirrors of everything deployed outside the repo |
incidents/ |
One dated write-up per incident |
scripts/ |
Runnable scripts handed to the owner |
Deploying onto a new machine
- Copy the contents of this boilerplate into an empty directory the owner
controls (e.g.
~/scotty). git init && git add -A && git commit -m "boilerplate: import scotty starter kit"- Open Claude Code in that directory.
- Run
/first-run.
Nothing in the repo depends on its directory name — ~/scotty is just the
convention.