- BrainTools - https://www.braintools.ru -

Автор «Чистого кода» Роберт Мартин aka Дядя Боб взялся за ИИ‑агентов. В скилле ub‑mode, который Дядя Боб на днях выложил на GitHub, всего около 750 слов. Этими словами Мартин выстраивает работу агента так, будто сам стоит рядом и смотрит на монитор строгим взглядом.
На днях Роберт Мартин aka Дядя Боб, автор «Чистого кода», выложил на GitHub ub‑mode [1] — набор правил для ИИ‑агентов. Весь скилл — один файл примерно на 750 слов: короткие ёмкие правила, написанные по тем же принципам «чистого кода». Теперь у каждого разработчика будет свой Дядя Боб: он встанет над ИИ‑агентом с линейкой и проследит за гигиеной кода.
При разборе багов агент приносит правку и пишет «готово, шеф». По одному диффу не понять, так ли это: старые тесты могли остаться зелёными и при неверной логике [2], а новая проверка — просто спрятать сбой. Скилл ub‑mode заставляет агента обосновать свою работу: сначала показать тест, который падает из‑за бага, потом предъявить правку, после которой тест проходит.
В репозитории ub‑mode нет кода: там только README.md и SKILL.md. Второй файл описывает порядок действий, а README отсылает к утилитам, которые меряют сложность кода, ищут дубли и проверяют, ловят ли тесты ошибки [3]. Автор пишет, что частично использовал идеи poteto‑mode / pstack [4].
Правила разбиты на три части: 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.
Спрятать баг может и сам тест. Поэтому Мартин требует, чтобы тесты проверяли поведение [5] так, как его видит пользователь кода. Если тест пройдёт даже тогда, когда каждая функция возвращает пустой результат, этот тест надо выбросить.
На тестах, которые проверяют поведение [6], держится и рефакторинг: сначала тесты фиксируют, что делает код, потом агент небольшими шагами меняет структуру и на каждом шаге проверяет, что поведение не изменилось.
Мартин не полагается на оценку кода, которую даст сам агент. Скилл ub‑mode требует от агента прогонять код через три утилиты:
Crapper [7] оценивает, насколько рискованно менять каждую функцию: чем функция сложнее и чем хуже покрыта тестами — тем выше балл.
Dryer [8] ищет похожие фрагменты кода.
Mutator [9] вносит в код мелкие ошибки и смотрит, увидят ли тесты проблему.
По итогам проверок агент должен разбить или покрыть тестами рискованные функции, убрать дубли, дописать тесты там, где ошибки прошли незамеченными, и удалить мёртвый код. Пороги Мартина (риск меньше 10 для каждой функции, дубли с похожестью от 0,8) — его личные требования, здесь каждый решает сам.

Последний блок скилла, Practice, описывает рабочую дисциплину. Агент должен фиксировать все свои действия и причины решений, беречь контекстное окно, делать небольшие коммиты и не удалять Git‑worktree, если в нём есть незакоммиченные изменения. В сообщении коммита должны быть изложены причина, суть изменения и способ проверки.
Есть пункт, который командам придётся адаптировать: скилл требует в конце работы отправлять изменения в основную ветку. Это правило нельзя переносить без изменений, если в команде обязательны pull request, ревью и CI. Скилл задаёт предпочтения Мартина, а не универсальную политику.
Встраивать работу агентов в командный процесс учит программа Хекслета «AI SDLC [10]»: от спецификации и ревью до CI/CD.
В README описан простой способ: скопировать SKILL.md в каталог skills своего агента. Для Claude указан путь ~/.claude/skills/ub‑mode/SKILL.md; в примерах есть Grok и Cursor. Затем вызовите скилл командой /ub‑mode.
Для полноценной работы скилла нужно самостоятельно установить Crapper, Dryer и Mutator.
Для тестирования скилла можно взять небольшую задачу с понятным ожидаемым результатом. После выполнения работы нужно посмотреть, написал ли агент падающий тест до того, как изменить код, ограничился ли нужным диффом и какие проверки действительно выполнил. Одна удачная правка ничего не скажет об эффективности скилла.
Работу с агентами, контекстом и проверкой результата мы разбираем на курсе Хекслета «ИИ для разработчиков [11]».
В README и SKILL.md нет результатов сравнительных испытаний: неизвестно, насколько хорошо агенты соблюдают эти инструкции и насколько этот скилл уменьшает количество проблем в коде.
Это файл с инженерными правилами для агента, от TDD до проверок качества и коммитов.
В README приведены пути для Claude, Grok и Cursor. Для других сред потребуется проверить, поддерживают ли они такой формат скилла и команду его вызова.
ub‑mode [1] — скилл: файл SKILL.md с правилами для агента и README с инструкцией по установке для Claude, Grok и Cursor.
Crapper [7] — утилита, которая оценивает, насколько рискованно менять каждую функцию, по её сложности и покрытию тестами. Поддерживает Clojure, Java, Go, TypeScript, Rust и Python.
Dryer [8] — утилита, которая ищет похожие фрагменты кода.
Mutator [9] — утилита мутационного тестирования: вносит в код мелкие ошибки и показывает, какие из них прошли незамеченными при тестировании.
Автор: darovska_online
Источник [12]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/37670
URLs in this post:
[1] ub‑mode: https://github.com/unclebob/ub-mode
[2] логике: http://www.braintools.ru/article/7640
[3] ошибки: http://www.braintools.ru/article/4192
[4] poteto‑mode / pstack: https://github.com/poteto
[5] поведение: http://www.braintools.ru/article/9372
[6] поведение: http://www.braintools.ru/article/5593
[7] Crapper: https://github.com/unclebob/crapper
[8] Dryer: https://github.com/unclebob/dryer
[9] Mutator: https://github.com/unclebob/mutator
[10] AI SDLC: https://ru.hexlet.io/programs/ai-sdlc?utm_source=habr&utm_medium=referral&utm_campaign=hexlet-blog&utm_content=ub-mode-code-quality
[11] ИИ для разработчиков: https://ru.hexlet.io/programs/ai-for-developers?utm_source=habr&utm_medium=referral&utm_campaign=hexlet-blog&utm_content=ub-mode-code-quality
[12] Источник: https://habr.com/ru/companies/hexlet/articles/1100762/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1100762
Нажмите здесь для печати.