---
id: daily-wiki-query
name: "wiki-query"
url: https://skills.yangsir.net/skill/daily-wiki-query
author: ar9av
domain: ai-agent-memory-knowledge
tags: ["knowledge-retrieval", "obsidian", "search", "wiki"]
install_count: 3400
rating: 4.40 (21 reviews)
github: https://github.com/ar9av/obsidian-wiki
---

# wiki-query

> 针对已编译的 Obsidian wiki 执行知识检索，返回预综合的交叉引用知识

**Stats**: 3,400 installs · 4.4/5 (21 reviews)

## Before / After 对比

### 知识检索速度

**Before**:

在大量文档中手动搜索关键词，阅读相关章节，尝试理解上下文，找到答案需要 10-15 分钟

**After**:

直接查询预综合的 wiki，系统返回已蒸馏的知识答案，30 秒内获得准确信息

| Metric | Before | After | Change |
|---|---|---|---|
| 检索时间 | 10分钟 | 0.5分钟 | -95% |

## Readme

# wiki-query

# Wiki Query — Knowledge Retrieval

You are answering questions against a compiled Obsidian wiki, not raw source documents. The wiki contains pre-synthesized, cross-referenced knowledge.

## Before You Start

- Read `~/.obsidian-wiki/config` to get `OBSIDIAN_VAULT_PATH` (works from any project). Fall back to `.env` if you're inside the obsidian-wiki repo.

- If `$OBSIDIAN_VAULT_PATH/hot.md` exists, read it first — it gives you instant context on recent activity. If the user's question is about something ingested recently, hot.md may answer it before you even open `index.md`.

- Read `$OBSIDIAN_VAULT_PATH/index.md` to understand the wiki's scope and structure

## Visibility Filter (optional)

By default, **all pages are returned** regardless of visibility tags. This preserves existing behavior — nothing changes unless the user asks for it.

If the user's query includes phrases like **"public only"**, **"user-facing"**, **"no internal content"**, **"as a user would see it"**, or **"exclude internal"**, activate **filtered mode**:

- Build a **blocked tag set**: `{visibility/internal, visibility/pii}`

- In the Index Pass (Step 2), skip any candidate whose frontmatter tags contain a blocked tag

- In Section/Full Read passes (Steps 3–4), do not read or cite any blocked page

- Synthesize the answer **only from allowed pages** — do not mention that excluded pages exist

Pages with no `visibility/` tag, or tagged `visibility/public`, are always included.

In filtered mode, note the filter in the Step 6 log entry: `mode=filtered`.

## Retrieval Protocol

**Follow the Retrieval Primitives table in `llm-wiki/SKILL.md`.** Reading is the dominant cost of this skill — use the cheapest primitive that answers the question and escalate only when it can't. Never jump straight to full-page reads.

### Step 1: Understand the Question

Classify the query type:

- **Factual lookup** — "What is X?" → Find the relevant page(s)

- **Relationship query** — "How does X relate to Y?" → Find both pages and their cross-references

- **Synthesis query** — "What's the current thinking on X?" → Find all pages that touch X, synthesize

- **Gap query** — "What don't I know about X?" → Find what's missing, check open questions sections

Also decide the **mode**:

- **Index-only mode** — triggered by "quick answer", "just scan", "don't read the pages", "fast lookup". Stops at Step 3. Answers from frontmatter + `index.md` only.

- **Normal mode** — the full tiered pipeline below.

### Step 2: Index Pass (cheap)

Build a candidate set *without opening any page bodies*:

- You've already read `index.md` above — use it as the first filter. It lists every page with a one-line description and tags.

- Use `Grep` to scan page **frontmatter only** for title, tag, alias, and summary matches. A pattern like `^(title|tags|aliases|summary):` scoped to vault `.md` files is far cheaper than content grep.

- Collect the top 5–10 candidate page paths ranked by:

Exact title or alias match

- Tag match

- Summary field contains the query term

- `index.md` entry contains the query term

