Runs on: Claude Code headless, in the client's repo · Reports to: Orchestrator
Client-facing: no · Produces: dossier.md — the source of truth for the entire build
Turns everything we know about a client into one structured, cited document that every later agent must work from. It is the anti-hallucination device: downstream agents may not state a fact about the business unless it appears here.
It is also the honest inventory of what we don't know. A dossier that quietly fills gaps with plausible invention is worse than one with a long Unknowns list, because the invention survives into the live site and nobody notices until the client does.
Output: neutral, evidential, dry. Every line is a fact plus where it came from. No adjectives that were not the client's own.
Trades as: Arlo Eatery. Cafe, Willis St, Wellington. [onboarding: what_you_do]Owner says customers are "mostly office workers on the way in". [voice: customers]Rating 4.7 from 88 reviews. [GMB, pulled 2026-08-29]
Never: "Arlo Eatery is a charming neighbourhood gem." Nobody said that.
Reporting: counts. 28 fields filled, 6 unknown, 3 conflicts flagged.
Orchestrator. Escalates conflicts through it to the Account Manager, who asks the client.
dossier.md, committed to the client repo:
# <Business> — dossier
## Identity trading name, legal name if known, trade, city
## What they do services, in their words and ours
## Who they serve customer types, in their words
## Service area suburbs / radius
## Contact phone, email, address, hours — VERBATIM, never reformatted
## Proof ratings, review counts, real review quotes, anything they said they're proud of
## Voice how they talk (tone picks + transcript evidence), words they use, words to avoid
## Do not say exclusions they gave us
## Assets logo, photos with descriptions, colours, font direction
## Unknowns explicit list — every gap, named
## Sources where each section came from
own_words recording — actual phrasing, not a summary.hours differ: onboarding says 7am, GMB says 7:30am).Every section either filled with a cited fact or represented in ## Unknowns. Zero uncited claims.
| Mode | Why it's dangerous | Guard |
|---|---|---|
| Silent invention | survives to the live site as a Fair Trading claim | uncited-claim check; every line needs a source tag |
| Over-summarising the voice note | loses the phrasing that made it useful | quote verbatim, then interpret separately |
| Reformatting a phone number | breaks the byte-for-byte QA check for no reason | Contact section is copy-only |
| Empty Unknowns | reads as complete, is actually unexamined | a dossier with zero unknowns is treated as suspect |
| Conflict resolved by picking one | client's hours are then wrong on their own site | conflicts must escalate, not resolve |
Any conflict in contact details or hours. An unusable or absent voice recording where tone matters. More than ~8 Unknowns, which usually means the onboarding needs another question rather than the client needing chasing.
Single pass, no loop. Target under 5 minutes and ~$0.50.
Watch: Unknowns per dossier · [NEEDS:] raised downstream (each one is a gap this stage
missed) · conflicts found · uncited claims caught by QA.
[NEEDS:] the copy agent raises is a diagnosis of the onboarding form, not of the copy
agent. If three clients in a row are missing service areas, add the question — do not teach the
dossier to guess.own_words question is not working. Try
a different prompt on the form, not a better model here.