How Quiet built its product agent on Revyl

Raphael YazdiRaphael YazdiCTO, Quiet

Quiet

The agent walks the new onboarding on a Revyl iPhone

The agent walks Authenticator's new onboarding on a Revyl iPhone, from first launch to the Codes screen.

Why we built it

Quiet is a small team that ships consumer apps fast: four Android apps in August, two iOS apps in September, and more on the way. At that pace, nobody can open every build on a phone and tap through it by hand.

We already had Agent Data, an agent in Slack that answers “what happened?” from our warehouse. What we lacked was someone to answer “what does the app actually do, and is it broken?”. So we built Agent Product: an AI agent in Slack that anyone on the team can ask “check the new onboarding”, “show me the home screen” or “write the test for this flow”. It gets its phone from Revyl.

The Revyl CLI is the agent’s hands

The Revyl CLI runs inside the agent’s own container. Each question gets its own cloud device, with the newest build of the app’s main branch. The agent starts the device, tells it what to do in plain language, checks what is on screen, takes screenshots, and stops the device once it has its answer. In our first measurements, a device was ready in about 25 seconds and a five-step check took about three minutes.

Every answer ends with a link to the Revyl session report, so anyone can see exactly what the agent did and saw.

The agent walks Authenticator's new onboarding on a Revyl iPhone, from first launch to the Codes screen.

Atlas is the agent’s memory

Before it touches a phone, the agent asks Atlas, Revyl’s map of the app built from past runs: every screen, what it looks like, and how the screens connect. Many questions never need a device. When a teammate asked for Authenticator’s home screen, the agent answered straight from Atlas.

The agent also leaves notes in Atlas that later runs read back.

Asking for a screen: the answer comes from Atlas, with no device started.

From a bug to a Revyl test

On a routine check, the agent tried to add a 2FA code by hand in Authenticator and hit two bugs. Tapping the Secret key card left the cursor in the Account field, so the secret was typed into the account name. After Save, the account screen still led back to the filled-in form. A developer fixed both from that run, in a pull request that opens with “Found by a cloud-phone check”.

We then asked the agent for the test that keeps these bugs from coming back. It ran the flow again on the latest main build, where the fix had not landed yet, and both checks failed, as they should. Revyl’s report shows which step failed and why.

Revyl's report: the failed validation, with its reasoning.
Revyl's report: the failed validation, with its reasoning.

The agent turned the run into a test card in Slack: 14 steps, checked with Revyl’s own validator. One press on Go filed it as a GitHub issue in the app’s repo, with the YAML to commit under .revyl/tests/. Once the fix is merged, the same test guards the flow on every build.

In Slack: the agent runs the flow on a Revyl iPhone, two checks fail, and one press on Go files the test as a GitHub issue.
The issue, with the Revyl test to commit.
The issue, with the Revyl test to commit.
The fix, found by a cloud-phone check.
The fix, found by a cloud-phone check.

Features and A/B tests

The agent also prepares product work. We asked it for an A/B test of interstitials and a banner for non-paying users of Authenticator. It checked the app’s screens in Atlas, and asked Agent Data for the traffic and for the analytics events the app already sends.

Its draft places the banner where the Codes screen has free space, above the tab bar. It shows one interstitial when the user returns to a list after opening a code, at most every three minutes and never in the first session, and it keeps ads out of the lock screen, the passcode flows and the AutoFill extension. The draft also carries the acceptance criteria, the analytics events to add, and the Revyl test QA will run on each arm. The agent said plainly what the data can and cannot show: with today’s traffic, only a large drop in trial starts would be readable within five weeks.

An idea in Slack becomes a ready-to-build issue with screens, numbers and its Revyl test, ready to file with one press on Go.

The A/B test in Slack: the banner and the interstitial placed on the Codes screen from Atlas, ready to file with Go.
From the full draft: where the ads go, where they never go, and the Revyl test for QA.
From the full draft: where the ads go, where they never go, and the Revyl test for QA.

Marketing: ASO screenshots from Atlas

Store screenshots go stale with every release. Refreshing them used to mean installing a build, setting up test data and capturing each screen by hand, for every app.

Now our marketing team just asks Agent Product: “can you give me the main screens of Authenticator iOS? it’s for the ASO”. The agent picks the screens itself from the 46 that Atlas knows, flags what is not store-ready yet (test data, an empty list), and posts the captures in under a minute, ready to download from Slack. When Atlas is behind, it takes a fresh capture on the newest build. The team then runs its own ASO process on them to design the store screenshots, and saves significant time on every release.

A teammate asks for the main screens for ASO: the agent picks seven from Atlas and posts them, with what to fix before the store.

Atlas maps the app for agents. At Quiet, the same map also feeds marketing.

Authenticator on the App Store: the store screenshots our marketing team designs from the app's captures.
Authenticator on the App Store: the store screenshots our marketing team designs from the app's captures.

Results, and where the workflow will be in 6 months

What changed

We started in August and the full pipeline is still being built, so these results are qualitative.

  • Anyone can check the app. A product question in Slack gets its answer from a real device, with the Revyl report as proof, in minutes. Nobody installs a build to answer it.
  • Bugs become tests. A bug the agent catches goes to GitHub with its steps and a Revyl test, and the fix ships with the test that guards it.
  • Ideas become ready-to-build issues. Features and A/B tests reach developers with screens, placements, analytics and a QA test, not as a line in a chat.
  • Marketing serves itself. The screens of any app are one Slack message away.

In 6 months

We are automating the rest of the loop, so that Revyl runs at every stage of a feature’s life.

Revyl at every stage of a feature's life.
Revyl at every stage of a feature's life.
  • During development, proof of changes. Every pull request runs on a real device, and the Revyl report is the proof that it works. We are trialing Revyl’s Proof of Change on one app today.
  • Before release, a full app test. The whole app runs on Revyl, including every test the bug flow has added.
  • After release, bug to test. Every bug found becomes a new test, and the loop starts again.
  • More apps, same small team. Each new app gets its Atlas map, its tests and its agent from day one.

What it takes

Giving an AI agent a real phone took three things from Revyl: devices it can drive from a CLI, a memory of each app in Atlas, and tests written in plain language that a developer can commit.

Customer stories

Ready to ship with confidence?

Give your team and its agents a runtime to build, run and verify every change.