Skip to Content
Guide utilisateurConfigurationParamètres

Configuration de Qwen Code

Tip

Authentification / Clés API : L’authentification (clé API, Alibaba Cloud Coding Plan) et les variables d’environnement liées à l’authentification (comme OPENAI_API_KEY) sont documentées dans Authentification.

Note

Note sur le nouveau format de configuration : Le format du fichier settings.json a été mis à jour vers une nouvelle structure plus organisée. L’ancien format sera migré automatiquement. Qwen Code offre plusieurs façons de configurer son comportement, notamment via des variables d’environnement, des arguments en ligne de commande et des fichiers de paramètres. Ce document décrit les différentes méthodes de configuration et les paramètres disponibles.

Niveaux de configuration

La configuration est appliquée selon l’ordre de priorité suivant (les numéros les plus bas sont écrasés par les numéros les plus élevés) :

NiveauSource de configurationDescription
1Valeurs par défautValeurs par défaut codées en dur dans l’application
2Fichier des paramètres système par défautParamètres par défaut à l’échelle du système qui peuvent être remplacés par d’autres fichiers de paramètres
3Fichier des paramètres utilisateurParamètres globaux pour l’utilisateur actuel
4Fichier des paramètres du projetParamètres spécifiques au projet
5Fichier des paramètres systèmeParamètres à l’échelle du système qui remplacent tous les autres fichiers de paramètres
6Variables d’environnementVariables à l’échelle du système ou spécifiques à une session, potentiellement chargées depuis des fichiers .env
7Arguments en ligne de commandeValeurs transmises lors du lancement de la CLI

Fichiers de paramètres

Qwen Code utilise des fichiers de paramètres JSON pour la configuration persistante. Il existe quatre emplacements pour ces fichiers :

Type de fichierEmplacementPortée
Fichier des paramètres système par défautLinux : /etc/qwen-code/system-defaults.json
Windows : C:\ProgramData\qwen-code\system-defaults.json
macOS : /Library/Application Support/QwenCode/system-defaults.json
Le chemin peut être remplacé en utilisant la variable d’environnement QWEN_CODE_SYSTEM_DEFAULTS_PATH.
Fournit une couche de base de paramètres par défaut à l’échelle du système. Ces paramètres ont la priorité la plus basse et sont destinés à être remplacés par les paramètres utilisateur, de projet ou de remplacement système.
Fichier des paramètres utilisateur~/.qwen/settings.json (où ~ est votre répertoire personnel).S’applique à toutes les sessions Qwen Code de l’utilisateur actuel.
Fichier des paramètres du projet.qwen/settings.json dans le répertoire racine de votre projet.S’applique uniquement lors de l’exécution de Qwen Code depuis ce projet spécifique. Les paramètres du projet remplacent les paramètres utilisateur.
Fichier des paramètres systèmeLinux : /etc/qwen-code/settings.json
Windows : C:\ProgramData\qwen-code\settings.json
macOS : /Library/Application Support/QwenCode/settings.json
Le chemin peut être remplacé en utilisant la variable d’environnement QWEN_CODE_SYSTEM_SETTINGS_PATH.
S’applique à toutes les sessions Qwen Code sur le système, pour tous les utilisateurs. Les paramètres système remplacent les paramètres utilisateur et de projet. Peut être utile pour les administrateurs système en entreprise afin de contrôler les configurations Qwen Code des utilisateurs.
Note

Note sur les variables d’environnement dans les paramètres : Les valeurs de type chaîne de caractères dans vos fichiers settings.json peuvent référencer des variables d’environnement en utilisant la syntaxe $VAR_NAME ou ${VAR_NAME}. Ces variables seront résolues automatiquement au chargement des paramètres. Par exemple, si vous avez une variable d’environnement MY_API_TOKEN, vous pouvez l’utiliser dans settings.json comme ceci : "apiKey": "$MY_API_TOKEN".

Le répertoire .qwen dans votre projet

En plus d’un fichier de paramètres de projet, le répertoire .qwen d’un projet peut contenir d’autres fichiers spécifiques au projet liés au fonctionnement de Qwen Code, tels que :

Migration de la configuration

Qwen Code migre automatiquement les anciens paramètres de configuration vers le nouveau format. Les anciens fichiers de paramètres sont sauvegardés avant la migration. Les paramètres suivants ont été renommés d’une nomenclature négative (disable*) à positive (enable*) :

Ancien paramètreNouveau paramètreNotes
disableAutoUpdate + disableUpdateNaggeneral.enableAutoUpdateConsolidé en un seul paramètre
disableLoadingPhrasesui.accessibility.enableLoadingPhrases
disableFuzzySearchcontext.fileFiltering.enableFuzzySearch
disableCacheControlmodel.generationConfig.enableCacheControl
Note

Inversion des valeurs booléennes : Lors de la migration, les valeurs booléennes sont inversées (par ex., disableAutoUpdate: true devient enableAutoUpdate: false).

Politique de consolidation pour disableAutoUpdate et disableUpdateNag

Lorsque les deux anciens paramètres sont présents avec des valeurs différentes, la migration suit cette politique : si soit disableAutoUpdate soit disableUpdateNag est true, alors enableAutoUpdate devient false :

disableAutoUpdatedisableUpdateNagenableAutoUpdate migré
falsefalsetrue
falsetruefalse
truefalsefalse
truetruefalse

Paramètres disponibles dans settings.json

Les paramètres sont organisés en catégories. La plupart des paramètres doivent être placés dans leur objet de catégorie de niveau supérieur correspondant dans votre fichier settings.json. Quelques paramètres de niveau supérieur comme proxy et plansDirectory restent des clés racines directes pour des raisons de compatibilité.

general

