v1.0.3/terminal, desktop beta, mcp

tongsEvery forge. One place.

A keyboard-driven review inbox for GitHub pull requests and GitLab merge requests. Diffs, comments, review drafts and pipelines, in one terminal.

pipx install tongs

or uv tool install tongs. Python 3.12+.

tongs · my reviewsdemo data
The tongs inbox on the My Reviews tab: reviews with CI status dots, numbers and titles such as Token-bucket rate limiting for API.

My Reviews across acme/* on GitHub and platform/* on GitLab, one list. 10 s loop, muted, demo data.

works withgithub.com, GitHub Enterprise Server, gitlab.com, self-hosted GitLabsigns inthrough gh, glab, ~/.netrc or your keyring. tongs stores no tokens.

tongs# before

Reviews on GitHub. Merge requests on GitLab. A pipeline failing somewhere in between.

Every forge brings its own tabs, badges and notification mail. tongs reads them all from one terminal, so the tabs can close.

Thirty-seven browser tabs across both forges become one terminal.

tongs --scan-root ~/src# repos

Found, not configured.

tongs reads the git remotes under your scan root, ~/git by default, and gathers every open review into My Reviews, My MRs and All Open. Self-hosted GitLab and GitHub Enterprise need one [hosts] entry each.

r repos/ filterf forge123 inbox tabs

First run

tongs · repositoriesdemo data
Repository list: 14 repositories sorted by forge. GH rows for acme/api, acme/billing, acme/cli and others; GL rows for data/pipelines, platform/infra and platform/observability.

tongs# enter, 2 diff

Review without leaving the terminal.

Unified diffs with word-level highlights, or split side by side, with Monokai syntax. Comment on a line or a selection, answer threads, and write suggestions in your own editor.

jk movev splitJ selectc commentF3 suggest
tongs · !54 backfill events in bounded batches · diffdemo data
Unified diff of pipelines/backfill.py: BATCH_SIZE changes from 1_000 to 5_000, with removed lines in red, added lines in green, word-level highlights and Monokai syntax colors.

Review !54 in data/pipelines: a comment and a suggestion go into the review draft, then the review is submitted once.

tongs# ctrl+g review draft

Your drafts survive. Your focus does too.

Comments collect in a local review draft until you submit it once. Quit or crash, and the draft is still there when you come back. An interrupted submission resumes where it stopped and never repeats an unconfirmed write on its own.

  1. CtrlGStart a review. Comments go to the draft.
  2. cComment. Each one is saved locally.
  3. vPick a verdict. Comment or approve, and request changes on GitHub.
  4. CtrlSSubmit once. The forge gets one review.
  5. Alt]Recover. Cycle drafts kept from earlier sessions.

Review draftsnew guide

tongs · review draft · version 3demo data
The review draft screen: version 3, editable, ready. Two draft inline comments on pipelines/backfill.py, one on line 12 and one on line 13 with a suggestion block, the verdict set to approve, and the keys for submit, edit, remove and discard.

tongs# 5 pipeline

Find the failing job. Read the log. Retry.

Pipelines from either forge, jobs grouped by stage. Open the log with its colors intact, search it as you type, and retry with a second press of the same key.

Enter open/ searchn next matchRR retry
tongs · !54 backfill events in bounded batches · pipelinedemo data
Pipeline 88213, failed. Jobs grouped under lint, test, build and deploy; pytest:integration is marked FAILED.

A failed job carries the word FAILED, never color alone. Retry asks first: Retry job pytest:integration? Press R again.

tongs# ctrl+p finds the rest

Twelve keys cover most of a review.

Every action has a key, and the command palette finds the rest by name.

  • jkMove down and updiff, threads, pipeline
  • EnterOpen the selectioninbox, pipeline
  • 123Switch inbox tabsinbox
  • vUnified or split diffdiff
  • cComment on a line or selectiondiff
  • F3Suggest a change in $EDITORdiff
  • CtrlGStart or open the review draftreview
  • CtrlSSubmit a comment or revieweditor, draft
  • /Filter repos or search a logrepos, pipeline
  • RRRetry a job, asks twicepipeline
  • CtrlPCommand paletteeverywhere
  • ?A short help hinteverywhere

Approve A, merge M and close X also ask twice.All keybindings

tongs# beyond the terminal

One engine. Every surface.

The desktop workspace and the MCP server run on the same services, forge clients, cache and review drafts as the terminal app.

tongs · desktop · files changedbetademo data
The tongs desktop app, beta, reviewing !482 in acme/api: the repository sidebar, the Files changed tab with a pending comment on rate_limit.py line 17, and the Your review drawer with the verdict choices and Submit review.

tongs desktop install

A desktop workspace, same drafts beta

Files changed, a review composer with suggestions, and the Your review drawer. A beta for Fedora 44 on x86_64, installed per user or from the RPMs on the v1.0.3 release. The terminal app stays the main way to use tongs.

Install the desktop app

$ pipx install "tongs[mcp]"
$ tongs-mcp
# stdio server, six tools
list_mrs      get_mr        get_mr_diff
post_comment  approve_mr    list_pipelines
# merge, close and cancel stay with you

tongs-mcp

Your agent reads the same inbox

An MCP server for Claude Code, Codex and Claude Desktop. It can read, comment and approve. Destructive actions are left out on purpose.

MCP servernew guide

ls docs/

Find your way.

Five groups, the same words in the header, here and in the docs sidebar.

Ready

Code lives in forges. tongs is how you handle them.

A smith never holds hot metal by hand. tongs gives you the same steady grip on GitHub and GitLab: every review, diff and pipeline, held in one place.

recommended
pipx install tongs
with uv
uv tool install tongs
with pip
pip install tongs
The tongs trailer, 58 s, with narration, music and English captions. Sound plays only when you start it.Watch on YouTube (higher quality)
Transcript and scene descriptions

[On screen: a dark frame. Browser tabs tinted cyan and orange multiply into clutter; pull request and merge request cards flicker while pipeline status dots blink, one red.]

Your code lives on more than one forge. Pull requests here. Merge requests there. A failing pipeline, somewhere. What if you could hold it all in one place?

[On screen: the clutter falls away. Steel tongs close on a glowing cyan and orange cube with a metallic clang. The glow resolves into the tongs wordmark, then a terminal.]

[On screen: the tongs inbox listing reviews from both forges, captioned "GitHub and GitLab. One inbox." Keys switch between My Reviews, My MRs and All Open.]

tongs finds your repositories and gathers every review into one inbox.

[On screen: a syntax-highlighted diff with word-level changes, captioned "Syntax highlighted. Word-level diffs." Review mode opens, an inline comment is typed and a suggestion is added.]

Real diffs, highlighted word by word. Comment inline. Suggest the fix. Send it as one review.

[On screen: "Pipeline > Job > Log". A failed pipeline drills down to a job log, and a search jumps to the error line. The job is retried, the merge request approved and merged.]

Follow CI down to the failing line. Retry. Approve. Merge.

[On screen: the desktop app, captioned "Desktop workspace (beta)", with a pending comment and the review drawer open.]

Prefer a window? Same drafts, on the desktop.

[On screen: an MCP client calling list_mrs, get_mr_diff and list_pipelines against tongs-mcp.]

Your agents see it too, over MCP.

[On screen: the tongs set the cube down; the cyan and orange light merges into one glow.]

Every forge. One grip. tongs. Unified code review for the terminal.

[On screen: end card with the tongs wordmark, "Unified code review for the terminal.", the command pipx install tongs, and www.tongs.tools.]

Music: With These Hands by Scott Buckley, released under CC BY 4.0. Shortened and mixed under the narration.

search the docs