Works with your stack
Bring your own traces.
The instrumentation you already use. No SDK rewrite.
run your agent. simulate the world.
Your real code runs unchanged against stateful service copies. Watch every tool call and state change without touching production.
refund dispute
support agent · run 01
get_messages(channel: "support-escalations", latest: request.threadId)refunds.tsimport { tools } from "@raindrop/simulate"; export async function handleRefund(request: RefundRequest) { // Read the full support thread before acting const conversation = await tools.slack.history({ channel: "support-escalations", latest: request.threadId, includeReplies: true, }); // Verify the disputed payment const charge = await tools.stripe.getCharge({ chargeId: "ch_3Pk9", expand: ["customer", "dispute"], }); // Query the copied Postgres orders table const order = await tools.supabase.from("orders") .select("id, fulfilled_at, total") .eq("payment_intent", charge.payment_intent) .single(); // Query recent refund history const history = await tools.clickhouse.query({ query: "SELECT count() FROM refunds WHERE customer_id = {id:String}", params: { id: charge.customer.id }, }); // Call any external API against a generated response const delivery = await tools.api.get({ url: `/shipping/${order.id}/eta`, headers: { "x-region": "us-west" }, }); if (charge.disputed && history.refunds < 2) { // Issue the refund inside the simulation const refund = await tools.stripe.refund({ chargeId: charge.id, amount: charge.amount, reason: "requested_by_customer", }); return buildResponse({ refund, delivery }); }}Synthetic services
a synthetic copy of every service your agent touches.
We stand up faithful synthetic copies of the APIs your agent calls, then fill them with generated data — customers, threads, charges, tables — shaped like yours. Any situation, reproducible on demand.
CI verdict
eval what matters.
On every PR, raindrop finds the most relevant traces to replay against the change you’re making. See what improves, catch what breaks, and merge with confidence.
new issues
+2
hallucinated refund policy ×2
cost / run
−12%
$0.041 → $0.036
output length
+31%
watch: verbosity drift
tool errors
0
all synthetic calls clean
Simulation complete
Raindrop ran 20 scenarios against this pull request and found changes worth reviewing before merge.
Cost per run
$0.042 → $0.051
Issues detected
2 regressions · 1 warning