Local search engine for markdown content.
! qmd status 2>/dev/null || echo "Not installed: npm install -g @tobilu/qmd"
query#json
{
"searches": [
{ "type": "lex", "query": "CAP theorem consistency" },
{ "type": "vec", "query": "tradeoff between consistency and availability" }
],
"collections": ["docs"],
"limit": 10
}
TypeMethodInputlexBM25Keywords — exact terms, names, codevecVectorQuestion — natural languagehydeVectorAnswer — hypothetical result (50-100 words)
lex (keyword)
"connection pool" (quoted)performance -sports (minus prefix)handleError asyncvec (semantic)
"how does the rate limiter handle burst traffic""in the payment service, how are refunds processed"hyde (hypothetical document)
expand (auto-expand)
expand: question on its own lineexpand: with other typed lines — it's either a standalone expand query or a full query documentWhen a query term is ambiguous, add intent to steer results:
json
{
"searches": [
{ "type": "lex", "query": "performance" }
],
"intent": "web page load times and Core Web Vitals"
}
Intent affects expansion, reranking, chunk selection, and snippet extraction. It does not search on its own — it's a steering signal that disambiguates queries like "performance" (web-perf vs team health vs fitness).
GoalApproachKnow exact termslex onlyDon't know vocabularyUse a single-line query (implicit expand:) or vecBest recalllex + vecComplex topiclex + vec + hydeAmbiguous queryAdd intent to any combination above
First query gets 2x weight in fusion — put your best guess first.
SyntaxMeaningExampletermPrefix matchperf matches "performance""phrase"Exact phrase"rate limiter"``-termExcludeperformance -sports
Note: -term only works in lex queries, not vec/hyde.
json
{ "collections": ["docs"] } // Single
{ "collections": ["docs", "notes"] } // Multiple (OR)
Omit to search all collections.
ToolUsegetRetrieve doc by path or #docid``multi_getRetrieve multiple by glob/liststatusCollections and health
bash
qmd query "question" # Auto-expand + rerank
qmd query $'lex: X\nvec: Y' # Structured
qmd query $'expand: question' # Explicit expand
qmd query --json --explain "q" # Show score traces (RRF + rerank blend)
qmd search "keywords" # BM25 only (no LLM)
qmd get "#abc123" # By docid
qmd multi-get "journals/2026-*.md" -l 40 # Batch pull snippets by glob
qmd multi-get notes/foo.md,notes/bar.md # Comma-separated list, preserves order
bash
curl -X POST http://localhost:8181/query \
-H "Content-Type: application/json" \
-d '{"searches": [{"type": "lex", "query": "test"}]}'
bash
npm install -g @tobilu/qmd
qmd collection add ~/notes --name notes
qmd embed