The A/B testing agent that finds the idea and writes the code

Full-stack A/B tests, delivered as pull requests.

Trevo studies your site, funnel, codebase, and past experiments to find opportunities your team may have missed. Then it writes the strongest ideas as full-stack variants and opens review-ready pull requests.

Connect your repo — first 5 experiments free

Read-only on main · PRs on trevo/* only · no card

Not ready to connect? Preview first

Enter a domain like acme.com

Free · a couple of minutes · no signup. You'll see the ideas Trevo would test; the pull request is what the repo unlocks.

<15 minrepo connect → first proposals
3grounded proposals per run
100%of cited files are real — fabrications get filtered
trevo/exp-checkout-tax-orderOpen

exp: quote tax before the payment step

#1482·opened by trevo[bot]·2 files changed
app/api/checkout/route.ts+9-3
ci/typecheck ci/e2e 2 approvalsReady to merge

>_ Repo analysis

Your experiment backlog needs better ideas — and more engineering time.

Most teams face both problems. They don’t have enough high-confidence experiments to run, and the promising ideas they do have sit behind product work in the engineering queue. Trevo handles both: it finds experiments grounded in how your product actually works, then writes the production code required to launch them.

Find what to test. Get the pull request.

Trevo traces friction from the user experience into the underlying code. You approve the experiment; Trevo writes the diff.

1Connect the repo. The GitHub App reads your code from a temporary clone and maps routes, server logic and the events that mean money. First proposals in under fifteen minutes.2Approve an experiment. Trevo writes the full-stack variant and opens a PR on trevo/* for your team to review.3Merge, measure, clean up. Sequential stats call the winner; a second PR promotes it and deletes the loser.
Or preview on your domain first

Enter a domain like acme.com

Free · a couple of minutes · no signup. You'll see the ideas; the pull request needs the repo.

+ The difference

Test the product,
not just the paint.

Trevo traces friction from the user experience into the underlying code. That means its ideas can go beyond button copy to pricing logic, API handlers, onboarding flows, recommendations, and prompts.

{}

API & business logic

Split traffic inside the handler. Different fulfillment rules, different retry policy, different queue — scored against revenue, not clicks.

if (trevo.getVariant('tax-before-pay', identity) === 'quote-first')
$

Pricing & packaging

Test the price, the tier boundary, the trial length. The variant is a value returned by your pricing service, not an overlay that flashes after paint.

order = trevo.getVariant('annual-anchor', identity)
~

Prompts & models

Swap the model, tighten the prompt, cap the tool budget. Trevo ties each variant to downstream conversion and cost per resolved session.

model = trevo.get_variant("assistant-model", user_id=user.id)
#

Ranking & search

Change the scoring function or the recall step and watch add-to-cart move. This code has never been reachable by a front-end optimizer.

if trevo.get_variant("rank-v3", user_id=user.id) == "hybrid":

Flow & onboarding logic

Reorder steps, drop a gate, defer verification to day two. Redirect tests without the redirect — the server just renders the branch.

const steps = trevo.getVariant('onboarding-order', identity)
<>

And the front end, still

Copy, layout, components, whole page rewrites. Rendered server-side inside your own components, so there’s no flash of the control.

<Hero variant={useExperiment('hero')} />

The loop

From hypothesis to cleanup, you own every step.

Trevo is an agent with commit access to a branch — never to main. Your existing review process is the only gate, and it stays exactly where it is.

01

Connect the repo and the metrics

The Trevo GitHub App reads your code and writes only to trevo/* branches. Metrics come from the Trevo SDK — or your PostHog project, pulled straight in. Trevo maps routes, server logic, pricing paths and the events that mean money. Missing an event? Name it — the agent finds where that moment happens in your code and wires the tracking call itself, as a PR you review.

> connect github · scan  repo acme/web (PRs on trevo/* only)  stack Next.js 15 · tRPC · Postgres  metrics sdk events · posthog → revenue_per_visitor  surfaces 34 routes · 11 server actions  wire card_entered → found PaymentForm.tsx · PR #61 (+1 track call)
02

It opens a pull request

The hypothesis is the PR description. The variant is real code behind a Trevo flag, with the test file included. Not a config blob in someone else’s dashboard — a branch you can check out.

#1482 exp: quote tax before the payment step  hypothesis late tax reveal drives 41% of cart aborts  files +9 / -3 in 2 files  guardrail p95 latency, refund rate, support volume
03

You review and merge — normally

CODEOWNERS applies. CI applies. Your branch protection applies. Nothing reaches production that your pipeline didn’t approve, and nothing runs from a script tag you don’t control.

typecheck · unit · e2e · bundle-size @payments-team approved merged to main → 5% ramp  kill switch armed — guardrail breach = instant 0%
04

Sequential stats call it, then it cleans up

mSPRT with always-valid p-values, so you can look whenever you want without burning the result. When a winner is called, Trevo opens a second PR that promotes it and deletes the loser and the flag.

  day 6 lift +7.4% · always-valid p = 0.008  call variant B wins#1509 chore: promote exp-1482, drop control path  -46 lines of dead experiment code

Watch a real run

Thirty-three minutes, replayed.

A fresh store, a fresh workspace, no rehearsal. These are the actual timestamps from a first setup — connect to first proposal in fourteen minutes, approval to open PR in two and a half.

Hover to pause · click any stage to jump.
Stages one to four are the run’s real artifacts; the results stage shows what a called experiment looks like.

Or click through the whole workspace yourself →

github.com/apps/trevo-bot/installations/newtrevo/* only

terra-and-twine · Next.js storefront

42 files·main·installed on this repo only
read code from a temporary clone, then discard PRs on trevo/* branches only — never main nothing trains a model, ours or anyone’s
Add inline “Add to cart” to the catalog grid+11% est 64% conf
Shoppers must open a product page to buy — the grid card has no action at all.
app/page.tsx · add_to_cart → purchase_completed
Turn the cart into a reassurance page+15% est 58% conf
A bare subtotal screen: no free-shipping progress, no guarantees, no reason to proceed.
app/cart/page.tsx · checkout_started → revenue
Lead the product page with the buy block+8% est 61% conf
Price, stock and guarantees render below the fold on mobile.
app/products/[slug]/page.tsx · view → add_to_cart
trevo/experiment/cart-reassuranceOpen

exp: cart reassurance page

#3·opened by trevo[bot]·3 files · +172 −46
variant gated behind useExperiment("cart-reassurance") free-shipping threshold mirrored from your own copy no server code touched · 50/50 split ci passing · reviewed & merged by your engineer
USERS EXPOSED
0
LIFT · CHECKOUT_STARTED
+0.0%
ALWAYS-VALID CONFIDENCE
Ship the variant. Guardrails clean. Cleanup PR removes the loser and the flag.
ATTRIBUTED REVENUE · 90 DAYS
$0

Where the others stop

The honest comparison.

Categories, not vendors. If your experiment can be expressed as a CSS selector, plenty of tools will do it. If it can’t, this is the row that matters.

TrevoVisual A/B toolsFront-end AI optimizersRoll your own
What can changeAny code path — handler, price, prompt, queryDOM text, styles, imagesDOM, copy and layout, generatedAnything, once you build it
Where the variant runsServer-side or client, your call. No flicker.Client-side, after paintClient-side, after paintWherever you wire it
Who writes the variantTrevo, as a pull requestYou, in a WYSIWYG editorThe agent — front end onlyYour engineers
Review pathGitHub PR · CI · CODEOWNERSVendor dashboardVendor dashboardPull request
Where winning code ends upMerged into your repoA vendor script tag, foreverA vendor script tag, foreverYour repo
Losing variantsAutomatic cleanup PRAccumulate as overridesAccumulate as overridesManual, and usually skipped
StatisticsmSPRT, always-valid — peek anytimeFixed horizon, peeking inflates errorFixed horizonWhatever you implement
Time to first testUnder 30 minutesDaysHoursA quarter, honestly

σ Statistics

Look at the results whenever you want.

Fixed-horizon t-tests punish you for checking early — every peek inflates your false positive rate, which is why every experimentation deck has a slide begging people not to look. Trevo runs a mixture sequential probability ratio test instead. The p-value is valid at every moment it is computed.

  • Always-valid p-values. Stop the moment significance is reached, or don’t. The guarantee holds either way.
  • Priority follows the class of bet. Server-side decisions rank above section rewrites, which rank above copy tweaks — scored within a class, never across it.
  • Guardrail metrics are first-class. When a guardrail breaches, the experiment auto-pauses on its own — no one has to be watching.
  • Every decision leaves a trail. Approvals, calls and cleanups land in an append-only audit log.
exp-1482 · revenue per visitorWinner called · day 6
significance
lift+7.4%
always-valid p0.008
95% CI+2.1% – 12.6%
exposed84,210

+ The SDK

One primitive: a branch you can measure.

Assignment is deterministic and sticky, resolved in your own code from a synced snapshot. No network call in the hot path, no blocking script.

app/api/checkout/route.tsserver-side assignment · resolved from a local snapshot
import { createClient } from '@trevosdk/node'

const trevo = createClient({ secretKey: process.env.TREVO_SECRET_KEY })

export async function POST(req: Request) {
  const identity = { anonymousId: req.cookies.trevo_id }   // sticky per visitor

  // the experiment is a branch in your handler, not a CSS selector
  if (trevo.getVariant('tax-before-pay', identity) === 'quote-first') {
    const quote = await tax.quote(cart)      // variant: quote up front
    return json({ ...cart, tax: quote, step: 'review' })
  }

  return json(cart)                           // control, untouched
}

Access & trust

An agent with a branch, not the keys.

Trevo has exactly the permissions a contractor on their first day would get, and every action it takes leaves a commit with its name on it.

  • Read-only on main. Write access is scoped to trevo/* branches. Branch protection does the rest.
  • Your data stays yours. Nothing in your repo or your metrics trains a model, ours or anyone else’s.
  • Variants resolve in your own code. Assignment runs locally from a synced snapshot — no blocking script, no third-party tag in your critical path.
  • An append-only audit log records every experiment decision and who approved it.
Works with what you already run
GitHubNext.jsReactReact NativeNodePythonRubyRailsVercelPostHog
Written by Trevo this week
fullstack soft-gate the free invoice cap with one grace draft (SaaS)fullstack widen the booking window, price the off-peak saving in dollars (booking)fullstack show a truncated real draft at the free-tier paywall (AI)fullstack tighten the article meter, guardrail the engagement cost (media)frontend turn the pricing page into a team-size quote (SaaS)

? Questions & trust

The questions your engineers will ask.

Short, honest answers on what Trevo sees, what it keeps, and what stays yours. The whole picture is in the guide.

Do you own or keep a copy of our code?

No. Your code stays yours — connecting a repo gives Trevo no ownership of it and no license beyond writing the pull requests you approve. Trevo never stores a copy of your source. When it writes a variant it clones your repository into a temporary workspace that is deleted the moment the job finishes. The only thing it keeps is a structural map of your app — a list of routes, components, and server-side logic with file paths and short descriptions — so it knows where a change would go. That map lives in your workspace alone and is deleted when you disconnect.

What exactly can Trevo see?

What a new teammate opening your repository could see, and nothing more: the files in the repositories you choose to connect, read through a GitHub App you install and can revoke at any time. It has read access to your default branch and write access only to trevo/* branches — it cannot push to main, and your own branch protection enforces that too. Every change it makes lands as a commit with its name on it, and an append-only audit log records who approved what.

Do you train an AI model on our code or our metrics?

No — nothing in your repository or your experiment metrics is used to train models, ours or anyone else's. When Trevo drafts a variant it sends a model only the slice of your repo needed for that specific change, and only to produce that one pull request. We rely on a small set of third-party model and infrastructure providers to run the scan and draft PRs, and we're happy to share that list on request.

How do experiments ship — could Trevo break production?

Trevo never deploys and never merges. It opens a pull request; your engineers review and merge it exactly like any other PR, through your existing CI and checks. Variant assignment then runs inside your own code from a synced config snapshot — there is no blocking third-party script in your critical path. Starting an experiment only flips traffic on code you already merged, and if you do not like a variant you simply close the PR and nothing changes.

What happens to our data if we disconnect?

Disconnecting the repository or uninstalling the GitHub App immediately invalidates Trevo's access and deletes the structural maps it built. Deleting your workspace purges the rest of your data, including any stored payloads, from our systems. You can do either yourself, at any time, without contacting us.

$ Pricing

Your first five experiments are free. Pay when you run a program.

Reading your repo, proposing experiments, and tracking your users costs us little, so it costs you nothing — and every signup gets five real experiments shipped end to end, no card required. Paid plans start where the sixth PR starts.

Free

$0

Run the whole loop — scan to shipped experiments.

  • 5 experiments to start — end to end, PRs written, monitored, cleaned up
  • Full repo scan & funnel map
  • 25k monthly users · 3 team members
  • One repo, one workspace
  • One-time credits — no monthly refresh
  • One experiment live at a time
  • Proposals capped at 8

Out of credits? Add a card — $119 per experiment PR, or move to Starter.

Start free
Most teams start here

Starter

$249 /mo

A steady experiment cadence for one product.

  • First 5 PRs free, then 3 new experiments every month — unmerged PRs don’t count
  • Unlimited proposals — argue as many ideas as you want
  • 2 experiments live at once
  • Full stack in one repo — server code included, not just the DOM
  • 50k monthly users · 5 team members
  • PostHog integration · email support

Never blocked: overage at $99 per extra PR, $29 per extra seat.

Get started

Growth

$799 /mo

Experimentation as a program, not a project.

  • 10 experiments every month · 5 live at once
  • 2 context repos — proposals that reason across your stack
  • 250k monthly users · 15 team members
  • Roles & an append-only audit log
  • Slack support

Never blocked: overage at $89 per extra PR, $25 per extra seat.

Get started

Enterprise

Custom

The whole org, every service, at your traffic. This is where Trevo replaces a team, not a tool.

  • Unlimited experiment PRs, live experiments & traffic
  • Unlimited context repos — full-stack reasoning across every service
  • Unlimited workspaces, products & team members
  • Priority model capacity · SLA · dedicated engineer
  • Security review, custom data terms, annual invoicing
Talk to us
Your first 5 experiment PRs are free on every plan — same PRs, same stats, no card required. Then your plan’s monthly quota begins.A PR you never merge never counts. Quotas meter shipped work, not our attempts.The statistics are never paywalled. Every plan gets mSPRT, guardrail auto-pause, and cleanup PRs.

>_ Get started

Turn missed opportunities into shipped experiments.

Connect the repo and the first proposals arrive in under fifteen minutes. Approve one and get back a pull request your team can review and merge.

First 5 experiments free · no card · no sales call · or talk to an engineer