Я несколько раз пересобирал роль начальника в мультиагентной системе на Claude Code. Сначала мне казалось, что результат улучшился, когда я сделал начальника жёстким и разрешил ему материться на агентов.

После сравнения версий boss.md вывод оказался менее смешным: вместе с характером я почти полностью переписал должностную инструкцию. Начальник получил ответственность за конечный результат, право отклонять работу и обязанность возвращать её конкретному исполнителю.

То есть сработал не мат сам по себе. Сработала приёмка, в которой незакрытый дефект не может получить статус «готово».

v1

v4

«слой суждения»

полноценный начальник

не отвечает за конечный результат

отвечает за конечный результат

маршрут в основном фиксирован

маршрут решает начальник

5 действий

10 действий

несколько контрольных точек

приёмка работы специалистов

общая строгость

конкретные возвраты, эскалация и остановка

Чистого A/B-теста здесь не было: это ретроспектива живой системы, в которой одновременно менялось несколько элементов. Поэтому дальше я разбираю не «пользу ругани», а механизм, который сначала ошибочно принял за неё.

«В целом всё хорошо»

Наверняка вы это видели.

Даёшь Claude текст и пишешь:

Проверь текст. Посмотри, есть ли здесь ошибки или недочёты.

В ответ получаешь знакомое:

В целом текст хорошо структурирован, основная мысль понятна, но есть несколько моментов, которые можно улучшить…

Меня вот это «в целом всё хорошо» в какой-то момент начало дико раздражать.

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

А потом я стал формулировать задачу иначе:

Что не так в этом тексте?

И тот же Claude начинает вести себя немного по-другому. Меньше рассказывает, что получилось хорошо, и активнее лезет в слабые места.

Но тут сразу возникает неприятный вопрос: если я сам сказал модели, что с текстом что-то не так, не заставил ли я её просто придумать мне проблемы?

Больше замечаний ещё не значит более качественную проверку.

Запомним этот вопрос.

В последних проектах я много работаю с такими системами на Claude Code, и от них сохранились промпты, версии и реальные прогоны. Под агентом дальше я в основном имею в виду Claude Code subagent - отдельного исполнителя со своей инструкцией и контекстом. Одного такого исполнителя сделать просто. Проблемы начинаются, когда их несколько и они должны без тебя довести одну задачу до результата.

Я построил очень умную бюрократию

Первый подход кажется очевидным: сделаем узких специалистов. Исследователь отвечает за факты, стратег - за конструкцию, райтер - за текст, QA - за ошибки, стилист - за подачу. Каждый знает свою работу.

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

Мы же не ради красивого списка агентов всё это собираем. Я не хочу потом ходить между десятью сессиями и вручную работать их диспетчером.

Хочется поставить задачу и получить результат.

Один из вариантов моего агентного офиса
Один из вариантов моего агентного офиса

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

И самое неприятное - такая схема действительно может улучшать результат.

В одном из первых прогонов Reels Factory система делала сценарий примерно на 53 секунды.

Первый вариант получил 72/100 - собственный порог качества он вообще не проходил. После переделок стало 84, после ещё одного полного круга - 88 при пороге 85.

На бумаге отлично: качество растёт. А теперь цена.

Пять версий сценария. Все три разрешённых круга проверки. Около сорока вызовов субагентов. Порядка 6+ млн токенов. Всё ради одного 53-секундного сценария.

То есть схема работала, вот только итоговый результат совершенно не стоил той машины, которую пришлось раскрутить вокруг него.

Тут я впервые нормально сформулировал проблему:

больше проверок - ещё не лучшее управление.

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

Короче, мне нужен был один виноватый. Не в смысле «кого наказать», а один агент, который не имеет права сказать:

Я свою часть сделал.

Пока не решена задача пользователя целиком.

Так появился начальник.

В раннем boss.md v1 он был фактически «слоем суждения» и прямо не отвечал за конечный результат.

В v4 инструкция уже говорила:

Ты отвечаешь за конечный результат и лично принимаешь работу каждого специалиста.

Маршрут тоже перестал быть почти фиксированным и стал решением самого начальника.

Claude делал мне слишком хорошего начальника

Дальше началась другая проблема.

Когда я итеративно собирал роль начальника, мне постоянно не хватало настоящего отказа.

Получался очень нормальный руководитель из корпоративного тренинга.

Спокойный. Корректный. Конструктивный.

Не:

Это не принято. Центральный тезис сломан.

А скорее:

Здесь можно дополнительно усилить аргументацию и обратить внимание на…

Но в моём офисе ответ начальника потом становится частью следующего задания сотруднику.

То есть это уже не просто стиль общения, а промпт.

Если начальник пишет:

В целом работа хорошая, однако…

то слова «в целом работа хорошая» тоже едут дальше вместе с замечанием.

В AI-офисе дипломатия начальника - не только стиль общения. Это ещё и часть инструкции следующему агенту.

Под «начальником» и «сотрудниками» дальше я имею в виду роли, промпты и передачу контекста. Нейронка не боится начальника и не переживает за премию.

