Skip to content
AI & Agents
Skill

/qmd

Search local markdown knowledge bases, notes, docs, and wikis with QMD. Use when users ask to find notes, retrieve documents, inspect a wiki, answer from indexed markdown, or set up QMD access.

BOOST
From plugin
pedronauck-skills
63787 skills1 command
Install
$ npx -y skills add pedronauck/skills --skill qmd --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/qmd

Context preview

The summary Claude sees to decide when to auto-load this skill.

Search local markdown knowledge bases, notes, docs, and wikis with QMD. Use when users ask to find notes, retrieve documents, inspect a wiki, answer from indexed markdown, or set up QMD access.

SKILL.md

qmd.SKILL.md
name: qmd
description: Search local markdown knowledge bases, notes, docs, and wikis with QMD. Use when users ask to find notes, retrieve documents, inspect a wiki, answer from indexed markdown, or set up QMD access.
license: MIT
compatibility: Requires qmd CLI or MCP server. Install via `npm install -g @tobilu/qmd`.
metadata:
  author: tobi
  version: "2.2.0"
allowed-tools: Bash(qmd:*), mcp__qmd__*

QMD - Query Markdown Documents

How search works

QMD searches local markdown collections: notes, docs, wikis, transcripts, and project knowledge bases. Use it before web search when the answer may already be in indexed local files.

The workflow is always:

1. Search for candidate documents. 2. Retrieve the full source with `qmd get` or `qmd multi-get`. 3. Answer from retrieved text, citing paths or docids.

Do not answer from snippets alone when the user needs facts, decisions, quotes, or nuance. Snippets are only leads.

Typical loop:

qmd search "merchant reality support interviews" -n 5
# leads: #abc123 concepts/customer-proximity.md; #def432 sources/merchant-call.md
qmd multi-get "#abc123,#def432" --format md

**Default to structured `qmd query` with `intent:`, `lex:`, `vec:`, and `hyde:` fields that you write yourself.** You are a better query expander than the built-in model: you know the user's actual goal, the domain vocabulary, and the nearby-but-wrong concepts to avoid. Do not just paste the user's words into `qmd query "..."` and hope the expansion model guesses right — supply the `intent:` and craft the lexical and semantic terms deliberately (see [Pick the right search mode](#pick-the-right-search-mode)).

When reporting what you retrieved, a compact note is enough; do not paste whole files unless needed:

Retrieved:
- #abc123 concepts/customer-proximity.md
- #def432 sources/merchant-call.md

Pick the right search mode

Use **BM25 lexical search** when you know exact words, titles, names, code symbols, or rare phrases:

qmd search "cockpit OKR Goodhart" -n 10
qmd search '"AI Before Headcount"' -c concepts -n 5

Use **`qmd query` with structured fields** when the user describes an idea indirectly, uses different wording than the source, or needs conceptual recall. **This is the default mode — write the fields yourself rather than leaning on query expansion.** Combine exact anchors with semantic recall:

qmd query $'intent: Find the concept note about metrics as instruments without letting OKRs replace judgment.\nlex: cockpit instruments OKR Goodhart metrics judgment\nvec: data informed not metric driven product judgment\nhyde: A concept note says metrics are useful like cockpit instruments, but leaders should remain data-informed rather than metric-driven because OKRs and dashboards can Goodhart product judgment.'

Structured query fields (you author each one — do not delegate this to the expansion model):

  • `intent:` states what you are trying to find **and what to avoid**. Always

supply this. It steers ranking away from nearby-but-wrong concepts.

  • `lex:` exact terms, aliases, titles, code symbols, and rare words you expect

in the source. This is your own keyword expansion.

  • `vec:` paraphrases the idea in natural language, in source-like wording.
  • `hyde:` describes the document or answer that would satisfy the request.

You do not need all four every time, but you should almost always write at least `intent:` plus one of `lex:`/`vec:`. A bare `qmd query "the user's sentence"` throws away the context only you have and relies on the built-in expander to reconstruct it — prefer the structured form.

If you genuinely have nothing to expand (a single rare token, a verbatim phrase), that is a job for `qmd search`, not bare `qmd query`:

qmd query --format json --explain $'intent: ...\nlex: ...\nvec: ...'  # inspect ranking

If `qmd query` is slow or model/GPU setup fails, fall back to `qmd search` with better lexical terms.

Retrieve sources

Search results include docids like `#abc123` and `qmd://...` paths. Fetch them:

qmd get "#abc123"
qmd get qmd://concepts/ai-before-headcount.md
qmd multi-get "#abc123,#def432" --format md
qmd multi-get 'concepts/{ai-before-headcount.md,data-informed-not-metric-driven.md}' --format md
qmd multi-get 'sources/podcast-2025-*.md' -l 80

Use `multi-get` when comparing several hits or gathering context across pages.

Output is line-numbered and carries the docid — cite both

`get` and `multi-get` are **line-numbered by default** and always print the document's `#docid` and `qmd://` path. So `get` output looks like:

qmd://concepts/note.md  #abc123
---

1: # Metrics as instruments
2:
3: Treat dashboards like cockpit instruments...

Cite the docid and exact line numbers in your answer, and use the numbers to ask for the next slice. Pass `--no-line-numbers` only when you need raw content to copy verbatim (e.g. reproducing a code block).

When you need to open or edit the underlying file (e.g. hand a path to `Read`, `Edit`, or an editor), add `--full-path`. It replaces the `qmd://` URL + docid header with the document's on-disk path, falling back to the canonical header if the file no longer exists on disk:

$ qmd get "#abc123" --full-path
/Users/you/notes/concepts/note.md
---

1: # Metrics as instruments

`--full-path` works the same way on `qmd search` and `qmd query`: result paths become the file's on-disk path — `./`-prefixed relative path when the file is inside `$PWD`, absolute realpath otherwise — and the per-result `#docid` is dropped because the path is the identifier. The leading `./` is intentional so the output is unambiguously a filesystem path and cannot be mistaken for a bare collection-relative string. Default search/query output still uses `qmd://` URIs; only opt into `--full-path` when you specifically need a path you can hand to a non-QMD tool.

Read line ranges with the `:from:count` suffix — never pipe th

Read more
Ships withpedronauck-skills

A curated collection of 87 agent skills for Claude Code and compatible AI coding assistants — 40 original (⭐️), 34 hand-picked (💎), and 13 marketing & business (📣).

Get the whole plugin
Stats
637
Stars
89
Forks
Maintained
Maintenance
Python
Language
1mo ago
Last commit
7mo ago
Created
4h ago
Added

Repo: pedronauck/skills

Other skills on pedronauck-skills.