Skip to Content
БлогОбновления07-23 Обновление продукта

Qwen Code: Steering в реальном времени, изоляция сессий через Worktree, встроенный web_search снова в строю

Qwen Team
2026-07-23

На этой неделе Qwen Code выпустил 3 стабильные версии v0.19.12, v0.20.0 и v0.20.1, принято более 220 PR.

Agent свернул не туда? Просто напишите. Нажмите Enter во время вывода модели — сообщение направит текущий turn на следующем sampling boundary. Ctrl+Q откладывает сообщение до следующего turn. Сообщения, введённые во время выполнения инструмента, тоже работают. Больше не нужно ждать, пока Agent закончит, чтобы скорректировать направление.

Параллельные задачи больше не конфликтуют. Web Shell поддерживает создание изолированных сессий Worktree в один клик — несколько задач в одном репозитории работают в независимых git worktree, правки файлов, git add, git checkout не мешают друг другу. Фиолетовый символ ⑂ присутствует в git chip, списке сессий и выпадающем меню workspace.

Поиск в интернете вернулся. Встроенный инструмент web_search работает на Bailian Responses API — достаточно уже настроенного ключа Bailian API. После удаления сообщество постоянно просило вернуть; теперь поиск реализован через серверный поиск + чтение страниц, в конце ответа автоматически добавляется секция Sources со ссылками. По умолчанию выключен, включается явно.

web_fetch перестроен с нуля. Раньше при захвате страниц терялись ссылки, PDF превращался в мусор, большие страницы обрезались и ответ пропадал. Теперь HTML сначала конвертируется в markdown, потом обрезается; PDF извлекает текст инлайн; бинарные файлы сохраняются корректно; добавлены таймаут 60 секунд и лимит 10 МБ.

✨ Новые возможности

Steering в реальном времени: корректировка Agent прямо во время вывода

Раньше, если вы писали сообщение во время вывода Agent, приходилось ждать окончания — оно становилось новым prompt. Agent свернул не туда, а вы могли только наблюдать, пока он не закончит.

Теперь Enter и Ctrl+Q чётко разделены:

  • Enter: сообщение попадает в очередь steering и применяется на следующем sampling boundary модели, оставаясь в текущем turn. Agent пишет код, вы вводите «перепиши на TypeScript» — он получит это указание на следующей точке sampling.
  • Ctrl+Q: сообщение откладывается до завершения текущего turn и становится началом нового turn.
  • Во время выполнения инструмента: введённое сообщение потребляется после возврата результата инструмента, в том же turn.
  • Передумали? Нажмите Up или Escape — сообщение из очереди вернётся в поле ввода.

Вложения через @ тоже сохраняются, без добавления синтетического префикса. При сбое доставки или отмене сообщение не теряется.

Что это даёт:

  • Agent пишет код не в том направлении — исправьте на лету, не дожидаясь завершения
  • Добавьте контекст, пока выполняется инструмент
  • Запланируйте вопрос на следующий turn через Ctrl+Q — он отправится автоматически по завершении текущего

Подробнее в PR #7090 

Изоляция сессий через Worktree: параллельные задачи без конфликтов

Две задачи в одном репозитории — одна сессия изменила файл, и git status другой тут же «поплыл». Раньше приходилось вручную делать git worktree add + cd, теперь в Web Shell это один клик.

В выпадающем меню ветки workspace выберите «New Worktree Task» — daemon автоматически создаёт git worktree в <repoRoot>/.qwen/worktrees/<slug>, рабочая директория сессии переключается на worktree. Фиолетовый символ ⑂ маркирует всё: git chip становится фиолетовым, в списке сессий появляется ⑂, в меню workspace есть пояснение. Для репозиториев без git эта опция не отображается.

Информация о Worktree сохраняется в sidecar-файл и не теряется при перезапуске daemon. При восстановлении сессии изоляция worktree восстанавливается автоматически, статусная строка показывает ветку worktree, а не основную ветку workspace.

Что это даёт:

  • Два feature параллельно, без взаимных помех
  • Исправляйте bug, продолжая работу над feature — без бесконечных stash
  • Экспериментальные правки Agent в изолированной среде, основная рабочая зона остаётся чистой

Подробнее в PR #7221 , #7262 , #7365 , #7367 

Встроенный web_search: поиск в интернете по ключу Bailian

