Qwen Code: автоматическое переключение при перегрузке модели, вложенные субагенты, интеграция с WeCom
На этой неделе Qwen Code выпустил 3 стабильные версии v0.19.6–v0.19.8, принято более 150 PR. Работа велась по четырём направлениям:
Перегрузка модели больше не блокирует работу. Раньше при ошибках 429/503/529 диалог прерывался, и приходилось вручную переключать модель и отправлять сообщение заново. Теперь fallback-цепочка автоматически переключается на резервную модель, когда лимит повторов основной модели исчерпан. А /model --project позволяет привязать разные модели к разным проектам, чтобы не переключать их каждый раз.
Субагенты могут порождать субагентов. Раньше субагент был «листовым узлом» — получив задачу, он выполнял её сам и не мог делегировать дальше. Теперь по умолчанию поддерживается вложенность до 5 уровней, и субагент может разбивать подзадачи между следующим уровнем. И TUI, и Web Shell отображают древовидную структуру, где сразу видно, кто кого породил.
Управление сессиями Web Shell стало полноценным. Архивация, удаление, именованные группы, цветовые метки, планировщик задач, обзор сессий на разделённом экране — раньше боковая панель позволяла только переключаться между сессиями, а теперь можно организовать, классифицировать, мониторить и работать параллельно. 7 PR превратили сессии из «плоского списка» в управляемый ресурс.
WeCom и контроль доступа доведены до ума. Интеграция с ботом WeCom через интеллектуальный SDK — достаточно указать Bot ID и Secret, права администратора предприятия не нужны. PreToolUse hook с параметром “ask” теперь действительно показывает диалог подтверждения, а раньше молча отклонял запрос. Правила доступа поддерживают синтаксис Tool(param:value) для контроля на уровне значений параметров.
✨ Новые возможности
Автоматическое переключение при перегрузке модели + настройка моделей на уровне проекта
При ошибках 429/503/529 диалог зависал. В этой версии добавлена opt-in fallback-цепочка: когда лимит повторов основной модели исчерпан, система автоматически переключается на следующую модель из списка fallback. Fallback срабатывает только при проблемах с пропускной способностью и ограничениями. Ошибки аутентификации, квот, конфигурации и клиентские ошибки приводят к немедленному сбою, потому что это не «перегрузка модели», а «проблема в вашей конфигурации».
Fallback продвигается до того, как пользователь увидит какой-либо вывод. Если fallback-модель уже успела вывести часть текста и затем упала, оставшиеся fallback-модели не будут вызваны — вы получите усечённый ответ. Но следующее сообщение пользователя начнётся снова с основной модели, система не застрянет на fallback-модели.
С помощью /model --project можно привязать разные модели к разным проектам. --project записывает настройку в .qwen/settings.json проекта, --global — в пользовательский ~/.qwen/settings.json. Без флага поведение остаётся прежним. Флаги области действия также работают для --fast, --voice, --vision.
Что это даёт:
- Настройте список fallback-моделей — при перегрузке переключение происходит автоматически, без ручной смены модели
- Ошибки аутентификации и квот не маскируются fallback, проблемы проявляются раньше
/model --projectпозволяет разным проектам использовать разные модели, конфигурация привязана к проекту/model --globalзадаёт глобальные настройки по умолчанию, новые проекты наследуют их

Вложенные субагенты + древовидное представление
Субагенты теперь могут порождать собственных субагентов. Лимит глубины по умолчанию — 5 уровней, настраивается через model.maxSubagentDepth. Установите 1, чтобы вернуться к старому поведению — субагенты не смогут порождать потомков.
Два защитных механизма: на этапе подготовки схемы самый глубокий субагент не видит инструмент agent (он просто не знает о его существовании); на этапе выполнения запросы на порождение сверх лимита отклоняются.
И TUI, и Web Shell отображают вложенную древовидную структуру. Субагенты показываются под родительским агентом с маркером ↳ и отступом. Когда родительский агент завершает работу, субагент становится корневым узлом с пометкой «from <parent>». В детальном виде отображается «Level N · from <parent type>». Метки блокировки и подтверждения остановки тоже учитывают цепочку — подтверждение появляется только если отмена приведёт к завершению хода.
Эта функция включена по умолчанию — после обновления все существующие окружения получают возможность вложенного порождения. Fork-подпроцессы, teammates и workflow agents по-прежнему исключены. Arena-сессии теперь поддерживают вложенность. При восстановлении фоновых агентов восстанавливается исходная глубина и лимит на момент запуска.
Что это даёт:
- Субагент, обрабатывая сложную задачу, может сам порождать субагентов для подзадач
- Полное древовидное представление агентов в TUI и Web Shell
- Настройка лимита глубины вложенности через
model.maxSubagentDepth

