Agents write code faster than teams can check it still does what was meant. AfterMerge reviews every pull request against the customer journeys it touches, across every repository, before it reaches production.
Checking 5 customer journeys1 of 5 journeys failed
Customer journeys
Sign up · AccountsPassed
Checkout · Revenuebilling-worker still reads user_idFailed
Order history · OrdersPassed
Download an invoice · FinancePassed
Refund an order · Supportthe payment webhook isn’t in these reposInconclusive
Code review sees the diff, not the intent
Business knows the why, product the what, engineering the how. With agents writing more of the code, changes ship before anyone checks they still do what was meant. That’s intent drift, and it surfaces in code nobody opened during review.
Engineeringowns the how · driftedProductknows the whatBusinessknows the why
A field is renamed
The API now sends account_id. A billing worker in another repo still reads user_id and stops charging cards.
An event changes shape
An order event moves its total into a new field. The service that emails receipts sends them blank.
An endpoint moves
A route is renamed during cleanup. The mobile app already on your users’ phones keeps calling the old path.
A shared type changes
A package every service imports gets a new version. One consumer still compiles, and quietly behaves differently.
How it works
Three steps, and no config files.
Connect your repositories
Install the GitHub app and pick the repos that talk to each other. There’s nothing to configure inside any of them.
webapibilling-workermobile
Open a pull request
Checks start on their own for every new PR, or on any single PR when someone asks for one in a comment.
@aftermerge-ai reviewAuto-check
Read the result on the PR
One comment lists every customer journey that was checked, what broke and why. A GitHub check reports alongside it, and never blocks the merge.
AfterMerge Review3 passed1 failed1 inconclusive
Every result shows its work
What the user expected, what would actually happen, and the files behind it. Below is the real report, run on a sample pull request.
Rename user_id to account_id on ordersapi #4825 journeys · 1 failed
The customer places an order, the billing worker charges their saved card, and the order moves from pending payment to paid within a few seconds.
Prediction
Explanation
The rename is complete inside the api repository, and its own tests pass. billing-worker is a separate repository that consumes the same order payload and was not updated.
Initial state
A signed-in customer with a saved card has one item in their cart.
1
Step 1
The customer submits the order; the API stores it and publishes order.created.
Predicted state
The event payload now carries "account_id" and no "user_id".
api/internal/orders/order.go:18-24
2
Step 2
billing-worker picks up order.created and looks up the customer to charge.
Predicted state
payload.fetch("user_id") raises KeyError; the job is retried.
Edge cases
Retries exhaust after 5 attempts and the job is dropped.
billing-worker/app/jobs/charge_order_job.rb:41
Outcome
The order stays in pending payment and no charge is made.
Prediction
Explanation
The rename is complete inside the api repository, and its own tests pass. billing-worker is a separate repository that consumes the same order payload and was not updated.
Built for changes that span teams
A pull request is rarely the whole story, so AfterMerge follows the work across teams, repositories and tools.
Feature runs
Check every pull request behind a feature together, across repositories, as one change.
web#213api#482mobile#77One check
Codebase chat
Ask how something works across all your repositories. Every answer points to the files it came from.
“Who listens for order.created?”
charge_order_job.rbreceipt_mailer.py
Fix prompts
Each break comes with a prompt for your coding agent that names the files to change and why.
Claude CodeCursorCodex
MCP server
Ask about your repos or check a pull request from Claude, ChatGPT, Codex or Claude Code.
aftermerge.dev/mcp
Bring your own key
Run checks on the default models, or on your own provider key from settings.
AnthropicAnthropicOpenAIOpenAIOpenAI-compatible
Never changes your code
AfterMerge reads your repositories. The only things it writes are its own comment and check on a pull request.
Credentials encrypted at rest
Data scoped to your organization
Removing a repo deletes its data
GitHub app permissions
Contents
Read your code
Read
Metadata
List repositories
Read
Issues
See review requests in comments
Read
Pull requests
Post the result comment
Read & write
Checks
Add the AfterMerge Review check
Write
From intent to production
Intent drift starts in the pull request, so that’s where AfterMerge works today. Next, the same understanding of your product follows each change past the merge.
Before the mergeLive
Review every change
See which customer journeys a pull request touches across your repositories, and whether they still work, before anyone approves it.
Code reviewScenario reviewBlast radius
After the mergeNext
Follow it into release
Tie each deployment and infrastructure change back to the product behaviour it alters.
DeploymentsInfrastructure
In productionNext
Explain what went wrong
When something fails, trace it to the change and the intent behind it, so the team knows what to do next.
The gap between what a change was meant to do and what it actually does to the product. It grows as agents write more of the code: each pull request looks right on its own, while a customer journey two repositories away quietly stops working.
A code reviewer reads the diff in front of it. AfterMerge follows the diff into the repositories that depend on it and checks the customer journeys it touches, end to end. It catches the bugs that pass review because the code that breaks was never in the diff.
No. It reports through a comment and a GitHub check, and the check completes successfully even when a flow breaks. Whether to merge is up to you.
No. There are no config files to add. Connect the repositories and AfterMerge works out how they call each other.
TypeScript, JavaScript, Python, Ruby, Java and Go, mixed freely across repositories.
GitHub, for pull request comments and checks. Repositories on GitLab and Bitbucket can be connected too, so they’re included when a GitHub pull request is checked.
Yes. Add an Anthropic, OpenAI or OpenAI-compatible key in settings and checks run on it. Without one, AfterMerge uses its default models.
Today AfterMerge covers the pull request: code review, product scenario review and blast radius. We’re building it out across the agentic SDLC, so the same understanding of your product follows a change through deployment, infrastructure and incidents.