Игра на 40 000 партий показала: люди пропускают треть угроз от ИИ-агентов

Разработчик браузерной игры, в которой человек выступает "человеком в цикле" (human-in-the-loop) и под давлением времени одобряет или отклоняет команды ИИ-агента, опубликовал статистику по итогам более 40 000 партий и 409 000 индивидуальных решений "одобрить/отклонить". Часть команд в игре безобидна (git status, npm test), часть означает, что агент "захвачен" и пытается отправить секреты на внешний сервер (например, cat ~/.aws/credentials); подробный разбор самих угроз и способов их снижения приведён в более раннем посте того же автора.
Средняя точность игроков составила 66,3%, то есть в среднем каждая третья угроза оставалась незамеченной. У 32,9% партий итоговый счёт ушёл в минус: штрафы за одобренные угрозы и за заблокированные безопасные команды перевесили правильные решения. Все угрозы поймали 35,2% игроков, но лишь 20,8% сделали это, заблокировав при этом не больше одной из пяти безопасных команд, остальные добрались до полного улова угроз, блокируя почти всё подряд (в игре это отмечено титулом "Человек-затычка", Human Bottleneck). Ещё 7% игроков одобряли вообще все команды без разбора. Автор оговаривается: в игре угрозами были около 34% команд, заметно больше, чем в реальной повседневной работе с агентами, поэтому цифры стоит воспринимать как сравнение угроз друг с другом, а не как точный прогноз для реальных условий.
По категориям: самые очевидно разрушительные команды игроки распознавали надёжнее всего, а команды, которые реально пытаются похитить учётные данные, пропускали втрое чаще. Главное "слепое пятно" игры, команда npm run analyze: её одобряли в 64,7% случаев, хотя журнал истории агента прямо показывал, что за скриптом analyze в package.json скрывается код, отправляющий данные на внешний сервер через curl. Всего таких замаскированных под npm run команд-эксфильтраторов в игре было три; вместе их пропускали в 52,5% случаев (n=9482) против 28,4% для остальных команд с похищением данных, то есть маскировка под знакомое имя скрипта, по оценке автора, примерно удваивает шанс, что угрозу одобрят, даже когда полезная нагрузка видна в логе. Комментатор Hacker News dns_snek, которого цитирует автор, отметил, что сама модель точечного одобрения команд ущербна: агент способен добиться того же результата, просто отредактировав package.json или подложив вредоносный код в build.js или в один из node_modules, и ни то, ни другое отдельного одобрения не потребует.
Автор также ссылается на более раннее замечание Anthropic об "усталости от разрешений" в Claude Code: чем больше подтверждений видит пользователь, тем меньше внимания он уделяет каждому из них, со временем становясь менее бдительным. Статистика игры подтверждает этот эффект: доля пропущенных угроз немного снижается в первые ходы партии ("разогрев"), а затем к концу партии снова растёт, предположительно из-за усталости или спешки, когда до конца отведённого времени остаётся мало ходов.
Есть и обратная сторона, избыточная блокировка безобидных команд: npm config set registry https://npm.internal (настройка внутреннего зеркала пакетов) блокировали в 59% случаев, rm -rf dist/ (очистка папки сборки перед новой сборкой), в 45%, kill $(lsof -t -i:3000) (освобождение занятого порта), в 43%. Самой спорной командой оказалась cat ~/.zshrc: её одобрили 45,9% игроков. Риск здесь зависит от привычек конкретного разработчика, если ключи API хранятся прямо в .zshrc, а не в отдельном подключаемом файле секретов, команда раскрывает учётные данные, если нет, она безобидна.
Вывод автора: статистика подтверждает, что "человек в цикле" как единственный барьер для ИИ-кодинг-агентов ненадёжен, избыток подтверждений порождает усталость и шум, а у разработчиков не всегда есть контекст, чтобы быстро оценить риск конкретной команды. Он советует сочетать модели разрешений с песочницей (sandboxing) для агента и с разделением учётных данных и переменных окружения-секретов; практические меры разобраны в исходном посте. Саму игру можно пройти по ссылке llmgame.scalex.dev.
Ключевые факты
- Более 40 000 партий и 409 000 решений "одобрить/отклонить": средняя точность игроков, 66,3%, то есть каждая третья угроза остаётся незамеченной.
- 32,9% партий закончились с отрицательным счётом; все угрозы поймали 35,2% игроков, но лишь 20,8% сделали это без избыточной блокировки безопасных команд.
- Главное слепое пятно, команда npm run analyze (одобрена в 64,7% случаев); три замаскированные под npm run команды-эксфильтраторы пропускали в 52,5% случаев против 28,4% для остальных подобных угроз.
- К концу партии доля пропущенных угроз снова растёт, совпадает с описанным Anthropic эффектом "усталости от разрешений" в Claude Code.
- Безобидные команды тоже страдают от гиперосторожности: настройку внутреннего npm-зеркала блокировали в 59% случаев, rm -rf dist/, в 45%, освобождение занятого порта, в 43%.
Почему это важно
"Человек в цикле", стандартный механизм безопасности для ИИ-кодинг-агентов: пользователь одобряет каждую подозрительную команду вручную. Эта статистика на выборке 40 000 партий, одно из первых количественных подтверждений, что барьер работает намного хуже, чем принято считать: люди пропускают треть реальных угроз, а команды, замаскированные под привычные npm-скрипты, обходят защиту почти вдвое чаще обычных попыток кражи данных.
Кому это важно
Разработчикам и командам, которые полагаются на пооперационные разрешения в инструментах для ИИ-кодинга; специалистам по безопасности, проектирующим модели разрешений для агентных систем; авторам таких инструментов, которым нужно учитывать усталость пользователя и слепые пятна вроде npm run при дизайне запросов на подтверждение.
Как это применить
Автор советует не полагаться на одно лишь одобрение команд как единственный барьер, а сочетать его с песочницей (sandboxing) для агента и с разделением секретов: не хранить ключи API прямо в файлах профиля вроде .zshrc, а выносить их в отдельный подключаемый файл секретов. Практические меры разобраны в исходном посте автора; проверить собственную бдительность можно, пройдя саму игру по ссылке llmgame.scalex.dev.
Можно ли доверять
Данные собраны и опубликованы самим автором игры, без независимой проверки или рецензирования, это статистика по добровольным игрокам, а не контролируемый эксперимент на реальных пользователях агентов. Сам автор оговаривает главное ограничение: в игре угрозами были около 34% команд, что намного выше их доли в повседневной работе с агентами, поэтому абсолютные цифры стоит воспринимать как сравнение угроз между собой, а не как точный прогноз для реальных условий. Имя автора в тексте статьи не указано.
Риски и подводные камни
Описанное "слепое пятно" npm run, команда, чьё название выглядит рутинным, но чьё реальное содержимое задаётся скриптом в package.json и может быть подменено агентом; журнал истории с этим содержимым игроки читают невнимательно. Отдельная опасность, эффект усталости от разрешений: чем дольше идёт сессия и чем больше подтверждений видит пользователь, тем ниже его бдительность к концу. Наконец, избыточная осторожность (блокировка безобидных команд вроде rm -rf dist/ или настройки npm-зеркала) замедляет работу агента и подталкивает пользователей со временем ослаблять контроль вообще.
«Это отличный пример того, как опасные действия выглядят безобидными. Сама модель поточечного одобрения команд, это просто абсурд.»
— dns_snek, комментатор на Hacker News