# Why numbered ledger ids (grounding research basis) Design notes for anyone changing the citation instructions or the ledger mechanics. The wording in SKILL.md is not arbitrary. ## The structural trick Hallucinated citations happen when a model reconstructs a URL from memory. If the only thing the model has to emit is a small integer it was handed at retrieval time, there is nothing to reconstruct — a wrong id is detectable (it's not in the ledger) and a wrong URL is impossible (the model never types one; `render` does). This is the property Perplexity's product relies on, and it's why the ledger, not the prose, owns the URL. Consequence: **register at retrieval, render mechanically.** Any workflow that lets the model type a URL into the Sources block gives the guarantee back. ## Cite while writing, not after ALCE (arXiv:2305.14627) evaluates attribution for LLM answers and finds that generating citations during composition, from numbered retrieved snippets, produces materially better attribution than post-hoc citation insertion. Post-hoc attribution invites the model to find a source that plausibly matches a sentence it already wrote — which is exactly how a citation ends up supporting something the page doesn't say. Hence: cite per supported sentence, in-line, as the sentence is written. Never a citation dump at the end of a paragraph or document. ## Verbatim quotes ground claims WebGPT (arXiv:2112.09332) collects verbatim quotes at browse time and composes answers from them. The practical rule for this skill: when a claim carries a figure, date, name, or quantity, take it from the source's own words rather than paraphrasing from a summary of a summary. Each summarization hop is a chance for a number to drift. ## Formatting conventions From Perplexity's leaked system prompts (jujumilk3/leaked-system-prompts) — the conventions are worth copying because they're the ones users have been trained to read: - Marker directly after the terminal punctuation, no space: `water.[1]` - Each id in its own brackets: `[1][2]`, not `[1, 2]` - At most 3 ids per sentence — beyond that the citation stops identifying which source carries the claim - Never cite a source not actually consulted - Query classes that shouldn't be cited (translation, creative writing, casual chat) are exempted by instruction, not by a separate classifier Perplexity forbids raw URLs in the answer because its UI renders source cards. Hermes has no such UI layer in chat or in a written file, so this skill renders the id → URL list explicitly instead. ## Related in-tree implementation `tools/web_tools.py` grew an in-process version of this idea (a `url -> [n]` registry plus citation guidance attached to tool results) in PR #44833. That path grounds ad-hoc web answers automatically when it lands. This skill is the portable half: it works with any retrieval source (browser, curl, CLIs, local PDFs) and it persists the ledger to disk so multi-turn, multi-file, and multi-subagent work keeps stable ids. The two can coexist — the ledger is the source of truth for anything written to a file.