Перед каждым коммитом хочется одного и того же дисциплинированного обзора: correctness, security, compatibility, пропущенные тесты, лишние несвязанные изменения. Но делать это руками каждый раз - значит делать по-разному и легко пропустить под давлением сроков. Дисциплина, которая держится на памяти человека, рано или поздно провисает именно тогда, когда важнее всего. И пропуск обходится тем дороже, чем позже обнаружен: незамеченный на обзоре дефект уезжает в историю коммитов, и достаётся его оттуда уже отдельной правкой.
Наивный ход - попросить агента в свободной форме: "проверь мои изменения перед коммитом". Один раз сработает, но каждый следующий - иначе: границы обзора плывут, чек-лист в голове меняется, а ревьюящий агент вполне может начать заодно и править. Обзор без фиксированной формы - это не процедура, а настроение.
Ломается это на двух вещах. У свободного обзора нет закреплённого чек-листа, поэтому он то полон, то поверхностен. И у него нет гарантии, что агент не тронет файлы: ревьюер, который умеет писать, - уже не ревьюер. Он может тихо "починить" то, что сам же отметил, и вы теряете главную ценность - независимый второй взгляд на неизменный diff.
Решение - упаковать обзор в навык с урезанными правами. Во frontmatter навык назван precommit-review, у него allowed-tools ограничены чтением (read, grep, glob, exec), а permissions разрешают только Exec(git diff) и Exec(git status) и явно запрещают edit и Write(**). triggers: user делает его осознанной командой, а не автоматически срабатывающим правилом. Каждое поле здесь несёт смысл: allowed-tools очерчивает, к чему навык вообще прикасается, permissions - что из этого разрешено без вопросов, а trigger user гарантирует, что обзор запускаете вы, а не он сам в неожиданный момент.
Тело навыка описывает сам обзор словами: прочитать AGENTS.md и staged diff; проверить correctness, security, compatibility, пропущенные тесты и несвязанные изменения; не изменять файлы; вернуть findings по severity с указанием file:line, затем residual risks и команды проверки. Это законченная процедура с одним ясным выходом - отчётом, а не правкой. Порядок вывода тоже не случаен: сначала findings по severity, чтобы важное было сверху, затем остаточные риски, которые обзор не закрывает, и в конце команды, которыми результат можно перепроверить руками.
Целиком навык выглядит так - и его стоит прочитать как единое целое: frontmatter задаёт границы, тело задаёт работу.
Почему ограничения важнее слов. Tool restrictions делают намерение проверяемым, а не просто заявленным. Фраза "не меняй файлы" в теле - пожелание; deny на edit и Write(**) - принуждение: навык физически не может тронуть рабочее дерево, поэтому его вердикту можно доверять как независимому взгляду. Разница ровно та же, что между правилом и permission: первое просит, второе не оставляет выбора. И именно это делает вердикт ценным: обзор, который не может ничего изменить, честно отделён от кода, поэтому его findings - это взгляд со стороны, а не побочный эффект собственных правок.
Установка проста. Положите файл в .devin/skills/precommit-review/SKILL.md, закоммитьте его - так навык появится у всей команды, - и вызывайте /precommit-review перед тем, как формировать коммит. Необязательный аргумент focus сужает проход к конкретной области, если нужно посмотреть прицельно. Держать навык в репозитории важно не только ради удобства: так у всей команды один и тот же чек-лист, и обзор перестаёт зависеть от того, кто именно и в каком настроении его сегодня запускает.
Проверять сам навык стоит другим способом, чем его писали: прогнать на diff, куда заранее внесён известный дефект. Навык должен поднять его в findings по severity с file:line - и не изменить при этом ничего. После прогона убедитесь, что рабочее дерево нетронуто: git status чист по части правок навыка. Если навык хоть что-то отредактировал - permissions заданы неверно, и "ревью" на деле было вмешательством.
Типичные провалы предсказуемы. Ревью-навыку дают инструменты записи и позволяют "чинить" по ходу - и теряют независимость взгляда. Файл не коммитят - и у коллег навыка просто нет. Findings принимают за готовность, не прогнав те самые команды проверки, что навык вернул, - и закрывают обзор на слове. Признак самый наглядный: в вашем коммите появляется diff самого ревьюера. Держите ревьюера строго read-only, кладите его в репозиторий и сами доводите его findings до проверенного результата. А сам обзор пусть остаётся тем, ради чего заведён, - независимой проверкой, а не ещё одним автором правок в вашем коммите.
---
name: precommit-review
description: Проверяет staged diff перед commit
argument-hint: "[focus]"
allowed-tools:
- read
- grep
- glob
- exec
permissions:
allow:
- Exec(git diff)
- Exec(git status)
deny:
- edit
- Write(**)
triggers:
- user
---
Прочитай AGENTS.md и staged diff.
Проверь correctness, security, compatibility,
missing tests и unrelated changes.
Не изменяй файлы.
Верни findings по severity с file:line,
затем residual risks и команды проверки.