How a reagent
reads your preview.
Litmusly is a GitHub App. When a pull request opens, it finds the preview deploy, sends a grounded reagent to walk it in a real browser, and reads the reaction against a strict schema. Here is the whole pass, step by step.
From pull request to reaction.
Every review follows the same grounded path. No configuration branches, no per-repo tuning. Five steps, one comment.
Discover the preview deploy
A pull request opens or updates. Litmusly finds its preview through the GitHub Deployments API, so it works with Vercel or any host that reports a deployment. No manual URLs, no dashboard to babysit.
Walk it in a real browser
Each enabled reagent drives a live browser session with Stagehand on Browserbase. It lands on the homepage, reads the above-the-fold value proposition, finds the primary call to action, clicks it, and observes what happens, capturing screenshots along the way.
Review the walk against a strict schema
The walk trace goes to a model through the Vercel AI Gateway. The review is bound to a schema: between 0 and 5 findings, each one specific enough to act on. Nothing free-form, nothing unbounded.
Tag and post one comment
Every finding is tagged blocker, friction, or nit, with a short title and a quote from the walk. It lands as a single PR comment that edits itself in place on the next push. Many PRs deserve zero findings, and get zero.
Synthesize across reagents
On Pro and higher tiers, a synthesis pass folds every reagent's findings into one collective verdict, so you read one reaction to the change instead of parallel opinions.
A reagent walks the live preview, not the code.
The reagent drives a real browser. It reads what a visitor reads, in the order a visitor reads it, and records the reaction as it goes.
The review is bound to a schema.
The walk trace is read against a strict shape: between 0 and 5 findings, each tagged, titled, and quoted. The ceiling is what keeps the comment sharp instead of an endless list. Severity reads like a reaction scale.
A reagent is a written profile.
Not a random sample and not a mood. Every reagent is an explicit profile that shapes how the model reads the same walk. Because the profile is written down, the review stays anchored to what a real person in that role would care about.
Who the reagent is and what brought them to the page. Sam is a first-timer on desktop. Marcus is on a 390px phone. Elena is watching for anything that leaks.
An ordered list of what this reagent cares about most, first to last. The order decides which moments in the walk carry weight.
An explicit list of what this reagent ignores, so it stops chasing issues outside its lane and the comment stays quiet.
Built to run on every push.
No accuracy scores, no benchmarks to quote. The reagent reads what a real person in that role would run into, and stops. What keeps it sustainable is the routing, not a cheaper read.
Routed through the AI Gateway
Every review goes through the Vercel AI Gateway and runs on Gemini. One place to route, meter, and cap spend.
Volume is the tier line, not quality
Model quality is not a paywall. What scales with your plan is how many reviews you run per day, not how carefully each one is read.
The static prefix is cached
The reagent profile and system prefix stay stable across runs, so repeated reviews reuse the same context instead of re-paying for it.
Put a reaction on your
next pull request.
Install the GitHub App, enable the reagents you want, and open a PR. The review shows up where your team already reviews code.