본문으로 건너뛰기
cccskills
무료GitHub에 공개

qmd

Search a collection of notes using exact keywords, meaning, or both. Find past decisions, meeting records, and information about people, then retrieve relevant passages or check new notes for duplicates and related material.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Search the vault using QMD semantic search. Use PROACTIVELY before reading files. Preference order: (1) MCP tools — mcp__qmd__query, mcp__qmd__get, mcp__qmd__multi_get, mcp__qmd__status — if they appear in your tool menu, use them first; (2) CLI `qmd --index <name> ...` as fallback; (3) Grep/Glob only when QMD is not installed. Trigger proactively for past decisions, incidents, people, meetings, architecture, patterns, or any vault content — and after creating/editing notes to check for duplicates and related content.

설치 방법 보기

이럴 때 유용합니다

  • Look up past decisions and incident records
  • Gather notes before a meeting or one-on-one
  • Check for existing notes on a topic
  • Find related notes to link together

포함된 파일(1)

  • SKILL.md6.9 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

QMD — Vault Semantic Search

Before reading vault files directly, search with QMD first. It returns relevant snippets without burning context on full file reads.

Tool Surfaces — Preference Order

Pick the highest surface available and stop. All three read the same SQLite store (see Named Index), so they return the same results; the choice is about interface ergonomics and context cost.

  1. MCP tools (preferred when registered) — mcp__qmd__query, mcp__qmd__get, mcp__qmd__multi_get, mcp__qmd__status. If these appear in your tool menu, the MCP server is live and pre-scoped to this vault. Call them directly — no --index argument needed, no shell involved, typed arguments. This is the intended path during a session.
  2. CLI fallback — qmd --index <name> query|search|vsearch|get|multi-get. Use when the MCP server isn't registered (older vault clones, Windows install drift, disabled in .mcp.json), or for one-off shell checks outside a session. Always pass --index <name>.
  3. Grep / Glob / Read — last resort, only when QMD is not installed at all. These burn context on full file reads and don't rank by relevance.

Never fall through surfaces without cause — if MCP is registered, calling the CLI in a Bash tool is just a slower path to the same result.

Named Index (This Vault)

This vault uses a named QMD index so queries, updates, and context strings stay scoped to this vault — not blended with any other vault that shares the machine. Every QMD command in this document passes --index <name>.

The name resolves the same way on all three surfaces (CLI, MCP, SessionStart hook), so they always point at the same SQLite store:

  1. qmd_index in vault-manifest.json, when set — an explicit pin.
  2. Otherwise the vault folder name, slugified. The template ships qmd_index empty so every install gets its own store without being asked a question.

Pin the field if you want a name that survives renaming the vault folder, or want to keep a store you already built.

Read the resolved name before running commands rather than assuming either branch:

