Qwen Code 周报:@ 直接引用历史会话上下文、后台 Agent 完成后常驻可继续追问、/learn 看视频就能学技能
Qwen Code 本周发布 v0.21.0 和 v0.21.1 两个正式版本,290+ 个 PR 合入。
会话和 Agent 的生命周期补上了两块短板。 之前想复用早期对话的上下文,只能 resume 或 fork,当前对话会被打断。现在输入 @ 就能在补全列表里看到本项目的历史会话,选中后注入一份只读摘要,当前对话保持独立。后台 Agent 那边,之前跑完就销毁,追问一句得从头重建;现在完成的 Agent 运行时直接驻留在上级会话里,send_message 接着聊,退出进程再回来 roster 也能恢复。
技能系统从 ” 手动挡 ” 往前走了一步。 /learn 之前只能处理文本、文档和网页,教程视频得自己看完再手动写技能。现在直接丢一个 MP4 进去,Agent 看完自动蒸馏成可复用的 Skill。技能目录也不用再复制多份——settings 里配一下路径,Claude Code、Codex、Qwen Code 共享同一个技能库。
可观测性和集成也在补齐。 /stats 终于有了 TTFT、生成时长、TPS,换模型对比流式性能不用再靠体感。GitHub Channel 适配器上线,在 Issue 或 PR 里 @机器人就能触发 Agent 回评论。Web Shell 这周动了 40+ 个 PR:Git 分支选择器、commit 对话框、创建 PR 流程、Channel 管理页面、文件渲染预览、语音输入——一次全上了。
✨ 新增特性
/learn 支持视频输入:看个教程视频就能变成可复用技能
之前 /learn 能处理文本、文档、目录和网页,但视频不行。你有一个 15 分钟的操作录屏,想把它变成 Agent 能用的技能?得自己看完,手动写 SKILL.md。
现在 /learn 支持本地 MP 4、WebM、MOV、M 4 V 文件和 HTTP(S) 视频直链。命令会先检查当前模型是否支持视频输入,通过后把视频交给 Agent 蒸馏,输出一个 learned-skill-* 目录,包含 SKILL.md 和带时间戳的 references/source.md 来源记录。YouTube 页面 URL 会被识别并拒绝,提示你先下载为本地视频。非视频输入保持原有行为不变。
你能用它做什么:
- 把同事的操作录屏直接变成团队可复用的技能
- 看完一个教程视频,
/learn tutorial.mp4一键提取操作步骤 - 来源记录标注 “source-grounded, not execution-verified”,区分 ” 看来的 ” 和 ” 验证过的 ”
详见 PR #7497
@ 引用历史会话:不用恢复或 fork,当前对话直接调用过往上下文
之前想复用早期会话的上下文,只能 resume 或 fork。resume 会离开当前对话,fork 会创建一个新分支——对于 ” 只想引用一下之前的结论 ” 这种轻量需求,两者都太重了。
现在在输入框里打 @,补全下拉框会按全部、文件、会话、MCP、扩展分类展示结果,左右方向键切换分类。选中一个历史会话后,Qwen Code 会注入一份确定性生成的只读摘要:保留用户和助手的可见文本,工具结果压缩成单行状态,整体控制在 8k token 预算内,优先保留最新内容。当前对话完全不受影响,旧会话也不会被恢复或 fork。
你能用它做什么:
- 在当前任务中引用之前调试会话的结论,不用切来切去
- 把上一次代码审查的反馈作为上下文传给新任务
- 跨会话积累项目知识,不用每次重新解释背景
详见 PR #7302

后台 Agent 常驻与跨会话恢复:完成后不用重建,追问一句接着跑
之前后台 Agent 完成就销毁运行时。想追问一句?得从 JSONL transcript 完整重建 chat、工具、registry 和 provider 缓存——慢,而且进程内的状态全丢了。更糟的是,退出进程再恢复上级会话,已完成的 Agent 直接变成 Task not found。
这周两个 PR 一起解决了这个问题。第一步,完成的后台 Agent 运行时直接驻留在上级会话中,send_message 到同一个 task_id 会复用实时 chat、已准备的工具、provider 缓存和启动时模型,不再从 transcript 重建。第二步,退出进程再恢复上级会话时,被中断的 Agent 以 paused 状态回来,已完成的以 completed 状态回来,任务 ID 不变。新增的 list_agents 工具可以查看当前会话所有可寻址的后台 Agent。
你能用它做什么:
- 后台 Agent 跑完代码审查,追问 ” 把第三个建议展开说说 “,不用重建
- 退出终端第二天回来,
list_agents看到昨天的 Agent 还在,接着干活 - 迭代修正时 Agent 保持启动时模型,不受上级会话切换模型影响
自定义技能目录:一套技能多个 Agent 共享
之前技能只能放在 ~/.qwen/skills/ 下。如果你同时用 Claude Code 和 Qwen Code,同一套技能得复制两份,改了一个忘了另一个是常态。
现在在 settings.json 里加一个 skills.directories 数组,指定额外的技能扫描路径。路径支持 ~ 展开,递归扫描 SKILL.md 文件。默认目录优先级更高,同名技能以默认目录为准。
你能用它做什么:
~/.agent/skills放一套技能,Claude Code、Codex、Qwen Code 共用- 团队共享技能库放在
/shared/team-skills,所有人自动同步 - 按项目组织技能,不用全塞在一个目录里
详见 PR #7395