Раньше в Qwen Code не было встроенного поиска — документация предлагала настроить Bailian WebSearch MCP. Но на практике этот MCP не справлялся со сложными запросами: запрос тарифов Medicare с однозначным ответом возвращал 0 из 5 релевантных результатов при нескольких попытках.

На этой неделе встроенный web_search вернулся. Серверный поиск на Bailian Responses API — достаточно уже настроенного ключа Bailian API, без дополнительных MCP-сервисов, провайдеров и ключей. Поисковый агент открывает страницы результатов для более обоснованных ответов; результаты разделяют «фактически прочитанные страницы» и «кандидаты, которые не открывались»; модель обязана добавить секцию Sources в конце ответа.

По умолчанию выключен, для включения нужны два параметра: tools.webSearch.enabled: true и модель поиска tools.webSearch.model. Если параметры заданы, но некорректно, инструмент остаётся выключенным, а при запуске сообщается, какое условие не выполнено. Поддерживается конфигурация через переменные окружения (ENABLE_WEB_SEARCH, WEB_SEARCH_MODEL и др.) — для сред, где settings.json недоступен. Каждый вызов поиска требует подтверждения (показывается запрос, можно выбрать «Всегда разрешать»).

Что это даёт:

  • Актуальная информация: изменения в новых версиях библиотек, обновления API-документации, security advisory
  • Проблемы после cutoff знаний модели: breaking change в новых версиях, недавние bug report
  • Замена ручному уходу из терминала в браузер

Подробнее в PR #7215 

Полная переработка web_fetch: PDF без мусора, ссылки без потерь

Ранее web_fetch имел ряд реальных проблем: большие страницы-списки обрезались по исходному HTML до конвертации — ответ терялся, все URL ссылок пропадали, и модель уверенно сообщала «цель не существует». PDF декодировался как текст, превращаясь в десятки тысяч token мусора. Некоторые государственные сайты возвращали 403 для анонимного User-Agent.

На этой неделе весь пайплайн перестроен с нуля:

  • HTML сначала конвертируется в markdown, затем обрезается — содержимое в глубине больших страниц сохраняется, все гиперссылки сохраняют URL. Обрезка помечена явно, скрипты и стили не расходуют контентный бюджет.
  • PDF извлекает текст инлайн — один вызов web_fetch отвечает на вопросы по содержимому PDF. Бинарные файлы определяются по magic bytes (не только Content-Type) и сохраняются с правильным расширением.
  • Таймаут 60 секунд + лимит 10 МБ, Esc мгновенно отменяет передачу — раньше UI мог зависнуть. Повторный захват того же URL в течение 15 минут идёт из кэша.
  • Межхостовые редиректы больше не следуют молча — предлагается повторный запрос через стандартный процесс разрешений.
  • Модель разрешений: первый доступ к каждому хосту требует подтверждения (GET раскрывает полный путь и query — канал утечки данных). После одобрения правило сохраняется по хосту. GitHub blob URL автоматически нормализуются в raw-адрес перед оценкой разрешений.

Что это даёт:

  • Захватите ссылку на PDF — получите ответ по содержимому
  • Захватите длинную страницу-список — спросите об элементе в глубине страницы, ссылки больше не теряются
  • Межхостовые редиректы предлагают повторный запрос, не следуя молча на незнакомый домен

Подробнее в PR #7146 

Крупное обновление Web Shell на этой неделе

Web Shell получил большой объём изменений — от git-интеграции до управления сессиями и опыта workspace.

Git-интеграция: три в одном. Команда /log открывает браузер истории коммитов — графическое всплывающее окно со списком commit, клик разворачивает полное сообщение и статистику изменений файлов, копирование SHA в один клик, пагинация. В окно /diff добавлена вкладка History — не нужно переключать команды. Git status chip отображается на панели инструментов composer, боковая панель показывает git-состояние workspace, окно Changes показывает визуальный working-tree diff. Подробнее в PR #7204 , #7054 

Страница управления Skill и страница Goals. В Web Shell появилась отдельная страница управления skill — просмотр и управление skill workspace без возврата в терминал. Страница Goals визуализирует цели /goal в Web Shell, цели не теряются при перезапуске daemon. Подробнее в PR #7018 , #6561 

