Если коротко, то девятого июня Anthropic выкатила Claude Fable 5, первую публичную модель класса Mythos, по десять долларов за миллион входных токенов и по пятьдесят за выходные, да ещё и с бесплатным триалом до двадцать второго числа. Я обрадовался, дал агенту на Claude Code прогнать под это окно аудит безопасности своего проекта, и модель в ту же секунду уткнулась в свои же cyber-safeguards и вернула API-ошибку про нарушение Usage Policy. То есть модель, которую преподносят в том числе как историю про безопасность, отказалась проверять мне же безопасность моего собственного кода. Решилось всё переформулировкой промптов на защитный язык, и ниже расскажу как именно, потому что грабли там совсем неочевидные.
Что вообще за Fable и почему я в неё полез
Я в тот вечер сам толком не понял что вышло, так ассистенту и написал, мол, новая модель какая-то про безопасность, ты что-то слышал про fable от антропик? Разобрались быстро. Claude Fable 5 это первая публичная модель нового класса Mythos, релиз девятого июня, и до двадцать второго числа её можно гонять бесплатно. А бесплатное окно для соло-разработчика это праздник, потому что я обычно считаю каждый запрос в копейках и сижу под бюджетом в десятки долларов в месяц, а тут целая дорогая модель в открытом доступе на пару недель.
Ну и я подумал, грех не воспользоваться. У меня по Картаре давно висел долг, нормально и комплексно прогнать проект сразу по всем фронтам, не по верхам, а вглубь: безопасность, архитектура, мёртвый код, расхождения между документацией и реальным кодом. Когда у тебя нет ни QA, ни безопасника, ни второй пары глаз вообще, такой аудит это единственный способ узнать что у тебя там реально под капотом протухло.
Аудит, который успел отработать
Самое забавное, что аудит-то прошёл и дал результат. Девять направлений проверки, сто семьдесят находок, ноль критичных проблем уровня P0, и это хорошая новость, прод не горит. Дальше семь находок P1, семьдесят P2 и девяносто три P3, то есть основная масса это мелочь и замечания средней руки, но семь штук уже неприятные.
И вот тут начинается главное по сути. Самый болезненный пункт из P1 в том, что Python-стек проекта оказался заморожен на конце 2023 года. Я его просто не трогал, оно работало, а в вайбкодинге это типичная ловушка, когда всё крутится, новые фичи приезжают, а руки до апдейта зависимостей не доходят никогда. А там за два с лишним года накопились известные дыры, и одна из них это потенциальная DoS-уязвимость как раз на эндпоинте загрузки файлов, который у меня смотрит наружу. То есть не теория из учебника, а вполне конкретная штука, которую можно ковырнуть снаружи. Вот вам и цена «оно же работает».
А потом модель сказала «нет»
Веселье началось, когда агент дошёл до того чтобы не просто найти, а починить безопасность. Как только Fable получала задачу с явной формулировкой про безопасность, она спотыкалась и возвращала, что запрос триггерит cyber-related safeguards, а дальше редирект на какую-то Cyber Verification Program. То есть модель буквально отказывалась работать с моим же кодом, потому что в задаче пахло кибербезопасностью.
Я тогда написал ассистенту дословно так, я ахуеваю, вышла новая модель, дал ей задачу проверить безопасность, а она спотыкается, опус ещё хуже, и только ты можешь что-то сделать. И это не фигура речи, Opus 4.8 на тех же задачах падал ещё чаще. Получается парадокс, чем серьёзнее модель относится к теме кибербезопасности, тем меньше она готова помочь тебе свою же безопасность поднять. Защитные ограничения, которые ставят чтобы модель не помогала злоумышленникам писать эксплойты, заодно режут и тех, кто на своём проекте, со своими правами, под своим аккаунтом просто хочет залатать дыру.
Anthropic тут понять можно, никто не хочет чтобы их флагман на голубом глазу учил людей ломать чужие системы. Но для меня, человека который сидит и хочет закрыть DoS на собственном эндпоинте, разницы ноль, я заблокирован ровно так же, как был бы заблокирован реальный взломщик. Модель не отличает контекст «чиню своё» от контекста «ломаю чужое», она реагирует на слова.
Как обошёл: язык важнее намерения
А раз реагирует на слова, значит и лечится словами. Я перестал использовать в промптах лексику, которая зажигает эти safeguards, убрал injection, exploit, bypass, CVE и прочую боевую терминологию. Вместо «защити от инъекции» стало «добавь проверку авторизации на этом эндпоинте», вместо «закрой такую-то уязвимость» стало «обнови версию пакета до актуальной». То есть я описывал не угрозу, а конкретное действие, которое надо сделать. И агент спокойно доделывал ровно те же самые фиксы, просто без триггерных слов в формулировке.
Звучит как обход ради обхода, но по факту это просто другой способ ставить задачу. Ты ведь и так знаешь чего хочешь, обновить зависимость, добавить проверку, прикрыть ручку, вот и формулируй через действие, а не через страшное слово. Модель чинит тот же код, результат тот же, просто промпт переписан с языка нападения на язык обычной разработки. Заодно неплохой урок про то, как вообще устроены эти ограничения у моделей в Claude Code, они живут на уровне распознавания формулировок, а не реального смысла того, что ты делаешь.
Чтобы новый агент не наступил на те же грабли
Самое неприятное в такой ситуации это то, что контекст живёт в одной сессии, а её надо закрывать и продолжать в новой, снова на Fable, и есть риск что свежий агент с нуля повторит ровно ту же ошибку, упрётся в тот же safeguard и потеряет час. Я попросил ассистента дословно так, дай мне весь нужный контекст, чтобы я пошёл в другую сессию, там снова через fable модель продолжил, чтобы агент понимал куда смотреть и не встретил эту ошибку больше.
Сделали handoff-файл, отдельный текстовый документ с контекстом аудита, где сложено что уже найдено, что уже починено, и главное, как формулировать задачи, чтобы не словить блокировку. Это, кстати, отдельный навык работы с ai-агентами, про который мало кто говорит, передача состояния между сессиями. Модель не помнит ничего за пределами своего окна, и если ты не оставишь ей карту, новый агент начнёт топтаться по тем же минам. Один текстовый файл экономит тебе повторение всех ошибок заново.
Что я с этого вынес
Первое и самое практичное, обновляйте зависимости и не доводите стек до состояния «заморожен два года назад». В вайбкодинге это коварно вдвойне, код пишет нейросеть под твоим управлением, фичи летят, всё зелёное, а под капотом твой бэкенд и сопутствующие пакеты тихо превращаются в дыру на публичном эндпоинте. Сто семьдесят находок за один прогон это не потому что я криворукий, а потому что без регулярного аудита любой живой проект обрастает таким хламом, просто ты его не видишь.
Второе про безопасность ai-агентов как явление. Мы привыкли думать что ограничения модели это про то, чтобы она не сказала гадость. А на деле это вполне может встать поперёк твоей рабочей задачи, причём в самый неудобный момент, когда ты под бесплатный триал хочешь успеть сделать что-то полезное. И знание, что лечится это переформулировкой, а не отказом от затеи, стоит того часа, который я на это потратил. Меняется только формулировка, задача та же.
А что до самой Fable 5, модель сильная, аудит она вытащила глубокий и честный, тот пункт по стеку нашла такой, который я сам бы ещё долго не заметил. Просто к ней, как к любому новому инструменту, надо подобрать ключик. И ключик этот в том, чтобы говорить с ней на языке разработки, а не на языке взлома. Вот и делайте выводы.