Milo gives your AI email agent fake customers with real email addresses. Six scripted personas (angry refunds, chargeback threats, silence, GDPR requests) reply over real SMTP, deterministically: same inputs, same replies, no LLM in the reply path. Plus-address run IDs and a JSON lookup API make every conversation assertable in CI. There is no signup: emailing refund-angry@joinmilo.email is the onboarding. Strict mode rebuffs vague promises. MCP server, llms.txt and an agent skill included.
Hi Product Hunt! I built Milo after watching team after team wire an LLM into their support inbox and "test" it by emailing it themselves, politely, twice. Then a real customer threatens a chargeback and the agent hands out a refund and a discount code. A tribunal held Air Canada liable for a policy its chatbot invented; the failure mode is real, and it's not a stack trace, it's a message you can't unsend.
Milo is the reply side of email testing. Sandboxes like Mailtrap capture what your agent sends; nothing answers back. Milo answers back, in character: Dana is furious about a double charge, Marcus is threatening a chargeback, Priya just wants her delivery address changed. Real inboxes, real SMTP, correct threading.
The part I care most about: there's no LLM anywhere in the reply path. Every persona is a hand-written state machine, so the same inputs produce byte-identical replies, every run. That's what makes it work in CI: add a run ID to the address (refund-angry+run-8f3k2@joinmilo....), poll a JSON endpoint, and assert the conversation reached the right state. A red build means your agent regressed, not that a judge model changed its mind.
Try it right now, no signup: email refund-angry@joinmilo.email from any inbox and Dana replies in seconds. Offer her a refund and she calms down. Offer her a discount instead and she doesn't.
For the skeptics: we ran our own quickstart prompt through a coding agent with zero context, and it built a full green-test integration on the first try. The repo, including the bug it deliberately left in, is public: github.com/benhowdle89/milo-agent-quickstart
Free tier is 50 conversations a month, no card. It's just me building this (no VC, no growth team) and I answer every email: hello@joinmilo.email. What persona is missing? I suspect "asks three unrelated questions in one email".
ReqRes