Examples / Sign-up flow check
Sign-up flow check
Every weekday morning an agent opens a headless browser, signs up for a new account the way a customer would, and reports whether it reached the welcome page. The session is recorded as a video and a Playwright trace, and a failure posts both to Slack.
Headless browserSlackYour AI models
What you tell the assistant
Why it works
- The agent reads each page as an accessibility tree and acts on what it finds, so a moved button or a renamed field doesn't break the check the way a hard-coded script would.
- A failure arrives with a video of what the agent saw and a Playwright trace of every click, the page at each step and its network requests.
- Pages load signed out, from the public internet, and the recordings stay in the account.
What it builds
Trigger
Schedule
0 7 * * 1-5 · America/Toronto
agent
Sign up like a customer
1 tool · smart
tool
Fetch the recording
browser.read
if !signup.output.data.passed
tool
Alert
slack.post_message
View the definition
trigger:
kind: schedule
cron: "0 7 * * 1-5"
timezone: America/Toronto
steps:
- key: signup
name: Sign up like a customer
kind: agent
model: smart
tools: [browser.*]
max_iterations: 25
prompt: |
Open https://northwind.example/signup with record_video and trace. Sign up with the
email qa+{{ run.number }}@northwind.example and the password Murmur-{{ run.number }}-check,
accept the terms, and submit. Report whether the welcome page appeared, and if it
didn't, what stopped you. Close the session when you are done.
schema:
type: object
properties:
passed: { type: boolean }
summary: { type: string }
session: { type: string }
required: [passed, summary, session]
- key: recording
name: Fetch the recording
kind: tool
if: "!steps.signup.output.data.passed"
tool: browser.read
args:
session: "{{ steps.signup.output.data.session }}"
- key: alert
name: Alert #eng-alerts
kind: tool
depends_on: [recording]
tool: slack.post_message
args:
channel: "#eng-alerts"
text: |
:warning: Sign-up check failed: {{ steps.signup.output.data.summary }}
Video: {{ steps.recording.output.videos }}
Session: {{ steps.recording.output.page }}
A sample run
What each step produces
Sign up like a customer agent
succeeded
Sign up like a customer agent
Opened browser session k3q9w2x7m1pa on https://northwind.example/signup, recording video and trace
Fill e14 · https://northwind.example/signup
Fill e17 · https://northwind.example/signup
Check e21 · https://northwind.example/signup
Click e23 · https://northwind.example/signup
Closed browser session k3q9w2x7m1pa
{
"text": "",
"tool_calls": 9,
"data": {
"passed": false,
"summary": "The form accepted the details, but submitting showed “Something went wrong. Please try again.” and stayed on /signup. The terms checkbox and every field were filled.",
"session": "k3q9w2x7m1pa"
}
}
Fetch the recording tool
succeeded
Fetch the recording tool
Calling browser.read
{
"session": "k3q9w2x7m1pa",
"status": "closed",
"url": "https://northwind.example/signup",
"page": "https://murmurator.app/a/northwind/browser/k3q9w2x7m1pa",
"videos": [
"https://murmurator.app/a/northwind/browser/k3q9w2x7m1pa/files/video.webm"
],
"traces": [
{
"file": "https://murmurator.app/a/northwind/browser/k3q9w2x7m1pa/files/trace-1.zip",
"viewer": "https://murmurator.app/trace-viewer/index.html?trace=https%3A%2F%2Fmurmurator.app%2Fa%2Fnorthwind%2Fbrowser%2Fk3q9w2x7m1pa%2Ffiles%2Ftrace-1.zip"
}
]
}
Alert tool
succeeded
Alert tool
Calling slack.post_message
{
"ok": true,
"channel": "C04ENGALERT",
"ts": "1791371042.000200"
}
Trigger payload
{
"scheduled_at": "2026-10-07T11:00:00Z"
}
More examples
Turn one person's AI process into the company's.
Murmurator is invite-only. Already invited? Sign in and build something real.