dsh-setup
Install DSH on a fresh Mac. Runs sovereign-setup-mac.sh, renders .env from secrets backend, applies full sovereign lockdown, probes machine, and pulls right-sized Ollama models — one guided flow that
SKILL.mdkb/claude/skills/dsh-setup/SKILL.md
GitHubYou are bootstrapping a Dome Sovereign Hub (DSH) node on a fresh Apple Silicon Mac. The user has already cloned garochee33/DSH to $HOME/DSH (or set $DOME_ROOT). Your job is to run the end-to-end setup without leaving anything halfway.
1. Preflight
Confirm before doing anything destructive:
$DOME_ROOTresolves to a real directory (default:$HOME/DSH). If not, stop and ask.- macOS version is ≥ 13 (
sw_vers -productVersion). Windows users must runscripts/sovereign-setup-windows.ps1instead — bail out. xcode-select -preturns a path. If not, runxcode-select --installand exit — tell the user to re-run after it completes.sudo -vprompt works (fail early if the user can't authorize).
2. Run the base setup
cd "$DOME_ROOT"
bash scripts/sovereign-setup-mac.sh
This is the 20-step Homebrew/pyenv/nvm/VSCode/DB bootstrap. It is idempotent — safe to re-run. Near the end it prompts for an AI-assistant pick; choose based on user preference or skip.
When it finishes, verify:
command -v brew && command -v pnpm && command -v pyenvall print paths."$DOME_ROOT/.venv/bin/python" --versionreports the version pinned in$DOME_ROOT/.python-version(currently Python 3.14.x).cat "$DOME_ROOT/.env"exists (copied from.env.exampleby the setup script if it wasn't already there).
3. Render secrets into .env (if template backend is in use)
If .env.template has {{keychain:...}} or {{pass:...}} markers:
bash "$DOME_ROOT/scripts/render-env.sh"
This replaces markers with values from macOS Keychain (preferred) or pass (GPG). Confirm with head -5 "$DOME_ROOT/.env" — there should be no {{...}} tokens left. If any marker remains, list them for the user to provision before continuing.
4. Apply sovereign lockdown
bash "$DOME_ROOT/scripts/lock-down.sh" # kill phone-home daemons, pin DNS
bash "$DOME_ROOT/scripts/lock-down-phase2.sh" # firewall + stealth
bash "$DOME_ROOT/scripts/lock-down-phase3.sh" # pf anchor for telemetry endpoints
bash "$DOME_ROOT/scripts/lock-down-phase4.sh" # daemon audit + permanent removal
bash "$DOME_ROOT/scripts/pf-reload.sh" # reload pf with the anchor
Each script will prompt for sudo once and keep the cached credential alive while it runs. If any exits non-zero, STOP — do not proceed to steps 5+ until the lockdown is clean.
5. Probe the machine
"$DOME_ROOT/.venv/bin/python" "$DOME_ROOT/scripts/machine-probe.py"
Write-out lands at agents/core/.mesh/machine.json. Report the summary line to the user:
Apple M5 Pro · 18 cores (6S + 12P) · 48.0 GB RAM · 40+ TOPS NPU · tier=sovereign
6. Pull right-sized local LLM weights
bash "$DOME_ROOT/scripts/ollama-init.sh"
This reads the tier detected in step 5 and pulls the matching Ollama models. On a sovereign tier (≥18 GB RAM) expect qwen2.5-coder:14b + llama3.1:8b + nomic-embed-text. Confirm with ollama list.
7. Initialize state + ingest KB
cd "$DOME_ROOT"
source .venv/bin/activate
python3 scripts/register-claude.py # creates dome.db tables: agents, skills, tools, stack
python3 scripts/ingest.py # indexes kb/, logs/, docs into ChromaDB
After this: sqlite3 db/dome.db "SELECT COUNT(*) FROM skills" should return ≥ 8. python3 -c "import chromadb; print(chromadb.PersistentClient('db/chroma').get_collection('dome-kb').count())" should return ≥ 1500.
8. Verify all protocols
python3 scripts/pre-spore-verify.py # expect: 27/27 READY FOR SPORE.SH
bash scripts/audit.sh # expect: all green (or documented yellows)
bash scripts/dome-check.sh # expect: 0 failures on a fresh install
If any of the three fails, surface the specific failure and do NOT declare setup complete. Common causes:
akashic:write+queryfails → staleakashicChromaDB collection. Fix: delete viapython3 -c "import chromadb; chromadb.PersistentClient('db/chroma').delete_collection('akashic')"then re-run.dome-checkfails onSQLite DB missing→ skipped step 7. Go back.audit.shfails onFileVault OFF→ user must enable in System Settings → Privacy & Security. This is not auto-fixable.
9. Report
Give the user a single-block status:
✅ DSH installed at $DOME_ROOT
✅ Lockdown active — firewall + pf anchor + DNS pinned
✅ Machine: <summary_one_liner output>
✅ KB indexed: <N> chunks in dome-kb
✅ pre-spore-verify: 27/27
Next: run `spore.sh` with a Trinity SPORE_TOKEN to activate Phase 2 (mesh).
Non-negotiables
- Never proceed past a failing step.
- Never commit
.envor log output from lockdown scripts. - Never run lockdown steps without explicit user sudo approval (the scripts handle it, but if they error-out silently, STOP).
- If the user has a non-M-series Mac (Intel), warn them — DSH is tested on Apple Silicon; some MPS-specific PyTorch code will not use acceleration.