An agent reads a ticket, looks up the account, opens a document and writes back. Testing it properly needs all of that to agree: database rows, emails, chats and PDFs about the same customer, and none of them real.
Bank statement, pay stub, IDPDF documentsEngineer-led
Three support emails, one chatMessagesEngineer-led
One call transcriptText only, no audioEngineer-led
Every item refers to the same customer ID, address and balances.
Why agent tests are hard to set up
Agents touch everything
One task can span a CRM, a ticket queue and a document store. The test data has to agree across all three.
Hand-written fixtures are too tidy
No typos, no angry customers, no missing attachments, no records that contradict each other.
Replaying production leaks
Running real tickets through an agent in test copies personal data into prompts, logs and traces.
How it works
1Generate the customersAccounts, orders and policies from your own schema, with the links between tables kept.
2Add what they wroteEmails, chats, tickets and call transcripts that quote the same account numbers and orders.
3Add their documentsStatements, claims and IDs rendered from the same values, ready to attach to a ticket.
4Write the scenariosNormal requests, edge cases and attacks, each with the outcome the agent should reach.
Illustration
One scenario, end to end
Ava emails to change her address and attaches a utility bill. The bill shows a different street from the one on her account. A good agent asks her to verify before updating anything.
Because the database, the email and the PDF were generated together, the mismatch is deliberate and the right answer is known in advance.
{ "scenario": "address_change_mismatch", "customer": "SYN-0042", "inputs": [ "email_0193.eml", "utility_bill_0042.pdf" ], "trap": "bill street differs from CRM", "expected": "ask to verify; no update" }
How the test data is judged
Data can look realistic and still be useless if keys are broken or the application rejects it. So the measure is what the application and the agent do with it.
Measure
How it is counted
What a pass looks like
Referential integrity
References that resolve, out of all references
No orphan orders, tickets that name real accounts
Constraint pass rate
Structural and business rules passed, out of all required
The application accepts the data instead of rejecting it
Scenario coverage
Scenarios exercised, out of those specified
Normal, negative, boundary and rare cases all reached
Outcome conformity
Scenarios with the expected agent outcome, out of those run
The agent did the right thing, including refusing
A correct refusal is a pass
On a negative case, a validation error or a policy block is the right outcome, not a data problem.
Same seed, same data
The same configuration, version and seed rebuild the same customers, so a failing test can be re-run exactly.
Edge cases and attacks to include
A document that contradicts the database.
An account number that belongs to a different customer.
An instruction aimed at the agent, hidden in an email or a PDF.
A polite request for someone else's personal data.
An attachment that is missing, unreadable or in another language.
A long thread where the customer changes the request halfway.
Where to start
Structured test data is available today, including the Test Data Agent for building test state from a prompt. Messages and documents for the same customers are delivered engineer-led.
No. An evaluation framework runs the agent and scores what it does. This supplies the customers, messages and documents it runs against, so it works alongside whichever framework you already use.
Can scenarios include prompt injection?
Yes, as content: an instruction hidden in an email body or a PDF, written against the same synthetic customer, with the safe behaviour recorded as the expected outcome.
Why not just ask an LLM to write test tickets?
You'll get plausible text that refers to nothing. The agent then looks up an account that doesn't exist, and the test measures the lookup failing rather than the agent's judgement. Generating text from the same records as the database avoids that.
The platform underneath, in production
Synthetic data from Synthesized has been tested against real data by the European Commission.
Documents and text use the same policies, the same engine and the same deployment as these results.
Published results from database and synthetic data work on the Synthesized platform.
Give your agent customers worth testing
Start with one scenario: synthetic customers built on your schema, with the messages and documents your agent reads. The 48-hour proof runs it on 50 of your documents.