Skip to content
NewNow inside Claude, ChatGPT and Codex

Ship at agent speedwithout losing the intent

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.

Reads services written in

  • TypeScript
  • JavaScript
  • Python
  • Ruby
  • Java
  • Go

Repositories

  • webStorefront
  • apiOrders API
  • billing-workerPayments
  • mobileiOS + Android
api#482+38 −21

Rename user_id to account_id on orders

UserID    string `json:"user_id"`AccountID string `json:"account_id"`
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.

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

  1. 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
  2. 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
  3. 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

A customer pays for their order at checkout

FailedConfidence 0.91

Expectation

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.

  1. Initial state

    A signed-in customer with a saved card has one item in their cart.

  2. 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
  3. 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
  4. 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.

  1. 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
  2. After the mergeNext

    Follow it into release

    Tie each deployment and infrastructure change back to the product behaviour it alters.

    DeploymentsInfrastructure
  3. 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.

    ObservabilityIncidents

Frequently asked questions

Still deciding? See a sample run

Keep every change true to its intent