Управление сессиями Web Shell: архивация, группировка, планировщик, разделённый экран
7 PR превратили боковую панель сессий Web Shell из «плоского списка» в полноценную панель управления с возможностями организации, классификации, мониторинга и параллельной работы.
Архивация и удаление. Каждая строка сессии получила быстрые действия и меню «…» (переименовать/архивировать/удалить). Архивированные сессии собираются в сворачиваемой области «Archived», их можно восстановить или окончательно удалить. Текущую активную сессию архивировать или удалить нельзя, архивированную сессию открыть невозможно (409 session_archived), удаление — жёсткое, с повторным подтверждением. Под капотом используются archiveState демона и эндпоинты /sessions/archive, /sessions/unarchive.
Именованные группы и цветовые метки. Можно создавать, переименовывать, удалять группы, перетаскивать в них сессии, назначать группам цветовые метки и статусы закрепления/архивации. Данные групп проходят от уровня демона до UI — на стороне демона метаданные групп хранятся в sidecar-файлах уровня проекта, REST/ACP маршруты предоставляют CRUD-операции, доступность контролируется через capability gates.
Обзор сессий и разделённый экран. На больших экранах в боковой панели появляется панель обзора сессий — все сессии отображаются в виде карточек в реальном времени, отсортированных по приоритету: сначала требующие подтверждения, затем активные, затем простаивающие. Каждая карточка показывает текущую модель и количество клиентов. После множественного выбора можно разделить экран для просмотра — в рамках текущей вкладки или в новой вкладке браузера (URL-параметр ?split=a,b). N независимых чат-панелей отображаются рядом, каждая со своим контекстом сессии, фокус клавиатуры действует только на ту панель, по которой кликнули.
Что это даёт:
- Архивация и организация накопившихся сессий, группировка по проектам с цветовыми метками
- Визуальное создание и управление запланированными задачами, без ручного написания cron-выражений
- Каждая запланированная задача имеет собственную сессию, историю запусков и транскрипты доступны в любой момент
- Разделённый экран для параллельного мониторинга нескольких сессий в реальном времени на больших дисплеях
Подробнее в PR #6293 , #6350 , #6305 , #6348 , #6389 , #6453 , #6400
Интеграция с WeCom
Подключение интеллектуального бота WeCom через @wecom/aibot-node-sdk. Для настройки нужны только Bot ID и Secret — не требуются Corp ID, Agent ID, callback Token, EncodingAESKey или публичный callback-адрес.
Приём сообщений через WebSocket-соединение, поддерживаются текст, транскрипция голоса, смешанные текстово-графические сообщения, изображения, файлы, видео и цитаты. Ответы Assistant отправляются в формате WeCom markdown. Исходящие сообщения поддерживают только локальные изображения (из временного каталога канала), метки файлов/видео/голоса игнорируются.
Конфигурация:
{
"type": "wecom",
"botId": "your-bot-id",
"secret": "your-secret",
"cwd": "/path/to/project"
}Команда запуска: qwen channel start my-wecom
Что это даёт:
- Подключение WeCom через Bot ID + Secret, без прав администратора предприятия
- Приём текстовых, голосовых сообщений, изображений, файлов, видео и цитат
- Qwen Code отвечает в группах WeCom сообщениями в формате markdown
Подробнее в PR #6436