ParamètreTypeDescriptionPar défaut
general.preferredEditorstringL’éditeur préféré pour ouvrir les fichiers.undefined
general.outputStylestringNom du style de sortie qui détermine la forme des réponses : un style intégré (Concise, Proactive, Explanatory, Learning) ou le nom d’un style personnalisé — son name de frontmatter, avec comme valeur par défaut le nom du fichier sans .md (insensible à la casse). Laisser non défini, ou définir default, pour le style par défaut. --output-style le remplace pour une exécution. Modifiez-le en cours de session avec /output-style, qui persiste également le choix ; une modification manuelle de ce fichier prend effet au prochain démarrage. Ignoré dans --bare et --safe-mode. Voir Output Styles.undefined
general.vimModebooleanActive les raccourcis clavier Vim.false
general.enableAutoUpdatebooleanActive la vérification et l’installation automatiques des mises à jour au démarrage.true
general.showSessionRecapbooleanAffiche automatiquement un récapitulatif d’une ligne « là où vous vous êtes arrêté » lors du retour sur le terminal après une absence. Désactivé par défaut. Utilisez /recap pour le déclencher manuellement indépendamment de ce paramètre.false
general.sessionRecapAwayThresholdMinutesnumberNombre de minutes pendant lesquelles le terminal doit être au second plan avant qu’un récapitulatif automatique ne se déclenche lors de la reprise du focus. Utilisé uniquement lorsque showSessionRecap est activé.5
general.gitCoAuthor.commitbooleanAjoute un trailer Co-authored-by aux messages de commit git ET attache une note git d’attribution IA par fichier (refs/notes/ai-attribution) pour les commits effectués via Qwen Code. La désactivation ignore les deux.true
general.gitCoAuthor.prbooleanAjoute une ligne d’attribution Qwen Code aux descriptions des pull requests lors de l’exécution de gh pr create.true
general.defaultFileEncodingenumEncodage par défaut pour les nouveaux fichiers. Utilisez "utf-8" (par défaut) pour UTF-8 sans BOM, ou "utf-8-bom" pour UTF-8 avec BOM. Ne modifiez cela que si votre projet nécessite spécifiquement le BOM."utf-8"
general.voice.enabledbooleanActive la dictée vocale dans la saisie du prompt. Peut également être activé/désactivé avec la commande /voice. Nécessite qu’un modèle de transcription (voiceModel) soit configuré.false
general.voice.modeenumComportement du push-to-talk : "hold" pour parler tant que la touche est maintenue, ou "tap" pour démarrer et appuyer à nouveau (ou mettre en pause) pour arrêter et soumettre."hold"
general.voice.languagestringLangue parlée préférée pour la transcription vocale (par ex. "english", "chinese"). Laisser vide pour une détection automatique.""
general.voice.keytermsFilestringChemin vers un fichier de termes clés personnalisé (un terme par ligne, # pour les commentaires) qui oriente la transcription vocale vers des termes spécifiques au domaine. Les chemins relatifs sont résolus depuis la racine de l’espace de travail ; la valeur par défaut est .qwen/voice-keyterms.txt s’il est présent. Lu uniquement dans les espaces de travail de confiance. S’applique uniquement aux modèles Qwen ASR (qwen3-asr-*).""
general.voice.refineTranscriptbooleanNettoie les transcriptions vocales avec le modèle rapide avant de les insérer — supprime les mots de remplissage et corrige les erreurs de reconnaissance tout en préservant le sens. Revient à la transcription brute en cas d’échec, et est ignoré si aucun modèle rapide n’est configuré.true
general.cleanupPeriodDaysnumberNombre de jours de conservation des sauvegardes de session ~/.qwen/file-history/ utilisées par /rewind. Les sauvegardes plus anciennes sont supprimées par un passage en arrière-plan qui s’exécute au maximum une fois par jour. 0 = rétention minimale (~1 heure) : conserve les sessions consultées dans la dernière heure ainsi que celle actuellement active. Les modifications prennent effet après le redémarrage.30
general.languageenumLangue de l’interface utilisateur. Utilisez "auto" pour détecter depuis les paramètres du système, ou un code de langue (par ex. "zh-CN", "fr"). Des codes personnalisés peuvent être ajoutés en plaçant des fichiers de locale JS dans ~/.qwen/locales/. Voir i18n. Nécessite un redémarrage."auto"
general.outputLanguagestringLangue pour la sortie du modèle. Utilisez "auto" pour détecter depuis les paramètres du système, ou définissez une langue spécifique. Nécessite un redémarrage."auto"
general.dynamicCommandTranslationbooleanActive la traduction par IA des descriptions des commandes slash dynamiques. Lorsqu’elle est désactivée, les commandes dynamiques conservent leurs descriptions d’origine et ignorent les appels au modèle de traduction.false
general.terminalBellbooleanJoue un son de cloche du terminal lorsqu’une réponse est terminée ou nécessite une approbation.true
general.preventSystemSleepbooleanEmpêche le système de se mettre en veille pendant que Qwen Code diffuse une réponse du modèle ou exécute des outils. Le temps d’inactivité du prompt et les demandes d’autorisation n’inhibent pas la mise en veille. Lu une seule fois au démarrage, les modifications prennent donc effet après le redémarrage.true
general.chatRecordingbooleanEnregistre l’historique des discussions sur le disque. La désactivation de cette option empêche également --continue et --resume de fonctionner. Nécessite un redémarrage.true

output

ParamètreTypeDescriptionPar défautValeurs possibles
output.formatstringLe format de sortie de la CLI. Avec stream-json, les exécutions démarrées avec un prompt se comportent comme non interactives (headless), correspondant à --output-format stream-json. Les flags validés au moment de l’analyse argv (--include-partial-messages, --input-format stream-json) nécessitent toujours le flag explicite --output-format stream-json."text""text", "json", "stream-json"
output.showTimestampsbooleanAfficher un horodatage [HH:MM:SS] avant chaque réponse de l’assistant.false

review

ParamètreTypeDescriptionPar défaut
review.attributionbooleanAjoute le pied de page d’attribution indiquant le modèle et la version de la CLI (par ex. _— qwen3-coder via Qwen Code /review (v0.21.2)_) aux corps de review et aux commentaires inline publiés par /review. Désactivez pour publier des reviews sans attribution IA visible : le pied de page est omis et les commentaires publiés et les corps perdent leurs marqueurs **[Critical]**/**[Suggestion]**. Les publications restent identifiables dans la source brute : chacune porte un marqueur de sévérité invisible (<!-- qwen-review critical -->) et le corps de la revue porte un marqueur de registre (<!-- qwen-review-ledger ... -->) — tout ce qui lit les corps de commentaires (automatisation de l’API GitHub, les workflows auxquels ce paramètre est couplé) reconnaît toujours un artefact /review, et la détection de doublons avant soumission reconnaît les publications antérieures du compte examinateur par le marqueur de sévérité, bien que les publications non attribuées d’autres comptes y échappent. Autre conséquence : le mode Critical-only de qwen-autofix (enclenché après le round 5, ou plus tôt lorsque le budget de croissance du diff d’une fenêtre de comptage se déclenche) ne reconnaît plus les constatations publiées comme Critical et les reporte. La désactivation retire également le modèle du marqueur de registre machine intégré dans le corps de la revue, donc dans un environnement frais (CI, un autre clone — partout sans cache de revue) l’ancre incrémentale récupérée de la dernière revue publiée échoue au vérificateur de même modèle et la re-revue revient à la plage complète.true
review.effortenumEffort par défaut pour /review lorsque ni --effort ni un niveau explicitement saisi mémorisé par le projet ne s’applique : "low", "medium", "high" ou "auto" (la règle intégrée : high pour les PRs, medium pour les modifications locales). Un niveau explicite ou mémorisé est prioritaire ; un --comment effectif force toujours high et --fix reste au minimum à medium."auto"
review.commentbooleanTraite chaque /review de PR comme si --comment avait été passé : les constatations sont publiées sur la pull request sans le flag. La publication reste liée à la PR nommée dans l’invocation. Activez uniquement si vous souhaitez toujours que les reviews soient publiées.false
review.severityFloorenumLa sévérité la plus basse qu’une /review de PR publie lorsque --severity-floor n’est pas spécifié : "auto" (la valeur par défaut adaptative par round — les Suggestions sont publiées jusqu’au round 5, seuls les Criticals à partir du round 6, avec les Suggestions à haute confiance autrement publiables — et un Critical classé fail closed sur une nouvelle surface — enregistrées et reportées, et les rounds 2–5 reportant les nouvelles Suggestions sur du code inchangé depuis le round précédent ; les constatations de faible confiance et Nice-to-have restent uniquement dans le terminal), "critical" (cette posture dès le round 1), ou "suggestion" (les Suggestions sont publiées à chaque round ; désactive la posture de convergence). Les cibles non-PR n’ont pas de rounds et ignorent ce paramètre."auto"
review.reverseAuditRoundsnumberAbaisse la limite de rounds de la boucle de reverse-audit pour chaque review à effort élevé. La limite suit sinon la topologie du diff (10 petits / 5 fragmentés ; un diff énorme est à 3 avec une deadline de review et 5 sans). Cela peut uniquement abaisser le palier applicable : une valeur inférieure à 3, supérieure au palier, ou non entière supérieure à zéro est ignorée. Réduire la limite ne fait pas converger les reviews plus tôt — la boucle se termine sur deux rounds consécutifs sans trouvaille — cela les fait s’arrêter avant convergence plus souvent, et chaque arrêt de ce type plafonne le verdict à Comment.0 (non défini)

Ces paramètres sont lus uniquement à partir des scopes opérateur (User, System et SystemDefaults) ; les valeurs dans un .qwen/settings.json de workspace sont ignorées, afin qu’un dépôt ne puisse pas définir la politique de review pour ses reviewers.

ui

ParamètreTypeDescriptionPar défaut
ui.themestringLe thème de couleurs de l’interface utilisateur. Voir Themes pour les options disponibles."Qwen Dark"
ui.customThemesobjectDéfinitions de thèmes personnalisés.{}
ui.brand.namestringNom du produit que le Web Shell affiche dans sa barre latérale, son en-tête de bienvenue, son panneau À propos et le titre de l’onglet du navigateur. Nettoyé sur une seule ligne et limité à 80 caractères. Lu uniquement à partir des scopes opérateur (User, System, SystemDefaults) — un .qwen/settings.json de workspace ne peut pas changer la marque du shell. Une valeur placeholder que la substitution modifierait ($VAR/${VAR} avec la variable définie) est refusée avec un avertissement sur stderr du démon, car la source de substitution est à l’échelle du processus et un workspace pourrait la fournir ; un placeholder non résolvable est conservé tel quel, donc une variable mal orthographiée s’affiche comme texte littéral plutôt que de revenir silencieusement en arrière. Non modifiable depuis la page Paramètres du navigateur. La bannière du terminal a son propre paramètre séparé, ui.customBannerTitle.""
ui.brand.logoPathstringChemin vers un SVG utilisé comme logo de la barre latérale du Web Shell et favicon du navigateur. Un ~ initial est développé, et un chemin relatif est résolu par rapport au répertoire du fichier de paramètres qui le déclare. Doit être un fichier régulier (pas un lien symbolique, et non accessible via plus d’un lien matériel) d’au plus 32 Kio — sur le disque et une fois décodé en UTF-8 — dont l’élément racine est un <svg> avec espace de noms (l’attribut xmlns, ou une liaison xmlns:svg sur une racine liée à un préfixe, est ce qui le rend rendable comme image). Les placeholders de variables d’environnement qui seraient résolus sont refusés, comme pour ui.brand.name. Lu uniquement à partir des scopes opérateur. Un fichier rejeté enregistre un avertissement sur stderr du démon et revient au logo intégré. Un <svg> racine sans viewBox utilisable ni largeur/hauteur positive explicite est accepté mais enregistre un avertissement, tout comme une racine liée à un préfixe dont les éléments non préfixés n’ont pas de liaison d’espace de noms par défaut, car le navigateur peut le rendre vide à la taille fixe de la barre latérale.""
ui.statusLineobjectConfiguration personnalisée de la barre d’état. Prend en charge les options command, refreshInterval, respectUserColors et hideContextIndicator. Voir Status Line.undefined
ui.hideWindowTitlebooleanMasquer la barre de titre de la fenêtre.false
ui.hideTipsbooleanMasquer toutes les astuces (au démarrage et après les réponses) dans l’interface utilisateur. Voir Contextual Tips.false
ui.hideBannerbooleanMasquer le logo ASCII de démarrage et le panneau d’information. Les astuces et la saisie du chat s’affichent toujours sauf si ui.hideTips est également défini.false
ui.customBannerTitlestringRemplacer le titre par défaut >_ Qwen Code dans le panneau d’information de la bannière. Le suffixe de version (vX.Y.Z) est toujours ajouté ; les lignes d’authentification, de modèle et de chemin ne sont pas affectées. Nettoyé ; limité à 80 caractères.""
ui.customBannerSubtitlestringLigne de sous-titre optionnelle rendue entre le titre de la bannière et la ligne d’authentification/modèle, à la place de la ligne d’espacement vide. Nettoyé ; limité à 160 caractères. Vide (par défaut) conserve l’espacement vide d’origine.""
ui.customAsciiArtstring | objectRemplacer le logo ASCII QWEN dans la bannière. Accepte une chaîne en ligne (utilisée pour les deux niveaux de largeur), { "path": "./brand.txt" } (les chemins relatifs sont résolus par rapport au répertoire du fichier de paramètres propriétaire ; lu une seule fois au démarrage avec O_NOFOLLOW sur POSIX, limité à 64 Ko), ou { "small": ..., "large": ... } pour une sélection en fonction de la largeur. Nettoyé ; limité à 200 lignes × 200 colonnes par niveau.undefined
ui.showLineNumbersbooleanAfficher les numéros de ligne dans les blocs de code dans la sortie de la CLI.true
ui.renderModestringMode d’affichage Markdown par défaut. Utilisez "render" pour des aperçus visuels riches ou "raw" pour afficher le Markdown orienté source par défaut. Basculez pendant une session avec Alt/Option+M ; sur macOS, le terminal doit envoyer Option comme Meta. Voir Markdown Rendering."render"
ui.showCitationsbooleanAfficher les citations pour le texte généré dans le chat.false
ui.history.collapseOnResumebooleanIndique si l’historique doit être réduit par défaut lors de la reprise d’une session. Peut être basculé via /history collapse-on-resume et /history expand-on-resume.false
ui.history.collapsePreviewCountnumberNombre de tours d’utilisateur les plus récents à garder visibles lorsque ui.history.collapseOnResume est activé. 0 réduit tout l’historique restauré par défaut ; -1 affiche tout l’historique restauré.0
ui.compactModebooleanRETIRED everywhere. La CLI affiche désormais toujours la vue compacte des outils basée sur les types dans la transcription principale ; appuyez sur Ctrl+O pour basculer le mode détaillé développé (développer ou réduire tous les blocs de réflexion et les sorties d’outils en ligne) au lieu de basculer un mode, et le web shell fixe désormais sa vue compacte également. La clé est conservée uniquement pour que les fichiers de paramètres existants n’émettent pas d’avertissement ; les écritures sont acceptées mais rien ne lit la valeur.false
ui.showToolCallDetailsbooleanAfficher les arguments et résultats des outils en ligne. Définir sur false pour afficher les appels d’outils ordinaires comme un résumé sur une ligne. Cliquer sur la ligne dans l’historique virtualisé ou appuyer sur Ctrl+O pour développer les détails. Les invites d’approbation, les commandes shell initiées par l’utilisateur et les shells interactifs ciblés restent développés.true
ui.showToolCallArgsbooleanAfficher les appels d’outils sur leur propre ligne avec leurs arguments bruts complets en ligne, au lieu du résumé compact basé sur le type qui regroupe les lots de lecture/recherche/liste en Read 3 files. Récupère les paramètres que la description par outil résume (par ex. Edit n’affiche normalement que le nom de fichier). Utile pour déboguer les intégrations MCP ou les schémas d’outils. La ligne des arguments est limitée à 2 lignes repliées (et au plus 1000 caractères), donc un lot d’appels en attente ne peut pas dépasser la taille du terminal ; appuyez sur Ctrl+O pour lever la limite et développer également la sortie des résultats. Deux cas conservent la vue compacte : les groupes de sous-agents parallèles en cours d’exécution, dont le roster d’agents live est propriétaire — les développer regonfle le cadre live au-delà de la hauteur du terminal (#5798) — et les sessions attachées au démon, qui ne transportent pas les arguments à travers la limite du démon. Utilisez Ctrl+O dans ce cas. TUI uniquement — le web shell n’est pas affecté.false
ui.shellOutputMaxLinesnumberNombre maximal de lignes de sortie du shell affichées en ligne. Définir sur 0 pour désactiver la limite et afficher la sortie complète. Les lignes masquées sont signalées via l’indicateur +N lines. Les erreurs, les commandes initiées par l’utilisateur préfixées par !, la confirmation des outils et les shells intégrés ciblés affichent toujours la sortie complète.5
ui.enableWelcomeBackbooleanAfficher la boîte de dialogue de bienvenue lors du retour sur un projet avec un historique de conversation. Lorsqu’elle est activée, Qwen Code détectera automatiquement si vous revenez sur un projet avec un résumé de projet précédemment généré (.qwen/PROJECT_SUMMARY.md) et affichera une boîte de dialogue vous permettant de poursuivre votre conversation précédente ou de repartir à zéro. Si vous choisissez Démarrer une nouvelle session de chat, ce choix est mémorisé pour le projet actuel jusqu’à ce que le résumé du projet change. Cette fonctionnalité s’intègre avec la commande /summary et la boîte de dialogue de confirmation de fermeture.true
ui.accessibility.enableLoadingPhrasesbooleanActiver les phrases de chargement (désactiver pour l’accessibilité).true
ui.accessibility.screenReaderbooleanActive le mode lecteur d’écran, qui ajuste l’interface texte (TUI) pour une meilleure compatibilité avec les lecteurs d’écran.false
ui.customWittyPhrasesarray of stringsUne liste de phrases personnalisées à afficher pendant les états de chargement. Lorsqu’elle est fournie, la CLI alternera entre ces phrases au lieu des phrases par défaut.[]
ui.showResponseTokensPerSecondbooleanAfficher une estimation en direct des tokens/seconde à côté du compteur de tokens de réponse pendant que le modèle diffuse. Il s’agit d’une indication de la vitesse de génération, et non d’une ETA ou d’un pourcentage d’achèvement. Prend effet lors de la prochaine session.false
ui.enableFollowupSuggestionsbooleanActiver les followup suggestions qui prédisent ce que vous voulez taper ensuite après la réponse du modèle. Les suggestions apparaissent sous forme de texte d’espace réservé et sont acceptées avec Tab, Entrée ou Flèche droite (ce qui remplit la saisie — elles ne sont pas soumises automatiquement). Activé par défaut ; définissez sur false pour désactiver.true
ui.enableCacheSharingbooleanUtiliser des requêtes forkées conscientes du cache pour la génération de suggestions. Réduit les coûts sur les fournisseurs qui prennent en charge la mise en cache de préfixe (expérimental).true
ui.enableSpeculationbooleanExécuter de manière spéculative les suggestions acceptées avant la soumission. Les résultats apparaissent instantanément lorsque vous acceptez (expérimental).false
ui.showStatusInTitlebooleanAfficher le nom et le statut de la session Qwen Code dans le titre de la fenêtre du terminal.true
ui.disableWorkflowKeywordTriggerbooleanLorsque true, mentionner le mot workflow dans un prompt ne redirige plus subtilement le tour vers l’outil Workflow (et l’indicateur workflow active du pied de page est supprimé). S’applique uniquement lorsque les workflows sont activés.false
ui.enableUserFeedbackbooleanAfficher une boîte de dialogue de feedback optionnelle après les conversations pour aider à améliorer les performances de Qwen.true
ui.compactInlinebooleanREMOVED. Retiré en même temps que ui.compactMode — la vue compacte est désormais toujours activée à la fois dans le TUI et le web shell. L’ancien paramètre est ignoré silencieusement (pas d’avertissement au démarrage).N/A
ui.useTerminalBufferbooleanRendre l’historique des conversations dans une fenêtre défilable intégrée à l’application au lieu du tampon de défilement du terminal. Activé par défaut dans les terminaux interactifs compatibles pour éviter les scintillements, les tempêtes de défilement et les gels de l’interface lors de longues sessions, après Ctrl+O, après Ctrl+E / Ctrl+F (développer), après un redimensionnement de fenêtre, ou lors d’un retour par alt-tab. Le mode lecteur d’écran et les sorties non interactives telles que stdout redirigé ou CI utilisent à la place une sortie terminal en ajout uniquement. Faites défiler avec Shift+↑/↓ (ligne), PgUp/PgDn (page), Ctrl+Home/End (haut/bas), ou la molette de la souris. Active également les interactions souris : cliquez sur une option dans un menu/dialogue pour la sélectionner, survolez pour la mettre en surbrillance, et cliquez dans le prompt pour positionner le curseur. N’utilise PAS le tampon de défilement du terminal hôte lorsqu’il est activé. Glissez pour sélectionner du texte dans la fenêtre (double/triple clic sélectionne un mot/une ligne), copié lors du relâchement. Pour utiliser la sélection propre du terminal à la place, maintenez Shift (ou Option sur macOS) enfoncé lors du glissement. Un simple clic ouvre un lien hypertexte http(s) sous le pointeur (les autres schémas de lien sont copiés dans le presse-papiers), et un clic droit sur un lien ou une sélection de texte ouvre un menu contextuel intégré à l’application. Ces interactions souris sont contrôlées par ui.mouseTracking ; désactivez ce paramètre pour rendre la souris entièrement au terminal.true
ui.showScrollbarbooleanAfficher la barre de défilement à masquage automatique dans la fenêtre défilable intégrée à l’application (Virtualized History). La barre apparaît lors du défilement et s’estompe en cas d’inactivité. Désactivez-la pour la masquer complètement. S’applique uniquement dans l’interface terminal interactive.true
ui.mouseTrackingbooleanActiver le suivi SGR de la souris intégré à l’application. Lorsqu’il est activé, Qwen Code capture les événements souris pour la sélection de texte, le positionnement par clic dans les champs de texte, le survol de lignes, l’activation/désactivation d’éléments d’historique et le défilement de la fenêtre. Comme le terminal transmet tous les événements souris à l’application, Qwen Code fournit ses propres équivalents pour ce que le terminal ne peut plus faire nativement : un simple clic ouvre un lien hypertexte http(s) sous le pointeur (les autres schémas de lien sont copiés dans le presse-papiers), et un clic droit sur un lien ou une sélection de texte ouvre un menu contextuel intégré à l’application avec Open Link / Copy Link Address / Copy Selection. Désactivez-le pour rendre la souris entièrement au terminal (menu clic droit natif et clics sur les liens) ; cela désactive toutes les interactions souris intégrées, et dans l’historique virtualisé la molette ne fait plus défiler la transcription — utilisez Shift+↑/↓, PgUp/PgDn ou Ctrl+Home/End à la place (combinez avec ui.useTerminalBuffer: false pour restaurer le tampon de défilement natif du terminal). S’applique uniquement dans l’interface terminal interactive.true
ui.hideBuiltinWorktreeIndicatorbooleanMasquer la ligne intégrée ⎇ worktree-<branch> (<slug>) dans le pied de page. L’état du worktree est toujours transmis aux scripts de barre d’état personnalisés via la charge utile stdin. Conservez la valeur par défaut sauf si votre barre d’état personnalisée affiche le worktree lui-même.false

ide

ParamètreTypeDescriptionPar défaut
ide.enabledbooleanActive le mode d’intégration IDE.false
ide.hasSeenNudgebooleanIndique si l’utilisateur a vu l’invitation à l’intégration IDE.false

privacy

ParamètreTypeDescriptionPar défaut
privacy.usageStatisticsEnabledbooleanActive la collecte des statistiques d’utilisation.true

model

SettingTypeDescriptionDefault
model.namestringLe modèle Qwen à utiliser pour les conversations.undefined
model.reasoningEffortenumNiveau de réflexion des modèles capables de raisonnement, appliqué à tous les fournisseurs. Défini avec la commande /effort (low, medium, high, xhigh, max). Chaque fournisseur mappe et limite cette valeur à ce que le modèle actif prend en charge (par ex. Gemini plafonne à high ; Anthropic limite aux paliers dont le modèle dispose). Laisser non défini pour utiliser la valeur par défaut du modèle/fournisseur.undefined
model.baseUrlstringPersisté automatiquement par le sélecteur de modèle pour lever les ambiguïtés lorsque plusieurs entrées modelProviders partagent le même identifiant de modèle. Non destiné à être défini manuellement — utilisez plutôt le sélecteur /model ou une entrée modelProviders ; une valeur obsolète modifiée manuellement peut rediriger silencieusement les requêtes vers un autre fournisseur ayant le même identifiant.undefined
model.sessionTokenLimitnumberNombre maximal de tokens de prompt enregistrés autorisé avant l’envoi du message suivant. -1 signifie illimité ; 0 est également traité comme illimité (contrairement à model.maxToolCalls, où 0 interdit tous les appels). Lorsque le nombre de prompts enregistrés dépasse la limite, le prochain envoi est ignoré (la session n’est pas interrompue).-1
model.maxSessionTurnsintegerNombre maximal de tours utilisateur/modèle/outil à conserver dans une session. -1 signifie illimité.-1
model.maxWallTimeSecondsnumberBudget en temps réel pour les exécutions sans interface / non supervisées, en secondes. -1 signifie illimité. Peut être remplacé par invocation via --max-wall-time, qui requiert une durée positive (90, 30s, 5m, 1h, 1.5h) ; le minimum est de 1 seconde — les valeurs inférieures à la seconde (500ms, 0.5) sont rejetées comme des erreurs de frappe. Omettez le flag pour revenir à ce paramètre. Interrompt l’exécution avec le code de sortie 55 en cas de dépassement.-1
model.goalTokenBudgetintegerFenêtre de dépense autonome armée à chaque nouveau Goal, en tokens tels que comptés par le compteur de Goal (totalTokenCount sommé sur les appels de modèle que le Goal effectue dans ses propres tours). Un Goal qui épuise sa fenêtre obtient un tour de wind-down pour transmettre, puis s’arrête jusqu’à ce que vous le repreniez, ce qui arme une nouvelle fenêtre. Non défini utilise la valeur par défaut intégrée de 30 000 000 ; -1 signifie illimité. Zéro, les valeurs supérieures à 300 000 000 (10 fois la valeur par défaut, une protection contre les erreurs de frappe), les autres valeurs négatives, fractionnaires ou non numériques sont rejetées au démarrage.30000000
model.goalCheckpointTimeoutSecondsintegerPlafond d’une vérification de checkpoint d’évidence de Goal, en secondes. Un Goal long compresse périodiquement ses evidences en revendications de checkpoint avec un appel de modèle secondaire ; lorsqu’une vérification effectue sa seule tentative corrective, les deux appels partagent ce plafond (Goals liste les échecs qui en méritent une). Une vérification qui ne se termine pas à temps est abandonnée comme non concluante ; elle ne compte vers la limite de stagnation de checkpoint que lorsque la fenêtre d’évidence a débordé, tandis qu’une vérification sans débordement préserve la série et réessaie à un tour ultérieur. Non défini utilise la valeur par défaut intégrée de 180. Doit être un entier entre 1 et 900 ; les autres valeurs sont rejetées au démarrage. Les appels sont streamés, donc le timeout de transport par requête (model.generationConfig.timeout, par défaut 120 s) ne borne que la connexion et la première réponse, et les valeurs supérieures à 900 sont rejetées car au-delà du garde de durée de vie de stream par défaut, c’est ce garde, et non ce paramètre, qui termine la vérification. Le plafond de 900 est fixe : augmenter QWEN_STREAM_MAX_LIFETIME_MS ne le relève pas.180
model.goalMaxTurnsintegerFenêtre de tours de Goal armée à chaque nouveau Goal. Chaque tour de Goal terminé compte, y compris les tours pilotés par l’utilisateur ; les tours utilisateur sont encore admis au plafond, mais ils peuvent faire de la prochaine continuation autonome un wind-down. Un Goal qui atteint le plafond obtient un tour de wind-down pour transmettre, puis s’arrête comme limité en utilisation jusqu’à ce que vous le repreniez, ce qui autorise une nouvelle fenêtre en plus des tours déjà terminés. Non défini exécute les Goals sans plafond de tours, et -1 le dit explicitement — mais l’opt-out ne retire un plafond que d’un Goal qui l’a déjà épuisé, lors de la reprise ou de la modification qui suit ; un Goal encore sous son plafond le conserve. Un plafond n’est armé que sur un Goal créé après le changement, donc borner un Goal déjà enregistré signifie le remplacer avec /goal set, ce qui démarre un nouveau Goal à la révision 1 avec ses compteurs remis à zéro et ses evidences antérieures non citables, ou l’effacer et recommencer. Zéro, les valeurs supérieures à 10 000, les autres valeurs négatives, fractionnaires ou non numériques sont rejetées au démarrage. Les modifications prennent effet après le redémarrage.(none)
model.goalMaxActiveMinutesintegerFenêtre de temps actif armée à chaque nouveau Goal, en minutes de temps réel pendant que le Goal reste actif, incluant les attentes et le temps d’inactivité entre les tours. Le temps en pause, bloqué ou arrêté ne compte pas, pas plus que le temps d’arrêt lors d’un redémarrage ; un processus suspendu est toujours comptabilisé. Un Goal qui atteint le plafond obtient un tour de wind-down pour transmettre, puis s’arrête comme limité en utilisation jusqu’à ce que vous le repreniez, ce qui autorise une nouvelle fenêtre mesurée depuis l’endroit où il s’est arrêté. Le plafond est lu entre les tours, pas par un minuteur, donc un Goal peut largement le dépasser avant de s’arrêter. Le temps actif est mesuré entre les transitions enregistrées, donc le temps d’un tour qu’un redémarrage a interrompu n’est pas comptabilisé. Non défini exécute les Goals sans plafond de temps, et -1 le dit explicitement — mais l’opt-out ne retire un plafond que d’un Goal qui l’a déjà épuisé, lors de la reprise ou de la modification qui suit. Un plafond n’est armé que sur un Goal créé après le changement, donc borner un Goal déjà enregistré signifie le remplacer avec /goal set, ce qui démarre un nouveau Goal à la révision 1 avec ses compteurs remis à zéro et ses evidences antérieures non citables, ou l’effacer et recommencer. Zéro, les valeurs supérieures à 10 080 (une semaine), les autres valeurs négatives, fractionnaires ou non numériques sont rejetées au démarrage. Les modifications prennent effet après le redémarrage.(none)
model.maxToolCallsnumberBudget cumulatif d’appels d’outils pour une exécution (compte chaque outil exécuté, succès ou échec ; structured_output sous --json-schema est exempté). -1 signifie illimité ; 0 signifie « aucun appel d’outil autorisé ». Plafonné à 1 000 000 pour détecter les erreurs de frappe. Peut être remplacé via --max-tool-calls. Interrompt l’exécution avec le code de sortie 55 en cas de dépassement.-1
model.maxSubagentDepthnumberProfondeur maximale d’imbrication des sous-agents (niveaux basés sur 1 : un sous-agent de premier niveau est le niveau 1). 1 maintient les sous-agents disponibles mais désactive l’imbrication — le comportement avant l’imbrication. Les valeurs sont limitées à la plage 1–100 ; les valeurs non finies reviennent à la valeur par défaut. Les coéquipiers, les forks et les agents générés par workflow ne s’imbriquent jamais, quel que soit ce paramètre. Peut être remplacé via --max-subagent-depth.5
model.generationConfigobjectRemplacements avancés transmis au générateur de contenu sous-jacent. Prend en charge les contrôles de requête tels que timeout, maxRetries, retryInitialDelayMs, retryMaxDelayMs, enableCacheControl, splitToolMedia (par défaut true ; divise les médias retournés par les outils — y compris les images lues par le read_file intégré — en un message utilisateur de suivi au lieu du message role: "tool" qui viole les spécifications, afin que les serveurs strictement compatibles OpenAI comme doubao / new-api / LM Studio puissent les voir ; définissez sur false pour restaurer le comportement legacy d’intégration dans l’outil), toolResultContentFormat (par défaut "parts" ; définissez sur "string" uniquement pour les runtimes legacy compatibles OpenAI dont les modèles d’outils ignorent les parties de contenu texte), contextWindowSize (remplace la taille de la fenêtre de contexte du modèle), modalities (remplace les modalités d’entrée auto-détectées), customHeaders (en-têtes HTTP personnalisés pour les requêtes API), et extra_body (paramètres de corps supplémentaires pour les requêtes compatibles OpenAI et les requêtes API OpenAI Responses), ainsi que des paramètres de réglage fin sous samplingParams (par exemple temperature, top_p, max_tokens). Laisser non défini pour utiliser les valeurs par défaut du fournisseur.undefined
model.chatCompression.contextPercentageThresholdnumberSUPPRIMÉ. Remplacé par context.autoCompactThreshold (voir la section #### context ci-dessous). L’auto-compaction utilise désormais une échelle de seuils à trois niveaux (warn / auto / hard) calculée en interne à partir de la fenêtre de contexte du modèle via la fonction computeThresholds(). L’ancien paramètre est ignoré silencieusement (pas d’avertissement au démarrage). Voir la PR #4345 / docs/design/auto-compaction-threshold-redesign.md pour la justification de la refonte.N/A
model.chatCompression.maxRecentFilesToRetainnumberNombre de fichiers récemment modifiés dont le contenu actuel est restauré (intégré si petit, sinon référencé par chemin) dans l’historique après l’auto-compaction. 0 n’en restaure aucun. Remplacement par variable d’env : QWEN_COMPACT_MAX_RECENT_FILES.5
model.chatCompression.maxRecentImagesToRetainnumberNombre d’images les plus récentes (captures d’écran d’outils / collages utilisateur) restaurées dans l’historique après l’auto-compaction. 0 n’en restaure aucune. Remplacement par variable d’env : QWEN_COMPACT_MAX_RECENT_IMAGES.3
model.chatCompression.enableScreenshotTriggerbooleanLorsque true, l’auto-compaction se déclenche également une fois que le nombre d’images retournées par les outils accumulées dans l’historique atteint screenshotTriggerThreshold, indépendamment de l’utilisation des tokens — conçu pour les sessions d’utilisation par ordinateur où les captures d’écran fréquentes diluent l’attention du modèle. Ne compte que les images retournées dans les résultats d’outils, pas les images collées par l’utilisateur. Remplacement par variable d’env : QWEN_COMPACT_SCREENSHOT_TRIGGER (1/true/0/false).true
model.chatCompression.screenshotTriggerThresholdnumberNombre d’images retournées par les outils à partir duquel le déclencheur de capture d’écran se déclenche (uniquement lorsque enableScreenshotTrigger). La compaction réinitialise le compte — les images survivantes sont réintégrées en tant que parties de premier niveau, que le déclencheur ne compte pas — il ne se redéclenchera donc pas immédiatement. Remplacement par variable d’env : QWEN_COMPACT_SCREENSHOT_THRESHOLD.20
model.skipNextSpeakerCheckbooleanIgnore la vérification du prochain intervenant.true
model.skipLoopDetectionbooleanDésactive les vérifications de détection de boucle en streaming. La valeur par défaut est true (la détection de boucle est ignorée) pour éviter les faux positifs qui interrompent les workflows légitimes. Définissez sur false pour réactiver la détection de boucle en streaming — utile comme garde-fou dans les exécutions headless / non interactives où une répétition bloquée peut autrement gaspiller le budget. Dans les sessions démon/ACP, qui n’exécutent aucun des autres détecteurs de streaming, la réactivation active également un arrêt global pour les appels d’outils en double ; le plafond d’appels d’outils par tour toujours actif et un garde-fou de stagnation pour les paramètres d’outils invalides s’exécutent indépendamment de ce paramètre.true
model.maxToolCallsPerTurnintegerPlafond d’appels d’outils par tour (un tour du modèle plus ses continuations de résultats d’outils ; les continuations de Stop-hook bloquantes telles que les itérations de /goal démarrent un nouveau budget). Lorsqu’elle est définie explicitement, cette valeur est une limite stricte : le tour s’arrête au prochain appel d’outil après son atteinte (comportement publié). Lorsqu’elle n’est pas définie (valeur par défaut 100), le plafond est adaptatif : une fois le tour dépassé 100, il s’arrête uniquement si le modèle continue d’appeler la même commande (boucle bloquée) ; un tour productif (appels diversifiés) continue jusqu’à une limite absolue de 1000, qui arrête toujours. Le comportement adaptatif par défaut s’applique à la fois au TUI interactif, aux exécutions non interactives (-p / JSON / stream-JSON) du client principal et aux sessions démon/ACP. Les sessions démon/ACP évaluent le plafond une fois par lot d’outils, avant l’exécution : un lot qui dépasserait un plafond explicite ou la limite absolue est ignoré en entier, donc un tour ne s’exécute jamais au-delà (il peut s’arrêter jusqu’à un lot près), tandis que le plafond souple adaptatif est dépassé par conception, jusqu’à la limite absolue. Elles n’ont pas non plus de désactivation en session. Disjoncteur toujours actif contre les tours incontrôlés, indépendant de model.skipLoopDetection. Définissez sur 0 ou une valeur négative pour désactiver le plafond. Choisir « Désactiver la détection de boucle pour cette session » dans la boîte de dialogue de détection de boucle la supprime également pour le reste de la session.100
model.skipStartupContextbooleanIgnore l’envoi du contexte de l’espace de travail au démarrage (résumé de l’environnement et accusé de réception) au début de chaque session. Activez ceci si vous préférez fournir le contexte manuellement ou si vous souhaitez économiser des tokens au démarrage.false
model.enableOpenAILoggingbooleanActive la journalisation des appels à l’API OpenAI pour le débogage et l’analyse. Lorsqu’elle est activée, les requêtes et réponses API sont journalisées dans des fichiers JSON.false
model.openAILoggingDirstringChemin de répertoire personnalisé pour les journaux de l’API OpenAI. Si non spécifié, la valeur par défaut est logs/openai dans le répertoire de travail actuel. Prend en charge les chemins absolus, les chemins relatifs (résolus à partir du répertoire de travail actuel) et l’expansion de ~ (répertoire personnel).undefined
model.openAILogRetentionDaysnumberNombre de jours de conservation des fichiers de log de l’API OpenAI écrits lorsque model.enableOpenAILogging est activé. Les passes de ménage en arrière-plan s’exécutent au maximum une fois par jour dans les sessions interactives, headless, stream-json SDK et ACP. Les processus non interactifs de courte durée progressent au mieux, tandis que les processus persistants scannent jusqu’à la fin. 0 = rétention minimale (~1 heure). Pour un model.openAILoggingDir personnalisé, configurez la rétention au niveau utilisateur ou système ; la rétention au niveau du workspace est ignorée car un répertoire personnalisé peut être partagé par plusieurs workspaces. Les modifications prennent effet après le redémarrage.7

Exemple 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 (délai d’expiration de la requête) :

timeout est le délai d’expiration par requête en millisecondes (par défaut 120000). Définissez-le à 0 pour désactiver le délai d’expiration de la requête — conformément à la convention QWEN_STREAM_IDLE_TIMEOUT_MS=0 — plutôt que d’interrompre la requête. Il peut également être défini via la variable d’environnement QWEN_CODE_API_TIMEOUT_MS. Ceci est distinct des deux gardes de flux décrites ci-dessous.

gardes de flux (fournisseurs compatibles OpenAI et Anthropic) :

Deux gardes encadrent une réponse en streaming, chacune acceptant 0 pour la désactiver. Le générateur Gemini ne les implémente pas, ce qui laisse la forme distribuée ci-dessous non bornée pour les modèles Gemini.

  • streamIdleTimeoutMs (par défaut 240000) limite l’inactivité entre les chunks streamés : un flux qui reste silencieux pendant cette durée est interrompu avec un ETIMEDOUT retryable. Pour les modèles supportés par un fournisseur, définissez-le sous modelProviders[providerId][].generationConfig correspondant ; pour les modèles d’exécution, utilisez model.generationConfig. Une valeur explicite du modèle est prioritaire sur QWEN_STREAM_IDLE_TIMEOUT_MS, et 0 désactive la garde d’inactivité.
  • QWEN_STREAM_MAX_LIFETIME_MS (par défaut 900000) plafonne le temps d’attente total en amont d’une réponse en streaming, quel que soit le flux de chunks — la limite qu’un flux distribué qui ne se termine jamais ne peut pas réinitialiser.

streamMaxLifetimeMs reste disponible uniquement via QWEN_STREAM_MAX_LIFETIME_MS ou, pour les intégrateurs, ContentGeneratorConfig.streamMaxLifetimeMs ; écrire cela dans settings.json n’a aucun effet. Le plafond de durée de vie de 15 minutes limite toujours un flux dont vous avez augmenté le délai d’inactivité au-delà. Relevez la variable d’environnement de durée de vie de la même manière, ou mettez-la à 0, si vous dépendez d’une fenêtre plus longue. Désactiver streamIdleTimeoutMs seul ne désactive pas ce plafond de durée de vie.

max_tokens (limite de tokens en sortie) :

Lorsque ni samplingParams.max_tokens ni QWEN_CODE_MAX_OUTPUT_TOKENS n’est défini, Qwen Code utilise généralement la limite de sortie déclarée du modèle sélectionné comme limite de sortie par défaut de la requête. Si la réponse atteint tout de même cette limite, Qwen Code peut réessayer avec une limite augmentée (avec un plancher de 64K) puis récupérer au fil des tours de continuation.

Pour les fournisseurs compatibles OpenAI, samplingParams sert également d’échappatoire pour le format de requête : lorsqu’il est défini, ses clés sont transmises telles quelles et Qwen Code ne synthétise pas de valeur par défaut pour max_tokens. Utilisez ceci pour les paramètres spécifiques au fournisseur tels que max_completion_tokens.

Pour forcer une limite de sortie fixe, définissez samplingParams.max_tokens dans vos paramètres ou utilisez la variable d’environnement QWEN_CODE_MAX_OUTPUT_TOKENS. Les limites explicites désactivent l’augmentation automatique des tokens en sortie.

toolResultContentFormat :

Contrôle la sérialisation des résultats d’outils contenant uniquement du texte dans les requêtes compatibles OpenAI. La valeur par défaut "parts" conserve la structure standard du tableau de parties de contenu. Définissez "string" uniquement pour les runtimes hérités compatibles OpenAI dont les modèles d’outils ignorent les parties de contenu textuel, comme les anciens modèles GLM-5.1 vLLM/SGLang. Les médias retournés par les outils restent contrôlés par splitToolMedia.

contextWindowSize :

Remplace la taille par défaut de la fenêtre de contexte pour le modèle sélectionné. Qwen Code détermine la fenêtre de contexte en utilisant des valeurs par défaut intégrées basées sur la correspondance du nom du modèle, avec une valeur de secours constante. Utilisez ce paramètre lorsque la limite de contexte effective d’un fournisseur diffère de celle par défaut de Qwen Code. Cette valeur définit la capacité de contexte maximale supposée du modèle, et non une limite de tokens par requête.

Lorsque le modèle sélectionné est défini dans modelProviders, définissez contextWindowSize dans le generationConfig de cette entrée fournisseur au lieu du model.generationConfig de premier niveau. Les entrées de modèle fournisseur sont scellées, donc les paramètres de génération de premier niveau ne remplissent pas les champs fournisseur manquants.

modalities :

Remplace les modalités d’entrée auto-détectées pour le modèle sélectionné. Qwen Code détecte automatiquement les modalités prises en charge (image, PDF, audio, vidéo) en fonction de la correspondance des motifs du nom du modèle. Utilisez ce paramètre lorsque l’auto-détection est incorrecte — par exemple, pour activer pdf pour un modèle qui le prend en charge mais n’est pas reconnu. Format : { "image": true, "pdf": true, "audio": true, "video": true }. Omettez une clé ou définissez-la à false pour les types non pris en charge.

customHeaders :

Vous permet d’ajouter des en-têtes HTTP personnalisés à toutes les requêtes API. Ceci est utile pour le traçage des requêtes, la supervision, le routage de passerelle API, ou lorsque différents modèles nécessitent des en-têtes différents. Pour les modèles de fournisseur, définissez customHeaders dans modelProviders[].generationConfig.customHeaders. Pour les modèles d’exécution sans entrée fournisseur correspondante, définissez-le dans model.generationConfig.customHeaders. Aucune fusion n’est effectuée entre les deux niveaux.

Le champ extra_body vous permet d’ajouter des paramètres personnalisés au corps de la requête envoyé à l’API. Ceci est utile pour les options spécifiques au fournisseur qui ne sont pas couvertes par les champs de configuration standard. Remarque : Ce champ est pris en charge pour les fournisseurs compatibles OpenAI (openai, qwen-oauth) et l’API OpenAI Responses (openai-responses). Il est ignoré pour les fournisseurs Anthropic et Gemini. Sur le wire openai-responses, la clé legacy enable_thinking est traduite en reasoning.effort au lieu d’être transmise telle quelle — utilisez reasoning.effort directement pour ce fournisseur à la place. Pour les modèles de fournisseur, définissez extra_body dans modelProviders[].generationConfig.extra_body. Pour les modèles d’exécution sans entrée fournisseur correspondante, définissez-le dans model.generationConfig.extra_body.

Exemples pour model.openAILoggingDir :

  • "~/qwen-logs" - Enregistre les logs dans le répertoire ~/qwen-logs
  • "./custom-logs" - Enregistre les logs dans ./custom-logs par rapport au répertoire courant
  • "/tmp/openai-logs" - Enregistre les logs dans le chemin absolu /tmp/openai-logs

fastModel

ParamètreTypeDescriptionPar défaut
fastModelstringModèle utilisé pour générer les suggestions de prompt et l’exécution spéculative. Laissez vide pour utiliser le modèle principal. Un modèle plus petit/rapide (par ex., qwen3-coder-flash) réduit la latence et le coût. Peut également être défini via /model --fast.""

advisorModel

ParamètreTypeDescriptionPar défaut
advisorModelstringModèle utilisé par /advisor pour les reviews de la conversation par un second avis. Laissez vide pour utiliser le modèle principal. Un modèle au moins aussi capable que le modèle principal est recommandé. Définir ce paramètre envoie la transcription récente de la conversation à ce modèle, même s’il utilise un autre fournisseur.""

visionModel

ParamètreTypeDescriptionPar défaut
visionModelstringModèle capable de traiter des images utilisé comme Vision Bridge : lorsqu’un modèle principal textuel uniquement reçoit une image, ou que read_file a besoin du repli visuel borné pour les PDF, elle est d’abord transcrite par ce modèle. Définir explicitement ce paramètre autorise les appels du bridge vers ce modèle même s’il utilise un autre fournisseur ; l’affichage de l’outil divulgue le point de terminaison. Laissez vide pour sélectionner automatiquement un modèle de vision du même fournisseur. Peut également être défini via /model --vision.""

compactionModel

ParamètreTypeDescriptionPar défaut
compactionModelstringModèle utilisé pour la compression des discussions (auto-compaction). Laissez vide pour revenir au modèle principal. Un modèle plus petit ou plus rapide peut réduire la latence et le coût de la compression. Peut également être défini ou effacé via /model --compaction.""

imageModel

ParamètreTypeDescriptionPar défaut
imageModelstringModèle utilisé par l’outil intégré image_gen. La route sélectionnée doit définir supportsImageGeneration: true (ou l’ancien imageOnly: true) et déclarer un baseUrl HTTPS ainsi qu’un envKey dans modelProviders. Laissez vide pour que l’outil reste indisponible. Peut également être défini via /model --image.""

visionBridgeTimeoutMs

ParamètreTypeDescriptionPar défaut
visionBridgeTimeoutMsintegerDélai d’expiration par tentative en millisecondes pour l’appel de transcription d’image du Vision Bridge (entier positif jusqu’à 2147483647 ; le bridge retente une tentative ayant expiré une fois avec un délai frais). Non défini utilise le délai intégré de 30s. Augmentez pour les points de terminaison de vision lents ou proxifiés.non défini

voiceModel

ParamètreTypeDescriptionPar défaut
voiceModelstringModèle utilisé pour la transcription vocale. Laissez vide pour garder la dictée vocale désactivée jusqu’à ce qu’un modèle vocal soit sélectionné. Peut également être défini via /model --voice.""

modelFallbacks

ParamètreTypeDescriptionPar défaut
modelFallbacksstringListe ordonnée des ID de modèles de secours (séparés par des virgules, max 3) à essayer lorsque le modèle principal atteint des erreurs de capacité (429/503/529). Exemple : "qwen-plus,qwen-turbo". Peut également être défini via le flag CLI --fallback-model. Nécessite un redémarrage.""

modelPricing

ParamètreTypeDescriptionPar défaut
modelPricingobjectTarification optionnelle par modèle pour l’estimation des coûts dans /stats model. Exemple : { "qwen3-coder": { "inputPerMillionTokens": 0.30, "outputPerMillionTokens": 1.20 } }.undefined

context

ParamètreTypeDescriptionPar défaut
context.fileNamestring or array of stringsLe nom du ou des fichiers de contexte.undefined
context.autoCompactThresholdnumberFraction cible de la fenêtre de contexte à laquelle l’auto-compaction se déclenche. Doit être supérieur à 0 et au maximum à 1. La valeur par défaut est 0.85 (85 %). Agit comme un plafond sur le déclencheur : sur les grandes fenêtres, c’est le déclencheur effectif (~85 %), tandis que sur les petites fenêtres, la compaction peut se déclencher plus tôt pour laisser de la place au résumé. Remplace l’ancien model.chatCompression.contextPercentageThreshold.undefined (utilise la valeur interne 0.85)
context.importFormatstringLe format à utiliser lors de l’importation de la mémoire.undefined
context.includeDirectoriesarrayRépertoires supplémentaires à inclure dans le contexte de l’espace de travail. Spécifie un tableau de chemins absolus ou relatifs supplémentaires à inclure dans le contexte de l’espace de travail. Les répertoires manquants seront ignorés avec un avertissement par défaut. Les chemins peuvent utiliser ~ pour faire référence au répertoire personnel de l’utilisateur. Ce paramètre peut être combiné avec le flag de ligne de commande --include-directories.[]
context.loadFromIncludeDirectoriesbooleanContrôle le comportement de la commande /memory refresh. Si défini sur true, les fichiers QWEN.md doivent être chargés depuis tous les répertoires ajoutés. Si défini sur false, QWEN.md ne doit être chargé qu’à partir du répertoire courant.false
context.fileFiltering.respectGitIgnorebooleanRespecter les fichiers .gitignore lors de la recherche.true
context.fileFiltering.respectQwenIgnorebooleanRespecter les fichiers .qwenignore et les fichiers d’exclusion personnalisés configurés lors de la recherche.true
context.fileFiltering.customIgnoreFilesarrayFichiers d’exclusion relatifs à la racine du projet à utiliser à la place des fichiers de compatibilité par défaut (.agentignore, .aiignore) lorsque respectQwenIgnore est activé. .qwenignore est toujours inclus.[".agentignore", ".aiignore"]
context.fileFiltering.enableRecursiveFileSearchbooleanIndique s’il faut activer la recherche récursive de noms de fichiers sous l’arborescence courante lors de la complétion des préfixes @ dans le prompt.true
context.fileFiltering.enableFuzzySearchbooleanLorsque true, active les capacités de recherche floue lors de la recherche de fichiers. Définir sur false pour améliorer les performances sur les projets comportant un grand nombre de fichiers.true
context.clearContextOnIdle.toolResultsThresholdMinutesnumberMinutes d’inactivité avant d’effacer le contenu des anciens résultats d’outils. Utilisez -1 pour désactiver le déclencheur d’inactivité.60
context.clearContextOnIdle.toolResultsNumToKeepintegerNombre entier de résultats d’outils compactables les plus récents à conserver lors de l’effacement. Les valeurs inférieures à 1 sont ramenées à 1.5
context.clearContextOnIdle.toolResultsTotalCharsThresholdnumberNombre total de caractères de sortie des résultats d’outils compactables autorisés dans l’historique avant d’effacer les résultats les plus anciens. Lorsque ce seuil est dépassé, les résultats les plus anciens sont effacés jusqu’à la moitié de ce seuil (best effort) afin que les tours suivants continuent à réutiliser le cache de prompt du fournisseur au lieu de réécrire l’historique à chaque tour. Utilisez -1 pour désactiver le déclencheur de taille. Il s’agit d’un seuil souple : les résultats d’outils récents protégés peuvent maintenir le total au-dessus de ce seuil.500000

Dépannage des performances de recherche de fichiers

Si vous rencontrez des problèmes de performances avec la recherche de fichiers (par exemple, avec les complétions @), en particulier dans les projets contenant un très grand nombre de fichiers, voici quelques solutions que vous pouvez essayer, par ordre de recommandation :

  1. Utiliser un fichier ignore : Créez un fichier .qwenignore ou un fichier ignore personnalisé configuré à la racine de votre projet pour exclure les répertoires contenant un grand nombre de fichiers dont vous n’avez pas besoin de référencer (par exemple, les artefacts de build, les logs, node_modules). Réduire le nombre total de fichiers analysés est le moyen le plus efficace d’améliorer les performances.
  2. Désactiver la recherche floue : Si ignorer des fichiers ne suffit pas, vous pouvez désactiver la recherche floue en définissant enableFuzzySearch sur false dans votre fichier settings.json. Cela utilisera un algorithme de correspondance plus simple et non flou, ce qui peut être plus rapide.
  3. Désactiver la recherche de fichiers récursive : En dernier recours, vous pouvez désactiver complètement la recherche de fichiers récursive en définissant enableRecursiveFileSearch sur false. Ce sera l’option la plus rapide car elle évite une analyse récursive de votre projet. Cependant, cela signifie que vous devrez saisir le chemin complet des fichiers lors de l’utilisation des complétions @.

tools

ParamètreTypeDescriptionPar défautRemarques
tools.sandboxboolean or stringEnvironnement d’exécution sandbox (peut être un booléen ou une chaîne de chemin).undefined
tools.sandboxImagestringURI de l’image sandbox utilisée par Docker/Podman lorsque --sandbox-image et QWEN_SANDBOX_IMAGE ne sont pas définis.undefined
tools.shell.enableInteractiveShellbooleanUtilise node-pty pour une expérience de shell interactif. Le repli vers child_process s’applique toujours.true
tools.shell.defaultTimeoutMsnumberDélai d’expiration par défaut, en millisecondes, pour les commandes shell au premier plan démarrées par l’agent. Un délai par appel sur l’outil shell remplace cette valeur. Lorsqu’il n’est pas défini, les commandes au premier plan expirent après 120000 ms (2 minutes). Définissez sur 0 pour désactiver le délai d’expiration.undefined
tools.shell.heartbeatIntervalMsnumberIntervalle, en millisecondes, entre les heartbeats de vitalité émis lorsqu’une commande shell au premier plan ne produit aucune sortie. Les heartbeats sont transmis aux clients ACP et aux consommateurs stream-json afin qu’ils puissent distinguer une commande silencieuse d’une session morte. Lorsqu’il n’est pas défini, les heartbeats sont émis toutes les 10000 ms (10 secondes). Définissez sur 0 pour désactiver les heartbeats.undefined
tools.corearray of stringsObsolète. Sera supprimé dans la prochaine version. Une liste non vide restreint l’ensemble des outils principaux (fichier, shell, recherche et built-ins associés) à une allowlist : les outils principaux ne figurant pas dans la liste sont désactivés (fail-closed). Les outils en dehors de cet ensemble — outils découverts dynamiquement (MCP, skill) et built-ins synthétiques/système tels que agent, list_agents, les outils du cycle de vie du mode plan, les outils de goal, task_stop, send_message et tool_search — contournent l’allowlist par conception ; utilisez permissions.deny pour bloquer les appels d’un outil (pour les outils MCP, il reste listé et est rejeté au runtime), ou tools.disabled / le filtre excludeTools par serveur pour le retirer complètement du registre. Une liste vide ([]) est traitée comme non définie et ne désactive rien. permissions.allow ne peut pas reproduire cette restriction — c’est de l’auto-approbation pure (#10075). Utilisez tools.eager pour restreindre les schémas d’outils eager par défaut envoyés initialement (les outils non listés sont différés, pas désactivés — ils restent chargeables via tool_search), et permissions.deny pour bloquer les outils catégoriquement.undefined
tools.excludearray of stringsObsolète. Utilisez permissions.deny à la place. Noms des outils à exclure de la découverte. Non migré automatiquement ; le paramètre hérité reste honoré au démarrage.undefined
tools.disabledarray of stringsNoms des outils masqués du registre entièrement. Contrairement à permissions.deny (qui bloque les appels au runtime), les outils désactivés ne sont jamais enregistrés, donc ils n’apparaissent pas dans /tools et ne peuvent pas être découverts ou appelés par le modèle. Par exemple, ["enter_plan_mode"] empêche le modèle de passer en mode plan de sa propre initiative. Fusionné en union à travers les scopes.undefined
tools.visiblearray of stringsNoms des outils différés rendus visibles au démarrage sans nécessiter tool_search. Les outils listés apparaissent aux côtés des outils principaux dans la session initiale. Fusionné en union à travers les scopes.undefined
tools.eagerarray of stringsAllowlist des noms d’outils intégrés eager par défaut dont les schémas restent éligibles pour la requête modèle initiale. Les outils non exemptés non listés sont différés à la place : toujours enregistrés, listés dans /tools, appelables et découvrables via tool_search. Les outils déjà différés par défaut restent à la demande même lorsqu’ils sont listés ; utilisez tools.visible pour en afficher un au démarrage. tool_search, structured_output, les outils du cycle de vie du mode plan, task_stop, les outils MCP et les outils computer_use__* ne sont pas affectés et conservent leur comportement de chargement normal. Une liste explicitement vide ([]) est active et diffère tous les outils eager par défaut non exemptés ; omettre le paramètre signifie aucune restriction. Fonctionne en tandem avec tool_search : lorsque ToolSearch n’est pas enregistré — tools.toolSearch.enabled: false, une règle deny sur tool_search, ou l’opt-out automatique pour les modèles DeepSeek — l’allowlist retient toujours les schémas, mais rien ne peut les recharger, donc les outils rétrogradés sont hors d’atteinte pour cette session (ils restent dans /tools, et un avertissement est journalisé). Deux dérogations : les outils rétrogradés référencés dans l’historique de session repris voient leurs schémas renvoyés sans avertissement, et les outils rétrogradés listés dans tools.visible sont déclarés d’emblée. Utilisez permissions.deny si vous vouliez les supprimer, ou laissez ToolSearch actif. Les entrées inutilisables (vides ou malformées) sont supprimées avec un avertissement et laissent le reste de la liste actif. Les scopes ultérieurs remplacent les listes précédentes. Nécessite un redémarrage.undefined
tools.allowedarray of stringsObsolète. Utilisez permissions.allow à la place. Noms des outils qui contournent la boîte de dialogue de confirmation. Non migré automatiquement ; le paramètre hérité reste honoré au démarrage.undefined
tools.approvalModestringDéfinit le mode d’approbation par défaut pour l’utilisation des outils.autoValeurs possibles : plan (analyser uniquement, ne pas modifier les fichiers ni exécuter de commandes), default (exiger une approbation avant la modification des fichiers ou l’exécution de commandes shell), auto-edit (approuver automatiquement les modifications de fichiers), auto (le classificateur LLM approuve automatiquement les actions sûres et bloque les actions risquées), yolo (approuver automatiquement tous les appels d’outils)
tools.discoveryCommandstringCommande à exécuter pour la découverte des outils. Lorsque l’allowlist tools.eager est active, un outil découvert qui n’y figure pas est enregistré comme différé : il reste dans /tools et est chargeable via tool_search, mais son schéma n’est pas envoyé dans la requête modèle initiale.undefined
tools.callCommandstringDéfinit une commande shell personnalisée pour appeler un outil spécifique découvert à l’aide de tools.discoveryCommand. La commande shell doit répondre aux critères suivants : elle doit prendre le name de la fonction (exactement comme dans la déclaration de fonction ) comme premier argument de ligne de commande. Elle doit lire les arguments de la fonction au format JSON sur stdin, de manière analogue à functionCall.args. Elle doit renvoyer la sortie de la fonction au format JSON sur stdout, de manière analogue à functionResponse.response.content.undefined
tools.useRipgrepbooleanUtilise ripgrep pour la recherche de contenu de fichiers au lieu de l’implémentation de repli. Offre des performances de recherche plus rapides.true
tools.useBuiltinRipgrepbooleanUtilise le binaire ripgrep intégré. Lorsqu’il est défini sur false, la commande rg au niveau du système sera utilisée à la place. Ce paramètre n’est effectif que lorsque tools.useRipgrep est true.true
tools.truncateToolOutputThresholdnumberTronque la sortie de l’outil si elle dépasse ce nombre de caractères. S’applique aux outils Shell, Grep, Glob, ReadFile et ReadManyFiles.25000Nécessite un redémarrage : Oui
tools.truncateToolOutputLinesnumberNombre maximum de lignes ou d’entrées conservées lors de la troncature de la sortie de l’outil. S’applique aux outils Shell, Grep, Glob, ReadFile et ReadManyFiles.1000Nécessite un redémarrage : Oui
tools.computerUse.enabledbooleanActive les outils intégrés Computer Use (automatisation de bureau native cua-driver). Lorsque true (par défaut), les outils computer_use__* sont enregistrés en tant qu’outils intégrés différés ; le premier appel télécharge le binaire cua-driver épinglé et signé dans ~/.qwen/computer-use/ et guide l’utilisateur à travers les autorisations d’accessibilité / d’enregistrement d’écran de macOS.trueNécessite un redémarrage : Oui
tools.computerUse.maxImageDimensionnumberLimite de pixels appliquée au bord le plus long des captures d’écran cua-driver (via max_image_dimension de set_config). -1 (par défaut) conserve la valeur par défaut intégrée de cua-driver (1568) ; 0 désactive le redimensionnement (pleine résolution) ; une valeur positive limite le bord le plus long. Des limites plus basses réduisent le coût des tokens de vision au détriment des détails fins.-1Nécessite un redémarrage : Oui. Remplacement par variable d’env : QWEN_COMPUTER_USE_MAX_IMAGE_DIMENSION (un entier non négatif ; prend le pas sur ce paramètre)
tools.computerUse.idleTimeoutMsnumberMillisecondes pendant lesquelles le processus cua-driver reste actif après le dernier appel computer_use__*. La valeur par défaut est 300000 (5 minutes). Définissez sur 0 pour le maintenir en cours d’exécution jusqu’à la fermeture de Qwen Code.300000Nécessite un redémarrage : Oui
tools.toolSearch.enabledbooleanCharge les outils MCP à la demande via ToolSearch pour réduire la taille du prompt. Désactivez cette option pour les modèles qui s’appuient sur la mise en cache KV basée sur les préfixes (par exemple, DeepSeek) afin de maintenir le préfixe du prompt stable et de maximiser les taux de réussite du cache.trueNécessite un redémarrage : Oui
tools.toolSearch.thresholdnumberPourcentage de la fenêtre de contexte utilisé comme budget au démarrage de la session pour le préchargement des outils différés ordinaires (outils intégrés et MCP confondus). Lorsque leurs schémas combinés tiennent dans ce budget, ils sont déclarés d’avance au lieu d’être chargés à la demande via ToolSearch. Les outils rétrogradés par tools.eager sont exclus de ce préchargement et restent à la demande. Définissez 0 pour toujours charger les outils différés à la demande.10Nécessite un redémarrage : Oui
tools.listDirectory.enabledbooleanActive l’outil intégré list_directory. Désactivé par défaut car glob couvre le listage de répertoires dans la plupart des cas ; l’outil est également réactivé automatiquement lorsqu’il est explicitement listé dans la liste blanche coreTools (--core-tools / tools.core).falseNécessite un redémarrage : Oui
tools.todoWrite.enabledbooleanActive l’outil intégré todo_write et ses directives de system prompt. Désactivé par défaut.falseNécessite un redémarrage : Oui
tools.workflowsEnabledbooleanActive l’outil Workflow, qui permet au modèle d’écrire et d’exécuter un script qui orchestre des sous-agents en parallèle. Désactivé par défaut ; une exécution peut dispatcher de nombreux sous-agents et dépenser des tokens en conséquence.falseScopes User, System et SystemDefaults uniquement ; les valeurs du workspace sont ignorées. Nécessite un redémarrage : Oui. Remplacements par variable d’env : QWEN_CODE_ENABLE_WORKFLOWS=1 force l’activation ; QWEN_CODE_DISABLE_WORKFLOWS=1 force la désactivation (la désactivation l’emporte).
goals.modelProposedenumContrôle l’outil propose_goal, qui permet au modèle de proposer un Goal de session pour que vous l’approuviez : alwaysAsk affiche chaque proposition dans une boîte de dialogue d’approbation et rien n’est défini tant que vous ne l’acceptez pas ; "disabled" supprime l’outil. Un /goal saisi manuellement n’est pas affecté.alwaysAskScopes User, System et SystemDefaults uniquement ; les valeurs du workspace sont ignorées. Nécessite un redémarrage : Oui.
Note

Migration depuis tools.core / tools.exclude / tools.allowed : Ces paramètres hérités sont obsolètes mais ne sont pas migrés automatiquement ; ils continuent de fonctionner au démarrage. Migrez tools.allowed et tools.exclude manuellement vers permissions.allow et permissions.deny. tools.core n’a pas de remplacement exact ; voir le tableau ci-dessous.

memory

ParamètreTypeDescriptionPar défaut
memory.enableManagedAutoMemorybooleanActive l’extraction en arrière-plan des mémoires à partir des conversations.true
memory.enableManagedAutoDreambooleanActive la consolidation automatique (déduplication et nettoyage) des mémoires collectées.true
memory.enableAutoSkillbooleanActive la revue en arrière-plan pour détecter les skills réutilisables du projet après les sessions utilisant intensivement les outils.true
memory.autoSkillConfirmbooleanDemande une confirmation avant que les skills auto-générés ne soient ajoutés à la bibliothèque de skills. Si désactivé, les auto-skills sont sauvegardés immédiatement.true
memory.enableTeamMemorybooleanActive un niveau de mémoire de projet partagé avec les collaborateurs via le répertoire .qwen/team-memory/ suivi par git. Les écritures y sont analysées pour détecter les secrets et peuvent être consultées dans le diff git.false
memory.enableTeamMemorySyncbooleanLorsque la mémoire d’équipe est activée, commit, pull (fast-forward) et push automatiquement le répertoire .qwen/team-memory/ au démarrage de la session pour synchroniser les collaborateurs. Nécessite un upstream git configuré.false
memory.agentTimeoutMinutesnumberDurée d’exécution maximale en minutes pour les agents mémoire en arrière-plan (extraction, dream, remember, revue de skills). Non défini utilise la valeur par défaut intégrée de chaque agent (2–5 minutes) ; 0 désactive la limite de temps.non défini
memory.agentMaxTurnsnumberNombre maximal de tours pour les agents mémoire en arrière-plan (extraction, dream, remember, revue de skills). Non défini utilise la valeur par défaut intégrée de chaque agent (5–8) ; 0 désactive la limite de tours.non défini

Consultez Memory pour plus de détails sur le fonctionnement de l’auto-memory et sur l’utilisation des commandes /memory, /remember et /dream.

agents

ParamètreTypeDescriptionPar défaut
agents.builtin.exploreModelstringSélecteur de modèle pour le sous-agent Explore intégré. Utilisez inherit pour le modèle de la session principale, fast pour fastModel, un ID de modèle ou un sélecteur authType:model-id. Un agent Explore personnalisé du même nom conserve sa propre configuration de modèle. Nécessite un redémarrage.inherit
agents.modelGradesobjectMappe des noms de grade sémantiques exposés à l’outil Agent vers des sélecteurs de modèle. Nécessite un redémarrage.undefined
agents.allowedGradesarray of stringsListe blanche optionnelle de grades de modèle configurés que l’outil Agent peut utiliser. Nécessite un redémarrage.undefined
agents.crossSessionMessagingbooleanExpérimental. Permet aux sessions Qwen Code sur cette machine de s’envoyer des messages via un socket local par session. L’activer ouvre cette session aux messages des pairs, la rend découvrable par les autres et permet à son modèle de les adresser depuis send_message. Nécessite un redémarrage. Un workspace peut uniquement définir cela à false ; un true de workspace est ignoré, avec un avertissement uniquement s’il assouplirait la valeur définie par l’opérateur ou la valeur par défaut.false
agents.crossSessionInboundenumCe qui arrive aux messages entrants inter-sessions : accept les livre, hold les gare pour une revue /peers sans laisser le modèle agir, et refuse désactive cette session. Non défini signifie que les contrôleurs émis par l’utilisateur et les processus enfants de cette session livrent automatiquement, tandis que les autres sessions utilisent la parité de classe de revue ; les autres messages sont garés pour revue. Un workspace peut uniquement resserrer cela (hold ou refuse, lorsque plus strict que la valeur définie par l’opérateur ou la valeur par défaut non définie) ; une valeur non reconnue effective gare tous les messages.undefined

permissions

Le système de permissions fournit un contrôle fin sur les outils qui peuvent s’exécuter, ceux qui nécessitent une confirmation et ceux qui sont bloqués.

Priorité de décision (de la plus haute à la plus basse) : deny > ask > allow > (mode par défaut/interactif)

La première règle correspondante l’emporte. Les règles utilisent le format "ToolName" ou "ToolName(specifier)".

ParamètreTypeDescriptionPar défaut
permissions.allowarray of stringsRègles pour les appels d’outils approuvés automatiquement (aucune confirmation nécessaire). Fusionnées dans tous les scopes (utilisateur + projet + système). Cette clé est de l’auto-approbation PURE : elle ne supprime, ne rétrograde ni ne masque jamais un outil, et chaque outil intégré reste enregistré quel que soit le nombre d’outils couverts par les règles ; les outils différés par défaut (tels que task_stop ou monitor) conservent leur chargement à la demande habituel via tool_search (#10075). Pour garder le schéma d’un outil hors de la requête modèle initiale, utilisez tools.eager ; pour bloquer un outil catégoriquement, utilisez une règle permissions.deny pour l’outil entier — les outils MCP sont exemptés de la suppression par deny (voir la ligne permissions.deny) : masquez-les avec les filtres excludeTools / tools.disabled par serveur. Exception : en mode d’approbation AUTO, les règles allow dangereuses sont mises en réserve plutôt qu’actives, donc une suppression en cours de session ne peut pas toucher la réserve — lorsque le mode AUTO est quitté, la règle en réserve est restaurée et auto-approuve à nouveau jusqu’au redémarrage de la session.undefined
permissions.askarray of stringsRègles pour les appels d’outils qui nécessitent toujours une confirmation utilisateur. Prioritaire sur allow. Comme allow, cela n’affecte jamais le fait qu’un outil soit enregistré.undefined
permissions.denyarray of stringsRègles pour les appels d’outils bloqués. Priorité la plus élevée — écrase à la fois allow et ask. Une règle deny pour un outil entier (sans spécificateur) supprime également l’outil du registre — pour les outils intégrés et les outils trouvés via tools.discoveryCommand. Les outils MCP sont exemptés (leur chemin d’enregistrement honore uniquement disabledTools) : masquez-les avec les filtres excludeTools / tools.disabled par serveur à la place. Les règles deny bloquent toujours les appels d’outils MCP au runtime.undefined

Alias des noms d’outils (l’un ou l’autre fonctionne dans les règles) :

AliasOutil canoniqueNotes
Bash, Shellrun_shell_command
Read, ReadFileread_fileMéta-catégorie — voir ci-dessous
Edit, EditFileeditMéta-catégorie — voir ci-dessous
Write, WriteFilewrite_file
NotebookEditnotebook_edit
NotebookEditToolnotebook_edit
Grep, SearchFilesgrep_search
Glob, FindFilesglob
ListFileslist_directory
WebFetchweb_fetch
Agenttask
Skillskill

Méta-catégories :

Certains noms de règles couvrent automatiquement plusieurs outils :

Nom de la règleOutils couverts
Readread_file, grep_search, glob, list_directory
Editedit, write_file, notebook_edit

[!important] Read(/path/**) correspond aux quatre outils de lecture (lecture de fichier, grep, glob et listage de répertoire). Pour restreindre uniquement la lecture de fichiers, utilisez ReadFile(/path/**) ou read_file(/path/**).

Exemples de syntaxe de règles :

RègleSignification
"Bash"Toutes les commandes shell
"Bash(git *)"Commandes shell commençant par git (limite de mot : PAS gitk)
"Bash(git push *)"Commandes shell comme git push origin main
"Bash(npm run *)"N’importe quel script npm run
"Read"Toutes les opérations de lecture de fichiers (read, grep, glob, list)
"Read(./secrets/**)"Lire n’importe quel fichier sous ./secrets/ de manière récursive
"Edit(/src/**/*.ts)"Éditer les fichiers TypeScript sous la racine du projet /src/
"WebFetch(api.example.com)"Récupérer depuis api.example.com et tous ses sous-domaines
"mcp__puppeteer"Tous les outils du serveur MCP puppeteer

