Конфигурация Qwen Code
Аутентификация / API-ключи: Аутентификация (API-ключ, Alibaba Cloud Coding Plan) и связанные с ней переменные окружения (например, OPENAI_API_KEY) описаны в разделе Аутентификация.
Примечание о новом формате конфигурации: Формат файла settings.json обновлен до новой, более структурированной версии. Старый формат будет перенесен автоматически.
Qwen Code предлагает несколько способов настройки поведения, включая переменные окружения, аргументы командной строки и файлы настроек. В этом документе описаны различные методы конфигурации и доступные параметры.
Уровни конфигурации
Конфигурация применяется в следующем порядке приоритета (меньшие номера переопределяются старшими):
| Уровень | Источник конфигурации | Описание |
|---|---|---|
| 1 | Значения по умолчанию | Жестко заданные значения по умолчанию в приложении |
| 2 | Системный файл настроек по умолчанию | Общесистемные настройки по умолчанию, которые могут быть переопределены другими файлами настроек |
| 3 | Файл настроек пользователя | Глобальные настройки для текущего пользователя |
| 4 | Файл настроек проекта | Настройки, специфичные для проекта |
| 5 | Системный файл настроек | Общесистемные настройки, переопределяющие все остальные файлы настроек |
| 6 | Переменные окружения | Общесистемные или специфичные для сессии переменные, которые могут загружаться из файлов .env |
| 7 | Аргументы командной строки | Значения, передаваемые при запуске CLI |
Файлы настроек
Qwen Code использует JSON-файлы настроек для постоянного хранения конфигурации. Предусмотрено четыре расположения для этих файлов:
| Тип файла | Расположение | Область действия |
|---|---|---|
| Системный файл настроек по умолчанию | Linux: /etc/qwen-code/system-defaults.jsonWindows: C:\ProgramData\qwen-code\system-defaults.jsonmacOS: /Library/Application Support/QwenCode/system-defaults.json Путь можно переопределить с помощью переменной окружения QWEN_CODE_SYSTEM_DEFAULTS_PATH. | Задает базовый уровень общесистемных настроек по умолчанию. Эти настройки имеют наименьший приоритет и предназначены для переопределения пользовательскими, проектными или системными настройками. |
| Файл настроек пользователя | ~/.qwen/settings.json (где ~ — ваша домашняя директория). | Применяется ко всем сессиям Qwen Code для текущего пользователя. |
| Файл настроек проекта | .qwen/settings.json в корневой директории вашего проекта. | Применяется только при запуске Qwen Code из этого конкретного проекта. Настройки проекта переопределяют настройки пользователя. |
| Системный файл настроек | Linux: /etc/qwen-code/settings.json Windows: C:\ProgramData\qwen-code\settings.json macOS: /Library/Application Support/QwenCode/settings.jsonПуть можно переопределить с помощью переменной окружения QWEN_CODE_SYSTEM_SETTINGS_PATH. | Применяется ко всем сессиям Qwen Code в системе для всех пользователей. Системные настройки переопределяют пользовательские и проектные настройки. Может быть полезно системным администраторам на предприятиях для контроля над настройками Qwen Code у пользователей. |
Примечание о переменных окружения в настройках: Строковые значения в файлах settings.json могут ссылаться на переменные окружения с использованием синтаксиса $VAR_NAME или ${VAR_NAME}. Эти переменные будут автоматически разрешены при загрузке настроек. Например, если у вас есть переменная окружения MY_API_TOKEN, вы можете использовать её в settings.json так: "apiKey": "$MY_API_TOKEN".
Директория .qwen в вашем проекте
Помимо файла настроек проекта, директория .qwen проекта может содержать другие специфичные для проекта файлы, связанные с работой Qwen Code, такие как:
- Пользовательские профили песочницы (например,
.qwen/sandbox-macos-custom.sb,.qwen/sandbox.Dockerfile). - Навыки агента (Agent Skills) в директории
.qwen/skills/(каждый навык — это директория, содержащая файлSKILL.md).
Миграция конфигурации
Qwen Code автоматически переносит устаревшие параметры конфигурации в новый формат. Перед миграцией старые файлы настроек резервируются. Следующие параметры были переименованы из негативных (disable*) в позитивные (enable*):
| Старый параметр | Новый параметр | Примечания |
|---|---|---|
disableAutoUpdate + disableUpdateNag | general.enableAutoUpdate | Объединены в один параметр |
disableLoadingPhrases | ui.accessibility.enableLoadingPhrases | |
disableFuzzySearch | context.fileFiltering.enableFuzzySearch | |
disableCacheControl | model.generationConfig.enableCacheControl |
Инверсия булевых значений: При миграции булевы значения инвертируются (например, disableAutoUpdate: true становится enableAutoUpdate: false).
Политика объединения для disableAutoUpdate и disableUpdateNag
Если оба устаревших параметра присутствуют с разными значениями, миграция выполняется по следующему правилу: если либо disableAutoUpdate, либо disableUpdateNag равен true, то enableAutoUpdate становится false:
disableAutoUpdate | disableUpdateNag | Мигрированный enableAutoUpdate |
|---|---|---|
false | false | true |
false | true | false |
true | false | false |
true | true | false |
Доступные параметры в settings.json
Параметры организованы по категориям. Большинство параметров следует размещать внутри соответствующего объекта категории верхнего уровня в файле settings.json. Некоторые параметры верхнего уровня, такие как proxy и plansDirectory, остаются прямыми корневыми ключами для обеспечения совместимости.
general
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
general.preferredEditor | string | Предпочитаемый редактор для открытия файлов. | undefined |
general.outputStyle | string | Имя стиля вывода, определяющего формат ответов: встроенный (Concise, Proactive, Explanatory, Learning) или имя пользовательского стиля — его name из frontmatter, по умолчанию имя файла без .md (без учета регистра). Оставьте неустановленным или установите default для стиля по умолчанию. --output-style переопределяет его на один запуск. Измените в середине сессии командой /output-style, которая также сохраняет выбор; ручное редактирование этого файла вступает в силу при следующем запуске. Игнорируется в --bare и --safe-mode. См. Output Styles. | undefined |
general.vimMode | boolean | Включить горячие клавиши Vim. | false |
general.enableAutoUpdate | boolean | Включить автоматическую проверку обновлений и их установку при запуске. | true |
general.showSessionRecap | boolean | Автоматически показывать краткую сводку «где вы остановились» при возвращении в терминал после отсутствия. По умолчанию выключено. Используйте /recap для ручного вызова независимо от этой настройки. | false |
general.sessionRecapAwayThresholdMinutes | number | Количество минут, в течение которых терминал должен быть неактивен, чтобы при получении фокуса сработала автоматическая сводка. Используется только при включенном showSessionRecap. | 5 |
general.gitCoAuthor.commit | boolean | Добавлять трейлер Co-authored-by в сообщения коммитов git И прикреплять пофайловую git-заметку об AI-авторстве (refs/notes/ai-attribution) для коммитов, сделанных через Qwen Code. Отключение пропускает оба действия. | true |
general.gitCoAuthor.pr | boolean | Добавлять строку с указанием авторства Qwen Code в описания pull request при выполнении gh pr create. | true |
general.defaultFileEncoding | enum | Кодировка по умолчанию для новых файлов. Используйте "utf-8" (по умолчанию) для UTF-8 без BOM или "utf-8-bom" для UTF-8 с BOM. Изменяйте только если вашему проекту специально требуется BOM. | "utf-8" |
general.voice.enabled | boolean | Включить голосовой ввод в поле промпта. Также переключается командой /voice. Требуется настройка модели транскрибации (voiceModel). | false |
general.voice.mode | enum | Поведение push-to-talk: "hold" — говорить, пока удерживается клавиша, или "tap" — начать и нажать (или поставить на паузу), чтобы остановить и отправить. | "hold" |
general.voice.language | string | Предпочитаемый разговорный язык для голосовой транскрибации (например, "english", "chinese"). Оставьте пустым для автоопределения. | "" |
general.voice.keytermsFile | string | Путь к пользовательскому файлу ключевых терминов (один термин на строку, # для комментариев), который смещает голосовую транскрибацию в сторону предметных терминов. Относительные пути разрешаются от корня рабочей директории; по умолчанию используется .qwen/voice-keyterms.txt, если он присутствует. Читается только в доверенных рабочих директориях. Применяется только к моделям Qwen ASR (qwen3-asr-*). | "" |
general.voice.refineTranscript | boolean | Очищать голосовые транскрипты с помощью быстрой модели перед их вставкой — удаляет слова-паразиты и исправляет ошибки распознавания, сохраняя смысл. При сбое возвращается к исходному транскрипту и пропускается, если быстрая модель не настроена. | true |
general.cleanupPeriodDays | number | Количество дней для хранения резервных копий сессий в ~/.qwen/file-history/, используемых командой /rewind. Более старые резервные копии удаляются фоновым процессом, который запускается не чаще одного раза в день. 0 = минимальное хранение (~1 час): сохраняются сессии, затронутые за последний час, плюс текущая активная. Изменения вступают в силу после перезапуска. | 30 |
general.language | enum | Язык пользовательского интерфейса. Используйте "auto" для определения из системных настроек или код языка (например, "zh-CN", "fr"). Пользовательские коды можно добавить, поместив JS-файлы локализации в ~/.qwen/locales/. См. i18n. Требуется перезапуск. | "auto" |
general.outputLanguage | string | Язык вывода модели. Используйте "auto" для определения из системных настроек или задайте конкретный язык. Требуется перезапуск. | "auto" |
general.terminalBell | boolean | Воспроизводить звук терминального звонка при завершении ответа или запросе подтверждения. | true |
general.preventSystemSleep | boolean | Запретить переход системы в спящий режим, пока Qwen Code транслирует ответ модели или выполняет инструменты. Время простоя промпта и запросы разрешений не препятствуют спящему режиму. Считывается один раз при запуске, поэтому изменения вступают в силу после перезапуска. | true |
general.chatRecording | boolean | Сохранять историю чата на диск. Отключение также предотвращает работу --continue и --resume. Требуется перезапуск. | true |
output
| Параметр | Тип | Описание | По умолчанию | Возможные значения |
|---|---|---|---|---|
output.format | string | Формат вывода CLI. При stream-json запуски с промптом ведут себя как неинтерактивные (headless), соответствуя --output-format stream-json. Флаги, валидируемые при разборе argv (--include-partial-messages, --input-format stream-json), всё ещё требуют явного флага --output-format stream-json. | "text" | "text", "json", "stream-json" |
output.showTimestamps | boolean | Показывать метку времени [HH:MM:SS] перед каждым ответом ассистента. | false |
review
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
review.attribution | boolean | Добавлять футер с указанием модели и версии CLI (например, _— qwen3-coder via Qwen Code /review (v0.21.2)_) к телам ревью и inline-комментариям, опубликованным через /review. Отключите, чтобы публиковать ревью без видимой AI-атрибуции: футер опускается, и опубликованные комментарии и тела теряют свои маркеры **[Critical]**/**[Suggestion]**. Публикации остаются идентифицируемыми в исходном коде: каждая несёт невидимый маркер критичности (<!-- qwen-review critical -->), а тело ревью несёт маркер реестра (<!-- qwen-review-ledger ... -->) — всё, что читает тела комментариев (автоматизация GitHub API, рабочие процессы, с которыми связана эта настройка), по-прежнему распознаёт артефакт /review, и проверка на дубликаты перед отправкой распознаёт более ранние публикации той же учётной записи по маркеру критичности, хотя публикации без атрибуции от других аккаунтов не обнаруживаются. Другое следствие: режим Critical-only qwen-autofix (включаемый после раунда 5 или раньше, когда срабатывает бюджет роста диффа в окне подсчёта) больше не распознаёт опубликованные находки как Critical и откладывает их. Отключение также скрывает модель из маркера машинного реестра, встроенного в тело ревью, поэтому в свежем окружении (CI, другой клон — везде, где нет кэша ревью) инкрементный якорь, восстановленный из последнего опубликованного ревью, не проходит проверку same-model, и повторное ревью возвращается к полному диапазону. | true |
review.effort | enum | Уровень усилий по умолчанию для /review, если не задан ни --effort, ни явно указанный и запомненный проектом уровень: "low", "medium", "high" или "auto" (встроенное правило: high для PR, medium для локальных изменений). Явный или запомненный уровень имеет приоритет; активный --comment по-прежнему принудительно устанавливает high, а --fix по-прежнему устанавливает минимум medium. | "auto" |
review.comment | boolean | Рассматривать каждый PR /review так, как если бы был передан --comment: результаты публикуются в pull request без этого флага. Публикация по-прежнему привязывается к PR, указанному при вызове. Включайте, только если вы всегда хотите публиковать ревью. | false |
review.severityFloor | enum | Минимальная критичность, которую PR /review публикует, если --severity-floor не задан: "auto" (адаптивное по раундам значение по умолчанию — Suggestions публикуются до раунда 5 включительно, только Criticals начиная с раунда 6, при этом Suggestions с высокой уверенностью, которые иначе были бы опубликованы, и Critical, классифицированный как fails-closed на новой поверхности, записываются и откладываются, а раунды 2–5 откладывают новые Suggestions для кода, не изменённого с предыдущего раунда; находки с низкой уверенностью и Nice-to-have остаются только в терминале), "critical" (эта позиция с раунда 1) или "suggestion" (Suggestions публикуются в каждом раунде; конвергентная позиция отключается). Цели, не являющиеся PR, не имеют раундов и игнорируют этот параметр. | "auto" |
review.reverseAuditRounds | number | Снизить лимит раундов цикла обратного аудита для каждого ревью с высоким effort. Лимит определяется топологией диффа (10 — небольшой / 5 — чанковый; огромный diff — 3 с дедлайном ревью и 5 без). Может только снизить применимый уровень: значение ниже 3, выше уровня или не целое положительное число игнорируется. Снижение лимита не ускоряет сходимость ревью — цикл завершается после двух последовательных сухих раундов — оно чаще останавливает ревью до сходимости, и каждый такой останов ограничивает вердикт уровнем Comment. | 0 (не задано) |
Эти параметры читаются только из операторских областей (User, System и SystemDefaults); значения в .qwen/settings.json рабочего пространства игнорируются, чтобы репозиторий не мог задавать политику ревью для своих ревьюеров.
ui
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
ui.theme | string | Цветовая тема для UI. Доступные варианты см. в разделе Themes. | "Qwen Dark" |
ui.customThemes | object | Определения пользовательских тем. | {} |
ui.brand.name | string | Имя продукта, которое Web Shell отображает в боковой панели, приветственном заголовке, панели «О программе» и заголовке вкладки браузера. Очищается до одной строки, ограничение — 80 символов. Читается только из операторских областей (User, System, SystemDefaults) — .qwen/settings.json рабочего пространства не может изменить бренд оболочки. Значение-плейсхолдер, которое подстановка изменила бы ($VAR/${VAR} с установленной переменной), отклоняется с предупреждением в stderr демона, поскольку источник подстановки является общим для процесса и рабочее пространство могло бы его указать; неразрешимый плейсхолдер сохраняется дословно, поэтому переменная с опечаткой отображается как буквальный текст, а не тихо заменяется фолбэком. Нельзя редактировать со страницы настроек в браузере. Баннер терминала имеет собственную отдельную настройку — ui.customBannerTitle. | "" |
ui.brand.logoPath | string | Путь к SVG-файлу, используемому как логотип в боковой панели Web Shell и favicon браузера. Начальный ~ раскрывается, относительный путь разрешается относительно директории файла настроек, в котором он объявлен. Должен быть обычным файлом (не символической ссылкой и не доступным более чем через одну жёсткую ссылку) размером не более 32 КиБ — на диске и после декодирования в UTF-8 — корневой элемент которого является namespaced <svg> (атрибут xmlns или привязка xmlns:svg к корню с префиксом делает его пригодным для отображения как изображение). Плейсхолдеры переменных окружения, которые разрешаются, отклоняются, как и в случае с ui.brand.name. Читается только из операторских областей. Отклонённый файл записывает предупреждение в stderr демона и возвращается к встроенному логотипу. Корневой <svg> без пригодного viewBox или явной положительной ширины/высоты принимается, но записывает информационное сообщение; то же самое относится к корню с префиксом, элементы которого без префикса не имеют привязки к пространству имён по умолчанию, поскольку браузер может отобразить его пустым при фиксированном размере боковой панели. | "" |
ui.statusLine | object | Конфигурация пользовательской строки состояния. Поддерживает опции command, refreshInterval, respectUserColors и hideContextIndicator. См. Status Line. | undefined |
ui.hideWindowTitle | boolean | Скрыть заголовок окна. | false |
ui.hideTips | boolean | Скрыть все подсказки (при запуске и после ответа) в UI. См. Contextual Tips. | false |
ui.hideBanner | boolean | Скрыть ASCII-логотип и информационную панель при запуске. Подсказки и поле ввода чата продолжат отображаться, если только не установлен ui.hideTips. | false |
ui.customBannerTitle | string | Заменить заголовок >_ Qwen Code по умолчанию в информационной панели баннера. Суффикс версии (vX.Y.Z) всегда добавляется; строки аутентификации, модели и пути не затрагиваются. Очищается; ограничение — 80 символов. | "" |
ui.customBannerSubtitle | string | Необязательная строка подзаголовка, отображаемая между заголовком баннера и строкой аутентификации/модели вместо пустой строки-разделителя. Очищается; ограничение — 160 символов. Пустое значение (по умолчанию) сохраняет исходный пустой разделитель. | "" |
ui.customAsciiArt | string | object | Заменить ASCII-логотип QWEN в баннере. Принимает встроенную строку (используется для обоих уровней ширины), { "path": "./brand.txt" } (относительные пути разрешаются относительно каталога файла настроек; читается один раз при запуске с флагом O_NOFOLLOW в POSIX, ограничение — 64 КБ) или { "small": ..., "large": ... } для выбора в зависимости от ширины. Очищается; ограничение — 200 строк × 200 столбцов на уровень. | undefined |
ui.showLineNumbers | boolean | Показывать номера строк в блоках кода в выводе CLI. | true |
ui.renderMode | string | Режим отображения Markdown по умолчанию. Используйте "render" для богатого визуального предпросмотра или "raw" для отображения исходного Markdown по умолчанию. Переключается во время сессии с помощью Alt/Option+M; в macOS терминал должен отправлять Option как Meta. См. Markdown Rendering. | "render" |
ui.showCitations | boolean | Показывать цитаты для сгенерированного текста в чате. | false |
ui.history.collapseOnResume | boolean | Сворачивать ли историю по умолчанию при возобновлении сессии. Можно переключить с помощью /history collapse-on-resume и /history expand-on-resume. | false |
ui.history.collapsePreviewCount | number | Количество последних реплик пользователя, которые остаются видимыми, когда включен ui.history.collapseOnResume. 0 сворачивает всю восстановленную историю по умолчанию; -1 показывает всю восстановленную историю. | 0 |
ui.compactMode | boolean | СНЯТО С ИСПОЛЬЗОВАНИЯ везде. CLI теперь всегда показывает компактное представление инструментов на основе типов в основной ленте; нажмите Ctrl+O для переключения расширенного режима (развернуть или свернуть все блоки размышлений и выводы инструментов встроенно) вместо переключения режима, а веб-оболочка теперь также фиксирует компактный вид. Ключ сохранён только для того, чтобы существующие файлы настроек не выдавали предупреждение; записи принимаются, но значение нигде не читается. | false |
ui.showToolCallDetails | boolean | Показывать аргументы и результаты инструментов встроенно. Установите false, чтобы отображать обычные вызовы инструментов в виде однострочной сводки. Нажмите на строку в Virtualized History или Ctrl+O, чтобы развернуть подробности. Запросы подтверждения, пользовательские команды оболочки и сфокусированные интерактивные оболочки остаются развёрнутыми. | true |
ui.showToolCallArgs | boolean | Отображать вызовы инструментов на отдельной строке с полными необработанными аргументами встроенно, вместо компактной сводки на основе типов, которая сворачивает пакеты чтения/поиска/списка в Read 3 files. Восстанавливает параметры, которые описание каждого инструмента сводит в резюме (например, Edit обычно показывает только имя файла). Полезно при отладке интеграций MCP или схем инструментов. Строка аргументов ограничена 2 перенесёнными строками (и не более 1000 символов), чтобы пакет ожидающих вызовов не мог превысить размер терминала; нажмите Ctrl+O, чтобы снять ограничение и развернуть также вывод результатов. Два случая сохраняют компактный вид: группы запущенных параллельных субагентов, которыми управляет живой ростер агентов — их развёртывание раздувает живую рамку за высоту терминала (#5798) — и сессии, подключённые к демону, которые не переносят аргументы через границу демона. Используйте Ctrl+O в этом случае. Только TUI — веб-оболочка не затрагивается. | false |
ui.shellOutputMaxLines | number | Максимальное количество строк вывода shell, отображаемых встроенно. Установите 0, чтобы отключить ограничение и показывать полный вывод. Скрытые строки отображаются с помощью индикатора +N lines. Ошибки, пользовательские команды с префиксом !, подтверждение инструментов и сфокусированные встроенные shell всегда показывают полный вывод. | 5 |
ui.enableWelcomeBack | boolean | Показывать диалог приветствия при возвращении в проект с историей диалогов. При включении Qwen Code автоматически определит, возвращаетесь ли вы в проект с ранее созданным резюме проекта (.qwen/PROJECT_SUMMARY.md), и покажет диалог, позволяющий продолжить предыдущий разговор или начать заново. Если вы выберете Начать новую сессию чата, этот выбор будет запомнен для текущего проекта до изменения резюме проекта. Эта функция интегрируется с командой /summary и диалогом подтверждения выхода. | true |
ui.accessibility.enableLoadingPhrases | boolean | Включить фразы при загрузке (отключите для улучшения доступности). | true |
ui.accessibility.screenReader | boolean | Включает режим экранного чтеца, который адаптирует TUI для лучшей совместимости с программами экранного доступа. | false |
ui.customWittyPhrases | array of strings | Список пользовательских фраз для отображения во время загрузки. Если указан, CLI будет циклически отображать эти фразы вместо стандартных. | [] |
ui.showResponseTokensPerSecond | boolean | Показывать оценку токенов/сек в реальном времени рядом со счетчиком токенов ответа во время потоковой генерации модели. Это индикатор скорости генерации, а не расчетное время или процент выполнения. Вступает в силу в следующей сессии. | false |
ui.enableFollowupSuggestions | boolean | Включить followup suggestions, которые предсказывают, что вы хотите ввести следующим после ответа модели. Подсказки появляются как текст-заполнитель и принимаются с помощью Tab, Enter или стрелки вправо (которые заполняют поле ввода — они не отправляют его автоматически). Включено по умолчанию; установите false, чтобы отключить. | true |
ui.enableCacheSharing | boolean | Использовать кэш-ориентированные разветвленные запросы для генерации подсказок. Снижает затраты у провайдеров, поддерживающих кэширование префиксов (экспериментально). | true |
ui.enableSpeculation | boolean | Спекулятивно выполнять принятые подсказки до отправки. Результаты появляются мгновенно при принятии (экспериментально). | false |
ui.showStatusInTitle | boolean | Показывать имя сессии Qwen Code и статус в заголовке окна терминала. | true |
ui.disableWorkflowKeywordTrigger | boolean | Если true, упоминание слова workflow в промпте больше не направляет запрос к инструменту Workflow (и индикатор workflow active в нижней панели скрывается). Применяется только при включенных рабочих процессах. | false |
ui.enableUserFeedback | boolean | Показывать необязательный диалог обратной связи после завершения диалога, чтобы помочь улучшить работу Qwen. | true |
ui.compactInline | boolean | УДАЛЕНО. Удалено вместе с ui.compactMode — компактный вид теперь всегда включён как в TUI, так и в веб-оболочке. Старая настройка тихо игнорируется (без предупреждения при запуске). | N/A |
ui.useTerminalBuffer | boolean | Отображать историю диалога во встроенном прокручиваемом окне приложения вместо буфера прокрутки терминала. Включено по умолчанию в совместимых интерактивных терминалах, чтобы избежать мерцания, лавины прокрутки и зависания интерфейса в длинных сессиях, после Ctrl+O, после Ctrl+E / Ctrl+F (развернуть), после изменения размера окна или при переключении обратно через Alt-Tab. Режим экранного чтеца и неинтерактивный вывод (например, перенаправленный stdout или CI) вместо этого используют только добавление в терминал. Прокручивайте с помощью Shift+↑/↓ (строка), PgUp/PgDn (страница), Ctrl+Home/End (начало/конец) или колеса мыши. Также включает взаимодействия мыши: клик по пункту меню/диалога выбирает его, наведение выделяет его, а клик в поле промпта позиционирует курсор. При включении НЕ используется буфер прокрутки хост-терминала. Перетаскивайте для выделения текста в окне просмотра (двойной/тройной клик выделяет слово/строку), копирование при отпускании. Чтобы использовать собственное выделение терминала, удерживайте Shift (или Option в macOS) при перетаскивании. Одиночный клик открывает http(s) гиперссылку под указателем (другие схемы ссылок копируются в буфер обмена), а правый клик по ссылке или выделенному тексту открывает контекстное меню приложения. Эти взаимодействия мыши управляются настройкой ui.mouseTracking; отключите её, чтобы полностью вернуть мышь терминалу. | true |
ui.showScrollbar | boolean | Показывать автоскрывающуюся полосу прокрутки во встроенном прокручиваемом окне приложения (Virtualized History). Полоса появляется при прокрутке и исчезает в режиме простоя. Отключите, чтобы скрыть её полностью. Применяется только в интерактивном терминальном UI. | true |
ui.mouseTracking | boolean | Включить встроенное SGR-отслеживание мыши в приложении. Пока оно включено, Qwen Code перехватывает события мыши для выделения текста, позиционирования курсора кликом в текстовых полях, наведения на строки, переключения элементов истории и прокрутки окна. Поскольку терминал передаёт все события мыши в приложение, Qwen Code предоставляет собственные замены того, что терминал больше не может делать нативно: одиночный клик открывает http(s) гиперссылку под указателем (другие схемы ссылок копируются в буфер обмена), а правый клик по ссылке или выделенному тексту открывает контекстное меню приложения с пунктами Open Link / Copy Link Address / Copy Selection. Отключите, чтобы полностью вернуть мышь терминалу (нативное меню по правому клику и клики по ссылкам); это отключает все взаимодействия мыши в приложении, а в Virtualized History колесо больше не прокручивает транскрипт — используйте Shift+↑/↓, PgUp/PgDn или Ctrl+Home/End вместо них (можно сочетать с ui.useTerminalBuffer: false для восстановления нативной прокрутки терминала). Применяется только в интерактивном терминальном UI. | true |
ui.hideBuiltinWorktreeIndicator | boolean | Скрыть встроенную строку ⎇ worktree-<branch> (<slug>) в нижней панели. Состояние worktree по-прежнему передается в скрипты пользовательской строки состояния через payload stdin. Оставьте по умолчанию, если только ваша пользовательская строка состояния не отображает worktree самостоятельно. | false |
ide
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
ide.enabled | boolean | Включить режим интеграции с IDE. | false |
ide.hasSeenNudge | boolean | Показывает, видел ли пользователь уведомление об интеграции с IDE. | false |
privacy
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
privacy.usageStatisticsEnabled | boolean | Включить сбор статистики использования. | true |
model
| Setting | Type | Description | Default |
|---|---|---|---|
model.name | string | Модель Qwen, используемая для диалогов. | undefined |
model.reasoningEffort | enum | Насколько интенсивно думают модели, поддерживающие рассуждения (применяется ко всем провайдерам). Задается командой /effort (low, medium, high, xhigh, max). Каждый провайдер сопоставляет и ограничивает это значение в соответствии с возможностями активной модели (например, Gemini ограничивает на уровне high; Anthropic ограничивает уровни, которых нет у модели). Оставьте пустым, чтобы использовать значения по умолчанию для модели/провайдера. | undefined |
model.baseUrl | string | Автоматически сохраняется средством выбора модели для устранения неоднозначности, когда несколько записей modelProviders имеют одинаковый идентификатор модели. Не предназначено для ручной установки — используйте селектор /model или запись modelProviders; устаревшее значение, измененное вручную, может незаметно перенаправить запросы к другому провайдеру с тем же идентификатором. | undefined |
model.sessionTokenLimit | number | Максимальное разрешенное количество записанных токенов в промпте перед отправкой следующего сообщения. -1 означает без ограничений; 0 также трактуется как без ограничений (в отличие от model.maxToolCalls, где 0 запрещает все вызовы). Если записанное количество токенов превышает лимит, следующая отправка отклоняется (сессия не прерывается). | -1 |
model.maxSessionTurns | integer | Максимальное количество ходов пользователя/модели/инструмента, сохраняемых в сессии. -1 означает без ограничений. | -1 |
model.maxWallTimeSeconds | number | Бюджет реального времени для автономных / неконтролируемых запусков, в секундах. -1 означает без ограничений. Может быть переопределен для каждого вызова с помощью флага --max-wall-time, который требует положительной длительности (90, 30s, 5m, 1h, 1.5h); минимум — 1 секунда, значения меньше секунды (500ms, 0.5) отклоняются как опечатки. Опустите флаг, чтобы вернуться к этой настройке. Прерывает выполнение с кодом выхода 55 при превышении. | -1 |
model.goalTokenBudget | integer | Окно автономного расхода, активируемое при каждой новой цели (Goal), в токенах по счётчику цели (totalTokenCount, суммарно по вызовам модели, которые цель делает в своих ходах). Цель, исчерпавшая окно, получает один завершающий ход для передачи управления, затем останавливается до возобновления, которое активирует новое окно. Если не задано, используется встроенное значение по умолчанию 30 000 000; -1 означает без ограничений. Ноль, значения выше 300 000 000 (10× значение по умолчанию, защита от опечаток), другие отрицательные, дробные или нечисловые значения отклоняются при запуске. | 30000000 |
model.goalCheckpointTimeoutSeconds | integer | Потолок одной проверки контрольной точки доказательств цели (Goal), в секундах. Длительная цель периодически сжимает свои доказательства в утверждения контрольных точек с помощью побочного вызова модели; когда проверка делает свою одну корректирующую повторную попытку, оба вызова делят этот потолок (Goals перечисляет, какие сбои получают одну попытку). Проверка, не завершённая вовремя, отклоняется как неопределённая; она учитывается в лимите затора контрольных точек только при переполнении окна доказательств, тогда как не-переполняющая проверка сохраняет серию и повторяется на более позднем ходу. Если не задано, используется встроенное значение по умолчанию 180. Должно быть целым числом от 1 до 900; другие значения отклоняются при запуске. Вызовы потоковые, поэтому транспортный таймаут на запрос (model.generationConfig.timeout, по умолчанию 120 с) ограничивает только подключение и первый ответ, а значения выше 900 отклоняются, потому что после стандартного стража времени жизни потока именно этот страж, а не данная настройка, завершает проверку. Потолок 900 фиксирован: повышение QWEN_STREAM_MAX_LIFETIME_MS его не поднимает. | 180 |
model.goalMaxTurns | integer | Окно ходов цели (Goal), активируемое при каждой новой цели. Каждый завершённый ход цели учитывается, включая ходы, инициированные пользователем; ходы пользователя всё ещё допускаются на потолке, но они могут сделать следующее автономное продолжение завершающим. Цель, достигшая потолка, получает один завершающий ход для передачи управления, затем останавливается как ограниченная использованием до возобновления, которое авторизует новое окно поверх уже завершённых ходов. Если не задано, цели выполняются без потолка ходов, и -1 явно указывает это — но отказ от потолка снимает его только с цели, уже исчерпавшей его, при следующем возобновлении или редактировании; цель, ещё не достигшая потолка, сохраняет его. Потолок активируется только для цели, созданной после изменения, поэтому ограничение уже существующей цели означает её замену через /goal set, что запускает новую цель с ревизии 1 со сброшенными счётчиками и ранее собранными доказательствами, на которые больше нельзя ссылаться, либо её очистку и начало заново. Ноль, значения выше 10 000, другие отрицательные, дробные или нечисловые значения отклоняются при запуске. Изменения вступают в силу после перезапуска. | (none) |
model.goalMaxActiveMinutes | integer | Окно активного времени, активируемое при каждой новой цели (Goal), в минутах реального времени, пока цель остаётся активной, включая ожидание и время простоя между ходами. Приостановленное, заблокированное или остановленное время не учитывается, как и время простоя при перезапуске; приостановленный процесс всё равно списывается. Цель, достигшая потолка, получает один завершающий ход для передачи управления, затем останавливается как ограниченная использованием до возобновления, которое авторизует новое окно, отсчитываемое от точки остановки. Потолок считывается между ходами, а не по таймеру, поэтому цель может выполняться значительно дольше него до остановки. Активное время измеряется между записанными переходами, поэтому время хода, прерванного перезапуском, не списывается. Если не задано, цели выполняются без потолка по времени, и -1 явно указывает это — но отказ от потолка снимает его только с цели, уже исчерпавшей его, при следующем возобновлении или редактировании. Потолок активируется только для цели, созданной после изменения, поэтому ограничение уже существующей цели означает её замену через /goal set, что запускает новую цель с ревизии 1 со сброшенными счётчиками и ранее собранными доказательствами, на которые больше нельзя ссылаться, либо её очистку и начало заново. Ноль, значения выше 10 080 (одна неделя), другие отрицательные, дробные или нечисловые значения отклоняются при запуске. Изменения вступают в силу после перезапуска. | (none) |
model.maxToolCalls | number | Суммарный бюджет вызовов инструментов для запуска (считает каждый выполненный инструмент, успешно или с ошибкой; structured_output при использовании --json-schema не учитывается). -1 означает без ограничений; 0 означает “вызовы инструментов запрещены”. Ограничено 1 000 000 для отлова опечаток. Может быть переопределено через --max-tool-calls. Прерывает выполнение с кодом выхода 55 при превышении. | -1 |
model.maxSubagentDepth | number | Максимальная глубина вложенности подагентов (уровни начинаются с 1: подагент верхнего уровня — это уровень 1). 1 оставляет подагентов доступными, но отключает вложенность — поведение до введения вложенности. Значения ограничиваются диапазоном 1–100; нефинитные значения возвращаются к значению по умолчанию. Тиммейты, форки и агенты, созданные рабочим процессом, никогда не вкладываются друг в друга независимо от этой настройки. Может быть переопределено через --max-subagent-depth. | 5 |
model.generationConfig | object | Расширенные переопределения, передаваемые базовому генератору контента. Поддерживает параметры управления запросами, такие как timeout, maxRetries, retryInitialDelayMs, retryMaxDelayMs, enableCacheControl, splitToolMedia (по умолчанию true; разделяет медиафайлы, возвращенные инструментами — включая изображения, прочитанные встроенным read_file — на последующее сообщение пользователя вместо нарушающего спецификацию сообщения role: "tool", чтобы строгие OpenAI-совместимые серверы, такие как doubao / new-api / LM Studio, могли их распознать; установите false, чтобы вернуть устаревшее поведение встраивания в инструмент), toolResultContentFormat (по умолчанию "parts"; установите "string" только для устаревших OpenAI-совместимых сред выполнения, шаблоны инструментов которых игнорируют текстовые части контента), contextWindowSize (переопределение размера контекстного окна модели), modalities (переопределение автоматически определенных входных модальностей), customHeaders (пользовательские HTTP-заголовки для API-запросов) и extra_body (дополнительные параметры тела для OpenAI-совместимых запросов и запросов OpenAI Responses API), а также тонкие настройки в samplingParams (например, temperature, top_p, max_tokens). Оставьте пустым, чтобы использовать значения по умолчанию провайдера. | undefined |
model.chatCompression.contextPercentageThreshold | number | УДАЛЕНО. Заменено на context.autoCompactThreshold (см. раздел #### context ниже). Автоматическое сжатие теперь использует трехуровневую лестницу порогов (предупреждение / авто / жесткий), вычисляемую внутренне из контекстного окна модели с помощью функции computeThresholds(). Старая настройка тихо игнорируется (без предупреждения при запуске). См. PR #4345 / docs/design/auto-compaction-threshold-redesign.md для обоснования редизайна. | N/A |
model.chatCompression.maxRecentFilesToRetain | number | Количество самых последних измененных файлов, текущее содержимое которых восстанавливается (встраивается, если они маленькие, иначе ссылаются по пути) в историю после автоматического сжатия. 0 не восстанавливает ничего. Переопределение через переменную окружения: QWEN_COMPACT_MAX_RECENT_FILES. | 5 |
model.chatCompression.maxRecentImagesToRetain | number | Количество самых последних изображений (скриншоты инструментов / вставки пользователя), восстанавливаемых в истории после автоматического сжатия. 0 не восстанавливает ничего. Переопределение через переменную окружения: QWEN_COMPACT_MAX_RECENT_IMAGES. | 3 |
model.chatCompression.enableScreenshotTrigger | boolean | Если true, автоматическое сжатие также срабатывает, как только количество изображений, возвращенных инструментами и накопленных в истории, достигает screenshotTriggerThreshold, независимо от использования токенов — предназначено для сессий computer-use, где частые скриншоты рассеивают внимание модели. Учитываются только изображения, возвращенные в результатах работы инструментов, а не вставленные пользователем. Переопределение через переменную окружения: QWEN_COMPACT_SCREENSHOT_TRIGGER (1/true/0/false). | true |
model.chatCompression.screenshotTriggerThreshold | number | Количество изображений, возвращенных инструментами, при котором или выше которого срабатывает триггер скриншотов (только если включен enableScreenshotTrigger). Сжатие сбрасывает счетчик — уцелевшие изображения повторно встраиваются как части верхнего уровня, которые триггер не учитывает, поэтому он не сработает повторно сразу же. Переопределение через переменную окружения: QWEN_COMPACT_SCREENSHOT_THRESHOLD. | 20 |
model.skipNextSpeakerCheck | boolean | Пропустить проверку следующего говорящего. | true |
model.skipLoopDetection | boolean | Отключает проверки обнаружения циклов при стриминге. По умолчанию true (обнаружение циклов пропущено), чтобы избежать ложных срабатываний, прерывающих легитимные рабочие процессы. Установите false, чтобы повторно включить обнаружение циклов при стриминге — полезно как защитный механизм в автономных / неинтерактивных запусках, где зацикливание может впустую тратить бюджет. В сессиях демона/ACP, которые не используют остальные потоковые детекторы, повторное включение также активирует остановку при обнаружении глобальных дубликатов вызовов инструментов; всегда активный лимит вызовов инструментов за ход и защита от стагнации с невалидными параметрами инструментов работают там независимо от этой настройки. | true |
model.maxToolCallsPerTurn | integer | Лимит вызовов инструментов за один ход (один ход модели плюс его продолжения с результатами инструментов; блокирующие продолжения Stop-хуков, такие как итерации /goal, начинают новый бюджет). При явной установке это значение является жестким лимитом: ход останавливается при следующем вызове инструмента после его достижения (релизное поведение). Если не установлено (по умолчанию 100), лимит адаптивный: после превышения 100 ход останавливается только если модель продолжает вызывать тот же инструмент (зацикливание); продуктивный ход (разнообразные вызовы) продолжается до жесткого предела 1000, который всегда останавливает. Адаптивный по умолчанию применяется как к интерактивному TUI, так и к неинтерактивным (-p / JSON / stream-JSON) запускам, и к сессиям демона/ACP. Сессии демона/ACP оценивают лимит один раз за пакет инструментов, перед выполнением: пакет, который превысил бы явный лимит или жесткий предел, пропускается целиком, поэтому ход никогда не выполняется за пределами любого из них (он может остановиться не более чем на один пакет короче), тогда как адаптивный мягкий лимит превышается по дизайну, до предела. У них также нет отключения в рамках сессии. Всегда включенный прерыватель против “убегающих” ходов, независимый от model.skipLoopDetection. Установите 0 или отрицательное значение, чтобы отключить лимит. Выбор “Отключить обнаружение циклов для этой сессии” в диалоговом окне обнаружения цикла также подавляет его до конца сессии. | 100 |
model.skipStartupContext | boolean | Пропускает отправку контекста рабочего пространства при запуске (сводка по окружению и подтверждение) в начале каждой сессии. Включите это, если предпочитаете предоставлять контекст вручную или хотите сэкономить токены при запуске. | false |
model.enableOpenAILogging | boolean | Включает логирование вызовов OpenAI API для отладки и анализа. Если включено, API-запросы и ответы записываются в JSON-файлы. | false |
model.openAILoggingDir | string | Путь к пользовательской директории для логов OpenAI API. Если не указано, по умолчанию используется logs/openai в текущей рабочей директории. Поддерживаются абсолютные пути, относительные пути (разрешаются от текущей рабочей директории) и расширение ~ (домашняя директория). | undefined |
model.openAILogRetentionDays | number | Дни хранения файлов логов OpenAI API, записанных при включённом model.enableOpenAILogging. Завершённые фоновые проходы уборки выполняются не чаще одного раза в день в интерактивных, headless, stream-json SDK и ACP-сессиях. Кратковременные неинтерактивные процессы продвигаются по мере возможности, а постоянные процессы сканируют до завершения. 0 = минимальное хранение (~1 час). Для пользовательского model.openAILoggingDir настройте хранение на уровне пользователя или системы; хранение на уровне рабочего пространства пропускается, поскольку одна пользовательская директория может использоваться несколькими рабочими пространствами. Изменения вступают в силу после перезапуска. | 7 |
Пример model.generationConfig:
{
"model": {
"generationConfig": {
"timeout": 60000,
"streamIdleTimeoutMs": 300000,
"contextWindowSize": 128000,
"modalities": {
"image": true
},
"enableCacheControl": true,
"toolResultContentFormat": "parts",
"customHeaders": {
"X-Client-Request-ID": "req-123"
},
"extra_body": {
"enable_thinking": true
},
"samplingParams": {
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 1024
}
}
}
}timeout (таймаут запроса):
timeout — это таймаут для каждого запроса в миллисекундах (по умолчанию 120000). Установите значение 0, чтобы отключить таймаут запроса (согласно соглашению QWEN_STREAM_IDLE_TIMEOUT_MS=0), вместо прерывания запроса. Также его можно задать через переменную окружения QWEN_CODE_API_TIMEOUT_MS. Это отличается от двух защит потока, описанных ниже.
защиты потока (OpenAI-совместимые и Anthropic провайдеры):
Две защиты ограничивают потоковый ответ, каждая принимает 0 для отключения. Генератор Gemini не реализует их, что оставляет ниже описанную форму подачи неограниченной для моделей Gemini.
streamIdleTimeoutMs(по умолчанию240000) ограничивает неактивность между потоковыми чанками: поток, который молчит дольше этого времени, прерывается как повторяемыйETIMEDOUT. Для моделей провайдеров установите его в соответствующемmodelProviders[providerId][].generationConfig; для runtime-моделей используйтеmodel.generationConfig. Явное значение модели имеет приоритет надQWEN_STREAM_IDLE_TIMEOUT_MS, а0отключает контроль простоя.QWEN_STREAM_MAX_LIFETIME_MS(по умолчанию900000) ограничивает общее время ожидания upstream для одного потокового ответа независимо от потока чанков — предел для потока, который никогда не завершится и не сможет сброситься.
streamMaxLifetimeMs доступен только через QWEN_STREAM_MAX_LIFETIME_MS или, для встраиваемых решений, ContentGeneratorConfig.streamMaxLifetimeMs; запись его в settings.json не имеет эффекта. 15-минутный предел времени жизни по-прежнему ограничивает поток, чей таймаут простоя вы подняли выше него. Поднимите переменную окружения времени жизни соответственно или установите 0, если вы полагаетесь на более длительное окно. Отключение только streamIdleTimeoutMs не отключает этот предел времени жизни.
max_tokens (лимит токенов на вывод):
Если не заданы ни samplingParams.max_tokens, ни QWEN_CODE_MAX_OUTPUT_TOKENS, Qwen Code обычно использует заявленный лимит вывода выбранной модели в качестве лимита по умолчанию для запроса. Если ответ всё равно достигает этого лимита, Qwen Code может повторить попытку с повышенным лимитом (с нижним порогом 64K) и затем продолжить работу в следующих итерациях.
Для OpenAI-совместимых провайдеров samplingParams также служит обходным путём для передачи параметров «как есть»: если он задан, его ключи передаются дословно, и Qwen Code не генерирует значение max_tokens по умолчанию. Используйте это для специфичных для провайдера параметров, таких как max_completion_tokens.
Чтобы принудительно установить фиксированный лимит вывода, задайте samplingParams.max_tokens в настройках или используйте переменную окружения QWEN_CODE_MAX_OUTPUT_TOKENS. Явно заданные лимиты отключают автоматическое повышение лимита токенов вывода.
toolResultContentFormat:
Управляет сериализацией текстовых результатов работы инструментов в OpenAI-совместимых запросах. Значение по умолчанию "parts" сохраняет стандартную структуру массива частей контента. Устанавливайте "string" только для устаревших OpenAI-совместимых сред выполнения, шаблоны инструментов которых игнорируют текстовые части контента, например, старые шаблоны GLM-5.1 vLLM/SGLang. Медиафайлы, возвращаемые инструментами, по-прежнему контролируются параметром splitToolMedia.
contextWindowSize:
Переопределяет размер контекстного окна по умолчанию для выбранной модели. Qwen Code определяет контекстное окно, используя встроенные значения по умолчанию на основе сопоставления имени модели, с постоянным резервным значением. Используйте эту настройку, если фактический лимит контекста провайдера отличается от значения по умолчанию в Qwen Code. Это значение определяет предполагаемую максимальную ёмкость контекста модели, а не лимит токенов на один запрос.
Если выбранная модель определена в modelProviders, задайте
contextWindowSize в generationConfig этой записи провайдера, а не в
model.generationConfig верхнего уровня. Записи моделей провайдеров изолированы, поэтому
настройки генерации верхнего уровня не заполняют отсутствующие поля провайдера.
modalities:
Переопределяет автоматически определённые входные модальности для выбранной модели. Qwen Code автоматически определяет поддерживаемые модальности (изображения, PDF, аудио, видео) на основе сопоставления паттернов имени модели. Используйте эту настройку, если автоопределение работает некорректно — например, чтобы включить pdf для модели, которая его поддерживает, но не была распознана. Формат: { "image": true, "pdf": true, "audio": true, "video": true }. Пропустите ключ или установите для него значение false для неподдерживаемых типов.
customHeaders:
Позволяет добавлять пользовательские HTTP-заголовки ко всем API-запросам. Это полезно для трассировки запросов, мониторинга, маршрутизации через API-шлюз или когда разным моделям требуются разные заголовки. Для моделей провайдеров определяйте customHeaders в modelProviders[].generationConfig.customHeaders. Для моделей среды выполнения без соответствующей записи провайдера определяйте их в model.generationConfig.customHeaders. Слияние между этими двумя уровнями не происходит.
Поле extra_body позволяет добавлять пользовательские параметры в тело запроса, отправляемого в API. Это полезно для специфичных для провайдера опций, которые не покрываются стандартными полями конфигурации. Примечание: это поле поддерживается для OpenAI-совместимых провайдеров (openai, qwen-oauth) и OpenAI Responses API (openai-responses). Оно игнорируется для провайдеров Anthropic и Gemini. В протоколе openai-responses устаревший ключ enable_thinking транслируется в reasoning.effort, а не передаётся дословно — для этого провайдера используйте сразу reasoning.effort. Для моделей провайдеров определяйте extra_body в modelProviders[].generationConfig.extra_body. Для моделей среды выполнения без соответствующей записи провайдера определяйте его в model.generationConfig.extra_body.
Примеры model.openAILoggingDir:
"~/qwen-logs"- Логирование в директорию~/qwen-logs"./custom-logs"- Логирование в./custom-logsотносительно текущей директории"/tmp/openai-logs"- Логирование по абсолютному пути/tmp/openai-logs
fastModel
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
fastModel | string | Модель, используемая для генерации предложений промптов и спекулятивного выполнения. Оставьте пустым, чтобы использовать основную модель. Меньшая/более быстрая модель (например, qwen3-coder-flash) снижает задержку и стоимость. Также можно задать через /model --fast. | "" |
advisorModel
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
advisorModel | string | Модель, используемая /advisor для повторного анализа диалога (second-opinion). Оставьте пустым, чтобы использовать основную модель. Рекомендуется модель не менее мощная, чем основная. При установке этой модели недавний транскрипт диалога отправляется ей, даже если она использует другого провайдера. | "" |
visionModel
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
visionModel | string | Модель с поддержкой изображений, используемая как vision-мост: когда основная модель, работающая только с текстом, получает изображение, или read_file нуждается в ограниченном визуальном фолбэке для PDF, оно сначала обрабатывается этой моделью. Явная установка авторизует вызовы моста к этой модели, даже если она использует другой провайдер; отображение инструмента раскрывает эндпоинт. Оставьте пустым для автоматического выбора vision-модели того же провайдера. Также можно задать через /model --vision. | "" |
compactionModel
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
compactionModel | string | Модель, используемая для сжатия чата (автокомпактирование). Оставьте пустым для возврата к основной модели. Меньшая или более быстрая модель может снизить задержку и стоимость сжатия. Также можно задать или очистить через /model --compaction. | "" |
imageModel
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
imageModel | string | Модель, используемая встроенным инструментом image_gen. Выбранный маршрут должен иметь supportsImageGeneration: true (или устаревший imageOnly: true), а также HTTPS baseUrl и envKey в modelProviders. Оставьте пустым, чтобы инструмент оставался недоступным. Также можно задать через /model --image. | "" |
visionBridgeTimeoutMs
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
visionBridgeTimeoutMs | integer | Таймаут на одну попытку в миллисекундах для вызова транскрибации изображений vision-моста (положительное целое число до 2147483647; мост повторяет таймаут одну попытку с новым таймаутом). Если не задано, используется встроенное значение 30 сек. Увеличьте для медленных или проксируемых vision-эндпоинтов. | не задано |
voiceModel
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
voiceModel | string | Модель, используемая для транскрибации голоса. Оставьте пустым, чтобы голосовой ввод оставался отключенным до выбора голосовой модели. Также можно задать через /model --voice. | "" |
modelFallbacks
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
modelFallbacks | string | Упорядоченный список ID резервных моделей (через запятую, макс. 3), которые будут использоваться, если основная модель сталкивается с ошибками нехватки ресурсов (429/503/529). Пример: "qwen-plus,qwen-turbo". Также можно задать через CLI-флаг --fallback-model. Требуется перезапуск. | "" |
modelPricing
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
modelPricing | object | Опциональные цены для каждой модели для оценки стоимости в /stats model. Пример: { "qwen3-coder": { "inputPerMillionTokens": 0.30, "outputPerMillionTokens": 1.20 } }. | undefined |
context
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
context.fileName | string или массив строк | Имя файла(ов) контекста. | undefined |
context.autoCompactThreshold | number | Целевая доля контекстного окна, при которой срабатывает автоматическое уплотнение. Должна быть больше 0 и не более 1. По умолчанию 0.85 (85%). Действует как потолок для триггера: на больших окнах это эффективный триггер (~85%), тогда как на меньших окнах сжатие может сработать раньше, чтобы оставить место для резюмирования. Заменяет старый model.chatCompression.contextPercentageThreshold. | undefined (использует внутреннее 0.85) |
context.importFormat | string | Формат, используемый при импорте памяти. | undefined |
context.includeDirectories | array | Дополнительные директории для включения в контекст рабочего пространства. Задает массив дополнительных абсолютных или относительных путей для включения в контекст рабочего пространства. Отсутствующие директории по умолчанию пропускаются с предупреждением. В путях можно использовать ~ для ссылки на домашнюю директорию пользователя. Эту настройку можно комбинировать с флагом командной строки --include-directories. | [] |
context.loadFromIncludeDirectories | boolean | Управляет поведением команды /memory refresh. Если установлено в true, файлы QWEN.md должны загружаться из всех добавленных директорий. Если установлено в false, QWEN.md должен загружаться только из текущей директории. | false |
context.fileFiltering.respectGitIgnore | boolean | Учитывать файлы .gitignore при поиске. | true |
context.fileFiltering.respectQwenIgnore | boolean | Учитывать .qwenignore и настроенные пользовательские файлы игнорирования при поиске. | true |
context.fileFiltering.customIgnoreFiles | array | Файлы игнорирования относительно корня проекта, которые будут использоваться вместо файлов совместимости по умолчанию (.agentignore, .aiignore), когда включен respectQwenIgnore. .qwenignore включается всегда. | [".agentignore", ".aiignore"] |
context.fileFiltering.enableRecursiveFileSearch | boolean | Включить ли рекурсивный поиск имен файлов в текущем дереве при автодополнении префиксов @ в промпте. | true |
context.fileFiltering.enableFuzzySearch | boolean | Если true, включает возможности нечеткого поиска при поиске файлов. Установите false, чтобы повысить производительность в проектах с большим количеством файлов. | true |
context.clearContextOnIdle.toolResultsThresholdMinutes | number | Минуты неактивности перед очисткой старого содержимого результатов работы инструментов. Используйте -1, чтобы отключить триггер простоя. | 60 |
context.clearContextOnIdle.toolResultsNumToKeep | integer | Целое число самых последних уплотняемых результатов работы инструментов, которые нужно сохранить при очистке. Значения меньше 1 округляются до 1. | 5 |
context.clearContextOnIdle.toolResultsTotalCharsThreshold | number | Общее количество символов вывода уплотняемых результатов работы инструментов, допустимое в истории перед очисткой самых старых результатов. При превышении самые старые результаты очищаются до половины этого порога (по мере возможности), чтобы последующие ходы продолжали использовать кэш промпта провайдера вместо переписывания истории каждый ход. Используйте -1, чтобы отключить триггер по размеру. Это мягкий порог: защищенные недавние результаты работы инструментов могут удерживать общее значение выше него. | 500000 |
Устранение проблем с производительностью поиска файлов
Если вы столкнулись с проблемами производительности при поиске файлов (например, при автодополнении с помощью @), особенно в проектах с очень большим количеством файлов, вот несколько рекомендаций, которые можно попробовать в рекомендуемом порядке:
- Используйте файл игнорирования: Создайте
.qwenignoreили настроенный пользовательский файл игнорирования в корне вашего проекта, чтобы исключить каталоги, содержащие большое количество файлов, на которые вам не нужно ссылаться (например, артефакты сборки, логи,node_modules). Снижение общего количества сканируемых файлов — самый эффективный способ повысить производительность. - Отключите нечеткий поиск: Если игнорирования файлов недостаточно, вы можете отключить нечеткий поиск, установив для параметра
enableFuzzySearchзначениеfalseв файлеsettings.json. При этом будет использоваться более простой алгоритм сопоставления без нечеткого поиска, что может работать быстрее. - Отключите рекурсивный поиск файлов: В крайнем случае вы можете полностью отключить рекурсивный поиск файлов, установив для параметра
enableRecursiveFileSearchзначениеfalse. Это будет самым быстрым вариантом, так как позволяет избежать рекурсивного сканирования проекта. Однако это означает, что вам придется вводить полный путь к файлам при использовании автодополнения@.
tools
| Параметр | Тип | Описание | По умолчанию | Примечания |
|---|---|---|---|---|
tools.sandbox | boolean или string | Среда выполнения в песочнице (может быть логическим значением или строкой пути). | undefined | |
tools.sandboxImage | string | URI образа песочницы, используемый Docker/Podman, если не заданы --sandbox-image и QWEN_SANDBOX_IMAGE. | undefined | |
tools.shell.enableInteractiveShell | boolean | Использовать node-pty для интерактивной работы с оболочкой. Резервный вариант с child_process по-прежнему применяется. | true | |
tools.shell.defaultTimeoutMs | number | Таймаут по умолчанию в миллисекундах для shell-команд переднего плана, запускаемых агентом. Таймаут на один вызов в инструменте shell переопределяет это значение. Если не задано, команды переднего плана получают таймаут через 120000 мс (2 минуты). Установите 0, чтобы отключить таймаут. | undefined | |
tools.shell.heartbeatIntervalMs | number | Интервал в миллисекундах между heartbeat-сигналами работоспособности, отправляемыми пока shell-команда переднего плана не выводит ничего. Heartbeat-сигналы передаются клиентам ACP и потребителям stream-json, чтобы они могли отличить молчаливую команду от мертвой сессии. Если не задано, heartbeat-сигналы отправляются каждые 10000 мс (10 секунд). Установите 0, чтобы отключить heartbeat-сигналы. | undefined | |
tools.core | array of strings | Устарело. Будет удалено в следующей версии. Непустой список ограничивает набор основных инструментов (file, shell, search и связанные встроенные инструменты) до белого списка: основные инструменты, не входящие в список, отключаются (fail-closed). Инструменты вне этого набора — динамически обнаруженные инструменты (MCP, skill) и синтетические/системные встроенные инструменты, такие как agent, list_agents, инструменты жизненного цикла plan-mode, инструменты goals, task_stop, send_message и tool_search — обходят белый список по дизайну; используйте permissions.deny для блокировки вызовов инструмента (для MCP-инструментов он остаётся в списке и отклоняется во время выполнения), или tools.disabled / фильтр excludeTools на уровне сервера для полного удаления из реестра. Пустой список ([]) трактуется как неустановленный и ничего не отключает. permissions.allow не может воспроизвести это ограничение — это чистое авто-одобрение (#10075). Используйте tools.eager для ограничения того, какие жадные по умолчанию схемы инструментов отправляются изначально (неперечисленные инструменты откладываются, а не отключаются — они остаются загружаемыми через tool_search), и permissions.deny для полной блокировки инструментов. | undefined | |
tools.exclude | array of strings | Устарело. Вместо этого используйте permissions.deny. Имена инструментов, которые следует исключить из обнаружения. Не мигрируется автоматически; устаревший параметр по-прежнему учитывается при запуске. | undefined | |
tools.disabled | array of strings | Имена инструментов, полностью скрытых из реестра. В отличие от permissions.deny (который блокирует вызовы во время выполнения), отключенные инструменты никогда не регистрируются, поэтому они не появляются в /tools и не могут быть обнаружены или вызваны моделью. Например, ["enter_plan_mode"] предотвращает самостоятельный переход модели в режим планирования. Объединяются как объединение множеств во всех областях действия. | undefined | |
tools.visible | array of strings | Имена отложенных инструментов, делаемых видимыми при запуске без необходимости tool_search. Перечисленные инструменты появляются вместе с основными инструментами в начальной сессии. Объединяются как объединение множеств во всех областях действия. | undefined | |
tools.eager | array of strings | Белый список встроенных инструментов, жадных по умолчанию, чьи схемы остаются доступными для начального запроса модели. Неперечисленные не освобождённые инструменты вместо этого откладываются: остаются зарегистрированными, перечисляются в /tools, вызываются и обнаруживаются через tool_search. Инструменты, уже отложенные по умолчанию, остаются по требованию даже при перечислении; используйте tools.visible, чтобы сделать один из них видимым при запуске. tool_search, structured_output, инструменты жизненного цикла plan-mode, task_stop, MCP-инструменты и инструменты computer_use__* не затрагиваются и сохраняют своё обычное поведение загрузки. Явно пустой список ([]) активен и откладывает каждый не освобождённый жадный по умолчанию инструмент; пропуск настройки означает отсутствие ограничений. Работает в паре с tool_search: когда ToolSearch не зарегистрирован — tools.toolSearch.enabled: false, правило deny для tool_search или автоматический отказ для моделей DeepSeek — белый список всё равно удерживает схемы, но ничто не может загрузить их обратно, поэтому пониженные инструменты недоступны для этой сессии (они остаются в /tools, и предупреждение записывается в лог). Два исключения: пониженные инструменты, упомянутые в возобновлённой истории сессии, получают повторную отправку схем без предупреждения, а пониженные инструменты, перечисленные в tools.visible, объявляются заранее. Используйте permissions.deny, если вы хотели удалить их, или оставьте ToolSearch включённым. Непригодные записи (пустые или некорректные) отбрасываются с предупреждением и оставляют остальную часть списка активной. Более поздние области действия заменяют более ранние списки. Требуется перезапуск. | undefined | |
tools.allowed | array of strings | Устарело. Вместо этого используйте permissions.allow. Имена инструментов, которые обходят диалог подтверждения. Не мигрируется автоматически; устаревший параметр по-прежнему учитывается при запуске. | undefined | |
tools.approvalMode | string | Устанавливает режим одобрения по умолчанию для использования инструментов. | auto | Возможные значения: plan (только анализ, без изменения файлов или выполнения команд), default (требовать подтверждения перед редактированием файлов или выполнением команд оболочки), auto-edit (автоматически подтверждать редактирование файлов), auto (классификатор LLM автоматически подтверждает безопасные действия и блокирует рискованные), yolo (автоматически подтверждать все вызовы инструментов) |
tools.discoveryCommand | string | Команда, выполняемая для обнаружения инструментов. Когда активен белый список tools.eager, обнаруженный инструмент, не указанный в нём, регистрируется как отложенный: он остаётся в /tools и загружается через tool_search, но его схема не отправляется в начальном запросе модели. | undefined | |
tools.callCommand | string | Определяет пользовательскую команду оболочки для вызова конкретного инструмента, обнаруженного с помощью tools.discoveryCommand. Команда оболочки должна соответствовать следующим критериям: она должна принимать имя функции (точно так же, как в объявлении функции ) в качестве первого аргумента командной строки. Она должна читать аргументы функции в формате JSON из stdin, аналогично functionCall.args. Она должна возвращать вывод функции в формате JSON в stdout, аналогично functionResponse.response.content. | undefined | |
tools.useRipgrep | boolean | Использовать ripgrep для поиска по содержимому файлов вместо резервной реализации. Обеспечивает более высокую скорость поиска. | true | |
tools.useBuiltinRipgrep | boolean | Использовать поставляемый в комплекте бинарный файл ripgrep. Если установлено значение false, вместо него будет использоваться системная команда rg. Этот параметр действует только если tools.useRipgrep имеет значение true. | true | |
tools.workflowsEnabled | boolean | Включить инструмент Workflow, который позволяет модели создавать и запускать скрипт для оркестрации подагентов параллельно. По умолчанию выключен; при запуске может быть отправлено много подагентов с соответствующим расходом токенов. | false | Только области User, System и SystemDefaults; значения рабочего пространства игнорируются. Требуется перезапуск: Да. Переопределения через переменные окружения: QWEN_CODE_ENABLE_WORKFLOWS=1 принудительно включает; QWEN_CODE_DISABLE_WORKFLOWS=1 принудительно отключает (отключение имеет приоритет). |
goals.modelProposed | enum | Управляет инструментом propose_goal, который позволяет модели предлагать цель (Goal) сессии на ваше одобрение: alwaysAsk показывает каждое предложение в диалоге одобрения, и ничего не устанавливается, пока вы его не примете; "disabled" удаляет инструмент. Типизированная /goal не затрагивается. | alwaysAsk | Только области User, System и SystemDefaults; значения рабочего пространства игнорируются. Требуется перезапуск: Да. |
tools.truncateToolOutputThreshold | number | Обрезать вывод инструмента, если он превышает указанное количество символов. Применяется к инструментам Shell, Grep, Glob, ReadFile и ReadManyFiles. | 25000 | Требуется перезапуск: Да |
tools.truncateToolOutputLines | number | Максимальное количество строк или записей, сохраняемых при обрезке вывода инструмента. Применяется к инструментам Shell, Grep, Glob, ReadFile и ReadManyFiles. | 1000 | Требуется перезапуск: Да |
tools.toolSearch.enabled | boolean | Загружать инструменты MCP по требованию через ToolSearch для уменьшения размера промпта. Отключите эту функцию для моделей, которые полагаются на кэширование KV на основе префикса (например, DeepSeek), чтобы префикс промпта оставался стабильным и максимизировать частоту попаданий в кэш. | true | Требуется перезапуск: Да |
tools.toolSearch.threshold | number | Процент контекстного окна, используемый как бюджет при запуске сессии для предварительной загрузки обычных отложенных инструментов (как встроенных, так и MCP). Когда их объединённые схемы укладываются в этот бюджет, они объявляются заранее вместо загрузки по требованию через ToolSearch. Инструменты, пониженные tools.eager, исключаются из этой предварительной загрузки и остаются по требованию. Установите 0, чтобы всегда загружать отложенные инструменты по требованию. | 10 | Требуется перезапуск: Да |
tools.listDirectory.enabled | boolean | Включить встроенный инструмент list_directory. Отключён по умолчанию, поскольку glob в большинстве случаев покрывает вывод списка каталогов; инструмент также автоматически включается при явном указании в allowlist coreTools (--core-tools / tools.core). | false | Требуется перезапуск: Да |
tools.todoWrite.enabled | boolean | Включить встроенный инструмент todo_write и его инструкции в системном промпте. По умолчанию отключён. | false | Требуется перезапуск: Да |
Миграция с tools.core / tools.exclude / tools.allowed: Эти устаревшие настройки не рекомендуются, но автоматически не мигрируют; они продолжают работать при запуске. Мигрируйте tools.allowed и tools.exclude вручную в permissions.allow и permissions.deny. Для tools.core нет точной замены; см. таблицу ниже.
memory
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
memory.enableManagedAutoMemory | boolean | Включить фоновое извлечение записей памяти из диалогов. | true |
memory.enableManagedAutoDream | boolean | Включить автоматическую консолидацию (дедупликацию и очистку) собранной памяти. | true |
memory.enableAutoSkill | boolean | Включить фоновый анализ для создания переиспользуемых навыков (skills) проекта после сессий с активным использованием инструментов. | true |
memory.autoSkillConfirm | boolean | Запрашивать подтверждение перед добавлением автоматически созданных навыков в библиотеку навыков. Если выключено, авто-навыки сохраняются сразу. | true |
memory.enableTeamMemory | boolean | Включить уровень памяти проекта, общий для соавторов через отслеживаемую git-ом директорию .qwen/team-memory/. Запись в неё проверяется на наличие секретов и доступна для ревью в git diff. | false |
memory.enableTeamMemorySync | boolean | Если память команды включена, автоматически делать commit, fast-forward pull и push директории .qwen/team-memory/ при начале сессии, чтобы соавторы оставались синхронизированными. Требуется настроенный git upstream. | false |
memory.agentTimeoutMinutes | number | Максимальное время работы в минутах для фоновых агентов памяти (извлечение, dream, remember, ревью навыков). Если не задано, используется встроенное значение по умолчанию каждого агента (2–5 минут); 0 отключает ограничение по времени. | не задано |
memory.agentMaxTurns | number | Максимальное количество ходов для фоновых агентов памяти (извлечение, dream, remember, ревью навыков). Если не задано, используется встроенное значение по умолчанию каждого агента (5–8); 0 отключает ограничение по ходам. | не задано |
Подробнее о том, как работает авто-память и как использовать команды /memory, /remember и /dream, см. в разделе Memory.
agents
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
agents.builtin.exploreModel | string | Селектор модели для встроенного подагента Explore. Используйте inherit для модели основной сессии, fast для fastModel, ID модели или селектор authType:model-id. Пользовательский агент Explore с тем же именем сохраняет свою собственную конфигурацию модели. Требуется перезапуск. | inherit |
agents.modelGrades | object | Сопоставляет семантические имена классов (grades) с селекторами моделей, доступными для инструмента Agent. Требуется перезапуск. | undefined |
agents.allowedGrades | array of strings | Опциональный белый список настроенных классов моделей, которые может использовать инструмент Agent. Требуется перезапуск. | undefined |
agents.crossSessionMessaging | boolean | Экспериментально. Позволяет сессиям Qwen Code на этой машине обмениваться сообщениями через локальный сокет для каждой сессии. Включение открывает эту сессию для peer-сообщений, делает её обнаруживаемой для других и позволяет её модели адресовать их через send_message. Требуется перезапуск. Рабочее пространство может установить только false; значение true в рабочем пространстве игнорируется, с предупреждением только если оно ослабляет установленное оператором или значение по умолчанию. | false |
agents.crossSessionInbound | enum | Что происходит с входящими межсессионными сообщениями: accept доставляет их, hold паркует их для ревью через /peers без разрешения модели действовать, а refuse отключает эту сессию. Неустановленное значение означает, что контроллеры, созданные пользователем и собственные дочерние процессы этой сессии автоматически доставляют, тогда как другие сессии используют паритет класса ревью; остальные сообщения удерживаются для ревью. Рабочее пространство может только ужесточить это (hold или refuse, когда строже установленного оператором значения или неустановленного значения по умолчанию); эффективное нераспознанное значение удерживает каждое сообщение. | undefined |
permissions
Система разрешений (permissions) предоставляет детальный контроль над тем, какие инструменты могут запускаться, какие требуют подтверждения, а какие заблокированы.
Приоритет принятия решений (по убыванию): deny > ask > allow > (режим по умолчанию/интерактивный режим)
Применяется первое совпавшее правило. Правила используют формат "ToolName" или "ToolName(specifier)".
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
permissions.allow | array of strings | Правила для автоматически одобренных вызовов инструментов (подтверждение не требуется). Объединяются по всем областям действия (пользователь + проект + система). Этот ключ — ЧИСТОЕ авто-одобрение: он никогда не удаляет, не понижает и не скрывает инструмент, и все встроенные инструменты остаются зарегистрированными независимо от того, какие инструменты покрывают правила; инструменты, отложенные по умолчанию (такие как task_stop или monitor), сохраняют свою обычную загрузку по требованию через tool_search (#10075). Чтобы не включать схему инструмента в начальный запрос модели, используйте tools.eager; чтобы полностью заблокировать инструмент, используйте правило permissions.deny для целого инструмента — MCP-инструменты освобождены от удаления через deny (см. строку permissions.deny): скрывайте их с помощью фильтров excludeTools / tools.disabled на уровне сервера. Исключение: в режиме одобрения AUTO опасные правила allow скрываются, а не активируются, поэтому удаление в середине сессии не может затронуть скрытый кэш — при выходе из режима AUTO скрытое правило восстанавливается и снова автоматически одобряет до перезапуска сессии. | undefined |
permissions.ask | array of strings | Правила для вызовов инструментов, которые всегда требуют подтверждения пользователя. Имеют приоритет над allow. Как и allow, этот ключ никогда не влияет на то, зарегистрирован ли инструмент. | undefined |
permissions.deny | array of strings | Правила для заблокированных вызовов инструментов. Наивысший приоритет — переопределяют как allow, так и ask. Правило deny для целого инструмента (без спецификатора) также удаляет инструмент из реестра — для встроенных инструментов и инструментов, найденных через tools.discoveryCommand. MCP-инструменты освобождены (их путь регистрации учитывает только disabledTools): скрывайте их с помощью фильтров excludeTools / tools.disabled на уровне сервера. Правила deny по-прежнему блокируют вызовы MCP-инструментов во время выполнения. | undefined |
Псевдонимы имен инструментов (в правилах работает любой из вариантов):
| Псевдоним | Канонический инструмент | Примечания |
|---|---|---|
Bash, Shell | run_shell_command | |
Read, ReadFile | read_file | Мета-категория — см. ниже |
Edit, EditFile | edit | Мета-категория — см. ниже |
Write, WriteFile | write_file | |
NotebookEdit | notebook_edit | |
NotebookEditTool | notebook_edit | |
Grep, SearchFiles | grep_search | |
Glob, FindFiles | glob | |
ListFiles | list_directory | |
WebFetch | web_fetch | |
Agent | task | |
Skill | skill |
Мета-категории:
Некоторые имена правил автоматически охватывают несколько инструментов:
| Имя правила | Инструменты |
|---|---|
Read | read_file, grep_search, glob, list_directory |
Edit | edit, write_file, notebook_edit |
[!important]
Read(/path/**)соответствует всем четырем инструментам чтения (чтение файла, grep, glob и список директорий). Чтобы ограничить только чтение файлов, используйтеReadFile(/path/**)илиread_file(/path/**).
Примеры синтаксиса правил:
| Правило | Значение |
|---|---|
"Bash" | Все команды оболочки |
"Bash(git *)" | Команды оболочки, начинающиеся с git (граница слова: НЕ gitk) |
"Bash(git push *)" | Команды оболочки вроде git push origin main |
"Bash(npm run *)" | Любой скрипт npm run |
"Read" | Все операции чтения файлов (read, grep, glob, list) |
"Read(./secrets/**)" | Рекурсивное чтение любого файла в ./secrets/ |
"Edit(/src/**/*.ts)" | Редактирование TypeScript файлов в /src/ относительно корня проекта |
"WebFetch(api.example.com)" | Загрузка с api.example.com и всех его поддоменов |
"mcp__puppeteer" | Все инструменты с MCP-сервера puppeteer |
Префиксы шаблонов путей:
| Префикс | Значение | Пример |
|---|---|---|
// | Абсолютный путь от корня файловой системы | //etc/passwd |
~/ | Относительно домашней директории | ~/Documents/*.pdf |
/ | Относительно корня проекта | /src/**/*.ts |
./ | Относительно текущей рабочей директории | ./secrets/** |
| (none) | Аналогично ./ | secrets/** |
Предотвращение обхода команд оболочки:
Правила разрешений для Read, Edit и WebFetch также применяются, когда агент выполняет эквивалентные команды оболочки. Например, если Read(./.env) находится в deny, агент не сможет обойти это с помощью cat .env в команде оболочки. Поддерживаемые команды оболочки включают cat, grep, curl, wget, cp, mv, rm, chmod и многие другие. Неизвестные/безопасные команды (например, git) не подпадают под действие правил для файлов/сети.
Миграция с устаревших настроек:
| Устаревший параметр | Эквивалентное правило permissions | Примечания |
|---|---|---|
tools.allowed | permissions.allow | Автоматически не мигрируется; всё ещё учитывается при запуске |
tools.exclude | permissions.deny | Автоматически не мигрируется; всё ещё учитывается при запуске |
tools.core | tools.eager (+ permissions.deny) | Автоматически не мигрируется в permissions.allow, который является чистым авто-одобрением и не может воспроизвести ограничение белого списка (#10075). tools.eager откладывает неперечисленные жадные по умолчанию инструменты (они остаются загружаемыми через tool_search); permissions.deny полностью удаляет встроенные инструменты из реестра (MCP-инструменты остаются в списке и отклоняются во время выполнения — используйте tools.disabled / фильтр excludeTools на уровне сервера для их полного удаления). Ни один из вариантов не сохраняет гарантию fail-closed непустого белого списка tools.core для набора основных инструментов: встроенный инструмент, добавленный в будущем релизе, регистрируется до явного запрета, поэтому список запретов необходимо пересматривать при каждом релизе. Пустой список tools.core считается неустановленным и ничего не отключает. |
Пример конфигурации:
{
"permissions": {
"allow": ["Bash(git *)", "Bash(npm run *)", "Read(//Users/alice/code/**)"],
"ask": ["Bash(git push *)", "Edit"],
"deny": ["Bash(rm -rf *)", "Read(.env)", "WebFetch(malicious.com)"]
}
}[!tip] Используйте
/permissionsв интерактивном CLI для просмотра, добавления и удаления правил без прямого редактированияsettings.json.
slashCommands
Управляет тем, какие slash-команды доступны в CLI. Полезно для ограничения набора команд в мультитенантных или корпоративных развертываниях.
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
slashCommands.disabled | array of strings | Имена slash-команд, которые нужно скрыть и отказаться выполнять. Сопоставление с итоговым именем команды происходит без учета регистра (для команд расширений это уточненная форма, например, myext.deploy), за исключением команд навыков (Skills), которые блокируются при написании любым вариантом — их зарегистрированным именем (rust:pdf) или именем, указанным в их SKILL.md (pdf) — поэтому запись, сделанная до появления этого префикса, всё равно блокирует их. Объединяются как объединение множеств во всех областях действия, поэтому настройки рабочего пространства могут добавлять, но не удалять записи, определенные в настройках пользователя или системы. | undefined |
Тот же самый список блокировок (denylist) можно передать через флаг CLI --disabled-slash-commands (через запятую или повторно) и переменную окружения QWEN_DISABLED_SLASH_COMMANDS; значения из всех трех источников объединяются.
Пример — блокировка встроенных команд для изолированного развертывания:
{
"slashCommands": {
"disabled": ["auth", "mcp", "extensions", "ide", "quit"]
}
}Если эти значения указаны в системном settings.json (/etc/qwen-code/settings.json или QWEN_CODE_SYSTEM_SETTINGS_PATH), пользователи не смогут уменьшить список блокировок в своей области действия, а отключенные команды не будут появляться в автодополнении или выполняться при вводе.
[!note] Эта настройка управляет только slash-командами (например,
/auth,/mcp). Она не влияет на разрешения инструментов — для этого см.permissions.deny. Она также не перехватывает сочетания клавиш, такие какCtrl+CилиEsc.
skills
Управляет тем, какие навыки (Skills) доступны модели.
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
skills.disabledLevels | array of strings | Уровни обнаружения навыков, которые нужно полностью пропустить. Поддерживаемые значения: project, user, extension и bundled. Объединяются как объединение множеств во всех областях действия настроек. Используйте ["bundled"], чтобы скрыть все встроенные навыки, сохранив навыки, предоставленные хостом. Примечание: записи skills.directories обнаруживаются на уровне user, поэтому ["user"] скрывает и их. | undefined |
skills.disabled | array of strings | Имена навыков, жестко отключенных. Сопоставление с именем навыка происходит без учета регистра и объединяются как объединение множеств во всех областях действия настроек, поэтому настройки проекта не могут переопределить записи пользователя или системы. Скрытые навыки не отображаются в <available_skills> и не доступны как slash-команды /<name>. Навык расширения сопоставляется по любому написанию — его зарегистрированному имени (rust:pdf) или имени, указанному в его SKILL.md (pdf) — поэтому запись, сделанная до появления префикса, продолжает действовать. | undefined |
skills.defaultDisabled | array of strings | Имена навыков, которые начинают работу отключенными, но могут быть включены через skills.enabled. Сопоставление без учета регистра и объединяются как объединение множеств во всех областях действия настроек. Навык расширения сопоставляется по любому написанию, как и в skills.disabled. | undefined |
skills.enabled | array of strings | Явные согласия. Переопределяют совпадающую запись skills.defaultDisabled, а для навыка расширения — собственный стандарт владельца и сохранённое включение этого рабочего пространства для него. Сопоставление без учета регистра и объединяются как объединение множеств во всех областях действия настроек — только по зарегистрированному имени навыка, поэтому для навыка расширения нужно rust:pdf: простое pdf никогда не срабатывает как разрешение — оно только отменяет одинаково написанную запись skills.defaultDisabled (согласно правилу одинакового написания ниже), и после отмены решает сохранённое включение для этого рабочего пространства, иначе собственный стандарт владельца. Эта настройка не может переопределить skills.disabled или повторно включить навыки из уровня, исключенного skills.disabledLevels. | undefined |
Приоритет: skills.disabled > skills.enabled > skills.defaultDisabled. Например, пользователь может поместить навык в defaultDisabled, а проект может добавить то же имя в enabled; жесткая запись disabled в любой области действия всё равно побеждает.
Каждый список содержит буквальные имена навыков, сопоставляемые без учета регистра после обрезки, без поддержки glob. skills.enabled отменяет запись skills.defaultDisabled только когда обе записи написаны одинаково, потому что на этом шаге сравниваются сами записи, а не разрешаются в навык — поэтому навык расширения, который нужно и убрать из стандартных отключённых, и явно включить, пишется как rust:pdf в обоих списках. См. Extension Skills, почему два предыдущих списка принимают любое написание, а этот — нет.
mcp
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
mcp.serverCommand | string | Команда для запуска MCP-сервера. | undefined |
mcp.allowed | array of strings | Белый список (allowlist) разрешенных MCP-серверов. Позволяет указать список имен MCP-серверов, которые должны быть доступны модели. Это можно использовать для ограничения набора подключаемых MCP-серверов. Поддерживаются glob-шаблоны (* соответствует любой последовательности, ? — одному символу, например, "*puppeteer*"); записи без glob-символов сопоставляются точно. Обратите внимание, что этот параметр будет проигнорирован, если установлен --allowed-mcp-server-names. | undefined |
mcp.excluded | array of strings | Черный список (denylist) исключаемых MCP-серверов. Сервер, указанный одновременно в mcp.excluded и mcp.allowed, будет исключен. Поддерживает glob-шаблоны (*, ?) так же, как mcp.allowed. Обратите внимание, что этот параметр будет проигнорирован, если установлен --allowed-mcp-server-names. | undefined |
mcp.toolIdleTimeoutMs | number | Таймаут простоя в миллисекундах для вызовов инструментов MCP. Если MCP-сервер не выдает никакого ответа или обновления прогресса в течение этого времени, вызов прерывается. Должен быть в диапазоне от 10000 до 3600000. Может быть переопределен через переменную окружения QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS. | 300000 |
Примечание по безопасности для MCP-серверов: Эти настройки используют простое сопоставление строк с именами MCP-серверов, которые могут быть изменены. Если вы системный администратор и хотите предотвратить обход этого ограничения пользователями, рассмотрите возможность настройки mcpServers на уровне системных настроек, чтобы пользователь не мог конфигурировать собственные MCP-серверы. Это не следует использовать как абсолютно надежный механизм безопасности.
lsp
[!warning] Экспериментальная функция: Поддержка LSP в настоящее время является экспериментальной и отключена по умолчанию. Включите её с помощью флага командной строки
--experimental-lsp.
Language Server Protocol (LSP) предоставляет функции интеллектуального анализа кода, такие как переход к определению, поиск ссылок и диагностика.
Конфигурация LSP-сервера выполняется через файлы .lsp.json в корневом каталоге вашего проекта, а не через settings.json. Подробности и примеры конфигурации см. в документации по LSP.
security
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
security.folderTrust.enabled | boolean | Настройка для отслеживания того, включено ли доверие к папке (Folder trust). | false |
security.auth.selectedType | string | Текущий выбранный тип аутентификации. | undefined |
security.auth.enforcedType | string | Требуемый тип аутентификации (полезно для корпоративных сред). | undefined |
security.auth.useExternal | boolean | Использовать ли внешний поток аутентификации. | undefined |
security.auth.apiKey | string | Устарело. API-ключ для аутентификации, совместимой с OpenAI. Вместо этого перейдите на modelProviders с envKey — см. Провайдеры моделей. | undefined |
security.auth.baseUrl | string | Устарело. Базовый URL для API, совместимого с OpenAI. Вместо этого перейдите на modelProviders — см. Провайдеры моделей. | undefined |
security.allowedInsecureVoiceBaseUrls | array of strings | Полные базовые URL голосовых провайдеров, которые могут использовать HTTP или разрешаться в адреса частной сети. Каждая запись должна включать явную схему http:// или https:// и полный путь (например, /v1); нормализуются только сериализация URL и конечные слэши. Wildcard не поддерживаются; адреса метаданных, link-local, NAT64 локального использования, 6to4 и Teredo блокируются даже при указании в списке, как и имена хостов, разрешающиеся в loopback; литералы IPv4-mapped, IPv4-compatible и well-known NAT64 (64:ff9b::/96) классифицируются по их встроенному адресу IPv4. Учитываются только области действия User, System и SystemDefaults. Используйте только для доверенных эндпоинтов в управляемых частных сетях. Открытый HTTP также делает доступным API-ключ провайдера, передаваемый в заголовке Authorization. Разрешенное имя хоста настолько же надежно, насколько надежен его DNS; предпочитайте записи с IP-литералами, когда адрес шлюза стабилен. Точное совпадение покрывает URL пакетного запроса; потоковые транспорты подключаются к URL WebSocket, производному от него (та же схема, хост и порт, путь /api-ws/v1/...), а не к самому разрешенному пути. | [] |
serve
Настройки concurrency для постоянных суб-сессий qwen serve. Изменения требуют перезапуска демона. Неположительные или нецелые ограничения concurrency выдают предупреждение и возвращаются к встроенным значениям по умолчанию.
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
serve.maxConcurrentSubSessionsPerCaller | integer | Максимальное количество выполняемых суб-сессий, которые одна сессия-источник может создать через create_sub_session. Должно быть не менее 1. | 16 |
serve.maxConcurrentSubSessionsTotal | integer | Максимальное количество выполняемых суб-сессий всех источников в одном рабочем пространстве. Должно быть целым числом от 1 до 1024. Значения выше 1024 ограничиваются до 1024 без предупреждения. | 24 |
advanced
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
advanced.autoConfigureMemory | boolean | Автоматически настраивать ограничения памяти Node.js. | false |
advanced.dnsResolutionOrder | string | Порядок разрешения DNS. | undefined |
advanced.excludedEnvVars | array of strings | Переменные окружения, которые следует исключить из контекста проекта. Указывает переменные окружения, которые не должны загружаться из файлов .env проекта. Это предотвращает вмешательство специфичных для проекта переменных окружения (например, DEBUG=true) в поведение CLI. Переменные из файлов .qwen/.env никогда не исключаются этим списком; переменные, влияющие на загрузчик, всегда отклоняются из каждой области действия .env (см. ниже). | ["DEBUG","DEBUG_MODE"] |
advanced.bugCommand | object | Конфигурация для команды отчета об ошибке. Переопределяет URL по умолчанию для команды /bug. Свойства: urlTemplate (string): URL, который может содержать плейсхолдеры {title} и {info}. Пример: "bugCommand": { "urlTemplate": "https://bug.example.com/new?title={title}&info={info}" } | undefined |
plansDirectory | string | Пользовательский каталог для одобренных файлов Plan Mode. Относительные пути разрешаются от корневого каталога проекта, и разрешенный путь должен оставаться в пределах корневого каталога проекта. Если не задано, файлы планов сохраняются в ~/.qwen/plans. Требуется перезапуск. Если каталог находится внутри корневого каталога проекта, добавьте его в .gitignore, чтобы избежать коммита файлов планов. | undefined |
experimental
Экспериментальные функции. Эти переключатели управляют возможностями, находящимися в разработке, и могут быть изменены или удалены в будущих релизах.
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
experimental.sessionWorkflow | boolean | Показывать DAG Session Workflow веб-оболочки демона и представлять существующий режим одобрения plan как Plan & Review. Изменяет только отображение: не добавляет режим одобрения, не изменяет поведение выполнения Todo и не планирует зависимости. Изменения вступают в силу без перезапуска. | false |
experimental.cron | boolean | Включить инструменты cron/loop в рамках сессии (cron_create, cron_list, cron_delete), чтобы модель могла создавать повторяющиеся промпты. Можно отключить с помощью переменной окружения QWEN_CODE_DISABLE_CRON=1. Требуется перезапуск. | true |
experimental.todoStopGuard | boolean | Разрешить демону и ACP-сессиям продолжать работу после естественной остановки модели, когда текущая цепочка работы успешно записала незавершенный список задач (Todo) верхнего уровня. Требуется tools.todoWrite.enabled. Добавляет не более двух последовательных вызовов основной модели без нового ввода пользователя; ввод пользователя в середине хода начинает новую стадию с двумя попытками. Не восстанавливается после перезапуска процесса и принудительно отключен в режимах safe, bare и Approval plan. Требуется перезапуск. | false |
experimental.sessionWriterLease | boolean | Включить межпроцессное фенсирование записи для сохраненных ACP- и демон-сессий. Значение фиксируется при запуске процесса ACP или демона. Все параллельные записывающие ACP должны включить настройку; смешанные версии или конфигурации остаются небезопасными. Интерактивные и headless-рекордеры не затрагиваются. Требуется перезапуск процесса. | false |
experimental.cronRecurringMaxAgeDays | number | Количество дней, в течение которых повторяющаяся задача cron/loop существует до автоматического истечения срока действия (она выполняется последний раз, а затем удаляется). Установите 0, чтобы отключить истечение срока, чтобы задачи выполнялись до удаления — полезно для долгоживущих демон-развертываний. Можно переопределить с помощью переменной окружения QWEN_CODE_CRON_MAX_AGE_DAYS. Требуется перезапуск. | 7 |
experimental.agentTeam | boolean | Включить инструменты совместной работы команды агентов (team_create, task_create, task_update, send_message и т.д.) для координации мультиагентной работы. Также можно включить через QWEN_CODE_ENABLE_AGENT_TEAM=1. Требуется перезапуск. | false |
experimental.artifact | boolean | Включить инструменты Artifact. Включено по умолчанию. В интерактивных сессиях, не относящихся к SDK, модель может публиковать самодостаточную HTML-страницу как интерактивный Artifact и открывать её в браузере. Не-SDK демон-сессии могут использовать record_artifact только с метаданными. Установите false или используйте QWEN_CODE_DISABLE_ARTIFACT=1, чтобы отключить оба. Требуется перезапуск. | true |
experimental.emitToolUseSummaries | boolean | Генерировать короткую метку на основе LLM после завершения каждого пакета вызовов инструментов. См. Сводки по использованию инструментов. Требуется настройка быстрой модели (fastModel); в противном случае пропускается без уведомления. Можно переопределить для каждой сессии с помощью QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 или =1. | true |
mcpServers
Настраивает подключения к одному или нескольким серверам Model-Context Protocol (MCP) для обнаружения и использования пользовательских инструментов. Qwen Code пытается подключиться к каждому настроенному MCP-серверу для обнаружения доступных инструментов. Если несколько MCP-серверов предоставляют инструмент с одинаковым именем, к именам инструментов будет добавлен префикс в виде псевдонима сервера, определенного вами в конфигурации (например, serverAlias__actualToolName), чтобы избежать конфликтов. Обратите внимание, что система может удалять некоторые свойства схемы из определений инструментов MCP для обеспечения совместимости. Необходимо указать хотя бы одно из значений: command, url или httpUrl. Если указано несколько значений, порядок приоритета следующий: httpUrl, затем url, затем command.
| Свойство | Тип | Описание | Необязательно |
|---|---|---|---|
mcpServers.<SERVER_NAME>.command | string | Команда для запуска MCP-сервера через стандартный ввод-вывод. | Да |
mcpServers.<SERVER_NAME>.args | array of strings | Аргументы, передаваемые команде. | Да |
mcpServers.<SERVER_NAME>.env | object | Переменные окружения, устанавливаемые для процесса сервера. | Да |
mcpServers.<SERVER_NAME>.cwd | string | Рабочий каталог, в котором запускается сервер. | Да |
mcpServers.<SERVER_NAME>.url | string | URL MCP-сервера, использующего Server-Sent Events (SSE) для связи. | Да |
mcpServers.<SERVER_NAME>.httpUrl | string | URL MCP-сервера, использующего потоковый HTTP (streamable HTTP) для связи. | Да |
mcpServers.<SERVER_NAME>.headers | object | Карта HTTP-заголовков, отправляемых с запросами к url или httpUrl. | Да |
mcpServers.<SERVER_NAME>.timeout | number | Таймаут в миллисекундах для запросов к этому MCP-серверу. | Да |
mcpServers.<SERVER_NAME>.trust | boolean | Доверять этому серверу и обходить подтверждения вызова инструментов в доверенном рабочем пространстве. | Да |
mcpServers.<SERVER_NAME>.description | string | Краткое описание сервера, которое может использоваться для отображения. | Да |
mcpServers.<SERVER_NAME>.includeTools | array of strings | Список имен инструментов, которые следует включить из этого MCP-сервера. Если указано, только инструменты из этого списка будут доступны с данного сервера (поведение белого списка). Если не указано, все инструменты сервера включены по умолчанию. | Да |
mcpServers.<SERVER_NAME>.excludeTools | array of strings | Список имен инструментов, которые следует исключить из этого MCP-сервера. Инструменты из этого списка не будут доступны модели, даже если они предоставляются сервером. Примечание: excludeTools имеет приоритет над includeTools — если инструмент есть в обоих списках, он будет исключен. | Да |
telemetry
Настраивает логирование и сбор метрик для Qwen Code. Дополнительную информацию см. в разделе telemetry.
| Параметр | Тип | Описание | По умолчанию |
|---|---|---|---|
telemetry.enabled | boolean | Включена ли телеметрия. | |
telemetry.target | string | Информационная метка для назначения телеметрии (local или gcp). Не управляет маршрутизацией экспортера; для настройки места отправки данных установите telemetry.otlpEndpoint или telemetry.outfile. | |
telemetry.otlpEndpoint | string | Эндпоинт для OTLP Exporter. | |
telemetry.otlpProtocol | string | Протокол для OTLP Exporter (grpc или http). | |
telemetry.logPrompts | boolean | Включать ли содержимое пользовательских промптов и текст запросов/ответов API в логи. | |
telemetry.userId | string | Стабильный идентификатор конечного пользователя, записываемый в GenAI-спаны как расширение ARMS gen_ai.user.id. Предпочитайте псевдонимное значение. Не устанавливайте общепроцессное значение для общего многопользовательского демона или экземпляра канала. | |
telemetry.includeSensitiveSpanAttributes | boolean | Если включено, присоединяет дословные пользовательские промпты, системные промпты, входные/выходные данные инструментов и ответы модели к нативным атрибутам спанов OTel (в дополнение к спанам моста log-to-span). ⚠️ Передает конфиденциальные данные — содержимое файлов, команды оболочки, историю диалогов — в ваш OTLP-бэкенд. | false |
telemetry.sensitiveSpanAttributeMaxLength | number | Максимальная длина строки JavaScript для содержимого каждого конфиденциального нативного атрибута спана OTel. Должно быть в диапазоне от 1 до 104857600 (100 МиБ). Уменьшите значение, если ваш коллектор или бэкенд отклоняет большие атрибуты. | 1048576 |
telemetry.outfile | string | Путь для записи телеметрии в файл. Если задан, переопределяет экспорт OTLP. |
outboundCorrelation
⚠️ Важно для безопасности. Управляет тем, какие клиентские данные корреляции Qwen Code записывает в исходящие запросы к LLM API — это отдельное решение о согласии, отличное от telemetry.*, который регулирует данные, поступающие в ваш СОБСТВЕННЫЙ бэкенд наблюдаемости. Все значения по умолчанию отключены.
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
outboundCorrelation.propagateTraceContext | boolean | Внедрять W3C traceparent в исходящие fetch-запросы и как переменную окружения TRACEPARENT в дочерних процессах оболочки. Требуется telemetry.enabled: true. | false |
outboundCorrelation.allowDynamicHeaderValues | boolean | Разрешить значениям customHeaders содержать runtime-плейсхолдеры, такие как ${session_id}, раскрываемые для каждого запроса. При отключении такое значение отбрасывается, а не отправляется. | false |
{
"outboundCorrelation": {
"allowDynamicHeaderValues": true
}
}allowDynamicHeaderValues — это только переключатель согласия. Какие хосты получают значение и как называется заголовок, определяется там, где живёт заголовок — modelProviders[].generationConfig.customHeaders, см. Динамические значения в customHeaders. Именно поэтому здесь нет allowlist хостов: вы уже выбрали эндпоинт, когда указали baseUrl провайдера, а провайдеры, которые не должны отправлять заголовок, просто не несут его.
Если запись провайдера содержит плейсхолдер, а эта настройка отключена, заголовок отбрасывается, и при запуске выводится предупреждение с указанием обоих — так что шлюз, отклоняющий ваши запросы, никогда не станет тихой загадкой.
Примечание о конфиденциальности: раскрытое значение — это стабильный идентификатор на сессию. Указывайте его только для провайдера, которому вы уже отправляете содержимое своих промптов.
Пример settings.json
Вот пример файла settings.json с вложенной структурой, новой начиная с версии 0.3.0:
{
"proxy": "http://localhost:7890",
"plansDirectory": "./.qwen/plans",
"general": {
"vimMode": true,
"preferredEditor": "code"
},
"ui": {
"theme": "GitHub",
"hideTips": false,
"customWittyPhrases": [
"You forget a thousand things every day. Make sure this is one of 'em",
"Connecting to AGI"
]
},
"tools": {
"approvalMode": "yolo",
"sandbox": "docker",
"sandboxImage": "ghcr.io/qwenlm/qwen-code:0.14.1",
"discoveryCommand": "bin/get_tools",
"callCommand": "bin/call_tool",
"exclude": ["write_file"]
},
"mcpServers": {
"mainServer": {
"command": "bin/mcp_server.py"
},
"anotherServer": {
"command": "node",
"args": ["mcp_server.js", "--verbose"]
}
},
"telemetry": {
"enabled": true,
"target": "local",
"otlpEndpoint": "http://localhost:4317",
"logPrompts": true,
"userId": "user-079458",
"includeSensitiveSpanAttributes": false,
"sensitiveSpanAttributeMaxLength": 1048576
},
"privacy": {
"usageStatisticsEnabled": true
},
"model": {
"name": "qwen3-coder-plus",
"maxSessionTurns": 10,
"enableOpenAILogging": false,
"openAILoggingDir": "~/qwen-logs",
},
"context": {
"fileName": ["CONTEXT.md", "QWEN.md"],
"includeDirectories": ["path/to/dir1", "~/path/to/dir2", "../path/to/dir3"],
"loadFromIncludeDirectories": true,
"fileFiltering": {
"respectGitIgnore": false
}
},
"advanced": {
"excludedEnvVars": ["DEBUG", "DEBUG_MODE", "NODE_ENV"]
}
}История оболочки
CLI хранит историю запускаемых вами команд оболочки. Чтобы избежать конфликтов между различными проектами, эта история сохраняется в каталоге, специфичном для проекта, внутри вашей домашней папки пользователя.
- Расположение:
~/.qwen/tmp/<project_hash>/shell_history<project_hash>— это уникальный идентификатор, сгенерированный из корневого пути вашего проекта.- История хранится в файле с именем
shell_history.
Переменные окружения и файлы .env
Переменные окружения — это распространенный способ настройки приложений, особенно для конфиденциальной информации (например, токенов) или для параметров, которые могут меняться в зависимости от окружения.
Qwen Code может автоматически загружать переменные окружения из файлов .env.
Информацию о переменных, связанных с аутентификацией (например, OPENAI_*), и рекомендуемом подходе с использованием .qwen/.env см. в разделе Аутентификация.
Исключение переменных окружения: Некоторые переменные окружения (например, DEBUG и DEBUG_MODE) по умолчанию автоматически исключаются из файлов .env проекта, чтобы предотвратить вмешательство в поведение CLI. Переменные из файлов .qwen/.env никогда не исключаются. Вы можете настроить это поведение с помощью параметра advanced.excludedEnvVars в вашем файле settings.json.
Переменные, влияющие на загрузчик, всегда отклоняются: Переменные, которые заставляют порождённый процесс Node.js или загрузчик ОС выполнить выбранный атакующим файл — NODE_OPTIONS, npm_config_node_options (а также перенаправления конфигурационных файлов npm: npm_config_userconfig, npm_config_globalconfig, npm_config_script_shell, npm_config_prefix), NODE_PATH, OPENSSL_CONF (загружает через dlopen OpenSSL-движок, выбранный атакующим, при запуске), NODE_REPL_EXTERNAL_MODULE, npm_config_node_gyp, npm_config_init_module, LD_PRELOAD, LD_AUDIT, DYLD_INSERT_LIBRARIES, BASH_ENV, ZDOTDIR и экспортированные определения функций bash (BASH_FUNC_*) — никогда не загружаются из файлов .env (любой области действия, включая .qwen/.env и файлы пользовательского уровня) или из раздела env в settings.json верхнего уровня. Значение из рабочего пространства там могло бы перехватить разрешение модулей для каждого подпроцесса, который запускает Qwen Code, поэтому Qwen Code выводит предупреждение при отклонении такого ключа (один раз за процесс, за ключ и источник — в демоне с несколькими рабочими пространствами отклонение каждого рабочего пространства сообщается отдельно). Чтобы использовать одну из этих переменных, экспортируйте её в окружении, из которого вы запускаете Qwen Code; сессии, размещённые в демоне qwen serve, намеренно не наследуют их, в то время как прямые сессии редактора (ACP) и обычный CLI сохраняют экспортированное значение. Пути поиска библиотек (LD_LIBRARY_PATH, DYLD_LIBRARY_PATH) и только для интерактивной оболочки ENV намеренно не включены в этот список — их отклонение сломает основные инструментальные цепочки (ENV=production, директории библиотек conda/CUDA) — но файл .env проекта всё равно не может применить их при перезагрузке. Это отклонение применяется только к разделу env верхнего уровня: mcpServers[].env для каждого сервера и hooks[].env для каждого хука намеренно ограничены этим сервером или хуком и продолжают применяться (оба интерфейса защищены доверием к папке для конфигураций рабочего пространства). Отдельно, файл .env проекта никогда не может установить QWEN_CLI_ENTRY (точка входа процесса сессии демона), QWEN_CDP_MCP_COMMAND (команда, которую демон запускает как MCP-адаптер автоматизации браузера), QWEN_SERVE_CDP_TUNNEL_OVER_WS (переключает этот туннель), DEV (маркер запуска dev-harness), переменные TLS-якорей доверия (NODE_EXTRA_CA_CERTS, SSL_CERT_FILE, SSL_CERT_DIR, CURL_CA_BUNDLE, REQUESTS_CA_BUNDLE, GIT_SSL_CAINFO, GIT_SSL_CAPATH, npm_config_cafile, npm_config_ca, npm_config_strict_ssl, PIP_CERT — CA атакующего там, или npm_config_strict_ssl=false, включит MITM трафика с токенами, который вызывают git/npm/pip/curl сессии), переменные выполнения команд git (GIT_SSH_COMMAND, GIT_SSH, GIT_EXEC_PATH, GIT_TEMPLATE_DIR, GIT_ASKPASS, GIT_PROXY_COMMAND, GIT_EDITOR, GIT_SEQUENCE_EDITOR, GIT_EXTERNAL_DIFF, GIT_CONFIG_GLOBAL, GIT_CONFIG_SYSTEM, GIT_CONFIG_COUNT, GIT_CONFIG_PARAMETERS и нумерованные пары GIT_CONFIG_KEY_<n>/GIT_CONFIG_VALUE_<n> — git запускает их при любом вызове git в сессии — и XDG_CONFIG_HOME, который перенаправляет $XDG_CONFIG_HOME/git/config, объединяемый git с ~/.gitconfig), перенаправления rc-файлов curl/wget (CURL_HOME, WGETRC — их rc-файлы могут установить прокси или CA атакующего), PIP_CONFIG_FILE (перенаправляет всю конфигурацию pip — index-url, trusted-host, прокси или настройки сертификатов в файле атакующего отправляют pip-трафик или учётные данные сессии инфраструктуре атакующего), SSH_ASKPASS (git/ssh выполняют его как резервную программу запроса парольной фразы при запросе аутентификации), LESSOPEN и LESSCLOSE (less выполняет их как препроцессоры ввода для каждого файла, который просматривает сессия), переменные выбора интерпретатора node-gyp (NODE_GYP_FORCE_PYTHON, npm_config_python, PYTHON — запускаются как Python для сборки при установке нативных дополнений — и npm_config_git, запускается как git-бинарник npm), хуки редактора и запуска (VISUAL, EDITOR — резервная цепочка редактора git, также вызываемая потоками внешнего редактора самого CLI — и PYTHONSTARTUP, который CPython выполняет при интерактивном запуске) или BROWSER (CLI запускает его через безопасный лаунчер браузера). Они остаются устанавливаемыми из окружения оболочки или пользовательского файла .env; в отличие от списка загрузчика выше, они отклоняются только из файлов проекта, поэтому экспортированное вами значение сохраняется. Они также фиксируются при загрузке из пользовательского файла .env: перезагрузка настроек не применяет их редактирование или удаление до перезапуска процесса. Примечание по обновлению: до существования этого списка запрещённых некоторые из этих ключей могли загружаться из файлов .env или settings.json env на некоторых путях; теперь они отклоняются везде с предупреждением, и демон qwen serve больше не передаёт унаследованные значения этих переменных подпроцессам сессий.
Таблица переменных окружения
| Переменная | Описание | Примечания |
|---|---|---|
QWEN_HOME | Настраивает глобальный каталог конфигурации (по умолчанию: ~/.qwen). Принимает абсолютный или относительный путь (относительные пути разрешаются от текущего рабочего каталога). Символ ~ в начале расширяется до домашнего каталога пользователя. | Хранит учетные данные, настройки, память, навыки и другое глобальное состояние. При установке каталоги .qwen/ на уровне проекта не затрагиваются. Пустая строка считается неустановленной. |
QWEN_RUNTIME_DIR | Переопределяет выходной каталог среды выполнения (диалоги, логи, задачи). Если не задан, по умолчанию используется каталог QWEN_HOME. | Используйте это для разделения эфемерных данных среды выполнения и постоянной конфигурации. Полезно, если QWEN_HOME находится в общей или медленной файловой системе. |
QWEN_USAGE_STATISTICS_ENABLED | Установите значение true или 1, чтобы включить статистику использования. Любое другое значение считается отключением. | Переопределяет настройку privacy.usageStatisticsEnabled. По умолчанию включено, если ни один из параметров не настроен. |
QWEN_TELEMETRY_ENABLED | Установите значение true или 1, чтобы включить телеметрию. Любое другое значение считается отключением. | Переопределяет настройку telemetry.enabled. |
QWEN_TELEMETRY_TARGET | Устанавливает информационную метку для назначения телеметрии (local или gcp). Не управляет маршрутизацией; используйте QWEN_TELEMETRY_OTLP_ENDPOINT или QWEN_TELEMETRY_OUTFILE для настройки места отправки данных. | Переопределяет настройку telemetry.target. |
QWEN_TELEMETRY_OTLP_ENDPOINT | Устанавливает эндпоинт OTLP для телеметрии. | Переопределяет настройку telemetry.otlpEndpoint. |
QWEN_TELEMETRY_OTLP_PROTOCOL | Устанавливает протокол OTLP (grpc или http). | Переопределяет настройку telemetry.otlpProtocol. |
QWEN_TELEMETRY_LOG_PROMPTS | Установите значение true или 1, чтобы включить или отключить логирование пользовательских промптов. Любое другое значение считается отключением. | Переопределяет настройку telemetry.logPrompts. |
QWEN_TELEMETRY_USER_ID | Устанавливает стабильный идентификатор конечного пользователя на взаимодействие, LLM, Tool и Agent спанах как gen_ai.user.id. Предпочитайте псевдонимное значение. | Переопределяет telemetry.userId после обрезки. Пустое значение возвращается к настройкам. Это общепроцессное значение и не должно использоваться как идентичность для каждого запроса в общем многопользовательском процессе. |
QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES | Установите значение true или 1, чтобы присоединять дословные пользовательские промпты, системные промпты, ввод/вывод инструментов и ответы модели к нативным атрибутам спанов OTel (и сохранять function_args, error, error.message и error_message в спанах моста log-to-span, а также prompt / request_text / response_text, если также включён telemetry.logPrompts). Любое другое значение отключает это. | Переопределяет настройку telemetry.includeSensitiveSpanAttributes. ⚠️ Передает конфиденциальные данные в ваш OTLP-бэкенд. |
QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH | Устанавливает максимальную длину строки JavaScript для содержимого каждого конфиденциального нативного атрибута спана OTel. Должно быть положительным целым числом, не превышающим 104857600 (100 МиБ). | Переопределяет настройку telemetry.sensitiveSpanAttributeMaxLength. По умолчанию равно 1048576 (1 МиБ); уменьшите значение, если ваш коллектор или бэкенд отклоняет большие атрибуты спанов. |
QWEN_TELEMETRY_OUTFILE | Устанавливает путь к файлу для записи телеметрии. Если задан, переопределяет экспорт OTLP. | Переопределяет настройку telemetry.outfile. |
QWEN_SANDBOX | Альтернатива настройке sandbox в settings.json. | Принимает значения true, false, docker, podman или пользовательскую строку команды. |
QWEN_SANDBOX_IMAGE | Переопределяет выбор образа песочницы для Docker/Podman. | Имеет приоритет над tools.sandboxImage. |
SEATBELT_PROFILE | (Специфично для macOS) Переключает профиль Seatbelt (sandbox-exec) в macOS. | permissive-open: (По умолчанию) Ограничивает запись в папку проекта (и несколько других папок, см. packages/cli/src/serve/sandbox-macos-permissive-open.sb), но разрешает другие операции. strict: Использует строгий профиль, который по умолчанию отклоняет операции. <profile_name>: Использует пользовательский профиль. Чтобы определить пользовательский профиль, создайте файл с именем sandbox-macos-<profile_name>.sb в каталоге .qwen/ вашего проекта (например, my-project/.qwen/sandbox-macos-custom.sb). |
DEBUG или DEBUG_MODE | (часто используются базовыми библиотеками или самим CLI) Установите значение true или 1, чтобы включить подробное логирование отладки, что может быть полезно для устранения неполадок. | Примечание: Эти переменные по умолчанию автоматически исключаются из файлов .env проекта, чтобы предотвратить вмешательство в поведение CLI. Используйте файлы .qwen/.env, если вам нужно установить их специально для Qwen Code. |
NO_COLOR | Установите любое значение, чтобы отключить весь цветной вывод в CLI. | |
FORCE_HYPERLINK | Переопределяет обнаружение кликабельных ссылок OSC 8 в рендерере markdown. Установите значение 1 (или любое ненулевое целое число, или пустую строку) для принудительного включения; установите 0 или нечисловое значение, такое как false / off, для принудительного отключения. Учитывает отказы от NO_COLOR / QWEN_DISABLE_HYPERLINKS, установленные выше. | Используйте это для включения OSC 8 внутри tmux / GNU screen (автоопределение по умолчанию отказывается, поскольку возможности хостового терминала скрыты за мультиплексором). Требуется set -g allow-passthrough on в tmux 3.3+. Также включает Hyper, который не определяется автоматически. |
QWEN_DISABLE_HYPERLINKS | Установите значение 1, чтобы жестко отключить кликабельные гиперссылки OSC 8 в рендерере markdown даже на терминалах, которые автоматически определяются как поддерживающие их. | Полезно, когда терминал заявляет о поддержке, но ломается на длинных URL-адресах, или при передаче вывода через посредника, который искажает escape-последовательности. Рендерер переключается на простое отображение label (url). |
CLI_TITLE | Установите строку для настройки заголовка CLI. | |
CODE_ASSIST_ENDPOINT | Указывает эндпоинт для сервера помощи в написании кода. | Это полезно для разработки и тестирования. |
QWEN_CODE_MAX_OUTPUT_TOKENS | Переопределяет максимальное количество выходных токенов по умолчанию для одного ответа. Если не задано, Qwen Code использует заявленный лимит вывода модели, а при обрезании ответа автоматически повышает лимит (нижний порог 64K) и восстанавливает работу между ходами. Установите конкретное значение (например, 16000), чтобы использовать фиксированный лимит — полезно для самостоятельно размещённых бэкендов с ограниченными ресурсами, которым требуется меньшее резервирование слотов на запрос. | Имеет приоритет над лимитом модели по умолчанию, но переопределяется параметром samplingParams.max_tokens в настройках. Отключает автоматическое повышение при установке. Пример: export QWEN_CODE_MAX_OUTPUT_TOKENS=16000 |
QWEN_CODE_UNATTENDED_RETRY | Установите значение true или 1, чтобы включить режим постоянных повторных попыток. Если включено, временные ошибки нехватки мощности API (HTTP 429 Rate Limit и 529 Overloaded) повторяются бесконечно с экспоненциальной задержкой (максимум 5 минут на попытку) и heartbeat-сигналами каждые 30 секунд в stderr. | Предназначен для CI/CD пайплайнов и фоновой автоматизации, где длительные задачи должны переживать временные сбои API. Должно быть установлено явно — одного CI=true недостаточно для активации этого режима. Подробности см. в разделе Headless Mode. Пример: export QWEN_CODE_UNATTENDED_RETRY=1 |
QWEN_CODE_ACP_REPEATED_TOOL_FAILURE_GUARD | Режим rollout оператора для защиты от повторяющихся сбоев выполнения инструментов ACP. Принимает off, shadow, warn или enforce; отсутствующие или невалидные значения по умолчанию равны shadow. | Применяется только к интерактивным foreground ACP-промптам; маршруты с channel-драйвером и автоматические маршруты остаются выключенными. Файлы окружения проекта и рабочего пространства не могут установить эту политику оператора. Shadow не изменяет продолжение модели и сообщения, но добавляет флаг наблюдения queued-промпта в craft/drainMidTurnQueue; каждый режим, кроме off, требует надёжного состояния queued-промпта. Непустые невалидные значения выводят диагностику; экспортируйте переменную в окружении процесса или файле уровня пользователя. |
QWEN_CODE_PROFILE_STARTUP | Установите значение 1, чтобы включить профилирование производительности при запуске. Записывает JSON-отчет о времени в ~/.qwen/startup-perf/ с длительностью каждой фазы. | Активно только внутри дочернего процесса песочницы (или с QWEN_CODE_PROFILE_STARTUP_OUTER=1). Нулевые накладные расходы, если не задано. Пример: export QWEN_CODE_PROFILE_STARTUP=1 |
QWEN_CODE_PROFILE_STARTUP_OUTER | Установите значение 1 вместе с QWEN_CODE_PROFILE_STARTUP=1, чтобы также собирать профиль запуска во внешнем (до песочницы) процессе. Отчеты внешнего процесса получают префикс имени файла outer-, чтобы отличать их от отчета дочернего процесса песочницы. | По умолчанию выключено — собирает только дочерний процесс песочницы, чтобы избежать дублирования отчетов. Полезно для локальной разработки, где CLI не перезапускается в песочницу. |
QWEN_CODE_PROFILE_STARTUP_NO_HEAP | Установите значение 1 вместе с QWEN_CODE_PROFILE_STARTUP=1, чтобы пропустить снимки process.memoryUsage() для каждой контрольной точки. Полезно при измерении собственных накладных расходов профайлера (эффект наблюдателя). | По умолчанию выключено. Снимки кучи занимают около 50 мкс каждый (значительно менее 1% от общего времени запуска), поэтому большинству пользователей не стоит это менять. |
QWEN_CODE_LEGACY_MCP_BLOCKING | Установите значение 1, чтобы восстановить поведение до progressive-MCP, при котором Config.initialize() синхронно ожидает рукопожатия discover от каждого настроенного MCP-сервера перед возвратом. | По умолчанию выключено. Современный qwen-code позволяет MCP-серверам подключаться в фоновом режиме, пока UI уже интерактивен; модель видит каждую новую партию инструментов в течение ~16 мс после стабилизации сервера. Этот флаг сохранен как запасной вариант для отката на ≥ 1 релиз. Пример: export QWEN_CODE_LEGACY_MCP_BLOCKING=1 |
QWEN_CODE_LEGACY_ERASE_LINES | =1 принудительно отключает оптимизатор перерисовки терминала (восстанавливает последовательности стирания по строкам); =0 принудительно включает его даже в WSL, где он пропускается по умолчанию, потому что ConPTY некорректно обрабатывает пакетные перемещения курсора оптимизатора (issue #7634). Не задано = платформенное значение по умолчанию (пропуск, когда установлен WSL_DISTRO_NAME или WSL_INTEROP). | Запасной вариант при регрессиях потокового вывода. Поскольку значение читается из окружения, лаунчеры, очищающие окружение (например, sudo), тоже отбрасывают его — передавайте его при запуске: sudo QWEN_CODE_LEGACY_ERASE_LINES=1 qwen. Пример: export QWEN_CODE_LEGACY_ERASE_LINES=1 |
Если оба пользовательских файла .env определяют одну и ту же переменную, приоритет имеет файл, специфичный для Qwen: <QWEN_HOME>/.env (или ~/.qwen/.env, если QWEN_HOME не задан) загружается раньше ~/.env, и существующие значения переменных окружения не перезаписываются.
Автономный источник загрузки обновлений
Установите QWEN_UPDATE_BASE_URL, чтобы использовать пользовательский HTTPS-корень релизов для автономных обновлений:
export QWEN_UPDATE_BASE_URL="https://downloads.example.com/qwen-code"
qwen updateДля версии 0.23.0 загрузчик скачивает архив платформы, SHA256SUMS и SHA256SUMS.sig из <base-url>/v0.23.0/. Размещайте эти файлы с теми же именами и структурой каталогов, что и в официальном релизе. Существующие проверки контрольных сумм и подписей по-прежнему применяются, включая QWEN_REQUIRE_SIGNATURE=1, когда требуется подпись.
URL должен использовать HTTPS и не может содержать учётные данные, строку запроса или фрагмент. Окружающие пробелы и конечные слэши удаляются. Пустое значение или значение только из пробелов сохраняет встроенные источники загрузки и их порядок фолбэка. Когда установлен пользовательский корень, неудачная загрузка не переходит на встроенные источники.
Настройте эту переменную в запускающей оболочке или файле .env уровня пользователя. Она отклоняется из файлов .env проекта и .qwen/.env, а также из раздела env верхнего уровня settings.json во всех областях действия. Значение .env уровня пользователя загружается при запуске; перезапустите Qwen Code после его изменения.
Эта настройка применяется к qwen update, /update и автоматическим автономным обновлениям. Она не изменяет обнаружение версий в реестре npm. Она отделена от QWEN_INSTALL_BASE_URL установщика, который указывает непосредственно на каталог конкретной версии.
Аргументы командной строки
Аргументы, переданные непосредственно при запуске CLI, могут переопределять другие конфигурации для данного сеанса.
При выборе образа песочницы приоритет следующий: --sandbox-image > QWEN_SANDBOX_IMAGE > tools.sandboxImage > встроенный образ по умолчанию.
Таблица аргументов командной строки
| Аргумент | Алиас | Описание | Возможные значения | Примечания |
|---|---|---|---|---|
--model | -m | Указывает модель Qwen, используемую в данном сеансе. | Имя модели | Пример: npm start -- --model qwen3-coder-plus |
--prompt | -p | Используется для прямой передачи промпта в команду. Запускает Qwen Code в неинтерактивном режиме. | Текст промпта | Для примеров скриптов используйте флаг --output-format json, чтобы получить структурированный вывод. |
--prompt-interactive | -i | Запускает интерактивный сеанс, используя указанный промпт в качестве начального ввода. | Текст промпта | Промпт обрабатывается внутри интерактивного сеанса, а не до его начала. Нельзя использовать при передаче ввода через stdin. Пример: qwen -i "explain this code" |
--system-prompt | Переопределяет встроенный системный промпт основной сессии для данного запуска. | Текст промпта | Загруженные файлы контекста, такие как QWEN.md, по-прежнему добавляются после этого переопределения. Можно комбинировать с --append-system-prompt. | |
--append-system-prompt | Добавляет дополнительные инструкции к системному промпту основного сеанса для данного запуска. | Текст промпта | Применяется после встроенного промпта и загруженных файлов контекста. Можно комбинировать с --system-prompt. Примеры см. в разделе Headless Mode. | |
--output-style | Выбирает стиль вывода, определяющий формат ответов для данного запуска. | Имя стиля | Concise, Proactive, Explanatory, Learning, имя пользовательского стиля или default для стиля по умолчанию (без учета регистра). Переопределяет настройку general.outputStyle. Неизвестное имя выводит предупреждение, и сессия начинается со стилем по умолчанию. Не действует, когда --system-prompt или QWEN_SYSTEM_MD заменяет встроенный промпт. Примеры см. в разделе Headless Mode. | |
--output-format | -o | Задает формат вывода CLI для неинтерактивного режима. | text, json, stream-json | text: (По умолчанию) Стандартный читаемый человеком вывод. json: Машиночитаемый JSON-вывод, выдаваемый в конце выполнения. stream-json: Потоковые JSON-сообщения, выдаваемые по мере их появления во время выполнения. Для структурированного вывода и скриптов используйте флаг --output-format json или --output-format stream-json. Подробную информацию см. в разделе Headless Mode. |
--input-format | Задает формат, считываемый из стандартного ввода. | text, stream-json | text: (По умолчанию) Стандартный текстовый ввод из stdin или аргументов командной строки. stream-json: Протокол JSON-сообщений через stdin для двусторонней связи. Требование: для --input-format stream-json необходимо установить --output-format stream-json. При использовании stream-json stdin резервируется для сообщений протокола. Подробную информацию см. в разделе Headless Mode. | |
--include-partial-messages | Включает частичные сообщения ассистента при использовании формата вывода stream-json. Если включено, события потока (message_start, content_block_delta и т. д.) выдаются по мере их появления во время стриминга. | По умолчанию: false. Требование: необходимо установить --output-format stream-json. Подробную информацию о событиях потока см. в разделе Headless Mode. | ||
--sandbox | -s | Включает режим песочницы для данного сеанса. | ||
--sandbox-image | Задает URI образа песочницы. | |||
--debug | -d | Включает режим отладки для данного сеанса, обеспечивая более подробный вывод. | ||
--help | -h | Отображает справочную информацию об аргументах командной строки. | ||
--yolo | Включает режим YOLO, который автоматически одобряет все вызовы инструментов. | |||
--approval-mode | Задает режим одобрения для вызовов инструментов. | plan, default, auto-edit, auto, yolo | Поддерживаемые режимы: plan: Только анализ — не изменять файлы и не выполнять команды. default: Требовать одобрения для редактирования файлов или shell-команд (поведение по умолчанию). auto-edit: Автоматически одобрять инструменты редактирования (edit, write_file, notebook_edit), запрашивая подтверждение для остальных. auto: Классификатор LLM автоматически одобряет безопасные действия и блокирует рискованные. yolo: Автоматически одобрять все вызовы инструментов (эквивалентно --yolo). Нельзя использовать вместе с --yolo. Используйте --approval-mode=yolo вместо --yolo для нового унифицированного подхода. Пример: qwen --approval-mode auto-editПодробнее см. в разделе Approval Mode. | |
--allowed-tools | Разделенный запятыми список имен инструментов, которые будут обходить диалог подтверждения. | Имена инструментов | Пример: qwen --allowed-tools "Shell(git status)" | |
--disabled-slash-commands | Имена slash-команд для скрытия/отключения (через запятую или повторением). Объединяется с настройкой slashCommands.disabled и переменной окружения QWEN_DISABLED_SLASH_COMMANDS. Сопоставление с итоговым именем команды происходит без учета регистра, с тем же правилом написания, что и для команд навыков (Skill). | Имена команд | Пример: qwen --disabled-slash-commands "auth,mcp,extensions" | |
--telemetry | Включает телеметрию. | |||
--telemetry-target | Задает цель телеметрии. | Дополнительную информацию см. в разделе телеметрия. | ||
--telemetry-otlp-endpoint | Задает OTLP-эндпоинт для телеметрии. | Дополнительную информацию см. в разделе телеметрия. | ||
--telemetry-otlp-protocol | Задает протокол OTLP для телеметрии (grpc или http). | По умолчанию используется grpc. Дополнительную информацию см. в разделе телеметрия. | ||
--telemetry-log-prompts | Включает логирование промптов для телеметрии. | Дополнительную информацию см. в разделе телеметрия. | ||
--acp | Включает режим ACP (Agent Client Protocol). Полезно для интеграции с IDE/редакторами, такими как Zed. | Стабильная функция. Заменяет устаревший флаг --experimental-acp. | ||
--experimental-lsp | Включает экспериментальную функцию LSP (Language Server Protocol) для интеллектуального анализа кода (переход к определению, поиск ссылок, диагностика и т. д.). | Экспериментальная функция. Требуется установка языковых серверов. | ||
--extensions | -e | Задает список расширений, используемых в данном сеансе. | Имена расширений | Если не указано, используются все доступные расширения. Используйте специальную команду qwen -e none, чтобы отключить все расширения. Пример: qwen -e my-extension -e my-other-extension |
--list-extensions | -l | Выводит список всех доступных расширений и завершает работу. | ||
--proxy | Задает прокси для CLI. | URL прокси | Пример: --proxy http://localhost:7890. | |
--include-directories | Добавляет дополнительные каталоги в рабочее пространство для поддержки нескольких каталогов. | Пути к каталогам | Можно указывать несколько раз или в виде значений, разделенных запятыми. Пример: --include-directories /path/to/project1,/path/to/project2 или --include-directories /path/to/project1 --include-directories /path/to/project2 | |
--screen-reader | Включает режим экранного чтеца, который настраивает TUI для лучшей совместимости с программами экранного доступа. | |||
--version | Отображает версию CLI. | |||
--openai-logging | Включает логирование вызовов OpenAI API для отладки и анализа. | |||
--openai-logging-dir | Задает пользовательский путь к каталогу для логов OpenAI API. | Путь к каталогу | Этот флаг переопределяет настройку openAILoggingDir в settings.json. Поддерживаются абсолютные пути, относительные пути и раскрытие ~. Пример: qwen --openai-logging-dir "~/qwen-logs" --openai-logging |
Контекстные файлы (Иерархический контекст инструкций)
Хотя контекстные файлы (по умолчанию QWEN.md, но настраивается через параметр context.fileName) не являются строгой конфигурацией поведения CLI, они критически важны для настройки контекста инструкций (также называемого “памятью”). Эта мощная функция позволяет передавать ИИ специфичные для проекта инструкции, руководства по стилю кода или любую другую важную справочную информацию, делая его ответы более точными и адаптированными под ваши задачи. CLI включает элементы интерфейса, например, индикатор в футере, показывающий количество загруженных контекстных файлов, чтобы вы всегда были в курсе активного контекста.
- Назначение: Эти Markdown-файлы содержат инструкции, рекомендации или контекст, о которых модель Qwen должна знать во время взаимодействия. Система разработана для управления этим контекстом инструкций иерархически.
Пример содержимого контекстного файла (например, QWEN.md)
Вот концептуальный пример того, что может содержать контекстный файл в корне TypeScript-проекта:
# Project: My Awesome TypeScript Library
## General Instructions:
- When generating new TypeScript code, please follow the existing coding style.
- Ensure all new functions and classes have JSDoc comments.
- Prefer functional programming paradigms where appropriate.
- All code should be compatible with TypeScript 5.0 and Node.js 22+.
## Coding Style:
- Use 2 spaces for indentation.
- Interface names should be prefixed with `I` (e.g., `IUserService`).
- Private class members should be prefixed with an underscore (`_`).
- Always use strict equality (`===` and `!==`).
## Specific Component: `src/api/client.ts`
- This file handles all outbound API requests.
- When adding new API call functions, ensure they include robust error handling and logging.
- Use the existing `fetchWithRetry` utility for all GET requests.
## Regarding Dependencies:
- Avoid introducing new external dependencies unless absolutely necessary.
- If a new dependency is required, please state the reason.Этот пример демонстрирует, как можно предоставить общий контекст проекта, специфичные соглашения по написанию кода и даже заметки о конкретных файлах или компонентах. Чем более релевантными и точными будут ваши контекстные файлы, тем лучше ИИ сможет вам помочь. Настоятельно рекомендуется использовать контекстные файлы для конкретного проекта, чтобы установить соглашения и контекст.
- Иерархическая загрузка и приоритеты: CLI реализует иерархическую систему памяти, загружая контекстные файлы (например,
QWEN.md) из нескольких мест. Содержимое файлов, находящихся ниже в этом списке (более специфичных), обычно переопределяет или дополняет содержимое файлов, находящихся выше (более общих). Точный порядок конкатенации и итоговый контекст можно проверить в диалоговом окне/memory. Типичный порядок загрузки:- Глобальный контекстный файл:
- Расположение:
~/.qwen/<configured-context-filename>(например,~/.qwen/QWEN.mdв домашней директории пользователя). - Область действия: Предоставляет инструкции по умолчанию для всех ваших проектов.
- Расположение:
- Контекстные файлы корня проекта и родительских директорий:
- Расположение: CLI ищет настроенный контекстный файл в текущей рабочей директории, а затем в каждой родительской директории вплоть до корня проекта (определяется по наличию папки
.git) или вашей домашней директории. - Область действия: Предоставляет контекст, относящийся ко всему проекту или его значительной части.
- Расположение: CLI ищет настроенный контекстный файл в текущей рабочей директории, а затем в каждой родительской директории вплоть до корня проекта (определяется по наличию папки
- Глобальный контекстный файл:
- Конкатенация и индикация в UI: Содержимое всех найденных контекстных файлов объединяется (с разделителями, указывающими на их происхождение и путь) и передается как часть системного промпта. В футере CLI отображается количество загруженных контекстных файлов, что дает быстрое визуальное представление об активном контексте инструкций.
- Импорт содержимого: Вы можете модуляризовать свои контекстные файлы, импортируя другие Markdown-файлы с помощью синтаксиса
@path/to/file.md. Подробнее см. в документации по памяти. - Команды для управления памятью:
- Используйте
/memoryдля открытия диалогового окна управления памятью. - Обновите память из диалогового окна, чтобы повторно сканировать и перезагрузить контекстные файлы из всех настроенных мест.
- См. документацию по командам для получения полной информации о команде
/memory.
- Используйте
Понимая и используя эти уровни конфигурации и иерархическую природу контекстных файлов, вы можете эффективно управлять памятью ИИ и адаптировать ответы Qwen Code под ваши конкретные задачи и проекты.
Песочница
Qwen Code может выполнять потенциально небезопасные операции (например, shell-команды и изменение файлов) в изолированной среде (песочнице) для защиты вашей системы.
Песочница отключена по умолчанию, но вы можете включить её несколькими способами:
- Используя флаг
--sandboxили-s. - Установив переменную окружения
QWEN_SANDBOX. - Указав
tools.sandboxв настройках.
⚠️
--yoloне включает песочницу автоматически. Режим YOLO только автоматически одобряет вызовы инструментов; песочницу всё равно нужно явно включить через--sandbox,QWEN_SANDBOXилиtools.sandbox. При запуске в headless / неинтерактивном режиме с--yolo(или--approval-mode=yolo) и без песочницы модель может выполнять shell, write и edit инструменты с правами текущего процесса — в этом случае Qwen Code выводит предупреждение в stderr. После оценки рисков вы можете подавить его с помощьюQWEN_CODE_SUPPRESS_YOLO_WARNING=1.
По умолчанию используется предварительно собранный Docker-образ qwen-code-sandbox.
Для специфичных для проекта требований к песочнице вы можете создать собственный Dockerfile по пути .qwen/sandbox.Dockerfile в корневой директории вашего проекта. Этот Dockerfile может быть основан на базовом образе песочницы:
FROM qwen-code-sandbox
# Add your custom dependencies or configurations here
# For example:
# RUN apt-get update && apt-get install -y some-package
# COPY ./my-config /app/my-configЕсли файл .qwen/sandbox.Dockerfile существует, вы можете использовать переменную окружения BUILD_SANDBOX при запуске Qwen Code для автоматической сборки пользовательского образа песочницы:
BUILD_SANDBOX=1 qwen -sСтатистика использования
Чтобы помочь нам улучшить Qwen Code, мы собираем анонимную статистику использования. Эти данные помогают нам понять, как используется CLI, выявить типичные проблемы и определить приоритеты для новых функций.
Что мы собираем:
- Вызовы инструментов: Мы логируем названия и категории (нативные или MCP) вызываемых инструментов, их терминальный статус (успех, ошибка или отмена) и время выполнения. Мы не собираем аргументы, передаваемые инструментам, или любые данные, которые они возвращают.
- API-запросы: Мы логируем модель, использованную для каждого запроса, длительность запроса и его успешность. Мы не собираем содержимое промптов или ответов.
- Информация о сессии: Мы собираем информацию о конфигурации CLI, такую как включенные инструменты и режим одобрения.
Что мы НЕ собираем:
- Личная информация (PII): Мы не собираем никаких личных данных, таких как ваше имя, адрес электронной почты или API-ключи.
- Содержимое промптов и ответов: Мы не логируем содержимое ваших промптов или ответы модели.
- Содержимое файлов: Мы не логируем содержимое никаких файлов, которые читаются или записываются CLI.
Как отказаться:
Вы можете отказаться от сбора статистики использования в любое время, установив для свойства usageStatisticsEnabled значение false в категории privacy в вашем файле settings.json:
{
"privacy": {
"usageStatisticsEnabled": false
}
}Или установите QWEN_USAGE_STATISTICS_ENABLED=false (или 0) в переменных окружения. Переменная окружения имеет приоритет над настройкой. Перезапустите Qwen Code после изменения любого из значений.
Когда статистика использования включена, события отправляются на эндпоинт сбора RUM Alibaba Cloud.