A real code review · not a "here are 12 generic suggestions" summary

Paste a PR link, the Agent clones the repo, checks out the branch, runs your test suite, runs semgrep / clippy / ruff / eslint, and writes a Markdown review citing specific file:line locations. Every comment references actual code, not a pattern guess. Archive every review to Drive so the team builds institutional memory.

A peek at what you get

Verdict + summary
Page 1 of 4·Verdict + summary
Blocker findings
Page 2 of 4·Blocker findings
Test coverage diff
Page 3 of 4·Test coverage diff
Static analysis findings
Page 4 of 4·Static analysis findings

Watch the Agent actually clone, build, and analyze

Every box below is a real shell call from a real run. The review comments at the bottom cite specific file:line locations the Agent saw in your code — not pattern matches on the diff.

Review github.com/acme/api-server/pull/1284 — full review please.

V

On it. I'll clone the repo, run your existing test suite, then run semgrep + the project's eslint config.

run_shellgit clone --depth 50 github.com/acme/api-server && git fetch origin pull/1284/head:pr-1284 && git checkout pr-1284
run_shellpnpm install --frozen-lockfile · cache hit
run_shellpnpm test · 412/412 pass · BUT one changed fn has 0% coverage
run_shellsemgrep --config p/owasp-top-ten --config p/typescript · 2 high · 1 medium
run_shellpnpm lint · 4 new in changed code · 8 legacy suppressed
PR-1284-review-2026-05-12.md
18 findings · with suggested fixes

One sample finding · cited to file:line

The Agent quotes the relevant 3–5 lines, explains why it matters in this codebase's context, and proposes a concrete fix as a unified diff.

blocker · securitysrc/routes/exports.ts:142

The changed endpoint forwards `workspace_id` from the request body to the downstream service without checking ownership. Any authenticated user can pass someone else's `workspace_id` and exfiltrate their data — classic IDOR.

140router.post('/exports', authMiddleware, async (req, res) => {
141 const { workspace_id, format } = req.body;
142 // ⚠ no ownership check before calling downstream
143 const data = await exportService.fetch(workspace_id, format);
144 res.json(data);
145});
Suggested fix · unified diff
 router.post('/exports', authMiddleware, async (req, res) => {
  const { workspace_id, format } = req.body;
- // ⚠ no ownership check before calling downstream
+ if (!(await canAccessWorkspace(req.user.id, workspace_id))) {
+ return res.status(403).json({ error: 'forbidden' });
+ }
  const data = await exportService.fetch(workspace_id, format);
  res.json(data);
 });

The other 5 `/exports*` endpoints in this repo already gate on `canAccessWorkspace`; the new one omits it.

How it works

Step 01

Paste a PR URL or diff

Public GitHub / GitLab / Bitbucket repo URLs clone directly — paste the PR URL or a clone URL. For private repos, the simplest path today is to paste a unified `.patch` / `.diff` and the Agent reviews the diff without needing the whole repo. Full OAuth-based private-repo access is on the roadmap; for now, paste the diff.

Step 02

Pick the depth

Full review for routine PRs, security-only for changes touching auth / data, pre-merge checklist for ship-now PRs. Each path runs a different combination of tools — full review takes a few minutes, security-only is faster, pre-merge checklist is the fastest.

Step 03

Pick up the Markdown review

The review lands as Markdown in /code-reviews/{repo}/PR-{number}.md in Drive plus a PDF copy. Each comment cites file:line so the author can jump straight to it. After the team merges, the review stays in Drive — the next person who has to understand why something was done a particular way can read it.

Why Vecbase for this

It actually clones and builds — not pattern matching on the diff

Most AI code review tools regex over the diff and pattern-match generic suggestions. The Agent clones the repo, runs your build, runs your tests, runs your linters — same as a human reviewer would. When it says "this function changes the contract of caller X at /src/foo.ts:142", it knows because it grep'd the codebase, not because the diff happened to mention a name.

Runs the project's own static analyzers · not a different set

If your repo has .eslintrc, ruff.toml, clippy.toml, semgrep.yml — the Agent uses those configs. The findings agree with what the team already cares about, not a third-party tool's opinion. New violations in changed code rise above the noise of pre-existing ones; legacy noise is suppressed unless the PR makes it worse.

Cites file:line · review reads like a senior engineer's comment

Every comment in the review names a specific file:line, quotes the relevant 3–5 lines, explains what's wrong in this codebase's context, and suggests a concrete fix. PR authors can click straight to the location — no "the model said something is off somewhere in your changes". Reviews read like a senior engineer who has context, not a list of generic platitudes.

Reviews archive to Drive · the team grows institutional memory

After a PR merges, the review stays in /code-reviews/{repo}/. Six months later when someone asks "why is the rate limiter on this specific endpoint?", you grep the archive — "PR-1284, May 12: added because of incident IR-42". Onboarding new engineers becomes "read the last 30 code reviews in the auth folder". The chat conversation that led to each review is preserved too.

Frequently asked

Strong: Python (ruff / mypy / pylint), TypeScript / JavaScript (eslint / tsc), Rust (clippy), Go (golangci-lint), Java (spotbugs / errorprone), Ruby (rubocop). For each, the sandbox has the canonical linter pre-installed and the Agent reads your project's config to align with house style. Less common languages (Zig, Elixir, OCaml, Erlang) work too but with fewer built-in static analyzers — the Agent leans more on test-suite outcomes and direct code reading in those cases.

Get yours in under 90 seconds

Sign in, hand it over to the Agent — the finished file lands in your Drive.