hunk — это review-first terminal diff viewer для AI-сгенерированных changeset-ов, построенный на OpenTUI и Pierre diffs.
-
multi-file review stream с sidebar-навигацией
-
inline AI- и agent-аннотации рядом с кодом
-
split, stack и responsive auto layouts
-
watch-режим: автообновление при изменении ветки
-
кастомные шорткаты для accept/reject hunk-ов
-
поддержка нескольких git-провайдеров (GitHub, GitLab, локальные patches)
Зачем ещё один diff-viewer
Классические diff-инструменты (git diff, GitHub UI, IntelliJ diff) спроектированы под человеческие PR: несколько hunk-ов, понятная история, чёткое авторство. AI-агенты ломают эту модель:
-
PR от агента может содержать 200 файлов и 5000 строк изменений.
-
Часть hunk-ов — реальная фича, часть — рефакторинг ради рефакторинга, часть — AI просто "причесал" то, что не просили трогать.
-
Reviewer должен быстро отделить релевантное от шума.
hunk оптимизирует именно этот процесс: показать всё, дать быстро отсеять, сфокусироваться на сути.
Установка
npm install -g @modem/hunk
# или
brew install modem-dev/tap/hunk
Использование
Показать diff в текущей ветке против main:
cd your-repo
hunk main..HEAD
Watch-режим — обновляется live при каждом коммите:
hunk --watch main..agent/feature-x
С PR-номером GitHub:
hunk pr 123
Шорткаты
В режиме review:
-
j/k— следующий / предыдущий hunk. -
J/K— следующий / предыдущий файл. -
space— пометить hunk как reviewed. -
a— accept (применить в local branch). -
r— reject (отметить как нежелательное). -
c— добавить inline комментарий. -
?— справка.
Все действия пишутся в .hunk/review.log, чтобы reviewer мог потом скопом отправить решения в PR-комментарий или в follow-up patches.
AI-аннотации
Если коммиты в branch созданы агентом (Claude Code, Cursor, Aider), агент часто пишет commit-сообщение с обоснованием. hunk вытаскивает эти обоснования и показывает их рядом с конкретными hunk-ами:
┌─ src/auth/login.ts ────────────────────────────┐
│ AI: "Extracted validation logic into a separate │
│ function for testability. No behaviour change." │
├─────────────────────────────────────────────────┤
│ -function login(email, password) { │
│ - if (!email || !email.includes('@')) { │
│ - return Error('invalid email') │
│ - } │
│ ... │
└─────────────────────────────────────────────────┘
Для reviewer это сразу маркер: «это не bug fix, это рефакторинг — смотреть с правильным фоном».
Layouts
-
split — два панели (старый ↔ новый код).
-
stack — построчно (одна панель, маркеры
+/-). -
responsive auto — выбирает в зависимости от ширины терминала.
hunk --layout=split main..HEAD
hunk --layout=stack main..HEAD
Когда брать
-
У вас регулярно PRs от AI-агентов на сотни файлов.
-
Веб-UI GitHub/GitLab слишком медленный для таких PR.
-
Вы предпочитаете терминал.
-
Нужен watch-режим для активно меняющихся feature-branches.
Лицензия
MIT. Активная разработка. Issue tracker: github.com/modem-dev/hunk/issues.