Skip to Content
BlogQwen Code Hebdo : Basculement automatique en cas de surcharge modèle, dérivation imbriquée de sous-agents, intégration WeCom
Retour au blog

Qwen Code Hebdo : Basculement automatique en cas de surcharge modèle, dérivation imbriquée de sous-agents, intégration WeCom

Qwen Team
2026-07-09

Cette semaine, Qwen Code sort 3 versions stables (v0.19.6 à v0.19.8) avec plus de 150 PR fusionnés, couvrant quatre axes :

La surcharge modèle ne bloque plus. Avant, un 429/503/529 interrompait la conversation et vous deviez changer de modèle manuellement. Maintenant, la chaîne de fallback bascule automatiquement vers un modèle de secours une fois le budget de tentatives du modèle principal épuisé. Avec /model --project, chaque projet peut être lié à un modèle différent, sans manipulation à chaque fois.

Les sous-agents peuvent engendrer des sous-agents. Jusqu’ici, un sous-agent était un « nœud feuille » — il recevait une tâche et devait la terminer seul, sans pouvoir déléguer. Désormais, avec une profondeur d’imbrication par défaut de 5 niveaux, un sous-agent peut répartir des sous-tâches au niveau inférieur. Le TUI et le Web Shell affichent une vue arborescente où la filiation est immédiatement visible.

La gestion des sessions Web Shell devient systématique. Archivage, suppression, groupes nommés, étiquettes de couleur, page de gestion des tâches planifiées, vue d’ensemble en écran partagé — la barre latérale ne se contentait plus de basculer entre les sessions, elle permet maintenant d’organiser, classer, surveiller et opérer en parallèle. Sept PR transforment les sessions d’une « liste à plat » en ressources gérables.

WeCom et contrôle d’accès complétés. Intégration du canal bot intelligent WeCom — deux paramètres suffisent (Bot ID + Secret), pas besoin de droits administrateur d’entreprise ni de callback. Le hook PreToolUse avec « ask » affiche désormais une vraie boîte de confirmation ; auparavant, cette option équivalait à un refus silencieux. Les règles de permission supportent la syntaxe Tool(param:value) pour un contrôle granulaire par valeur de paramètre.

✨ Nouvelles fonctionnalités

Basculement automatique en cas de surcharge modèle + configuration modèle par projet

Quand un modèle renvoie un 429/503/529, votre conversation se bloque. Cette version introduit une chaîne de fallback opt-in — une fois le budget de tentatives du modèle principal épuisé, le système bascule automatiquement vers le modèle suivant dans la liste de fallback. Seuls les problèmes de capacité et de limitation de débit empruntent le chemin de fallback. Les erreurs d’authentification, de quota, de configuration ou côté client échouent directement, car il ne s’agit pas de « surcharge modèle » mais de « problème de configuration ».

Le fallback progresse avant que du contenu visible ne soit affiché à l’utilisateur. Si un modèle de fallback a déjà produit du contenu puis plante, les fallbacks restants ne tentent pas de continuer — vous voyez une réponse tronquée. Mais le prochain tour utilisateur repart du modèle principal, sans rester coincé sur le modèle de fallback.

Avec /model --project, vous pouvez lier différents modèles à différents projets. --project écrit dans le .qwen/settings.json du projet, --global écrit dans le ~/.qwen/settings.json utilisateur. Sans indicateur, le comportement actuel est conservé. Les indicateurs de portée s’appliquent aussi à --fast, --voice et --vision.

Ce que cela vous permet de faire :

  • Configurer une liste de modèles de fallback avec basculement automatique en cas de surcharge, sans changement manuel
  • Les erreurs d’authentification et de quota ne sont pas masquées par le fallback, les problèmes sont détectés plus tôt
  • /model --project permet à chaque projet d’utiliser un modèle différent, la configuration suit le projet
  • /model --global définit un défaut global, hérité par les nouveaux projets

Voir les PR #6273  et #6060 

Dérivation imbriquée de sous-agents + vue arborescente

Les sous-agents peuvent désormais engendrer d’autres sous-agents. La profondeur maximale par défaut est de 5 niveaux, configurable via model.maxSubagentDepth. La valeur 1 rétablit l’ancien comportement — les sous-agents ne peuvent pas dériver de sous-agents.

Deux mécanismes de protection : lors de la préparation du schéma, le sous-agent au niveau le plus profond ne voit pas l’outil agent (il ignore même son existence) ; lors de l’exécution, les demandes de dérivation dépassant la limite de profondeur sont rejetées.

