Qwen Code: /learn превращает знания в Skill, масштабное обновление Code Review, полная переработка Web Shell
На этой неделе Qwen Code выпустил 3 стабильные версии v0.19.9, v0.19.10 и v0.19.11, принято более 160 PR.
Команда /learn. Пользователь создаёт skill вручную — указывает источник знаний (каталог, URL, диалог, текст), Qwen Code автоматически формирует SKILL.md для повторного использования.
Code Review вышел на новый уровень качества. Suggestion публикуется как inline-комментарий в PR, добавлены проверка корректности программы, предиктивная валидация, Step 4 verifier и Step 5 reverse-audit.
Масштабная переработка Web Shell. Библиотека shadcn в основе UI, панель ревью Artifact, страница управления extension, масштабирование и перетаскивание Mermaid-диаграмм. Полная поддержка мульти-workspace, split pane с цветовой маркировкой по workspace.
Voice Bridge: голосовой ввод через ACP. Даже текстовая основная модель обрабатывает голосовые prompt — аудио сначала транскрибируется в текст, модели с поддержкой аудио получают оригинальный поток без преобразования.
Сканированные PDF больше не блокируют Agent. При превышении лимита извлечения текста страницы автоматически рендерятся в изображения, визуальная модель анализирует картинку.
CLI-рабочие процессы дополнены. /update для обновления в один клик, Ctrl+O для заморозки диалога, Ctrl+S для временного сохранения prompt, Explore наследует основную модель, Alt+T разворачивает полный ход рассуждений.
✨ Новые возможности
/learn: превращение знаний в переиспользуемый Skill
/learn — новая slash-команда для создания переиспользуемых skill из источников знаний. Источником может быть локальный каталог, URL, история диалога или произвольный текст. Основная модель собирает знания и автоматически формирует SKILL.md, сохраняя его в .qwen/skills/learned-skill-<name>/ с меткой source: learned — отдельно от skill, написанных вручную или сгенерированных автоматически.
Что это даёт:
/learn Deploy process: ...— оформление процесса деплоя в skill для повторного использования- Указание каталога документации позволяет Qwen Code изучить стандарты разработки проекта и следовать им в дальнейшем
- Извлечение знаний из диалога и сохранение их в виде переиспользуемого шаблона команд
Подробнее в PR #6440
Масштабное обновление контроля качества Code Review
На этой неделе Code Review усилен по нескольким направлениям — от inline-комментариев до верификации качества самого review.
/review теперь публикует находки типа Suggestion напрямую как inline-комментарии в PR — больше не нужно вручную копировать рекомендации из вывода review и вставлять их в PR. В сам review добавлены проверки процедурной корректности (procedural correctness finders), настраиваемый уровень effort, а перед публикацией guardrail-валидация подтверждает обоснованность каждой находки.
Review больших diff больше не распределяется оптом — каждая строка diff закреплена за конкретным reviewer, что обеспечивает полное покрытие. Review chunk agent получает полностью сформированный prompt, запуски с пустым контекстом исключены. PR triage-комментарии дополнены оценкой уверенности, диаграммами последовательности, обзором файлов и review footer — reviewer получает более богатый контекст. Таймаут автоматического review по умолчанию увеличен до 180 минут с возможностью override до 240 минут, большие PR больше не прерываются по таймауту.
Что это даёт:
/reviewавтоматически публикует inline suggestion в PR, избавляя от ручной вставки комментариев- Настраиваемый уровень effort адаптируется к объёму review
- Оценка уверенности PR triage помогает определить, какие PR требуют повышенного внимания
В v0.19.11 добавлены Step 4 verifier и Step 5 reverse-audit — процесс review превратился из «найти проблему → опубликовать комментарий» в полный цикл «найти проблему → подтвердить обоснованность находки → провести обратный аудит на предмет пропусков». Список findings свёрнут в prompt верификации и обратного аудита, что уменьшает объём prompt. Область build/test агента 7 также сужена до workspace, реально затронутых diff, большие репозитории больше не собираются целиком.
Подробнее в PR #6593 , #6711 , #6612 , #6789 , #6771 , #6840 , #6942 , #6965 , #6892 , #6955
Полная переработка UI Web Shell
На этой неделе более 15 PR по Web Shell — от базовой UI-библиотеки до боковой панели, страницы настроек и переключателя моделей.
В основу UI заложена библиотека shadcn, унифицированы дизайн-токены и стандарты компонентов. Боковая панель мульти-workspace переработана, компоновка стала нагляднее. Страница настроек переведена на современные компоненты, пользовательские настройки редактируются прямо в панели, управление моделями интегрировано в настройки. Переключатель моделей обновлён — метаданные моделей отображаются чётче, переключение стало быстрее. Подробнее в PR #6760 , #6804 , #6817 , #6758
Полная поддержка мульти-workspace. Эндпоинты Daemon ACP поддерживают область действия workspace, channel worker привязываются по workspace, split view поддерживает сессии между workspace и метки workspace. Динамически добавленные workspace сохраняются — после перезапуска daemon повторная настройка не требуется. Workspace можно удалять на лету, без перезапуска сервера. Подробнее в PR #6621 , #6635 , #6746 , #6716 , #6745
Добавлена правая панель ревью Artifact — отредактированные файлы отображаются в виде карточек turn с подсчётом строк и разворачиваемым diff по каждому файлу. Правая панель поддерживает список/дерево файлов и перетаскивание для изменения ширины. Artifact и запланированные задачи также имеют собственные карточки turn output, HTML artifact рендерятся в sandbox iframe. Подробнее в PR #6591
В v0.19.11 добавлена страница управления extension — просмотр и управление установленными extension прямо в Web Shell. Mermaid-диаграммы поддерживают масштабирование, панорамирование и перетаскивание — блок-схемы и диаграммы последовательности больше не статичны. Split pane позволяет развернуть отдельную панель на весь экран, каждая панель окрашена по workspace. Элементы Composer переведены в формат popover, список сессий отображает сессии, ожидающие действий пользователя. Подробнее в PR #6815 , #6881 , #6951 , #6971 , #6877 , #6956
Дополнительные улучшения: двойной клик по ячейке Markdown-таблицы открывает всплывающее окно с полным содержимым для удобного копирования; панель инструментов поля ввода отображает текущую ветку Git; группы сессий поддерживают произвольные HEX-цвета; запланированные задачи собираются из всех workspace в единый обзор; Composer поддерживает произвольный текст-заполнитель; пути workspace заблокированы. Подробнее в PR #6530 , #6725 , #6752 , #6759 , #6765 , #6853
Voice Bridge: голосовой ввод через ACP
Ранее при отправке голосового prompt через ACP (Agent Communication Protocol), если основная модель была текстовой, аудио не обрабатывалось. Теперь добавлен voice bridge — аудио сначала транскрибируется настроенной voice model в текст, затем передаётся основной модели. Если основная модель сама поддерживает аудиовход, оригинальное аудио передаётся напрямую, без транскрипции. При недоступности или сбое транскрипции основная модель получает безопасное сообщение «аудио недоступно», сырое аудио не передаётся.
Что это даёт:
- Отправка голосовых команд через ACP-клиент — текстовые модели тоже понимают голос
- Основные модели с поддержкой аудио (мультимодальные) получают оригинальный аудиопоток без потери информации
- Безопасная деградация при сбое транскрипции — проблемы с аудио не прерывают диалог
Подробнее в PR #6576
Автоконвертация PDF в изображения: сканированные документы больше не блокируют Agent
Ранее при работе со сканированными или насыщёнными текстом PDF извлечение текста превышало бюджет в 12000 token и вызывало зацикливание FILE_TOO_LARGE — Agent повторял попытки с меньшим диапазоном страниц, каждый раз превышая лимит, контекст переполнялся до сбоя сессии. Теперь добавлен fallback с рендерингом страниц в изображения: при превышении лимита или сбое извлечения текста страницы автоматически рендерятся через pdftoppm в JPEG и передаются визуальной модели. Стоимость в token на страницу фиксирована и не зависит от плотности текста. Извлечение текста остаётся основным путём (grep, точное цитирование), рендеринг включается только при превышении лимита или сбое. Для текстовых основных моделей с подключённой визуальной моделью сканированные документы, прикреплённые через @, рендерятся в небольшом количестве страниц и передаются vision bridge для транскрипции.
Что это даёт:
- Сканированные PDF больше не вызывают
FILE_TOO_LARGE, визуальная модель анализирует изображения - Насыщённые PDF (превышающие бюджет token) автоматически деградируют до изображений, контекст не переполняется
- Текстовые PDF по-прежнему обрабатываются через извлечение текста, точность не теряется
Подробнее в PR #6585
Обновление CLI-процессов: обновление в один клик, диалог не теряется
Раньше для обновления Qwen Code нужно было помнить способ установки — npm install для npm, повторная загрузка установщика для standalone. На этой неделе добавлены команда qwen update и slash-команда /update, автоматически определяющие тип установки. Standalone-установка загружает последнюю версию из npm registry с проверкой SHA256 + верификацией подписи Ed25519 (опционально) + smoke test (новый двоичный файл должен пройти --version) + атомарная замена, автоматический откат при сбое. Для npm-установки отображается соответствующая команда npm install -g. Поддержка i18n для 9 языков. Подробнее в PR #5780
Ctrl+O — заморозка представления transcript — нажатие открывает альтернативный экран с полной записью диалога, все выводы инструментов развёрнуты, доступна прокрутка. Esc/q/Ctrl+C/Ctrl+O для возврата. Одновременно переработан рендеринг выводов инструментов: результаты read/search/list свёрнуты в однострочные сводки, mutating-инструменты остаются развёрнутыми. Настройка compactMode молча игнорируется. Подробнее в PR #5666

