Qwen Code Semanal: Troca automática por sobrecarga de modelo, subagentes aninhados e integração com WeCom
Esta semana o Qwen Code lançou 3 versões oficiais (v0.19.6 ~ v0.19.8), com 150+ PRs integrados, cobrindo quatro frentes:
Modelo sobrecarregado não trava mais. Antes, ao receber um 429/503/529, a conversa era interrompida e você precisava trocar de modelo manualmente. Agora a cadeia de fallback troca automaticamente para o modelo alternativo quando o orçamento de tentativas do modelo principal se esgota. Junto com /model --project, cada projeto pode ficar atrelado a um modelo diferente, sem precisar trocar na mão toda vez.
Subagentes agora podem gerar subagentes. Antes, o subagente era um “nó folha” — recebia a tarefa e tinha que resolver sozinho, sem poder delegar. Agora o limite padrão é de 5 níveis de aninhamento, e o subagente pode repassar subtarefas para a camada seguinte. Tanto o TUI quanto o Web Shell exibem a estrutura em árvore, deixando claro quem gerou quem.
O gerenciamento de sessões do Web Shell ficou completo. Arquivar, excluir, agrupar por nome, etiquetas de cor, página de gerenciamento de tarefas agendadas, tela dividida com visão geral das sessões — antes a barra lateral só permitia alternar entre sessões, agora é possível organizar, classificar, monitorar e operar em paralelo. 7 PRs transformaram as sessões de uma “lista simples” em um recurso gerenciável.
WeCom e controle de permissões completos. O canal de bot inteligente do WeCom foi integrado — bastam duas configurações (Bot ID + Secret) para funcionar, sem precisar de permissões de administrador da empresa nem webhook público. O “ask” do hook PreToolUse agora realmente exibe uma caixa de confirmação; antes, essa opção equivalia a uma recusa silenciosa. As regras de permissão também passaram a aceitar a sintaxe Tool(param:value), com controle por valor de parâmetro.
✨ Novidades
Troca automática por sobrecarga de modelo + configuração de modelo por projeto
Quando o modelo retorna 429/503/529, sua conversa trava. Esta versão introduziu uma cadeia de fallback opcional — quando o orçamento de tentativas do modelo principal se esgota, a resposta continua automaticamente com o próximo modelo da lista de fallback. Somente problemas de capacidade e throttling acionam o caminho de fallback. Erros de autenticação, cota, configuração ou do cliente falham imediatamente, pois não se trata de “modelo sobrecarregado”, mas de “sua configuração está com problema”.
O fallback avança antes de exibir conteúdo visível ao usuário. Se o modelo de fallback já tiver gerado parte do conteúdo e falhar, o restante do fallback não continua — o que você vê é uma resposta truncada. Mas o próximo turno do usuário recomeça pelo modelo principal, sem ficar preso no modelo de fallback.
Com /model --project, você pode vincular modelos diferentes a projetos diferentes. --project grava no .qwen/settings.json do projeto, --global grava no ~/.qwen/settings.json do usuário. Sem flag, o comportamento atual é mantido. As flags de escopo também funcionam com --fast, --voice e --vision.
O que você pode fazer com isso:
- Configurar uma lista de modelos de fallback para troca automática em caso de sobrecarga, sem precisar trocar manualmente
- Erros de autenticação/cota não são mascarados pelo fallback, os problemas aparecem mais cedo
/model --projectpermite que projetos diferentes usem modelos diferentes, a configuração acompanha o projeto/model --globaldefine o padrão global, novos projetos herdam

Subagentes aninhados + visualização em árvore
Subagentes agora podem gerar novos subagentes. O limite padrão é de 5 níveis de profundidade, configurável via model.maxSubagentDepth. Definir como 1 restaura o comportamento anterior — subagentes não podem gerar subagentes.
Duas camadas de proteção: na fase de preparação do schema, o subagente mais profundo não vê a ferramenta de agente (ele simplesmente não sabe que essa ferramenta existe); no guardião de execução, solicitações de derivação que excedam o limite de profundidade são rejeitadas.
Tanto o TUI quanto o Web Shell exibem a estrutura aninhada em árvore. Subagentes aparecem abaixo do agente pai, com o marcador ↳ e recuo. Quando o agente pai sai, o subagente é promovido a nó raiz, com a anotação “from <parent>”. A visualização de detalhes mostra “Level N · from <parent type>”. Os indicadores de bloqueio e a confirmação de parada agora reconhecem a cadeia — a confirmação só aparece quando o cancelamento faz o turno terminar.
Essa funcionalidade vem habilitada por padrão — após a atualização, todos os ambientes existentes ganham a capacidade de derivação aninhada. Processos fork, teammates e workflow agents continuam excluídos. Sessões do Arena agora suportam aninhamento. Agentes em segundo plano restauram a profundidade original e o limite de inicialização ao serem retomados.
O que você pode fazer com isso:
- Permitir que subagentes ao lidar com tarefas complexas derivem seus próprios subagentes para dividir o trabalho
- Ver a árvore completa de agentes no TUI e no Web Shell
- Ajustar o limite de profundidade de aninhamento via
model.maxSubagentDepth