Le TUI et le Web Shell affichent une structure arborescente imbriquée. Les sous-agents apparaissent sous leur parent, avec le marqueur ↳ et une indentation. Quand le parent se retire, le sous-agent est promu en racine avec la mention « from <parent> ». La vue de détail affiche « Level N · from <parent type> ». Les étiquettes de blocage et la confirmation d’arrêt deviennent aussi conscientes de la chaîne — la confirmation n’apparaît que si l’annulation entraîne la fin du tour.

Cette capacité est activée par défaut — après la mise à jour, tous les environnements existants bénéficient de la dérivation imbriquée. Les fork de sous-processus, les teammates et les agents de workflow restent exclus. Les sessions Arena peuvent désormais s’imbriquer. Les agents en arrière-plan restaurés retrouvent leur profondeur d’origine et le plafond au démarrage.

Ce que cela vous permet de faire :

  • Laisser un sous-agent gérer des tâches complexes en dérivant lui-même des sous-agents pour les sous-tâches
  • Voir la structure arborescente complète des agents dans le TUI et le Web Shell
  • Ajuster la profondeur d’imbrication maximale via model.maxSubagentDepth

Voir les PR #6189  et #6239 

Gestion des sessions Web Shell : archivage, regroupement, tâches planifiées, écran partagé

Sept PR transforment la barre latérale des sessions du Web Shell d’une « liste à plat » en un panneau de gestion permettant d’organiser, classer, surveiller et opérer en parallèle.

Archivage et suppression. Chaque ligne de session dispose désormais d’actions rapides et d’un menu de débordement « … » (renommer / archiver / supprimer). Les sessions archivées sont regroupées dans une section « Archived » repliable, et peuvent être restaurées ou définitivement supprimées. La session en cours d’utilisation ne peut pas être archivée ni supprimée ; une session archivée ne peut pas être ouverte (409 session_archived) ; la suppression est définitive avec confirmation secondaire. En arrière-plan, cela passe par l’état archiveState du daemon et les endpoints /sessions/archive et /sessions/unarchive.

Groupes nommés et étiquettes de couleur. Vous pouvez créer, renommer et supprimer des groupes, y glisser des sessions, et leur attribuer des étiquettes de couleur ainsi qu’un état épinglé ou archivé. Les données de groupe traversent toutes les couches depuis le daemon — un fichier sidecar au niveau du projet stocke les métadonnées de groupe, les routes REST/ACP fournissent les opérations CRUD, et l’exposition est contrôlée par capacité selon le support client.

Vue d’ensemble et écran partagé. Sur grand écran, un panneau de vue d’ensemble des sessions apparaît dans la barre latérale. Toutes les sessions s’affichent sous forme de cartes en temps réel, triées par priorité : les approbations en attente d’abord, puis les sessions en cours, enfin les sessions inactives. Chaque carte indique le modèle actuel et le nombre de clients. Après une sélection multiple, vous pouvez afficher en écran partagé — dans l’onglet actuel ou dans un nouvel onglet du navigateur (paramètre d’URL ?split=a,b). N panneaux de discussion indépendants côte à côte, chacun avec son propre contexte de session, le focus clavier ne s’appliquant qu’au panneau cliqué.

Ce que cela vous permet de faire :

  • Archiver et organiser les sessions accumulées, les regrouper par projet avec des étiquettes de couleur
  • Créer et gérer des tâches planifiées visuellement, sans écrire d’expressions cron à la main
  • Chaque tâche planifiée dispose de sa propre session, avec historique et transcripts consultables à tout moment
  • En grand écran, afficher en parallèle l’état en temps réel de plusieurs sessions

Voir les PR #6293 , #6350 , #6305 , #6348 , #6389 , #6453  et #6400 

Intégration du canal WeCom

Intégration du bot intelligent WeCom via @wecom/aibot-node-sdk. La configuration ne nécessite que le Bot ID et le Secret — pas de Corp ID, Agent ID, Token de callback, EncodingAESKey, ni d’adresse de callback publique.

Réception des messages via connexion WebSocket persistante, avec prise en charge du texte, de la transcription vocale, du contenu mixte texte-image, des images, fichiers, vidéos et citations. Les réponses de l’Assistant sont envoyées au format markdown WeCom. En sortie, seules les images locales sont prises en charge (dans le répertoire temporaire du canal) ; les marqueurs de fichier, vidéo et audio sont ignorés.

Configuration :

{ "type": "wecom", "botId": "your-bot-id", "secret": "your-secret", "cwd": "/path/to/project" }

Commande de démarrage : qwen channel start my-wecom

