| name | howto-qmd |
| description | Use when searching markdown knowledge bases, documentation, or notes for relevant context - provides qmd CLI syntax for keyword, semantic, and hybrid search across indexed collections |
Using qmd for Knowledge Base Search
Overview
qmd is a local search engine for markdown documents. It combines BM25 keyword search, vector semantic search, and LLM-powered hybrid re-ranking. Use it to find relevant context in documentation, notes, and knowledge bases when grep is too literal and you need conceptual matching.
When to Use
Prefer qmd over grep when:
- Searching documentation or notes for conceptually related content
- You know what you're looking for but not the exact terms used
- You need to find relevant context across a large markdown knowledge base
- Building context for a task from scattered documentation
Use grep instead when:
- Searching code files (qmd indexes markdown only)
- Looking for exact string matches or regex patterns
- The search target is a known identifier, import, or error message
Search Modes
| Mode | Command | Speed | Best For |
|---|
| Keyword (BM25) | qmd search | Fast | Known terms, exact phrases |
| Semantic (vector) | qmd vsearch | Slow | Conceptual queries, fuzzy recall |
| Hybrid (re-ranked) | qmd query | Slowest | Highest quality, broad exploration |
Default to qmd search unless keyword results are insufficient. Escalate to vsearch or query only when needed.
CLI Quick Reference
qmd search "authentication flow"
qmd vsearch "how users log in"
qmd query "best practices for session management"
qmd search "rate limiting" -c api-docs
qmd search "error handling" -n 20
qmd search "deployment" --full
qmd search "config" --full --line-numbers
qmd search "auth" --json --full
qmd get "docs/auth.md" --full
qmd get "docs/auth.md:45" -l 100
qmd multi-get "docs/**/*.md" --json
Collection Management
qmd collection add ~/projects/docs --name project-docs --mask "**/*.md"
qmd collection list
qmd collection remove old-notes
qmd update
qmd embed
qmd status
Output Formats
| Flag | Format | Use Case |
|---|
| (default) | Human-readable | Interactive use |
--json | JSON | Programmatic processing |
--files | CSV: docid,score,filepath,context | File-oriented workflows |
--xml | XML | Structured integration |
--md | Markdown | Documentation pipelines |
Filtering and Scoring
qmd search "deployment" --min-score 0.5
qmd search "config" --all --min-score 0.3
qmd search "setup" --max-bytes 50000
Practical Patterns
Gather context before starting a task:
qmd search "authentication" -c project-docs -n 10 --files
qmd get "docs/auth-design.md" --full --line-numbers
Escalation pattern when keywords miss:
qmd search "retry logic"
qmd vsearch "how failures are retried"
qmd query "error recovery and retry mechanisms"
Bulk context loading:
qmd multi-get "design-docs/*.md" --json
Common Mistakes
| Mistake | Fix |
|---|
Using qmd query for every search | Start with qmd search, escalate only if needed |
Forgetting to run qmd embed | Required once before vsearch/query work |
| Searching code files with qmd | qmd indexes markdown only; use grep or ast-grep for code |
Not specifying -c with many collections | Restrict to relevant collection for better signal |
Ignoring --min-score with --all | Unfiltered results include low-relevance noise |
Red Flags
- Running
qmd query repeatedly in a loop (expensive; cache or batch instead)
- Using qmd when a simple grep for a known string would suffice
- Forgetting
qmd update after documents change
- Not running
qmd embed after adding new collections