Préfixes de motifs de chemin :

PréfixeSignificationExemple
//Chemin absolu depuis la racine du système de fichiers//etc/passwd
~/Relatif au répertoire home~/Documents/*.pdf
/Relatif à la racine du projet/src/**/*.ts
./Relatif au répertoire de travail courant./secrets/**
(aucun)Identique à ./secrets/**

Prévention du contournement des commandes shell :

Les règles de permission pour Read, Edit et WebFetch sont également appliquées lorsque l’agent exécute des commandes shell équivalentes. Par exemple, si Read(./.env) est dans deny, l’agent ne peut pas le contourner via cat .env dans une commande shell. Les commandes shell prises en charge incluent cat, grep, curl, wget, cp, mv, rm, chmod, et bien d’autres. Les commandes inconnues/sûres (par ex. git) ne sont pas affectées par les règles de fichiers/réseau.

Migration depuis les paramètres hérités :

Paramètre héritéRègle permissions équivalenteNotes
tools.allowedpermissions.allowNon migré automatiquement ; toujours honoré au démarrage
tools.excludepermissions.denyNon migré automatiquement ; toujours honoré au démarrage
tools.coretools.eager (+ permissions.deny)Non migré automatiquement vers permissions.allow, qui est de l’auto-approbation pure et ne peut pas reproduire la restriction de liste blanche (#10075). tools.eager diffère les outils eager par défaut non listés (ils restent chargeables via tool_search) ; permissions.deny supprime les outils intégrés du registre entièrement (les outils MCP restent listés et sont rejetés au runtime — utilisez tools.disabled / le filtre excludeTools par serveur pour les retirer complètement). Aucun des deux ne préserve la garantie fail-closed d’une liste blanche tools.core non vide sur l’ensemble des outils principaux : un outil intégré ajouté dans une future version sera enregistré jusqu’à ce qu’il soit explicitement refusé, donc une liste deny doit être ré-auditée à chaque version. Une liste tools.core vide est traitée comme non définie et ne désactive rien.

Exemple de configuration :

{ "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] Utilisez /permissions dans le CLI interactif pour afficher, ajouter et supprimer des règles sans modifier settings.json directement.

slashCommands

Contrôle les commandes slash disponibles dans le CLI. Utile pour restreindre la surface de commande dans les déploiements multi-tenant ou en entreprise.

ParamètreTypeDescriptionPar défaut
slashCommands.disabledarray of stringsNoms des commandes slash à masquer et dont l’exécution sera refusée. La correspondance se fait sans casse sur le nom final de la commande (pour les commandes d’extension, il s’agit de la forme désambiguïsée, par ex. myext.deploy), sauf qu’une commande Skill est bloquée sous l’une ou l’autre orthographe — son nom enregistré (rust:pdf) ou le nom que son SKILL.md déclare (pdf) — donc une entrée écrite avant que ce préfixe existe la bloque toujours. Fusionné en union à travers les scopes, ainsi les paramètres du workspace peuvent ajouter mais pas supprimer les entrées définies dans les paramètres utilisateur ou système.undefined

La même denylist peut également être fournie via le flag CLI --disabled-slash-commands (séparés par des virgules ou répétés) et la variable d’environnement QWEN_DISABLED_SLASH_COMMANDS ; les valeurs des trois sources sont fusionnées en union.

Exemple — verrouiller les commandes intégrées pour un déploiement en sandbox :

{ "slashCommands": { "disabled": ["auth", "mcp", "extensions", "ide", "quit"] } }

Avec ces valeurs dans un settings.json au niveau système (/etc/qwen-code/settings.json ou QWEN_CODE_SYSTEM_SETTINGS_PATH), les utilisateurs ne peuvent pas réduire la denylist depuis leur propre scope, et les commandes désactivées n’apparaîtront pas dans l’autocomplétion et ne s’exécuteront pas si elles sont tapées.

[!note] Ce paramètre contrôle uniquement les commandes slash (par ex. /auth, /mcp). Il n’affecte pas les permissions des outils — consultez permissions.deny pour cela. Il n’intercepte pas non plus les raccourcis clavier comme Ctrl+C ou Esc.

skills

Contrôle les Skills exposées au modèle.

ParamètreTypeDescriptionPar défaut
skills.disabledLevelsarray of stringsNiveaux de découverte de skills à ignorer entièrement. Les niveaux pris en charge sont project, user, extension et bundled. Fusionné en union à travers les scopes de paramètres. Utilisez ["bundled"] pour masquer toutes les skills intégrées tout en conservant les skills fournies par l’hôte. Remarque : les entrées de skills.directories sont découvertes au niveau user, donc ["user"] les masque aussi.undefined
skills.disabledarray of stringsNoms des skills désactivées de manière stricte. La correspondance se fait sans casse sur le nom du skill et fusionné en union à travers les scopes de paramètres, ainsi les paramètres du projet ne peuvent pas écraser une entrée utilisateur ou système. Les skills masquées n’apparaissent pas dans <available_skills> ni en tant que commandes slash /<name>. Un skill d’extension est reconnu sous l’une ou l’autre orthographe — son nom enregistré (rust:pdf) ou le nom que son SKILL.md déclare (pdf) — donc une entrée écrite avant que le préfixe existe continue de s’appliquer.undefined
skills.defaultDisabledarray of stringsNoms des skills qui commencent désactivées mais peuvent être activées via skills.enabled. La correspondance se fait sans casse et fusionné en union à travers les scopes de paramètres. Un skill d’extension est reconnu sous l’une ou l’autre orthographe, comme dans skills.disabled.undefined
skills.enabledarray of stringsActivations explicites. Remplacent une entrée correspondante de skills.defaultDisabled et, pour un skill d’extension, le propre défaut de l’extension propriétaire et l’activation stockée de ce workspace pour celui-ci. La correspondance se fait sans casse et fusionné en union à travers les scopes de paramètres — uniquement sur le nom enregistré du skill, donc un skill d’extension nécessite rust:pdf : un pdf nu ne correspond jamais en tant qu’octroi — il annule uniquement une entrée skills.defaultDisabled orthographiée de manière identique (selon la règle d’orthographe identique ci-dessous), et une fois annulée, l’activation stockée pour ce workspace décide, sinon le propre défaut de l’extension propriétaire. Ce paramètre ne peut pas écraser skills.disabled ni réactiver des skills d’un niveau exclu par skills.disabledLevels.undefined

La priorité est skills.disabled > skills.enabled > skills.defaultDisabled. Par exemple, un utilisateur peut placer un skill dans defaultDisabled et un projet peut ajouter le même nom dans enabled ; une entrée disabled stricte à n’importe quel scope l’emporte toujours.

Chaque liste contient des noms de skills littéraux, mis en correspondance sans casse après suppression des espaces, sans prise en charge des glob. skills.enabled annule une entrée skills.defaultDisabled uniquement lorsque les deux entrées sont orthographiées de la même manière, car cette étape compare les entrées elles-mêmes plutôt que de les résoudre en un skill — donc un skill d’extension qui doit être à la fois désactivé par défaut et activé explicitement est écrit rust:pdf dans les deux listes. Voir Extension Skills pour comprendre pourquoi les deux listes ci-dessus acceptent l’une ou l’autre orthographe et pas celle-ci.

mcp

ParamètreTypeDescriptionPar défaut
mcp.serverCommandstringCommande pour démarrer un serveur MCP.undefined
mcp.allowedarray of stringsUne allowlist de serveurs MCP à autoriser. Permet de spécifier une liste de noms de serveurs MCP qui doivent être mis à disposition du modèle. Cela peut être utilisé pour restreindre l’ensemble des serveurs MCP auxquels se connecter. Prend en charge les motifs glob (* correspond à n’importe quelle séquence, ? correspond à un seul caractère — par ex. "*puppeteer*") ; les entrées sans caractères glob correspondent exactement. Notez que cela sera ignoré si --allowed-mcp-server-names est défini.undefined
mcp.excludedarray of stringsUne denylist de serveurs MCP à exclure. Un serveur listé à la fois dans mcp.excluded et mcp.allowed est exclu. Prend en charge les motifs glob (*, ?) de la même manière que mcp.allowed. Notez que cela sera ignoré si --allowed-mcp-server-names est défini.undefined
mcp.toolIdleTimeoutMsnumberDélai d’inactivité en millisecondes pour les appels d’outils MCP. Si le serveur MCP ne produit aucune réponse ou mise à jour de progression dans ce délai, l’appel est interrompu. Doit être compris entre 10000 et 3600000. Peut être surchargé via la variable d’environnement QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS.300000
Note

Note de sécurité pour les serveurs MCP : Ces paramètres utilisent une correspondance de chaînes simple sur les noms des serveurs MCP, qui peuvent être modifiés. Si vous êtes administrateur système et souhaitez empêcher les utilisateurs de contourner cette restriction, envisagez de configurer les mcpServers au niveau des paramètres système afin que l’utilisateur ne puisse pas configurer ses propres serveurs MCP. Ceci ne doit pas être utilisé comme un mécanisme de sécurité infaillible.

lsp

[!warning] Fonctionnalité expérimentale : La prise en charge de LSP est actuellement expérimentale et désactivée par défaut. Activez-la à l’aide du flag de ligne de commande --experimental-lsp.

Le Language Server Protocol (LSP) fournit des fonctionnalités d’intelligence de code telles que la navigation vers la définition, la recherche de références et les diagnostics.

La configuration du serveur LSP s’effectue via des fichiers .lsp.json dans le répertoire racine de votre projet, et non via settings.json. Consultez la documentation LSP pour plus de détails et d’exemples de configuration.

security

ParamètreTypeDescriptionPar défaut
security.folderTrust.enabledbooleanParamètre permettant de suivre si l’approbation des dossiers est activée.false
security.auth.selectedTypestringLe type d’authentification actuellement sélectionné.undefined
security.auth.enforcedTypestringLe type d’authentification requis (utile pour les entreprises).undefined
security.auth.useExternalbooleanIndique s’il faut utiliser un flux d’authentification externe.undefined
security.auth.apiKeystringObsolète. Clé API pour l’authentification compatible OpenAI. Migrez vers modelProviders avec envKey à la place — voir Model Providers.undefined
security.auth.baseUrlstringObsolète. URL de base pour l’API compatible OpenAI. Migrez vers modelProviders à la place — voir Model Providers.undefined
security.allowedInsecureVoiceBaseUrlsarray of stringsURLs de base complètes de fournisseurs vocaux pouvant utiliser HTTP ou se résoudre vers des adresses de réseau privé. Chaque entrée doit inclure un schéma explicite http:// ou https:// et le chemin complet (par exemple, /v1) ; seules la sérialisation des URL et les slashes finaux sont normalisés. Les caractères génériques ne sont pas pris en charge ; les adresses métadonnées, link-local, NAT64 à usage local, 6to4 et Teredo restent bloquées même lorsqu’elles sont listées, tout comme les noms d’hôte se résolvant vers loopback ; les littéraux IPv4-mapped, IPv4-compatible et NAT64 bien connu (64:ff9b::/96) sont classés selon leur adresse IPv4 intégrée. Seuls les scopes User, System et SystemDefaults sont honorés. À utiliser uniquement pour les points de terminaison de confiance dans les réseaux privés gérés. Le HTTP en clair expose également la clé API du fournisseur transmise dans l’en-tête Authorization. Un nom d’hôte autorisé n’est aussi fiable que son DNS ; préférez les entrées en littéral IP lorsque l’adresse de la passerelle est stable. La correspondance exacte couvre l’URL de requête par lot ; les transports de streaming se connectent à une URL WebSocket dérivée de celle-ci (même schéma, hôte et port, chemin /api-ws/v1/...), et non au chemin autorisé lui-même.[]

serve

Paramètres de concurrence des sous-sessions persistantes pour qwen serve. Les modifications nécessitent le redémarrage du démon. Les limites de concurrence non positives ou non entières produisent un avertissement et reviennent à leurs valeurs par défaut intégrées.

ParamètreTypeDescriptionPar défaut
serve.maxConcurrentSubSessionsPerCallerintegerNombre maximal de sous-sessions en cours qu’une session appelante peut créer via create_sub_session. Doit être au moins 1.16
serve.maxConcurrentSubSessionsTotalintegerNombre maximal de sous-sessions en cours pour tous les appelants dans un workspace. Doit être un entier de 1 à 1024. Les valeurs supérieures à 1024 sont limitées à 1024 sans avertissement.24

advanced

ParamètreTypeDescriptionPar défaut
advanced.autoConfigureMemorybooleanConfigure automatiquement les limites de mémoire de Node.js.false
advanced.dnsResolutionOrderstringOrdre de résolution DNS.undefined
advanced.excludedEnvVarsarray of stringsVariables d’environnement à exclure du contexte du projet. Spécifie les variables d’environnement qui ne doivent pas être chargées depuis les fichiers .env du projet. Cela empêche les variables d’environnement spécifiques au projet (comme DEBUG=true) d’interférer avec le comportement de la CLI. Les variables des fichiers .qwen/.env ne sont jamais exclues par cette liste ; les variables affectant le chargeur sont toujours rejetées depuis chaque scope .env (voir ci-dessous).["DEBUG","DEBUG_MODE"]
advanced.bugCommandobjectConfiguration pour la commande de rapport de bug. Remplace l’URL par défaut de la commande /bug. Propriétés : urlTemplate (string) : Une URL pouvant contenir les placeholders {title} et {info}. Exemple : "bugCommand": { "urlTemplate": "https://bug.example.com/new?title={title}&info={info}" }undefined
plansDirectorystringRépertoire personnalisé pour les fichiers approuvés du mode Plan. Les chemins relatifs sont résolus à partir de la racine du projet, et le chemin résolu doit rester dans cette racine. Si non défini, les fichiers de plan sont stockés dans ~/.qwen/plans. Nécessite un redémarrage. Si le répertoire se trouve dans la racine du projet, ajoutez-le au .gitignore pour éviter de committer les fichiers de plan.undefined

experimental

Warning

Fonctionnalités expérimentales. Ces interrupteurs activent des capacités en cours de développement et peuvent être modifiés ou supprimés dans les prochaines versions.

ParamètreTypeDescriptionPar défaut
experimental.sessionWorkflowbooleanAffiche le DAG Web Shell Session Workflow du démon et présente le mode d’approbation plan existant comme Plan & Review. Cela ne change que la présentation : cela n’ajoute pas un mode d’approbation, ne modifie pas le comportement d’exécution des Todo, ni ne planifie de dépendances. Les modifications prennent effet sans redémarrage.false
experimental.cronbooleanActive les outils cron/loop en session (cron_create, cron_list, cron_delete) afin que le modèle puisse créer des prompts récurrents. Peut être désactivé via la variable d’environnement QWEN_CODE_DISABLE_CRON=1. Nécessite un redémarrage.true
experimental.todoStopGuardbooleanPermet aux sessions démon et ACP de continuer après un arrêt naturel du modèle lorsque la chaîne de travail en cours a écrit avec succès une todo list de premier niveau inachevée. Nécessite tools.todoWrite.enabled. Ajoute au plus deux appels consécutifs du modèle principal sans nouvelle entrée utilisateur ; une entrée utilisateur en cours de tour démarre une nouvelle étape de deux tentatives. N’est pas restauré après le redémarrage du processus et est forcé à off en modes safe, bare et Approval plan. Nécessite un redémarrage.false
experimental.sessionWriterLeasebooleanActive le fencing d’écriture inter-processus pour les sessions ACP et démon persistées. La valeur est figée lorsque le processus ACP ou démon démarre. Tous les writers ACP concurrents doivent activer le paramètre ; les versions ou configurations mixtes restent non sûres. Les enregistreurs interactifs et headless ne sont pas affectés. Nécessite un redémarrage du processus.false
experimental.cronRecurringMaxAgeDaysnumberNombre de jours pendant lesquels une tâche cron/loop récurrente reste active avant d’expirer automatiquement (elle s’exécute une dernière fois, puis est supprimée). Définir sur 0 pour désactiver l’expiration afin que les tâches s’exécutent jusqu’à leur suppression — utile pour les déploiements de démons sur le long terme. Peut être remplacé via la variable d’environnement QWEN_CODE_CRON_MAX_AGE_DAYS. Nécessite un redémarrage.7
experimental.agentTeambooleanActive les outils de collaboration d’équipe d’agents (team_create, task_create, task_update, send_message, etc.) pour la coordination multi-agents. Peut également être activé via QWEN_CODE_ENABLE_AGENT_TEAM=1. Nécessite un redémarrage.false
experimental.artifactbooleanActive les outils artifact. Activé par défaut. Dans les sessions interactives non-SDK, le modèle peut publier une page HTML autonome en tant qu’Artifact interactif et l’ouvrir dans le navigateur. Les sessions démon non-SDK peuvent utiliser record_artifact (métadonnées uniquement). Définissez ce paramètre sur false ou utilisez QWEN_CODE_DISABLE_ARTIFACT=1 pour désactiver les deux. Nécessite un redémarrage.true
experimental.emitToolUseSummariesbooleanGénère un court libellé basé sur un LLM après la fin de chaque lot d’appels d’outils. Voir Tool-Use Summaries. Nécessite qu’un modèle rapide soit configuré (fastModel) ; ignoré silencieusement sinon. Peut être remplacé par session avec QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 ou =1.true

mcpServers

Configure les connexions à un ou plusieurs serveurs Model-Context Protocol (MCP) pour découvrir et utiliser des outils personnalisés. Qwen Code tente de se connecter à chaque serveur MCP configuré pour découvrir les outils disponibles. Si plusieurs serveurs MCP exposent un outil avec le même nom, les noms des outils seront préfixés par l’alias du serveur que vous avez défini dans la configuration (par exemple, serverAlias__actualToolName) afin d’éviter les conflits. Notez que le système peut supprimer certaines propriétés de schéma des définitions d’outils MCP pour des raisons de compatibilité. Au moins l’un des paramètres command, url ou httpUrl doit être fourni. Si plusieurs sont spécifiés, l’ordre de priorité est httpUrl, puis url, puis command.

PropriétéTypeDescriptionOptionnel
mcpServers.<SERVER_NAME>.commandstringLa commande à exécuter pour démarrer le serveur MCP via les entrées/sorties standard.Oui
mcpServers.<SERVER_NAME>.argsarray of stringsArguments à passer à la commande.Oui
mcpServers.<SERVER_NAME>.envobjectVariables d’environnement à définir pour le processus du serveur.Oui
mcpServers.<SERVER_NAME>.cwdstringLe répertoire de travail dans lequel démarrer le serveur.Oui
mcpServers.<SERVER_NAME>.urlstringL’URL d’un serveur MCP qui utilise Server-Sent Events (SSE) pour la communication.Oui
mcpServers.<SERVER_NAME>.httpUrlstringL’URL d’un serveur MCP qui utilise HTTP streamable pour la communication.Oui
mcpServers.<SERVER_NAME>.headersobjectUne map de headers HTTP à envoyer avec les requêtes vers url ou httpUrl.Oui
mcpServers.<SERVER_NAME>.timeoutnumberDélai d’expiration en millisecondes pour les requêtes vers ce serveur MCP.Oui
mcpServers.<SERVER_NAME>.trustbooleanFaire confiance à ce serveur et contourner ses confirmations d’appel d’outil dans un workspace de confiance.Oui
mcpServers.<SERVER_NAME>.descriptionstringUne brève description du serveur, qui peut être utilisée à des fins d’affichage.Oui
mcpServers.<SERVER_NAME>.includeToolsarray of stringsListe des noms d’outils à inclure depuis ce serveur MCP. Lorsqu’elle est spécifiée, seuls les outils listés ici seront disponibles depuis ce serveur (comportement de liste blanche). Si elle n’est pas spécifiée, tous les outils du serveur sont activés par défaut.Oui
mcpServers.<SERVER_NAME>.excludeToolsarray of stringsListe des noms d’outils à exclure de ce serveur MCP. Les outils listés ici ne seront pas disponibles pour le modèle, même s’ils sont exposés par le serveur. Remarque : excludeTools est prioritaire sur includeTools - si un outil figure dans les deux listes, il sera exclu.Oui

telemetry

Configure la journalisation et la collecte de métriques pour Qwen Code. Pour plus d’informations, consultez telemetry.

ParamètreTypeDescriptionPar défaut
telemetry.enabledbooleanIndique si la télémétrie est activée ou non.
telemetry.targetstringÉtiquette informative pour la destination de la télémétrie (local ou gcp). Ne contrôle pas le routage de l’exportateur ; définissez telemetry.otlpEndpoint ou telemetry.outfile pour configurer l’endroit où les données sont envoyées.
telemetry.otlpEndpointstringL’endpoint pour l’exportateur OTLP.
telemetry.otlpProtocolstringLe protocole pour l’exportateur OTLP (grpc ou http).
telemetry.logPromptsbooleanIndique si le contenu des prompts de l’utilisateur et le texte des requêtes/réponses API doivent être inclus dans les logs ou non.
telemetry.userIdstringIdentifiant stable de l’utilisateur final écrit dans les spans GenAI comme extension ARMS gen_ai.user.id. Préférez une valeur pseudonyme. Ne définissez pas de valeur à l’échelle du processus pour une instance de démon ou de canal multi-utilisateurs partagée.
telemetry.includeSensitiveSpanAttributesbooleanLorsqu’il est activé, attache les prompts utilisateur, les prompts système, les entrées/sorties des outils et les réponses du modèle textuellement aux attributs de span OTel natifs (en plus des spans de pont log-to-span). ⚠️ Envoie des données sensibles — contenus de fichiers, commandes shell, historique des conversations — à votre backend OTLP.false
telemetry.sensitiveSpanAttributeMaxLengthnumberLongueur maximale de la chaîne JavaScript pour chaque payload de contenu d’attribut de span OTel natif sensible. Doit être comprise entre 1 et 104857600 (100 MiB). Définissez une valeur plus faible si votre collecteur ou votre backend rejette les attributs volumineux.1048576
telemetry.outfilestringChemin vers le fichier dans lequel écrire la télémétrie. Lorsqu’il est défini, remplace l’exportation OTLP.

outboundCorrelation

⚠️ Pertinent pour la sécurité. Contrôle les données de corrélation côté client que Qwen Code écrit dans les requêtes API LLM sortantes — une décision de consentement distincte de telemetry.*, qui régit les données transitant vers votre propre backend d’observabilité. Toutes les valeurs sont désactivées par défaut.

ParamètreTypeDescriptionPar défaut
outboundCorrelation.propagateTraceContextbooleanInjecte le traceparent W3C sur les requêtes fetch sortantes et en tant que variable d’environnement TRACEPARENT dans les processus enfants shell. Nécessite telemetry.enabled: true.false
outboundCorrelation.allowDynamicHeaderValuesbooleanAutorise les valeurs de customHeaders à contenir des placeholders d’exécution tels que ${session_id}, développés par requête. Lorsque désactivé, une telle valeur est supprimée plutôt qu’envoyée.false
{ "outboundCorrelation": { "allowDynamicHeaderValues": true } }

allowDynamicHeaderValues n’est que l’interrupteur de consentement. Quels hôtes reçoivent la valeur et comment l’en-tête est appelé sont décidés là où l’en-tête réside — modelProviders[].generationConfig.customHeaders, voir Valeurs dynamiques dans customHeaders. Ce cadrage explique pourquoi il n’y a pas de liste d’autorisation d’hôtes ici : vous avez déjà choisi le point de terminaison lorsque vous avez écrit le baseUrl du fournisseur, et les fournisseurs qui ne devraient pas envoyer l’en-tête ne le portent tout simplement pas.

Si une entrée de fournisseur a un placeholder alors que ceci est désactivé, l’en-tête est supprimé et un avertissement nommant les deux est affiché au démarrage — ainsi une passerelle rejetant vos requêtes ne devrait jamais être un mystère silencieux.

Note de confidentialité : une valeur développée est un identifiant stable par conversation. Ne la placez que sur un fournisseur auquel vous envoyez déjà le contenu de votre prompt.

Exemple de settings.json

Voici un exemple de fichier settings.json avec la structure imbriquée, nouvelle depuis la 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, "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"] } }

Historique du shell

La CLI conserve un historique des commandes shell que vous exécutez. Pour éviter les conflits entre différents projets, cet historique est stocké dans un répertoire spécifique au projet dans le dossier personnel de votre utilisateur.

  • Emplacement : ~/.qwen/tmp/<project_hash>/shell_history
    • <project_hash> est un identifiant unique généré à partir du chemin racine de votre projet.
    • L’historique est stocké dans un fichier nommé shell_history.

Variables d’environnement et fichiers .env

Les variables d’environnement sont un moyen courant de configurer les applications, en particulier pour les informations sensibles (comme les tokens) ou pour les paramètres susceptibles de changer d’un environnement à l’autre.

Qwen Code peut charger automatiquement les variables d’environnement depuis les fichiers .env. Pour les variables liées à l’authentification (comme OPENAI_*) et l’approche recommandée avec .qwen/.env, consultez Authentication.

Tip

Exclusion des variables d’environnement : Certaines variables d’environnement (comme DEBUG et DEBUG_MODE) sont automatiquement exclues des fichiers .env du projet par défaut afin d’éviter toute interférence avec le comportement de la CLI. Les variables des fichiers .qwen/.env ne sont jamais exclues par cette liste par défaut. Vous pouvez personnaliser ce comportement en utilisant le paramètre advanced.excludedEnvVars dans votre fichier settings.json.

Warning

Les variables affectant le chargeur sont toujours rejetées : Les variables qui font qu’un processus Node.js lancé ou un chargeur système exécute un fichier choisi par un attaquant — NODE_OPTIONS, npm_config_node_options (ainsi que les redirections de fichiers de configuration npm npm_config_userconfig, npm_config_globalconfig, npm_config_script_shell, npm_config_prefix), NODE_PATH, OPENSSL_CONF (dlopens un moteur OpenSSL attaquant au démarrage), NODE_REPL_EXTERNAL_MODULE, npm_config_node_gyp, npm_config_init_module, LD_PRELOAD, LD_AUDIT, DYLD_INSERT_LIBRARIES, BASH_ENV, ZDOTDIR et les définitions de fonctions bash exportées (BASH_FUNC_*) — ne sont jamais chargées depuis les fichiers .env (quel que soit le scope, y compris .qwen/.env et les fichiers au niveau utilisateur) ni depuis la section env de settings.json de niveau supérieur. Une valeur contrôlée par le workspace à cet endroit pourrait détourner la résolution de modules pour chaque sous-processus lancé par Qwen Code, donc Qwen Code affiche un avertissement lorsqu’il rejette une telle clé (une fois par processus, par clé et par source — dans un démon multi-workspace, le rejet de chaque workspace est signalé séparément). Pour utiliser l’une de ces variables, exportez-la dans l’environnement depuis lequel vous lancez Qwen Code ; les sessions hébergées par un démon qwen serve n’en héritent pas délibérément, tandis que les sessions éditeur directes (ACP) et la CLI simple conservent la valeur exportée. Les chemins de recherche de bibliothèques (LD_LIBRARY_PATH, DYLD_LIBRARY_PATH) et ENV (réservé au shell interactif) ne figurent pas intentionnellement dans cette liste — les rejeter casserait les toolchains courantes (ENV=production, répertoires de bibliothèques conda/CUDA) — mais un fichier .env de projet ne peut toujours pas les appliquer lors d’un rechargement. Ce rejet s’applique uniquement à la section env de niveau supérieur : les mcpServers[].env par serveur et les hooks[].env par hook sont intentionnellement limités à ce serveur ou ce hook et s’appliquent toujours (les deux surfaces sont contrôlées par la confiance du dossier pour les configs fournies par le workspace). Séparément, un fichier .env de projet ne peut jamais définir QWEN_CLI_ENTRY (le point d’entrée processus-session du démon), QWEN_CDP_MCP_COMMAND (la commande que le démon lance comme adaptateur MCP d’automatisation de navigateur), QWEN_SERVE_CDP_TUNNEL_OVER_WS (active cette surface de tunnel), DEV (le marqueur de lancement de l’environnement de développement), les variables d’ancre de confiance 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 — une CA attaquante à cet endroit, ou npm_config_strict_ssl=false, permettrait le MITM du trafic portant le token que les appels git/npm/pip/curl d’une session effectuent), les variables d’exécution de commandes 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 et les paires numérotées GIT_CONFIG_KEY_<n>/GIT_CONFIG_VALUE_<n> — git les exécute lors de toute invocation git d’une session — et XDG_CONFIG_HOME, qui redirige le $XDG_CONFIG_HOME/git/config que git fusionne avec ~/.gitconfig), les redirections de fichiers rc curl/wget (CURL_HOME, WGETRC — leurs fichiers rc peuvent installer un proxy ou une CA attaquant), PIP_CONFIG_FILE (redirige toute la configuration de pip — index-url, trusted-host, proxy ou paramètres de cert dans un fichier attaquant envoient le trafic pip de la session ou les identifiants vers l’infrastructure de l’attaquant), SSH_ASKPASS (git/ssh l’exécutent comme programme de demande de passphrase de repli lors d’un défi d’authentification), LESSOPEN et LESSCLOSE (less les exécute comme préprocesseurs d’entrée sur chaque fichier qu’une session visualise), les variables de sélection d’interpréteur node-gyp (NODE_GYP_FORCE_PYTHON, npm_config_python, PYTHON — exécuté comme Python de build lors des installations d’addons natifs — et npm_config_git, exécuté comme binaire git de npm), les hooks d’éditeur et de démarrage (VISUAL, EDITOR — la chaîne de repli d’éditeur de git, également lancés par les flux d’éditeur externe de la CLI elle-même — et PYTHONSTARTUP, que CPython exécute au démarrage interactif), ou BROWSER (la CLI l’exécute via le lanceur de navigateur sécurisé). Celles-ci restent définissables depuis l’environnement shell ou un fichier .env au niveau utilisateur ; contrairement à la liste de chargeurs ci-dessus, elles sont rejetées depuis les fichiers de projet uniquement, donc une valeur que vous exportez vous-même est préservée. Elles sont également figées au démarrage depuis un .env au niveau utilisateur : un rechargement des paramètres n’applique pas les modifications qui leur sont apportées — ni leur suppression — avant le redémarrage du processus. Note de mise à jour : avant l’existence de cette liste de refus, certaines de ces clés pouvaient être chargées depuis des fichiers .env ou settings.json env sur certains chemins ; elles sont maintenant rejetées partout avec un avertissement, et un démon qwen serve ne transmet plus les valeurs héritées de celles-ci aux sous-processus de session.

Tableau des variables d’environnement

VariableDescriptionNotes
QWEN_HOMEPersonnalise le répertoire de configuration global (par défaut : ~/.qwen). Accepte un chemin absolu ou relatif (les chemins relatifs sont résolus à partir du répertoire de travail actuel). Le ~ initial est développé vers le répertoire personnel de l’utilisateur.Stocke les identifiants, les paramètres, la mémoire, les skills et autres états globaux. Lorsqu’elle est définie, les répertoires .qwen/ au niveau du projet ne sont pas affectés. Une chaîne vide est considérée comme non définie.
QWEN_RUNTIME_DIRRemplace le répertoire de sortie d’exécution (conversations, logs, todos). Lorsqu’elle n’est pas définie, elle utilise par défaut le répertoire QWEN_HOME.Utilisez ceci pour séparer les données d’exécution éphémères de la configuration persistante. Utile lorsque QWEN_HOME se trouve sur un système de fichiers partagé ou lent.
QWEN_USAGE_STATISTICS_ENABLEDDéfinissez sur true ou 1 pour activer les statistiques d’utilisation. Toute autre valeur est considérée comme une désactivation.Remplace le paramètre privacy.usageStatisticsEnabled. Activé par défaut lorsque ni l’un ni l’autre n’est configuré.
QWEN_TELEMETRY_ENABLEDDéfinissez sur true ou 1 pour activer la télémétrie. Toute autre valeur est considérée comme une désactivation.Remplace le paramètre telemetry.enabled.
QWEN_TELEMETRY_TARGETDéfinit une étiquette informative pour la destination de la télémétrie (local ou gcp). Ne contrôle pas le routage ; utilisez QWEN_TELEMETRY_OTLP_ENDPOINT ou QWEN_TELEMETRY_OUTFILE pour configurer l’endroit où les données sont envoyées.Remplace le paramètre telemetry.target.
QWEN_TELEMETRY_OTLP_ENDPOINTDéfinit l’endpoint OTLP pour la télémétrie.Remplace le paramètre telemetry.otlpEndpoint.
QWEN_TELEMETRY_OTLP_PROTOCOLDéfinit le protocole OTLP (grpc ou http).Remplace le paramètre telemetry.otlpProtocol.
QWEN_TELEMETRY_LOG_PROMPTSDéfinissez sur true ou 1 pour activer ou désactiver la journalisation des prompts utilisateur. Toute autre valeur est considérée comme une désactivation.Remplace le paramètre telemetry.logPrompts.
QWEN_TELEMETRY_USER_IDDéfinit un identifiant stable de l’utilisateur final sur les spans d’interaction, LLM, Tool et Agent comme gen_ai.user.id. Préférez une valeur pseudonyme.Remplace telemetry.userId après suppression des espaces. Une valeur vide revient aux paramètres. Ceci est à l’échelle du processus et ne doit pas être utilisé comme identité par requête dans un processus partagé multi-utilisateurs.
QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTESDéfinissez sur true ou 1 pour attacher textuellement les prompts utilisateur, les prompts système, les E/S des outils et les réponses du modèle aux attributs de span OTel natifs (et conserver function_args, error, error.message et error_message sur les spans de pont log-to-span, ainsi que prompt / request_text / response_text lorsque telemetry.logPrompts est également activé). Toute autre valeur désactive cette option.Remplace le paramètre telemetry.includeSensitiveSpanAttributes. ⚠️ Envoie des données sensibles à votre backend OTLP.
QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTHDéfinit la longueur maximale de la chaîne JavaScript pour chaque payload de contenu d’attribut de span OTel natif sensible. Doit être un entier positif inférieur ou égal à 104857600 (100 MiB).Remplace le paramètre telemetry.sensitiveSpanAttributeMaxLength. La valeur par défaut est 1048576 (1 MiB) ; réduisez-la si votre collecteur ou votre backend rejette les attributs de span volumineux.
QWEN_TELEMETRY_OUTFILEDéfinit le chemin du fichier dans lequel écrire la télémétrie. Lorsqu’il est défini, remplace l’exportation OTLP.Remplace le paramètre telemetry.outfile.
QWEN_SANDBOXAlternative au paramètre sandbox dans settings.json.Accepte true, false, docker, podman ou une chaîne de commande personnalisée.
QWEN_SANDBOX_IMAGERemplace la sélection de l’image de sandbox pour Docker/Podman.Est prioritaire sur tools.sandboxImage.
SEATBELT_PROFILE(Spécifique à macOS) Change le profil Seatbelt (sandbox-exec) sur macOS.permissive-open : (Par défaut) Restreint les écritures dans le dossier du projet (et quelques autres dossiers, voir packages/cli/src/serve/sandbox-macos-permissive-open.sb) mais autorise les autres opérations. strict : Utilise un profil strict qui refuse les opérations par défaut. <profile_name> : Utilise un profil personnalisé. Pour définir un profil personnalisé, créez un fichier nommé sandbox-macos-<profile_name>.sb dans le répertoire .qwen/ de votre projet (par exemple, my-project/.qwen/sandbox-macos-custom.sb).
DEBUG or DEBUG_MODE(souvent utilisées par les bibliothèques sous-jacentes ou la CLI elle-même) Définissez sur true ou 1 pour activer la journalisation de débogage détaillée, ce qui peut être utile pour le dépannage.Remarque : Ces variables sont automatiquement exclues des fichiers .env du projet par défaut afin d’éviter toute interférence avec le comportement de la CLI. Utilisez les fichiers .qwen/.env si vous avez besoin de les définir spécifiquement pour Qwen Code.
NO_COLORDéfinissez sur n’importe quelle valeur pour désactiver tout affichage en couleur dans la CLI.
FORCE_HYPERLINKRemplace la détection des liens cliquables OSC 8 dans le moteur de rendu markdown. Définissez sur 1 (ou tout entier non nul, ou chaîne vide) pour forcer l’activation ; définissez sur 0 ou une valeur non numérique telle que false / off pour forcer la désactivation. Respecte les désactivations NO_COLOR / QWEN_DISABLE_HYPERLINKS définies au-dessus.Utilisez ceci pour activer OSC 8 à l’intérieur de tmux / GNU screen (l’auto-détection refuse par défaut car les capacités du terminal hôte sont masquées par le multiplexeur). Nécessite set -g allow-passthrough on sur tmux 3.3+. Active également Hyper, qui n’est pas détecté automatiquement.
QWEN_DISABLE_HYPERLINKSDéfinissez sur 1 pour désactiver complètement les hyperliens cliquables OSC 8 dans le moteur de rendu markdown, même sur les terminaux qui s’auto-détectent comme compatibles.Utile lorsqu’un terminal annonce son support mais plante sur les URL longues, ou lors du piping de la sortie via un intermédiaire qui altère les séquences d’échappement. Le moteur de rendu revient à un rendu simple label (url).
CLI_TITLEDéfinissez sur une chaîne pour personnaliser le titre de la CLI.
CODE_ASSIST_ENDPOINTSpécifie l’endpoint pour le serveur d’assistance au code.Ceci est utile pour le développement et les tests.
QWEN_CODE_MAX_OUTPUT_TOKENSRemplace le nombre maximal de tokens de sortie par réponse par défaut. Lorsqu’elle n’est pas définie, Qwen Code utilise par défaut la limite de sortie déclarée du modèle et, si une réponse est tronquée, augmente automatiquement (plancher de 64K) et récupère au fil des tours. Définissez ceci sur une valeur spécifique (par exemple, 16000) pour utiliser une limite fixe à la place — utile pour les backends auto-hébergés à capacité limitée qui souhaitent une réservation de slots par requête plus faible.Est prioritaire sur la limite par défaut du modèle, mais est remplacé par samplingParams.max_tokens dans les paramètres. Désactive l’augmentation automatique lorsqu’il est défini. Exemple : export QWEN_CODE_MAX_OUTPUT_TOKENS=16000
QWEN_CODE_UNATTENDED_RETRYDéfinissez sur true ou 1 pour activer le mode de retry persistant. Lorsqu’il est activé, les erreurs de capacité d’API transitoires (HTTP 429 Rate Limit et 529 Overloaded) font l’objet de tentatives indéfinies avec un backoff exponentiel (plafonné à 5 minutes par tentative) et des keepalives heartbeat toutes les 30 secondes sur stderr.Conçu pour les pipelines CI/CD et l’automatisation en arrière-plan où les tâches de longue durée doivent survivre aux pannes d’API temporaires. Doit être défini explicitement — CI=true seul n’active pas ce mode. Consultez Headless Mode pour plus de détails. Exemple : export QWEN_CODE_UNATTENDED_RETRY=1
QWEN_CODE_ACP_REPEATED_TOOL_FAILURE_GUARDMode de déploiement opérateur pour la protection contre les échecs répétés d’exécution d’outils ACP. Accepte off, shadow, warn ou enforce ; les valeurs manquantes ou invalides prennent la valeur par défaut shadow.S’applique uniquement aux prompts ACP interactifs en avant-plan ; les routes pilotées par canal et automatiques restent désactivées. Les fichiers d’environnement de projet et de workspace ne peuvent pas définir cette politique opérateur. Shadow laisse la continuation du modèle et les messages inchangés mais ajoute le flag de surveillance de prompt en file d’attente à craft/drainMidTurnQueue ; chaque mode non-off nécessite un état de prompt en file d’attente fiable. Les valeurs invalides non vides émettent un diagnostic ; exportez la variable dans l’environnement du processus ou dans un fichier au niveau utilisateur.
QWEN_CODE_PROFILE_STARTUPDéfinissez sur 1 pour activer le profilage des performances de démarrage. Écrit un rapport de timing JSON dans ~/.qwen/startup-perf/ avec les durées par phase.Actif uniquement à l’intérieur du processus enfant de la sandbox (ou avec QWEN_CODE_PROFILE_STARTUP_OUTER=1). Zéro overhead lorsqu’il n’est pas défini. Exemple : export QWEN_CODE_PROFILE_STARTUP=1
QWEN_CODE_PROFILE_STARTUP_OUTERDéfinissez sur 1 en même temps que QWEN_CODE_PROFILE_STARTUP=1 pour collecter également un profil de démarrage dans le processus externe (pré-sandbox). Les rapports du processus externe obtiennent un préfixe de nom de fichier outer- pour les distinguer du rapport de l’enfant de la sandbox.Désactivé par défaut — seul l’enfant de la sandbox collecte, pour éviter les rapports en double. Utile pour le développement local où la CLI n’est pas relancée dans une sandbox.
QWEN_CODE_PROFILE_STARTUP_NO_HEAPDéfinissez sur 1 en même temps que QWEN_CODE_PROFILE_STARTUP=1 pour ignorer les instantanés process.memoryUsage() par point de contrôle. Utile pour mesurer l’overhead Heisenberg propre au profileur.Désactivé par défaut. Les instantanés de heap coûtent environ 50 µs chacun (bien en dessous de 1 % du démarrage total), la plupart des utilisateurs devraient donc laisser ce paramètre tel quel.
QWEN_CODE_LEGACY_MCP_BLOCKINGDéfinissez sur 1 pour restaurer le comportement pré-MCP progressif où Config.initialize() attend de manière synchrone le handshake de découverte de chaque serveur MCP configuré avant de retourner.Désactivé par défaut. Le qwen-code moderne permet aux serveurs MCP de se mettre en ligne en arrière-plan pendant que l’UI est déjà interactive ; le modèle voit chaque lot de nouveaux outils dans les ~16 ms suivant la stabilisation du serveur. Ce flag est conservé comme solution de repli pour ≥ 1 release. Exemple : export QWEN_CODE_LEGACY_MCP_BLOCKING=1
QWEN_CODE_LEGACY_ERASE_LINES=1 désactive de force l’optimiseur de redessin du terminal (restaure les séquences d’effacement par ligne) ; =0 l’active de force même sur WSL, où il est ignoré par défaut car ConPTY gère mal les mouvements de curseur groupés de l’optimiseur (issue #7634). Non défini = comportement par défaut de la plateforme (ignorer quand WSL_DISTRO_NAME ou WSL_INTEROP est défini).Solution de secours pour les régressions de sortie en streaming. Comme elle est lue depuis l’environnement, les lanceurs qui nettoient les variables d’env (par ex. sudo) la suppriment aussi — passez-la au lancement à la place : sudo QWEN_CODE_LEGACY_ERASE_LINES=1 qwen. Exemple : export QWEN_CODE_LEGACY_ERASE_LINES=1
Lorsque les deux fichiers .env au niveau utilisateur définissent la même variable, le fichier spécifique à Qwen est prioritaire : <QWEN_HOME>/.env (ou ~/.qwen/.env lorsque QWEN_HOME n’est pas défini) est chargé avant ~/.env, et les valeurs d’environnement existantes ne sont pas écrasées.

Source de téléchargement des mises à jour autonomes

Définissez QWEN_UPDATE_BASE_URL pour utiliser une racine de release HTTPS personnalisée pour les mises à jour autonomes :

export QWEN_UPDATE_BASE_URL="https://downloads.example.com/qwen-code" qwen update

Pour la version 0.23.0, l’updater télécharge l’archive de la plateforme, SHA256SUMS et SHA256SUMS.sig depuis <base-url>/v0.23.0/. Hébergez ces fichiers avec les mêmes noms et la même structure de répertoires qu’une release officielle. Les vérifications de somme de contrôle et de signature existantes s’appliquent toujours, y compris QWEN_REQUIRE_SIGNATURE=1 lorsqu’une signature est requise.

L’URL doit utiliser HTTPS et ne peut pas contenir d’identifiants, de chaîne de requête ou de fragment. Les espaces entourant et les slashes finaux sont supprimés. Une valeur vide ou ne contenant que des espaces conserve les sources de téléchargement intégrées et leur ordre de fallback. Lorsqu’une racine personnalisée est définie, un échec de téléchargement ne revient pas aux sources intégrées.

Configurez cette variable dans le shell de lancement ou un fichier .env au niveau utilisateur. Elle est rejetée des fichiers .env de projet et .qwen/.env ainsi que de la section env de settings.json de niveau supérieur à chaque scope. Une valeur .env au niveau utilisateur est chargée au démarrage ; redémarrez Qwen Code après l’avoir modifiée.

Ce paramètre s’applique à qwen update, /update et aux mises à jour autonomes automatiques. Il ne modifie pas la découverte de version du registre npm. Il est distinct du QWEN_INSTALL_BASE_URL de l’installateur, qui pointe directement vers un répertoire spécifique à une version.

Arguments de ligne de commande

Les arguments passés directement lors de l’exécution du CLI peuvent remplacer d’autres configurations pour cette session spécifique.

Pour la sélection de l’image du sandbox, l’ordre de priorité est le suivant : --sandbox-image > QWEN_SANDBOX_IMAGE > tools.sandboxImage > image par défaut intégrée.

Tableau des arguments de ligne de commande

ArgumentAliasDescriptionValeurs possiblesNotes
--model-mSpécifie le modèle Qwen à utiliser pour cette session.Nom du modèleExemple : npm start -- --model qwen3-coder-plus
--prompt-pUtilisé pour passer directement un prompt à la commande. Cela invoque Qwen Code en mode non interactif.Votre texte de promptPour des exemples de scripting, utilisez le flag --output-format json pour obtenir une sortie structurée.
--prompt-interactive-iDémarre une session interactive avec le prompt fourni comme entrée initiale.Votre texte de promptLe prompt est traité au sein de la session interactive, et non avant. Ne peut pas être utilisé lors du piping de l’entrée depuis stdin. Exemple : qwen -i "explain this code"
--system-promptRemplace le system prompt intégré de la session principale pour cette exécution.Votre texte de promptLes fichiers de contexte chargés tels que QWEN.md sont toujours ajoutés après ce remplacement. Peut être combiné avec --append-system-prompt.
--append-system-promptAjoute des instructions supplémentaires au system prompt de la session principale pour cette exécution.Votre texte de promptAppliqué après le prompt intégré et les fichiers de contexte chargés. Peut être combiné avec --system-prompt. Voir Headless Mode pour des exemples.
--output-styleSélectionne le style de sortie qui détermine la forme des réponses pour cette exécution.Nom du styleConcise, Proactive, Explanatory, Learning, le nom d’un style personnalisé, ou default pour aucun style (insensible à la casse). Remplace le paramètre general.outputStyle. Un nom inconnu affiche un avertissement et la session démarre avec le style par défaut. N’a aucun effet lorsque --system-prompt ou QWEN_SYSTEM_MD remplace le prompt intégré. Voir Headless Mode pour des exemples.
--output-format-oSpécifie le format de la sortie du CLI pour le mode non interactif.text, json, stream-jsontext : (Par défaut) La sortie standard lisible par un humain. json : Une sortie JSON lisible par une machine émise à la fin de l’exécution. stream-json : Messages JSON en streaming émis au fur et à mesure de l’exécution. Pour une sortie structurée et du scripting, utilisez le flag --output-format json ou --output-format stream-json. Voir Headless Mode pour plus d’informations.
--input-formatSpécifie le format consommé depuis l’entrée standard.text, stream-jsontext : (Par défaut) Entrée texte standard depuis stdin ou les arguments de ligne de commande. stream-json : Protocole de messages JSON via stdin pour une communication bidirectionnelle. Prérequis : --input-format stream-json nécessite que --output-format stream-json soit défini. Lors de l’utilisation de stream-json, stdin est réservé aux messages du protocole. Voir Headless Mode pour plus d’informations.
--include-partial-messagesInclut les messages partiels de l’assistant lors de l’utilisation du format de sortie stream-json. Lorsqu’il est activé, émet les événements de streaming (message_start, content_block_delta, etc.) au fur et à mesure qu’ils se produisent pendant le streaming.Par défaut : false. Prérequis : Nécessite que --output-format stream-json soit défini. Voir Headless Mode pour plus d’informations sur les événements de streaming.
--sandbox-sActive le mode sandbox pour cette session.
--sandbox-imageDéfinit l’URI de l’image du sandbox.
--debug-dActive le mode debug pour cette session, fournissant une sortie plus verbeuse.
--help-hAffiche l’aide sur les arguments de ligne de commande.
--yoloActive le mode YOLO, qui approuve automatiquement tous les appels d’outils.
--approval-modeDéfinit le mode d’approbation pour les appels d’outils.plan, default, auto-edit, auto, yoloModes pris en charge : plan : Analyser uniquement — ne pas modifier les fichiers ni exécuter de commandes. default : Demander une approbation pour les modifications de fichiers ou les commandes shell (comportement par défaut). auto-edit : Approuver automatiquement les outils d’édition (edit, write_file, notebook_edit) tout en demandant une confirmation pour les autres. auto : Le classificateur LLM approuve automatiquement les actions sûres et bloque les actions risquées. yolo : Approuver automatiquement tous les appels d’outils (équivalent à --yolo). Ne peut pas être utilisé conjointement avec --yolo. Utilisez --approval-mode=yolo au lieu de --yolo pour la nouvelle approche unifiée. Exemple : qwen --approval-mode auto-edit
Voir plus d’informations sur le Approval Mode.
--allowed-toolsUne liste d’outils séparés par des virgules qui contourneront la boîte de dialogue de confirmation.Noms des outilsExemple : qwen --allowed-tools "Shell(git status)"
--disabled-slash-commandsNoms des commandes slash à masquer/désactiver (séparés par des virgules ou répétés). Union avec le paramètre slashCommands.disabled et la variable d’environnement QWEN_DISABLED_SLASH_COMMANDS. Correspondance insensible à la casse avec le nom final de la commande, avec la même règle d’orthographe pour une commande Skill.Noms des commandesExemple : qwen --disabled-slash-commands "auth,mcp,extensions"
--telemetryActive la télémétrie.
--telemetry-targetDéfinit la cible de télémétrie.Voir la télémétrie pour plus d’informations.
--telemetry-otlp-endpointDéfinit le point de terminaison OTLP pour la télémétrie.Voir la télémétrie pour plus d’informations.
--telemetry-otlp-protocolDéfinit le protocole OTLP pour la télémétrie (grpc ou http).Par défaut : grpc. Voir la télémétrie pour plus d’informations.
--telemetry-log-promptsActive la journalisation des prompts pour la télémétrie.Voir la télémétrie pour plus d’informations.
--acpActive le mode ACP (Agent Client Protocol). Utile pour les intégrations IDE/éditeur comme Zed.Stable. Remplace le flag obsolète --experimental-acp.
--experimental-lspActive la fonctionnalité expérimentale LSP (Language Server Protocol) pour l’intelligence de code (go-to-definition, find references, diagnostics, etc.).Expérimental. Nécessite que les serveurs de langage soient installés.
--extensions-eSpécifie une liste d’extensions à utiliser pour la session.Noms des extensionsSi non fourni, toutes les extensions disponibles sont utilisées. Utilisez le terme spécial qwen -e none pour désactiver toutes les extensions. Exemple : qwen -e my-extension -e my-other-extension
--list-extensions-lListe toutes les extensions disponibles et quitte.
--proxyDéfinit le proxy pour le CLI.URL du proxyExemple : --proxy http://localhost:7890.
--include-directoriesInclut des répertoires supplémentaires dans l’espace de travail pour la prise en charge de plusieurs répertoires.Chemins des répertoiresPeut être spécifié plusieurs fois ou sous forme de valeurs séparées par des virgules. Exemple : --include-directories /path/to/project1,/path/to/project2 ou --include-directories /path/to/project1 --include-directories /path/to/project2
--screen-readerActive le mode lecteur d’écran, qui ajuste le TUI pour une meilleure compatibilité avec les lecteurs d’écran.
--versionAffiche la version du CLI.
--openai-loggingActive la journalisation des appels à l’API OpenAI pour le débogage et l’analyse.Ce flag remplace le paramètre enableOpenAILogging dans settings.json.
--openai-logging-dirDéfinit un chemin de répertoire personnalisé pour les journaux de l’API OpenAI.Chemin du répertoireCe flag remplace le paramètre openAILoggingDir dans settings.json. Prend en charge les chemins absolus, les chemins relatifs et l’expansion de ~. Exemple : qwen --openai-logging-dir "~/qwen-logs" --openai-logging

Fichiers de contexte (Contexte d’instruction hiérarchique)

Bien qu’ils ne constituent pas strictement une configuration du comportement du CLI, les fichiers de contexte (dont le nom par défaut est QWEN.md, mais configurable via le paramètre context.fileName) sont essentiels pour configurer le contexte d’instruction (également appelé « mémoire »). Cette fonctionnalité puissante vous permet de fournir des instructions spécifiques au projet, des guides de style de code ou toute information contextuelle pertinente à l’IA, afin que ses réponses soient mieux adaptées et plus précises pour vos besoins. Le CLI inclut des éléments d’interface utilisateur, comme un indicateur dans le pied de page affichant le nombre de fichiers de contexte chargés, pour vous tenir informé du contexte actif.

  • Objectif : Ces fichiers Markdown contiennent des instructions, des directives ou du contexte dont vous souhaitez que le modèle Qwen ait connaissance lors de vos interactions. Le système est conçu pour gérer ce contexte d’instruction de manière hiérarchique.

Exemple de contenu de fichier de contexte (ex. QWEN.md)

Voici un exemple conceptuel de ce que pourrait contenir un fichier de contexte à la racine d’un projet 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.

Cet exemple montre comment vous pouvez fournir un contexte général de projet, des conventions de code spécifiques, et même des notes sur des fichiers ou composants particuliers. Plus vos fichiers de contexte sont pertinents et précis, mieux l’IA pourra vous assister. Les fichiers de contexte spécifiques au projet sont fortement recommandés pour établir des conventions et un contexte.

  • Chargement hiérarchique et précédence : Le CLI implémente un système de mémoire hiérarchique en chargeant les fichiers de contexte (ex. QWEN.md) depuis plusieurs emplacements. Le contenu des fichiers situés plus bas dans cette liste (plus spécifiques) remplace ou complète généralement le contenu des fichiers situés plus haut (plus généraux). L’ordre exact de concaténation et le contexte final peuvent être inspectés depuis la boîte de dialogue /memory. L’ordre de chargement typique est :
    1. Fichier de contexte global :
      • Emplacement : ~/.qwen/<configured-context-filename> (ex. ~/.qwen/QWEN.md dans votre répertoire personnel).
      • Portée : Fournit les instructions par défaut pour tous vos projets.
    2. Fichiers de contexte de la racine du projet et des ancêtres :
      • Emplacement : Le CLI recherche le fichier de contexte configuré dans le répertoire de travail actuel, puis dans chaque répertoire parent jusqu’à la racine du projet (identifiée par un dossier .git) ou votre répertoire personnel.
      • Portée : Fournit un contexte pertinent pour l’ensemble du projet ou une partie significative de celui-ci.
  • Concaténation et indication UI : Le contenu de tous les fichiers de contexte trouvés est concaténé (avec des séparateurs indiquant leur origine et leur chemin) et fourni dans le prompt système. Le pied de page du CLI affiche le nombre de fichiers de contexte chargés, vous donnant un repère visuel rapide sur le contexte d’instruction actif.
  • Importation de contenu : Vous pouvez modulariser vos fichiers de contexte en important d’autres fichiers Markdown via la syntaxe @path/to/file.md. Pour plus de détails, consultez la documentation sur la mémoire.
  • Commandes pour la gestion de la mémoire :
    • Utilisez /memory pour ouvrir la boîte de dialogue de gestion de la mémoire.
    • Actualisez la mémoire depuis la boîte de dialogue pour réanalyser et recharger les fichiers de contexte depuis tous les emplacements configurés.
    • Consultez la documentation des commandes pour tous les détails sur la commande /memory.

En comprenant et en utilisant ces couches de configuration ainsi que la nature hiérarchique des fichiers de contexte, vous pouvez gérer efficacement la mémoire de l’IA et adapter les réponses de Qwen Code à vos besoins et projets spécifiques.

Sandbox

Qwen Code peut exécuter des opérations potentiellement non sûres (comme des commandes shell et des modifications de fichiers) dans un environnement sandbox pour protéger votre système.

La sandbox est désactivée par défaut, mais vous pouvez l’activer de plusieurs manières :

  • En utilisant le flag --sandbox ou -s.
  • En définissant la variable d’environnement QWEN_SANDBOX.
  • En définissant tools.sandbox dans les paramètres.

⚠️ --yolo n’active pas automatiquement une sandbox. Le mode YOLO approuve uniquement les appels d’outils automatiquement ; l’utilisation de la sandbox doit toujours être activée explicitement via --sandbox, QWEN_SANDBOX ou tools.sandbox. Lors d’exécutions headless / non interactives avec --yolo (ou --approval-mode=yolo) et sans sandbox, le modèle peut exécuter les outils shell, write et edit au niveau de privilège du processus actuel — Qwen Code affiche un avertissement sur stderr dans ce cas. Supprimez-le avec QWEN_CODE_SUPPRESS_YOLO_WARNING=1 une fois que vous avez évalué les compromis.

Par défaut, il utilise une image Docker préconstruite qwen-code-sandbox.

Pour des besoins de sandbox spécifiques au projet, vous pouvez créer un Dockerfile personnalisé à l’emplacement .qwen/sandbox.Dockerfile dans le répertoire racine de votre projet. Ce Dockerfile peut être basé sur l’image de sandbox de base :

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

Lorsque .qwen/sandbox.Dockerfile existe, vous pouvez utiliser la variable d’environnement BUILD_SANDBOX lors de l’exécution de Qwen Code pour construire automatiquement l’image sandbox personnalisée :

BUILD_SANDBOX=1 qwen -s

Statistiques d’utilisation

Pour nous aider à améliorer Qwen Code, nous collectons des statistiques d’utilisation anonymisées. Ces données nous aident à comprendre comment le CLI est utilisé, à identifier les problèmes courants et à prioriser les nouvelles fonctionnalités.

Ce que nous collectons :

  • Appels d’outils : Nous enregistrons les noms et catégories (natifs ou MCP) des outils appelés, leur statut final (succès, erreur ou annulé) et le temps nécessaire à leur exécution. Nous ne collectons pas les arguments passés aux outils ni les données qu’ils retournent.
  • Requêtes API : Nous enregistrons le modèle utilisé pour chaque requête, la durée de la requête et si elle a réussi. Nous ne collectons pas le contenu des prompts ni des réponses.
  • Informations de session : Nous collectons des informations sur la configuration du CLI, telles que les outils activés et le mode d’approbation.

Ce que nous ne collectons PAS :

  • Informations personnellement identifiables (PII) : Nous ne collectons aucune information personnelle, telle que votre nom, votre adresse e-mail ou vos clés API.
  • Contenu des prompts et des réponses : Nous n’enregistrons pas le contenu de vos prompts ni les réponses du modèle.
  • Contenu des fichiers : Nous n’enregistrons pas le contenu des fichiers lus ou écrits par le CLI.

Comment désactiver la collecte :

Vous pouvez désactiver la collecte des statistiques d’utilisation à tout moment en définissant la propriété usageStatisticsEnabled sur false dans la catégorie privacy de votre fichier settings.json :

{ "privacy": { "usageStatisticsEnabled": false } }

Vous pouvez également définir QWEN_USAGE_STATISTICS_ENABLED=false (ou 0) dans l’environnement. La variable d’environnement est prioritaire sur le paramètre. Redémarrez Qwen Code après avoir modifié l’une ou l’autre valeur.

Note

Lorsque les statistiques d’utilisation sont activées, les événements sont envoyés à un point de collecte RUM d’Alibaba Cloud.

Last updated on