/stats 生成性能指标:TTFT、TPS 一目了然
之前 /stats 展示的是会话时长、请求总量、工具调用和文件变更。想对比两个模型的流式响应速度?没有 TTFT,没有 TPS,只能靠体感。
现在 /stats 和 Session 标签页新增 Generation Metrics 区域:最近一次请求的模型名、TTFT(首 Token 延迟)、生成时长、输出 Token 数和 TPS,以及会话级的计时请求数、平均 TTFT 和加权 Session TPS。生成时长按 api_duration - ttft 计算,TPS 分母是首可见 Token 到生成完成的区间。内部辅助 prompt 不计入,每日/月度用量记录不变。
你能用它做什么:
- 换模型后跑一轮
/stats,直接看 TTFT 和 TPS 的差距 - 对比本地后端和云端 API 的流式性能
- 会话级加权 TPS 反映整段对话的真实吞吐
详见 PR #7677

GitHub Channel 适配器:在 Issue 和 PR 里 @机器人直接触发 Agent
之前 Qwen Code 的 Channel 支持飞书、微信、QQ、Telegram,但 GitHub 不行。想在 Issue 里 @机器人让它帮忙看个问题?做不到。
现在 GitHub Channel 适配器上线了。配置一个 classic PAT,启动 Channel 后它会轮询 GitHub 通知 API。在 Issue 或 PR 评论里 @机器人,Agent 读取评论内容并在同一线程回复。新建 Issue 时 body 里 @机器人也能触发(首次接触)。去重基于 cursor 评论窗口而非 GitHub 的异步 markNotificationsAsRead,bot 自评论会被过滤防止循环。支持 GitHub Enterprise(通过 baseUrl 配置)和代理。
你能用它做什么:
- 在 Issue 里 @机器人:” 帮我看看这个报错 “,Agent 直接回评论
- PR 审查时 @机器人补充上下文,不用切到终端
- 轮询间隔可配置(默认 60s),按需调整响应速度
详见 PR #7632