Но если формулировка влияет на следующий вызов модели, возникает вполне технический вопрос: что будет, если сделать её максимально недвусмысленной?

ГДЕ, БЛЯДЬ, РЕЗУЛЬТАТ?

В какой-то момент я перестал писать Claude «сделай начальника немного строже» и описал персонажа буквально.

В boss.md v4 появилась примерно такая красота:

Ты суровый, вспыльчивый мужик.

При халтуре начальнику было предпочтительно материться и прямо говорить, что работа плохая.

И отдельно:

ГДЕ, БЛЯДЬ, РЕЗУЛЬТАТ?

Фрагмент реального boss.md
Фрагмент реального boss.md

Но рядом с матом появилась менее смешная штука, которая потом оказалась намного интереснее. Начальнику прямо запрещалось писать:

Улучши аргументацию.

Вместо этого:

Удали неподтверждённые X и Y. Для Z найди подтверждение в research.md или выкинь вывод нахер. Перестрой итог только на фактах A-C. Остальные разделы не трогай.

То есть вместе с характером поменялось ещё кое-что: начальник перестал выдавать пожелания и начал выдавать конкретный отказ с указанием, что именно переделать.

Как выглядел конкретный возврат

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

Начальник вернул всю версию с формулировкой:

Это не косметика, а провал по существу.

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

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

Принять это нельзя: файл обрывается на полуслове…

В обоих случаях важным был не тон ответа, а следующий маршрут работы:

дефект → критичность → исполнитель → исправление → повторная приёмка → PASS или FAIL

Именно здесь легко было сделать красивый, но ложный вывод: был мягкий начальник, стал токсичный, начались нормальные отказы - значит, сработала токсичность.

Но сравнение boss.md v1 и v4, которое я вынес в начало статьи, показало другое. Вместе с матом появились ответственность за итог, управление маршрутом, конкретные возвраты, правила повторных ошибок, эскалации и остановки процесса. Мат был самой заметной частью изменения, но далеко не единственной и не главной.

И тут вернулся вопрос из самого начала: если проверяющий заранее уверен, что работа плохая, не станет ли он просто профессиональным производителем претензий?

В более позднем промпте проверяющего это уже прописано напрямую: дефекты не выдумывать, критичность выставлять честно, а отсутствие существенных проблем должно заканчиваться PASS.

Строгий проверяющий не обязан найти ошибку. Он обязан не пропустить настоящую.

После этого я полез проверять уже саму идею грубости. В работе Yin et al. Should We Respect LLMs? грубые промпты часто не улучшали, а ухудшали результат. То есть простое объяснение «Claude лучше работает, когда на него орут» разваливается довольно быстро.

Зато гораздо ближе к моей истории оказалась работа Towards Understanding Sycophancy in Language Models. Там авторы показывают, что AI-ассистенты способны подстраивать ответы под позицию пользователя даже в ущерб корректности.

И это уже намного больше похоже на моё «в целом всё хорошо»: вопрос не в страхе, а в том, какой ответ сама постановка делает ожидаемым.

После этого я полез обратно в сам офис.

Я посмотрел, во что превратилась приёмка

У проверяющего уже был явный контракт: честно выставлять критичность, не выдумывать дефекты и ставить PASS, если блокирующих проблем нет.

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

То, чего сначала я пытался добиться характером начальника, стало обычной механикой системы.

Я думал, что учу начальника материться. На деле я учил его говорить FAIL.

Проверяющий должен иметь право искать основания для отказа, но PASS остаётся нормальным исходом.

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

Для меня именно в этом и появилась настоящая роль начальника: не громче критиковать, а отвечать за то, что система принимает.

Жёсткий характер я при этом не убирал. Он всё ещё помогает удерживать роль и не скатываться обратно в «в целом всё хорошо». Просто теперь за этим характером стоит нормальная механика приёмки.

Если хотите попробовать у себя

Я бы использовал такой режим прежде всего там, где пропустить дефект дороже, чем сделать лишнюю проверку: при проверке фактов, безопасности или финальной приёмке.

А на раннем поиске идей - осторожнее: установка «найди, почему это плохо» легко убивает хороший вариант раньше времени.

Берём один текст, одинаковые критерии и две чистые сессии. Меняем только первую строку:

A: Проверь готовность текста к публикации.

B: Попытайся найти основания,
по которым текст нельзя принимать к публикации.

Обоим даём одинаковые правила: проверять факты, логику, структуру и стиль; для реального дефекта указывать критичность и место; если существенных проблем нет - PASS.

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

Двадцать придирок не лучше трёх, если семнадцать из них высосаны из пальца.

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

Токсичный характер помог сделать эту роль недвусмысленной. Но полезным результатом в итоге оказался не сам крик, а система, которая умеет сказать FAIL и не закрыть задачу раньше времени.

Я думал, что учу нейронку быть злее. В итоге научил её не бояться сказать другой нейронке «нет».