06B // COMPETITION FIELD REPORT

THE UNCOMFORTABLY
CLOSE ONE.

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

PIN THE CODE.
DECLARE THE DEBT.

VAGUS260c23av0.13.0
QMDdbfd0b4v2.8.3

This 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

NO, REALLY.
THEY RHYME.

01

MARKDOWN IN.

Both index files you can read, move, diff, and keep after the search engine is gone.

02

BM25 + VECTORS.

Both refuse the false choice between exact terms and semantic similarity.

03

RRF IN THE MIDDLE.

Both fuse independent retrieval lists with reciprocal-rank fusion.

04

LOCAL MODELS.

Both download model assets once, cache them locally, and infer on your hardware.

05

AGENT OUTPUT.

Both expose structured retrieval meant to feed an agent rather than another notes GUI.

06

DERIVED INDEX.

Both keep a local SQLite-backed projection beside durable source files.

DISCLOSE THE BLOODLINE

QMD ISN'T JUST
A RIVAL.

It is upstream influence.

Vagus --smart uses Tobi's QMD query-expansion GGUF. Pretending otherwise would be marketing cosplay.

VERIFIED IN VAGUS SOURCE. ATTRIBUTION IS NOT SURRENDER.

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

SEARCH ENGINE.
OR MEMORY WORKFLOW.

BLUE CORNER // RUSTVAGUSOPINIONATED SECOND BRAIN

Capture into one PARA vault. Retrieve evidence. Propose the file move. Let the human approve it.

  • one native executable
  • fixed PARA + iCloud path
  • BM25 + vectors + optional rerank/smart
  • no MCP server, SDK, or daemon
THE WORKFLOW IS THE PRODUCT.
RED CORNER // TYPESCRIPTQMDLOCAL SEARCH SUBSTRATE

Point collections at notes, docs, meetings, or code. Expand, retrieve, rerank, and expose the result over CLI, SDK, or MCP.

  • SQLite FTS5 + sqlite-vec
  • three local GGUF models
  • AST chunking for four code languages
  • CLI + SDK + stdio/HTTP MCP
THE SEARCH SURFACE IS THE PRODUCT.

EXHIBIT 00 // CLEAN CONTAINERS

THE TARBALL IS SMALL.
THE TREE ISN'T.

QMD // MEASURED

27.27 SECONDS.

npm install -g @tobilu/qmd@2.8.3 on Node 22, excluding base-image pull.

QMD // MEASURED

154 PACKAGES.

NPM's install report. The QMD tree contained 186 package manifests.

QMD // MEASURED

411 MB.

Writable-container growth after install and an empty 4 KB index.

QMD // MEASURED

229.0 MB.

The installed QMD package tree. The published package itself reports only 0.91 MB unpacked.

QMD // MEASURED

4,479 FILES.

Native addons, llama.cpp, grammars, TypeScript, MCP, SQLite, and package machinery.

QMD // PROJECT-REPORTED

~2.04 GB MODELS.

~300 MB embedder + ~640 MB reranker + ~1.1 GB query-expansion model.

Measured installation footprint comparison of Vagus and QMD
BillVagusQMDWhat it means
Install artifact15.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 setupvagus 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 diskMeasured 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 agingNative 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

PUT THE TRADEOFFS
UNDER OATH.

Architectural comparison of Vagus and QMD
QuestionVagusQMDWhat it costs
Job descriptionPersonal PARA capture, retrieval, and assisted filing.Local search across arbitrary named collections and project-local indexes.A product opinion versus a reusable substrate.
RetrievalBM25 + 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.
ChunkingMarkdown-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.
InterfacesCLI 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 modelFresh 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.
OrganizationOne fixed PARA tree with human-approved transitions.Collections, masks, contexts, project config, model overrides, and update hooks.Opinionated calm versus configurable reach.
Security shapeNo 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.
DataMarkdown 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

THIS TIME,
SCOPE IS CLOSE.

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.

VAGUS PROVES ONE BINARY CAN HIDE A LARGE BUILD GRAPH. NO HALOS TODAY.
VAGUS // SUPPORTED MAC$ brew tap vasovagal/tap
$ brew trust --tap vasovagal/tap # Homebrew 6+
$ brew install vagus
$ vagus init --icloud
→ five PARA folders + one symlink
QMD // DOCUMENTED NODE PATH$ npm install -g @tobilu/qmd
$ qmd collection add ~/notes --name notes
$ qmd embed
→ collection index + model cache

FAIRNESS 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

GIVE QMD
ITS DUE.

01 // RETRIEVAL

Typed query expansion, HyDE, weighted RRF, local reranking, and response caches form a richer end-to-end search pipeline.

02 // REUSE

A real SDK plus CLI and MCP surfaces make QMD useful inside other products instead of only as one finished workflow.

03 // CORPUS RANGE

Named collections, project indexes, contexts, code grammars, masks, hooks, and model overrides cover work Vagus intentionally refuses.

THE RULING

CHOOSE YOUR
BOUNDARY.

CHOOSE QMD IF…

SEARCH IS
THE PLATFORM.

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.
CHOOSE VAGUS IF…

THE WORKFLOW
IS THE POINT.

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?

THIS ONE IS.

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

DON'T TRUST THE COPY.
READ THE CODE.

  1. V01
    Vagus install and model-footprint disclosure ↗README.md // pinned
  2. V02
    Vagus PARA and iCloud initialization contract ↗src/init.rs // pinned
  3. V03
    Vagus smart-search use of QMD's query-expansion model ↗src/rewrite.rs // pinned
  4. V04
    Vagus features, Rust dependencies, and native build choices ↗Cargo.toml // pinned
  5. Q01
    QMD purpose, retrieval pipeline, and quick start ↗README.md // pinned
  6. Q02
    QMD package, runtime, native dependencies, and Node requirement ↗package.json // pinned
  7. Q03
    QMD runtime prerequisites and three model sizes ↗README.md // project-reported sizes // pinned
  8. Q04
    QMD Node/Bun launcher and native-ABI routing ↗bin/qmd // pinned
  9. Q05
    QMD typed expansion, rerank cache, and RRF ↗src/store.ts // pinned
  10. Q06
    QMD SQLite/sqlite-vec runtime fallback ↗src/db.ts // pinned
  11. Q07
    QMD default model URIs and cache location ↗src/llm.ts // pinned
  12. Q08
    QMD optional HTTP daemon and security caveats ↗README.md // pinned

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 →