Where your team reviews AI-generated code

    Agents write faster than you can review

    Hervé is the review surface designed for the agentic era. The prompts, the code, and the process that generated it, in one unified page.

    Start your free trial

    14 days free · no credit card · one minute to set up

    Devs who take code review seriously use Hervé

    • ETH Zürich logo
    • Enobase logo
    • EMAsphere logo
    • LIZY logo
    • Suivo logo
    250
    pull requests reviewed with Hervé
    322h
    of review time saved

    The review surface

    What you see when you open a PR

    01 · change map

    See what changed before you read a line.

    Every file in the pull request, sized by how much it changed and coloured by the kind of risk it carries.

    02 · criticality

    Fourteen files changed. Only three are risky.

    Start with those three. The rest you can skim, or skip — your review time goes where it counts.

    03 · navigate in place

    An IDE feel, without leaving the PR.

    Click a symbol to see where it is defined and where it is used, across the files this PR changes. Press / to search symbols. No checking out the branch, no jumping between GitHub, your editor and Claude Code to answer one question.

    04 · the session behind the PR

    The prompts, the skills, the dead ends.

    Set up Hervé to capture your AI sessions, and every PR arrives with the one that wrote it: what was asked, what the agent tried and dropped, every skill it used.

    05 · anti-drift

    Nobody asked for this.

    When a change contradicts your instructions, or nothing you asked for explains why it is there, Hervé says so — and names the ticket and the prompts it checked against.

    06 · ask on the line

    Ask why a line was changed.

    Tag @herve-review in the thread you are already in. It reads the linked issue and the session that wrote the code, and quotes what it found.

    07 · across the repo

    See how your team is prompting.

    Hervé captures your sessions on commit, so you can see which skills get used, which files consume the tokens, and where the team is putting its prompting effort.

    app.herve.review/github/gondor/beacons/pull/482
    The session behind this pull request41 turns · 88k tokens
    linked issue · #311
    Beacons drop on 5xx. Add retry with backoff. Don't touch the dispatcher, it's shared with rohan.
    ticket loaded
    #311 · Beacons drop on 5xx
    skill
    /grill-me
    plan · superseded
    Move the backoff into the dispatcher so rohan gets it too
    final plan
    Retry wrapper around send(), exponential, capped at 30s
    skill
    /implement
    implementation
    edited 6 files, +451 −119
    execution
    pytest · 3 failed, then passed
    skill
    /code-review
    3 skills invoked · 41 turns · 88k tokens
    Change map14 files · 2,047 lines
    Files
    14
    changed
    Lines
    2,047
    added and removed
    Critical + high
    3
    where your review hour goes
    14 files · 2,047 lines · click any file to open it
    Codesrc/beacons/sender.py
    click any symbol for its definition or callers · / to search symbols
    Codesrc/queue/dispatch.py
    linked issue · #311
    Beacons drop on 5xx. Add retry with backoff. Don't touch the dispatcher, it's shared with rohan.
    75class Dispatcher:
    76 """Shared with rohan. Do not change lightly."""
    77 def enqueue(self, job):
    77 def enqueue(self, job, *, priority=0):
    78 self._q.put((priority, job))
    Hherve-reviewboton dispatch.py:77
    This contradicts the planThe request says don't touch the dispatcher, it's shared with rohan. This changes its signature.
    1 flag on this pull request · posted on the line it concerns
    Conversationsrc/queue/dispatch.py
    77 def enqueue(self, job):
    77 def enqueue(self, job, *, priority=0):
    PTPippinTookon dispatch.py:77
    @herve-review why does this take a priority argument now? Nothing in the issue asks for priorities.
    Hherve-reviewbotreplied in 12s
    It came from a plan the session dropped. At turn 22 it proposed move the backoff into the dispatcher so rohan gets it too, added the argument, then went back to wrapping send() and never removed it. Issue #311 asks only for retry with backoff and never mentions priority.
    answered in 12s · from issue #311 and the session that wrote the code
    Insightsgondor/beacons · last 30 days
    Commands & skills
    invocations, and distinct checkpoints that used it
    /tdd34 ×12
    /code-review21 ×9
    /pr-prep18 ×8
    /implement9 ×4
    /diagnosing-bugs2 ×2
    Where the tokens go
    per file, not per API key
    beacons/sender.py412k
    client/generated/api.ts288k
    queue/dispatch.py143k
    tests/test_retry.py96k
    api/beacons.py31k
    gondor/beacons · updated as your team's sessions are captured

    Know what this PR touches in one second.

    One surface to rule them all

    Everything you just scrolled, on one screen — everything you need to judge an AI-generated PR.
    You still read the code, you’re still in the driving seat.

    change map · criticality
    Fourteen files changed. Only three are risky.
    The change map sizes every file by how much it changed and colours it by the kind of risk it carries.
    _backoff(attempt)
    src/util/timing.py:12
    def _backoff(attempt: int):
      sleep(min(2 ** attempt, 30))
    navigate in place
    An IDE feel, without leaving the PR.
    Click a symbol and the definition opens where you are. Press / to search the symbols this PR touches.
    PROMPT
    “add retry with backoff”
    SKILL  /implement
    PLAN · SUPERSEDED
    Backoff inside the dispatcher
    the session behind the PR
    The prompts, the skills, the dead ends.
    What was asked, what was considered and dropped, which skills were used — on every PR whose session your team captured.
    − def enqueue(self, job):
    + def enqueue(self, job, *, priority=0):
    This contradicts the plan
    The request says “don’t touch the dispatcher”.
    anti-drift
    Nobody asked for this.
    Hervé flags what you never asked for, and what contradicts what you did — naming the ticket and the prompts it checked against.
    @herve-review why a priority arg?
    From a plan the session dropped at turn 22. Issue #311 never mentions priority.
    ask on the line
    Ask why a line was changed.
    Tag Hervé in the thread you are already in. Every claim in the answer quotes its source.
    /tdd
    /code-review
    sender.py  412k
    across the repo
    See how your team is prompting.
    Which skills actually get used, and which files consume the tokens, repo by repo.

    Integrates with your stack

    • GitHub logo
    • GitLab logo
    • Claude Code logo
    • OpenCode logo
    • GitHub Copilot CLI logo
    • OpenAI Codex logo
    • Cursor logo
    Get started

    Up in one minute

    Once installed, work as you normally would. Hervé hooks into git, captures the agent session, and ships it with your next PR. Your code and prompts stay safe on your repo.

    Where your code and prompts live →

    macOS / Linux
    $ curl -fsSL https://app.herve.review/install.sh | bash
    my_repo $ rv install
    Windows
    $ scoop bucket add herve https://github.com/ffelten/scoop-bucket.git
    $ scoop install herve/rv
    my_repo> rv.exe install

    Requires Git for Windows and Scoop.

    FAQ

    Common questions

    No. Your code stays on your git, hosted on GitHub or GitLab. Hervé reads from there and never copies or stores it on our servers. A breach of our database would leak zero lines of your code.

    Still have questions? Drop us a line at hello@herve.review.

    See the thinking behind your next PR.

    Start your free trial

    14 days free · no credit card · one minute to set up