Qwen Code 周报:实时转向随时修正 Agent 方向、Worktree 隔离会话并行不冲突、内置 web_search 联网搜索回归
Qwen Code 本周发布 v0.19.12、v0.20.0 和 v0.20.1 三个正式版本,220+ 个 PR 合入。
Agent 跑偏了?打字就能修正。 模型正在输出时按 Enter,消息会在下一个采样边界引导当前回合;按 Ctrl+Q 则延迟到下一轮。工具执行期间输入的消息同样生效。不用等 Agent 说完再纠正了。
并行任务终于不打架了。 Web Shell 支持一键创建 Worktree 隔离会话,同一仓库里多个任务各自在独立 git worktree 中运行,文件编辑、git add、git checkout 互不干扰。紫色 ⑂ 标识贯穿 git chip、会话列表和 workspace 下拉菜单。
联网搜索回来了。 内置 web_search 工具基于百炼 Responses API,用你已有的百炼 API key 就能搜索。之前被移除后社区一直要求恢复,这次用服务端搜索 + 页面阅读重新实现,回答末尾自动附 Sources 引用链接。默认关闭,显式开启才生效。
web_fetch 从头重建。 之前抓网页会丢链接、PDF 变乱码、大页面截断后答案丢失。现在 HTML 先转 markdown 再截断、PDF 内联提取文本、二进制文件正确保存,还有 60 秒超时和 10MB 上限保护。
✨ 新增特性
实时转向:Agent 输出时打字就能修正方向
之前 Agent 正在输出时你打了一句话,得等它说完才能发出去,变成一个新的 prompt。Agent 跑偏了也只能看着它跑完再纠正。
现在 Enter 和 Ctrl+Q 有了明确的分工:
- Enter:消息排入转向队列,在下一个模型采样边界生效,仍然在当前回合内。Agent 正在写代码,你打一句 ” 用 TypeScript 重写 “,它会在下一个采样点收到这个引导。
- Ctrl+Q:消息延迟到当前回合结束后,作为新一轮对话的开头。
- 工具执行期间:输入的消息在工具结果返回后、同一回合内被消费。
- 反悔了? 按 Up 或 Escape,排队的消息恢复到输入框。
@ 附件也会一起保留,不会被加上合成前缀。投递失败或取消时,消息不会丢失。
你能用它做什么:
- Agent 写代码方向不对,打字就能修正,不用等它写完
- 工具跑着的时候补充上下文信息
- 想好下一轮要问什么,Ctrl+Q 排队,当前回合结束自动发出
详见 PR #7090
Worktree 隔离会话:并行任务各跑各的
在同一个仓库里同时处理两个任务,一个会话改了文件,另一个的 git status 就乱了。之前要手动 git worktree add + cd,现在 Web Shell 里一键搞定。
点击 workspace 分支 pill 下拉菜单的 “New Worktree Task”,daemon 自动在 <repoRoot>/.qwen/worktrees/<slug> 下创建 git worktree,会话的工作目录切到 worktree。整个界面用紫色 ⑂ 标识区分:git chip 变紫色、会话列表有 ⑂ 标记、workspace 下拉菜单有说明。非 git 仓库不显示这个选项。
Worktree 信息持久化到 sidecar 文件,daemon 重启后不丢失。恢复会话时自动重建 worktree 隔离,状态栏显示 worktree 分支名而不是主 workspace 分支。
你能用它做什么:
- 同时跑两个功能开发,互不干扰
- 一边修 bug 一边继续做 feature,不用 stash 来 stash 去
- 让 Agent 在隔离环境里做实验性修改,主工作区保持干净
详见 PR #7221 、#7262 、#7365 、#7367

