Дядя Боб написал правила для ИИ-агентов: разбираем ub-mode

Автор «Чистого кода» Роберт Мартин aka Дядя Боб взялся за ИИ-агентов. В скилле ub-mode, который Дядя Боб на днях выложил на GitHub, всего около 750 слов. Этими словами Мартин выстраивает работу агента так, будто сам стоит рядом и смотрит на монитор строгим взглядом.
На днях Роберт Мартин aka Дядя Боб, автор «Чистого кода», выложил на GitHub ub-mode — набор правил для ИИ-агентов. Весь скилл — один файл примерно на 750 слов: короткие ёмкие правила, написанные по тем же принципам «чистого кода». Теперь у каждого разработчика будет свой Дядя Боб: он встанет над ИИ-агентом с линейкой и проследит за гигиеной кода.
При разборе багов агент приносит правку и пишет «готово, шеф». По одному диффу не понять, так ли это: старые тесты могли остаться зелёными и при неверной логике, а новая проверка — просто спрятать сбой. Скилл ub-mode заставляет агента обосновать свою работу: сначала показать тест, который падает из-за бага, потом предъявить правку, после которой тест проходит.
В репозитории ub-mode нет кода: там только README.md и SKILL.md. Второй файл описывает порядок действий, а README отсылает к утилитам, которые меряют сложность кода, ищут дубли и проверяют, ловят ли тесты ошибки. Автор пишет, что частично использовал идеи poteto-mode / pstack.
Правила разбиты на три части: First Make it Work, Then Make it Right и Practice.
Воспроизводимость ошибки
Мартин требует от агента начать с TDD: тест надо написать до изменения кода. Агент должен проверить, что тест падает по ожидаемой причине. Затем — минимальная правка, которая сделает тест зелёным. Никакого формализма быть не должно: если написать честный тест слишком сложно — не нужно писать фиктивный.
Архитектура: данные, ввод и повторный запуск
Дядя Боб требует от агента архитектурных решений. До того, как писать логику, агент должен продумать структуру данных и проверить всё, что приходит извне, прямо на входе в систему.
Код, который изменяет данные (например, пишет в базу или обращается к внешним сервисам), агент должен писать так, чтобы повторный запуск или перезапуск после сбоя на середине приводил к тому же результату, что и первый запуск.
Важен принцип «убери лишнее перед тем, как добавлять». Прежде чем писать новый код, агент должен упростить то, что уже есть: например, удалить ненужные ветки, обёртки и дубли. Новая функциональность ложится уже на расчищенную основу.

Первопричина вместо заплатки
В разделе Then Make it Right Мартин требует искать первопричину ошибки, а не маскировать симптом.
Это правило он сформулировал так: «Защитная проверка, которая только прячет падение, — это не исправление» («A guard that only hides the crash is not a fix»). Например, проверка на null уберёт падение, но не ответит на вопрос, откуда в этом месте null и может ли он там быть по модели данных. Иногда guard и в самом деле нужен, но правило требует понять причину сбоя, а не считать защитную проверку достаточным исправлением.
По той же логике скилл запрещает агенту глушить ошибки компилятора: заглушённая ошибка прячет проблему, как и проверка на null.
Спрятать баг может и сам тест. Поэтому Мартин требует, чтобы тесты проверяли поведение так, как его видит пользователь кода. Если тест пройдёт даже тогда, когда каждая функция возвращает пустой результат, этот тест надо выбросить.
На тестах, которые проверяют поведение, держится и рефакторинг: сначала тесты фиксируют, что делает код, потом агент небольшими шагами меняет структуру и на каждом шаге проверяет, что поведение не изменилось.
Проверки качества: утилиты Crapper, Dryer и Mutator
Мартин не полагается на оценку кода, которую даст сам агент. Скилл ub-mode требует от агента прогонять код через три утилиты:
-
Crapper оценивает, насколько рискованно менять каждую функцию: чем функция сложнее и чем хуже покрыта тестами — тем выше балл.
-
Dryer ищет похожие фрагменты кода.
-
Mutator вносит в код мелкие ошибки и смотрит, увидят ли тесты проблему.
По итогам проверок агент должен разбить или покрыть тестами рискованные функции, убрать дубли, дописать тесты там, где ошибки прошли незамеченными, и удалить мёртвый код. Пороги Мартина (риск меньше 10 для каждой функции, дубли с похожестью от 0,8) — его личные требования, здесь каждый решает сам.

Журнал решений, worktree и коммиты
Последний блок скилла, Practice, описывает рабочую дисциплину. Агент должен фиксировать все свои действия и причины решений, беречь контекстное окно, делать небольшие коммиты и не удалять Git-worktree, если в нём есть незакоммиченные изменения. В сообщении коммита должны быть изложены причина, суть изменения и способ проверки.
Есть пункт, который командам придётся адаптировать: скилл требует в конце работы отправлять изменения в основную ветку. Это правило нельзя переносить без изменений, если в команде обязательны pull request, ревью и CI. Скилл задаёт предпочтения Мартина, а не универсальную политику.
Встраивать работу агентов в командный процесс учит программа Хекслета «AI SDLC»: от спецификации и ревью до CI/CD.
Как подключить ub-mode
В README описан простой способ: скопировать SKILL.md в каталог skills своего агента. Для Claude указан путь ~/.claude/skills/ub-mode/SKILL.md; в примерах есть Grok и Cursor. Затем вызовите скилл командой /ub-mode.
Для полноценной работы скилла нужно самостоятельно установить Crapper, Dryer и Mutator.
Для тестирования скилла можно взять небольшую задачу с понятным ожидаемым результатом. После выполнения работы нужно посмотреть, написал ли агент падающий тест до того, как изменить код, ограничился ли нужным диффом и какие проверки действительно выполнил. Одна удачная правка ничего не скажет об эффективности скилла.
Работу с агентами, контекстом и проверкой результата мы разбираем на курсе Хекслета «ИИ для разработчиков».
В README и SKILL.md нет результатов сравнительных испытаний: неизвестно, насколько хорошо агенты соблюдают эти инструкции и насколько этот скилл уменьшает количество проблем в коде.
Вопросы и ответы
Что такое ub-mode?
Это файл с инженерными правилами для агента, от TDD до проверок качества и коммитов.
С какими агентами можно использовать ub-mode?
В README приведены пути для Claude, Grok и Cursor. Для других сред потребуется проверить, поддерживают ли они такой формат скилла и команду его вызова.
Где взять всё, что нужно для скилла Дяди Боба?
-
ub-mode — скилл: файл SKILL.md с правилами для агента и README с инструкцией по установке для Claude, Grok и Cursor.
-
Crapper — утилита, которая оценивает, насколько рискованно менять каждую функцию, по её сложности и покрытию тестами. Поддерживает Clojure, Java, Go, TypeScript, Rust и Python.
-
Dryer — утилита, которая ищет похожие фрагменты кода.
-
Mutator — утилита мутационного тестирования: вносит в код мелкие ошибки и показывает, какие из них прошли незамеченными при тестировании.
Автор: darovska_online

