ML.ai

Code review that reads past the diff

Run /review on a branch or PR. ML.ai reads the change and the code around it, checks what it finds, and puts Blocking issues first.

Who uses ML.ai to review code

Developers who want a careful first pass before a person spends time on the change.

  • Authors before a PR

    A check of your own branch for what you stopped seeing.

  • Reviewers with a queue

    Start with what blocks the merge.

  • Small teams

    A review on every change, including the late-night ones.

The risky line is rarely in the diff

A diff shows what changed, not what it depends on.

A chat window sees one pasted hunk

It cannot tell that the signed-in user comes from a helper in a file nobody pasted.

It reads the repo, not only the diff

ML.ai ran git diff against the base branch, then read every source file. That is how it caught a query-string userId the session helper should supply.

Blocking issues come first

Each finding has a file, a line, the code, why it matters, and a suggested fix.

It runs code to check, and admits gaps

It ran an import to prove two modules were missing. It also said what it could not assess.

Reviewing by hand versus handing it off

By hand

You skim the diff, open the files that look risky, and approve before reaching the one that matters.

With ML.ai

You run one command. ML.ai reads the change in context and lists Blocking issues first.

Which agent actually does this

Build · Read · Run git · Report

Runs the review in your session

Reads the diff and the repo, runs git and code to check findings, and hands parts of the work to subagents.

explore · Read · Search · Write

Optional: questions about the change

Read-only. Ask where a changed function is called and get exact file paths.

From /review to findings

A diff shows what changed. ML.ai also reads what the change depends on.

1Run /reviewThe menu reads: review changes [commit|branch|pr], defaults to uncommitted. Add a branch, commit or PR.
2It reads the diff, then the repogit status and a diff against the base branch, then every source file and any AGENTS.md.
3It checks what it findsIt runs code to confirm, such as an import that fails with ERR_MODULE_NOT_FOUND.
4You read the findingsBlocking first, each with file, line and a fix. Your repo is unchanged.

Where reviews miss things

Three common failures, and what ML.ai did about each in a real run.

The module nobody committed

The diff reads fine, but two imported files were never committed. It breaks on load.

How ML.ai handles it

ML.ai ran the import, quoted the ERR_MODULE_NOT_FOUND for date.js, and noted db.js would fail the same way.

Comments with no order

Twelve comments of equal weight, and the important one is number nine.

How ML.ai handles it

Findings are split into Blocking and Non-blocking.

A fix that ignores your codebase

A generic fix invents a helper the repo does not have.

How ML.ai handles it

The auth finding pointed at the existing getSession and noted it throws without a header, so the route needs a try/catch returning 401.

Where this stops

What to expect, so nothing surprises you.

01
01

It names what it could not check

In the run, it could not tell what db.contacts.find returns. Check gaps like that yourself.

02
02

Fixes are a separate step

The review changed no files. A fix waits for Allow, Always or Deny.

03
03

Ask before you fix

Use @explore, which is read-only, to see where a function is called before asking for a fix.

Root cause in session.ts

The store returns null before the session write finishes, so the middleware rejects a valid token.

session.ts+2 −1
40export async function getSession(id) {
41- const s = store.get(id)
41+ const s = await store.get(id)
42+ if (!s) throw new SessionNotFound(id)
AllowAlwaysDeny

Debug

Give ML.ai a failing test or a stack trace. It finds the actual cause and proposes a fix you approve.

Apply edits to 4 files?

The definition and every caller, in one diff.

route.tsuserService.tsuseUser.ts+1 −1
20export async function GET(_, ctx) {
21- const user = await getUserById(ctx.id)
21+ const user = await findUserById(ctx.id)
22 return Response.json(user)
AllowAlwaysDeny

Refactoring

ML.ai finds every reference before it edits the definition, then lands the rename and each caller in one diff.

FAQs

What can /review look at?

Uncommitted changes, a commit, a branch, or a PR. It defaults to uncommitted.

Does it edit my code?

No. In the run, the repo was unchanged afterwards. A fix is a separate edit you approve.

Does it read more than the diff?

Yes. It read every source file and looked for conventions files such as AGENTS.md.

Does it replace a human reviewer?

No. It is a first pass with Blocking issues first. A person still decides on the merge.

Try ML.ai today, or talk to us about what is next

Install the editor agent on your own machine, or book a call to talk through your team’s workloads