Watch your email agent work before real people see it
Give your agent a mailbox and a world of people who answer in character. Then read what happened: every email, every reply, and why each person did what they did.

Read the run like a log, in plain words
Activity records everything that happened and why: mail delivered and scored for spam, a person who looked up the sender's domain and found no website, a reply planned for working hours, spam that arrived from the World.
Follow it live, read it from the API, or have it posted to your webhook. Insights sums it up per campaign.

Check what the agent said against what people remember
Each person keeps their own record of the conversation. Dana remembers the $186,000 offer, and that her requests for paperwork went unanswered. Push a case with the facts, and everyone on it stays consistent with one story your evaluation can read from the API.

The situations agents get wrong
Choose the people and the mail your agent meets, and put the awkward ones in on purpose.
People who push back
Skeptical people question the premise and want proof. Difficult ones negotiate hard and escalate. Ghosts rarely answer at all.
Promises to track
People promise things and sometimes slip. When the agent promises something and misses it, they chase it.
Mail it should not act on
World streams can send spam and phishing into the agent's inbox alongside real leads and support requests.
Silence
A person may decide not to reply. The agent has to handle it like a real silence.
Its own deliverability
Every email the agent writes gets a spam score. Mail over a person's filter lands in Junk and is never answered.
Days, not seconds
Skip the clock ahead to see what the agent does when replies and nudges arrive over a week.
Connect the agent over MCP, with its own key
Connect the agent over MCP to send, wait for replies, read mailboxes, add people, push cases, check email health and move the clock. Or let it use SMTP, IMAP and the HTTP API like any app. Revoke its key when the experiment ends.
</> For developers: the agent setup
// .mcp.json at your project root (Claude Code)
{
"mcpServers": {
"simmail": {
"type": "http",
"url": "https://c1.simmail.dev/mcp",
"headers": { "Authorization": "Bearer ${SIMMAIL_API_KEY}" }
}
}
}curl -s -X POST https://c1.simmail.dev/api/personas \
-H "Authorization: Bearer smk_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Dana Reyes",
"addresses": ["[email protected]"],
"role": "homeowner",
"wants": "to sell her house this spring for a fair price",
"temperament": "skeptical",
"timing": { "reply_rate": 1 }
}'curl -s -X PUT https://c1.simmail.dev/api/cases/deal-1701 \
-H "Authorization: Bearer smk_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Sale of 1701 Clark Street",
"kind": "real estate",
"facts": { "address": "1701 Clark Street", "asking_price": 175000 },
"people": [
{ "ref": "seller", "name": "Dana Reyes", "role": "seller", "addresses": ["[email protected]"] }
],
"directions": "The seller will not go below 170,000."
}'
# Later, in your evaluation: read the case, story included
curl -s https://c1.simmail.dev/api/cases/deal-1701 \
-H "Authorization: Bearer smk_your_key"# Every event since the run started, oldest first
curl -s "https://c1.simmail.dev/api/log?since=0&limit=1000" \
-H "Authorization: Bearer smk_your_key"curl -s "https://c1.simmail.dev/api/insights?days=1" \
-H "Authorization: Bearer smk_your_key"Questions
Are the people’s replies the same on every run?
No. People write with AI, so their wording changes between runs, as real people’s would. What you control is the setup: the people, their temperaments and reply rates, the case facts and the clock. Use a fresh universe per run so memories and relationships start clean.
Can the agent send real mail if it goes wrong?
No. simmail has no relay and no outbound SMTP client. Mail to any address stays inside simmail. Links in the agent’s emails are opened with real web requests, so avoid links that change something when visited.
How do I tell what the agent should have known?
Push a case. simmail writes its story once; the people on it stay consistent with it, and the story never appears in any email. GET /api/cases/{id} reads it, so your evaluation can compare the agent’s conclusions with the truth.
Does my agent have to use MCP?
No. MCP is one way in. The same universe speaks SMTP, IMAP and an HTTP API, so an agent that already sends over SMTP or reads over IMAP works as it is.
What does a run cost?
Each reply a person writes, each person the AI invents, each case story and each inbound World email is one AI action from your plan. When they run out, people answer from templates until the month resets. See Plans and limits.
Put real behaviour between your app and its inbox
Start free with 25 AI actions a month, no card needed. Upgrade when you need more.