Gerenciamento de sessões do Web Shell: arquivar, agrupar, tarefas agendadas e tela dividida
7 PRs transformaram a barra lateral de sessões do Web Shell de uma “lista simples” em um painel de gerenciamento onde é possível organizar, classificar, monitorar e operar em paralelo.
Arquivar e excluir. Cada linha de sessão ganhou atalhos e um menu ”…” com opções (renomear/arquivar/excluir). Sessões arquivadas ficam em uma seção “Archived” recolhível, podendo ser restauradas ou excluídas definitivamente. A sessão em uso não pode ser arquivada nem excluída; sessões arquivadas não podem ser abertas (409 session_archived); a exclusão é definitiva, com confirmação dupla. Por baixo, usa os endpoints do daemon archiveState e /sessions/archive, /sessions/unarchive.
Agrupamento por nome e etiquetas de cor. É possível criar, renomear e excluir grupos, arrastar sessões para dentro deles, atribuir etiquetas de cor e definir status de fixado/arquivado. Os dados de grupo atravessam desde a camada do daemon até a UI — o daemon armazena metadados de grupo em arquivos sidecar no nível do projeto, rotas REST/ACP oferecem operações CRUD, e a exposição depende do suporte do cliente sob feature gating.
Visão geral e tela dividida. Em telas grandes, a barra lateral exibe um painel com visão geral das sessões, com todas as sessões em cards em tempo real, ordenadas por prioridade: as que precisam de aprovação vêm primeiro, depois as em execução e por último as ociosas. Cada card mostra o modelo atual e a quantidade de clientes. Após seleção múltipla, é possível ver em tela dividida — dentro da aba atual ou em uma nova aba do navegador (parâmetro de URL ?split=a,b). N painéis de chat independentes lado a lado, cada um com seu próprio contexto de sessão, e o foco do teclado só atua no painel clicado.
O que você pode fazer com isso:
- Arquivar e organizar sessões acumuladas ao longo do tempo, agrupando por projeto e com etiquetas de cor
- Criar e gerenciar tarefas agendadas visualmente, sem precisar escrever expressões cron
- Cada tarefa agendada tem sua própria sessão, com histórico de execução e transcrições acessíveis a qualquer momento
- Em telas grandes, ver o status em tempo real de várias sessões em paralelo com tela dividida
Veja os PRs #6293 , #6350 , #6305 , #6348 , #6389 , #6453 e #6400
Integração com canal WeCom
Integração com o bot inteligente do WeCom via @wecom/aibot-node-sdk. A configuração requer apenas Bot ID e Secret — não precisa de Corp ID, Agent ID, Token de callback, EncodingAESKey, nem endereço de callback público.
Recebe mensagens via conexão persistente WebSocket, com suporte a texto, transcrição de voz, conteúdo misto de texto e imagem, imagens, arquivos, vídeos e conteúdo citado. As respostas do Assistant são enviadas em formato markdown do WeCom. No envio, apenas marcadores de imagem local são suportados (dentro do diretório temporário do canal); marcadores de arquivo/vídeo/voz são ignorados.
Configuração:
{
"type": "wecom",
"botId": "your-bot-id",
"secret": "your-secret",
"cwd": "/path/to/project"
}Comando para iniciar: qwen channel start my-wecom
O que você pode fazer com isso:
- Integrar o WeCom com apenas Bot ID + Secret, sem precisar de permissões de administrador da empresa
- Receber mensagens de texto, voz, imagem, arquivo, vídeo e citações
- Usar o Qwen Code para responder em markdown em grupos do WeCom
Veja o PR #6436