Ctrl+O — временное сохранение prompt — при нажатии Ctrl+S с содержимым в поле ввода prompt сохраняется в файл временного хранения на уровне проекта, при следующем запуске из того же проекта автоматически восстанавливается. После отправки временный файл удаляется. Заполнители больших вставок разворачиваются перед сохранением, восстанавливается оригинальное содержимое. Разные проекты не мешают друг другу. Подробнее в PR #6709
Настраиваемый таймаут shell-команд. Добавлена настройка tools.shell.defaultTimeoutMs для изменения таймаута по умолчанию на уровне проекта или сессии, без необходимости каждый раз указывать таймаут в параметрах команды. Значение по умолчанию — 120 секунд, 0 отключает таймаут. Подробнее в PR #6628
Explore subagent теперь наследует основную модель. Встроенный Explore subagent больше не выбирает fastModel автоматически, а наследует модель основной сессии. Если основная модель — Claude Opus, Explore тоже использует Claude Opus, без потери качества рассуждений. Для возврата к быстрой модели установите agents.builtin.exploreModel в fast или конкретный ID модели. Подробнее в PR #6807
Alt+T разворачивает полный ход рассуждений. При потоковом выводе нажатие Alt+T разворачивает thinking block — теперь виден полный поток рассуждений в реальном времени, а не захардкоженные 4 строки хвоста. Отслеживание цепочки рассуждений модели наконец-то полноценное. Длинные рассуждения ограничены высотой области просмотра, бесконечного разворачивания нет. Подробнее в PR #6678