Ce que cela vous permet de faire :

  • Intégrer WeCom avec seulement Bot ID + Secret, sans droits administrateur d’entreprise
  • Recevoir du texte, de la voix, des images, des fichiers, des vidéos et des messages cités
  • Faire répondre Qwen Code en messages markdown dans les groupes WeCom

Voir le PR #6436 

Boîte de confirmation native pour le hook PreToolUse

Auparavant, le hook PreToolUse retournant permissionDecision: "ask" équivalait à « deny » — la boîte de confirmation n’apparaissait jamais. Les développeurs de hooks pensaient que l’utilisateur verrait un choix, mais la demande était silencieusement refusée.

Maintenant, « ask » affiche une boîte de confirmation native dans le TUI. Les options sont « Yes, allow once » et « No, suggest changes » — pas d’« always allow », car le hook réévalue à chaque appel. Une fois approuvé, l’outil s’exécute à nouveau ; en cas de refus, il est annulé.

Dans les scénarios CLI non interactifs et agents en arrière-plan, « ask » retombe sur deny — aucune attente n’est engagée. Le mécanisme existant awaiting_approval est réutilisé, sans nouveau chemin. Les comportements « denied » et « stop » restent inchangés, le hook PermissionRequest n’est pas affecté.

Ce que cela vous permet de faire :

  • Utiliser « ask » dans le hook PreToolUse pour laisser l’utilisateur décider d’exécuter ou non un outil
  • Pas de risque de blocage dans les scénarios non interactifs
  • Chaque appel de hook est réévalué, aucun passage permanent n’est accordé

Voir le PR #5629 

Aperçu et examen des Skills auto-générés

Quand un agent génère automatiquement un skill, on ne voyait auparavant que le nom du fichier ; il fallait confirmer avant de savoir ce qu’il contenait. Désormais, la boîte de dialogue d’examen affiche un aperçu inline du contenu complet — frontmatter inclus.

Le contenu généré par le modèle est assaini : les séquences de contrôle ANSI/VT deviennent des échappements inoffensifs, les CRLF deviennent des sauts de ligne simples. La limite de lecture est de 64 Kio, celle d’affichage de 12 lignes (avec retour à la ligne automatique), le surplus est signalé par « lines hidden » ou « truncated ».

Appuyer sur o ouvre le fichier skill dans l’éditeur configuré, sans passer outre l’examen en cours. Après sauvegarde du fichier, l’aperçu se rafraîchit automatiquement — avec un éditeur GUI (comportement par défaut sur macOS), vous pouvez modifier puis revoir.

L’option « Turn off auto-generated skills » se trouve en fin de liste ; sa sélection prend effet immédiatement (pas de redémarrage), persistée au niveau du workspace. Le lot courant est mis en suspens (non supprimé) et revient lors de la réouverture via /memory.

Ce que cela vous permet de faire :

  • Voir le contenu complet d’un skill avant de confirmer, sans avoir à accepter puis chercher le fichier
  • Appuyer sur o pour modifier le skill directement dans l’éditeur, l’aperçu se rafraîchit après sauvegarde
  • Désactiver les skills auto-générés en un clic, le lot courant n’est pas supprimé et peut être restauré via /memory

Voir le PR #6393 

Avant (qwen global 0.19.6) — nom + description uniquementAprès — examen d’un skill avec aperçu inline et option de désactivation
Avant — qwen global 0.19.6 : nom et description uniquement, pas d'aperçuAprès — examen d'un skill avec aperçu inline SKILL.md et option de désactivation
Après — dernier élément du lot, options en masse masquéesAprès — « Turn off auto-generated skills » sélectionné
Après — dernier élément du lot : options en masse masquéesAprès — désactivation sélectionnée : lot fermé avec indice de réactivation

📊 Autres nouvelles fonctionnalités