Улучшения управления сессиями. Cmd+B / Ctrl+B переключает боковую панель, раскладка split view сохраняется между обновлениями (по вкладкам независимо), восстановленные сессии поддерживают пагинацию истории вместо полной загрузки, архивные сессии можно экспортировать. В окне Add Workspace добавлено автодополнение каталогов. Подробнее в PR #7135 , #7136 , #7064 , #6910 , #7125 

Опыт Workspace. Поддержка пользовательских отображаемых имён workspace — в мульти-workspace сценариях больше не нужно смотреть на пути. Пользовательские slash-команды, API кастомизации sidebar (брендирование, навигация, действия сессий, footer). Черновик новой темы предлагает открыть новую сессию, а не продолжать в старой. Подробнее в PR #7179 , #7267 , #7379 , #7098 

📊 Другие новые возможности

Значения по умолчанию и напоминание при записи Artifact. При создании artifact Agent использует конфигурацию по умолчанию и запрашивает подтверждение перед записью — меньше случайных записей файлов. Подробнее в PR #7068 

Активный путь в сводке инструмента. Компактная сводка инструмента показывает текущий путь файла — при работе с несколькими файлами сразу видно, какой редактируется. Подробнее в PR #7043 

Значения по умолчанию и guardrail для делегирования субагентам. Улучшены конфигурация по умолчанию и границы безопасности делегирования субагентам — поведение субагентов стало предсказуемее. Подробнее в PR #7048 

Маршрутизация логов VSCode. Логи выводятся в отдельный output channel Qwen Code Companion — при диагностике в VSCode не нужно искать в других панелях. Подробнее в PR #7121 

Ротация логов Daemon. Логи с ограничением размера, больше не растут бесконечно — диск не заполняется логами daemon. Подробнее в PR #6969 

Воспроизведение истории в read-only WebShell. Воспроизведение истории ChatRecord в read-only WebShell — удобно делиться записями сессий с коллегами. Подробнее в PR #6999 

Нормализация имён MCP-инструментов. Нормализация имён MCP-инструментов для строгих провайдеров — меньше сбоев при вызовах MCP-инструментов. Подробнее в PR #6976 

Воспроизведение памяти Channel. Каждое сообщение автоматически вызывает релевантные воспоминания, подтверждает изменения естественной памяти, безопасно сохраняет многофактную память — Agent в Channel помнит предыдущий контекст. Подробнее в PR #7157 , #7066 , #7092 

Наблюдение имени группы Channel. Автоматическое получение имени группы из входящих сообщений — в мультигрупповых сценариях Agent знает, в какой группе находится. Подробнее в PR #7155 

Форматированные пути в описаниях инструментов. Описания инструментов grep/glob показывают форматированные пути файлов — результаты чище и читаемее. Подробнее в PR #7050 

Улучшение tab-дополнения /cd. После ввода имени каталога tab включает уже введённый каталог — дополнение точнее. Подробнее в PR #7320 

👏 Улучшения опыта

Выбор мышью в VP mode вернулся. Раньше события мыши в VP mode перехватывались CLI — выделить и скопировать было нельзя. Теперь перетаскивание для выделения, двойной клик для выбора слова, тройной клик для выбора строки, отпускание автоматически копирует в буфер обмена. Подробнее в PR #6937 

Усиление безопасности Plan mode. Выход из Plan mode теперь требует явного подтверждения — молчаливый выход исключён. Shell-команды в Plan mode классифицируются по безопасности: read-only команды выполняются нормально, команды изменения состояния блокируются, неоднозначные команды требуют поочерёдного одобрения без выхода из Plan mode. При подтверждении выхода виден полный текст плана. Подробнее в PR #6967 , #7172 , #7060 

Автоопределение языка вывода. В режиме auto язык вывода следует за языком ввода пользователя — ручное переключение не нужно. Подробнее в PR #6953 

Защита от случайного Ctrl+C. Для выхода из TUI нужно нажать Ctrl+C дважды в течение 1 секунды — одиночное нажатие больше не завершает сессию. Подробнее в PR #7129 

Управление параллелизмом субагентов. Поддержка ограничения параллелизма субагентов по модели — разные модели могут иметь разный лимит. Для fork-субагентов добавлен параметр fork_turns — можно наследовать только последние несколько turn вместо всей истории. Подробнее в PR #6984 , #7346 

Адаптация моделей. Лимиты token kimi-k3 (контекст 1M, вывод 128K), qwen3.8-max-preview добавлен в список моделей Token Plan, поддержка региона Token Plan Сингапур. Подробнее в PR #7144 , #7199 , #7280 

