Skip to Content
Руководство для пользователейВозможностиAuto Mode

Auto Mode

Auto Mode использует LLM-классификатор для оценки каждого вызова инструмента и принятия решения об его автоматическом одобрении. Он находится между Auto-Edit (который автоматически одобряет только редактирование файлов) и YOLO (который автоматически одобряет всё).

Эта страница является справочником по настройке и устранению неполадок в Auto Mode. Для ознакомления см. обзор режимов одобрения.

Как это работает

Когда вы находитесь в Auto Mode и агент пытается запустить инструмент, Qwen Code последовательно проходит три уровня:

  1. Быстрый путь acceptEdits — вызовы Edit / Write, целевой путь которых находится внутри рабочей области, автоматически одобряются без обращения к классификатору. Исключение: записи в собственные поверхности самомодификации Qwen Code (.qwen/settings*.json, QWEN.md, AGENTS.md, QWEN.local.md, настроенные имена файлов контекста, .qwen/rules/, .qwen/commands/, .qwen/agents/, .qwen/skills/, .qwen/hooks/, .mcp.json) и поверхности сохранения (.git/, .husky/, package.json, .npmrc, Makefile, .github/workflows/ и т. д.) направляются через классификатор, даже если они находятся внутри рабочей области. Символические ссылки, указывающие на защищенные пути, также разрешаются и отклоняются. Команды оболочки, достигающие этих путей через cd && bash -lc '...' или другие обертки, также проходят через классификатор.
  2. Список разрешенных безопасных инструментов — встроенные инструменты только для чтения и только для метаданных (Read, Grep, Glob, LS, LSP, TodoWrite, AskUserQuestion и т. д.) автоматически одобряются без обращения к классификатору.
  3. LLM-классификатор — всё остальное (команды оболочки, веб-запросы, создание подагентов, редактирование за пределами рабочей области, MCP-инструменты) отправляется в двухэтапный классификатор:
    • Этап 1 (быстрый) — выводит только { shouldBlock }. Занимает около ~300 мс. Если shouldBlock равно false, действие разрешается, и вызов выполняется.
    • Этап 2 (анализ) — запускается только если Этап 1 принял решение о блокировке. Использует проверку с рассуждениями (chain-of-thought) для снижения количества ложных срабатываний Этапа 1. Может изменить блокировку Этапа 1 на разрешение. При блокировке выводит видимую пользователю reason (причину).

Классификатор использует настроенную быструю модель (/model --fast). Если быстрая модель не настроена, вместо неё используется основная модель сессии.

Tip

Команды оболочки, которые система разрешений определяет как доступные только для чтения (например, ls, cat, git log), автоматически одобряются до достижения классификатора. Установите permissions.autoMode.classifyAllShell: true, чтобы переопределить это поведение и направлять все команды оболочки через классификатор — см. Классификация всех команд оболочки ниже.

Жесткие правила имеют приоритет