FonctionnalitéPRImpact pour vous
Tableau de bord d’état du Daemon : état de fonctionnement, métriques temporelles, utilisation des Token dans la barre latérale#6272 , #6307 , #6388 Santé et tendances visibles en un coup d’œil, sans commande
maxSubAgents : limite du nombre de sous-agents parallèles#6354 Contrôle de la consommation de ressources, prévention des sous-agents incontrôlés
Permission Tool(param:value) : contrôle des outils par valeur de paramètre#6106 Interdire précisément la dérivation de sous-agents pour un modèle ou un skill spécifique
Appels slash-skill empilés : /skill1 /skill2 en exécution continue#6361 Chaînage de compétences sans étapes intermédiaires
Configuration tools.visible : exposition sélective des outils différés#6372 Ne voir que les outils dont vous avez besoin au démarrage
Expiration configurable des tâches planifiées : délai d’expiration des tâches cron/loop#6173 Les tâches planifiées de longue durée ne s’interrompent plus de manière inattendue
Injection d’état dans les hooks : les hooks Stop/SubagentStop reçoivent les informations sur les tâches en arrière-plan#6531 Les hooks peuvent percevoir les tâches planifiées et l’état cron
Badge de mode de permission : le mode DEFAULT affiche la permission actuelle en bas#6498 Vérifier d’un coup d’œil le mode de sécurité actif
Bloc de données echarts compact : prise en charge des graphiques dans le Web Shell#6232 Visualisation des données directement dans le terminal
MCP mentions + références @ iconifiées : Web Shell#6279 Références @ plus intuitives
Contrôles de tableaux Markdown : réorganisation/redimensionnement/figeage des colonnes#6444 Meilleure expérience de navigation des grands tableaux
Rechargement à chaud LSP : les serveurs de langage supportent le rechargement à chaud#5953 Pas besoin de redémarrer le LSP après un changement de configuration
Intention de mémoire de canal : mémoire de canal en langage naturel#6376 Mémoire de canal plus naturelle
Contrôle qualité /review : précision des issues et attribution des causes racines#6395 Résultats de review plus fiables
Optimisation des performances glob : élagage des répertoires ignorés lors du parcours#6123 Recherche de fichiers plus rapide dans les grands projets
Découverte des commandes slash : menu amélioré, regroupement avec comptage, recherche floue#6267 Trouver les commandes plus rapidement
Auto-mémoire par worktree : mémoire indépendante pour chaque worktree#6462 Pas de confusion de mémoire entre les branches
Agent working_dir : sous-agent fixé à un worktree#6456 Le sous-agent travaille dans le répertoire spécifié
Rechargement à chaud des extensions : rechargement automatique des plugins modifiés#6347 Pas besoin de redémarrer après modification d’un plugin
dmPolicy : désactivation des messages privés#6521 Le bot de canal ne répond qu’aux discussions de groupe
Isolation d’environnement serve : isolation environnementale + contrôle du total en mode serve#6416 Plusieurs projets en serve sans interférence
Routage de sessions multi-workspace : serve prend en charge plusieurs espaces de travail#6511 Une seule instance serve pour plusieurs projets
Timeout par appel d’outil : délai d’expiration pour un appel d’outil unique#6136 Un outil bloqué ne fait plus planter toute la session
Skill intégré dataviz : compétence de visualisation de données#6198 Génération de graphiques prête à l’emploi

🔧 Corrections importantes

CorrectionPRImpact pour vous
Correctif auth 401 : les 401 d’authentification invalide ne bloquent plus#6284 L’expiration du token ne bloque plus la session
Détection non-SSE OpenAI : identification correcte des réponses non-streaming#6466 Les endpoints compatibles OpenAI ne sont plus mal interprétés
Verrouillage du défilement en streaming : plus de vol de position de défilement pendant le streaming#6170 , #6421 Défilement libre pour consulter l’historique pendant les longues sorties
Correction du pager Windows : le pager ne plante plus sous Windows#6390 Expérience utilisateur stable sur Windows
Correctif de sécurité qqbot : renforcement de la sécurité du canal#6200 Bot de canal QQ plus sécurisé
Fenêtre de contexte à 200k par défaut : correction de la valeur par défaut#6387 Configuration de la fenêtre de contexte plus précise
Correction de la concurrence des paramètres ACP : lecture/écriture concurrente des paramètres#6292 Plus d’erreurs lors de paramètres simultanés
Déblocage de /clear : /clear ne se bloque plus#6499 La commande d’effacement d’écran fonctionne à nouveau normalement

👥 Contributeurs

