Fork of agavra/tuicr with Forgejo pull request support
  • Rust 98.2%
  • Shell 1.2%
  • Python 0.6%
Find a file
Kenny (Knight) Sheridan d407155252
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Has been cancelled
fix(forge): support Forgejo pull requests
2026-06-23 00:32:42 -07:00
.github fix(forge): support Forgejo pull requests 2026-06-23 00:32:42 -07:00
docs feat(gitlab): support request-changes reviews on merge requests (#421) 2026-06-17 15:44:01 -07:00
examples Add support for local TOML themes and custom .tmTheme syntax themes (#341) 2026-05-22 09:17:09 -07:00
public demo: nested fixture tree + cleaner claude tail (#317) 2026-05-15 22:50:47 -07:00
scripts/demo demo: nested fixture tree + cleaner claude tail (#317) 2026-05-15 22:50:47 -07:00
skills/tuicr fix: make tuicr review --repo a repo selector that finds PR sessions (#399) (#400) 2026-06-02 13:44:23 -07:00
src fix(forge): support Forgejo pull requests 2026-06-23 00:32:42 -07:00
.gitignore demo: automate README gif recording with bash + claude bookends (#316) 2026-05-15 22:31:53 -07:00
.tuicrignore Add .tuicrignore filtering and small-screen diff UX (#175) 2026-02-11 15:58:45 -08:00
AGENTS.md fix: make tuicr review --repo a repo selector that finds PR sessions (#399) (#400) 2026-06-02 13:44:23 -07:00
Cargo.lock chore(release): prepare v0.18.0 (#425) 2026-06-20 11:37:59 -07:00
Cargo.toml chore(release): prepare v0.18.0 (#425) 2026-06-20 11:37:59 -07:00
CHANGELOG.md fix(forge): support Forgejo pull requests 2026-06-23 00:32:42 -07:00
cliff.toml add workflow for packaging + publishing to crates.io 2026-01-09 12:09:38 -08:00
CONTRIBUTING.md feat(skill): improve skill integration with other agents (#201) 2026-03-17 10:36:13 -07:00
flake.lock Add Nix flake to develop and build/run with Nix (#190) 2026-02-27 08:32:27 -08:00
flake.nix fix: replace deprecated flake output attributes (#374) 2026-05-25 16:58:50 -07:00
LICENSE specify full MIT license 2026-01-07 21:50:04 -08:00
NOTICE-FORK.md fix(forge): support Forgejo pull requests 2026-06-23 00:32:42 -07:00
PLAN.md feat: add staged and unstaged review options (#183) 2026-03-24 10:09:40 -07:00
README.md feat(gitlab): support request-changes reviews on merge requests (#421) 2026-06-17 15:44:01 -07:00
RELEASE.md compile also for macOS Intel arch (#186) 2026-02-23 10:41:55 -08:00

tuicr

A code review TUI with vim keybindings. Export to GitHub, GitLab, or clipboard.

Crates.io License Website

demo

Tip

Pronounced "tweaker".

What it does

  • GitHub-style continuous diff in the terminal. Scroll through every changed file in one stream.
  • PR-style comments at the line, range, file, and review level, with classifications like issue, suggestion, note, and praise.
  • Review tracking at file or hunk granularity, persisted across sessions.
  • Three export targets: push a real review to GitHub or GitLab, copy structured markdown to your clipboard, or pipe to stdout.
  • Works with git, jj, and mercurial. Reviews uncommitted changes, commit ranges, or any GitHub PR or GitLab MR.

Install

curl -fsSL tuicr.dev/install.sh | sh
# or
brew install agavra/tap/tuicr
Other install methods (cargo, mise, nix, binaries, source)
# Cargo
cargo install tuicr

# Mise
mise use github:agavra/tuicr

# Nix
nix run github:agavra/tuicr

Pre-built binaries: GitHub Releases

From source:

git clone https://github.com/agavra/tuicr.git
cd tuicr
cargo install --path .

Quick start

tuicr                       # Pick from a commit selector
tuicr tui                   # Same TUI, explicit subcommand
tuicr -w                    # Uncommitted changes (skip selector)
tuicr -r main..HEAD         # Commit range
tuicr pr 125                # GitHub PR
tuicr mr 125                # GitLab MR
tuicr tui pr 125            # GitHub PR via explicit TUI subcommand
tuicr --stdout              # Pipe the review to stdout
tuicr review list           # List saved local review sessions

Inside tuicr, navigate with j/k, press c to comment, then y to copy the review or :submit to push it to GitHub. Auto-detects git, jj, or mercurial.

How it compares

tuicr hunk lumen gh pr review git diff
TUI diff viewer
Write comments in the TUI
Vim keybindings partial¹
Push inline review to GitHub partial²
Push inline review to GitLab
Agent-ready markdown export via CLI skill
git
jj
Mercurial (hg)
Single static binary (needs Node)

¹ Lumen has j/k navigation but no broader vim model (visual mode, {N}G, Ctrl-d/Ctrl-u, etc.).

² gh pr review posts approve/comment/request-changes at the review level only. No inline line comments.

Export your review

When you're done reviewing, send your comments wherever the work continues.

To GitHub

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

To GitLab

:submit offers Comment, Approve, or Request changes on a GitLab MR. Inline comments post as discussion notes. Review-level comments become the summary. Requires glab authenticated to the host. Request changes needs your account to be an assigned reviewer. Only Draft is GitHub-only here. See docs/GITLAB.md for setup, self-hosted instances, and troubleshooting.

To your coding agent

y or :clip copies a structured markdown block to your clipboard. Each comment has a number, a classification, and a file/line anchor:

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. [SUGGESTION] `src/auth.rs` - Consider adding unit tests
2. [ISSUE] `src/auth.rs:42` - Magic number should be a named constant
3. [NOTE] `src/auth.rs:50-55` - This block could be refactored

Paste it back to any coding agent (Claude, Codex, Cursor, etc).

For an agent-driven workflow where your agent opens tuicr in a tmux split pane, see skills/tuicr/SKILL.md.

To stdout

Run with --stdout to pipe the markdown to another process:

tuicr --stdout > review.md
tuicr --stdout | pbcopy

Review session CLI

tuicr review exposes saved sessions without opening the TUI. It can list sessions, add comments, and print stored comments for agent and script integrations. See docs/REVIEW_CLI.md.

The TUI creates a persisted session file when a review target becomes active, so collaborative tools can add comments immediately. Empty auto-created session files are removed when the TUI exits. tuicr review list marks currently open TUI sessions with "active": true.

Library API

tuicr also exposes a Rust library API for tools that want to build on top of its persisted review sessions. ReviewStore can list sessions for a checkout, load a session, and add review, file, line, or range comments using the same insertion primitive as the TUI.

use tuicr::{AddCommentRequest, CommentTarget, CommentType, LineSide, ReviewStore};

let store = ReviewStore::new();
let sessions = store.list_sessions_for_repo("/path/to/repo")?;
let session = &sessions[0].session_ref;

store.add_comment(
    session,
    AddCommentRequest {
        target: CommentTarget::Line {
            path: "src/main.rs".into(),
            line: 42,
            side: LineSide::New,
        },
        content: "Handle the empty case here.".into(),
        comment_type: CommentType::Issue,
    },
)?;

Configuration

Path: ~/.config/tuicr/config.toml on Linux/macOS, %APPDATA%\tuicr\config.toml on Windows.

theme = "catppuccin-mocha"
diff_view = "side-by-side"   # or "unified"
ignore_whitespace = false    # ignore all whitespace in local VCS diffs
appearance = "system"        # or "dark" / "light"
mouse = true
leader = ";"                  # configurable prefix for leader shortcuts
review_watch_interval_ms = 1000 # set to 0 to disable persisted-review polling

[[comment_types]]
id = "issue"
color = "red"
definition = "must fix before merge"

Bundled themes: dark, light, ayu-light, ayu-mirage, onedark, github-light, github-dark, catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha, everforest-dark, everforest-light, gruvbox-dark, gruvbox-light, nord-dark, nord-light, nord-dark-high-contrast, nord-light-high-contrast, solarized-light, solarized-dark, tokyo-night-storm, tokyo-night-day.

Local themes: set theme = "my-theme" or run tuicr --theme my-theme, then create ~/.config/tuicr/themes/my-theme.toml on Linux/macOS or %APPDATA%\tuicr\themes\my-theme.toml on Windows. Local themes may reference a local syntax_theme = "my-syntax.tmTheme" file for syntax highlighting. A ready-to-copy example lives at examples/tuicr-teal.toml with its matching examples/tuicr-teal-syntax.tmTheme syntax theme.

Full options, theme resolution precedence, comment_types semantics, and .tuicrignore rules in docs/CONFIG.md.

Keybindings

A first-session cheatsheet. Press ? inside tuicr for the full reference.

Key Action
j / k Down / up
Ctrl-d / Ctrl-u Half-page down / up
g / G Top / bottom
{ / } Previous / next file
[ / ] Previous / next hunk
/ Search
c / C Add line / file comment
v / V Visual mode (range comment)
r Toggle file reviewed
R Toggle hunk reviewed
y Copy review to clipboard
:edit Open focused file in $EDITOR
:submit Push review to GitHub
Tab in : prompt Complete or cycle commands
? Toggle full help

Full reference in docs/KEYBINDINGS.md.

Sponsors

Thanks to the folks below for keeping tuicr development going, it means a lot to have the work I'm doing here appreciated!

CodeRabbit

License

MIT licensed. Contribution notes in CONTRIBUTING.md.