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

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

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

Автор «Чистого кода» Роберт Мартин 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: тест надо написать до изменения кода. Агент должен проверить, что тест падает по ожидаемой причине. Затем — минимальная правка, которая сделает тест зелёным. Никакого формализма быть не должно: если написать честный тест слишком сложно — не нужно писать фиктивный.

Архитектура: данные, ввод и повторный запуск

Дядя Боб требует от агента архитектурных решений. До того, как писать логику, агент должен продумать структуру данных и проверить всё, что приходит извне, прямо на входе в систему.

Код, который изменяет данные (например, пишет в базу или обращается к внешним сервисам), агент должен писать так, чтобы повторный запуск или перезапуск после сбоя на середине приводил к тому же результату, что и первый запуск.

Важен принцип «убери лишнее перед тем, как добавлять». Прежде чем писать новый код, агент должен упростить то, что уже есть: например, удалить ненужные ветки, обёртки и дубли. Новая функциональность ложится уже на расчищенную основу.

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

Первопричина вместо заплатки

В разделе Then Make it Right Мартин требует искать первопричину ошибки, а не маскировать симптом.

Это правило он сформулировал так: «Защитная проверка, которая только прячет падение, — это не исправление» («A guard that only hides the crash is not a fix»). Например, проверка на null уберёт падение, но не ответит на вопрос, откуда в этом месте null и может ли он там быть по модели данных. Иногда guard и в самом деле нужен, но правило требует понять причину сбоя, а не считать защитную проверку достаточным исправлением.

По той же логике скилл запрещает агенту глушить ошибки компилятора: заглушённая ошибка прячет проблему, как и проверка на null.

Спрятать баг может и сам тест. Поэтому Мартин требует, чтобы тесты проверяли поведение [5] так, как его видит пользователь кода. Если тест пройдёт даже тогда, когда каждая функция возвращает пустой результат, этот тест надо выбросить.

На тестах, которые проверяют поведение [6], держится и рефакторинг: сначала тесты фиксируют, что делает код, потом агент небольшими шагами меняет структуру и на каждом шаге проверяет, что поведение не изменилось.

Проверки качества: утилиты Crapper, Dryer и Mutator

Мартин не полагается на оценку кода, которую даст сам агент. Скилл ub‑mode требует от агента прогонять код через три утилиты:

  • Crapper [7] оценивает, насколько рискованно менять каждую функцию: чем функция сложнее и чем хуже покрыта тестами — тем выше балл.

  • Dryer [8] ищет похожие фрагменты кода.

  • Mutator [9] вносит в код мелкие ошибки и смотрит, увидят ли тесты проблему.

По итогам проверок агент должен разбить или покрыть тестами рискованные функции, убрать дубли, дописать тесты там, где ошибки прошли незамеченными, и удалить мёртвый код. Пороги Мартина (риск меньше 10 для каждой функции, дубли с похожестью от 0,8) — его личные требования, здесь каждый решает сам.

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

Журнал решений, worktree и коммиты

Последний блок скилла, Practice, описывает рабочую дисциплину. Агент должен фиксировать все свои действия и причины решений, беречь контекстное окно, делать небольшие коммиты и не удалять Git‑worktree, если в нём есть незакоммиченные изменения. В сообщении коммита должны быть изложены причина, суть изменения и способ проверки.

Есть пункт, который командам придётся адаптировать: скилл требует в конце работы отправлять изменения в основную ветку. Это правило нельзя переносить без изменений, если в команде обязательны pull request, ревью и CI. Скилл задаёт предпочтения Мартина, а не универсальную политику.

Встраивать работу агентов в командный процесс учит программа Хекслета «AI SDLC [10]»: от спецификации и ревью до CI/CD.

Как подключить ub‑mode

В README описан простой способ: скопировать SKILL.md в каталог skills своего агента. Для Claude указан путь ~/.claude/skills/ub‑mode/SKILL.md; в примерах есть Grok и Cursor. Затем вызовите скилл командой /ub‑mode.

Для полноценной работы скилла нужно самостоятельно установить Crapper, Dryer и Mutator.

Для тестирования скилла можно взять небольшую задачу с понятным ожидаемым результатом. После выполнения работы нужно посмотреть, написал ли агент падающий тест до того, как изменить код, ограничился ли нужным диффом и какие проверки действительно выполнил. Одна удачная правка ничего не скажет об эффективности скилла.

Работу с агентами, контекстом и проверкой результата мы разбираем на курсе Хекслета «ИИ для разработчиков [11]».

В README и SKILL.md нет результатов сравнительных испытаний: неизвестно, насколько хорошо агенты соблюдают эти инструкции и насколько этот скилл уменьшает количество проблем в коде.

Вопросы и ответы

Что такое ub‑mode?

Это файл с инженерными правилами для агента, от TDD до проверок качества и коммитов.

С какими агентами можно использовать ub‑mode?

В 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

www.BrainTools.ru

Rambler's Top100