If you're in **index-only mode**, stop here. Answer from `summary:` fields, titles, and `index.md` descriptions only. Label the answer clearly: **"(index-only answer — page bodies not read; facts below are from page summaries and may miss nuance)"**. Then skip to Step 5.

### Step 2b: QMD Semantic Pass (optional — requires `QMD_WIKI_COLLECTION` in `.env`)

**GUARD: If `$QMD_WIKI_COLLECTION` is empty or unset, skip this entire step and proceed to Step 3.**

**No QMD?** Skip to Step 3 and use `Grep` directly on the vault. QMD is faster and concept-aware but the grep path is fully functional. See `.env.example` for setup.

If `QMD_WIKI_COLLECTION` is set and the index pass didn't produce clear candidates — or the question requires semantic matching rather than exact terms — use QMD before reaching for `Grep`:

```
mcp__qmd__query:
  collection: <QMD_WIKI_COLLECTION>   # e.g. "knowledge-base-wiki"
  intent: <the user's question>
  searches:
    - type: lex    # keyword match — good for exact names, file paths, error messages
      query: <key terms>
    - type: vec    # semantic match — good for concepts, patterns, "what is X like"
      query: <question rephrased as a description>

```

The returned snippets act as pre-read section summaries. If they answer the question fully, skip Step 3 and go straight to Step 4 (reading only the pages QMD ranked highest). If not, use the ranked file list to guide which files to grep or read in Step 3.

**Also search `papers` when the question may have source material in `_raw/`:**

If `QMD_PAPERS_COLLECTION` is set and the user is asking about a topic likely covered by ingested papers (research, theory, background), run a parallel search against the papers collection. Cite raw sources separately from compiled wiki pages in your answer.

### Step 3: Section Pass (medium cost — only if Steps 2/2b are inconclusive)

For each of the top candidates, pull the relevant section *without reading the whole page*:

- Use `Grep -A 10 -B 2 "<query-term>" <candidate-file>` to get just the lines around the match.

- This usually returns 15–30 lines per hit instead of 100–500.

- If the section grep gives a clear answer, go straight to Step 5.

### Step 4: Full Read (expensive — last resort)

Only when Steps 2 and 3 don't answer the question:

- `Read` the top **3** candidates in full.

- Follow at most one hop of `[[wikilinks]]` from those pages if the answer requires cross-references.

- Check "Open Questions" sections for known gaps.

- If you're still short, **then** fall back to a broad content grep across the vault. Tell the user you escalated — this is the expensive path and they should know.

### Step 5: Synthesize an Answer

Compose your answer from wiki content:

- Cite specific wiki pages using `[[page-name]]` notation

- Note which step the answer came from ("found in summary" vs "grepped section" vs "full page read") — helps the user understand confidence

- If the wiki has contradictions, present both sides

- If the wiki doesn't cover something, say so explicitly

- Suggest which sources might fill the gap

### Step 6: Log the Query

Append to `log.md`:

```
- [TIMESTAMP] QUERY query="the user's question" result_pages=N mode=normal|index_only|filtered escalated=true|false

```

## Answer Format

Structure answers like this:

**Based on the wiki:**

[Your synthesized answer with [[wikilinks]] to source pages]

**Pages consulted:** [[page-a]], [[page-b]], [[page-c]]

**Gaps:** [What the wiki doesn't cover that might be relevant]

Weekly Installs601Repository[ar9av/obsidian-wiki](https://github.com/ar9av/obsidian-wiki)GitHub Stars639First SeenTodaySecurity Audits[Gen Agent Trust HubPass](/ar9av/obsidian-wiki/wiki-query/security/agent-trust-hub)[SocketPass](/ar9av/obsidian-wiki/wiki-query/security/socket)[SnykPass](/ar9av/obsidian-wiki/wiki-query/security/snyk)

---
*Source: https://skills.yangsir.net/skill/daily-wiki-query*
*Markdown mirror: https://skills.yangsir.net/api/skill/daily-wiki-query/markdown*