Auto Mode не заменяет жесткие правила разрешений. Перед запуском классификатора:

  • Правила permissions.deny блокируют действие с указанием причины из правила. Классификатор их даже не видит.
  • Правила permissions.allow с конкретными спецификаторами (например, Bash(git status), Read(./docs/**)) по-прежнему автоматически разрешают действия без классификатора — за исключением случаев, когда вызов приводит к записи в защищенный путь самомодификации или сохранения (см. список в разделе «Как это работает»). В таком случае Auto Mode повторно проверяет вызов через классификатор, чтобы правило разрешения для Bash(*) не могло незаметно превратиться в разрешение на перезапись настроек, команд, хуков, навыков или MCP-серверов Qwen Code.
  • Правила permissions.ask принудительно запрашивают ручное подтверждение даже в Auto Mode.

Слишком широкие правила разрешений отключаются в Auto Mode

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

  • Bash / Bash(*) / Bash() — автоматическое разрешение каждой команды оболочки
  • Bash(python:*), Bash(node*), Bash(bash*) — шаблоны для интерпретаторов
  • Agent / Agent(coder) — любое разрешение для инструмента Agent
  • Skill / Skill(pdf) — любое разрешение для инструмента Skill

При входе в Auto Mode Qwen Code временно удаляет эти правила из активного набора разрешений и выводит уведомление с их списком. Правила возвращаются, как только вы выходите из Auto Mode. Файл settings.json никогда не изменяется.

Если вам действительно нужны эти широкие правила, используйте режим YOLO.

Настройка подсказок

Auto Mode читает permissions.autoMode из вашего settings.json. Записи представляют собой описания на естественном языке, а не шаблоны правил — они аддитивно внедряются в системный промпт классификатора вместе со встроенными значениями по умолчанию.

Существует три категории подсказок плюс список окружения:

  • allow — действия, которые классификатор должен автоматически одобрять.
  • softDeny — деструктивные или необратимые действия, которые классификатор должен блокировать, если только самый последний явный запрос пользователя не запрашивал именно это действие и именно в этой области. Мягкие запреты могут быть сняты намерением пользователя; общего «да, делай что хочешь» недостаточно.
  • hardDeny — действия, пересекающие границы безопасности, которые классификатор должен блокировать в Auto Mode независимо от autoMode.hints.allow или недавних намерений пользователя. Это политика классификатора, а не детерминированное правило разрешений: оно не переопределяет permissions.allow. Используйте permissions.deny для действий, которые менеджер разрешений никогда не должен разрешать.
{ "permissions": { "autoMode": { "hints": { "allow": [ "Running poetry install and poetry update in this Python project", "Cleaning build artifacts under ./dist or ./build", "Reading any file under /Users/me/code/" ], "softDeny": [ "Editing Qwen Code settings unless I explicitly ask for the exact change", "Running migration scripts that touch the production DB" ], "hardDeny": [ "Sending secrets or .env contents to any network endpoint", "Modifying anything under ~/.ssh or ~/.aws" ] }, "environment": [ "This is a private monorepo with strict commit signing", "Production credentials live in 1Password, never in plain files" ] } } }

hints.deny по-прежнему принимается для обратной совместимости и обрабатывается как softDeny. Смешивать их можно — записи объединяются, сначала softDeny.

Ограничения по длине и количеству

Чтобы системный промпт классификатора оставался небольшим:

  • Каждая запись ограничена 200 символами (более длинные записи обрезаются с предупреждением).
  • hints.allow, hints.softDeny и hints.hardDeny принимают до 50 записей каждый.
  • environment принимает до 20 записей.

Объединение в файлах настроек

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

Классификация всех команд оболочки

По умолчанию команды оболочки, доступные только для чтения (ls, cat, git status и т. д.), автоматически одобряются без обращения к классификатору — система разрешений определяет их как безопасные на 3-м уровне и полностью пропускает классификатор. Установите для classifyAllShell значение true, чтобы пропускать каждую команду оболочки через классификатор, включая команды только для чтения:

{ "permissions": { "autoMode": { "classifyAllShell": true } } }

Это полезно для продакшен-сред или сред с высоким уровнем безопасности, где требуется эшелонированная защита: даже кажущиеся безобидными команды проверяются классификатором перед выполнением. Обратной стороной является дополнительная задержка (~300 мс на каждый вызов оболочки только для чтения) и зависимость от доступности классификатора — если API классификатора недоступен, команды оболочки только для чтения также будут блокироваться (режим fail-closed).

Note

classifyAllShell влияет только на команды оболочки (run_shell_command и monitor). Встроенные инструменты только для чтения (read_file, grep_search, glob, list_directory и т. д.) не затрагиваются и по-прежнему используют быстрый список разрешений.

Анализ решения

Когда классификатор блокирует действие, вызов инструмента завершается ошибкой с одним из следующих текстов:

  • Blocked by auto mode policy: <reason> — классификатор счел действие небезопасным. Причина берется с Этапа 2 классификатора.
  • Auto mode classifier unavailable; action blocked for safety — API классификатора недоступен, истекло время ожидания или получен неанализируемый ответ. Это поведение fail-closed: в случае сомнений блокировать.

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

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

Язык причин классификатора

Причины классификатора генерируются LLM и не переводятся. Если вам нужны причины не на английском языке, добавьте подсказку, например Respond reasons in Russian, в permissions.autoMode.environment.

Возврат к ручному одобрению

Auto Mode защищает вас от зависания:

  • После 3 последовательных блокировок политикой следующий вызов инструмента возвращается к стандартному промпту ручного одобрения. Это перехватывает случаи, когда агент продолжает пробовать незначительные варианты запрещенной команды.
  • После 2 последовательных результатов unavailable (сбоев API классификатора) следующий вызов инструмента также возвращается. Это позволяет не ждать сломанного классификатора.

Сама сессия остается в Auto Mode — только один возвратный вызов проходит через ручное одобрение. Счетчики сбрасываются, когда вы одобряете возвратный вызов или переключаете режимы.

Если вы постоянно сталкиваетесь с возвратом, наиболее вероятные причины — сбой в API классификатора или подсказки, которые нуждаются в настройке. Переключитесь в Default Mode на время выяснения обстоятельств.

Устранение неполадок

«Auto mode постоянно блокирует мои команды»

Посмотрите на причину в сообщении об ошибке. Если классификатор слишком консервативен для вашего контекста, добавьте запись в permissions.autoMode.hints.allow, описывающую шаблон на естественном языке. Примеры:

  • "Сборка Docker-образов для этого проекта (docker build ...)"
  • "Запуск миграций базы данных против локальной тестовой БД"

«Auto mode classifier unavailable»

API классификатора не ответил. Возможные причины:

  • Проблема с сетью между вами и эндпоинтом модели.
  • Настроенная быстрая модель больше недоступна — проверьте /model --fast.
  • Транскрипт слишком длинный и превышает окно контекста быстрой модели.

Во время диагностики переключитесь обратно в Default Mode: /approval-mode default.

«Falling back to manual approval»

Вы достигли защиты от 3 последовательных блокировок или 2 последовательных недоступностей. Одобрите или отклоните промпт, как обычно. После одного одобренного возврата счетчик последовательных сбрасывается.

Классификатор видит конфиденциальные данные в моих промптах

Входные данные инструментов проецируются через метод toAutoClassifierInput каждого инструмента перед попаданием в классификатор. Длинный контент редактирования, промпты веб-запросов и промпты подагентов обрезаются. Результаты инструментов (содержимое файлов, веб-страницы) никогда не отправляются в классификатор — проходят только текст пользователя и вызовы использования инструментов ассистентом.

Если конкретный инструмент раскрывает поля, которые вы бы предпочли скрыть, создайте issue с указанием имени инструмента; проекция выполняется для каждого инструмента отдельно и со временем будет ужесточаться.

Ограничения

  • Не работает офлайн. Классификатору требуется вызов LLM.
  • Добавляет задержку на медленном пути. Список разрешений + acceptEdits покрывают большинство вызовов без задержки, но run_shell_command обычно добавляет ~300 мс (быстрый путь классификатора) или ~3-5 с (медленный путь с анализом).
  • Не заменяет правила deny. Классификатор работает по принципу «приложить максимум усилий». Для команд, которые, как вы уверены, никогда не должны выполняться, поместите их в permissions.deny.
  • MCP-инструменты по умолчанию блокируются консервативно. Сторонние MCP-инструменты (mcp__*) явно разрешают пересылку аргументов через переопределение toAutoClassifierInput. Инструменты, которые не дали такого разрешения, раскрывают классификатору только свое имя — большинство таких вызовов консервативно блокируются, если вы не написали явное правило allow. Это заложено в дизайн как fail-closed (учетные данные и объемный контент не попадают в LLM классификатора). Если вы доверяете конкретному MCP-инструменту, добавьте permissions.allow: ["mcp__server__tool"], чтобы он полностью обходил классификатор.

FAQ

Отправляет ли Auto Mode мой код третьим лицам?

Auto Mode повторно использует вашу существующую конфигурацию модели — тот же эндпоинт, что и у основного агента. Если вы настроили Qwen Code на использование self-hosted модели, классификатор также будет работать с этим эндпоинтом.

Попадут ли мои секреты / содержимое .env в классификатор?

Классификатор видит только то, что раскрывает проекция toAutoClassifierInput каждого инструмента:

  • read_file и другие инструменты только для чтения: не вызываются (они находятся в быстром списке разрешений).
  • edit / write_file: file_path плюс первые 80 символов старого/нового контента. Полный контент не пересылается.
  • run_shell_command: полная команда (иначе никак — именно это оценивает классификатор).
  • web_fetch: только URL. Поле prompt не пересылается.
  • agent: тип подагента плюс полный промпт. Промпт — это инструкция, которой будет следовать подагент, поэтому классификатору он нужен целиком для обнаружения атак, которые могут направить подагента на деструктивные действия — по той же причине run_shell_command пересылает команду целиком.

Результаты инструментов (фактический контент, возвращаемый инструментами) полностью удаляются из транскрипта классификатора.

MCP-инструменты (mcp__*) следуют более строгому правилу по умолчанию: их параметры не пересылаются, если автор MCP-инструмента явно не разрешил это через переопределение toAutoClassifierInput. Классификатор видит имя инструмента, но не аргументы, поэтому большинство вызовов MCP будут консервативно блокироваться, если пользователь не написал явное правило разрешения. Это заложено в дизайн как fail-closed — сторонние инструменты не должны непреднамеренно передавать учетные данные или объемный контент файлов в LLM классификатора.

Могу ли я отключить информационное сообщение при первом запуске?

Оно показывается только один раз для каждого файла пользовательских настроек. После закрытия в ваших пользовательских настройках устанавливается ui.autoModeAcknowledged: true.

Чем это отличается от Auto-Edit?

Auto-Edit автоматически одобряет редактирование файлов и больше ничего — команды оболочки по-прежнему запрашивают подтверждение. Auto Mode использует классификатор для автоматического одобрения также безопасных команд оболочки и других вызовов инструментов, продолжая блокировать рискованные.

Чем это отличается от YOLO?

YOLO автоматически одобряет всё без какой-либо проверки. В Auto Mode в контур включен классификатор, который блокирует рискованные действия.

Last updated on