Skill: query
Purpose
Answer question by synthesizing wiki knowledge. Valuable findings not in wiki become new pages, compounding knowledge over time.
When to invoke
When user asks question requiring synthesis across multiple wiki pages or raw sources.
Steps — progressive disclosure 3 tầng (ĐỪNG nạp cả trang ở bước 1)
Nguyên tắc: quét RẺ để xếp hạng trước, chỉ ĐỌC FULL vài trang cao điểm. Đo trên bộ golden
wiki/sources/evals/retrieval/ cho thấy cách này giữ nguyên recall mà cắt ~65% token so với
"đọc mọi trang khớp" (baseline L0). Kiểm chứng: retrieval-eval.py --check.
Tầng 0 — truy hồi NGỮ NGHĨA (episodic + memory), KHÔNG chỉ theo link: trước khi quét wiki,
hỏi tầng nhớ episodic xem phiên trước đã đụng câu hỏi này chưa:
python3 harness/scripts/mem-rank.py retrieve "<câu hỏi>" --k 5 (thêm --kind-filter episode
để chỉ lấy sự kiện phiên). Trả về top-k memory/episode liên quan theo nghĩa (token-overlap,
sẽ là embedding khi adapter mem-rank.config.yaml được wire) — bắt được trang KHÔNG có
[[wikilink]] trỏ tới. NOOP (rỗng) thì bỏ qua, không nhồi nhiễu. Dùng kết quả này để mồi
danh sách trang cho Tầng 1 + biết "việc này từng làm ở phiên nào".
Tầng 1 — quét, KHÔNG mở full trang nào: ripgrep câu hỏi trên wiki/index.md + nội dung wiki (rg -c '<term>' wiki/ để đếm khớp), xếp hạng trang theo độ phủ term (trang chứa nhiều term của câu hỏi nhất). Câu hỏi về code → dùng code-graph MCP (search_symbols) thay rg. Kết quả tầng này = danh sách slug + dòng khớp; chưa Read full trang nào.
Tầng 2 — khoan: chỉ Read FULL top-N trang cao điểm nhất (mặc định ~5). Bỏ phần đuôi bảng xếp hạng — không đọc cho "chắc".
Tầng 3 — bối cảnh: nếu câu trả lời cần mạch liên quan, lần theo [[wikilinks]] của các trang vừa đọc (tương đương timeline/related của engram) — vẫn chỉ mở trang được trỏ tới, không mở tất cả.
3b. Cổng drift trên đường ĐỌC (0 token, fail-open) — trước khi tổng hợp, hỏi xem trang mình vừa đọc có đang lệch code không:
RUN: python3 harness/scripts/wiki-sync.py --flags-for "<slug1,slug2,…>" (downstream không có harness/ trong repo thì dùng bản global: python3 ~/.claude/harness/harness/scripts/wiki-sync.py --flags-for "…" --root .).
Truyền đúng các trang đã Read ở tầng 2–3. Lệnh luôn exit 0; im lặng = không trang nào bị cờ.
Có dòng ⚑ CẢNH BÁO DRIFT → chuyển nguyên văn cảnh báo đó vào câu trả lời (một dòng mỗi trang, đặt ngay đầu phần trả lời) rồi mới trả lời bình thường; đừng nuốt cảnh báo, cũng đừng từ chối trả lời.
Vì sao có bước này: wiki-sync --check ghi cờ code-drift vào stale.json, nhưng trước 2026-07-19 chỉ /lint đọc cờ đó — mà lint chạy theo chu kỳ, nên giữa hai lần lint /query trả về trang đã lệch code mà không cảnh báo gì. Đó đúng là ca "wiki là nguồn sự thật nhưng nội dung đã lệch" khiến model lập luận tự tin trên tri thức cũ.
If answer needs info not in wiki, check raw/ for unprocessed sources.
Synthesize and answer directly.
Evaluate: does answer contain non-obvious insight, connection, or conclusion not already in wiki?
- If yes: create new wiki page (concept or source), update
wiki/index.md, log in wiki/log.md.
- If no: skip.
Append to wiki/log.md: ## YYYY-MM-DD — query — <question summary> with note on whether new page created.
Telemetry (đo TRUY HỒI — fail-open): sau khi trả lời, ghi lại query để độ hiệu quả truy-hồi đo được:
python3 harness/scripts/query-log.py --record --question "<câu hỏi>" --pages "<slug1,slug2>" --tokens <ước tính token đã đọc> --tier <1|2|3>
--pages = các trang wiki thực sự đọc; --tier = tầng sâu nhất chạm tới (1 quét / 2 đọc full / 3 wikilinks). Script fail-open — không bao giờ làm gãy phiên. Giới hạn đã biết: chỉ đo khi skill query được gọi, không đo lượt model tự Read thẳng.
Evidence — trích cạnh, không chỉ trích trang. Với MỖI trang wiki đã dùng làm căn cứ, chạy:
python3 harness/scripts/wiki-graph.py cite <page>
rồi đính mục ## Evidence vào cuối câu trả lời, liệt kê eid của những cạnh thật sự chống lưng kết luận — không liệt kê cạnh chỉ vì nó tồn tại:
## Evidence
- e:4b65f8c5 concepts/decision-anchoring.md -> concepts/adapt-modes.md (wikilink)
- e:988aa19d index.md -> concepts/example-concept.md (mdlink)
Không cạnh nào chống lưng → ghi thẳng Evidence: none (page-level only). Trung thực hơn bịa một đường đi. Cạnh có kiểu (supports/contradicts/supersedes/derives-from/depends-on) khai trong frontmatter relations: của trang, mạnh hơn wikilink trần vì nó nói RÕ quan hệ.
Rules
- OKF v0.1 (R9): any new wiki page starts with a YAML frontmatter block (
---) with a non-empty type; copy the matching _template.md and keep the ## Origin section.
- Never invent facts. Synthesize from wiki and
raw/ only.
- Query revealing gap (missing entity, missing concept) should trigger
ingest of relevant raw/ source if one exists.
Output Report
After all main skill tasks complete, write a propose draft to the wiki.
Steps
1. Build the filename:
- Format:
DDMMYY-<ten>.md
DDMMYY = today (e.g., 020626 for 2 June 2026)
<ten> = 2–4 kebab-case words summarising what was done (e.g., landing-page-coteccons, brand-kit-fintech, ingest-auth-spec)
2. Write llmwiki/wiki/sources/draft/DDMMYY-<ten>.md:
# DDMMYY-<ten>
**Type:** draft
**Status:** proposed
**Tags:** <skill-name>, output-report
**Proposed:** YYYY-MM-DD
## What
<One sentence — what this skill invocation produced or decided>
## Output
<Key artefacts, files created/modified, or decisions made>
## Files
| File | Action |
|------|--------|
| `path/to/file` | created / modified |
## Notes
- Invoked via: `/<skill-name>` skill
## Origin
- **Draft:** `wiki/sources/draft/DDMMYY-<ten>.md`
- **Commit:** _(filled by verify-before-commit)_
- **Date promoted:** _(filled by verify-before-commit)_
3. Update wiki index & log:
llmwiki/wiki/index.md — append one row: | [DDMMYY-<ten>](sources/draft/DDMMYY-<ten>.md) | draft | YYYY-MM-DD |
llmwiki/wiki/log.md — append: ## YYYY-MM-DD — <skill-name> — <ten>
Skip only when the skill produces zero artefacts and zero decisions (e.g., a pure display mode like /caveman-stats).
1---2name: query3description: Synthesize answer from wiki; persist new insights as wiki entries. Trả lời kèm mục Evidence trích dẫn edge ID (eid) của các cạnh trong đồ thị wiki thật sự chống lưng kết luận — dùng khi cần biết "căn cứ nào", "trích dẫn cạnh nào", "đường đi trong graph", "cite evidence".4---56# Skill: query78## Purpose9Answer question by synthesizing wiki knowledge. Valuable findings not in wiki become new pages, compounding knowledge over time.1011## When to invoke12When user asks question requiring synthesis across multiple wiki pages or raw sources.1314## Steps — progressive disclosure 3 tầng (ĐỪNG nạp cả trang ở bước 1)15> Nguyên tắc: quét RẺ để xếp hạng trước, chỉ ĐỌC FULL vài trang cao điểm. Đo trên bộ golden16> `wiki/sources/evals/retrieval/` cho thấy cách này giữ nguyên recall mà cắt ~65% token so với17> "đọc mọi trang khớp" (baseline L0). Kiểm chứng: `retrieval-eval.py --check`.18190. **Tầng 0 — truy hồi NGỮ NGHĨA (episodic + memory), KHÔNG chỉ theo link:** trước khi quét wiki,20 hỏi tầng nhớ episodic xem *phiên trước* đã đụng câu hỏi này chưa:21 `python3 harness/scripts/mem-rank.py retrieve "<câu hỏi>" --k 5` (thêm `--kind-filter episode`22 để chỉ lấy sự kiện phiên). Trả về top-k memory/episode liên quan theo **nghĩa** (token-overlap,23 sẽ là embedding khi adapter `mem-rank.config.yaml` được wire) — bắt được trang KHÔNG có24 `[[wikilink]]` trỏ tới. NOOP (rỗng) thì bỏ qua, không nhồi nhiễu. Dùng kết quả này để mồi25 danh sách trang cho Tầng 1 + biết "việc này từng làm ở phiên nào".261. **Tầng 1 — quét, KHÔNG mở full trang nào:** `ripgrep` câu hỏi trên `wiki/index.md` + nội dung wiki (`rg -c '<term>' wiki/` để đếm khớp), xếp hạng trang theo **độ phủ term** (trang chứa nhiều term của câu hỏi nhất). Câu hỏi về code → dùng code-graph MCP (`search_symbols`) thay `rg`. Kết quả tầng này = danh sách slug + dòng khớp; chưa `Read` full trang nào.272. **Tầng 2 — khoan:** chỉ `Read` FULL **top-N trang cao điểm nhất** (mặc định ~5). Bỏ phần đuôi bảng xếp hạng — không đọc cho "chắc".283. **Tầng 3 — bối cảnh:** nếu câu trả lời cần mạch liên quan, lần theo `[[wikilinks]]` của các trang vừa đọc (tương đương timeline/related của engram) — vẫn chỉ mở trang được trỏ tới, không mở tất cả.293b. **Cổng drift trên đường ĐỌC (0 token, fail-open)** — trước khi tổng hợp, hỏi xem trang mình vừa đọc có đang lệch code không:30 `RUN: python3 harness/scripts/wiki-sync.py --flags-for "<slug1,slug2,…>"` (downstream không có `harness/` trong repo thì dùng bản global: `python3 ~/.claude/harness/harness/scripts/wiki-sync.py --flags-for "…" --root .`).31 Truyền đúng các trang đã `Read` ở tầng 2–3. Lệnh **luôn exit 0**; im lặng = không trang nào bị cờ.32 Có dòng `⚑ CẢNH BÁO DRIFT` → **chuyển nguyên văn cảnh báo đó vào câu trả lời** (một dòng mỗi trang, đặt ngay đầu phần trả lời) rồi mới trả lời bình thường; đừng nuốt cảnh báo, cũng đừng từ chối trả lời.33 Vì sao có bước này: `wiki-sync --check` ghi cờ `code-drift` vào `stale.json`, nhưng trước 2026-07-19 chỉ `/lint` đọc cờ đó — mà lint chạy theo chu kỳ, nên giữa hai lần lint `/query` trả về trang đã lệch code **mà không cảnh báo gì**. Đó đúng là ca "wiki là nguồn sự thật nhưng nội dung đã lệch" khiến model lập luận tự tin trên tri thức cũ.34354. If answer needs info not in wiki, check `raw/` for unprocessed sources.365. Synthesize and answer directly.376. Evaluate: does answer contain non-obvious insight, connection, or conclusion not already in wiki?38 - If yes: create new wiki page (concept or source), update `wiki/index.md`, log in `wiki/log.md`.39 - If no: skip.407. Append to `wiki/log.md`: `## YYYY-MM-DD — query — <question summary>` with note on whether new page created.418. **Telemetry (đo TRUY HỒI — fail-open):** sau khi trả lời, ghi lại query để độ hiệu quả truy-hồi đo được:42 `python3 harness/scripts/query-log.py --record --question "<câu hỏi>" --pages "<slug1,slug2>" --tokens <ước tính token đã đọc> --tier <1|2|3>`43 `--pages` = các trang wiki thực sự đọc; `--tier` = tầng sâu nhất chạm tới (1 quét / 2 đọc full / 3 wikilinks). Script fail-open — không bao giờ làm gãy phiên. Giới hạn đã biết: chỉ đo khi skill `query` được gọi, không đo lượt model tự Read thẳng.44459. **Evidence — trích cạnh, không chỉ trích trang.** Với MỖI trang wiki đã dùng làm căn cứ, chạy:46 `python3 harness/scripts/wiki-graph.py cite <page>`47 rồi đính mục `## Evidence` vào cuối câu trả lời, liệt kê **eid của những cạnh thật sự chống lưng** kết luận — không liệt kê cạnh chỉ vì nó tồn tại:48 ```49 ## Evidence50 - e:4b65f8c5 concepts/decision-anchoring.md -> concepts/adapt-modes.md (wikilink)51 - e:988aa19d index.md -> concepts/example-concept.md (mdlink)52 ```53 Không cạnh nào chống lưng → ghi thẳng `Evidence: none (page-level only)`. Trung thực hơn bịa một đường đi. Cạnh có kiểu (`supports`/`contradicts`/`supersedes`/`derives-from`/`depends-on`) khai trong frontmatter `relations:` của trang, mạnh hơn `wikilink` trần vì nó nói RÕ quan hệ.5455## Rules56- **OKF v0.1 (R9):** any new wiki page starts with a YAML frontmatter block (`---`) with a non-empty `type`; copy the matching `_template.md` and keep the `## Origin` section.57- Never invent facts. Synthesize from wiki and `raw/` only.58- Query revealing gap (missing entity, missing concept) should trigger `ingest` of relevant `raw/` source if one exists.5960---6162## Output Report6364After all main skill tasks complete, write a propose draft to the wiki.6566### Steps6768**1. Build the filename:**69- Format: `DDMMYY-<ten>.md`70- `DDMMYY` = today (e.g., `020626` for 2 June 2026)71- `<ten>` = 2–4 kebab-case words summarising what was done (e.g., `landing-page-coteccons`, `brand-kit-fintech`, `ingest-auth-spec`)7273**2. Write** `llmwiki/wiki/sources/draft/DDMMYY-<ten>.md`:7475```76# DDMMYY-<ten>77**Type:** draft78**Status:** proposed79**Tags:** <skill-name>, output-report80**Proposed:** YYYY-MM-DD8182## What83<One sentence — what this skill invocation produced or decided>8485## Output86<Key artefacts, files created/modified, or decisions made>8788## Files89| File | Action |90|------|--------|91| `path/to/file` | created / modified |9293## Notes94- Invoked via: `/<skill-name>` skill9596## Origin97- **Draft:** `wiki/sources/draft/DDMMYY-<ten>.md`98- **Commit:** _(filled by verify-before-commit)_99- **Date promoted:** _(filled by verify-before-commit)_100```101102**3. Update wiki index & log:**103- `llmwiki/wiki/index.md` — append one row: `| [DDMMYY-<ten>](sources/draft/DDMMYY-<ten>.md) | draft | YYYY-MM-DD |`104- `llmwiki/wiki/log.md` — append: `## YYYY-MM-DD — <skill-name> — <ten>`105106> Skip only when the skill produces zero artefacts and zero decisions (e.g., a pure display mode like `/caveman-stats`).