Local & offline
The whole registry on your machine — whole-machine crawl, dashboard, and MCP server, no network needed. This page walks you through it below.
To run Quartermaster locally, clone the repo, npm install, npm run build,
and npm start with your scan roots — about two minutes, fully offline.
It’s one codebase that runs in three shapes — local, Docker, or a cloud
hub — so pick the one that fits, or mix them (a cloud hub fed by collectors on
every machine is the full setup). The local shapes run fully offline: the
embedding model is baked in at build time, so there are no API keys and no
runtime network calls.
Local & offline
The whole registry on your machine — whole-machine crawl, dashboard, and MCP server, no network needed. This page walks you through it below.
Docker
A persistent container with a named volume for the index — loopback-published, token-authenticated, restarts itself. Docker guide →
Cloud hub on Cloudflare
The registry as a Worker (D1 + Vectorize + Workers AI), fed by a thin collector on each device. Secrets are redacted on-device before anything is uploaded. Cloud hub guide →
Guided installers (no terminal)
Not sure? Start local — it’s self-contained and two minutes of setup. You can add a cloud hub and collectors later; there’s also a hub-and-collector mode without Cloudflare where a self-hosted server indexes pushes from other machines.
Clone and build (same on every OS):
git clone https://github.com/talberthoule/quartermastercd quartermasternpm installnpm run buildThen download the embedding model (one time) and start the server with the roots you want scanned. The env-var syntax differs per shell, so pick your OS:
$env:TRANSFORMERS_CACHE = ".\.cache"node dist/prefetch.js # one-time embedding-model download
$env:DB_PATH = ".\qm.db"$env:ALLOW_REMOTE_MODELS = "0"$env:SCAN_ROOTS = "C:\,E:\"npm startTRANSFORMERS_CACHE=./.cache node dist/prefetch.js # one-time embedding-model download
DB_PATH=./qm.db TRANSFORMERS_CACHE=./.cache ALLOW_REMOTE_MODELS=0 \SCAN_ROOTS="~/.claude,~/.codex,~/.gemini,/Users/$USER/Code" npm startTRANSFORMERS_CACHE=./.cache node dist/prefetch.js # one-time embedding-model download
DB_PATH=./qm.db TRANSFORMERS_CACHE=./.cache ALLOW_REMOTE_MODELS=0 \SCAN_ROOTS="/mnt/c,/mnt/e,~/.claude,~/.codex,~/.gemini,~/.hermes" npm startSCAN_ROOTS="auto" discovers every local volume at scan time instead —
Windows fixed drives, Linux local filesystems plus WSL drive mounts, macOS
dev-backed mounts. Network shares are excluded so a dead mapped drive can’t
hang the crawl.
Scanning is cross-platform — paths are normalized internally, ~ is expanded,
and per-OS system trees (Windows Program Files, macOS Library, …) are
skipped.
The server listens immediately and crawls in the background — the MCP is usable right away and the index grows as the crawl proceeds:
curl http://localhost:8765/health # {"status":"ok","indexed":N,"scanning":true}Then open http://localhost:8765/ in your browser for the dashboard.