The moment the app says “check your email”, most automation stops. This does not.

When a project enables the mailbox capability, a mail catcher runs beside the application in its environment and the app's SMTP settings point at it. The agent gets the mail as tools: wait for a message, read it, search, and follow the link or code it contains, in the same browser session.

In the dashboard
Projects
Feature specs
37
agentSubmitted the participant email on /register. The page says "Check your inbox for a sign-in link". Waiting for the message.
toolwait_for_email({ to: "participant+7f2a@qa.test", subject_contains: "Your sign-in link", timeout_s: 60 }) → { id: "m_41", from: "noreply@jade.events", received_at: "…12:04:31Z", links: ["https://…/auth/magic?token=…"] }
toolbrowser_navigate("https://127.0.0.1:41733/auth/magic?token=…")
agentLanded on the participant dashboard as Jordan Ruiz. The welcome banner and the event card are present. Continuing with step 4.

What it looks like in a run.

The excerpt is the shape of a real transcript: the agent explains what it sees, calls a mail tool, gets back the message with its links already extracted, and navigates. Nothing is mocked in the app; the email really was sent and really was read.

ToolDoes
wait_for_emailblocks until a message matching recipient and subject arrives, or times out
get_emailreturns one message with text, HTML, links and codes parsed out
search_emailslists recent messages by recipient, sender or subject
send_emailsends into the app for inbound-mail flows (a support inbox, a reply-to)

Flows this unlocks.

  • Magic-link sign-in: request the link, read it, land signed in, continue the test.
  • One-time codes: the code is parsed from the message and typed into the form.
  • Invitations: an admin invites a colleague; the agent accepts as the invitee from the email.
  • Verification and receipts: assert the confirmation mail arrived with the right event, dates and reference, not just that the page said so.
  • Rendered email: open the HTML body in a tab and screenshot it, so the recording shows what the recipient would see.
Project → isolated environment → mailbox
mailbox:
  enabled: true
  # Injected into the app's boot env by the platform:
  SMTP_HOST: 127.0.0.1     SMTP_PORT: 1025
  EMAIL_DOMAIN_ALLOWLIST: qa.test    # apps that allow-list recipients need this

# The agent's own test addresses use a plus-tag so parallel runs never
# read each other's mail:  participant+<job-id-prefix>@qa.test

Where it stops today

  • The mailbox is part of an isolated environment. A project that tests a fixed URL has no captured mail unless that deployment already points at a catcher the platform can read.
  • Mail the app sends through a third-party API (rather than SMTP) is only captured if the app can be pointed at the catcher's SMTP port in test configuration.
  • The catcher is Mailpit. Its readiness probe is known to fail on the docker backend in local development; it works on the cluster and native box backends.
  • Inbound mail (send_email) reaches the app only if the app polls or receives from the catcher; most do not, and the seeded examples that do are Jade's support inbox.