Directory → SKILL
SKILLoptionalHermes Optional Skills

Qmd

Hybrid local search over notes, docs, and transcripts

SearchKnowledge-BaseRAGNotesMCPLocal-AIOptionalHermes skill
Last registry verification2026-08-18v1.0.0Hermes Agent + Teknium
Plain meaning

What does it add to Hermes?

Hybrid local search over notes, docs, and transcripts

Qmd is a skill related to memory and knowledge. It helps Hermes retrieve past information or stored knowledge instead of starting from zero in every session.

This plain-language explanation is based on the publisher description. The original text remains visible for verification.

Use it when

Use it when your goal in memory and knowledge is clear and you can limit it to the data and actions it actually needs.

Skip it when

Do not add it merely to experiment when Hermes already has a simpler path, or when you cannot review its source and permissions.

Who is it for?

Best for users who want a repeatable way of working inside Hermes.

Safe first test

Add a non-sensitive note, start a new session, and verify retrieval preserves the meaning without inventing details.

Original publisher description

Hybrid local search over notes, docs, and transcripts

✓
Data source

This entry was indexed from Hermes Optional Skills. Our explanation interprets the type and domain without inventing a capability not present upstream.

!
Security review

The source is official or editorially reviewed, but you still need to review permissions and version compatibility.

Safe setup path

Inspect, install, then test.

  1. 01
    Open the source

    Match the publisher, license, and description to your need. Check the real update history.

  2. 02
    Review permissions and secrets

    Never paste a secret value into this site. Use environment-variable names and grant the smallest scope.

  3. 03
    Copy setup only after review

    The controls below copy text. They do not execute commands on your device.

  4. 04
    Test with a non-sensitive task

    Inspect the visible tools, then exclude write or delete tools you do not need.

Install command

Review the command, then copy it.

hermes skills install qmd

Hermes Belarabi does not execute this command. Installation happens on your device and remains subject to Hermes scanning and your review.

The full skill definition

Exactly what Hermes loads when this skill runs.

Reproduced from the official documentation. Read it before enabling the skill: this text becomes the agent's instructions.

Hybrid local search over notes, docs, and transcripts.

Skill metadata

A lookup table. Do not read it all; find the row that applies to you.

SourceOptional — install with hermes skills install official/research/qmd
Pathoptional-skills/research/qmd
Version1.0.0
AuthorHermes Agent + Teknium
LicenseMIT
Platformsmacos, linux
TagsSearch, Knowledge-Base, RAG, Notes, MCP, Local-AI
Related skillsobsidian, hermes-agent, arxiv

Reference: full SKILL.md

Explains the idea itself. Read it slowly; the later sections build on it.

Local, on-device search engine for personal knowledge bases. Indexes markdown notes, meeting transcripts, documentation, and any text-based files, then provides hybrid search combining keyword matching, semantic understanding, and LLM-powered reranking — all running locally with no cloud dependencies.

Created by Tobi Lütke ↗. MIT licensed.

When to Use

Explains the idea itself. Read it slowly; the later sections build on it.

  • User asks to search their notes, docs, knowledge base, or meeting transcripts
  • User wants to find something across a large collection of markdown/text files
  • User wants semantic search ("find notes about X concept") not just keyword grep
  • User has already set up qmd collections and wants to query them
  • User asks to set up a local knowledge base or document search system
  • Keywords: "search my notes", "find in my docs", "knowledge base", "qmd"

Prerequisites

Explains the idea itself. Read it slowly; the later sections build on it.

Node.js >= 22 (required)

Shell11 lines
# Check version
node --version  # must be >= 22

# macOS — install or upgrade via Homebrew
brew install node@22

# Linux — use NodeSource or nvm
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
# or with nvm:
nvm install 22 && nvm use 22

SQLite with Extension Support (macOS only)

macOS system SQLite lacks extension loading. Install via Homebrew:

Shell1 line
brew install sqlite

