Skip to main content

tony

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

tony 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.

tony does not call a model. It runs inside the coding agent you already pay for: you ask the agent to review a branch, it calls tony over MCP, tony hands it the diff and the standard the review has to meet, checks the answer against the diff, and publishes the page.

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.

Set up

Two commands, once per machine:

tony connect                 # register tony with Claude Code, Codex, Cursor, Amp
tony login                   # sign in, so reviews have somewhere to publish

Then restart your agent and ask it, in words:

review this branch with tony

The agent calls tony_start, reads the diff and whatever files it needs, writes the review, and calls tony_publish. What comes back is a URL. Reviews are published to your account; the page is the deliverable, so the agent hands you the link rather than pasting the review into the chat.

tony reviews committed work: the page shows code straight from disk, so the working tree has to match the revision under review.

Commands

tony --help prints this list.

Command What it does
tony connect [host ...] Write the MCP config for Claude Code, Codex, Cursor, or Amp. Named hosts only, or all four it finds.
tony login / tony logout Your account on the tony site. Publishing needs it; nothing else does.
tony mcp Run the MCP server on stdio. Your agent runs this, not you.
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.

Every command asks PyPI whether there is a newer release and says so on the way out; the request runs alongside the command, so nothing waits on it, and a review started through the MCP server tells the agent instead of a terminal nobody is watching. It never installs anything by itself.

| tony uninstall | Delete tony and everything it wrote — see Uninstall. | | tony --version | The installed version. | | tony --help | This list. |

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 login token in ~/.tony, and — from versions before tony went agent-native — an API key beside it and a .tony/ directory of past reviews inside every repository you ran tony in, which 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 dev                  # the site; /dev renders src/fixtures/review.json

The renderer is web/src/renderer/render.ts, and the site is the only thing that runs it. 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.5.0.tar.gz (46.3 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.5.0-py3-none-any.whl (49.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tony_cli-0.5.0.tar.gz
  • Upload date:
  • Size: 46.3 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.5.0.tar.gz
Algorithm Hash digest
SHA256 86257b0b44478d58881ac6f9ce794ca1eb2ece67abd2a0f3bd3a006881c1d3bf
MD5 487f948e50d4bd27132cda48ed1b05ae
BLAKE2b-256 fc52e4e2a534d3df53b3fbcd5e0e316123b1ef656d8aa9f4fbc366cac3163380

See more details on using hashes here.

Provenance

The following attestation bundles were made for tony_cli-0.5.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.5.0-py3-none-any.whl.

File metadata

  • Download URL: tony_cli-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 49.5 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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9521b8af1d1b7bc54eb0a56a72fb514fa66bcfb71644853827b2d8b7a181de96
MD5 23f5586419490f53fd0e05700d73b15e
BLAKE2b-256 9526170005ca32431c590cf1746e0805fb57e9625ee6f3c3c208497c46a17220

See more details on using hashes here.

Provenance

The following attestation bundles were made for tony_cli-0.5.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

This release

0.5.0 This release

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

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