nit
Terminal diff viewer with inline review comments.
Navigate diffs with vim-style keybindings, leave comments on specific lines, and persist them as structured JSON. Useful for code review workflows, self-review before committing, and giving feedback to AI coding tools.
Install
brew install joshuazd/tap/nit
Or via pip/pipx:
pipx install nit-cli
Or from source:
git clone https://github.com/joshuazd/nit.git
pipx install ./nit
Usage
# Review current branch changes (vs main/master)
nit
# Review unstaged changes
nit --mode unstaged
# Review all uncommitted changes
nit --mode all
# Review a specific commit range
nit HEAD~3..HEAD
nit main..feature
# Review any file (read-only, no git required)
nit path/to/file.py
# Filter to specific files or directories
nit --path src/
nit --path src/nit/app.py main..feature
# Export comments on quit
nit --export-comments comments.md
nit --export-comments - --export-format json # stdout as JSON
On main/master, nit defaults to unstaged mode. On feature branches, it defaults to branch diff. The diff auto-refreshes every 5 seconds.
Keybindings
| Key | Action |
|---|---|
j / k |
Move cursor down / up |
J / K |
Jump to next / previous hunk |
n / p |
Next / previous file |
] / [ |
Jump to next / previous comment |
gg / G |
Jump to top / bottom |
c |
Add comment on current line |
d |
Delete comment on current line |
e |
Export comments to clipboard |
m |
Cycle diff mode (branch / unstaged / staged / all) |
s |
Toggle side-by-side diff view |
w |
Toggle word-level diff highlighting |
W |
Toggle hide whitespace-only changes |
h |
Toggle syntax highlighting |
r |
Refresh diff |
q |
Quit |
Git operations (g-prefixed)
| Key | Action |
|---|---|
ga |
Stage hunk under cursor |
gu |
Unstage hunk (staged mode) |
gx |
Discard hunk |
gc |
Commit with message prompt |
Comment Storage
Comments are saved to .nit.json at the root of your git repository. The format is structured JSON:
{
"version": 1,
"branch": "my-feature",
"base": "main",
"comments": [
{
"file": "src/app.py",
"line": 42,
"line_content": " return result",
"comment": "Should handle the empty case here",
"hunk_context": ["...", "..."],
"timestamp": "2025-01-15T10:30:00+00:00",
"diff_mode": "branch"
}
]
}
Add .nit.json to your global gitignore to keep comments local:
echo '.nit.json' >> ~/.config/git/ignore
Claude Code Integration
nit works as a review tool for Claude Code. Leave comments on Claude's changes using nit, then have Claude read them with /nit. This creates a feedback loop where you can guide Claude's work through inline code review.
Install the plugin
In Claude Code:
/plugin marketplace add joshuazd/nit
/plugin install nit
Then use /nit in any project to have Claude read and address your comments.
Local development
If you cloned the repo, you can test the plugin directly:
claude --plugin-dir /path/to/nit
Development
git clone https://github.com/joshuazd/nit.git
cd nit
pip install -e ".[dev]"
pytest
The ./nit bootstrap script auto-creates a virtualenv at ~/.local/share/nit/venv for quick local use without a manual install.
License
GPL-3.0 - see LICENSE for details.
Metadata
Release files for nit-cli 0.4.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nit_cli-0.4.6.tar.gz | 38.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nit_cli-0.4.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 71.0 kB
Release files / nit_cli-0.4.6.tar.gz
| Download URL | nit_cli-0.4.6.tar.gz |
|---|---|
| Size | 38.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
040ab92f7abefe366d825d75732868a7731aab12832d3e1099eb59de0dd868a0
|
|
BLAKE2b-256 checksum How to use checksums |
4fb7f85e475ff4c346ad7ed6746691940516436c9f8861702b7851158115deb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 2, 2026.
Transparency logRelease files / nit_cli-0.4.6-py3-none-any.whl
| Download URL | nit_cli-0.4.6-py3-none-any.whl |
|---|---|
| Size | 32.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c264240b0c71792be4df81224c2878c031829d1a957f882b00f2bb7ae52db931
|
|
BLAKE2b-256 checksum How to use checksums |
7a8ba7ebe2577db0c30937b4c6abeec1c7e09186a2a50d1f5aae9e88a7c54556
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 2, 2026.
Transparency log