Install qmd

Shell3 lines
npm install -g @tobilu/qmd
# or with Bun:
bun install -g @tobilu/qmd

First run auto-downloads 3 local GGUF models (~2GB total):

ModelPurposeSize
embeddinggemma-300M-Q8_0Vector embeddings~300MB
qwen3-reranker-0.6b-q8_0Result reranking~640MB
qmd-query-expansion-1.7BQuery expansion~1.1GB

Verify Installation

Shell2 lines
qmd --version
qmd status

Quick Reference

A lookup table. Do not read it all; find the row that applies to you.

CommandWhat It DoesSpeed
qmd search "query"BM25 keyword search (no models)~0.2s
qmd vsearch "query"Semantic vector search (1 model)~3s
qmd query "query"Hybrid + reranking (all 3 models)~2-3s warm, ~19s cold
qmd get <docid>Retrieve full document contentinstant
qmd multi-get "glob"Retrieve multiple filesinstant
qmd collection add <path> --name <n>Add a directory as a collectioninstant
qmd context add <path> "description"Add context metadata to improve retrievalinstant
qmd embedGenerate/update vector embeddingsvaries
qmd statusShow index health and collection infoinstant
qmd mcpStart MCP server (stdio)persistent
qmd mcp --http --daemonStart MCP server (HTTP, warm models)persistent

Setup Workflow

Ordered, practical steps. Run one and confirm it worked before moving on.

1. Add Collections

Point qmd at directories containing your documents:

Shell11 lines
# Add a notes directory
qmd collection add ~/notes --name notes

# Add project docs
qmd collection add ~/projects/myproject/docs --name project-docs

# Add meeting transcripts
qmd collection add ~/meetings --name meetings

# List all collections
qmd collection list

2. Add Context Descriptions

Context metadata helps the search engine understand what each collection contains. This significantly improves retrieval quality:

Shell3 lines
qmd context add qmd://notes "Personal notes, ideas, and journal entries"
qmd context add qmd://project-docs "Technical documentation for the main project"
qmd context add qmd://meetings "Meeting transcripts and action items from team syncs"

3. Generate Embeddings

Shell1 line
qmd embed

This processes all documents in all collections and generates vector embeddings. Re-run after adding new documents or collections.

4. Verify

Shell1 line
qmd status   # shows index health, collection stats, model info

Search Patterns

Explains the idea itself. Read it slowly; the later sections build on it.

Fast Keyword Search (BM25)

Best for: exact terms, code identifiers, names, known phrases. No models loaded — near-instant results.

Shell2 lines
qmd search "authentication middleware"
qmd search "handleError async"

Best for: natural language questions, conceptual queries. Loads embedding model (~3s first query).

Shell2 lines
qmd vsearch "how does the rate limiter handle burst traffic"
qmd vsearch "ideas for improving onboarding flow"

Hybrid Search with Reranking (Best Quality)

Best for: important queries where quality matters most. Uses all 3 models — query expansion, parallel BM25+vector, reranking.

Shell1 line
qmd query "what decisions were made about the database migration"

Structured Multi-Mode Queries

Combine different search types in a single query for precision:

Shell5 lines
# BM25 for exact term + vector for concept
qmd query $'lex: rate limiter\nvec: how does throttling work under load'

# With query expansion
qmd query $'expand: database migration plan\nlex: "schema change"'

Query Syntax (lex/BM25 mode)

SyntaxEffectExample
termPrefix matchperf matches "performance"
"phrase"Exact phrase"rate limiter"
-termExclude termperformance -sports

HyDE (Hypothetical Document Embeddings)

For complex topics, write what you expect the answer to look like:

Shell1 line
qmd query $'hyde: The migration plan involves three phases. First, we add the new columns without dropping the old ones. Then we backfill data. Finally we cut over and remove legacy columns.'

Scoping to Collections