Другие улучшения. Лимит вызовов инструментов за turn стал адаптивным, headless-режим поддерживает субагентов с наследованием контекста, goal-управление доступно в активном loop, индикатор режима при потоковом выводе, обновление npm выполняется безопасно в фоне. Подробнее в PR #7052 , #7378 , #7202 , #7219 , #7322 

🔧 Важные исправления

ИсправлениеPRЧто это даёт
Автоперерисовка TUI после сна/пробуждения#7265 Интерфейс не ломается после пробуждения
Отмена операции во время запроса разрешения не теряется#7295 Отменённые операции не исчезают
Отменённый prompt после потокового вывода возвращается в поле ввода#7149 Отменённый prompt не нужно набирать заново
Потоковые блоки кода сохраняют целостность при разделении между commit#7020 Блоки кода не обрезаются
Панель sticky-задач скрывается при простое Agent#7062 Интерфейс чище
Сбой проверки обновлений — предупреждение вместо ошибки#7409 Автономный запуск не прерывается ошибкой
Корректная оценка reasoning token при отсутствии completion_tokens_details#7239 Статистика использования token точнее
Side query qwen3.8 работает на Bailian#7303 Side query пользователей Bailian больше не падают
Постобработка web_fetch с ограничением#7305 При сбое захвата сохраняется уже полученное содержимое
Сохранение существующего рабочего содержимого в системном prompt#7087 Системный prompt не теряет имеющееся содержимое
Автоповтор при пустом tool-result#7039 Пустой результат модели не вызывает зависание
Ослабление ограничения additionalProperties для OpenAI wire#7344 Совместимость с большим числом моделей
Субагент, созданный после запуска, не отклоняется из-за истёкшего кэша#7112 Создание субагента больше не падает эпизодически
Автоповтор при некорректных дублирующихся thinking-тегах#7100 Аномальный формат thinking модели не вызывает сбой
Усиление границ входа в Plan mode#7248 Plan mode не активируется случайно
Корректное разрешение путей artifact в сессиях Worktree#7429 Artifact в Worktree записываются в правильное место
Завершение дочернего процесса при таймауте обнаружения MCP#6926 Утечка процессов устранена
Opt-in фильтрация payload модели для MCP#7413 Меньше ненужной передачи payload
Усиление жизненного цикла запроса разрешений Desktop MCP#7013 Pending-запросы не зависают и не утекают
Процесс VSCode ACP сохраняет режим Electron Node#7106 Расширение VSCode не падает из-за версии Node
Корректное разрешение корневых симлинков в путях памяти#6842 Пути с симлинками не вызывают ошибок
Настройка enableManagedAutoMemory работает корректно#6941 Переключатель автопамяти больше не игнорируется
Дедупликация изображений и горячих клавиш sidebar при восстановлении Web Shell#7169 Дубликаты больше не появляются
Клавиатурное управление окнами одобрения и вопросов Web Shell#7074 Окна управляются с клавиатуры
Текст prompt при восстановлении Web Shell не дублируется#7134 Повторные копии не появляются
Сессии Worktree открываются во время выполнения#7424 Сессии Worktree больше не блокируются
Токен daemon Web Shell сохраняется по вкладкам#7374 После обновления не нужно проходить аутентификацию заново
Корректная доставка ответов фонового агента Channel#7336 Фоновые ответы не теряются
Изоляция сопряжения и allowlist Channel по workspace#7065 Мульти-workspace не мешают друг другу
Автоповтор при транзиентном сбое emotion DingTalk#7329 Эмодзи-реакции не падают эпизодически
Привязка регулярного выражения @mention DingTalk к началу текста#7401 @mention не срабатывает ложно
Лимит загрузки медиа DingTalk 50 МБ#7361 Выравнивание с Feishu, большие файлы не падают

👥 Участники