📊 Другие новые возможности
| Функция | PR | Что это даёт |
|---|---|---|
| Автовосстановление Channel daemon: DingTalk/Feishu channel worker автоматически переподключаются | #6680 | После перезапуска daemon каналы не отключаются |
| Сохранение Markdown-таблиц DingTalk: структура таблиц не разрушается при отправке | #6673 | DingTalk-канал больше не получает разбитый текст |
| DingTalk @ отправитель: опциональное упоминание отправителя в группе | #6679 | Ответы в DingTalk-канале могут упоминать задавшего вопрос |
| DingTalk webhook в личные сообщения: webhook поддерживает отправку в DM | #6891 | Уведомления DingTalk можно отправлять лично, а не в группу |
| Структурированное управление памятью Channel | #6860 | Более структурированное управление памятью диалогов каналов |
| Интерактивные вопросы SDK: ask_user_question возвращает ответы модели | #6655 | SDK-интеграция поддерживает интерактивные диалоги |
| Методы управления SDK: запросы effort, models, usage, context | #6492 | Более точное управление моделями и мониторинг использования через SDK |
| Жизненный цикл ACP tool-call | #6819 | SDK отслеживает фазы подготовки вызовов инструментов |
| Улучшенная наблюдаемость субагентов: полные команды, путь transcript, контекст одобрения | #6580 | Лучшая видимость действий субагентов |
| Временная шкала субагентов: хронологическое отображение + параллельные timeline | #6772 | Удобнее отслеживать прогресс при параллельных задачах |
| Метаданные источника Daemon session: неизменяемые метки источника | #6932 | Сессии daemon можно отследить до источника создания |
| Глубокая агрегация здоровья Daemon: проверка здоровья между workspace | #6961 | Мониторинг состояния daemon охватывает все workspace |
| Управление MCP workspace: управление MCP в режиме serve | #6954 | MCP server управляются по workspace в мульти-workspace среде |
Экспорт архивных сессий: /export для экспорта архивных сессий | #6911 | История сессий доступна для экспорта и резервного копирования |
| Heartbeat shell-команд | #6876 | Долгие молчащие команды больше не считаются истёкшими |
Удлинение условий /goal: более длинные описания целей | #6665 | Сложные цели не нужно сокращать |
Встроенный провайдер xAI Grok: настройка моделей xAI через мастер /auth | #6805 | Grok работает без ручной настройки провайдера |
| Ссылочные метки запланированных задач: вставка ссылок на extension/skill/MCP в prompt | #6589 | Prompt запланированных задач может напрямую ссылаться на skill и MCP |
| Хук MessageDisplay: обратный вызов во время потокового вывода | #6489 | Плагины отслеживают содержимое текста в процессе ответа |
| Обработка групповых сообщений QQ Bot | #6457 | Поддержка групповых сообщений QQ-канала |
🔧 Важные исправления
| Исправление | PR | Что это даёт |
|---|---|---|
| Channel больше не отправляет промежуточный вывод субагентов | #6696 | DingTalk/Feishu больше не получают черновые ответы |
| Обновление токенов входящих медиа DingTalk | #6903 | Сообщения с изображениями/файлами в DingTalk не ломаются из-за истёкших токенов |
| WeCom requireMention больше не блокирует групповые чаты | #6948 | Групповые чаты WeCom работают нормально |
| Проверка учётных данных Feishu | #6780 | Недействительные учётные данные не проходят молча |
| Кнопка Approve в /mcp | #6518 | Pending/rejected MCP server можно одобрить напрямую |
| Сохранение MCP URL query | #6587 | Удалённые MCP-подключения не ломаются из-за обрезания URL |
| Автовосстановление MCP OAuth 401 | #6732 | Автоматический повтор при истечении OAuth, ручное переподключение не нужно |
| MCP OAuth HTTP handshake сохраняет challenge | #7022 | MCP OAuth-подключения не ломаются из-за потери challenge |
| Автоодобрение MCP read-only требует trust | #6924 | Ненадёжные MCP server не получают молчаливого автоодобрения |
| VS Code: позиция курсора =0 не перезаписывается | #2971 | Курсор в начале строки не прыгает в конец |
| VS Code ACP процесс в режиме Electron Node | #6866 | ACP-процесс в расширении VS Code не падает из-за версии Node |
| Автовысота Web Shell composer | #6872 | Длинные prompt не обрезаются фиксированной высотой |
| Сохранение состояния свёрнутых групп Web Shell | #6878 | После обновления страницы группы сессий не разворачиваются |
| YOLO mode не отключается plan mode молча | #6630 | Plan mode не выключает YOLO без уведомления |
| Локализация меток Approval mode UI | #6592 | Переключение режимов по Shift+Tab без английских меток |
| Таймаут Shell классифицируется как ошибка инструмента | #6864 | Таймаут shell не считается ошибкой модели |
| Приоритет пользовательских команд ACP | #6607 | В режиме Agent ваши команды не оттесняются содержимым вложений |
| Исправление шаблонных заполнителей субагентов | #6672 | Числовые шаблоны вроде ${0} не парсятся ошибочно |
| Ограничение token Claude Opus 4.6-4.8 | #6718 | Compaction не срабатывает преждевременно |
| Обработка подписи thinking через прокси Claude | #6893 | Claude через прокси не выдаёт ошибок неподписанного thinking |
| Сохранение managed memory при сжатии | #6714 | Microcompaction не теряет записи памяти |
| Результаты Skill участвуют в microcompaction | #6788 | Результаты skill не теряются при сжатии |
| Восстановление при недействительном потоке модели | #6712 | Недействительный поток модели не вызывает сбой |
| Автооткат при сбое продолжения max-token | #6921 | Сбой продолжения не оставляет незавершённое состояние |
| Кэш trusted-folders не загрязняется | #6900 | Проверка доверия предпросмотра не влияет на последующие решения |
| Оптимизация запуска: ленивая загрузка tree-sitter | #6747 | Более быстрый запуск |
| Сокращение процессов Git snapshot | #6784 | Лучшая производительность во время сессии |
| Защита от OOM в длинных сессиях | #6682 | Длинные сессии не вызывают OOM при выходе |
| Унифицированное восстановление сессий | #6731 | Более надёжное восстановление после прерываний и деградаций |
👥 Участники
| Участник | Вклад | Ссылки на PR |
|---|---|---|
| @wenshao | Масштабное обновление Code Review (inline-комментарии, verifier/reverse-audit, оценка triage), улучшения Web Shell (split view, масштабирование Mermaid, цветовая маркировка workspace, визуальный предпросмотр) | #6593 , #6942 , #6965 , #6971 , #6881 |
| @doudouOUC | Полная цепочка мульти-workspace (эндпоинты ACP, группировка channel worker, персистентность workspace), автоконвертация PDF в изображения, список сессий, transcript reader | #6621 , #6635 , #6585 , #6716 , #6741 |
| @yiliang114 | Исправление цикла субагентов, исправление shell self-kill, улучшения CI, ограничение token Claude, сохранение managed memory, отказоустойчивость потока | #6543 , #6544 , #6682 , #6714 , #6718 |
| @qqqys | Комплексные улучшения Channel (восстановление daemon, исправление DingTalk Stream, сохранение markdown-таблиц, диагностика channel payload), исправление жизненного цикла goal | #6680 , #6715 , #6673 , #6617 , #6620 |
| @chinesepowered | Исправление курсора VS Code, оптимизация mobile-mcp, нормализация координат cua-driver, исправление LRU cache, определение языка dotfiles | #2971 , #6624 , #6785 , #6787 |
| @ytahdn | Улучшения Web Shell (shadcn, боковая панель, страница настроек, страница управления extension, блокировка путей workspace, split view) | #6760 , #6804 , #6815 , #6853 , #6956 |
| @dreamWB | Web Shell (нижняя панель состояния, assistant turn footer, context mention, настраиваемая боковая панель, переключатель моделей, цвета session group) | #6613 , #6611 , #6578 , #6750 , #6758 |
| @callmeYe | Выравнивание диалогов памяти, подробности ошибок daemon memory tasks, обновление remember, путь установки skill, API skill workspace | #6434 , #6431 , #6497 , #6811 , #6816 |
| @chiga0 | Заморозка transcript по Ctrl+O, VP mode inline thought expand, персистентность session artifact | #5666 , #6079 , #6557 |
| @jifeng | Улучшение читаемости Markdown-таблиц, двойной клик по ячейке для просмотра полного содержимого | #6626 , #6530 , #6838 |
| @TianYuan1024 | Интерактивные вопросы SDK с возвратом ответов, улучшенная наблюдаемость субагентов, провайдер xAI Grok | #6655 , #6580 , #6805 |
| @tanzhenxin | Поддержка NO_PROXY для запросов модели, max_tokens context window clamp, Explore subagent наследует основную модель | #6640 , #6556 , #6807 |
| @LaZzyMan | Команда /learn, нормализация координат mobile-mcp, кнопка Approve в /mcp | #6440 , #6610 , #6518 |
| @Nas01010101 | Настраиваемый таймаут shell-команд, исправление cron step, документация tools.disabled, исправление YOLO plan mode | #6628 , #6627 , #6641 , #6630 |
| @zjunothing | Настраиваемый таймаут memory agent, повторные попытки vision bridge, исправление изображений буфера обмена в десктопной версии | #6459 , #6541 , #6708 |
| @huww98 | Alt+T разворачивает полный поток рассуждений | #6678 |
| @yuanyuanAli | Web Shell AskUserQuestion свёртывание/развёртывание, mobile welcome composer slots | #6588 , #6584 |
| @Alex-ai-future | Приоритетное сопоставление CLI-команд, улучшенные ответы об ошибках plan mode | #6504 , #6667 , #6764 |
| @Eric-GoodBoy-Tech | Обработка групповых сообщений QQ Bot | #6457 |
| @DragonnZhang | Документация model-provider, удлинение условий /goal, обрезка release notes для desktop CI | #6552 , #6665 , #6792 |
| @dexhunter | Быстрый путь ASCII-токенов, ленивая загрузка tree-sitter, оптимизация запуска | #6551 , #6747 |
| @han-dreamer | Локализация Approval mode UI, Git branch chip, обновление remember | #6592 , #6725 , #6497 |
| @samuelhsin | Произвольные HEX-цвета групп сессий | #6752 |
| @water-in-stone | Унифицированное восстановление сессий | #6731 |
| @BZ-D | Ссылочные метки prompt запланированных задач | #6589 |
| @VectorPeak | Сохранение MCP URL query, исправление ACP readTextFile | #6587 , #6704 |
| @BenGuanRan | Проверка учётных данных Feishu, отправка DingTalk webhook в DM, исправление WeCom requireMention | #6780 , #6891 , #6948 |
| 🆕 @liziwl | 🎉 Первый вклад: команды qwen update и /update для обновления в один клик | #5780 |
| 🆕 @C0d3N1nja97342 | 🎉 Первый вклад: исправление очистки tempDir extension на Windows | #6545 |
| 🆕 @cxruan | 🎉 Первый вклад: настраиваемый z-index backdrop диалога Web Shell | #6572 |
| 🆕 @harbin1053020115 | 🎉 Первый вклад: инфраструктура Web Shell harness | #6517 |
| 🆕 @juhuan | 🎉 Первый вклад: методы управления SDK и опции transport | #6492 , #6491 |
| 🆕 @ksws00684315 | 🎉 Первый вклад: исправление шаблонных заполнителей субагентов | #6672 |
| 🆕 @kaymeer | 🎉 Первый вклад: исправление приоритета пользовательских команд ACP | #6607 |
| 🆕 @destire-mio | 🎉 Первый вклад: временное сохранение prompt по Ctrl+S на уровне проекта | #6709 |
| 🆕 @yanchenko | 🎉 Первый вклад: потоковый хук MessageDisplay | #6489 |
| 🆕 @ever-o | 🎉 Первый вклад: рендеринг ссылочных меток пользовательских сообщений в Web Shell | #6537 |
| 🆕 @ran411285752 | 🎉 Первый вклад: жизненный цикл ACP tool-call | #6819 |
| 🆕 @morluto | 🎉 Первый вклад: сохранение отображения деформированных результатов инструментов, валидация конфигурации сессии, откат продолжения | #6925 , #6920 , #6921 |
| 🆕 @AriaZhao-coder | 🎉 Первый вклад: кэш trusted-folders не загрязняется проверкой предпросмотра | #6900 |
| 🆕 @xurik | 🎉 Первый вклад: исправление гонки настроек ACP | #6292 |
| 🆕 @VladOsipov | 🎉 Первый вклад: исправление переноса строк в описании skill | #6562 |
Обновление: выполните npm i @qwen-code/qwen-code@latest -g для обновления до последней версии. Также можно использовать команду /update прямо в Qwen Code для обновления в один клик.
Если у вас есть вопросы или предложения, пишите в GitHub Issues !