Skip to content

FAQ ​

Does any of my code leave my machine? ​

No. Diffo is one process on your machine, bound to loopback, with its state under ~/.diffo: a single SQLite file at ~/.diffo/diffo.db, a log per repo, and a checkout per pull request you review. No account, no model API: it holds no keys because it calls no models. Two things do leave, neither carrying code:

  • Anonymous usage data: two small events per review (opened, finished) with the version, OS, kind of review, which agent, and counts. Never code, paths, repository names, or comment text. Announced in the review page before the first one is sent, and off with diffo telemetry off or DO_NOT_TRACK=1. Usage data lists every field.
  • A pull-request review's traffic, only to that PR's GitHub host, only through your own gh, and Diffo still holds no token.

To remove everything, run diffo clean --all before deleting ~/.diffo, so the branches and refs a pull-request checkout adds to your clone go with it.

Is this an AI code reviewer? ​

No, and deliberately not. Diffo doesn't grade your diff or leave generated nitpicks. It's a reading tool for the human, on the bet that your judgement is the scarce resource and the machine's is not.

The diff is in alphabetical order. Can it show me the right order to read it in? ​

Yes, if the agent posts one. Ask for layers from the Layers tab and the agent that wrote the change outlines it as ordered steps, each with a title, a summary, and its files; you read one layer at a time. Layers come from the agent only: Diffo never guesses a plan from paths, and with none posted the review is the flat file list. Details in Layers; the agent's side is in the agent protocol.

Why not just use a pull request? ​

You still can, and probably should. A pull request is how you hand finished work to someone else, with the queue, the notification, and the record that implies. Diffo is what happens before that: the loop where you and the agent that wrote the code turn a first draft into something worth handing over. Nothing needs to be committed, pushed, or opened first, and the PR is still there to open when you're done.

Can I review a pull request with it? ​

Yes: diffo <PR URL> (or /diffo <PR URL> from your agent). The PR is fetched into a worktree Diffo owns, so your checkout is untouched; its description, reviews and comments come in as threads; your agent is a copilot for code it did not write; and your public comments post to GitHub as one review when you finish. It needs the GitHub CLI signed in. The whole flow is in Reviewing a pull request.

Does the agent post to GitHub? ​

Never. On a pull request the agent reads, runs the tests in the worktree, and answers you in private threads; when the answer is a fix, it comes as a ```suggestion block in its reply. The only thing that reaches GitHub is the review you submit yourself, through your own gh.

Why Node 24? ​

The server keeps its state in the runtime's built-in node:sqlite, which lands in 24. That buys you no native module to compile, no better-sqlite3 install step, and no database to run. It's the reason npx -y @diffohq/diffo can be the entire setup.

Does it work with agents other than Claude Code? ​

Yes. The interface is a CLI and a generated Agent Skill, not an integration with any one vendor. diffo setup knows about Claude Code, Cursor, VS Code and Copilot CLI, and writes a shared copy into the ~/.agents/skills directory that Codex, Gemini CLI, Amp, Goose and OpenCode read. Any agent that can run a shell command can drive the loop: diffo poll, diffo reply, diffo comment, diffo layers, diffo end. That's the whole protocol.

I closed my terminal. Is the review gone? ​

No. diffo leaves a background server by default, precisely so the review outlives the terminal (or the agent session) that opened it. It self-stops after 30 minutes with nothing using it. Want it tied to your terminal instead? --foreground.

I sent a comment but no agent was attached. Did I lose it? ​

No. It queues, and the presence indicator says waiting so you know at the time. The next diffo poll, from any session, picks it up. The same holds if a poll dies mid-delivery: feedback lives in the review, not in the poll, and delivery is at-least-once.

Can two agent sessions attach at once? ​

One session owns a review at a time, and the newest poll wins. The new one is told it took over (and told to mention that to you); the displaced one is told to stand down. Nothing queued is lost in the handover. Details in agents.md.

I switched branches while it was running. What happened to my comments? ​

They stayed with their branch. Reviews are scoped per repo and branch, so a checkout under a running server swaps to that branch's review rather than dropping yesterday's comments onto today's hunks. Switch back and they're where you left them.

Can I run it on several repos at once? ​

Yes: one server per repo, each on its own port, all coordinating through the same SQLite file. Run diffo in a second repo and you get a second review. Running it twice in the same repo just points you at the existing one.

Why did my "viewed" mark disappear? ​

Because that code changed after you read it. Read marks are keyed to a content-addressed hunk id, so editing a hunk mints a new id, the mark comes off, and the hunk says changed since you read it. That's the feature: you can't accidentally sign off on code you never saw.

Does it need a clean working tree, or a commit? ​

Neither. Uncommitted work is the default case, and untracked files are included: new agent output shows up as an addition rather than not at all.

How do I get rid of it? ​

rm -rf ~/.diffo removes all state. If you linked a clone, pnpm unlink --global. Any running server stops itself once it's idle, or curl -X POST localhost:<port>/api/shutdown if you're impatient.

Something's wrong. Where are the logs? ​

A background server logs to ~/.diffo/logs/<repo>-<hash>.log, or wherever DIFFO_SERVER_LOG points. Or run diffo --foreground and watch it directly.

Can I fork it and ship my own? ​

Yes, Apache-2.0. Ship it under your own name, though: the trademark policy covers the Diffo name and logo, not the code.

Released under the Apache-2.0 License.