Teach your agent to test your app. Review what changed.
What your app did before,
beside what it does now.
Reflow runs your flows and saves the screenshots, query results and command output you choose to capture. Previous and current runs stay side by side, so Claude, Codex or your MCP agent can read both against your application’s rules and the pull request’s intent, then point out what deserves a closer look.
Closed beta. Sign in to register interest.
App access is limited to approved teams.
Saved observations
Illustrative exampleYour agent uses the PR’s intent and application rules to flag what looks unusual.
PR intent Update invitation copy
Application rule The owner chooses the invited member’s role.
Invitation screen
ChangedDatabase result
ChangedPrevious run 41Retained
| invite_id | role |
|---|---|
| invite-1042 | Editor |
Current run 42Saved
| invite_id | role |
|---|---|
| invite-1042 | Viewer |
Command output
UnchangedPrevious run 41Retained
Invitation sent exit 0stderr empty
Current run 42Saved
Invitation sent exit 0stderr empty
Inspect saved details
The screen checkpoint is team-invitation. The saved query also includes the invitation’s email address.
Previous run 41
Query columns and row
{
"columns": [
"invite_id",
"email",
"role"
],
"rows": [
[
"invite-1042",
"alex@example.com",
"Editor"
]
]
} Command result
{
"stdout": "Invitation sent\n",
"stderr": "",
"exitCode": 0
} Current run 42
Query columns and row
{
"columns": [
"invite_id",
"email",
"role"
],
"rows": [
[
"invite-1042",
"alex@example.com",
"Viewer"
]
]
} Command result
{
"stdout": "Invitation sent\n",
"stderr": "",
"exitCode": 0
} Your agent’s review
The heading matches the intended copy change. The missing selector and saved role changing from Editor to Viewer deserve a closer look: the owner should be able to choose the invited member’s role.
Inspect the evidence. You decide what to merge.
Put the application change
in the pull request.
Show your reviewer the missing control, the changed result and the rule they affect. Your agent can explain which changes belong in scope and which need a closer look.
Keep the screenshots and flow results one click from the review, with a change summary that updates as the run progresses.
Update invitation copy
copy/team-invite → main · head 9c1e2f7Teach it what matters
in your application.
Who can invite a teammate? What should a refund restore? Your agent records those rules in Reflow’s application knowledge repository and updates them as the app changes. It reads and writes that knowledge through MCP.
Each page connects that context to the flows that check it, so the next change starts with what your app is supposed to do.
Explore application knowledgeTeam access
Owners can invite teammates as editors or viewers. Accepting an invitation must grant that role.
src/team/invitations.ts/settings/team- seed-data
- invite-member
- verify-role
Selected role = accepted role
Expired invitations: coverage not recorded.
Checkout
Apply the customer’s discount before payment. The saved order and the receipt must show the same total.
src/orders/checkout.ts/checkout- seed-cart
- place-order
- verify-total
Cart total = payment = receipt
Multiple discount codes: behavior not documented.
Refunds
The customer receives the amount paid. The order is marked refunded and its items become available again.
src/orders/refunds.ts/orders- place-order
- refund-order
- verify-refund
Balance restored · stock returned
Partial refunds: coverage not recorded.
Plan tests around
their dependencies.
The invitation flow depends on seeded data, and the role check depends on an invitation. Reflow runs them in that order.
Your agent declares prerequisites with needs. Before execution, Reflow explains which work will run, reuse completed results, wait for dependencies, or stay blocked. A little like Terraform for testing.
Understand the execution model ┌──────────────┐
│ seed-data │
└──────┬───────┘
│
┌─────────────┴─────────────┐
│ │
┌──────▼───────┐ ┌──────▼───────┐
│ invite-member│ │ edit-profile │
└──────┬───────┘ └──────────────┘
│
┌──────▼───────┐
│ verify-role │
└──────┬───────┘
▼
┌──────────────┐
│ accept-invite│
└──────────────┘ Code review. Bring your own agent.
Keep the agent and workflow you already use. Give the review what the application did before the change and what it does now.
Your agent
Reads the change, chooses the checks, and uses your application’s rules to say which differences deserve a closer look.
Connect through MCPReflow
Runs the dependency graph, saves what each run showed, stored and returned, and compares the previous run with the current one.
Plan, run, compareYour review
See the changed screen, the saved result, and the agent’s note. Open both records and decide what to merge.
Bring it to the PRTest what a refund
does to your application.
A refund should restore the balance and return the item to stock. Define commands and comparisons that express those business rules.
Plugins give your agent a testing language for your application, across the browser, database, background jobs and email.
Build application commandsshop.refund_order customer="alex"order.statuspaidrefundedbalance$75.00$100.00stock910shop.expect_balance customer="alex" amount=100shop.expect_stock count=102 assertions passedTeach your agent to catch what a passing test misses.
An invitation test can pass even when the role selector disappears.
Reflow captures screenshots during test runs and compares them across changes. Your agent checks those differences against the PR’s intended scope and links the relevant captures in its review.
Update invitation copy
team-invitation/settings/teamsite.snapshotThe role selector disappeared.
This PR changes invitation copy. Owners still need to choose a role before sending an invitation.
Scale the testing.
Keep the context focused.
Your agent can run independent flows in parallel and read selected knowledge and test results through tool calls.
Start with a run summary, then inspect the relevant knowledge and snapshots. The agent can work across the application without loading the whole repository or every test result into its context window.
$ reflow apply customer → order → refund → verify ✓ Prepare the customer shop.customer id="alex" balance=100 CUSTOMER BALANCE INVENTORY Alex $100.00 10 available ✓ Place an order shop.place_order customer="alex" total=25 ORDER BALANCE INVENTORY paid $75.00 9 available ✓ Refund the order shop.refund_order customer="alex" ORDER paid → refunded BALANCE $75.00 → $100.00 INVENTORY 9 → 10 ✓ Assert the business outcome shop.expect_balance customer="alex" amount=100 shop.expect_stock count=10 shop.expect_order status="refunded" shop.snapshot name="after-refund" ✓ Balance restored ✓ Stock restored ✓ Order refunded snapshot: after-refund 4 flows passed. Snapshot ready for review.
The role selector disappeared.
The invitation still sends, but an owner can no longer choose the new member’s role. This PR was intended to update copy.
“An invitation keeps the role the owner selected.”