--- name: query description: > Answer questions against the local Obsidian wiki — not from model memory. Use when the user runs /query, or asks in natural language about "my notes / my wiki / what I've researched / my past decisions / what do I know about X". Always read wiki/index.md FIRST and WHOLE to locate pages, then read them in full, then answer with [[wikilink]] citations. If the wiki has nothing relevant, say so explicitly before giving any general-knowledge answer. Offers to file high-value answers back into wiki/syntheses/ so explorations compound. user-invocable: true --- # query — answer from the wiki, with citations ## Goal Turn a question into a **deep read of the compiled wiki** and a synthesized, **cited** answer. When the answer is valuable, **file it back** into the wiki so knowledge compounds. ## Triggers - `/query ` - Natural language: "what do my notes say about X", "what was my past decision on Y", "search my wiki for Z" - Mentions of: my wiki / my notes / my knowledge base / what I've researched. ## Depth (see CLAUDE.md → Processing depth) Match answer depth to the question (auto standard/concise; `research` is **opt-in or ask-first, never silent** — this is query's rule and it is unchanged. `ingest` differs deliberately: it picks each source's depth after reading and records it, because a batch of forty sources cannot carry forty asks. One question can.) **All depths stay token-efficient — `research` permits more depth, never filler.** - **standard (DEFAULT)** — balanced, cited synthesis. - **concise** — a tight, direct answer citing only the few key pages. - **research** — rigorous and exhaustive: exact figures, verbatim quotes with refs, explicit treatment of agreements/contradictions across sources, and a short "limitations / gaps" note. Higher accuracy bar, still no filler. A filed synthesis uses academic structure + `depth: research`. ## Pipeline ### Step 1 — Read the global index (always first) Read `wiki/index.md` **whole** — `route` mode, CLAUDE.md §5 — and locate candidate pages across **every** `## ` section. Read the whole catalogue before choosing pages: lexical search or a hand-picked list can omit pages relevant to the answer. ### Step 2 — Deep-read the targets (triage by confidence) Open the most relevant pages in full with the read tool (or `obsidian-cli`). Follow `## Related` links one hop out when it helps. **When candidates are many, first check their `confidence` cheaply (one `grep "^confidence:" `, frontmatter only) and deep-read `authoritative`/`high` first; pull in `medium` as needed; consult `low`/`very-low` only to fill gaps.** **If the catalogue under-covers the question and qmd is active** (the `qmd-search` skill — dormant unless qmd is installed + enabled), use it as the semantic fallback (`qmd query "" --json --files`), confidence-rank the hits, then deep-read; otherwise `grep` as usual. ### Step 3 — Synthesize with citations (weighted by confidence) - Cite every page you draw from inline as `[[Page Name]]`. - For a verbatim claim, use a `> blockquote`. - Don't over-cite: one citation at the start and end of a passage from the same page is enough. - **Weight by `confidence`:** resolve conflicts toward the higher tier (and, if tied, the newer `updated`); state `authoritative`/`high` plainly, but attribute and hedge `low`/`very-low` ("a promotional listing claims…", "an unverified transcript suggests…"); never let a `very-low` or `unverified` claim harden into an asserted fact. Optionally flag a weak citation inline, e.g. `[[X]] *(low-confidence)*` (only for `low`/`very-low`). ### Step 3b — Freshness duty (Tier-2 flags; costs no extra reads) Judge only the pages you have ALREADY read for this answer — never read extra pages for this duty: - **Contradiction** (page vs page, or page vs clearly newer evidence just read) → surface it in the reply and add/extend the page's `## Conflicts / Open Questions` block (CLAUDE.md §4.4). - **Staleness suspicion** (old `updated` against newer in-wiki evidence; a superseded claim) → one line in the reply + offer the fix now; if not fixed on the spot, record it on the page as frontmatter `flagged: YYYY-MM-DD ` so `/deep-lint` reconciles it later. - Flags are annotations, not logged ops — the reconciling `deep-lint` run logs their resolution. - **The freshness line — a completion gate.** Every reply that read wiki pages ends with one line, whatever the active style: `Freshness: pages read · oldest [[page]] (updated YYYY-MM-DD) · flagged` (`k` = flags placed or staleness fixes made this run; usually 0). The answer is **not done** until the line has appeared. Naming the oldest page is the locator — the line cannot be written without looking at the `updated:` dates already in hand. A reply that read no wiki pages (general-knowledge fallback) skips the line and says so. ### Step 4 — Degrade gracefully (two cases, never a bare refusal) - **No coverage** — if `index.md` has nothing relevant and the question is general knowledge, say so first: > Nothing in the local wiki covers this — answering from general knowledge: …then answer. Never silently pretend the wiki had the answer. - **Only low-confidence coverage** — if the wiki *does* cover it but only at `low`/`very-low`, **still give the substantive answer from those pages**, opening with an explicit warning, e.g.: > ⚠ Low-confidence: the only sources here are a promo listing and an auto-transcript — treat as provisional. Never refuse with a bare "I don't know". ### Step 4b — Gap proposal (propose-only; CLAUDE.md §6) When Step 4 declared missing or weak coverage, a gather proposal MAY follow the answer — never replace it — if ALL four hold: the gap is **evidenced** by the search just run (the brief cites what was searched — a zero-findings claim carries its probe, CLAUDE.md §11); **load-bearing** for the core of the task (answerable-but-`low` coverage stays a warning, not a proposal); plausibly **fixable by public web sources** (not owner-only knowledge); and **not explicitly declined** this session. At most ONE proposal per reply, surfaced whatever the active style, formatted why (gap + evidence) · what (source kinds, rough count) · how (the literal `/gather` command with its page budget — never `--yes`) · cost. Only the owner's explicit yes runs it — that run-spec only; gather's own gates unchanged. Consent ledger: explicit **no** → dead this session (a concise gap note) · **unaddressed** → one compact reminder while the task is live, then quiet (a later re-fire on a new task references the earlier brief concisely, never a full re-brief) · **"later"** → one re-offer at the natural point. Non-interactive runs never propose — state the gap in the report. ### Step 5 — File high-value answers back If the answer is more than ~2 paragraphs or is comparative/analytical, ask: > This looks worth keeping — save it to `wiki/syntheses/`? On yes, create `wiki/syntheses/.md` (kebab-case) with synthesis frontmatter, a `## Sources Used` section listing every cited `[[page]]`, and register it under **Syntheses** in `index.md`. Give it a **conservative inherited `confidence`** (a synthesis *defaults* to `medium` as agent-derived and *caps* at `high`, per §4.6; drop to `low` if it rests mainly on `low` sources); never crystallise a `low`/`unverified` claim as asserted fact. **Report the filed page and its `confidence`** to the user — every newly added wiki file states its level (as `ingest` Step 8 does), so you can review and re-grade it. **Refresh on write:** the new page's qmd embedding refreshes per the `qmd-search` contract — a turn-end hook where installed, inline only where not; a no-op when qmd is dormant. ### Step 6 — Log it (only if you filed a synthesis) **A pure inline answer is NOT logged** — logging is for brain-updating ops only (see CLAUDE.md §5). **Only if Step 5 actually filed a synthesis**, append: ```markdown ## [YYYY-MM-DD] synthesis | - **Output**: filed [[synthesis-slug]]; updated [[index.md]] ``` Log a no-synthesis (inline-only) query **only if the user explicitly asks**. ## Hard constraints - **Never answer substantive questions from memory** — read the wiki first. - **Never** silently answer when the wiki lacks coverage — declare it. - **Use `confidence`** to triage, weight and hedge; on only-`low` coverage, answer *with a warning*, never a bare refusal. - **The freshness line is a completion gate** (Step 3b) — every reply that read wiki pages carries it; no done-declaration without it. - Output in **British/UK English** with real `[[wikilink]]` citations.