Skip to content
← blog

Internal copilots answer with sources

Why every answer an internal copilot gives has to cite where it came from, and how a small team ends up using one.

Twill Studio3 min read

An internal copilot is the least glamorous agent we build and often the one a team notices most. It answers questions about the business from the business’s own documents: the price list, the warranty terms, the install guide, the policy someone wrote in 2024 and saved as a PDF.

The whole thing hinges on one rule. Every answer shows its source. Not as a footnote for the sceptics — as the primary output, next to the answer, always.

Why the citation is the product

The failure mode of a document assistant is not “it doesn’t know.” It is “it sounds like it knows.” A confident paragraph about your own returns policy is indistinguishable from a correct one, unless you can check.

Without a source, an answer costs the reader as much as looking it up themselves, because they still have to look it up to trust it. With a source — this document, this version, this row — the check takes two seconds and the answer is worth something. The citation converts a plausible sentence into usable information.

There is a second effect that we did not expect the first time. When the copilot cites, people start noticing which documents are wrong. Two versions of the same price list, a policy that contradicts the terms in the contract, a spreadsheet nobody has updated since the supplier changed. The copilot doesn’t fix any of that, but it makes it visible in the course of normal work, which is the only way it ever gets fixed.

What we do when the answer isn’t in there

The other half of the rule: if the copilot can’t ground an answer in a document, it says so.

“I can’t find this in the current pricing sheet” is a good answer. It is short, it is true, and it tells the person exactly what to do next. It is also much harder to build than it sounds, because a language model’s default behaviour is to produce something reasonable rather than nothing.

So we build for the refusal explicitly. Retrieval that returns nothing above a confidence threshold produces a no-answer, not a best guess. Questions that span documents which disagree get both, with both sources, and a flag that they conflict — the copilot is not the right thing to adjudicate which internal document wins.

And when it declines, it points somewhere useful: the person who owns that area, or the folder where the answer probably should be.

How the sources are put together

Nothing exotic. The mechanics that matter are the boring ones.

Chunk on structure, not size. A policy split mid-clause produces citations that don’t survive being clicked. We split on headings, rows, and clauses so a citation lands on something a human recognises.

Keep the address. Document name, section, page or row, and version. “Pricing sheet 2026, row 12” is a citation. “Your documents” is not.

Version awareness. Superseded documents are marked as such and lose to current ones. If the only match is an old version, the copilot says the answer is from the old version.

Permissions are the retriever’s problem. The copilot can only cite what the person asking is allowed to read. That is enforced at retrieval, not by asking the model to be discreet.

How a small team actually uses it

The pattern is consistent. The first week is testing — everyone asks it things they already know the answer to, which is exactly the right instinct and exactly what the citations are for.

After that the usage settles into three shapes. New staff asking the questions they would otherwise save up for a senior person. Anyone on the road checking a spec or a warranty term without ringing the office. And the office answering a customer’s question in the moment rather than promising to come back to them.

None of that is dramatic. It is a few minutes each, several times a day, spread across people who were previously interrupting each other. The senior person who used to be the search engine for the whole team gets their attention back, which is the real return.

What it doesn’t do

It doesn’t make decisions. It doesn’t approve a discount, commit to a lead time, or interpret a contract. It retrieves and it cites, and where the documents run out, it stops.

That is a narrower product than the demos suggest. It is also the version that a team will still be using in six months, because every answer it has ever given can be checked against something they wrote themselves.

We build the agent. You keep running the business.

Tell us what eats your week. We’ll tell you what an agent can take off it.

usually replies same day