MARKDOWN IN.
Both index files you can read, move, diff, and keep after the search engine is gone.
06B // COMPETITION FIELD REPORT
QMD is not a platform team disguised as search. It is a local Markdown search engine with excellent ideas. Which means Vagus cannot dismiss it on zoning. This one has to fight on product boundaries.
BEFORE THE TRASH TALK
v0.13.0v2.8.3This is not a retrieval benchmark. Source was inspected at pinned commits. QMD's documented Node install was measured in a clean Linux/arm64 container. Model sizes are project-reported unless explicitly marked measured. No quality winner is invented from two unrelated evals.
SHARED DNA
Both index files you can read, move, diff, and keep after the search engine is gone.
Both refuse the false choice between exact terms and semantic similarity.
Both fuse independent retrieval lists with reciprocal-rank fusion.
Both download model assets once, cache them locally, and infer on your hardware.
Both expose structured retrieval meant to feed an agent rather than another notes GUI.
Both keep a local SQLite-backed projection beside durable source files.
DISCLOSE THE BLOODLINE
It is upstream influence.
Vagus --smart uses Tobi's QMD query-expansion GGUF. Pretending otherwise would be marketing cosplay.
THE DISTINCTION: Vagus shares a query-expansion model with QMD, but wraps retrieval in an opinionated PARA capture → search → human-approved filing workflow. QMD stays a broader collection search engine and reusable SDK.
THE ACTUAL MATCHUP
Capture into one PARA vault. Retrieve evidence. Propose the file move. Let the human approve it.
Point collections at notes, docs, meetings, or code. Expand, retrieve, rerank, and expose the result over CLI, SDK, or MCP.
EXHIBIT 00 // CLEAN CONTAINERS
npm install -g @tobilu/qmd@2.8.3 on Node 22, excluding base-image pull.
NPM's install report. The QMD tree contained 186 package manifests.
Writable-container growth after install and an empty 4 KB index.
The installed QMD package tree. The published package itself reports only 0.91 MB unpacked.
Native addons, llama.cpp, grammars, TypeScript, MCP, SQLite, and package machinery.
~300 MB embedder + ~640 MB reranker + ~1.1 GB query-expansion model.
| Bill | Vagus | QMD | What it means |
|---|---|---|---|
| Install artifact | 15.34 MB compressed macOS release; 46.34 MB binary; six cellar files; no Homebrew formula dependencies. | 0.91 MB published package expands with dependencies to a measured 229.0 MB tree atop Node. | Package metadata can be tiny while runtime reality arrives in 154 follow-up acts. |
| First setup | vagus init --icloud: measured 0.29 seconds, five folders, one symlink, zero regular files. | Add each collection, optionally add context, then run qmd embed. Empty status creates a 4 KB index. | Vagus chooses your filing system. QMD makes you describe your corpora. |
| Model disk | Measured embedder cache: 1.256 GB. Every optional tier populated: 2.704 GB. | Documented full three-model cache: ~2.04 GB. Plain keyword search avoids model downloads. | Vagus wins package size, not full-cache size. QMD's full reported model set is smaller. |
| Runtime aging | Native release has no user-managed language runtime; maintainer still carries 512 locked Rust packages and native ML/search crates. | Node ≥22, native ABI modules, llama.cpp/GPU backends, SQLite extensions, and tree-sitter grammars evolve together. | Compiled does not mean simple to build. Interpreted does not mean simple to keep compatible. |
EXHIBIT A
| Question | Vagus | QMD | What it costs |
|---|---|---|---|
| Job description | Personal PARA capture, retrieval, and assisted filing. | Local search across arbitrary named collections and project-local indexes. | A product opinion versus a reusable substrate. |
| Retrieval | BM25 + vectors → RRF; optional cross-encoder rerank and local typed rewrite. | BM25 + vectors + typed lex/vec/HyDE expansion → weighted RRF → local reranking. | QMD owns the richer default quality pipeline. Vagus keeps complexity opt-in. |
| Chunking | Markdown-aware note and chunk retrieval, bounded around one vault. | Markdown boundaries plus optional AST chunking for TypeScript, Python, Go, and Rust. | QMD is better shaped for mixed docs-and-code corpora. |
| Interfaces | CLI and JSON. The host agent owns orchestration and final answers. | CLI, typed SDK, MCP stdio, and optional long-lived HTTP daemon. | QMD integrates farther; Vagus exposes less to maintain or secure. |
| Process model | Fresh process per command; models reload; no server mode. | Fresh CLI by default; optional HTTP daemon keeps models warm in VRAM. | Lower idle surface versus lower repeated model-load latency. |
| Organization | One fixed PARA tree with human-approved transitions. | Collections, masks, contexts, project config, model overrides, and update hooks. | Opinionated calm versus configurable reach. |
| Security shape | No listener and no collection shell hooks. Downloads models and reads/writes the vault. | Optional unauthenticated HTTP surface and arbitrary per-collection update commands, both documented with guardrails. | Features create threat classes. Guardrails reduce them; deletion removes them. |
| Data | Markdown is authoritative; indexes rebuild. Usage/provenance in SQLite is the disclosed exception. | Source files stay external; content-addressed SQLite stores FTS, vectors, mappings, and LLM cache. | Both preserve files. Both still have local state worth understanding. |
RUST VS TYPESCRIPT // ROUND TWO
So installation and product boundary actually matter.
QMD proves TypeScript can ship a serious local search engine. Its native graph also proves the runtime never travels alone.
$ brew tap vasovagal/tap
$ brew trust --tap vasovagal/tap # Homebrew 6+
$ brew install vagus
$ vagus init --icloud
→ five PARA folders + one symlink$ npm install -g @tobilu/qmd
$ qmd collection add ~/notes --name notes
$ qmd embed
→ collection index + model cacheFAIRNESS INTERRUPT: QMD does not require a daemon. It can run keyword-only without downloading models. Its optional shared MCP server is a genuine advantage when repeated CLI model loading is the bottleneck.
NO STRAW MEN ALLOWED
Typed query expansion, HyDE, weighted RRF, local reranking, and response caches form a richer end-to-end search pipeline.
A real SDK plus CLI and MCP surfaces make QMD useful inside other products instead of only as one finished workflow.
Named collections, project indexes, contexts, code grammars, masks, hooks, and model overrides cover work Vagus intentionally refuses.
THE RULING
You need multiple corpora, code-aware chunks, a reusable SDK, local expansion and reranking, MCP, or a warm shared model process.
PAY IN RUNTIME, NATIVE MODULES, CONFIGURATION, AND MODEL LIFECYCLE.You want one PARA vault, one native executable, iCloud scaffolding, explicit capture and filing, and an agent that receives evidence instead of a search platform.
PAY IN OPINIONATED STRUCTURE, FEWER INTERFACES, AND A LARGER FULL MODEL CACHE.OUR SO-CALLED COMPETITION?
QMD is the stronger general local search substrate. Vagus is the smaller, sharper second-brain workflow. If Vagus cannot make that workflow more useful than QMD plus a shell script, it deserves to lose.
PINNED EVIDENCE
Lab snapshot: Docker Server 29.2.1; Node 22.23.2 on node:22-bookworm digest sha256:0557ac…; Bun 1.4.0 on oven/bun:1 digest sha256:5ff609…. Both disposable containers and pulled images were removed after measurement. Sizes are decimal MB/GB.
Want the opponent with the platform team?
read Vagus vs GBrain →