Нативный диалог подтверждения для PreToolUse hook
Раньше PreToolUse hook с возвратом permissionDecision: "ask" был равносилен “deny” — диалог подтверждения вообще не появлялся, разработчик hook думал, что пользователь увидит выбор, а на самом деле запрос молча отклонялся.
Теперь “ask” показывает нативный TUI-диалог подтверждения. Варианты: «Yes, allow once» и «No, suggest changes» — без «always allow», потому что hook переоценивается при каждом вызове. При одобрении инструмент выполняется заново, при отказе — отменяется.
В неинтерактивном CLI и фоновых агентах “ask” откатывается к deny — система не зависает в ожидании. Используется существующий механизм awaiting_approval, отдельный путь не создавался. Поведение “denied” и “stop” не изменилось, PermissionRequest hook не затронут.
Что это даёт:
- Используйте “ask” в PreToolUse hook, чтобы пользователь решал, выполнять инструмент или нет
- Нет риска зависания в неинтерактивных сценариях
- Hook переоценивается при каждом вызове, не даёт постоянного разрешения
Подробнее в PR #5629

Предварительный просмотр автоматически сгенерированных Skills
Раньше при автоматической генерации skill агентом было видно только имя файла, а содержимое становилось доступным лишь после подтверждения. Теперь в диалоге проверки отображается полное содержимое, включая frontmatter.
Сгенерированный моделью контент санитизируется: управляющие последовательности ANSI/VT превращаются в безопасные экранированные символы, CRLF — в обычные переносы строк. Лимит чтения — 64 КиБ, лимит отображения — 12 строк (с учётом автоматического переноса), остаток помечается как «lines hidden» / «truncated».
Нажатие o открывает файл skill в настроенном редакторе, не пропуская текущую проверку. После сохранения файла предпросмотр автоматически обновляется — в связке с GUI-редактором (поведение macOS по умолчанию) можно отредактировать и сразу увидеть результат.
Опция «Turn off auto-generated skills» находится в конце списка, вступает в силу немедленно (перезапуск не требуется), сохраняется на уровне workspace. Текущая партия откладывается (не удаляется), после повторного включения через /memory партия возвращается.
Что это даёт:
- Просмотр полного содержимого skill перед подтверждением — не нужно сначала принимать, а потом искать файл
- Нажатие
oоткрывает skill в редакторе для правки, предпросмотр обновляется после сохранения - Одной кнопкой отключить автогенерацию skills, текущая партия не удаляется и восстанавливается через /memory в любой момент
Подробнее в PR #6393
| До (global qwen 0.19.6) — только имя + описание | После — проверка одного skill с встроенным предпросмотром и опцией отключения |
|---|---|
| После — последний элемент партии, массовые опции скрыты | После — выбрана опция «Turn off auto-generated skills» |
|---|---|
📊 Другие новые возможности
| Функция | PR | Что это даёт |
|---|---|---|
| Панель состояния демона: состояние, временные метрики, использование Token в боковой панели | #6272 , #6307 , #6388 | Здоровье системы и тренды на одном экране, без команд |
| maxSubAgents: ограничение количества параллельных субагентов | #6354 | Контроль потребления ресурсов, защита от бесконтрольного порождения |
| Tool(param:value) доступ: контроль инструментов на уровне значений параметров | #6106 | Точечный запрет порождения конкретных model/skill |
Стековые slash-skill вызовы: /skill1 /skill2 последовательное выполнение | #6361 | Цепочки навыков без пошаговых действий |
| tools.visible настройка: выборочное отображение отложенных инструментов | #6372 | При запуске видны только нужные инструменты |
| Настраиваемое истечение запланированных задач: время истечения cron/loop задач | #6173 | Долгосрочные задачи не истекают неожиданно |
| Инъекция состояния Hook: Stop/SubagentStop hook получает информацию о фоновых задачах | #6531 | Hook осведомлён о запланированных задачах и состоянии cron |
| Значок режима доступа: текущие права доступа в нижней панели DEFAULT режима | #6498 | Текущий режим безопасности виден сразу |
| Компактные блоки echarts: поддержка графиков в Web Shell | #6232 | Визуализация данных прямо в терминале |
| MCP mentions + иконки @ упоминаний: Web Shell | #6279 | @ упоминания стали нагляднее |
| Элементы управления Markdown-таблицами: переупорядочивание столбцов/масштабирование/закрепление | #6444 | Улучшен просмотр больших таблиц |
| Горячая перезагрузка LSP: языковые серверы поддерживают горячую перезагрузку | #5953 | Изменение конфигурации без перезапуска LSP |
| Память каналов по намерениям: естественноязыковая память каналов | #6376 | Память в контексте каналов стала естественнее |
| Контроль качества /review: точность issues и определение первопричины | #6395 | Результаты review стали надёжнее |
| Оптимизация производительности glob: отсечение игнорируемых каталогов при обходе | #6123 | Более быстрый поиск файлов в крупных проектах |
| Обнаружение slash-команд: расширенное меню, группировка, нечёткий поиск | #6267 | Быстрее находить нужную команду |
| per-worktree auto-memory: отдельная память для каждого worktree | #6462 | Память разных веток не смешивается |
| Agent working_dir: привязка субагента к worktree | #6456 | Субагент работает в указанном каталоге |
| Горячая перезагрузка расширений: автозагрузка при изменении плагинов | #6347 | Изменение плагинов без перезапуска |
| dmPolicy: запрет личных сообщений | #6521 | Бот канала отвечает только в групповых чатах |
| Изоляция окружения serve: изоляция + контроль общего объёма в режиме serve | #6416 | Несколько проектов в serve не мешают друг другу |
| Маршрутизация сессий по рабочим пространствам: serve поддерживает несколько рабочих пространств | #6511 | Один экземпляр serve обслуживает несколько проектов |
| per-tool-call таймаут: таймаут одного вызова инструмента | #6136 | Зависание одного инструмента не обрушивает всю сессию |
| Встроенный skill dataviz: навык визуализации данных | #6198 | Генерация графиков из коробки |
🔧 Важные исправления
| Исправление | PR | Что это даёт |
|---|---|---|
| auth 401: 401 при недействительной аутентификации больше не блокирует | #6284 | Истёкший token не блокирует сессию |
| OpenAI не-SSE обнаружение: корректное определение не-потоковых ответов | #6466 | Совместимые эндпоинты OpenAI больше не дают сбоев |
| Блокировка прокрутки при потоке: прокрутка не перехватывается при потоковом выводе | #6170 , #6421 | Свободная прокрутка истории при длинном выводе |
| Windows pager: pager больше не падает на Windows | #6390 | Стабильный пользовательский опыт на Windows |
| qqbot безопасность: усиление безопасности канала | #6200 | Бот QQ-канала стал безопаснее |
| Окно контекста по умолчанию 200k: исправлено значение по умолчанию | #6387 | Более точная настройка окна контекста |
| ACP settings гонка: устранена гонка при чтении/записи настроек | #6292 | Параллельные настройки работают без ошибок |
| /clear разблокирован: /clear больше не зависает | #6499 | Команда очистки экрана работает нормально |
👥 Участники
| Участник | Вклад | Ссылки на PR |
|---|---|---|
| @wenshao | Панель состояния демона, временные метрики, анализ Token, архивация/удаление сессий, группировка + цветовые метки, планировщик задач, независимые сессии задач, унифицированные сессии задач, обзор сессий + разделённый экран, обнаружение slash-команд, Agent working_dir, автоповтор порта serve | #6272 , #6307 , #6388 , #6293 , #6350 , #6348 , #6389 , #6453 , #6400 , #6267 , #6456 , #6513 |
| @ytahdn | Восстановление сессий, отключение skill, пользовательская панель @mention, callback сессий, виртуальная прокрутка, детали инструментов, обработка ошибок прерывания потока, обновление to-do, сводка вызовов инструментов, внешнее управление разделением экрана | #6220 , #6223 , #6242 , #6333 , #6342 , #6352 , #6357 , #6362 , #6399 , #6422 , #6424 , #6425 , #6450 , #6523 |
| @yiliang114 | Fallback-цепочка моделей, maxSubAgents, исправление auth 401 | #6273 , #6354 , #6284 |
| @tanzhenxin | Вложенные субагенты, древовидное представление Web Shell, предпросмотр автогенерации Skills, исправление значения по умолчанию окна контекста | #6189 , #6239 , #6393 , #6387 |
| @doudouOUC | Бэкенд организации сессий демона, изоляция окружения serve, маршрутизация сессий по рабочим пространствам | #6305 , #6416 , #6511 |
| @qqqys | Интеграция канала WeCom, память каналов по намерениям, циклические инструменты каналов, встроенный skill dataviz | #6436 , #6376 , #6287 , #6198 |
| @DennisYu07 | Tool(param:value) доступ, стековые slash-skill вызовы, значок режима доступа, инъекция состояния Hook | #6106 , #6361 , #6498 , #6531 |
| @LaZzyMan | Нативный диалог подтверждения PreToolUse hook | #5629 |
| @DragonnZhang | Контроль качества /review | #6395 |
| @Alex-ai-future | Настройка моделей на уровне проекта /model —project | #6060 |
| @VectorPeak | Исправление обнаружения не-SSE OpenAI | #6466 |
| @han-dreamer | Исправление Windows pager | #6390 |
| @MikeWang0316tw | Исправление блокировки прокрутки при потоковом выводе | #6170 , #6421 |
| @water-in-stone | Горячая перезагрузка LSP | #5953 |
| @ZijianZhang989 | Горячая перезагрузка расширений | #6347 |
| @BZ-D | MCP mentions + иконки @ упоминаний | #6279 |
| @jifeng | Элементы управления Markdown-таблицами (переупорядочивание столбцов/масштабирование/закрепление) | #6444 |
| @zhangxy-zju | Компактные блоки echarts | #6232 |
| @Eric-GoodBoy-Tech | Исправление безопасности qqbot | #6200 |
| @TianYuan1024 | Настраиваемое время истечения запланированных задач | #6173 |
| 🆕 @callmeYe | 🎉 Первый вклад: забывание/сновидения памяти сессий, UI таймлайна запланированных задач, память управления пользователя | #6227 , #6386 , #6432 |
| 🆕 @kagura-agent | 🎉 Первый вклад: сохранение префикса tools в prompt-cache, лимит параллельности переднего плана, кэширование сканирования skills | #6225 , #6300 , #6155 |
| 🆕 @Aleks-0 | 🎉 Первый вклад: настройка tools.visible, UTF-8 cmd.exe, KV-cache | #6372 , #6216 , #6420 |
| 🆕 @Nas01010101 | 🎉 Первый вклад: таймаут запросов, @-прикреплённые файлы | #6288 , #6295 , #6324 |
| 🆕 @zjunothing | 🎉 Первый вклад: per-worktree auto-memory, разблокировка /clear, исправление дрожания статусной строки | #6462 , #6499 , #6533 |
| 🆕 @minmax | 🎉 Первый вклад: оптимизация производительности glob, per-tool-call таймаут | #6123 , #6136 |
| 🆕 @pomelo-nwu | 🎉 Первый вклад: усиление контроля качества PR, маршрутизация рекомендаций review | #5723 , #5786 |
| 🆕 @chiga0 | 🎉 Первый вклад: API артефактов сессий, документация daemon side-channel | #5895 , #4511 |
| 🆕 @gauravyad86 | 🎉 Первый вклад: быстрый путь bootstrap, изоляция transform_data | #6188 , #6285 |
| 🆕 @mvanhorn | 🎉 Первый вклад: пути конфигурации macOS seatbelt, значение таймаута простоя потока по умолчанию | #6172 , #6107 |
| 🆕 @AmariahAK | 🎉 Первый вклад: выбор визуальной модели | #6209 , #6236 |
| 🆕 @barry166 | 🎉 Первый вклад: аутентификация VSCode, audio prebuild | #6274 , #6275 |
| 🆕 @chenghuichen | 🎉 Первый вклад: dmPolicy запрет личных сообщений | #6521 |
| 🆕 @beantownbytes | 🎉 Первый вклад: отключение qwen thinking для не-DashScope окружений | #6271 |
| 🆕 @heyparth1 | 🎉 Первый вклад: исправление вычисления окна контекста | #6266 |
| 🆕 @tomsen-ai | 🎉 Первый вклад: вызовы инструментов без параметров | #6250 |
Обновление: выполните npm i @qwen-code/qwen-code@latest -g для обновления до последней версии.
Если у вас есть вопросы или предложения, оставьте их в GitHub Issues !