Show HN: A focused, fullscreen, side-by-side terminal-based Git review tool

slobodan_1 pts0 comments

hawkshaw: a focused, fullscreen, side-by-side git review tool

Demo video

Your browser does not support embedded video.<br>Download the demo instead.

Screenshots

Side-by-side split: old left, new right, changed lines aligned

Unified inline view for narrower terminals

Keyboard navigation: the ? help overlay

c copies the hunk as a diff, ready for a second opinion

The minimal theme: high-contrast text, no background fills

The noir theme: film-noir greyscale

j / k or ← → browse · esc close

Why

I review a lot of AI-generated code. You do the same. The terminal tools that<br>already exist pull in two directions. Full git clients like lazygit and gitui do<br>everything, so they put a busy general-purpose interface between you and the code.<br>git diff and git add -p do too little: no real scrolling,<br>no fullscreen reading mode. And their keyboard navigation is not great.

hawkshaw takes one job. It puts a large diff in front of you, hunk by hunk, and<br>keeps the interface out of the way while you work through it. The scope stays narrow<br>on purpose. There is no branch management, no log browsing, no sidebar. You read the<br>change, you decide, you move on, with vim and bat muscle memory.

What you get

Keyboard navigation throughout. Everything is a keystroke, with<br>vim and bat muscle memory: j/k to scroll,<br>y/n to decide, ? when you forget.<br>Full keymap ↓

Two layouts, one keystroke. A side-by-side split with changed<br>lines aligned across the gap, and a unified inline view for narrower terminals.<br>Width picks the layout by default, and t cycles it.

Dark focused diff bands. The focused hunk keeps its syntax<br>highlighting over dark green and<br>red backgrounds while everything else recedes, so your<br>eye lands where the decision is.

Intra-line highlighting marks the words that actually changed,<br>with syntax colours still reading through.

Clipboard that survives SSH. c copies the file path<br>and current hunk as a unified diff over OSC 52, ready to paste into an AI<br>assistant for a second opinion.

Ignores that match git status , from the in-repo<br>.gitignore to your global ignore configuration. i adds an<br>untracked file to .gitignore without leaving the review.

Viewport virtualization. Only the visible window ever renders,<br>so a 10,000-line diff scrolls as fast as a ten-line one.

Done means done. Once every hunk has a verdict, hawkshaw prints<br>a short summary and closes the case. No need to press q.

Keyboard navigation

KeysAction

j / k, ↓ / ↑scroll a line<br>F / Bfull page down / up<br>Ctrl-d / Ctrl-u, Space / bhalf page down / up<br>g / G, Home / Endtop / bottom<br>J / Knext / previous hunk<br>h / l, ← / →previous / next file<br>tcycle view: auto, split, inline<br>y / nstage / skip the current hunk<br>Y / Nstage / skip every remaining hunk in the file<br>dddiscard the current hunk (confirm)<br>DDdiscard the whole file back to HEAD (confirm)<br>uundo the last verdict<br>ccopy the file path and current hunk (as a diff) to the clipboard<br>rrefresh (re-read git status)<br>i / Iadd an untracked file, or its directory, to the root .gitignore<br>?help overlay<br>qquit (warns if hunks are undecided)

Discards destroy work and always ask first. Binary files take<br>whole-file verdicts with the same keys.

Install

Prebuilt binary

curl -fsSL https://slobodan.me/hawkshaw/install.sh | sh<br>The script detects your OS and architecture (Linux and macOS, x86_64 and arm64),<br>downloads the matching binary from the latest GitHub release, verifies its SHA-256<br>against the release checksums before installing anything, and puts<br>hawkshaw in ~/.local/bin (or /usr/local/bin<br>when run as root).

Docker (recommended)

Running hawkshaw in Docker is the recommended setup. Pin both the script and<br>the binary to the same tag, so nothing moves underneath you:

# Dockerfile<br>RUN curl -fsSL https://github.com/stojanovic/hawkshaw/releases/download/v0.1.0/install.sh \<br>| VERSION=0.1.0 PREFIX=/usr/local sh<br>From source

You need a Rust toolchain. There is no system libgit2 to install<br>first, since git2 builds a bundled copy.

git clone https://github.com/stojanovic/hawkshaw.git<br>cd hawkshaw<br>cargo install --path .

Configuration

hawkshaw reads an optional TOML config file, by default from<br>~/.hawkshaw/config.toml. Point it somewhere else with<br>--config. Both keys are optional, and a missing file is fine.

theme = "default" # default | minimal | noir<br>view = "auto" # auto | split | inline<br>default is a dark, syntax-friendly scheme with green and red bands<br>on the focused changed lines. minimal is high-contrast text with no<br>background fills. noir goes black-and-white, film-noir greyscale,<br>monochrome down to the syntax — the switch at the top of this page is a nod to<br>it.

auto reads the terminal width and takes the side-by-side split at<br>120 columns or wider, unified inline below that, re-adapting live as you resize,<br>a tmux split included.

The name

I built hawkshaw (no, Claude Code and Codex built it) while working on<br>Competitor<br>Tracker, an app that tracks your competitors and sends you a list of the most<br>important changes every...

hawkshaw hunk side file diff split

Related Articles