INDEX=$(node -e '
  const ok = (s) => typeof s === "string" && /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(s);
  const m = JSON.parse(require("fs").readFileSync("vault-manifest.json", "utf8"));
  if (m.qmd_index && !ok(m.qmd_index)) {
    process.stderr.write("qmd_index is set to an invalid name: " + JSON.stringify(m.qmd_index) + "\n");
    process.exit(1);
  }
  const slug = require("path").basename(process.cwd()).normalize("NFKD").toLowerCase()
    .replace(/[^a-z0-9._-]+/g, "-").replace(/-{2,}/g, "-").replace(/^[^a-z0-9]+|[-._]+$/g, "");
  const name = [m.qmd_index, slug, m.template].find(ok);
  if (!name) { process.stderr.write("no usable qmd index name — set qmd_index in vault-manifest.json\n"); process.exit(1); }
  process.stdout.write(name);
') || exit 1
qmd --index "$INDEX" query "..."

The value is used as both a CLI argument and a filesystem path (~/.cache/qmd/<name>.sqlite), so an invalid pin must fail here rather than propagate — hence the explicit check instead of m.qmd_index || slug.

In-session, substitute the resolved value directly in your commands — it is stable across the vault's lifetime unless the folder is renamed.

Commands

Each operation lists the MCP call first, then the CLI equivalent. Prefer MCP when available.

Search (pick one per query)

  • Hybrid (best quality) — mcp__qmd__query with searches=[{type:"lex", query:"..."}, {type:"vec", query:"..."}] and an intent arg. CLI: qmd --index <name> query "..." --json -n 10. Use for complex or conceptual queries.
  • Keyword (fast BM25) — mcp__qmd__query with searches=[{type:"lex", query:"..."}]. CLI: qmd --index <name> search "..." --json -n 10. Use for exact terms, names, ticket numbers, dates.
  • Semantic only — mcp__qmd__query with searches=[{type:"vec", query:"..."}]. CLI: qmd --index <name> vsearch "..." --json -n 5. Use for exploratory queries where you don't know the exact words.

Retrieve

  • By path — mcp__qmd__get with path arg. CLI: qmd --index <name> get "path/to/file.md".
  • By docid — mcp__qmd__get with #abc123 syntax. CLI: qmd --index <name> get "#docid".
  • Batch by glob — mcp__qmd__multi_get with pattern arg. CLI: qmd --index <name> multi-get "org/people/*.md" --json -l 40.

Index Management (CLI only — MCP exposes read surfaces)

  • qmd --index <name> update — Re-index after file changes (fast, ~1-2s incremental). The SessionStart hook and the PostToolUse debounced refresh both run this automatically; manual invocation is rarely needed.
  • qmd --index <name> embed — Regenerate vector embeddings (slower, run after bulk changes).

Bootstrap (Fresh Clone)

The QMD SQLite store lives outside the repo (~/.cache/qmd/<index>.sqlite), so a fresh clone starts with no index. Run the bootstrap once:

node --experimental-strip-types .scripts/qmd-bootstrap.ts

It resolves the index name (pinned qmd_index, else the vault folder slug) and reads qmd_context from vault-manifest.json, registers the collection, attaches the vault context, walks the vault, and generates embeddings. Idempotent — safe to re-run.

When to Search

Each case lists the preferred MCP call; fall back to the CLI equivalent if MCP isn't registered.

  • User mentions a past decision, incident, person, project → mcp__qmd__query (hybrid).
  • User asks "what did we decide about X" → mcp__qmd__query (hybrid with intent describing the decision context).
  • User mentions a person by name → mcp__qmd__query with searches=[{type:"lex", query:"<name>"}].
  • Before creating a new note → mcp__qmd__query with searches=[{type:"vec", query:"<topic>"}] to check for existing content.
  • After creating a note → mcp__qmd__query with searches=[{type:"vec", query:"<note title>"}] to find notes that should link to it.
  • Loading context for review prep → mcp__qmd__multi_get with pattern="perf/evidence/*.md".
  • Loading 1-on-1 context → mcp__qmd__query with searches=[{type:"lex", query:"<person name> 1-1"}].

After Bulk Changes

Run qmd --index <name> update && qmd --index <name> embed in the shell. The SessionStart hook and the PostToolUse debounced refresh run update automatically, but embed should be run explicitly after sessions that create many notes.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

defuddle

무료

Extract readable Markdown from web pages with Defuddle CLI, removing ads and navigation to reduce token usage. Save the content to a file or retrieve metadata such as titles, descriptions, and domains.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Extract article text for reading and analysis
  • Save web documentation as Markdown
  • Retrieve a page title, description, or domain
breferrari/obsidian-mind5.4천2026년 10월 18일 업데이트

Turn written content into Excalidraw flowcharts, mind maps, and other diagrams. Save files for Obsidian, edit them on excalidraw.com, or add drawing order information for use with an external animation tool.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Turn workflow descriptions into flowcharts
  • Organize ideas in a mind map
  • Create diagrams for Obsidian notes
breferrari/obsidian-mind5.4천2026년 10월 18일 업데이트

Create and edit .canvas files for visual planning in tools such as Obsidian. Arrange text, files, and links into mind maps or flowcharts, connect related items, and check that the file structure remains valid.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Organizing ideas into a mind map
  • Mapping a workflow as a flowchart
  • Grouping research notes and links
breferrari/obsidian-mind5.4천2026년 10월 18일 업데이트

Convert text into Mermaid diagrams, which describe visual structures using code. Create process flows, comparisons, mind maps, and system interactions for presentations or documentation, with adjustable layouts and checks for common syntax mistakes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Turn sales procedures into a flowchart
  • Compare two approaches visually
  • Organize concepts in a mind map
breferrari/obsidian-mind5.4천2026년 10월 18일 업데이트

Create and edit Obsidian Bases files to organize notes into tables, cards, and lists. Filter notes by tags or properties, calculate values such as days until a deadline, and configure grouping and summaries.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Build a task table with deadlines and status
  • Organize books and articles into reading cards
  • Create an index of daily notes
breferrari/obsidian-mind5.4천2026년 10월 18일 업데이트

Use the Obsidian command-line interface to read, create, and search notes, manage tasks and properties, and work with specific vaults. It also supports plugin and theme debugging through error checks, screenshots, and interface inspection.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Find and update notes in a vault
  • Add tasks to a daily note
  • Update note properties
breferrari/obsidian-mind5.4천2026년 10월 18일 업데이트

breferrari의 스킬 모두 보기

이 스킬의 문제 신고