Skip to content
p0.
Inline citations attach the source to the specific claim it supports, as an openable pill or footnote in the answer, rather than a bibliography at the bottom. It is the cheapest way to let a user calibrate trust without reading a reasoning essay, and it stops the model presenting a guess as fact. Perplexity, ChatGPT search and Claude all ship it. It is widely practiced emerging convention, sitting under the verified explainability principle.
A glowing thread connecting a line of light to a single luminous source document
Agent UX/Inline citations

Attach the source to the claim, not the bottom of the page

A bibliography is filing. A citation on the sentence it supports is grounding. It is the cheapest, most direct way to let a user calibrate trust, and the one thing that stops an agent dressing a guess up as a fact. With a live demo.

See the live demo

Grounding moved from a nice-to-have to a default in about eighteen months. Perplexity made citations the product. ChatGPT search and Claude now show the receipts inline. The expectation, for any agent that states facts, is that you can see where each fact came from.

But there is a right way and a wrong way to show your work, and most products get it subtly wrong. They collect the sources into a tidy list at the bottom of the answer. It looks responsible. It does almost nothing, because a list at the end does not tell you which source backs which claim.

The pill belongs on the sentence

This pattern sits underneath a verified principle. Microsoft’s Guidelines for Human-AI Interaction include making it clear why the system did what it did; the wider 2025 to 2026 consensus across Nielsen Norman Group and others moved explainability from a compliance checkbox to a core trust requirement. Inline citation is the most practical expression of that principle for a text agent.

The mechanism is simple and it is what makes it work: the source attaches to the specific claim, so verifying one fact costs one tap. The user does not have to trust the whole answer or open nothing. They check the part that matters to them, on the sentence that matters to them.

A citation does two jobs. It lets the user verify, and it stops the model presenting a guess as fact, because the claim now has to be backed by something real and retrievable. The pill is a constraint on the agent as much as a convenience for the reader.

Live demo

Same answer, two ways to cite it

Toggle between them. One files the sources in a list nobody opens. The other puts each source on the exact claim it backs.

What’s the VAT registration threshold in the UK right now?

The UK VAT registration threshold is £90,000 of taxable turnover in any rolling 12-month period. You must register once you cross it, and you can deregister if your turnover falls below £88,000. The threshold was raised from £85,000 in April 2024.

Sources

gov.uk — VAT registration
gov.uk — Who should register for VAT
HMRC internal manual VATREG
gov.uk — VAT rates
Spring Budget 2024 — HM Treasury
gov.uk — Deregister for VAT

Six links, no anchor. Which source backs the £90,000 figure? Which one backs the April 2024 change? The user cannot tell, so they either trust the whole answer blindly or open nothing. A list at the bottom is filing, not grounding.

Note: figures are illustrative of the UK VAT threshold. The point is where the citation sits, not the tax detail.

Citation theatre: the tells

It is possible to look grounded while grounding nothing. Watch for these:

Sources only at the bottom

A list detached from the claims. The user cannot map a fact to a source, so the list reassures without informing.

Bare numbered superscripts

A tiny ¹ with no source identity. The user has no idea if it points to gov.uk or a random blog until they commit a click.

Citations the source does not support

A real-looking link that does not actually say what the agent claimed. Worse than no citation, because it manufactures false confidence.

Eight links for one sentence

Over-citing to look rigorous. Noise. The user needs the one source that backs the claim, deduplicated, not a wall of blue.

What good grounding looks like

Six rules that turn a list of links into real, checkable grounding.

1

Put the pill next to the claim, not in a footer

A citation attached to the specific sentence it supports lets a user verify one fact in one tap. A bibliography at the bottom is filing. Almost nobody scrolls down to open link four of six.

2

Make the source identity legible

A pill that reads gov.uk, HMRC or the document title tells the user the weight of the source before they open it. A bare numbered superscript tells them nothing.

3

Open in a new tab, keep the conversation

Verification should not cost the user their place. The source opens alongside, the chat stays put. Friction here is friction on trust.

4

Deduplicate and rank sources

If three sentences lean on the same gov.uk page, show it once. Prefer primary and trusted domains over aggregators. A messy citation list reads as a messy answer.

