qmd
Skill9 starsChanged 2 months agoApache-2.0View on GitHub
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.
- Installs packages
23 other projects use a version of this, 4 of them edited.
Adopted by
Most recently taken up by
- tristanphvn/keeltheir own version, first seen Nov 8, 2026
- droxey/skillstheir own version, first seen Nov 8, 2026
- Liang-MH/skillstheir own version, first seen Nov 8, 2026
- compozy/compozytheir own version, first seen Nov 7, 2026
- pankaj-mahaur/Agent-Daemontheir own version, first seen Nov 6, 2026
- gabrielkoerich/skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use defuddle, obsidian-bases and 5 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
HK-hubSkilldefuddle
Extract clean markdown content from web pages using Defuddle CLI, removing clutter and navigation to save tokens. Use instead of WebFetch when the user provides a URL to read or analyze, for online documentation, articles, blog posts, or any standard web page.
Also in 4 projects that use this
wangzhuofengSkillobsidian-bases
Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.
Also in 4 projects that use this
jykimSkillobsidian-cli
Interact with Obsidian using the official CLI to read, search, create, and manage notes, daily notes, tasks, properties, and more. Use when the user wants to query or manipulate vault content via the obsidian command.
Also in 4 projects that use this
wangzhuofengSkilljson-canvas
Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.
Also in 3 projects that use this
VercelSkillagent-browser
Automates browser interactions for web testing, form filling, screenshots, and data extraction. Use when the user needs to navigate websites, interact with web pages, fill forms, take screenshots, test web applications, or extract information from web pages.
Also in 4 projects that use this
VercelSkillvercel-react-best-practices
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
Also in 3 projects that use this
- +1 more from wangzhuofeng
Other versions23 projects use a version of this.
Word for word · 0
None found.
Edited · 4
- tobi/qmd★ 30k71% same
- pedronauck/skills★ 64990% same
- SAP/e-mobility-charging-stations-simulator★ 23298% same
- SamuelNDCE/claude-super-skill-library★ 198% same
Wrote their own version · 19
- breferrari/obsidian-mind★ 5.4ksame name
- compozy/compozy★ 2.9ksame name
- levineam/qmd-skill★ 703same name
- benoror/obsidianos_work★ 166same name
- ckorhonen/claude-skills★ 17same name
- iagocavalcante/claude-turbo-search★ 16same name
- superuser-pal/awesome-second-brain★ 14same name
- docxology/codomyrmex★ 10same name
- changeflowhq/skills★ 9same name
- gabrielkoerich/skills★ 8same name
9 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository60 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- check-for-updatesSkill
- api-designSkill
- bddSkill
- blueprintSkill
- brainstormingSkill
- browser-usageSkill
- clarify-codeSkill
- cleanupSkill
- codebase-designSkill
- code-contractsSkill
- code-reviewSkill
- commitSkill
- confluence-exportSkill
- database-proSkill
- datadogSkill
- diagnosing-bugsSkill
- diagram-designSkill
- e2e-testSkill
- explain-code-flowSkill
- explain-simplySkill
- frontend-slidesSkill
- glabSkill
- grill-meSkill
- handoffSkill
- herdrSkill
- i-have-adhdSkill
- impeccableSkill
- implementSkill
- improve-codebase-architectureSkill
- jiraSkill
- loomSkill
- markitdownSkill
- mermaid-skillSkill
- modularity-designSkill
- modularity-reviewSkill
- plannotatorSkill
- ponytailSkill
- prototypeSkill
- refactorSkill
- releaseSkill
- researchSkill
- security-reviewSkill
- show-meSkill
- skill-doctorSkill
- stop-the-slopSkill
- tddSkill
- teachSkill
- terraform-engineerSkill
- ticket-overviewSkill
- to-specSkill
- to-ticketsSkill
- update-docstringsSkill
- wayfinderSkill
- write-documentationSkill
- write-readmeSkill
- write-simplySkill
- writing-for-agentsSkill
- wtfSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 8 are distinctive, and 12 are very specific to this project.
0
Common
Most of the 22 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 24
Search for candidate documents.
- Distinctive: line 28
Do not answer from snippets alone when the user needs facts, decisions, quotes, or nuance.
- Distinctive: line 47
When reporting what you retrieved, a compact note is enough.
- Distinctive: line 58
Use BM25 lexical search when you know exact words, titles, names, code symbols, or rare phrases:
- Very specific: line 66
Use qmd query with structured fields when the user describes an idea indirectly, uses different wording than the source, or needs …
- Very specific: line 90
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:
- Very specific: line 97
If qmd query is slow or model/GPU setup fails, fall back to qmd search with better lexical terms.
- Very specific: line 102
Search results include docids like #abc123 and qmd://...
- Very specific: line 112
Use multi-get when comparing several hits or gathering context across pages.
- Very specific: line 132
When you need to open or edit the underlying file (e.g.
- Very specific: line 183
Search results include a :line anchor on each hit — feed it straight into qmd get path:line:<n> to read a window around the match (line …
- Distinctive: line 195
Add collection filters when broad searches drift into the wrong corpus:
- Distinctive: line 206
When using the MCP server, prefer structured searches:
- Distinctive: line 250
Only mutate indexes when the user asked for setup or maintenance.
- Very specific: line 275
Do not slice files with
sed/head/tail: Use the path:from:count suffix (e.g. - Very specific: line 278
Do not lean on query expansion: Write intent:/lex:/vec:/hyde: yourself.
- Distinctive: line 281
Do not overuse semantic search: If you know exact titles or terms, BM25 is faster and often better.
- Very specific: line 285
Model-backed commands can be environment-sensitive: If qmd query, qmd vsearch, or reranking fails because local models/GPU are unavailable, …
- Very specific: line 288
Ambiguous user wording needs intent: Add intent: rather than hoping query expansion guesses the right domain.
- Very specific: line 290
Collection names matter: Search concepts for synthesized wiki pages, sources for transcripts/raw source pages, and docs collections for …
“Common” is measured: kept by at least 6 in 10 of the 22 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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:
- Search for candidate documents.
- Retrieve the full source with
qmd getorqmd multi-get. - 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 mdDefault 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).
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.mdPick 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 5Use 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 rankingIf 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 80Use 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 through sed/head/tail
qmd get slices files itself. Use the suffix or flags; do not shell out to
sed -n, head, tail, or awk to pull a line range. Piping defeats docid
resolution, virtual-path lookups, line numbering, and the header, and it is
slower and more error-prone.
The most compact form is a :from:count suffix right on the path or docid —
prefer it:
qmd get "#abc123:120:40" # 40 lines starting at line 120
qmd get qmd://concepts/note.md:200:60 # lines 200–259
qmd get "#abc123:120" # from line 120 to end of file
qmd get "#abc123" --from 120 -l 40 # equivalent, using flagsSuffix and flags:
<path>:<from>:<count>— start at line<from>, read<count>lines. Best for reading around a search hit.<path>:<from>— start at<from>, read to end of file.--from <line>/-l <lines>— flag equivalents. Explicit flags override the suffix, so... :5:2 -l 1reads 1 line.--no-line-numbers— drop theN:prefixes (line numbers are on by default).
Wrong: qmd get "#abc123" | sed -n '120,160p'
Right: qmd get "#abc123:120:40"
Search results include a :line anchor on each hit — feed it straight into
qmd get path:line:<n> to read a window around the match (line numbers in the
output will start at line).
Discover what is indexed
qmd collection list
qmd ls
qmd statusAdd collection filters when broad searches drift into the wrong corpus:
qmd search "headcount autonomous agents" -c concepts -n 10
qmd query "merchant support product reality" -c concepts -c sources -n 10Omit -c to search everything.
MCP Tool: query
When using the MCP server, prefer structured searches:
{
"searches": [
{ "type": "lex", "query": "cockpit OKR Goodhart" },
{ "type": "vec", "query": "data informed not metric driven product judgment" },
{ "type": "hyde", "query": "A concept note explains that metrics are useful as instruments, but leaders should not let OKRs or dashboards replace judgment." }
],
"intent": "Find the concept note about using metrics as instruments without becoming metric-driven.",
"collections": ["concepts"],
"limit": 10
}Query types:
lex— BM25 keyword search. Best for exact terms, names, titles, and code.vec— vector semantic search. Best for natural-language concepts.hyde— vector search using a hypothetical answer/document passage.
Query craft
Good QMD searches mix three things:
- Title/alias anchors: exact page titles, named entities, phrases.
- Semantic paraphrase: how a human would describe the idea.
- Negative space: enough intent to avoid nearby-but-wrong concepts.
Examples:
# Exact-ish title lookup
qmd search '"arm the rebels" merchants tools big companies' -c concepts
# Semantic concept lookup
qmd query $'intent: Find the customer proximity concept, not generic customer delight.\nlex: support pseudonymous merchant customer interviews\nvec: founder stays close to merchant reality through support and product use'
# Source lookup
qmd search "six-week cadence WhatsApp merchant relationships Shawn Ryan" -c sources -n 10Setup and maintenance
Only mutate indexes when the user asked for setup or maintenance. Searching and retrieving are safe; collection/index mutation is not a casual first step.
npm install -g @tobilu/qmd
qmd collection add ~/notes --name notes
qmd update
qmd embedHealth and diagnostics:
qmd doctor
qmd status
qmd pullqmd doctor checks config, model cache, device/GPU setup, vector fingerprints,
and common environment overrides. If a model-backed command fails, run it before
changing configuration.
Pitfalls
- Do not stop at snippets. Fetch documents before making claims.
- Do not slice files with
sed/head/tail. Use thepath:from:countsuffix (e.g.qmd get "#abc123:120:40") or--from/-l. Output is already line-numbered; piping breaks docid resolution, the header, and virtual paths. - Do not lean on query expansion. Write
intent:/lex:/vec:/hyde:yourself. A bareqmd query "user sentence"discards the context only you have. You expand the query; the model just ranks. - Do not overuse semantic search. If you know exact titles or terms, BM25 is faster and often better.
- Do not mutate indexes casually.
qmd collection add,qmd update, andqmd embedchange local state and can be expensive. - Model-backed commands can be environment-sensitive. If
qmd query,qmd vsearch, or reranking fails because local models/GPU are unavailable, useqmd searchand stronger lexical/structured terms. - Ambiguous user wording needs intent. Add
intent:rather than hoping query expansion guesses the right domain. - Collection names matter. Search
conceptsfor synthesized wiki pages,sourcesfor transcripts/raw source pages, and docs collections for code or project documentation.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

