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 example

Your 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

Changed
Previous run 41Retained
Current run 42Saved

Database result

Changed

Previous run 41Retained

invite_idrole
invite-1042Editor

Current run 42Saved

invite_idrole
invite-1042Viewer

Command output

Unchanged

Previous 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.

reflow / Pull request reviewIllustrative example
Pull request #184

Update invitation copy

copy/team-invite → main · head 9c1e2f7
invite-memberPassed
verify-roleFailed
accept-inviteBlocked
team-invitation.pngChanged
Application reviewPrepared note

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.

Before
AcmeWorkspace Invite a teammate Add someone to your workspace. Email address sam@acme.test RoleEditor Send invitation
After
AcmeWorkspace Invite a teammate Add someone to your workspace. Email address sam@acme.test Role selector removed Send invitation
Application rule · team-access.md

“An invitation keeps the role the owner selected.”

Before / after capturesFlow results

Teach 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 knowledge
reflow / Application knowledgeIllustrative example
team-access.mdRevision 3f2a · example

Team access

Expected behaviorAn invitation keeps the role the owner selected.

Owners can invite teammates as editors or viewers. Accepting an invitation must grant that role.

Referencessrc/team/invitations.ts/settings/team
Exercised by
  1. seed-data
  2. invite-member
  3. verify-role

Selected role = accepted role

Expired invitations: coverage not recorded.

checkout.mdRevision 3f2a · example

Checkout

Expected behaviorCharge the total shown at checkout.

Apply the customer’s discount before payment. The saved order and the receipt must show the same total.

Referencessrc/orders/checkout.ts/checkout
Exercised by
  1. seed-cart
  2. place-order
  3. verify-total

Cart total = payment = receipt

Multiple discount codes: behavior not documented.

refunds.mdRevision 3f2a · example

Refunds

Expected behaviorA full refund restores the balance and returns stock.

The customer receives the amount paid. The order is marked refunded and its items become available again.

Referencessrc/orders/refunds.ts/orders
Exercised by
  1. place-order
  2. refund-order
  3. 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
Test dependency graphProduct example
The invitation and profile flows both depend on seed-data.

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 MCP

Reflow

Runs the dependency graph, saves what each run showed, stored and returned, and compares the previous run with the current one.

Plan, run, compare

Your 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 PR

Test 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 commands
reflow / Custom Commerce pluginIllustrative example
refund-order.mdshop.refund_order customer="alex"
Customer balance$75.00$100.00$25.00 returned
Inventory9101 item returned
Snapshot deltaBeforeAfter
order.statuspaidrefunded
balance$75.00$100.00
stock910
shop.expect_balance customer="alex" amount=100shop.expect_stock count=102 assertions passed

Teach 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.

reflow / Team invitationsIllustrative example
Change Summary

Update invitation copy

1 changed screen
invite-memberPassed
team-invitation/settings/team
Beforemain
AcmeWorkspace Invite a teammate Add someone to your workspace. Email address sam@acme.test RoleEditor Send invitation
Afterthis change
AcmeWorkspace Invite a teammate Add someone to your workspace. Email address sam@acme.test Role selector removed Send invitation
The test passed. The screen changed.site.snapshot
Agent reviewOutside scope

The role selector disappeared.

This PR changes invitation copy. Owners still need to choose a role before sending an invitation.

team-invitationteam-access.md

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.

A refund, in your application’s language.Custom plugin example
$ 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.

Your agent.
Evidence for your next review.

Connect your agent