内置 web_search:百炼 key 即可联网搜索
之前 Qwen Code 没有内置搜索,文档让你去配百炼 WebSearch MCP。但实测下来,那个 MCP 在复杂查询上质量不行——一个有标准答案的 Medicare 费率查询,MCP 跑多次返回 0/5 相关结果。
这周内置 web_search 工具回归了。基于百炼 Responses API 的服务端搜索,用你已经配好的百炼 API key 就行,不需要额外的 MCP 服务、额外的 provider、额外的 key。搜索代理会打开结果页面获取更有依据的回答,结果区分 ” 实际读过的页面 ” 和 ” 未打开的候选链接 “,模型必须在回答末尾附上 Sources 引用小节。
默认关闭,需要两项配置才能启用:tools.webSearch.enabled: true 和搜索模型 tools.webSearch.model。如果配了但没配对,工具保持关闭,启动时会告诉你具体哪个条件没满足。也支持纯环境变量配置(ENABLE_WEB_SEARCH、WEB_SEARCH_MODEL 等),适合写不了 settings.json 的环境。每次搜索调用都需要确认(显示查询内容,可选 ” 始终允许 ”)。
你能用它做什么:
- 查时效性信息:库的最新版本变更、API 文档更新、安全公告
- 排查模型知识截止日期之后的问题:新版本 breaking change、最近的 bug report
- 替代手动离开终端去浏览器搜索的流程
详见 PR #7215
web_fetch 全面重建:PDF 不再乱码、链接不再丢失
之前 web_fetch 有几个实际遇到的问题:大型列表页在转换前按原始 HTML 截断,答案被切掉,链接 URL 全部丢失,模型就自信地告诉你 ” 目标不存在 “。PDF 被当文本解码,变成几万 token 的乱码。某些政府网站对匿名 User-Agent 返回 403。
这周从头重建了整个管线:
- HTML 先转 markdown 再截断,大页面深处的内容保留,所有超链接保留 URL。截断有显式标记,脚本和样式不占内容预算。
- PDF 内联提取文本,单次
web_fetch调用就能回答 PDF 内容。二进制文件通过 magic bytes 识别(不只看 Content-Type),以正确扩展名保存。 - 60 秒超时 + 10MB 上限,按 Esc 立即取消传输——之前 UI 可能冻住。15 分钟内重复抓取同一 URL 走缓存。
- 跨主机重定向不再静默跟随,而是提示你重新发起,走正常权限流程。
- 权限模型:每个主机首次访问需确认(GET 会暴露完整路径和查询,是数据外泄通道)。批准后持久化为按主机规则。GitHub blob URL 自动规范化为 raw 地址再评估权限。
你能用它做什么:
- 抓一个 PDF 链接,直接回答里面的内容
- 抓一个长列表页面,问页面深处的条目,链接不再丢失
- 跨主机重定向会提示你重新发起,不会静默跟随到陌生域名
详见 PR #7146
Web Shell 本周大更新
Web Shell 这周改动量很大,从 git 集成到会话管理到 workspace 体验,集中说。
Git 集成三件套。 /log 命令打开提交历史浏览器,图形化弹窗展示 commit 列表,点击展开看完整 message 和文件变更统计,一键复制 SHA,支持分页加载。/diff 弹窗也加了 History 标签页,不用切命令。git status chip 显示在 composer 工具栏,侧边栏展示工作区 git 状态,Changes 弹窗里能看可视化的 working-tree diff。详见 PR #7204 、#7054
Skill 管理页和 Goals 页。 Web Shell 有了独立的 skill 管理页面,查看和管理工作区 skill 不用回到终端。Goals 页让 /goal 的目标在 Web Shell 里可视化,daemon 重启后目标不再丢失。详见 PR #7018 、#6561
会话管理改进。 Cmd+B / Ctrl+B 切换侧边栏,split view 布局跨刷新保持(按标签页独立),恢复的会话历史支持分页加载不再一次全拉,归档会话支持导出。Add Workspace 弹窗加了目录自动补全。详见 PR #7135 、#7136 、#7064 、#6910 、#7125
Workspace 体验。 支持自定义 workspace 显示名称,多工作区场景下不再只能看路径。自定义斜杠命令动作,sidebar 自定义 API(品牌、导航、会话操作、footer)。新话题草稿会建议你开新会话,而不是在旧会话里继续。详见 PR #7179 、#7267 、#7379 、#7098
📊 更多新功能
Artifact 默认值和写入提醒。 Agent 创建 artifact 时有默认配置,写入前提醒确认,减少误写文件的意外。详见 PR #7068
工具摘要显示活跃路径。 紧凑工具摘要中展示当前操作的文件路径,多文件操作时一眼看到在改哪个文件。详见 PR #7043
子 agent 委派默认值和护栏。 改进子 agent 委派的默认配置和安全边界,子 agent 行为更可预测。详见 PR #7048
VSCode 日志路由。 日志输出到 Qwen Code Companion 专属 output channel,在 VSCode 里排查问题不用翻其他面板。详见 PR #7121
Daemon 日志轮转。 有上限的日志轮转,不再无限增长,磁盘不会被 daemon 日志吃满。详见 PR #6969
WebShell 只读历史回放。 在只读 WebShell 中回放 ChatRecord 历史,方便分享会话记录给同事看。详见 PR #6999
MCP 工具名规范化。 为严格 provider 规范化 MCP 工具名,减少 MCP 工具调用失败。详见 PR #6976
Channel 记忆召回。 每条消息自动召回相关记忆、确认自然记忆变更、安全保存多事实记忆,Channel 对话中 Agent 能记住之前的上下文。详见 PR #7157 、#7066 、#7092
Channel 群组名观察。 从入站消息中自动获取群组名称,多群组场景下 Agent 知道在哪个群。详见 PR #7155
工具描述展示格式化路径。 grep/glob 等工具的描述中展示格式化后的文件路径,结果更清晰易读。详见 PR #7050
/cd tab 补全增强。 输入目录名后按 tab 会包含已输入的目录,补全更准确。详见 PR #7320
👏 体验优化
VP 模式鼠标选择回来了。 之前 VP 模式的鼠标事件被 CLI 消费,没法选择复制。现在拖拽选择、双击选词、三击选行,松开自动复制到剪贴板。详见 PR #6937
Plan 模式安全加固。 退出 Plan 模式现在需要你明确批准,不会静默退出。Plan 模式下的 Shell 命令按安全性分类:只读命令正常执行,状态修改命令直接阻止,无法判断的命令需要逐次批准且不会退出 Plan 模式。退出确认时能看到完整的计划内容。详见 PR #6967 、#7172 、#7060
输出语言自动跟随。 设成 auto 时,输出语言跟随用户输入语言,不再需要手动切换。详见 PR #6953
Ctrl+C 防误触。 退出 TUI 需要 1 秒内按两次 Ctrl+C,单次不再直接退出。详见 PR #7129
子 agent 并发控制。 支持按模型设置子 agent 并发上限,不同模型可以配不同的并发数。fork 子 agent 新增 fork_turns 参数,可以只继承最近几轮对话而不是全部历史。详见 PR #6984 、#7346
模型适配。 kimi-k3 token 上限(1M 上下文、128K 输出),qwen3.8-max-preview 加入 Token Plan 模型列表,新加坡 Token Plan 区域支持。详见 PR #7144 、#7199 、#7280
其他改进。 每轮工具调用上限改为自适应、headless 模式支持上下文继承的子 agent、活跃 loop 中可以使用 goal 控制、流式输出时显示模式指示器、npm 更新改为后台安全执行。详见 PR #7052 、#7378 、#7202 、#7219 、#7322
🔧 重要修复
| 修复 | PR | 对你的影响 |
|---|---|---|
| 系统休眠/唤醒后 TUI 自动重绘 | #7265 | 唤醒后界面不再错乱 |
| 权限提示期间取消操作不再丢失 | #7295 | 取消的操作不会消失 |
| 流式输出后被取消的 prompt 恢复到输入框 | #7149 | 取消的 prompt 不用重新打 |
| 流式代码块跨 commit 分割时保持完整 | #7020 | 代码块不会被截断 |
| Agent 空闲时隐藏粘性任务面板 | #7062 | 界面更干净 |
| 更新检查失败改为警告而非报错 | #7409 | 离线启动不再报错中断 |
completion_tokens_details 缺失时正确估算推理 token | #7239 | token 用量统计更准确 |
| qwen3.8 side query 在百炼上正常工作 | #7303 | 百炼用户 side query 不再失败 |
web_fetch 后处理有边界限制 | #7305 | 抓取失败时保留已获取内容 |
| 系统 prompt 中保留已有工作内容 | #7087 | 系统 prompt 不会丢失已有内容 |
| 空 tool-result 自动重试 | #7039 | 模型返回空结果不再卡住 |
| 放宽 OpenAI wire additionalProperties 限制 | #7344 | 更多模型兼容 |
| 启动后创建的 subagent 不再因缓存过期被拒 | #7112 | subagent 创建不再偶尔失败 |
| 畸形重复 thinking tag 自动重试 | #7100 | 模型 thinking 格式异常不再崩溃 |
| Plan 模式入口边界加固 | #7248 | Plan 模式不会被意外进入 |
| Worktree 会话中 artifact 路径正确解析 | #7429 | Worktree 下 artifact 不再写错位置 |
| MCP 发现超时后终止子进程 | #6926 | 不再泄漏进程 |
| MCP 新增 opt-in 模型 payload 过滤 | #7413 | 减少不必要的 payload 传输 |
| Desktop MCP 权限请求生命周期加固 | #7013 | pending 提示不再挂起或泄漏 |
| VSCode ACP 进程保留 Electron Node 模式 | #7106 | VSCode 扩展不再因 Node 版本失败 |
| 记忆路径中的根符号链接正确解析 | #6842 | 符号链接路径不再出错 |
enableManagedAutoMemory 设置正确生效 | #6941 | 自动记忆开关不再失效 |
| Web Shell 恢复的图片和侧边栏快捷键去重 | #7169 | 不再出现重复项 |
| Web Shell 审批和问题弹窗支持键盘操作 | #7074 | 可以用键盘操作弹窗 |
| Web Shell 恢复 prompt 文本不再堆叠 | #7134 | 不再出现重复副本 |
| Worktree 会话运行中可正常打开 | #7424 | Worktree 会话不再打不开 |
| Web Shell daemon token 按标签页持久化 | #7374 | 刷新后不用重新认证 |
| Channel 后台 agent 回复正确投递 | #7336 | 后台回复不再丢失 |
| Channel 配对和允许列表按 workspace 隔离 | #7065 | 多 workspace 不再互相干扰 |
| DingTalk 瞬时 emotion 失败自动重试 | #7329 | 表情反应不再偶尔失败 |
| DingTalk @mention 正则锚定到文本开头 | #7401 | @mention 不再误匹配 |
| DingTalk 媒体下载大小限制 50MB | #7361 | 与飞书对齐,大文件不再失败 |
👥 贡献者
| 贡献者 | 贡献内容 | 参考 PR 链接 |
|---|---|---|
| @wenshao | Worktree 隔离会话、Git 提交历史浏览器、git status chip + diff、Worktree 会话恢复、Web Shell 多项改进 | #7221 , #7204 , #7054 , #7262 |
| @doudouOUC | Plan 模式退出审批、Plan 模式 Shell 安全路由、Daemon 日志轮转、会话分支检查、多 workspace 加固 | #6967 , #7172 , #6969 , #7185 |
| @yiliang114 | 多模态整轮路由、npm 后台更新、推理 token 估算、qwen3.8 支持、模型路由修复 | #7045 , #7322 , #7239 , #7303 |
| @zjunothing | VP 模式鼠标选择、Cmd+B 侧边栏切换、目录自动补全、Plan 完整展示、多项 Web Shell 修复 | #6937 , #7135 , #7125 , #7060 |
| @chinesepowered | SDK SSE 清理、多项 typo 修复、i18n 修正、DingTalk 媒体限制 | #7257 , #7057 , #7131 , #7361 |
| @tanzhenxin | 内置 web_search、web_fetch 全面重建、kimi-k3 token 上限、ask-user-question 修复 | #7215 , #7146 , #7144 , #7063 |
| @qwen-code-dev-bot | 子 agent 并发限制、Channel 记忆召回、goal 控制、模式指示器、多项 CI 修复 | #6984 , #7157 , #7202 , #7219 |
| @ytahdn | Skill 管理页、自定义斜杠命令、sidebar 自定义 API、Web Shell 修复 | #7018 , #7267 , #7379 , #7294 |
| @qqqys | Channel 记忆确认、多事实记忆保存、后台 agent 回复投递、DingTalk 修复 | #7066 , #7092 , #7336 , #7401 |
| @chiga0 | Artifact 默认值和写入提醒、VP 模式控件优化、ink patch 修复 | #7068 , #6931 , #7407 |
| @LaZzyMan | 实时转向、Auto Mode 分类器不可用时询问、MCP payload 过滤、mobile-mcp 修复 | #7090 , #7331 , #7413 , #7321 |
| @DragonnZhang | 子 agent 委派护栏、fork_turns、headless 子 agent、系统 prompt 修复 | #7048 , #7346 , #7378 , #7087 |
| @han-dreamer | 输出语言自动跟随、新加坡 Token Plan 区域、managedAutoMemory 修复 | #6953 , #7280 , #6941 |
| @callmeYe | extension tag 本地化、语音设置修复、skill 描述保留、tag 图标修复 | #7337 , #7345 , #7032 , #7024 |
| @samuelhsin | workspace 显示名称、session-info 聚合端点 | #7179 , #7077 |
| @BenGuanRan | Channel workspace 联系人、群组名观察 | #7109 , #7155 |
| @mvanhorn | Desktop MCP 权限加固、stdout resize 监听修复、连接错误 cause 透出 | #7013 , #7186 , #7010 |
| @morluto | MCP 发现超时终止子进程、权限路径规范化 | #6926 , #6923 |
| @barry166 | 取消 prompt 恢复、deferred stream-json 启动警告 | #7149 , #7174 |
| @xurik | Channel daemon sourceId 标记、session source 标签 | #7078 , #6991 |
| @ZijianZhang989 | CLI 文档修正、飞书 markdown 限制、批量修复 | #7326 , #7324 , #7373 |
| @pomelo-nwu | CODEOWNERS 核心模块、简化为包级规则 | #7304 , #7376 |
| @jordimas | 加泰罗尼亚语翻译更新 | #7253 |
| @cxruan | WebShell 只读历史回放、悬空工具历史标记 | #6999 , #7340 |
| @carffuca | 新话题草稿建议、工具栏标签裁剪修复 | #7098 , #7196 |
| @dreamWB | 上下文标签恢复修复 | #7312 |
| @BZ-D | 定时任务引用交互修复 | #7313 |
| @ran411285752 | MCP 工具名规范化 | #6976 |
| @yuanyuanAli | Sidebar 自定义 API | #7379 |
| 🆕 @azurecgx | 🎉 首次贡献:TUI MaxSizedBox 行数和 show-more diff 修复 | #6957 |
| 🆕 @makwingchi | 🎉 首次贡献:Daemon prompt ID 传播到 turn 事件 | #7082 |
| 🆕 @ARE404 | 🎉 首次贡献:子 agent 模型元数据持久化 | #7104 |
| 🆕 @ghisguth | 🎉 首次贡献:Gemma 4 原生工具调用 schema 适配 | #7177 |
| 🆕 @ComplexSimply | 🎉 首次贡献:更新检查失败改为警告、超时提升到 5 秒 | #7409 |
升级方式:运行 npm i @qwen-code/qwen-code@latest -g 即可升级到最新版本。
如有问题或建议,欢迎在 GitHub Issues 反馈!