ContributeurContributionsPR de référence
@wenshao Tableau de bord d’état du Daemon, métriques temporelles, analyse d’utilisation des Token, archivage/suppression de sessions, groupes de sessions + étiquettes de couleur, page de gestion des tâches planifiées, sessions indépendantes pour tâches planifiées, sessions de tâches unifiées, vue d’ensemble des sessions + écran partagé, découverte des commandes slash, Agent working_dir, retry automatique du port serve#6272 , #6307 , #6388 , #6293 , #6350 , #6348 , #6389 , #6453 , #6400 , #6267 , #6456 , #6513 
@ytahdn Restauration de sessions, paramètre de désactivation des skills, panneau @mention personnalisé, callbacks de session, défilement virtuel, détails des outils, gestion d’erreurs de flux interrompu, rafraîchissement des todos, résumé des appels d’outils, contrôle d’écran partagé externe#6220 , #6223 , #6242 , #6333 , #6342 , #6352 , #6357 , #6362 , #6399 , #6422 , #6424 , #6425 , #6450 , #6523 
@yiliang114 Chaîne de fallback modèle, maxSubAgents, correctif auth 401#6273 , #6354 , #6284 
@tanzhenxin Dérivation imbriquée de sous-agents, vue arborescente Web Shell, aperçu et examen des Skills auto-générés, correction de la valeur par défaut de la fenêtre de contexte#6189 , #6239 , #6393 , #6387 
@doudouOUC Backend d’organisation des sessions du Daemon, isolation d’environnement serve, routage de sessions multi-workspace#6305 , #6416 , #6511 
@qqqys Intégration du canal WeCom, intention de mémoire de canal, outil de boucle de canal, skill intégré dataviz#6436 , #6376 , #6287 , #6198 
@DennisYu07 Permission Tool(param:value), appels slash-skill empilés, badge de mode de permission, injection d’état dans les hooks#6106 , #6361 , #6498 , #6531 
@LaZzyMan Boîte de confirmation native pour le hook PreToolUse#5629 
@DragonnZhang Contrôle qualité /review#6395 
@Alex-ai-future Configuration modèle par projet /model —project#6060 
@VectorPeak Correction de la détection non-SSE OpenAI#6466 
@han-dreamer Correction du pager Windows#6390 
@MikeWang0316tw Correction du verrouillage de défilement en streaming#6170 , #6421 
@water-in-stone Rechargement à chaud LSP#5953 
@ZijianZhang989 Rechargement à chaud des extensions#6347 
@BZ-D MCP mentions + références @ iconifiées#6279 
@jifeng Contrôles de tableaux Markdown (réorganisation/redimensionnement/figeage des colonnes)#6444 
@zhangxy-zju Bloc de données echarts compact#6232 
@Eric-GoodBoy-Tech Correctif de sécurité qqbot#6200 
@TianYuan1024 Délai d’expiration configurable des tâches planifiées#6173 
🆕 @callmeYe 🎉 Première contribution : oubli/rêverie de mémoire de session, timeline UI des tâches planifiées, mémoire de gestion utilisateur#6227 , #6386 , #6432 
🆕 @kagura-agent 🎉 Première contribution : conservation du préfixe tools dans le prompt-cache, limite de concurrence au premier plan, cache de scan des skills#6225 , #6300 , #6155 
🆕 @Aleks-0 🎉 Première contribution : configuration tools.visible, UTF-8 cmd.exe, KV-cache#6372 , #6216 , #6420 
🆕 @Nas01010101 🎉 Première contribution : délai d’expiration des requêtes, fichiers @-attached#6288 , #6295 , #6324 
🆕 @zjunothing 🎉 Première contribution : auto-mémoire par worktree, déblocage de /clear, correction du tremblement de la barre d’état#6462 , #6499 , #6533 
🆕 @minmax 🎉 Première contribution : optimisation des performances glob, timeout par appel d’outil#6123 , #6136 
🆕 @pomelo-nwu 🎉 Première contribution : renforcement des portes de PR, routage des suggestions de review#5723 , #5786 
🆕 @chiga0 🎉 Première contribution : API d’artifacts de session, documentation side-channel du daemon#5895 , #4511 
🆕 @gauravyad86 🎉 Première contribution : chemin rapide bootstrap, isolation de transform_data#6188 , #6285 
🆕 @mvanhorn 🎉 Première contribution : chemin de configuration seatbelt macOS, valeur par défaut du timeout idle en streaming#6172 , #6107 
🆕 @AmariahAK 🎉 Première contribution : sélection du modèle visuel#6209 , #6236 
🆕 @barry166 🎉 Première contribution : authentification VSCode, audio prebuild#6274 , #6275 
🆕 @chenghuichen 🎉 Première contribution : dmPolicy pour désactiver les messages privés#6521 
🆕 @beantownbytes 🎉 Première contribution : désactivation de qwen thinking pour les environnements non-DashScope#6271 
🆕 @heyparth1 🎉 Première contribution : correction du calcul de la fenêtre de contexte#6266 
🆕 @tomsen-ai 🎉 Première contribution : appels d’outils sans paramètres#6250 

Mise à jour : exécutez npm i @qwen-code/qwen-code@latest -g pour passer à la dernière version.

Pour toute question ou suggestion, n’hésitez pas à ouvrir un ticket sur GitHub Issues  !

Last updated on