5

Treat "no source found" as a signal, not a gap

If the agent cannot ground a claim, that is information. Lower the confidence, say so, and route the user to verify. Silence is how a guess gets dressed up as a fact.

6

Never fabricate a citation

A pill that links to a page which does not say what the agent claims is worse than no pill at all. The citation must be the actual source of the claim, retrieved, not invented after the fact.

How to build it

The citation has to come from retrieval, not from the model’s memory. The agent searches a corpus or the live web, gets back documents with real URLs, answers from those documents, and carries the document each claim came from into the response. If you let the model write its own citations after the fact, it will invent plausible ones. Wire the pill to the retrieved source object, not to a string the model produced.

Carry one citation array through the whole answer and deduplicate it. Live web results and local knowledge hits go into the same structure with the same shape, so the UI renders one consistent pill whether the source is gov.uk or your own knowledge base. A single source map, keyed by URL, keeps three references to the same page from rendering as three pills.

Mark the trusted domains. A small set of authoritative domains, gov.uk, HMRC, ACAS, official documentation for your domain, can be rendered with extra weight so the user sees the source quality at a glance. Everything else is a normal pill.

When retrieval returns nothing, do not paper over it. Lower the confidence, say the claim is ungrounded, and route the user to check. A missing citation is a feature of an honest agent, not a bug to hide.

Frequently asked questions

Take it with you

Don’t just read this. Put it to work.

The whole series is distilled into one Markdown file: every pattern, the do and don’t rules, and how well each is evidenced. Download it into your project, or paste the link into any chat with your agent and tell it to improve your agent UX. It’s free, no sign-up, no attribution required.

Paste this into your agent

Use these Agent UX principles to review and improve our agent's interface: https://p0stman.com/agent-ux/agent-ux-principles.md

Part of the Agent UX series

We build agents that show their sources

Inline citations, calibrated confidence, read-freely / write-confirm tool flows: these are the components we put into production for our own products and client work. If you want an agent users can actually check, that is the job we do.

AGENT INTERFACE ACTIVE · MCP: p0stman.com/api/mcp · 5 TOOLS REGISTERED · [DISCOVERY] llms.txt · agents.md · context.md · sitemap.xml · robots.txt · TavilyBot ALLOWED · ClaudeBot ALLOWED · GPTBot ALLOWED · PerplexityBot ALLOWED · [COMPREHENSION] JSON-LD schema · /api/ai/context · /api/ai/services · /api/ai/portfolio · [ACTION] book_discovery_call · submit_inquiry · get_services · get_portfolio · search_content · [A2A] AgentCard: /.well-known/agent.json · Task endpoint: /api/agent · A2A JSON-RPC 2.0 · navigator.modelContext REGISTERED · WebMCP: 5 TOOLS · INDEXNOW: 145 URLs · Bing NOTIFIED · [MANAGED AGENTS] Lead Researcher · AgentReady Auditor · SEO Writer · Weekly Reporter · Claude Sonnet 4.6 · Cloud containers · Outcome-based grading · Multi-agent orchestration · AGENT INTERFACE ACTIVE · MCP: p0stman.com/api/mcp · 5 TOOLS REGISTERED · [DISCOVERY] llms.txt · agents.md · context.md · sitemap.xml · robots.txt · TavilyBot ALLOWED · ClaudeBot ALLOWED · GPTBot ALLOWED · PerplexityBot ALLOWED · [COMPREHENSION] JSON-LD schema · /api/ai/context · /api/ai/services · /api/ai/portfolio · [ACTION] book_discovery_call · submit_inquiry · get_services · get_portfolio · search_content · [A2A] AgentCard: /.well-known/agent.json · Task endpoint: /api/agent · A2A JSON-RPC 2.0 · navigator.modelContext REGISTERED · WebMCP: 5 TOOLS · INDEXNOW: 145 URLs · Bing NOTIFIED · [MANAGED AGENTS] Lead Researcher · AgentReady Auditor · SEO Writer · Weekly Reporter · Claude Sonnet 4.6 · Cloud containers · Outcome-based grading · Multi-agent orchestration ·