Skip to content
Diffsplain
Esc
navigateopen⌘Jpreview
On this page

CLI usage

Select a review target and control the local Diffsplain page.

Current checkout

With no target, Diffsplain shows staged, unstaged, and untracked changes against HEAD, the same as --worktree. Already committed changes are excluded.

npx diffsplain

Pull requests

Use a pull request number in the current repo:

npx diffsplain --pr 198

Pass the repo when you run the command elsewhere:

npx diffsplain owner/repo --pr 198
npx diffsplain --repo https://github.com/owner/repo --pr 198

owner/repo is fetched over HTTPS. Diffsplain adds the signed-in GitHub CLI as a Git credential helper for https://github.com remotes only; existing helpers stay in place. gh auth login is enough. You do not need a separate Git HTTPS password.

A full pull request URL carries the repo:

npx diffsplain --pr https://github.com/owner/repo/pull/198

Branches

Compare a branch with the remote default branch:

npx diffsplain --branch feature/my-change
npx diffsplain owner/repo --branch feature/my-change

Choose a different base or remote when needed:

npx diffsplain \
  --repo /path/to/repo \
  --branch feature/my-change \
  --base next \
  --remote upstream

Worktree changes

Use --worktree explicitly to select the default review of tracked and untracked changes against HEAD:

npx diffsplain --worktree

The watcher refreshes the page as the worktree changes. It keeps notes for files whose patches did not change and asks the agent only about new or changed files.

Base through the working tree

Pass --base without --head to compare that exact commit with the current working tree. This includes later commits, staged changes, unstaged changes, and untracked files:

npx diffsplain --base release-1

The page shows the short base ref followed by working tree. If the ref moves, the watcher refreshes the review against its new commit.

Exact local ranges

Pass two refs that exist in the chosen repo:

npx diffsplain \
  --repo /path/to/repo \
  --base BASE_REF \
  --head HEAD_REF

Choose a default agent

Save one default coding agent for future reviews:

npx diffsplain config agent codex

Show or remove it later:

npx diffsplain config agent
npx diffsplain config agent --unset

Selection order is --no-agent, an explicit --agent, then the configured default. The two per-run options cannot be combined. When none is present, Diffsplain keeps the interactive picker. The configured default also works in scripts and other non-interactive runs.

Diffsplain validates a configured agent just like an explicit choice. A damaged preference, unsupported name, or unavailable agent stops the run; it does not fall through to discovery or the picker. Use --agent NAME for a one-run override or --no-agent for a plain review without reading the saved preference.

Agent checkout access

For the current checkout, --worktree, and --base REF without --head, a selected agent uses checkout-read-only access. Its working folder is the chosen repo, so it can inspect ignored files, Git history, and symlink targets when the note needs them. Diffsplain tells it not to edit files or run mutating commands. Diffsplain itself does not edit the review target. Agents run under your user permissions, and approval stays with you.

Pull requests, remote branches, and exact local ranges use snapshot-only access because their target may not match the live checkout. The agent gets the temporary review input and must use only that input; it must not run commands or read other files.

Pass --no-checkout-access to use snapshot-only access for any target. This option limits both agent notes and Review chat. It does not change the diff.

Exclude files from agent context

Pass --exclude PATTERN to keep matching files out of automatic agent input. You can repeat it:

npx diffsplain \
  --exclude 'private/**' \
  --exclude '!private/keep.txt'

Rules use gitignore-style rules in the order you pass them. A later rule wins. A rule that starts with ! puts a path back in. Diffsplain matches the current path of a renamed file, not its old path.

The local page and snapshot keep every changed file and its full patch. A matching file gets agentExcluded: true. Its path, metadata, patch, snippet, and old note stay out of automatic agent input. Diffsplain hides its cached note while the file is excluded. It can reuse that note when the file returns only if its patch still matches. If the patch changes while excluded, Diffsplain drops that cached note. --force does not override an exclusion.

When all files are excluded, Diffsplain makes no agent request. The local page still shows the diff and reports zero agent notes. Removing or changing rules can show a matching cached note again when its patch has not changed.

This is prepared-context control, not a privacy boundary. It does not change checkout access. A checkout-access agent can inspect files in the repo, so do not use --exclude to hide secrets from an agent.

Check your setup

Run the doctor command to see the separate local review, agent note, and pull request lookup capabilities:

npx diffsplain doctor

The report lists every supported agent, even when it is not installed. It keeps installation, compatibility, authentication, and smoke-test results separate. Missing agents do not stop a plain local review with --no-agent.

Use JSON for setup checks in scripts or cloud jobs:

npx diffsplain doctor --json

The normal check does not send prompts to a provider. --deep runs local --help checks for installed providers after a warning; it does not send a provider prompt.

Saved note cache

Inspect the default note cache, or remove inactive notes:

npx diffsplain cache
npx diffsplain cache status
npx diffsplain cache prune --age 30
npx diffsplain cache prune --size 104857600
npx diffsplain cache clear --yes

cache and cache status show the cache location, byte count, oldest entry, and active targets. prune --age DAYS removes notes older than that many days. prune --size BYTES removes the oldest notes first until the cache fits the limit or only active notes remain. Pass one limit at a time; both accept non-negative numbers. clear requires --yes. All cleanup keeps notes under an active lease.