Shell2 lines
qmd search "query" --collection notes
qmd query "query" --collection project-docs

Output Formats

Shell6 lines
qmd search "query" --json        # JSON output (best for parsing)
qmd search "query" --limit 5     # Limit results
qmd get "#abc123"                # Get by document ID
qmd get "path/to/file.md"       # Get by file path
qmd get "file.md:50" -l 100     # Get specific line range
qmd multi-get "journals/*.md" --json  # Batch retrieve by glob

CLI Usage (Without MCP)

Explains the idea itself. Read it slowly; the later sections build on it.

When MCP is not configured, use qmd directly via terminal:

Text1 line
terminal(command="qmd query 'what was decided about the API redesign' --json", timeout=30)

For setup and management tasks, always use terminal:

Text4 lines
terminal(command="qmd collection add ~/Documents/notes --name notes")
terminal(command="qmd context add qmd://notes 'Personal research notes and ideas'")
terminal(command="qmd embed")
terminal(command="qmd status")

How the Search Pipeline Works

Explains the idea itself. Read it slowly; the later sections build on it.

Understanding the internals helps choose the right search mode:

  1. Query Expansion — A fine-tuned 1.7B model generates 2 alternative queries. The original gets 2x weight in fusion.
  2. Parallel Retrieval — BM25 (SQLite FTS5) and vector search run simultaneously across all query variants.
  3. RRF Fusion — Reciprocal Rank Fusion (k=60) merges results. Top-rank bonus: #1 gets +0.05, #2-3 get +0.02.
  4. LLM Reranking — qwen3-reranker scores top 30 candidates (0.0-1.0).
  5. Position-Aware Blending — Ranks 1-3: 75% retrieval / 25% reranker. Ranks 4-10: 60/40. Ranks 11+: 40/60 (trusts reranker more for long tail).

Smart Chunking: Documents are split at natural break points (headings, code blocks, blank lines) targeting ~900 tokens with 15% overlap. Code blocks are never split mid-block.

Best Practices

Explains the idea itself. Read it slowly; the later sections build on it.

  1. Always add context descriptions — qmd context add dramatically improves retrieval accuracy. Describe what each collection contains.
  2. Re-embed after adding documents — qmd embed must be re-run when new files are added to collections.
  3. Use qmd search for speed — when you need fast keyword lookup (code identifiers, exact names), BM25 is instant and needs no models.
  4. Use qmd query for quality — when the question is conceptual or the user needs the best possible results, use hybrid search.
  5. Prefer MCP integration — once configured, the agent gets native tools without needing to load this skill each time.
  6. Daemon mode for frequent users — if the user searches their knowledge base regularly, recommend the HTTP daemon setup.
  7. First query in structured search gets 2x weight — put the most important/certain query first when combining lex and vec.

Troubleshooting

A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.

"Models downloading on first run"

Normal — qmd auto-downloads ~2GB of GGUF models on first use. This is a one-time operation.

Cold start latency (~19s)

This happens when models aren't loaded in memory. Solutions:

  • Use HTTP daemon mode (qmd mcp --http --daemon) to keep warm
  • Use qmd search (BM25 only) when models aren't needed
  • MCP stdio mode loads models on first search, stays warm for session

macOS: "unable to load extension"

Install Homebrew SQLite: brew install sqlite Then ensure it's on PATH before system SQLite.

"No collections found"

Run qmd collection add <path> --name <name> to add directories, then qmd embed to index them.

Embedding model override (CJK/multilingual)

Set QMD_EMBED_MODEL environment variable for non-English content:

Shell1 line
export QMD_EMBED_MODEL="your-multilingual-model"

Data Storage

Explains the idea itself. Read it slowly; the later sections build on it.

  • Index & vectors: ~/.cache/qmd/index.sqlite
  • Models: Auto-downloaded to local cache on first run
  • No cloud dependencies — everything runs locally

References

Explains the idea itself. Read it slowly; the later sections build on it.