Caixa de confirmação nativa no hook PreToolUse
Antes, quando o hook PreToolUse retornava permissionDecision: "ask", equivalia a “deny” — a caixa de confirmação simplesmente não aparecia, e o desenvolvedor do hook achava que o usuário veria uma escolha, mas na verdade era recusado silenciosamente.
Agora “ask” exibe uma caixa de confirmação nativa no TUI. As opções são “Yes, allow once” e “No, suggest changes” — não há “always allow”, pois o hook é reavaliado a cada chamada. Após aprovação, a ferramenta é reexecutada; após recusa, é cancelada.
Em CLI não interativo e agentes em segundo plano, “ask” recai para deny — não fica pendurado esperando. Reutiliza o mecanismo existente de awaiting_approval, sem criar um caminho separado. Os comportamentos de “denied” e “stop” permanecem iguais, e o hook PermissionRequest não é afetado.
O que você pode fazer com isso:
- Usar “ask” no hook PreToolUse para deixar o usuário decidir se a ferramenta deve ser executada
- Sem risco de travar em cenários não interativos
- Cada chamada do hook é reavaliada, sem liberação permanente
Veja o PR #5629

Pré-visualização e revisão de Skills gerados automaticamente
Quando o agente gerava uma skill automaticamente, antes só era possível ver o nome do arquivo e o conteúdo só aparecia após a confirmação. Agora a caixa de revisão mostra uma pré-visualização inline do conteúdo completo — incluindo frontmatter.
O conteúdo gerado pelo modelo é sanitizado: sequências de controle ANSI/VT viram escapes inofensivos, CRLF vira quebra de linha normal. O limite de leitura é 64 KiB, o de exibição é 12 linhas (com cálculo de quebra automática), e o excedente é marcado como “lines hidden” / “truncated”.
Pressionar o abre o arquivo da skill no editor configurado, sem pular a revisão da skill atual. Após salvar o arquivo, a pré-visualização é atualizada automaticamente — junto com editores gráficos (comportamento padrão no macOS), é possível editar e depois conferir.
A opção “Turn off auto-generated skills” aparece no fim da lista, entra em vigor imediatamente ao ser selecionada (sem precisar reiniciar) e persiste no nível do workspace. O lote atual é colocado em espera (não é excluído), e ao reativar pelo /memory o lote volta.
O que você pode fazer com isso:
- Ver o conteúdo completo da skill antes de confirmar, sem precisar aceitar e depois ir procurar o arquivo
- Pressionar
opara editar o conteúdo da skill diretamente no editor, com a pré-visualização atualizando ao salvar - Desativar a geração automática de skills com um clique, o lote atual não é excluído e pode ser recuperado pelo /memory a qualquer momento
Veja o PR #6393
| Antes (global qwen 0.19.6) — apenas nome + descrição | Depois — revisão de skill individual com pré-visualização inline e opção de desativar |
|---|---|
| Depois — último item do lote, opções em massa ocultas | Depois — “Turn off auto-generated skills” selecionada |
|---|---|
📊 Mais funcionalidades
| Funcionalidade | PR | Impacto para você |
|---|---|---|
| Painel de status do Daemon: ver status de execução, métricas temporais e uso de Token pela barra lateral | #6272 , #6307 , #6388 | Sem precisar digitar comandos, saúde e tendências em uma tela |
| maxSubAgents: limitar a quantidade de subagentes em paralelo | #6354 | Controla o consumo de recursos, evita subagentes descontrolados |
| Permissão Tool(param:value): controle de ferramentas por valor de parâmetro | #6106 | Proibir com precisão a derivação de subagentes para model/skill específicos |
Chamadas empilhadas de slash-skill: /skill1 /skill2 executados em sequência | #6361 | Múltiplas skills em sequência sem precisar fazer passo a passo |
| Configuração tools.visible: expor ferramentas diferidas seletivamente | #6372 | Ao iniciar, você vê apenas as ferramentas que precisa |
| Expiração de tarefas agendadas configurável: tempo de expiração para tarefas cron/loop | #6173 | Tarefas de longo prazo não expiram mais inesperadamente |
| Injeção de estado nos Hooks: hooks Stop/SubagentStop recebem informações de tarefas em segundo plano | #6531 | Hooks passam a reconhecer tarefas agendadas e estado de cron |
| Distintivo de modo de permissão: exibe a permissão atual no rodapé do modo DEFAULT | #6498 | Confirme o modo de segurança atual de relance |
| Blocos de dados echarts compactos: Web Shell suporta gráficos | #6232 | Visualização de dados diretamente no terminal |
| MCP mentions + menções @ iconificadas: Web Shell | #6279 | Menções @ mais intuitivas |
| Controles de tabela Markdown: reordenar colunas/zoom/congelar | #6444 | Experiência de navegação em tabelas grandes melhorada |
| Recarga a quente do LSP: servidores de linguagem suportam recarga a quente | #5953 | Mude configurações sem reiniciar o LSP |
| Intenção de memória de canal: memória de canal em linguagem natural | #6376 | Memória de contexto de canal mais natural |
| Controle de qualidade do /review: precisão de issues e atribuição de causa raiz | #6395 | Resultados de review mais confiáveis |
| Otimização de desempenho do glob: poda de diretórios ignorados durante a varredura | #6123 | Busca de arquivos mais rápida em projetos grandes |
| Descoberta de comandos slash: menu elevado, contagem por grupo, busca fuzzy | #6267 | Encontre comandos mais rápido |
| Auto-memory por worktree: memória independente para cada worktree | #6462 | Memórias de branches diferentes não se misturam |
| Agent working_dir: subagente fixado a um worktree | #6456 | Subagente trabalha no diretório especificado |
| Recarga a quente de extensões: plugins são recarregados automaticamente ao mudar | #6347 | Altere plugins sem reiniciar |
| dmPolicy: desabilitar mensagens privadas | #6521 | Bot de canal responde apenas em chats de grupo |
| Isolamento de ambiente do serve: isolamento de ambiente + controle total no modo serve | #6416 | Múltiplos projetos em serve sem interferência |
| Roteamento de sessões multi-workspace: serve suporta múltiplos workspaces | #6511 | Uma instância de serve atende vários projetos |
| Timeout por chamada de ferramenta: timeout individual por chamada | #6136 | Uma ferramenta travada não derruba a sessão inteira |
| Skill integrada dataviz: habilidade de visualização de dados | #6198 | Geração de gráficos pronta para uso |
🔧 Correções importantes
| Correção | PR | Impacto para você |
|---|---|---|
| Correção de auth 401: 401 de autenticação não trava mais | #6284 | Token expirado não bloqueia mais a sessão |
| Detecção de OpenAI não-SSE: identifica corretamente respostas sem streaming | #6466 | Endpoints compatíveis com OpenAI não são mais interpretados errado |
| Bloqueio de rolagem em streaming: não rouba mais a posição de rolagem durante saída em streaming | #6170 , #6421 | Role livremente para ver o histórico durante saídas longas |
| Correção de pager no Windows: pager não trava mais no Windows | #6390 | Experiência estável para usuários de Windows |
| Correção de segurança do qqbot: reforço de segurança do canal | #6200 | Bot do canal QQ mais seguro |
| Janela de contexto padrão 200k: valor padrão corrigido | #6387 | Configuração da janela de contexto mais precisa |
| Correção de race condition em ACP settings: leitura e escrita concorrentes | #6292 | Configurações concorrentes não geram mais erros |
| Desbloqueio do /clear: /clear não trava mais | #6499 | Comando de limpar tela voltou ao normal |
👥 Contribuidores
| Contribuidor | Contribuições | PRs de referência |
|---|---|---|
| @wenshao | Painel de status do Daemon, métricas temporais, análise de uso de Token, arquivar/excluir sessões, agrupamento de sessões + etiquetas de cor, página de gerenciamento de tarefas agendadas, sessões independentes para tarefas agendadas, unificação de sessões de tarefas, visão geral + tela dividida, descoberta de comandos slash, Agent working_dir, retry automático de porta do serve | #6272 , #6307 , #6388 , #6293 , #6350 , #6348 , #6389 , #6453 , #6400 , #6267 , #6456 , #6513 |
| @ytahdn | Recuperação de sessão, configuração de desabilitar skill, painel de @mention personalizado, callback de sessão, rolagem virtual, detalhes de ferramentas, tratamento de erro de interrupção de stream, atualização de to-do, resumo de chamadas de ferramenta, controle externo de tela dividida | #6220 , #6223 , #6242 , #6333 , #6342 , #6352 , #6357 , #6362 , #6399 , #6422 , #6424 , #6425 , #6450 , #6523 |
| @yiliang114 | Cadeia de fallback de modelos, maxSubAgents, correção de auth 401 | #6273 , #6354 , #6284 |
| @tanzhenxin | Derivação aninhada de subagentes, visualização em árvore no Web Shell, pré-visualização e revisão de Skills gerados automaticamente, correção do valor padrão da janela de contexto | #6189 , #6239 , #6393 , #6387 |
| @doudouOUC | Backend de organização de sessões do Daemon, isolamento de ambiente do serve, roteamento de sessões multi-workspace | #6305 , #6416 , #6511 |
| @qqqys | Integração com canal WeCom, intenção de memória de canal, ferramenta de loop de canal, skill integrada dataviz | #6436 , #6376 , #6287 , #6198 |
| @DennisYu07 | Permissão Tool(param:value), chamadas empilhadas de slash-skill, distintivo de modo de permissão, injeção de estado nos Hooks | #6106 , #6361 , #6498 , #6531 |
| @LaZzyMan | Caixa de confirmação nativa no hook PreToolUse | #5629 |
| @DragonnZhang | Controle de qualidade do /review | #6395 |
| @Alex-ai-future | Configuração de modelo por projeto /model —project | #6060 |
| @VectorPeak | Correção de detecção de OpenAI não-SSE | #6466 |
| @han-dreamer | Correção de pager no Windows | #6390 |
| @MikeWang0316tw | Correção de bloqueio de rolagem em streaming | #6170 , #6421 |
| @water-in-stone | Recarga a quente do LSP | #5953 |
| @ZijianZhang989 | Recarga a quente de extensões | #6347 |
| @BZ-D | MCP mentions + menções @ iconificadas | #6279 |
| @jifeng | Controles de tabela Markdown (reordenar colunas/zoom/congelar) | #6444 |
| @zhangxy-zju | Blocos de dados echarts compactos | #6232 |
| @Eric-GoodBoy-Tech | Correção de segurança do qqbot | #6200 |
| @TianYuan1024 | Tempo de expiração de tarefas agendadas configurável | #6173 |
| 🆕 @callmeYe | 🎉 Primeira contribuição: esquecimento/sonho de memória de sessão, timeline UI de tarefas agendadas, memória de gerenciamento do usuário | #6227 , #6386 , #6432 |
| 🆕 @kagura-agent | 🎉 Primeira contribuição: retenção de prefixo tools no prompt-cache, limite de concorrência em primeiro plano, cache de varredura de skills | #6225 , #6300 , #6155 |
| 🆕 @Aleks-0 | 🎉 Primeira contribuição: configuração tools.visible, UTF-8 cmd.exe, KV-cache | #6372 , #6216 , #6420 |
| 🆕 @Nas01010101 | 🎉 Primeira contribuição: timeout de requisição, arquivos @-attached | #6288 , #6295 , #6324 |
| 🆕 @zjunothing | 🎉 Primeira contribuição: auto-memory por worktree, desbloqueio do /clear, correção de tremor na status line | #6462 , #6499 , #6533 |
| 🆕 @minmax | 🎉 Primeira contribuição: otimização de desempenho do glob, timeout por chamada de ferramenta | #6123 , #6136 |
| 🆕 @pomelo-nwu | 🎉 Primeira contribuição: reforço de gating de PR, roteamento de sugestões de review | #5723 , #5786 |
| 🆕 @chiga0 | 🎉 Primeira contribuição: API de artifacts de sessão, documentação de side-channel do daemon | #5895 , #4511 |
| 🆕 @gauravyad86 | 🎉 Primeira contribuição: caminho rápido de bootstrap, isolamento de transform_data | #6188 , #6285 |
| 🆕 @mvanhorn | 🎉 Primeira contribuição: caminho de configuração do seatbelt do macOS, valor padrão de timeout ocioso em streaming | #6172 , #6107 |
| 🆕 @AmariahAK | 🎉 Primeira contribuição: seleção de modelo visual | #6209 , #6236 |
| 🆕 @barry166 | 🎉 Primeira contribuição: autenticação VSCode, audio prebuild | #6274 , #6275 |
| 🆕 @chenghuichen | 🎉 Primeira contribuição: dmPolicy para desabilitar mensagens privadas | #6521 |
| 🆕 @beantownbytes | 🎉 Primeira contribuição: desabilitar qwen thinking em ambientes não-DashScope | #6271 |
| 🆕 @heyparth1 | 🎉 Primeira contribuição: correção de cálculo da janela de contexto | #6266 |
| 🆕 @tomsen-ai | 🎉 Primeira contribuição: chamada de ferramenta sem parâmetros | #6250 |
Como atualizar: execute npm i @qwen-code/qwen-code@latest -g para atualizar para a versão mais recente.
Se tiver dúvidas ou sugestões, fique à vontade para abrir uma issue no GitHub Issues !