qmd
qmd is a local search engine for Markdown files that indexes notes and documents for fast retrieval.
Community author
- Agents
- Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode, claude.ai and API
- License
- MIT (permissive)
- Pin
- 947001bpinned Oct 9, 2026
- Context cost
- about 1,400 tokenswhen the skill loads
- GitHub stars
- 18on ckorhonen/claude-skills
- Scripts
- None found
What it does
“Local hybrid search for markdown notes and docs. Use when searching notes, finding related content, or retrieving documents from indexed collections.”
Generated summary from the skill's own text
qmd is a local search engine for Markdown files that indexes notes and documents for fast retrieval. It offers keyword-based BM25 search as the default fast option, plus semantic vector search and hybrid LLM-reranked search for more complex queries. Use it to search personal knowledge bases, find related documents, and retrieve specific markdown files from indexed collections.
When to use it
- Searching notes and documentation with specific keywords quickly
- Finding semantically related content when keyword matching fails
- Retrieving documents from large indexed markdown collections
- Searching across multiple markdown files in knowledge bases
When not to
- When real-time indexing of constantly changing files is required
- For searching non-markdown file formats or unindexed directories
- When response time under one second is critical and vectors unavailable
Install
These commands install from the publisher's repository and need no account.
skills CLI
npx skills add ckorhonen/claude-skills --skill qmdInstalls from the repository's default branch, which may have changed since the commit we checked.
GitHub CLI 2.90 or later
gh skill install ckorhonen/claude-skills qmd@947001b038d62d9993ccad69b5b8f17ca075fb52Installs the commit we checked (947001b).
Copy by hand
Download the folder at 947001b and put it in .claude/skills/qmd for Claude Code and in .agents/skills/qmd for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.
Copy for your agent
A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.
Prompt
Install the agent skill "qmd" by ckorhonen. Source, pinned to commit 947001b038d62d9993ccad69b5b8f17ca075fb52: https://github.com/ckorhonen/claude-skills/tree/947001b038d62d9993ccad69b5b8f17ca075fb52/skills/qmd 1. Download that folder at exactly this commit. Do not use the default branch. 2. Copy every file unchanged, keeping the folder structure, into .claude/skills/qmd/ for Claude Code and .agents/skills/qmd/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist. 3. Do not edit the files, and do not run any script in the folder unless I ask you to. 4. When you are done, list the files you copied and where you put them. Listing and checks: https://www.agentnative.dev/skills/ckorhonen/qmd
SKILL.md at the pin
--- name: qmd description: Local hybrid search for markdown notes and docs. Use when searching notes, finding related content, or retrieving documents from indexed collections. --- # qmd - Quick Markdown Search Local search engine for Markdown notes, docs, and knowledge bases. Index once, search fast. ## When to use (trigger phrases) - "search my notes / docs / knowledge base" - "find related notes" - "retrieve a markdown document from my collection" - "search local markdown files" ## Default behavior (important) - Prefer `qmd search` (BM25). It's typically instant and should be the default. - Use `qmd vsearch` only when keyword search fails and you need semantic similarity (can be very slow on a cold start). - Avoid `qmd query` unless the user explicitly wants the highest quality hybrid results and can tolerate long runtimes/timeouts. ## Search modes | Mode | Command | Speed | Use case | |------|---------|-------|----------| | BM25 (default) | `qmd search` | Instant | Keyword matching | | Vector | `qmd vsearch` | ~1 min cold | Semantic similarity | | Hybrid | `qmd query` | Slowest | LLM reranking (skip unless requested) | ## Common commands ```bash qmd search "query" # default - fast keyword search qmd search "query" -c notes # search specific collection qmd search "query" -n 10 # more results qmd search "query" --json # JSON output qmd search "query" --all --files --min-score 0.3 ``` ## Useful options - `-n <num>`: number of results - `-c, --collection <name>`: restrict to a collection - `--all --min-score <num>`: return all matches above a threshold - `--json` / `--files`: agent-friendly output formats - `--full`: return full document content ## Retrieve documents ```bash qmd get "path/to/file.md" # Full document qmd get "#docid" # By ID from search results qmd multi-get "journals/2025-05*.md" qmd multi-get "doc1.md, doc2.md, #abc123" --json ``` ## Maintenance ```bash qmd status # Index health qmd update # Re-index changed files qmd embed # Update embeddings ``` ## Setup (if not installed) ```bash # Install bun install -g https://github.com/tobi/qmd # Create collection qmd collection add /path/to/notes --name notes --mask "**/*.md" qmd context add qmd://notes "Description of this collection" # optional qmd embed # one-time to enable vector + hybrid search ``` ## Performance notes - `qmd search` is typically instant - `qmd vsearch` can be ~1 minute on cold start (loads local LLM for query expansion) - `qmd query` adds LLM reranking on top of `vsearch`, even slower ## Common Pitfalls ### Search query too vague (irrelevant results) **Problem:** Broad queries like "notes" or "project" return hundreds of low-relevance matches. **Solution:** - Use specific keywords: `qmd search "Python async context managers"` not `qmd search "Python"` - Combine keywords: `qmd search "deadline March quarterly review"` - Use quotes for exact phrases: `qmd search "exact phrase match"` - Check result scores: `qmd search "query" --all --min-score 0.5` to filter low-confidence matches ### Index not updated (missing recent files) **Problem:** Newly created or recently modified files don't appear in search results. **Solution:** ```bash # Check index status qmd status # Re-index all changed files qmd update # Full re-index if update doesn't help qmd collection remove <name> qmd collection add /path/to/notes --name <name> --mask "**/*.md" qmd embed # if vector search enabled ``` ### Path filters wrong (excluding relevant directories) **Problem:** Search doesn't find files because the collection mask is too narrow or collection path is wrong. **Solution:** ```bash # List current collections qmd status # Verify collection path matches your notes location # If path changed, re-add collection: qmd collection remove <old-name> qmd collection add /path/to/notes --name <name> --mask "**/*.md" # Common issue: subdirectories excluded by mask # If notes are in journals/2025/*, use: --mask "**/*.md" # Not: --mask "*.md" (which only matches top level) ``` ### Search timeout on large vaults (performance issues) **Problem:** `qmd query` or `qmd vsearch` hangs or times out on large knowledge bases (1000+ files). **Solution:** - Avoid `qmd query` on large vaults (LLM reranking is too slow) - Use `qmd search` instead (BM25 is fast even on huge collections) - If semantic search needed, use `qmd vsearch` with `-n 5` to limit results - Restrict search scope with `-c <collection>` to search one collection instead of all: ```bash qmd search "query" -c notes -n 5 # faster than searching all collections ``` - If vault exceeds 5000 files, consider splitting into multiple collections ### Missing configuration (qmd not initialized) **Problem:** `qmd status` shows "No collections" or `qmd search` returns no results. **Solution:** ```bash # Install qmd if missing bun install -g https://github.com/tobi/qmd # Set up a collection qmd collection add /path/to/notes --name notes --mask "**/*.md" # Enable vector search (optional but recommended) qmd embed # Verify setup qmd status # Should show your collection with file count ``` ### Semantic search returns irrelevant results (vsearch/query) **Problem:** Vector search matches by topic but misses what you actually wanted. **Solution:** - Fall back to `qmd search` (BM25 keyword matching is more precise for specific terms) - Rephrase query to include actual keywords: not "What are my goals?" but "goals quarterly review objectives" - Use `qmd query` if available (adds LLM reranking), but only if you can tolerate slow runtime - Use `-n 3` to get fewer, higher-confidence matches from vector search
From ckorhonen/claude-skills at 947001b, shown as plain text under its license: MIT (permissive). The license text is in LICENSE.
View SKILL.md on GitHub at 947001bFiles
- SKILL.md5.8 KB · 54cb3619e86d
1 file, 5.8 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.
Skill folder on GitHub at 947001bRelated in Productivity
suggest-automations
This skill suggests three relevant automations to users based on their team role and connected apps, then builds the chosen workflow using the build-workflow…
by n8nOfficial publisher
Claude Code, Codex, Cursor +3 · about 1.9K tokens · pinned 6 days ago
agent-mail-automation
This skill enables agents to automate email operations through Composio's Agent Mail toolkit via the Rube MCP server.
by ComposioOfficial publisher
Claude Code, Codex, Cursor +3 · about 700 tokens · pinned 6 days ago
inbox-manager
This skill transforms an overflowing inbox into a short prioritized list by reading email from Gmail, Microsoft 365, or pasted text, sorting messages into…
by AnthropicOfficial publisher
Claude Code, Codex, Cursor +4 · about 2.5K tokens · pinned 6 days ago
huggingface-papers
This skill retrieves and analyzes AI research papers from Hugging Face's paper index and arXiv by fetching paper content as markdown or structured metadata…
by Hugging FaceOfficial publisher
Claude Code, Codex, Cursor +4 · about 2.2K tokens · pinned 6 days ago
curating-memory-palace
This skill lets the agent maintain a Memory Palace, a structured dashboard view that shows the user what the agent is working on, what it could do next, and…
by LettaOfficial publisher
Agents not labelled yet · about 3.1K tokens · pinned 6 days ago
scheduling-tasks
This skill lets you create and manage scheduled tasks using the letta cron CLI, sending prompts to the agent on a timer for reminders, periodic work, and…
by LettaOfficial publisher
Claude Code, Codex, Cursor +4 · about 2.3K tokens · pinned 6 days ago