plugins/qmd/skills/search/SKILL.md
Search project documentation using qmd semantic search. Invoke with /avinyc:qmd-search <query> to find docs, plans, or indexed markdown content in your project.
npx skillsauth add aviflombaum/claude-code-in-avinyc avinyc:qmd-searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Search your project's indexed markdown documentation using qmd's MCP tools. This skill reads your project's qmd configuration to know which collections to search, constructs structured queries, and retrieves relevant documents.
Read .claude/qmd.json from the project root.
If missing, tell the user:
qmd is not configured for this project. Run
/avinyc:qmd-configureto set it up.
Then STOP.
Extract project name and collections — each has a name, path, and description. Pick the best collection for the query by matching against descriptions. If only one collection exists, use it.
Use the mcp__qmd__query tool with a structured query. This is the primary search method — it's faster than CLI (models stay warm between queries) and supports multi-type queries with intent disambiguation.
Every search should include at least two query types for best recall. The first query gets 2x weight in fusion scoring, so put your best guess first.
{
"searches": [
{ "type": "lex", "query": "2-5 exact keywords, no filler" },
{ "type": "vec", "query": "full natural language question" }
],
"collections": ["<collection_name>"],
"limit": 10
}
| Type | Method | When to use | Writing tips |
|------|--------|-------------|--------------|
| lex | BM25 keyword | You know the exact terms in the docs | 2-5 terms. Exact phrases: "rate limiter". Exclude: -sports. Code identifiers work. |
| vec | Vector semantic | You don't know the vocabulary | Full question. Be specific: "how does the auth system handle session expiry?" |
| hyde | Hypothetical doc | Complex topic, you can imagine the answer | Write 50-100 words of what the answer looks like, using vocabulary you expect in the result. |
| Situation | Query types to include |
|-----------|----------------------|
| Know exact terms | lex only |
| Don't know vocabulary | vec only |
| Best recall | lex + vec |
| Complex or broad topic | lex + vec + hyde |
| Ambiguous query (e.g., "performance" could mean web perf, team health, etc.) | Any combination + intent |
When a query term is ambiguous, add intent to steer all pipeline stages (expansion, reranking, snippet extraction):
{
"searches": [
{ "type": "lex", "query": "performance" },
{ "type": "vec", "query": "how to improve page load speed" }
],
"intent": "web page load times and Core Web Vitals",
"collections": ["project_docs"],
"limit": 10
}
Intent does not search on its own — it's a steering signal that disambiguates what you mean.
Results include docid, score, file, title, context, and snippet.
| Score | Meaning | |-------|---------| | 0.7+ | Highly relevant — read this document | | 0.5–0.7 | Worth reading if topic matches | | < 0.5 on all | Try different query types or refine |
To read a full document from the results, use mcp__qmd__get:
{ "file": "#docid" }
Or by file path:
{ "file": "collection_name/path/to/file.md" }
For multiple related documents, use mcp__qmd__multi_get to batch retrieve:
{ "pattern": "collection_name/docs/*.md" }
This is faster than reading files one at a time.
If MCP tools fail, diagnose the issue:
| Error | Likely cause | Fix |
|-------|-------------|-----|
| mcp__qmd__query not available | MCP server not configured | Run claude mcp add qmd -- qmd mcp or add qmd to .mcp.json. Run /avinyc:qmd-configure. |
| MCP call returns error | Server not running or crashed | Run qmd mcp to verify. Check qmd status. |
| Collection not found | Config out of sync | Run /avinyc:qmd-doctor to diagnose. |
| No results | Index empty or stale | Run qmd update && qmd embed to rebuild. |
If MCP tools are unavailable, fall back to the CLI. The qmd query command supports structured queries via multiline strings:
qmd query $'lex: exact keywords here\nvec: natural language question here' -c <collection> --json -n 10
This single command subsumes qmd search (BM25 only) and qmd vsearch (vector only). Always use --json for parseable output.
After 2 poor query attempts (different query types, refined terms), fall back to Glob/Grep on the collection's directory path from config. qmd can't find everything — sometimes a direct file search is faster.
development
Bootstrap Warp terminal configuration for Rails projects. Creates launch configurations with colored tabs for dev server, Claude, shell, and more. This skill should be used when setting up Warp for a Rails project. Triggers on "setup warp", "configure warp", "warp rails", "warp bootstrap", "terminal setup for rails", "warp-rails".
development
Write technical blog posts, tutorials, and documentation in Flatiron School's engaging style. Use for explaining code patterns, debugging stories, or turning complex topics into clear narratives. Triggers on "write a blog post", "tutorial about", "explain how", "technical writing".
data-ai
Marketing funnel modeling and conversion metrics. Use for ad spend analysis, CPM/CPC optimization, landing page conversions, waitlist economics, and funnel modeling. Triggers on "ad spend", "cpm", "cpc", "conversion rate", "landing page", "waitlist", "funnel".
testing
SaaS unit economics and growth strategy. Use for LTV, CAC, MRR/ARR analysis, payback period, churn analysis, Rule of 40, and SaaS financial modeling. Triggers on "unit economics", "ltv", "cac", "mrr", "arr", "churn", "saas metrics".