These commands manage the default user note cache. They do not remove fetched Git objects or custom --summaries files outside that cache. --cache-dir chooses the bare Git cache for reviews, not the note cache. See Agent notes for storage details.

First run and shutdown

Run the setup check through npx, which installs the package if needed:

npx diffsplain doctor

You can instead run npm install -g diffsplain and then diffsplain doctor. Use --no-agent for a plain local review when no coding agent is ready.

A normal review prints a local URL and tries to open it in your browser. If the browser cannot open, open that URL yourself. The command keeps watching until you press Ctrl+C. It then stops the watcher, local server, and any active note process. Normal shutdown removes temporary page and agent input files. Saved notes remain in the user cache. Fetched Git objects remain in the installed package’s .cache/git folder. See Agent notes and Diff data for paths and cleanup.

Run from source

The diffsplain package script accepts every public command and option:

pnpm run diffsplain -- --worktree
pnpm run diffsplain -- doctor

The doctor command also has a short package script:

pnpm run doctor

Options

Argument Use
doctor [--json] [--deep] Check local review, agent note, and pull request capabilities.
cache [status|prune --age DAYS|prune --size BYTES|clear --yes] Inspect or remove inactive saved notes.
config agent [NAME|--unset] Show, set, or unset the default coding agent.
REPO, --repo PATH|URL|OWNER/REPO Select a local path, Git URL, or GitHub repo.
--pr NUMBER|URL Review a GitHub pull request.
--branch NAME Compare a remote branch with its default branch.
--worktree Review tracked and untracked changes against HEAD.
--base REF Compare that exact commit with the live working tree.
--base REF --head REF Review an exact local range.
--agent NAME Use codex, claude, copilot, cursor, or opencode.
--no-agent Show the diff without agent notes.
--no-checkout-access Limit agent notes and Review chat to the supplied snapshot.
--exclude PATTERN Keep matching files out of automatic agent input. Repeat in gitignore order.
--model NAME Choose the model used for notes.
--reasoning LEVEL Set minimal, low, medium, high, or xhigh.
--fast Enable provider Fast mode for agent notes and Review chat.
--batch-size COUNT Set the most files per agent pass, from 1 to 50. Large patches use smaller batches.
--jobs COUNT Set agent passes to run at once, from 1 to 8.
--force Regenerate all agent notes instead of using cached notes.
--support-record Print a safe JSON record if the review fails.
--support-record-file FILE Write one safe JSON record if the review fails.
--remote NAME|URL Choose the Git remote. The default is origin.
--summaries FILE Choose the saved agent-note file.
--output FILE Choose the live snapshot file.
--cache-dir PATH Choose the bare Git cache folder.
--codex-bin PATH Choose the Codex executable.
--port NUMBER Choose an exact local port. The default starts at 2299.
--host ADDRESS Choose the page bind address. The default is localhost.
--no-browser Do not open the page in a browser.
-h, --help Show command help.
-v, --version Show the installed version.

Remote repos need --branch or --pr. --pr cannot use --branch, --base, or --head. --branch can use --base, but not --head. --head requires --base. Without --head, local --base compares that exact commit with the live working tree; a branch can also use --base as its remote base. --worktree cannot use another target. --no-agent cannot use --summaries or --fast. Paths passed to --repo, --summaries, --output, --cache-dir, and --codex-bin resolve from the current directory. CODEX_BIN, CLAUDE_BIN, COPILOT_BIN, CURSOR_BIN, and OPENCODE_BIN can select provider binaries. Supported agents accept --model. Only Codex and OpenCode accept --reasoning; its levels are minimal, low, medium, high, and xhigh.

--fast is opt-in and supports Codex CLI 0.108.0 or newer and Claude Code 2.1.36 or newer. Diffsplain checks the selected executable before the first agent call and stops for an older or unsupported provider. It passes the provider’s native Fast setting to every note and Review chat call without changing the selected model or a global provider setting. Account, model, and entitlement errors come from the provider.

--batch-size defaults to 12 and accepts 1 through 50. --jobs defaults to 3 and accepts 1 through 8. --port accepts 0 through 65535. When you omit it, Diffsplain starts at 2299 and increments until it finds a free port. An explicit occupied port stops the command; --port 0 asks the OS for a free port.

When you omit --agent and have no configured default in an interactive terminal, Diffsplain lists the usable choices in this order: Codex, Claude, Copilot, Cursor, then OpenCode. Choose one before the review starts. In a script or other non-interactive run, configure a default, pass --agent NAME, or use --no-agent. Cursor Agent needs version 2026.08.11 or newer. Note batches run in Ask mode with the user’s Cursor login and home. Diffsplain passes --trust and --workspace for its snapshot directory. Cursor still contacts its own service. --agent cursor reports an upgrade or flag error before note generation when the CLI is too old or missing required flags. Once Diffsplain chooses an agent, a failed check or run ends the command; Diffsplain does not switch agents.

For checkout-read-only access, agents run with the chosen repo as their working folder and their normal user settings. Diffsplain keeps approval with you. Copilot and OpenCode do not have a proven native read-only mode, so Diffsplain warns before either uses checkout access. See Agent notes for the provider details.

The two support record options are opt-in and cannot be combined. They include the selected agent, so you cannot use them with --no-agent. See Agent notes for the data contract.

Was this page helpful?