УчастникВкладСсылки на PR
@wenshao Изоляция сессий Worktree, браузер истории git-коммитов, git status chip + diff, восстановление сессий Worktree, множественные улучшения Web Shell#7221 , #7204 , #7054 , #7262 
@doudouOUC Подтверждение выхода из Plan mode, безопасная маршрутизация Shell в Plan mode, ротация логов Daemon, проверка ветки сессии, усиление мульти-workspace#6967 , #7172 , #6969 , #7185 
@yiliang114 Мультимодальная маршрутизация на уровне turn, фоновое обновление npm, оценка reasoning token, поддержка qwen3.8, исправление маршрутизации моделей#7045 , #7322 , #7239 , #7303 
@zjunothing Выбор мышью в VP mode, переключение sidebar по Cmd+B, автодополнение каталогов, полный показ плана, множественные исправления Web Shell#6937 , #7135 , #7125 , #7060 
@chinesepowered Очистка SDK SSE, исправление опечаток, коррекция i18n, лимит медиа DingTalk#7257 , #7057 , #7131 , #7361 
@tanzhenxin Встроенный web_search, полная переработка web_fetch, лимиты token kimi-k3, исправление ask-user-question#7215 , #7146 , #7144 , #7063 
@qwen-code-dev-bot Ограничение параллелизма субагентов, воспроизведение памяти Channel, goal-управление, индикатор режима, множественные исправления CI#6984 , #7157 , #7202 , #7219 
@ytahdn Страница управления Skill, пользовательские slash-команды, API кастомизации sidebar, исправления Web Shell#7018 , #7267 , #7379 , #7294 
@qqqys Подтверждение памяти Channel, сохранение многофактной памяти, доставка ответов фонового агента, исправления DingTalk#7066 , #7092 , #7336 , #7401 
@chiga0 Значения по умолчанию и напоминание при записи Artifact, оптимизация контролов VP mode, исправление ink patch#7068 , #6931 , #7407 
@LaZzyMan Steering в реальном времени, запрос при недоступности классификатора Auto Mode, фильтрация payload MCP, исправление mobile-mcp#7090 , #7331 , #7413 , #7321 
@DragonnZhang Guardrail делегирования субагентам, fork_turns, headless-субагенты, исправление системного prompt#7048 , #7346 , #7378 , #7087 
@han-dreamer Автоопределение языка вывода, регион Token Plan Сингапур, исправление managedAutoMemory#6953 , #7280 , #6941 
@callmeYe Локализация тегов extension, исправление настроек голоса, сохранение описания skill, исправление иконки тега#7337 , #7345 , #7032 , #7024 
@samuelhsin Отображаемое имя workspace, агрегирующий эндпоинт session-info#7179 , #7077 
@BenGuanRan Контакты workspace Channel, наблюдение имени группы#7109 , #7155 
@mvanhorn Усиление разрешений Desktop MCP, исправление мониторинга resize stdout,透出 cause ошибки подключения#7013 , #7186 , #7010 
@morluto Завершение дочернего процесса при таймауте обнаружения MCP, нормализация путей разрешений#6926 , #6923 
@barry166 Восстановление отменённого prompt, предупреждение запуска deferred stream-json#7149 , #7174 
@xurik Маркировка sourceId daemon Channel, метки source сессии#7078 , #6991 
@ZijianZhang989 Коррекция документации CLI, ограничение markdown Feishu, пакетные исправления#7326 , #7324 , #7373 
@pomelo-nwu Основные модули CODEOWNERS, упрощение до правил уровня пакета#7304 , #7376 
@jordimas Обновление перевода на каталанский#7253 
@cxruan Воспроизведение истории в read-only WebShell, маркировка висячей истории инструментов#6999 , #7340 
@carffuca Предложение черновика новой темы, исправление обрезки меток панели инструментов#7098 , #7196 
@dreamWB Исправление восстановления тегов контекста#7312 
@BZ-D Исправление взаимодействия ссылок в запланированных задачах#7313 
@ran411285752 Нормализация имён MCP-инструментов#6976 
@yuanyuanAli API кастомизации Sidebar#7379 
🆕 @azurecgx 🎉 Первый вклад: исправление строк MaxSizedBox TUI и show-more diff#6957 
🆕 @makwingchi 🎉 Первый вклад: распространение prompt ID Daemon в события turn#7082 
🆕 @ARE404 🎉 Первый вклад: персистентность метаданных модели субагента#7104 
🆕 @ghisguth 🎉 Первый вклад: адаптация schema нативных вызовов инструментов Gemma 4#7177 
🆕 @ComplexSimply 🎉 Первый вклад: сбой проверки обновлений как предупреждение, таймаут увеличен до 5 секунд#7409 

Обновление: выполните npm i @qwen-code/qwen-code@latest -g для обновления до последней версии.

Если у вас есть вопросы или предложения, пишите в GitHub Issues !

Last updated on