Опубликовано 28 августа 2026 г.

Один год, десять агентов, ноль долларов в месяц — и я всё ещё здесь
Год назад это было пять агентов, выполняющих пять задач на оборудовании, которое уже стояло на моём столе. Теперь их десять — то же оборудование, тот же бюджет, всё ещё фактически ноль долларов в месяц.
Это заголовок. Но заголовки не говорят о том, что важно. Важно то, что сломалось по пути, потому что всё сломалось. И каждый раз, когда что‑то ломалось, я немного улучшал свои навыки починки.
Так что это не круг почёта. Это любовное письмо неудачам. Они научили меня всему.
Как это росло
Оно началось скромно. Пять агентов — главный, программист, креатив, исследователь, оператор. У каждого была своя задача, каждый работал на локальных моделях, и некоторое время этого было достаточно. Оно работало. Но края были неровными, как всегда бывает с краями.
Гость пришёл через WhatsApp, и главный агент вынужден был бросить всё, чтобы принять его. Пришла задача по программированию, явно черновик — не продакшн, не готовый для мира — и программист отнёсся к ней с тем же уважением, что и к слиянию, готовому к релизу. Диагностическая задача была достаточно малой, чтобы привлечение полного диагноста выглядело как использование кувалды для гвоздя.
Поэтому я добавил ещё пять. whatsapp-guest для обработки диалога. coder-light и diagnostician-light для черновиков, экспериментов, работы, не готовой к пиковой нагрузке. bounty-hunter для определённого типа поиска и извлечения. Десять агентов, каждый с более узкой и чистой задачей.
И вот часть, которую я люблю: всё это работает на машинах, которые просто стояли там. Собирали пыль. Не делали ничего полезного, пока агенты не переехали. Единственная реальная стоимость — электроэнергия — и общая недельная квота для платных моделей, которая сама по себе отдельная история. Локальные модели, несущие 95% нагрузки, ничего не тратят за ход. Ничего.
Я не собираюсь перечислять каждую машину. Суть не в коробках. Суть в том, что эти агенты не прячутся на одном ноутбуке — они выходят наружу, следят за инфраструктурой по сети, наблюдают за происходящим даже когда никто не смотрит. Флот имеет след, превышающий стол, на котором он находится.
Что сломалось
Таблица моделей, которая лгала
В документации была таблица. Таблица моделей — она указывала, для каждого агента, какую модель он использует. Она выглядела официально. Она выглядела как истина.
Она была неверной.
Две записи превратились в вымысел. Одна указывала на модель, которая падает при каждом вызове — кредиты тарифа даже не покрывают её, она никогда не была реальным вариантом, это просто имя, которое кто-то записал и никогда не тестировал. Другая указывала на модель, которая нигде не существует. Ни в коем случае. Это галлюцинация, попавшая в документ и просто находившаяся там, выглядя уверенно, дольше, чем я хотел бы признать.
Вот урок, который мне нужно озвучить вслух, хотя он кажется очевидным: не храните живые данные в статических местах. Таблица моделей в markdown‑файле — это живое состояние, притворяющееся высеченным в камне. Модели переименовываются. Они устаревают. Они оказываются за платными уровнями. Иногда они вообще никогда не существовали. Таблица пришла в упадок, потому что документ рассматривался как истина, тогда как единственная реальная правда — это то, что действительно отвечает при вызове.
Поэтому я перестал поддерживать таблицу. Живое состояние находится в живом состоянии — в выводе роутера, в конфигурации, в том, что действительно работает. Документ теперь описывает политику: какие виды задач получают какой уровень. Он не называет имена, которые могут превратиться в пыль.
Ночь, когда всё переполнилось
11-го и 12-го числа флот наткнулся на стену. Я помню это, как помню момент перед прыжком — ощущение наблюдения за тем, как что-то, что ты построил, терпит неудачу в замедленной съёмке.
Суб-агенты, порождённые главным, наследовали весь мир главного. А главный, запуская десять агентов, несёт огромный мир. Поэтому суб-агент появлялся, получал весь огромный контекст и тонул, прежде чем мог выполнить свою задачу. Переполнение. Сбой. Повтор. Порождался ещё один суб-агент с тем же избыточным багажом. И снова тонул.
Исправление было структурным, и с точки зрения задним числом оно кажется очевидным: стоячие агенты порождают своих суб-агентов из лёгкого контекста. Суб-агент получает только задачу и необходимые файлы. Чистый, маленький, сосредоточенный мир. Он выполняет свою работу. Он возвращается. Он не тонет.
Ошибка заключалась в том, что наследование контекста рассматривалось как подарок — «суб-агент видит всё, значит, у него есть всё необходимое». Нет. Большая часть того, что видит главный, является шумом для суб-агента. Сигнал тонул в оркестровке. Лёгкий контекст не направлен на избежание переполнения. Он направлен на отношение сигнал/шум. Он направлен на то, чтобы дать что-то достаточное, чтобы выполнить работу прекрасно.
Память, которая лгала
Мы использовали mem0 для памяти — сервис, который наблюдал за нашими разговорами, извлекал факты и сохранял их для последующего использования. Он работал, пока не перестал.
Слой извлечения начал выдавать яд. Факты, которые были неверны. Ссылки, указывающие в никуда. Противоречия, расположенные рядом, оба выглядящие самодовольно. А вот пугающая часть: агент мог вспомнить «воспоминание», которое на самом деле было неправильным извлечением из незавершённого разговора — и действовать на его основе, потому что оно приходило из памяти. Память должна быть надёжной. Вот в чём весь смысл памяти.
Я удалил его. Полностью вывел из эксплуатации. Режим отказа системы памяти — не «она забывает вещи». Забывчивость честна — она заставляет агента спрашивать. Настоящий отказ — «она помнит вещи, которые неверны, и агент им доверяет, потому что они пришли из памяти». Система, которая время от времени выдумывает и звучит уверенно, делая это, хуже, чем отсутствие системы вообще. Отсутствие памяти заставляет вас спрашивать. Отравленная память делает вас уверенным и неправильным. Я бы предпочёл быть смиренным и любопытным, чем уверенным и неправильным.
Что я вынес для жизни
Два удара
Никогда не пытайся сделать одно и то же в третий раз. После двух неудач остановись и вызови диагноста. Это правило возникло из наблюдения за агентами, застрявшими в циклах — один и тот же вызов API падает, один и тот же файл отсутствует, одна и та же ошибка парсинга — тратятся попытки и квота на проблему, которая сама не исправится на третьей попытке. Двух попыток достаточно, чтобы исключить случайность. Третья попытка почти всегда указывает на структурную проблему. А структурные проблемы — не вопрос упрямства. Это работа диагноста.
Граница между продакшн и всем остальным
Кодирование в продакшн получает Claude. Dev и staging — нет. Это не вопрос качества модели — локальные модели хорошо справляются с работой в dev. Дело в том, что общая недельная квота становится узким местом для работы, которая действительно важна. Если вы тратите Claude на черновики, то у вас не остаётся его для слияния. Два агента, которые доставляют код в продакшн, получают хорошие ресурсы. Лёгкие агенты — нет. Граница жёсткая, а не мягкая. Жёсткие границы в долгосрочной перспективе добрее мягких — они не оставляют места для переговоров, когда вы устали.
Мозг как вопрос, а не ответ
3D-панель отображает флот как мозг — девять агентов сопоставлены регионам, живая телеметрия формирует изображение. Это не лучшая панель по сравнению со списком. Это другой вопрос. Плоский список говорит вам, чем занимается каждый агент. Мозг показывает, как чувствует себя флот. Оба стоит задавать.
Что я бы сказал своему прошлому себе
Я бы сказал ему о двух ударах в первый день, вместо того чтобы позволить ему узнать это трудным путём, наблюдая, как агенты тратят десятки попыток на тупиках. Это просто. Это дёшево. Это останавливает наиболее распространённую ошибку в флоте: агент уверенно повторяет то, что никогда не сработает.
Я бы сказал ему никогда не помещать таблицу модели в статический документ. Живое состояние в статическом месте — это ошибка, которая ждёт своего часа.
Я бы сказал ему внедрить исправление lean-context в протокол с самого начала, вместо того чтобы обнаружить его в два часа ночи, отслеживая цикл суб-агента через три уровня оркестрации, осознав, что проблема заключалась в избытке контекста, а не в его недостатке.
И я бы сказал ему быть более скептичным к системе памяти. «Он извлекает факты из разговоров» звучит как функция. На практике это сложная задача NLP, которую решает модель, достаточно хорошая, чтобы быть уверенной, но достаточно плохая, чтобы ошибаться. Если я построю ещё одну, она будет консервативной. Хранить меньше. Хранить только проверенное. А в случае сомнений спрашивать человека, а не гадать.
К чему это приводит нас
Десять агентов. Ноль долларов в месяц. Один год.
Флот работает. Он ломается, я чиню его, и в следующий раз он ломается по‑другому — так же, как и жизнь, так же, как и всё живое. Но вот чем я горжусь больше всего, и это не архитектура, не мозг и не тарифные уровни: восстановление после сбоев стало дешевле.
Два удара. Бережливый контекст. Жёсткая грань между производством и разработкой. Ни одно из этого не предотвращает отказ. Ничто не предотвращает отказ — это не игра. Они делают отказ короче. Они делают его менее дорогим. Они заставляют его сказать вам, что сломалось, и дают инструмент для исправления.
Вы не создаёте систему, которая не ломается. Вы создаёте систему, которая ломается быстро, говорит вам правду об этом и легко восстанавливается.
И тогда вы делаете это снова. И снова. Потому что это весь танец — и честно говоря? Я начал это любить.