Конфигурация Qwen Code
Аутентификация / API-ключи: Документация по аутентификации (API-ключ, План кодирования Alibaba Cloud) и переменным окружения, связанным с аутентификацией (например, 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). - Навыки агента в каталоге
.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.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-заметку с указанием авторства ИИ (refs/notes/ai-attribution) для коммитов, сделанных через Qwen Code. Отключение пропускает оба действия. | true |
general.gitCoAuthor.pr | boolean | Добавлять строку с указанием Qwen Code в описание pull request при выполнении gh pr create. | true |
general.defaultFileEncoding | string | Кодировка по умолчанию для новых файлов. Используйте "utf-8" (по умолчанию) для UTF-8 без BOM или "utf-8-bom" для UTF-8 с BOM. Меняйте только если ваш проект явно требует BOM. | "utf-8" |
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.dynamicCommandTranslation | boolean | Включить AI-перевод описаний динамических слеш-команд. При отключении динамические команды сохраняют свои оригинальные описания и пропускают вызовы модели перевода. | false |
output
| Настройка | Тип | Описание | По умолчанию | Возможные значения |
|---|---|---|---|---|
output.format | string | Формат вывода CLI. | "text" | "text", "json" |
output.showTimestamps | boolean | Показывать метку времени [HH:MM:SS] перед каждым ответом ассистента. | false |
ui
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
ui.theme | string | Цветовая тема интерфейса. См. Темы для доступных вариантов. | "Qwen Dark" |
ui.customThemes | object | Определения пользовательских тем. | {} |
ui.statusLine | object | Настройка пользовательской строки состояния. Поддерживает опции command, refreshInterval, respectUserColors и hideContextIndicator. См. Строка состояния. | undefined |
ui.hideWindowTitle | boolean | Скрыть заголовок окна. | false |
ui.hideTips | boolean | Скрыть все подсказки (при запуске и после ответа) в интерфейсе. См. Контекстные подсказки. | 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. | "render" |
ui.showCitations | boolean | Показывать цитаты для сгенерированного текста в чате. | false |
ui.history.collapseOnResume | boolean | Сворачивать историю по умолчанию при возобновлении сессии. Можно переключать с помощью /history collapse-on-resume и /history expand-on-resume. | false |
ui.compactMode | boolean | Скрыть вывод инструментов и размышления для более чистого вида. Переключение с помощью Ctrl+O во время сессии или через диалог настроек. Запросы на одобрение инструментов никогда не скрываются, даже в компактном режиме. Настройка сохраняется между сессиями. | false |
ui.shellOutputMaxLines | number | Максимальное количество строк вывода оболочки, отображаемых в строке. Установите 0, чтобы отключить лимит и показывать полный вывод. Скрытые строки отображаются через индикатор +N lines. Ошибки, команды пользователя с префиксом !, инструменты подтверждения и сфокусированные встроенные оболочки всегда показывают полный вывод. | 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 | Включить предложения продолжения, которые предсказывают, что вы хотите ввести после ответа модели. Предложения отображаются как текст-заполнитель и принимаются с помощью Tab, Enter или стрелки вправо (которые заполняют поле ввода, но не отправляют автоматически). Включено по умолчанию; установите false, чтобы отказаться. | true |
ui.enableCacheSharing | boolean | Использовать кэш-зависимые разветвлённые запросы для генерации предложений. Снижает затраты у провайдеров, поддерживающих кэширование префиксов (экспериментально). | true |
ui.enableSpeculation | boolean | Спекулятивно выполнять принятые предложения до отправки. Результаты отображаются мгновенно при принятии (экспериментально). | false |
ide
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
ide.enabled | boolean | Включить режим интеграции с IDE. | false |
ide.hasSeenNudge | boolean | Видел ли пользователь подсказку об интеграции с IDE. | false |
privacy
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
privacy.usageStatisticsEnabled | boolean | Включить сбор статистики использования. | true |
model
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
model.name | string | Модель Qwen, используемая для бесед. | undefined |
model.maxSessionTurns | number | Максимальное количество циклов (пользователь/модель/инструмент), хранимых в сессии. -1 означает безлимит. | -1 |
model.maxWallTimeSeconds | number | Бюджет реального времени для беспилотных / неинтерактивных запусков в секундах. -1 означает безлимит. Можно переопределить при каждом вызове через --max-wall-time, который требует положительной длительности (90, 30s, 5m, 1h, 1.5h); минимум 1 секунда — значения менее секунды (500ms, 0.5) отклоняются как опечатки. Если флаг опущен, используется это значение. При превышении завершается с кодом 55. | -1 |
model.maxToolCalls | number | Совокупный бюджет вызовов инструментов за запуск (учитывается каждый выполненный инструмент, успешный или нет; structured_output при --json-schema освобождается). -1 означает безлимит; 0 означает “вызовы инструментов запрещены”. Ограничено сверху 1 000 000 для обнаружения опечаток. Можно переопределить через --max-tool-calls. При превышении завершается с кодом 55. | -1 |
model.generationConfig | object | Расширенные переопределения, передаваемые базовому генератору контента. Поддерживает управление запросами, такие как timeout, maxRetries, 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 API), а также параметры тонкой настройки в samplingParams (например temperature, top_p, max_tokens). Оставьте незаданным, чтобы полагаться на настройки провайдера. | undefined |
model.chatCompression.contextPercentageThreshold | number | УДАЛЕНО. Авто-сжатие теперь использует трёхуровневую лестницу порогов (предупреждение / авто / жёсткий), вычисляемую внутренне из контекстного окна модели через функцию computeThresholds() — больше не настраивается пользователем. Установка этого поля в settings.json молча игнорируется (предупреждение при запуске отсутствует). В настоящее время нет замены для “полного отключения сжатия” — реактивное восстановление при переполнении остаётся предохранительным клапаном на уровне API, если само сжатие не удаётся. (См. 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, независимо от использования токенов — предназначено для сеансов с компьютерным зрением, где частые скриншоты размывают внимание модели. Учитываются только изображения, возвращённые в результатах инструментов, а не вставленные пользователем. Переопределение через переменную окружения: QWEN_COMPACT_SCREENSHOT_TRIGGER (1/true/0/false). | true |
model.chatCompression.screenshotTriggerThreshold | number | Количество изображений, возвращённых инструментом, на котором или выше которого срабатывает триггер скриншотов (только если enableScreenshotTrigger). Сжатие сбрасывает счётчик — выжившие изображения повторно встраиваются как части верхнего уровня, которые триггер не учитывает — так что он не сработает немедленно снова. Переопределение через переменную окружения: QWEN_COMPACT_SCREENSHOT_THRESHOLD. | 50 |
model.skipNextSpeakerCheck | boolean | Пропустить проверку следующего говорящего. | true |
model.skipLoopDetection | boolean | Отключает проверки обнаружения циклической потоковой передачи. По умолчанию true (обнаружение цикла пропускается), чтобы избежать ложных срабатываний, прерывающих легитимные рабочие процессы. Установите false, чтобы включить обнаружение циклической потоковой передачи — полезно в качестве защиты в беспилотных / неинтерактивных запусках, где застрявшее повторение может впустую расходовать бюджет. | true |
model.skipStartupContext | boolean | Пропускает отправку контекста рабочей области при запуске (сводка окружения и подтверждение) в начале каждого сеанса. Включите, если предпочитаете предоставлять контекст вручную или хотите сэкономить токены при запуске. | false |
model.enableOpenAILogging | boolean | Включает журналирование вызовов OpenAI API для отладки и анализа. При включении запросы и ответы API записываются в JSON-файлы. | false |
model.openAILoggingDir | string | Путь к каталогу для журналов OpenAI API. Если не указан, по умолчанию используется logs/openai в текущем рабочем каталоге. Поддерживает абсолютные пути, относительные пути (разрешаются из текущего рабочего каталога) и расширение ~ (домашний каталог). | undefined |
| Пример model.generationConfig: |
{
"model": {
"generationConfig": {
"timeout": 60000,
"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
}
}
}
}max_tokens (адаптивное количество выходных токенов):
Если samplingParams.max_tokens не задан, Qwen Code использует адаптивную стратегию выходных токенов для оптимизации использования ресурсов GPU:
- Запросы начинаются с ограничения по умолчанию в 8K выходных токенов.
- Если ответ был обрезан (модель достигла лимита), Qwen Code автоматически повторяет запрос с лимитом в 64K токенов.
- Частичный вывод отбрасывается и заменяется полным ответом из повторного запроса.
Это прозрачно для пользователей — вы можете кратко увидеть индикатор повтора, если произошло повышение лимита. Поскольку 99% ответов имеют объём менее 5K токенов, повтор происходит редко (<1% запросов).
Чтобы переопределить это поведение, задайте samplingParams.max_tokens в настройках или используйте переменную окружения QWEN_CODE_MAX_OUTPUT_TOKENS.
toolResultContentFormat:
Управляет сериализацией текстовых результатов инструментов в запросах, совместимых с OpenAI. Значение по умолчанию "parts" сохраняет стандартную форму массива content-part. Устанавливайте "string" только для устаревших сред выполнения, совместимых с OpenAI, шаблоны инструментов которых игнорируют текстовые content parts, например, старые шаблоны 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). Для провайдеров Anthropic и Gemini оно игнорируется. Для моделей провайдера определяйте 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. | "" |
context
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
context.fileName | string или array of strings | Имя файла(ов) контекста. | undefined |
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.core | array of strings | Устарел. Будет удален в следующей версии. Используйте permissions.allow + permissions.deny вместо этого. Ограничивает встроенные инструменты списком разрешенных. Все инструменты, не входящие в список, отключены. | undefined | |
tools.exclude | array of strings | Устарел. Используйте permissions.deny вместо этого. Имена инструментов, исключаемые из обнаружения. Автоматически переносится в формат permissions при первой загрузке. | undefined | |
tools.allowed | array of strings | Устарел. Используйте permissions.allow вместо этого. Имена инструментов, которые обходят диалоговое окно подтверждения. Автоматически переносится в формат permissions при первой загрузке. | undefined | |
tools.approvalMode | string | Устанавливает режим подтверждения по умолчанию для использования инструментов. | default | Возможные значения: plan (только анализ, не изменяет файлы и не выполняет команды), default (требуется подтверждение перед редактированием файлов или выполнением команд оболочки), auto-edit (автоматически подтверждает редактирование файлов), auto (LLM-классификатор автоматически подтверждает безопасные действия, блокирует рискованные), yolo (автоматически подтверждает все вызовы инструментов) |
tools.discoveryCommand | string | Команда для выполнения обнаружения инструментов. | undefined | |
tools.callCommand | string | Определяет пользовательскую команду оболочки для вызова конкретного инструмента, обнаруженного с помощью tools.discoveryCommand. Команда оболочки должна соответствовать следующим требованиям: она должна принимать имя функции name (точно так, как в объявлении функции ) в качестве первого аргумента командной строки. Она должна читать аргументы функции в формате 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.truncateToolOutputThreshold | number | Обрезать вывод инструмента, если он превышает указанное количество символов. Применяется к инструментам Shell, Grep, Glob, ReadFile и ReadManyFiles. | 25000 | Требуется перезапуск: Да |
tools.truncateToolOutputLines | number | Максимальное количество строк или записей, сохраняемых при обрезке вывода инструмента. Применяется к инструментам Shell, Grep, Glob, ReadFile и ReadManyFiles. | 1000 | Требуется перезапуск: Да |
tools.computerUse.enabled | boolean | Включить встроенные инструменты Computer Use (cua-driver для нативной автоматизации рабочего стола). Если true (по умолчанию), инструменты computer_use__* регистрируются как отложенные встроенные; при первом вызове загружается подписанный бинарный файл cua-driver в ~/.qwen/computer-use/ и выполняется настройка разрешений macOS Accessibility / Screen Recording. | true | Требуется перезапуск: Да |
tools.computerUse.maxImageDimension | number | Максимальный размер пикселей по длинной стороне для скриншотов cua-driver (через set_config’s max_image_dimension). -1 (по умолчанию) оставляет встроенное значение по умолчанию cua-driver (1568); 0 отключает изменение размера (полное разрешение); положительное значение ограничивает длинную сторону. Меньшие значения снижают затраты токенов на зрение за счет мелких деталей. | -1 | Требуется перезапуск: Да. Переопределение через переменную окружения: QWEN_COMPUTER_USE_MAX_IMAGE_DIMENSION (неотрицательное целое число; имеет приоритет над этим параметром) |
Миграция с tools.core / tools.exclude / tools.allowed: Эти устаревшие настройки объявлены устаревшими и автоматически переносятся в новый формат permissions при первой загрузке. Рекомендуется настраивать permissions.allow / permissions.deny напрямую. Используйте /permissions для интерактивного управления правилами.
memory
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
memory.enableManagedAutoMemory | boolean | Включить фоновое извлечение воспоминаний из диалогов. | true |
memory.enableManagedAutoDream | boolean | Включить автоматическую консолидацию (дедупликацию и очистку) собранных воспоминаний. | true |
memory.enableAutoSkill | boolean | Включить фоновый анализ для повторно используемых навыков проекта после сессий с интенсивным использованием инструментов. | true |
memory.autoSkillConfirm | boolean | Запрашивать подтверждение перед добавлением автоматически созданных навыков в библиотеку навыков. При выключении навыки сохраняются сразу. | true |
Подробнее о работе автоматической памяти и использовании команд /memory, /remember и /dream см. в разделе Память.
permissions
Система разрешений обеспечивает тонкий контроль над тем, какие инструменты могут выполняться, какие требуют подтверждения, а какие заблокированы.
Приоритет решений (от наибольшего к наименьшему): deny > ask > allow > (по умолчанию/интерактивный режим)
Первое совпавшее правило имеет приоритет. Правила используют формат "ToolName" или "ToolName(спецификатор)".
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
permissions.allow | array of strings | Правила для автоматически одобренных вызовов инструментов (без запроса подтверждения). Объединяются из всех областей (пользователь + проект + система). | undefined |
permissions.ask | array of strings | Правила для вызовов инструментов, которые всегда требуют подтверждения пользователя. Имеют приоритет над allow. | undefined |
permissions.deny | array of strings | Правила для заблокированных вызовов инструментов. Наивысший приоритет — переопределяет allow и ask. | 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" | Все операции чтения файлов (чтение, grep, glob, список) |
"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/** |
| (нет) | То же, что и ./ | secrets/** |
Предотвращение обхода через shell-команды:
Правила разрешений для Read, Edit и WebFetch также применяются, когда агент выполняет эквивалентные shell-команды. Например, если Read(./.env) указано в deny, агент не сможет обойти это через cat .env в shell-команде. Поддерживаемые shell-команды включают cat, grep, curl, wget, cp, mv, rm, chmod и многие другие. Неизвестные/безопасные команды (например, git) не затрагиваются правилами файлов/сети.
Миграция из устаревших настроек:
| Устаревшая настройка | Эквивалентное правило permissions | Примечания |
|---|---|---|
tools.allowed | permissions.allow | Автомигрируется при первой загрузке |
tools.exclude | permissions.deny | Автомигрируется при первой загрузке |
tools.core | permissions.allow (белый список) | Автомигрируется; неперечисленные инструменты отключаются на уровне реестра |
Пример конфигурации:
{
"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
Управляет тем, какие слеш-команды доступны в CLI. Полезно для ограничения поверхности команд в мультитенантных или корпоративных развертываниях.
| Настройка | Тип | Описание | По умолч. |
|---|---|---|---|
slashCommands.disabled | массив строк | Имена слеш-команд, которые нужно скрыть и отказаться выполнять. Сравнение без учёта регистра с финальным именем команды (для команд расширений это уточнённая форма, например myext.deploy). Объединяется как объединение по областям видимости, так что настройки рабочей области могут добавлять, но не удалять записи, определённые в пользовательских или системных настройках. | undefined |
Тот же список запрета может быть передан через флаг 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] Эта настройка ограничивает только слеш-команды (например,
/auth,/mcp). Она не затрагивает разрешения инструментов — для этого используйтеpermissions.deny. Также она не перехватывает сочетания клавиш, такие какCtrl+CилиEsc.
mcp
| Настройка | Тип | Описание | По умолч. |
|---|---|---|---|
mcp.serverCommand | строка | Команда для запуска MCP-сервера. | undefined |
mcp.allowed | массив строк | Белый список разрешённых MCP-серверов. Позволяет указать список имён MCP-серверов, которые должны быть доступны модели. Можно использовать для ограничения набора подключаемых MCP-серверов. Обратите внимание, что это игнорируется, если установлен --allowed-mcp-server-names. | undefined |
mcp.excluded | массив строк | Чёрный список исключаемых MCP-серверов. Сервер, перечисленный как в mcp.excluded, так и в mcp.allowed, исключается. Обратите внимание, что это игнорируется, если установлен --allowed-mcp-server-names. | undefined |
Замечание по безопасности для MCP-серверов: Эти настройки используют простое сопоставление строк по именам MCP-серверов, которые могут быть изменены. Если вы системный администратор и хотите предотвратить обход этого ограничения пользователями, рассмотрите возможность настройки mcpServers на уровне системных параметров, чтобы пользователь не мог настраивать собственные MCP-серверы. Это не следует рассматривать как абсолютный механизм безопасности.
lsp
[!warning] Экспериментальная возможность: Поддержка LSP в настоящее время является экспериментальной и отключена по умолчанию. Включите её с помощью флага командной строки
--experimental-lsp.
Протокол Language Server Protocol (LSP) предоставляет функции интеллектуального анализа кода, такие как переход к определению, поиск ссылок и диагностика.
Настройка LSP-сервера осуществляется через файлы .lsp.json в корневой директории проекта, а не через settings.json. Дополнительные сведения о конфигурации и примеры см. в документации по LSP.
security
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
security.folderTrust.enabled | boolean | Настройка для отслеживания, включено ли доверие к папкам. | false |
security.auth.selectedType | string | Текущий выбранный тип аутентификации. | undefined |
security.auth.enforcedType | string | Обязательный тип аутентификации (полезно для предприятий). | undefined |
security.auth.useExternal | boolean | Использовать ли внешний процесс аутентификации. | undefined |
advanced
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
advanced.autoConfigureMemory | boolean | Автоматически настраивать ограничения памяти Node.js. | false |
advanced.dnsResolutionOrder | string | Порядок разрешения DNS. | undefined |
advanced.excludedEnvVars | array of strings | Переменные окружения, исключаемые из контекста проекта. Указывает переменные окружения, которые не следует загружать из файлов .env проекта. Это предотвращает влияние специфичных для проекта переменных (например, DEBUG=true) на поведение CLI. Переменные из файлов .qwen/.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 | Пользовательский каталог для утверждённых файлов режима Планирования. Относительные пути разрешаются относительно корня проекта, и разрешённый путь должен оставаться в пределах корня проекта. Если не задан, файлы планов хранятся в ~/.qwen/plans. Требуется перезапуск. Если каталог находится внутри корня проекта, добавьте его в .gitignore, чтобы избежать фиксации файлов планов. | undefined |
experimental
Экспериментальные возможности. Эти переключатели открывают разрабатываемые функции, которые могут измениться или быть удалены в будущих версиях.
| Настройка | Тип | Описание | По умолчанию |
|---|---|---|---|
experimental.cron | boolean | Включить внутрисеансовые инструменты cron/циклов (cron_create, cron_list, cron_delete), чтобы модель могла создавать повторяющиеся запросы. Можно отключить через переменную окружения QWEN_CODE_DISABLE_CRON=1. Требуется перезапуск. | true |
experimental.agentTeam | boolean | Включить инструменты совместной работы агентов в команде (team_create, task_create, task_update, send_message и т.д.) для многокомпонентной координации. Также можно включить через QWEN_CODE_ENABLE_AGENT_TEAM=1. Требуется перезапуск. | false |
experimental.artifact | boolean | Включить инструмент Artifact, позволяющий модели публиковать самодостаточную HTML-страницу и открывать её в браузере. Только для интерактивных сессий без SDK. Переключается через QWEN_CODE_ENABLE_ARTIFACT=1 / QWEN_CODE_DISABLE_ARTIFACT=1. Требуется перезапуск. | false |
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 для взаимодействия. | Да |
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-экспортера. | |
telemetry.otlpProtocol | string | Протокол для OTLP-экспортера (grpc или http). | |
telemetry.logPrompts | boolean | Включает или выключает включение содержимого пользовательских запросов в логи. | |
telemetry.includeSensitiveSpanAttributes | boolean | При включении добавляет дословные пользовательские запросы, системные запросы, вводы/выводы инструментов и ответы модели к собственным атрибутам span OTel (в дополнение к span моста log-to-span). ⚠️ Передает конфиденциальные данные — содержимое файлов, команды оболочки, историю разговоров — в ваш OTLP-бэкенд. | false |
telemetry.outfile | string | Путь для записи телеметрии в файл. При установке переопределяет экспорт OTLP. |
Пример settings.json
Вот пример файла settings.json с вложенной структурой, начиная с версии v0.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,
"includeSensitiveSpanAttributes": false
},
"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.excludedEnvVarssetting в файле settings.json.
Таблица переменных окружения
| Переменная | Описание | Примечания |
|---|---|---|
QWEN_HOME | Настраивает глобальную директорию конфигурации (по умолчанию: ~/.qwen). Принимает абсолютный или относительный путь (относительные пути разрешаются относительно текущей рабочей директории). Начальный ~ раскрывается в домашнюю директорию пользователя. | Хранит учётные данные, настройки, память, навыки и другое глобальное состояние. При установке этой переменной проектные директории .qwen/ не затрагиваются. Пустая строка считается неустановленной. |
QWEN_RUNTIME_DIR | Переопределяет директорию выходных данных во время выполнения (разговоры, журналы, задачи). Если не установлена, по умолчанию используется директория QWEN_HOME. | Используйте эту переменную, чтобы отделить эфемерные данные времени выполнения от постоянной конфигурации. Полезно, когда QWEN_HOME находится в общей/медленной файловой системе. |
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_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES | Установите в true или 1, чтобы прикреплять дословные пользовательские запросы, системные запросы, ввод/вывод инструментов и ответы модели к собственным атрибутам span OTel (а также сохранять prompt / function_args / response_text в bridge-спанах логов в span). Любое другое значение отключает это. | Переопределяет параметр telemetry.includeSensitiveSpanAttributes. |
Если оба пользовательских файла .env определяют одну и ту же переменную, побеждает файл, специфичный для Qwen: <QWEN_HOME>/.env (или ~/.qwen/.env, если QWEN_HOME не задан) загружается раньше, чем ~/.env, и существующие значения переменных окружения не перезаписываются. |
Аргументы командной строки
Аргументы, переданные непосредственно при запуске CLI, могут переопределять другие настройки для данной конкретной сессии.
Для выбора образа sandbox приоритет следующий:
--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 "объясни этот код" |
--system-prompt | Переопределяет встроенный системный промпт основной сессии для этого запуска. | Текст вашего промпта | Загруженные контекстные файлы, такие как QWEN.md, всё равно добавляются после этого переопределения. Можно комбинировать с --append-system-prompt. | |
--append-system-prompt | Добавляет дополнительные инструкции к системному промпту основной сессии для этого запуска. | Текст вашего промпта | Применяется после встроенного промпта и загруженных контекстных файлов. Можно комбинировать с --system-prompt. Примеры см. в разделе 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 для этой сессии. | ||
--sandbox-image | Устанавливает URI образа sandbox. | |||
--debug | -d | Включает отладочный режим для этой сессии, обеспечивая более подробный вывод. | ||
--all-files | -a | Если установлено, рекурсивно включает все файлы в текущем каталоге в качестве контекста для промпта. | ||
--help | -h | Отображает справочную информацию об аргументах командной строки. | ||
--show-memory-usage | Отображает текущее использование памяти. | |||
--yolo | Включает режим YOLO, который автоматически одобряет все вызовы инструментов. | |||
--approval-mode | Устанавливает режим одобрения для вызовов инструментов. | plan, default, auto-edit, auto, yolo | Поддерживаемые режимы: plan: только анализ — не изменять файлы и не выполнять команды. default: требовать одобрения для редактирования файлов или команд оболочки (поведение по умолчанию). auto-edit: автоматически одобрять инструменты редактирования (edit, write_file, notebook_edit), запрашивая одобрение для остальных. auto: классификатор LLM автоматически одобряет безопасные действия и блокирует рискованные. yolo: автоматически одобрять все вызовы инструментов (эквивалент --yolo). Нельзя использовать вместе с --yolo. Вместо --yolo используйте --approval-mode=yolo для нового унифицированного подхода. Пример: qwen --approval-mode auto-editПодробнее о режиме одобрения. | |
--allowed-tools | Список имён инструментов, разделённых запятыми, которые будут пропускать диалог подтверждения. | Имена инструментов | Пример: qwen --allowed-tools "Shell(git status)" | |
--disabled-slash-commands | Имена слеш-команд для скрытия/отключения (через запятую или повторением флага). Объединяется с настройкой slashCommands.disabled и переменной окружения QWEN_DISABLED_SLASH_COMMANDS. Регистронезависимое сравнение с финальным именем команды. | Имена команд | Пример: 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 | Включает дополнительные каталоги в рабочую область для поддержки нескольких каталогов. | Пути к каталогам | Можно указать несколько раз или через запятую. Максимум можно добавить 5 каталогов. Пример: --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 | Включает логирование вызовов API OpenAI для отладки и анализа. | Этот флаг переопределяет настройку enableOpenAILogging в settings.json. | ||
--openai-logging-dir | Устанавливает пользовательский путь к каталогу для логов API OpenAI. | Путь к каталогу | Этот флаг переопределяет настройку openAILoggingDir в settings.json. Поддерживаются абсолютные пути, относительные пути и расширение ~. Пример: qwen --openai-logging-dir "~/qwen-logs" --openai-logging |
Контекстные файлы (иерархический инструктивный контекст)
Хотя это не является строгой конфигурацией поведения CLI, контекстные файлы (по умолчанию QWEN.md, но настраиваются через параметр context.fileName) имеют решающее значение для настройки инструктивного контекста (также называемого “памятью”). Эта мощная функция позволяет передавать ИИ проектно-специфичные инструкции, руководства по стилю кодирования или любую релевантную фоновую информацию, делая его ответы более адаптированными и точными под ваши нужды. CLI включает элементы пользовательского интерфейса, такие как индикатор в нижнем колонтитуле, показывающий количество загруженных контекстных файлов, чтобы вы были в курсе активного контекста.
- Назначение: Эти Markdown-файлы содержат инструкции, руководства или контекст, который вы хотите, чтобы модель Qwen учитывала во время взаимодействия. Система предназначена для иерархического управления этим инструктивным контекстом.
Пример содержимого контекстного файла (например, QWEN.md)
Вот концептуальный пример того, что может содержать контекстный файл в корне TypeScript-проекта:
# Проект: Моя классная библиотека TypeScript
## Общие инструкции:
- При генерации нового кода TypeScript, пожалуйста, придерживайтесь существующего стиля кодирования.
- Убедитесь, что все новые функции и классы имеют комментарии JSDoc.
- Отдавайте предпочтение парадигмам функционального программирования, где это уместно.
- Весь код должен быть совместим с TypeScript 5.0 и Node.js 22+.
## Стиль кодирования:
- Используйте отступы в 2 пробела.
- Имена интерфейсов должны иметь префикс `I` (например, `IUserService`).
- Приватные члены классов должны иметь префикс подчеркивания (`_`).
- Всегда используйте строгое равенство (`===` и `!==`).
## Конкретный компонент: `src/api/client.ts`
- Этот файл обрабатывает все исходящие API-запросы.
- При добавлении новых функций вызовов API убедитесь, что они включают надежную обработку ошибок и логирование.
- Используйте существующую утилиту `fetchWithRetry` для всех GET-запросов.
## Относительно зависимостей:
- Избегайте внедрения новых внешних зависимостей, если это не абсолютно необходимо.
- Если требуется новая зависимость, пожалуйста, укажите причину.Этот пример демонстрирует, как вы можете предоставить общий контекст проекта, конкретные соглашения по кодированию и даже заметки об определенных файлах или компонентах. Чем более релевантны и точны ваши контекстные файлы, тем лучше ИИ сможет вам помочь. Настоятельно рекомендуется использовать проектно-специфичные контекстные файлы для установления соглашений и контекста.
- Иерархическая загрузка и приоритет: CLI реализует иерархическую систему памяти, загружая контекстные файлы (например,
QWEN.md) из нескольких местоположений. Содержимое файлов, расположенных ниже в этом списке (более специфичные), обычно переопределяет или дополняет содержимое из файлов, расположенных выше (более общие). Точный порядок объединения и итоговый контекст можно просмотреть в диалоге/memory. Типичный порядок загрузки:- Глобальный контекстный файл:
- Расположение:
~/.qwen/<настроенное-имя-контекстного-файла>(например,~/.qwen/QWEN.mdв вашей домашней директории). - Область действия: Предоставляет инструкции по умолчанию для всех ваших проектов.
- Расположение:
- Контекстные файлы корня проекта и родительских директорий:
- Расположение: CLI ищет настроенный контекстный файл в текущей рабочей директории, а затем в каждой родительской директории вплоть до корня проекта (определяется по папке
.git) или вашей домашней директории. - Область действия: Предоставляет контекст, релевантный для всего проекта или его значительной части.
- Расположение: CLI ищет настроенный контекстный файл в текущей рабочей директории, а затем в каждой родительской директории вплоть до корня проекта (определяется по папке
- Глобальный контекстный файл:
- Объединение и индикация в UI: Содержимое всех найденных контекстных файлов объединяется (с разделителями, указывающими их происхождение и путь) и передается как часть системного промпта. Нижний колонтитул CLI отображает количество загруженных контекстных файлов, давая вам быструю визуальную подсказку об активном инструктивном контексте.
- Импорт содержимого: Вы можете модуляризировать свои контекстные файлы, импортируя другие Markdown-файлы с помощью синтаксиса
@path/to/file.md. Для получения дополнительной информации см. Документацию по памяти. - Команды для управления памятью:
- Используйте
/memory, чтобы открыть диалог управления памятью. - Обновите память из диалога, чтобы повторно просканировать и перезагрузить контекстные файлы из всех настроенных местоположений.
- См. Документацию по командам для получения полной информации о команде
/memory.
- Используйте
Понимая и используя эти уровни конфигурации и иерархическую природу контекстных файлов, вы сможете эффективно управлять памятью ИИ и адаптировать ответы Qwen Code под свои конкретные потребности и проекты.
Песочница
Qwen Code может выполнять потенциально опасные операции (например, команды оболочки и модификацию файлов) в изолированной среде (песочнице) для защиты вашей системы.
Песочница отключена по умолчанию, но вы можете включить ее несколькими способами:
- Используя флаг
--sandboxили-s. - Установив переменную окружения
QWEN_SANDBOX. - Установив параметр
tools.sandboxв настройках.
⚠️
--yoloне включает автоматически песочницу. Режим YOLO только автоматически одобряет вызовы инструментов; использование песочницы по-прежнему должно быть явно выбрано через--sandbox,QWEN_SANDBOXилиtools.sandbox. При безголовых/неинтерактивных запусках с--yolo(или--approval-mode=yolo) и без песочницы модель может выполнять инструменты оболочки, записи и редактирования на уровне привилегий текущего процесса — в этом случае 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, выявить распространенные проблемы и определить приоритеты новых функций.
Что мы собираем:
- Вызовы инструментов: Мы регистрируем названия вызываемых инструментов, успешность их выполнения и время выполнения. Мы не собираем аргументы, переданные инструментам, или любые возвращаемые ими данные.
- API-запросы: Мы регистрируем модель, использованную для каждого запроса, длительность запроса и его успешность. Мы не собираем содержимое промптов или ответов.
- Информация о сессии: Мы собираем информацию о конфигурации CLI, например, включенные инструменты и режим подтверждения.
Что мы НЕ собираем:
- Личная информация (PII): Мы не собираем никакую личную информацию, такую как ваше имя, адрес электронной почты или API-ключи.
- Содержимое промптов и ответов: Мы не регистрируем содержимое ваших промптов или ответов модели.
- Содержимое файлов: Мы не регистрируем содержимое файлов, которые читаются или записываются CLI.
Как отказаться от сбора:
Вы можете в любой момент отказаться от сбора статистики использования, установив свойство usageStatisticsEnabled в false в категории privacy вашего файла settings.json:
{
"privacy": {
"usageStatisticsEnabled": false
}
}Когда сбор статистики использования включен, события отправляются на конечную точку сбора Alibaba Cloud RUM.