Web Shell 全面更新:Git 操作、Channel 管理、文件预览、语音输入一次到位
Web Shell 这周有 40+ 个 PR 合入,从 Git 工作流到 Channel 管理到输入体验,几乎每个角落都动了。
Git 操作闭环了。 之前 Web Shell 里只能看分支,不能切、不能提交、不能建 PR。现在新建会话时有 Git 模式选择器(#7471 ),会话内可以切分支、打开 commit 对话框、直接创建 PR(#7731 )。Worktree 会话也能打开 Changes 和 History 对话框了(#7695 )。侧边栏还加了只读 GitHub PR 面板(#7683 ),不用切到浏览器就能看 PR 状态。
Channel 管理有页面了。 之前配置 Channel 得手动编辑 settings.json。现在 Web Shell 里有完整的 Channel 管理页面(#7793 ),支持配置流程(#7893 )和配对请求管理(#7909 )。
文件预览和 Agent 管理。 文件列表支持渲染预览了(#7467 ),不用点开看原始内容。子 Agent 会话在详情面板可见(#7380 ),后台 Agent 状态实时同步(#7561 )。Workspace 选择器(#7390 )和原生文件夹选择器(#7849 )让多项目切换更顺手。
输入体验。 语音输入限定在当前 composer workspace(#7754 ),支持按住说话模式(#7839 ),移动端稳定性也修了(#7806 )。触屏设备回退到纯 textarea composer(#7587 )。粘贴内容不再丢失(#7824 )。终端支持 256 色和 truecolor SGR 序列解析(#7620 )。
其他改进。 侧边栏最宽可以拉到窗口一半(#7778 ),会话名 hover 显示全称(#7662 ),Monitor 任务有详情面板(#7817 ),长会话渲染性能优化(#7408 )。Shadow DOM 隔离防止宿主 CSS 污染组件样式(#7551 )。输入 “BTW” 会建议开一个侧问题(#7935 )。
📊 更多新功能
图片缩放工具。 大图片发给模型前会被缩小,小字和图表标签经常糊掉。现在支持图片输入的模型可以用 zoom_image 工具从原始全分辨率文件裁剪指定区域,放大后返回 JPEG 视图。支持 PNG、JPEG、WebP,自动处理 EXIF 方向。详见 PR #7809
Subagent 模型等级。 不同任务需要不同成本的模型,但调用方不应该接触具体模型 ID。现在可以在 settings 里把 small、high 等语义等级映射到模型 selector,Agent 工具 schema 只暴露等级名。Fork 和命名 teammate 不接受该参数。详见 PR #7702
可配置图片生成模型。 图片生成不再绑定默认模型,可以在配置中指定。详见 PR #7607
外部语料检索工具。 新增 context_search MCP 工具,按需从外部知识库或 RAG 服务检索上下文。只读、不自动召回、不写入,Provider 和语料库由管理员配置固定。包含 Mem0 和通用 HTTP 两个适配器。详见 PR #7586
系统身份覆盖。 通过环境变量 QWEN_SYSTEM_IDENTITY_MD 可以覆盖核心身份提示。详见 PR #7478
MCP 强制重连。 qwen serve 支持强制重连 MCP 服务器,不用重启整个进程。详见 PR #7488
Workspace trust 热重载。 修改 workspace trust 配置后,运行中的 daemon 立即应用新策略,不用重启。详见 PR #7268
Skill 默认禁用状态。 技能可以设置为默认禁用但允许显式启用(soft default),硬禁用则不可覆盖。详见 PR #7357
Session-scoped runtime MCP。 ACP 会话支持会话级运行时 MCP 配置。详见 PR #7847
钉钉图片发送。 钉钉 Channel 支持发送图片消息。详见 PR #7698
Telegram forum topic 路由。 Telegram Channel 的回复现在能正确路由到 forum topic。详见 PR #7612
Review 双语评论。 当 PR 描述是中文时,/review 发布的审查评论会自动使用中英双语。详见 PR #7564
OAuth 登录链接优化。 OAuth 登录 URL 现在以 OSC 8 超链接格式输出,终端里直接点击就能跳转。详见 PR #7255
VP 选择复制保留语义文本。 在 VP 模式下选中文本复制时,保留语义文本而非渲染格式。详见 PR #7286
👏 体验优化
Shift+Enter 终于能换行了。 Ghostty 等终端在 Kitty 协议未启用时,Shift+Enter 会被误判为 Escape,触发对话回退提示。现在修正了 CSI-u 解析,Shift/Ctrl/Alt+Enter 在 VP 和非 VP 模式都能正常换行。流式 Thinking 块的高度也不再抖动——窗口只增不减,不再跟随终端高度漂移。详见 PR #7397
大粘贴不再卡死。 之前粘贴 260K 字符会触发 260K 次逐字符 keypress 事件,阻塞约 1.7 秒。现在在 stdin 层拦截 bracketed paste 标记,整块处理,降到约 8ms。粘贴时 Footer 还会显示进度条(Pasting… ████████░░░░░░░░ 42% (128 KB)),支持 Ctrl+C 中断。详见 PR #6506
流式重试延迟可配置。 新增 retryInitialDelayMs 和 retryMaxDelayMs 设置,可以针对特定 provider 的配额窗口调整 SSE 流式重试延迟。详见 PR #7674 、#7666
TUI 图标列对齐。 所有 TUI 图标列统一为 2 字符宽度,不再参差不齐。详见 PR #7633
排队消息显示修正。 排队消息的显示样式和排序修正,不再错位。详见 PR #7381
/copy 命令修复。 /copy 带裸索引和 /copy <message> <index> 选择代码块现在都能正常工作。详见 PR #7789 、#7883
更新检查改用 npm view。 版本更新检查从 update-notifier 切换到 npm view,更可靠。详见 PR #7528
IME 光标对齐。 Footer 更新后输入法光标不再错位。详见 PR #7711
🔧 重要修复
| 修复 | PR | 对你的影响 |
|---|---|---|
| Worktree 隔离空 working_dir 规范化 | #7403 | Agent 工具设置 isolation: worktree 时,空 working_dir 不再导致异常 |
| qwen3.8-max 和 kimi-k3 图片模态支持 | #7491 | 这两个模型现在可以正常处理图片输入 |
| 后台 Agent 单槽让位 | #7258 | 单槽模式下后台 Agent 正确让位给前台 |
| DashScope thinking 必需工具回避 | #7661 | DashScope 模型在 thinking 模式下不再因必需工具报错 |
| Fork subagent 可发现 | #7460 | Fork 出的子 Agent 现在能被正确发现和寻址 |
| 工具结果图片桥接给纯文本模型 | #7484 | 纯文本模型收到工具结果中的图片时不再崩溃 |
| 429 配额耗尽快速失败 | #7842 | 永久性配额耗尽的 429 不再静默重试,直接报错 |
| 瞬态网络错误自动重试 | #7898 | API 调用中的瞬态网络错误自动重试,减少手动重跑 |
| Gitignore 模式处理 | #7763 、#7764 、#7765 | 前导空格、尾部斜杠、反斜杠转义的 gitignore 规则现在被正确解析 |
| splitCommands 引号处理 | #7526 、#7870 | 单引号内的反斜杠和命令替换内的引号不再被错误解析 |
| sed 模式安全拒绝 | #7775 、#7790 | 以 ] 开头的 bracket 表达式和 -i 不在最后的组合 flag 会被安全拒绝 |
| Grep 前导短横线 | #7863 | 搜索模式以 - 开头时不再被误认为选项 |
| Cron 步进日字段语义 | #7464 | 步进日字段现在与 Vixie cron 语义一致 |
| 会话删除时 usage 保护 | #7425 | 删除会话时用量数据不再丢失 |
| 嵌套后台请求拒绝 | #7593 | 嵌套的后台 Agent 请求会被正确拒绝 |
| reasoning effort 禁用保持 | #7541 | 禁用的 reasoning effort 设置不再被意外重置 |
| 系统 rg 回退 | #7203 | 内置 ripgrep 无法运行时自动回退到系统 rg |
| Plan 退出通知 | #7682 、#7744 | 用户手动退出 plan mode 时模型能收到通知 |
| 扩展 Agent 不可修改 | #7245 | 扩展提供的 Agent 不再被意外更新覆盖 |
| inline math 识别 | #7701 、#7741 | 单字符数学表达式、转义美元符号和代码 span 中的数学内容现在被正确识别 |
👥 贡献者
| 贡献者 | 贡献内容 | 参考 PR 链接 |
|---|---|---|
| @wenshao | autofix 多项增强(stale base 恢复、基础设施重试、双语报告)、review 增强(mutation test、lens 借用、script-lint gate)、Web Shell Git 操作(分支选择器、commit 对话框、PR 面板)、triage 安全加固 | #7482 , #7564 , #7731 , #7683 |
| @chinesepowered | daemon 安全(secret 清理、env 隔离)、核心工具安全(sed/grep/gitignore/splitCommands 修复)、SDK 校验加固、OpenAPI 转换修复 | #7256 , #7527 , #7763 , #7863 |
| @ytahdn | Web Shell 核心开发(文件预览、Shadow DOM 隔离、子 Agent 面板、长会话性能、Channel 管理、语音输入、移动端适配) | #7467 , #7551 , #7380 , #7408 |
| @doudouOUC | 遥测对齐 ARMS、启动性能优化(undici/GenAI SDK 懒加载、ACP 延迟初始化)、serve 可靠性(epoch cursor、SSE 加固)、SDK-Java daemon transport | #7536 , #7455 , #7458 , #7463 |
| @yiliang114 | CI/发布修复、模型图片模态支持、serve 竞态修复、更新检查改进、subagent 模型等级、release 脚本加固 | #7491 , #7556 , #7702 , #7528 |
| @qqqys | Goal v3 全套(状态协议、证据验证、运行时编排、worker tools、持久化回放)、Channel 基础设施(workspace 配置、生命周期、管理 API、daemon loop)、图片生成模型配置 | #7517 , #7664 , #7637 , #7607 |
| @chiga0 | Shift+Enter 换行修复、Thinking 块闪烁修复、VP 复制语义文本、排队消息显示、TUI 图标对齐、ink 补丁修复、网络错误重试 | #7397 , #7286 , #7381 , #7898 |
| @DragonnZhang | 后台 Agent 常驻、roster 恢复、fork subagent 可发现、usage 持久化、系统提示分层构建、Anthropic cache breakpoint | #7426 , #7459 , #7460 , #7912 |
| @qwen-code-dev-bot | 自定义技能目录、钉钉 mention 修复、plan mode 修复、CI 容器修复、git 分支轮询 | #7395 , #7473 , #7682 , #7830 |
| @ComplexSimply | 触屏 textarea composer、后台 shell 状态 sidecar、输出流 flush 等待、insight 本地时间 | #7587 , #7669 , #7833 , #7670 |
| @zjunothing | usage salvage 加固、Channel 多任务消息修复、plan 退出通知、插件 extension ID 修复、plan 文件读取 | #7425 , #7608 , #7676 , #7678 |
| @patrick-andstar | workspace 选择器初始化、嵌套后台请求拒绝、ACP 空闲取消修复、npm 更新清理 | #7518 , #7593 , #7598 , #7539 |
| @LaZzyMan | /learn 视频输入、@ 历史会话引用、大粘贴性能优化、工具结果图片桥接 | #7497 , #7302 , #6506 , #7484 |
| @hogeheer499-commits | 后台 Agent 单槽让位、Telegram forum topic 路由、DashScope thinking 修复、SSE 重试延迟 | #7258 , #7612 , #7661 , #7666 |
| @destire-mio | cron 步进日语义修复、/stats 生成性能指标、扩展 Agent 保护 | #7464 , #7677 , #7245 |
| @OrbitZore | GitHub Channel 适配器、senderId 修复 | #7632 , #7727 |
| @CubeLander | inline math 识别修复、转义美元符号处理 | #7701 , #7741 |
| @dreamWB | locked workspace 会话操作修复、composer footer 渲染器 | #7629 , #7856 |
| @mvanhorn | worktree working_dir 规范化、xterm 诊断日志静默 | #7403 , #7663 |
| @water-in-stone | workspace 选择器按钮、IME 光标对齐 | #7390 , #7711 |
| @jay666mnj | SSE 重试延迟配置、transcript 分页回归测试 | #7674 , #7657 |
| @callmeYe | daemon 调用上下文传播、语音按住模式 | #7279 , #7839 |
| @he-yufeng | tool-call 路由修复、release 脚本重试加固 | #6981 , #7535 |
| @BZ-D | MCP 强制重连 | #7488 |
| @ZijianZhang989 | 记忆召回遥测 | #7393 |
| @yuanyuanAli | Web Shell renderChatHeader 插槽 | #7553 |
| @tanzhenxin | 用量统计环境变量覆盖 | #7579 |
| @han-dreamer | auto-memory 索引读取记录 | #7468 |
| @BenGuanRan | Channel 显式投递 | #7388 |
| 🆕 @ovochouovo | 🎉 首次贡献:JSDoc 参数名对齐、多工具 compact 摘要显示工具描述 | #7492 , #7589 |
| 🆕 @Truraly | 🎉 首次贡献:空 working_dir 占位符忽略 | #7343 |
| 🆕 @zjgzx1988 | 🎉 首次贡献:QWEN_SYSTEM_IDENTITY_MD 系统身份覆盖 | #7478 |
| 🆕 @dtometzki | 🎉 首次贡献:更新检查改用 npm view | #7528 |
| 🆕 @WladmirJunior | 🎉 首次贡献:reasoning effort 禁用保持 | #7541 |
| 🆕 @nerdalytics | 🎉 首次贡献:npm shim 误判修复 | #7545 |
| 🆕 @harjothkhara | 🎉 首次贡献:系统 rg 回退 | #7203 |
| 🆕 @PratikWayase | 🎉 首次贡献:终端历史分页错误持久化 | #7709 |
| 🆕 @Sparkle6979 | 🎉 首次贡献:重复 skill 斜杠命令补全 | #7720 |
| 🆕 @VitaliBabkin | 🎉 首次贡献:safe-mode 保留调用方 MCP 服务器 | #7827 |
| 🆕 @VectorPeak | 🎉 首次贡献:heatmapDays 参数严格解析 | #7218 |
| 🆕 @Eric-GoodBoy-Tech | 🎉 首次贡献:QQ Bot 会话恢复修复 | #7722 |
| 🆕 @carffuca | 🎉 首次贡献:BTW 侧问题建议 | #7935 |
| 🆕 @samuelhsin | 🎉 首次贡献:Skill 默认禁用状态 | #7357 |
| 🆕 @ZevGit | 🎉 首次贡献:虚拟化终端历史默认开启 | #5738 |
| 🆕 @gauravyad86 | 🎉 首次贡献:MCP OAuth 回调加固 | #7510 |
升级方式:运行 npm i @qwen-code/qwen-code@latest -g 即可升级到最新版本。
如有问题或建议,欢迎在 GitHub Issues 反馈!