qmd-search/SKILL.md
This skill should be used to search the local Obsidian vault / markdown knowledge base by meaning, not just keywords, using the on-device qmd engine (BM25 + vector + LLM rerank). Trigger when the user asks to "search my vault/notes", "find notes about X", "what do my notes say about Y", "do I have anything on Z", "semantic search my knowledge base", or wants concept/cross-lingual retrieval over markdown. Fully local — nothing leaves the machine.
npx skillsauth add glebis/claude-skills 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 a local markdown knowledge base semantically with qmd. Five
modes — BM25 keywords, vector similarity, hybrid (expansion + rerank), literal native-script grep,
and a fused find — all running on-device. The key advantage over Obsidian's built-in search: it
matches meaning, finds notes that share no words with the query, and works across languages
(e.g. a Russian query retrieves English notes).
query) — default. A real question or fuzzy intent ("how do I stop overengineering").
Best quality; first run downloads reranker/expansion models (~one-time slow).vsearch) — fast concept lookup ("notes about embodied computing").search) — an exact keyword, name, or filename. Instant, no model.-m grep) — literal fixed-string ripgrep over the .md files. The audit path for
proper nouns, transliterations, exact phrases, Russian stems/inflections, and absence checks.
Bypasses the index; matches only the exact script/spelling you type.This vault is bilingual (English/Russian). The embedding model is decent for concepts but weak for proper nouns / specific entities, and BM25 only matches the script you type. So:
Never conclude "it's not in the vault" after one English semantic query. For names, people, pets, places, foreign terms, or bilingual topics:
query / vsearch).Ziggy → Зигги/Зиги, dog/pet → собак, пёс, щенок, питомц, животн. Use stems (собак
catches собака/собаку/собаки), not just the nominative.qmd-search.sh -m grep -n 20 "Зигги".Зигги the pet vs. Зигмунд Freud).-n to ~20 for absence checks.Use the bundled wrapper; it suppresses qmd's stderr spinner, formats results as score path
(parsing qmd's JSON, so commas in filenames are safe), and makes a best-effort refusal to run
during an active qmd embed (which would return empty results — override with --force):
~/.claude/skills/qmd-search/scripts/qmd-search.sh [-m query|search|vsearch|grep|find] [-n N] [-c COLLECTION] [--snippet] [--min-score X] [--json] [--full] <query...>
Examples:
qmd-search.sh "what helps with anxiety" # hybrid (default)
qmd-search.sh -m vsearch -n 8 "behavioral health from photos"
qmd-search.sh -m search sensorium # BM25 keyword
qmd-search.sh -m grep -n 20 "Зигги" # literal native-spelling / absence check
qmd-search.sh -m find "Зигги собака" # fused: semantic + literal in one call
qmd-search.sh --snippet "agent orchestration" # rows + matching snippets
qmd-search.sh --min-score 0.5 "quarterly planning" # drop low-relevance hits
qmd-search.sh --json "agent orchestration" # structured output for further processing
After getting hits, read the top files directly (they are normal vault paths) or fetch slices with
qmd get "<path>:<line>" -l <N>.
qmd status shows the vault is not indexed)qmd collection add ~/Brains/brain --name brain # index the vault
qmd context add qmd://brain "short description of the vault"
qmd embed # build vectors; re-run until status shows 0 pending
qmd cleanup # compact the index
Refresh after large edits: qmd update && qmd embed. Check health any time with qmd status.
qmd calls, check qmd status first.df -h) — a full disk fails writes
silently. See references/cli-reference.md → "Operational gotchas".qmd ships an MCP server (qmd mcp, stdio) exposing tools query, get, multi_get, status.
If it's registered in the host (e.g. .mcp.json), prefer the native query tool for hybrid
search — it returns structured results with no spinner/JSON-parsing/exit-code quirks. Register with:
{ "mcpServers": { "qmd": { "command": "qmd", "args": ["mcp"] } } }
Use the wrapper (scripts/qmd-search.sh) when you need what MCP doesn't cover: BM25-only
(search), vector-only (vsearch), the literal/native-script grep pass, the fused find
mode, --snippet, or --min-score. The bilingual/proper-name rule above applies to both paths.
evals/fixture.example.json + scripts/run-evals.sh run qmd bench to score search quality
(precision/recall/MRR per backend). Baseline and interpretation: evals/BASELINE.md. Re-run after
changing the wrapper, the index, or the embedding model; a drop vs. baseline is a regression.
Full command surface, query grammar (lex:/vec:/hyde:), output formats, models, and recovery
steps are in references/cli-reference.md.
data-ai
--- name: disk-cleanup description: Scan and clean macOS caches, package-manager data, crash dumps, and app caches to reclaim disk space. Deterministic — a config registry (targets.json) plus two scripts (survey.py read-only, clean.py executor) do all the measuring and deleting; the agent only relays a compressed summary and makes the few human-judgment calls. IMPORTANT — use this skill whenever the user's request on macOS involves: freeing disk space, cleaning/clearing caches, "disk is full", "
development
Generate and edit images using Google's Gemini image generation models (Nano Banana family). Supports style presets, platform-specific sizing (YouTube/slides/blog), variants, image editing via inlineData, reference images for style transfer, and organized output with metadata. Default model is Nano Banana 2 (gemini-3.1-flash-image-preview). Key is auto-decrypted via SOPS.
development
--- name: agency-docs-updater description: End-to-end pipeline for publishing Claude Code lab meetings. Accepts optional args: date (YYYYMMDD, "yesterday", "today") and lab number (e.g. "04"). Examples: "yesterday 04", "20260420 05", "04" (today, lab 04), "" (today, auto-detect lab). --- # Agency Docs Updater Execute ALL steps automatically in sequence. Only pause if a step fails and cannot be recovered. Read `references/learnings.md` before starting for known pitfalls. **Configuration**: pat
tools
This skill should be used when applying proper typography to prose text or files in Russian, English, German, or French — smart quotes per locale («ёлочки», “curly”, „Gänsefüßchen“, « guillemets »), correct dashes (тире, em/en dash, Gedankenstrich, tiret), non-breaking spaces, ranges, ellipsis, and French espaces insécables before ! ? ; :. Fully deterministic via a pinned typograf-based CLI; never apply these rules by hand. Triggers on "типографика", "typograf", "оттипографь", "smart quotes", "fix typography", "неразрывные пробелы".