Code Review · Plannotator

6 min read Original article ↗

Code review for
the modern era.

Plannotator opens a local diff viewer for git, jj, and Perforce. You annotate lines, tokens, or whole files, and when you're done the notes feed straight into your agent session — an automated feedback loop. It works on local diffs, commits, branches, worktrees, and GitHub/GitLab PRs. The core tool is manual; the AI layer on top is optional and answers to you. Free, MIT / Apache-2.0, with local review data kept on your machine by default.

git jj Perforce

custom reviews
Bring your own skills. They run in the background and leave findings as inline diff comments.

part one

The manual tool

Review any changeset with nothing between you and the diff. No model in the loop unless you put one there.

annotate → agent

Your annotations become the agent's instructions

Select lines, a single token, or a whole file, and leave a comment, a concern, or a suggested edit. Conventional Comments labels are there if your team reviews that way.

Hit Send Feedback and everything exports as markdown, anchored to exact files and lines, straight into your agent session. The agent reads it like any other instruction and gets to work.

  • Line, token, file, and review-level scopes
  • Suggested-code blocks with the original alongside
  • Drafts auto-save and survive a crashed session

git status view

Review the whole change before it's a PR

The default view pulls together everything you've touched — committed work, uncommitted edits, and untracked files — in one screen. No commit, push, or PR required; you see what a PR would show while the work is still in progress.

It's grouped the way git status groups it: Committed, Changes, Untracked. Every row shows the change type and line counts, and you can stage or unstage files right there while you review.

  • Falls back gracefully when no base branch resolves
  • One-click fetch when the base is behind GitHub

commits panel

Walk the branch, one commit at a time

The Commits panel is a plain history rail of your branch, newest first, with a divider where your work meets the base. Click any commit for its own diff against its parent, with the full commit message on top.

It's git show with annotations. Review a teammate's commit or your own from last Tuesday; the feedback records which commit each note was anchored to.

  • Session-scoped: glancing at history never changes your default view

pull requests

Review PRs without the noise

Point it at a GitHub PR or GitLab MR and it opens in the same viewer: description, checks, and the full discussion in one Overview panel. The comments column filters the noise — hide bots (Dependabot, CI, Copilot) with one toggle, drop resolved and outdated threads, narrow to specific people, or search the thread.

The description and comments are annotatable too. The agent can't see the discussion on its own, so your notes travel with the full comment quoted. Post your review back as inline comments, or hand it to the agent to fix.

  • Hide bots is on by default; resolved and outdated threads collapse away
  • Uses your gh / glab auth, so private repos just work
  • Stacked PRs get a Layer / Full-stack toggle for the whole chain

part two

The AI layer

Same viewer, same annotations, more eyes on the code. Agents flag; you decide what ships.

AI ask ai

Ask the diff a question

Select lines in the diff and ask. The answer streams into a side panel, scoped to what you selected and the changeset on screen, riding whichever agent CLI you already use.

It's reading support, not delegation — you stay in the diff while the model holds the context you'd otherwise go dig for.

  • Providers detected from the CLIs you already have installed
  • Answers stay grouped by file for the session

AI guided review

Let an agent chapter the changeset

A Guided Review has an agent reorganize the changeset into chapters by importance — the heart of the change first, then its consequences, then the glue (inspired by Linear). Each chapter pairs a short overview and per-file summaries with the diffs it covers. On a big diff it reads far better than file order.

The diffs inside a guide are the real diff viewer, not excerpts. You still read every line; the agent just orders them. Anything you annotate there lands in the same review and ships in the same feedback.

  • Per-section reviewed state for multi-sitting reviews
  • Every changed file validated against the real diff

AI agent reviews

Run review agents

Kick off a review agent against the current changeset; the selected AI provider receives the review prompt and relevant repository or diff context. Findings come back as annotations with a severity, reasoning, and a file and line anchor. Nothing is posted back to GitHub or GitLab until you choose to send the review.

The review is yours to define. Point it at one of your own skills — a security checklist, your naming conventions, whatever you've written — and Plannotator links to it locally and runs it as a launchable reviewer, findings landing inline like the built-in one. Runs on Claude or Codex natively, or through Cursor, OpenCode, Pi, and GitHub Copilot CLI when they're on your PATH.

  • Bring your own review skill; its findings land as diff comments
  • Code Tours: a narrated walkthrough with checkpoints
  • Run several engines on the same diff and compare findings

integrations

Agents can talk to it from the outside, too

There's also a local API. Anything outside the viewer — another agent, your CI, a linter, a script — can POST findings, markers, or notes straight onto the diff. They stream in live and land inline, tagged by source, right next to your own annotations.

Other agents background · CI CI & checks status · coverage Linters, scanners ESLint · Semgrep Your scripts post anything POST JSON /api/external-annotations Your live review agent possible race in the retry path semgrep taint: req.params flows to fs.read ci coverage on this file dropped 4% you let's pull this into a helper

part three

Compound engineering

Every annotation you make is saved to ~/.plannotator. Point an agent at that history and the feedback you keep repeating distills into a custom review skill — caught before you see it again.

01

You annotate

Every note is written to ~/.plannotator, review after review — a growing record of what you actually care about.

02

Distill a skill

Point an agent at that history. The feedback you give again and again becomes a custom review skill, in your own words.

03

It reviews for you

The skill runs as a review agent and leaves the note inline, on the diff — so the next agent gets it right the first time.

Two minutes to your first review

Install once and /plannotator-review works from Claude Code, OpenCode, Codex, Pi, Copilot CLI, Droid, and more.