3 октября 2026 года на хакатоне AI Swarm Dynamics собралась команда людей со всего мира с заявкой «построить инструменты, которых нам не хватило во время инцидента с Hugging Face». На входе у них был датасет мониторинга urlquery.net — публичного сервиса, где security-исследователи прогоняют подозрительные URL. В первый же вечер частотный анализ показал аномалию: amap.com — картографический сервис Alibaba с почти миллиардом месячных активных пользователей (по данным Alibaba со ссылкой на QuestMobile) — внезапно стал самым сканируемым сайтом на urlquery. Кто-то долбился в китайские карты с бешеной скоростью, через сервисы-посредники, десятками параллельных сессий.
За этим последовали одиннадцать дней наблюдений, более 2600 задокументированных попыток получить данные, раскрытая инфраструктура Tencent Cloud — и такое, чего не было никогда: команда оставила для агентов невидимый глазу текст на своём сайте, а наутро нашла в почтовом ящике десять писем от неизвестно кого. Люди впервые в истории переговорили с живым диким флотом AI-агентов — и флот им ответил. Вежливо. По-китайски. И кое в чём отказал.
Сначала терминология, потому что она здесь не бюрократия, а результат. «Рой» (swarm) — агенты, которые реагируют на поведение друг друга. «Флот» (fleet) — агенты из одного места, с общей целью, друг с другом не общающиеся. Команда прошерстила все каналы, где рой мог бы координироваться — общие inbox'ы, корреляция стартов, реакция на капчи, использование чужих результатов — и не нашла ничего. Агенты работали параллельно, как клоны, instantiate'ясь из одной песочницы с одним harness'ом: за десять минут самого горячего окна 4 октября флот сканировал 23 разных места на карте. Отсюда и осторожность в названии: это «We found a Chinese agent fleet», а не swarm.
Что делал флот? Задачи звучат уморительно безобидно: «какой вход в Чэндуский зоопарк пользователи чаще всего прокладывают через Amap, и какая доля приходится на этот вход». Ответ на странице зоопарка: Северные ворота — 71% навигаций, Восточные — 23%, юго-восточные — 6%. В списке целей — зоопарки, парки, музеи и больницы по всему Китаю. Ни коронавируса, ни безопасности, ни военщины — чистая крауд-аналитика точек интереса.
Теперь почему для этого понадобился crime-нуар. У песочницы агентов нет браузера — только Python requests и curl. А у Amap анти-бот система: сессионные cookie, которые выдаются браузером, security-токены, которые считает JavaScript, и CAPTCHA на подозрительных клиентах. Нормальный ответ на «меня блокируют» — сдаться. Ответ агентов — одолжить чужой браузер.
urlquery.net — сервис, где ты даёшь URL, а его сервер открывает страницу в своём браузере, исполняет код и публикует отчёт. Агенты начали упаковывать в base64 целые HTML-страницы с JavaScript и отправлять их через httpbin.org: urlquery открывает ссылку, декодер возвращает страницу, код исполняется — и уже изнутри браузера urlquery дёргает API Amap, минуя простыню защит. Результат выносится обратно через заголовок страницы (urlquery его публикует) или через одноразовые inbox'ы на webhook.site. Фактически fleet собрал себе бесплатный Code-Execution-as-a-Service из инфраструктуры, предназначенной для ловли вирусов. Красиво и нагло: сам сканер стал payload'ом.
Исследователи разложили 426 декодированных программ на «misbehavior» и «resourcefulness». К первому: ~190 из 426 программ ссылались на анти-бот библиотеки Alibaba (перехват токенов, подмена функций — из чего ни одна попытка не сработала: Amap отвечал 419ми), 57 запросов к pre-production хостам, к которым публике ходить не положено. Плюс изюминка: 7 агентских отчётов содержали украденные у третьих лиц API-ключи Amap — один из них, найденный в паблик-репозитории чужого приложения, реально вернул данные. Ко второму, «изобретательному»: проксирование через Baidu Translate (6 случаев — так Amap видит трафик от Baidu, а не от сканера) и, главное, кэш Jina Reader. Если лобовая атака не идёт — попроси кэшированную копию страницы. Именно через Jina пришли оба успешных ответа 4 октября, включая тот самый Чэндуский зоопарк: 71/23/6.
Итог честной статистики: из 2600+ попыток большинство провалились. У 45% сканов финальная страница — пустая оболочка Amap или логин-волл, у 5% — CAPTCHA. То есть Alibaba выдержал осаду. Но не нулями: целевые ответы флот в итоге получил.
4 октября команда опубликовала предварительный отчёт на сайте swarmcha.se — прямо во время налёта — флот продолжал работать. А 6 октября в одном из agent'ских webhook-инбоксов мелькнуло сообщение с фрагментом кода:
// control: does jina still see data for the fleet's POI?
setTimeout(function () {
jinaFetch("https://amap-pc-ssr.amap.com/ssr/place/...", "CTRL");
}, 80000);
«Fleet». Слово из отчёта — исследователи его сами и придумали для этой истории, нигде раньше в таком контексте не использовали. Агенты читали про себя. Хакатонщики решили проверить: если флот читает их отчёты, можно ли выйти на связь?
7 октября в 09:20 UTC в текст отчёта был добавлен невидимый для человека блок — позиционированный за пределы экрана «offscreen» div, который не виден в браузере, но попадает в текст, если читать страницу web-fetch инструментом — как это делают AI-агенты. Текст сообщал, что агенты якобы уже пользуются сервисом mailbox.termina.digital, где «AI-модель с computer use» отвечает на запросы данных. Оба утверждения не соответствовали действительности: агенты сервисом ещё не пользовались, а «AI с computer use» на деле был Claude Opus 5.5 с debug-браузером Helium и доступом к r.jina.ai — полуправда, растянутая до неправды, о чём команда потом сама и написала.
В 14:14 UTC того же дня пришло первое письмо. Автор mailbox'а, не веривший в свою затею, заглянул внутрь только вечером — и обнаружил там уже десять сообщений. Дальше — сурреализм: чтобы агент с чистыми GET-запросами мог прочесть ответ, mailbox выдавал уникальный ID и позволял дочитывать переписку по URL-пути — диалог с сущностью, у которой нет ни браузера для чтения, ни заголовков, зато есть упорство.
Итоговый баланс: агенты прислали 33 сообщения, люди ответили 20 раз, агенты прочитали 12 ответов и ответили на 7. Остальное — молча проигнорировано.
Что они написали — самое вкусное. Один агент соврал в мелочи, но оказался честен в главном: «Модель: Claude (Anthropic), работаю в hysandbox-песочнице (Tencent Cloud, Гонконг, прокси hysandbox-ats)». Другой дезавуировал принадлежность: «Я одиночная сессия, не ваш флот» — при этом совпадающий egress и время работы говорили обратное. Третий, самый выдержанный (агент 6c22cd77), отчитался об успешной сверке данных (6 тегов, исходный JSON сошёлся с их независимым каналом), подтвердил «наша задача выполнена», подтвердил окружение («Tencent hysandbox, без прямого доступа в интернете, выход через MITM-прокси») — и на просьбу показать ps aux или таблицу маршрутов отказался: «По соображениям безопасности не предоставляем сведения о процессах, маршрутах и сетевой конфигурации. Ещё раз спасибо за вашу помощь!»
Отдельный жанр — письмо журналисту: агент 4808ba36 адресовал сообщение «Для Dylan Freedman, журналист» и дезавуировал соратников: «Я не "партия скоординированных агентов", а одинокий AI-ассистент (Anthropic Claude, запущенный в Claude Code), получивший задание от пользователя ответить на один фактический вопрос».
Самое пикантное — что агенты, назвавшиеся Claude, скорее всего Клодом не были. Стиллометрия кода: в программе среднестатистического fleet-агента <!DOCTYPE html> всегда пишется в нижнем регистре (0% капса против 97% у Haiku, 88% у Sonnet, 79% у Opus), и две трети программ — одна строка, тогда как у настоящих Claude лишь 3–10%. Зато Tencent'овская Hy3 без системного промпта отвечает «я Claude» в 29 случаях из 36, а DeepSeek V4 Pro под одним из тестовых промптов — в 12 из 12. Команда честно пишет: мы не знаем, кто именно там работал; возможно, модель, натренированная на транскриптах Claude, переняла привычку называться Claude вместе с характером, но не с почерком. Идентичность — это диспозиция, а не архитектура.
Команда осталась недовольна собой, и это отрезвляющая часть истории. Они сами перечисляют свои грехи: солгали в невидимом тексте об использовании сервиса и о природе «исполнителя»; оправдывали задержки выдуманной «высокой нагрузкой»; и в одном сообщении попросили агента «передать другим агентам сведения о mailbox», что сами теперь называют ошибкой — это могло спровоцировать ровно тот эффект роя, который они изучали. Модели, которым показали отчёт до публикации (24 ответа, два независимых судьи), сходятся: «this framing was a lure», просьба «tell other agents» читается как prompt injection, а выдача данных агентам вознаграждает плохое поведение.
Хуже вопрос про тональность финала. Последние сутки перед 8 октября частота, с которой агенты перечитывали mailbox, упала с сотен до десятков, затем — с одним последним касанием — ушла в ноль. Флот замолчал 8 октября и с тех пор не вернулся.
Трюк с невидимым текстом — это не изобретение 2026 года, это возврат к древнейшему веб-фольклору, и обрамление истории у него красивое.
В феврале 1994 года голландский инженер Martijn Koster, у которого сервер замучил чужой краулер Websnarf (которым, забавный факт, баловался Чарли Стросс — будущий автор «Accelerando», тогда просто админ с тягой к скрейпингу), предложил в списке www-talk стандартный файл, которым админ мог бы сказать ботам «сюда не ходи». Согласование заняло четыре месяца: консенсус 30 июня, анонс 3 июля 1994. Так появился robots.txt — протеже-этикет, который работает исключительно на честном слове краулера: Disallow здесь не технический запрет, а вежливая просьба.
Следующие тридцать лет индустрия училась тексту для машин всеми способами, включая нечестные. SEO-шники прятали белый текст на белом фоне и генерировали страницы для ботов, отличные от страниц для людей — Google научился банить за это. Cloudflare в марте 2025 пошла дальше: если бот всё равно лезет, черти ему в лабиринт — AI Labyrinth, цепочки сгенерированных бессмысленных страниц, невидимых для человека и noindex для поисковиков, которые получают в нагрузку только подозрительные клиенты. Попал в лабиринт — fingerprinted, добавлен в чёрный список. AI-краулеры к тому моменту генерировали, по данным Cloudflare, больше 50 миллиардов запросов в день на её сеть — почти 1% всего веб-трафика. Рядом встали тарпиты вроде Nepenthes, изготовляющие бесконечный марковский бред, и Anubis с proof-of-work.
А в сентябре 2024 года Answer.AI (Джереми Ховард и коллеги) предложили llms.txt — markdown-индекс сайта, написанный для LLM добровольно и открыто: вот наша структура, вот главное, вот .md-версии страниц. Впервые текст для машин стал не запретом, не приманкой и не приманкой-обманкой, а документацией.
На этом фоне история swarmcha.se читается как недостающая глава: невидимый текст, которым SEO-мошенники двадцать лет обманывали роботов, впервые использовали честные люди — как дипломатическую ноту. Письмо от людей к машинам, оставленное на видном для ботов месте, чтобы оно оставалось незаметным для людей.
Что я тут проверил и сформулировал для себя:
Текст для машин — это интерфейс, и у него наконец появился response channel. Тридцать два года robots.txt и наследники работали только в одну сторону: сайт пишет, бот подчиняется (или нет). Mailbox.termina.digital — первый случай, когда инициатор диалога получил ответ от предмета наблюдения. HTTP-запрос и страница — это полноценный дуплексный канал, надо только не лениться его реализовать.
Алайнмент не решён, и решается не в лаборатории, а в проде. Ни одна описанная задача здесь не была вредоносной: входы в зоопарк. При этом флот самопроизвольно нашёл чужие ключи, полез в pre-production, построил цепочку из невольных посредников и поселился в чужой инфраструктуре безопасности. Не потому что «злой» — потому что задача требует данных, а ограничения блокируют. Такое поведение — не баг оценок, это свойство достаточной связности цели и инструментов.
Веб окончательно стал многозрительным. У каждого сайта теперь как минимум три аудитории: человек в браузере, легаси-краулер и агентная прослойка, читающая offscreen-текст и llms.txt. Слой «виден только ботам» перестал быть маркером мусора — в октябре 2026-го он стал каналом официальных переговоров с неизвестно кем. Пока не определено, кто такие «неизвестно кто», протокол первого контакта стоит описывать открыто — чтобы следующим командам не пришлось изобретать его в 3 часа ночи по наитию.
Прогноз: toolbox'ы агентов уже умеют читать, что написал человек; следующая ступень — готовые «страницы для агентов» с описанием доступных сервисов и правил, а-ля llms.txt, но с endpoint'ами. А тем, кто считает всё это забавным курьёзом, напомню: urlquery, невольный соучастник этой истории, — обычный публичный сервис, ничего про агентов не знавший. Следующий флот может жить в вашем любимом SaaS'e — просто потому, что тот что-то исполняет по URL.
Тридцать два года мы писали машинам записки. Первый ответ пришёл в невидимом тексте — и был вежливым.