git · jj · hg github · gitlab · bitbucket · azure 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 review to any forge (e.g. GitHub/GitLab) or export to your coding agent.

$ curl -fsSL tuicr.dev/install.sh | sh
View on GitHub →
or: brew install 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. Untyped by default; define your own comment types (issue, nit, question …) to classify them.

cCvV;cTab
[04]

Three export targets

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

tuicr prtuicr mr: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

Remote Forge

team workflow

:submit allows you to upload your review to your forge of choice, including approving or requesting changes to pull requests.

:submit

Clipboard

agent loop

y or :clip copies a structured markdown block. Each comment is numbered 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
## Session: auth-svc@main/unstaged/4098e31 I reviewed your code and have the following comments. Please address them. Reviewing unstaged changes ## Local tuicr Comments 1. `src/auth.rs:49` - Silent swallow of expiry context when claims.exp <= now. Surface the timestamp so the error message can include it. 2. `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. `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 to 4 forges · · 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 your forge
y · :clipcopy markdown
--stdoutpipe to stdout
:diffunified ⇄ side-by-side
:commitspick revision range
?full help

install

pick your weapon · single static binary, no runtime