Skip to main content

tony

Your AI wrote the code. tony explains what now exists.

tony is a CLI that turns a git diff into a review page for the person who now owns the code — often someone who didn't type a line of it. Not a linter, not a code-review gate: it builds your mental model of the change, fast.

Every review page has three tabs:

  1. File changes — the diff per file, with plain-language annotations sitting inline above the lines they explain. Modified code gets Prev / New / Changes panes; line numbers are computed from the diff, never trusted to the model.
  2. Blast radius — files the change reaches that are not in the diff, each consumer classified breaks / behavior-change / compatible, shown at the affected lines.
  3. How it works — steppable runtime walkthroughs. One concrete scenario ("you run export --resume after a crash") traced step by step, showing the real source lines read from your disk, a small state table, and one plain sentence per step.

Install

curl -fsSL https://tony-cli.com/install.sh | sh

or, if you already use uv or pipx:

uv tool install tony-cli     # or: pipx install tony-cli

Either way you get a tony command on your PATH.

Use

cd your-repo
tony main...my-branch        # review a branch against main
tony                         # review the default branch...HEAD

Reviews stay on your machine. The page is written to .tony/ inside the repo (gitignored automatically) and opens in your browser — one self-contained HTML file, fonts and styles and data inlined, so it works offline and forever. Nothing is uploaded; the only thing that leaves your machine is the diff tony sends to Anthropic to write the review.

tony needs an Anthropic API key (ANTHROPIC_API_KEY, or ~/.tony/.env). The first run tells you exactly where to get one and where to put it. tony reviews committed work: it shows code straight from disk, so the working tree must match the revision under review.

Every command and flag is listed under Commands.

Commands

tony --help prints this list. Everything below works from anywhere inside a git repo unless noted.

Reviewing

tony                          # default branch...HEAD, in the current repo
tony main...my-branch         # an explicit range
tony my-branch                # shorthand for my-branch...HEAD
tony ../other-repo main...x   # any path inside another repo

The range is git's own BASE...HEAD syntax. With no range, tony diffs against origin/HEAD — what the remote calls its default branch — falling back to main, then master.

Flag What it does
--json Print the raw review JSON to stdout and exit. Writes no page instead.
--no-open Write the page but don't open a browser. For CI, or over SSH.
--stale Review a revision that isn't checked out, or with a dirty tree. Code is read from disk, so line numbers may not match the diff — tony refuses by default for that reason.
--replay Rebuild the page from the last saved review for this range, without calling the API. Free; use it after a tony upgrade to re-render an old review.
-v, --verbose Log every tool call to stderr, so you can see which files the review actually read before it drew conclusions.
-m, --model Model to review with. Defaults to claude-opus-5.
--max-tokens Response ceiling, default 64000. Raise it if a review comes back cut off.

Managing tony

Command What it does
tony update Upgrade to the latest release, using whichever of uv, pipx or pip installed tony. Checks PyPI first and tells you if you're already current.
tony uninstall Delete tony and everything it wrote — see Uninstall.
tony --version The installed version.
tony --help Every command and flag.

tony uninstall takes --yes (-y) to skip the confirmation and --no-scan to limit it to the current repo instead of searching your home directory.

Both tony update and the installer resolve from PyPI explicitly, so a machine pointed at an internal mirror can't decide what tony-cli is.

Uninstall

tony uninstall

Removing the package by itself would leave the parts worth removing: your ANTHROPIC_API_KEY in ~/.tony, and a .tony/ directory of past reviews inside every repository you ran tony in — those hold source code. tony uninstall lists everything it found, waits for you to type yes, deletes it, then removes the package with whichever of uv, pipx, or pip installed it.

It searches your home directory for stray review directories; --no-scan limits it to the current repository, and --yes skips the prompt.

Development

pip install -e ".[dev]"      # the CLI, with pytest
python -m pytest             # the deterministic layer's tests
cd web && npm install
npm run build:viewer         # rebuild the renderer bundle the CLI embeds
npm run dev                  # the site; /dev renders src/fixtures/review.json

Two flags exist only for this loop, and only work from a source checkout:

Flag What it does
--viewer Write the payload straight into the local Astro viewer and reload it there, so you can iterate on the renderer against a real review.
--payload [PATH] Write the upload payload — windowed source, no absolute paths — next to the page, or to PATH.

There is exactly one renderer — web/src/renderer/render.ts — used by both the local page and the hosted site. The Python side decides all layout facts (line numbers, spans, added/changed tags) in src/tony_cli/layout.py and ships them in the payload; the renderer never re-derives them. DESIGN.md is the visual contract.

The site deploys to Vercel and needs DATABASE_URL (Neon Postgres), BLOB_READ_WRITE_TOKEN (Vercel Blob), and GITHUB_CLIENT_ID (an OAuth app with device flow enabled).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tony_cli-0.4.0.tar.gz (282.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tony_cli-0.4.0-py3-none-any.whl (280.6 kB view details)

Uploaded Python 3

File details

Details for the file tony_cli-0.4.0.tar.gz.

File metadata

  • Download URL: tony_cli-0.4.0.tar.gz
  • Upload date:
  • Size: 282.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tony_cli-0.4.0.tar.gz
Algorithm Hash digest
SHA256 6d106f62969b54fedf0fcb96127a3236f790641d2a8b9d43c4150824e2be1fdf
MD5 fc75c923acba170828696b6acd615412
BLAKE2b-256 5eb78cb1b5249b94ce7431ad322da850a1a53dbd4e08844cc6406aec5a6d7b68

See more details on using hashes here.

Provenance

The following attestation bundles were made for tony_cli-0.4.0.tar.gz:

Publisher: release.yml on fawwaz46/tony

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tony_cli-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: tony_cli-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 280.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tony_cli-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0a1969dd92bfdc846b8a9b77768dfdd181c1eeccc85513cfbda178209706bab8
MD5 2ea2d5191b1873ea59008d53f082c778
BLAKE2b-256 aa59e01dea51981983c6890e192a38c3acc9a90190f1d6f0021572e5a8ae0100

See more details on using hashes here.

Provenance

The following attestation bundles were made for tony_cli-0.4.0-py3-none-any.whl:

Publisher: release.yml on fawwaz46/tony

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.0

2 files

0.4.2

2 files

0.4.1

2 files

This release

0.4.0 This release

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page