git · jj · hg rust MIT

Code review
in your terminal.

tuicr is a TUI for code review with vim keybindings. Scroll a GitHub-style diff, leave line-level comments, then push a real PR review to GitHub, or copy structured markdown for your coding agent.

$ curl -fsSL tuicr.dev/install.sh | sh
View on GitHub →
or: brew install agavra/tap/tuicr · cargo install tuicr · mise use github:agavra/tuicr · nix run github:agavra/tuicr
~/code/auth-svc — tuicr v0.10.0 · press ? for help
tuicr demo: reviewing a diff, leaving comments, exporting markdown

live in agavra/tuicr · vim keybindings, GitHub-style diffs, real PR-style comments

sponsored by

features

why review in the terminal at all
[01]

GitHub-style diff

Every changed file in one continuous scroll.

jkCtrl-d{}[]
[02]

Vim, all the way down

Modal navigation, visual selection, gG jumps, search with /, jump to line N with {N}G. If your fingers know vim, they already know tuicr.

hjkl/ngGzz
[03]

PR-style comments

Comment at the line, range, file, or review level. Select multi-line ranges with v / V. Classify each by issue, suggestion, note, or praise (or define your own).

cCvV;cTab
[04]

Three export targets

Pull a live PR with tuicr pr 125, then push your review back to GitHub (:submit), copy structured markdown to your clipboard (y), or pipe to stdout for any downstream tool.

tuicr pr:submity--stdout
[05]

Git, jj & Mercurial

Single static binary, no runtime. Auto-detects the VCS: jj first (jj repos are Git-backed underneath), then git, then hg.

gitjjhg
[06]

Agent skill bundle

Ship the /tuicr skill to Claude Code or Codex. The agent opens tuicr in a tmux split; you review, and comments flow back automatically.

/tuicrtmuxskills/

themes

click to apply across the page · 20+ built-ins ship with tuicr

export

three targets, one keystroke each

GitHub

team workflow

:submit opens a picker (Comment, Approve, Request changes, or Draft). Inline comments land on the right lines as a real PR review; review-level comments become the summary. Requires gh authenticated to the repo.

:submit

Clipboard

agent loop

y or :clip copies a structured markdown block. Each comment is numbered, classified, and anchored to a file/line. Paste it back to Claude, Codex, Cursor, or any LLM and let it act on the whole batch.

y · :clip

Stdout

scripting

Run with --stdout to pipe the same markdown to any downstream process. Persist a review to disk, send it to a CI job, pipe it into pbcopy, or chain it into a custom workflow.

$tuicr --stdout > review.md
clipboard.md · copied 3 comments
I reviewed your code and have the following comments. Please address them. Comment types: ISSUE (problems to fix) SUGGESTION (improvements) NOTE (observations) PRAISE (positive feedback) 1. **[ISSUE]** src/auth.rs:49 — Silent swallow of expiry context when claims.exp <= now. Surface the timestamp so the error message can include it. 2. **[SUGGESTION]** src/auth.rs:102 — Pull TOKEN_TTL_SECS into a config struct so tests can override it without recompiling. Default 3600 is fine for prod; rotation policies will want shorter. 3. **[PRAISE]** tests/auth_test.rs — Nice coverage on the expired-token path. Keep the table-driven style.

compare

what tuicr does that the alternatives don't
tuicr hunk lumen gh pr review git diff
TUI diff viewer · ·
Comment in the TUI · ·
Vim keybindings · partial1 · ·
Push inline review → GH · · partial2 ·
Agent-ready markdown via CLI skill · · ·
git ·
jj · ·
Mercurial (hg) · · · ·
Single static binary needs Node
1Lumen has j/k navigation but no broader vim model (visual mode, {N}G, Ctrl-d/Ctrl-u, etc.).
2gh pr review posts approve/comment/request-changes at the review level only. No inline line comments.

keybindings

first-session cheatsheet · press ? in-app for the rest
Navigate
j / kdown · up
Ctrl-d / uhalf page
{ / }prev · next file
[ / ]prev · next hunk
/ then nsearch · next match
gG · {N}Gtop · bottom · line N
Review
ccomment at cursor
Ccomment on whole file
;creview-level comment
v / Vvisual range select
rtoggle reviewed
Tabcycle comment type
Export & cmds
:submitpush review to GitHub
y · :clipcopy markdown
--stdoutpipe to stdout
:diffunified ⇄ side-by-side
:commitspick revision range
?full help

install

pick your weapon · single static binary, no runtime