Qwen Code 周报:Agent Team 并行协作、Durable /loop 跨重启存活、/cd 切目录
Qwen Code 本周发布 v0.18.0~v0.18.3 四个正式版,超过 100 个 PR 合入,覆盖四个方向:
多 Agent 并行协作。 之前 /fork 跑后台 Agent,各路 Agent 互不通信,结果要你自己拼。Agent Team 模式让模型创建命名团队,派生多个队友并行工作、互发消息、共享任务列表,最后由 leader 汇总一份报告。队友是长期存在的,做完一个任务后可以等着接收下一个,不是跑完就消失的一次性 subagent。
定时任务跨重启存活。 之前 /loop 安排的定时任务随会话消亡——重启后无声消失。Durable /loop 让持久化的定时任务写入文件,下次启动自动恢复,错过的周期任务补跑一次。
会话内切目录,不用重启。 /cd <path> 在不退出 CLI 的情况下切换当前会话的工作目录,session 文件自动迁移到新 workspace,system/directory context 自动刷新。之前想换个项目目录跑,只能重启。
✨ 新增特性
Agent Team:多个 Agent 并行协作,互发消息,共享任务
之前 Qwen Code 的 /fork 可以跑后台 Agent,但每个 Agent 是孤立的——你安排三个 Agent 并行审查代码,它们之间没有通信渠道,最后你得自己把三份结果拼在一起。
这周新增了 Agent Team 模式(实验性,opt-in)。启用后模型可以创建命名团队,派生多个 ” 队友 ” 并行工作。队友之间和 leader 之间可以互发消息、共享任务列表,最后由 leader 汇总一份统一报告。队友是长期存在的,不是 one-shot subagent——它可以做完一个任务后等着接收下一个,而不是跑完就消失。
默认关闭(experimental.agentTeam 设置或 QWEN_CODE_ENABLE_AGENT_TEAM=1 环境变量开启),启用后模型获得团队协作工具(创建/删除团队、向队友发消息、创建/更新/列出共享任务),Agent 工具新增 name 参数,派生长期存在的具名队友而非一次性子智能体。
你能用它做什么:
- 让三个 reviewer 并行审查这段代码(一个看错误处理、一个看竞态、一个看边界情况),给我一份汇总报告
- 协调一个团队构建一个小型书签应用
- 队友完成后自动向 leader 汇报,leader 给你一份统一摘要
详见 PR #4844
Durable /loop:定时任务跨重启存活
之前所有 /loop 都随会话消亡——安排 ” 每 30 分钟检查我的 PR”,重启 Qwen Code 后循环无声消失。这周 /loop 任务可以跨重启存活了。
当请求暗示持久化(” 每小时检查一次我的 PR”),任务按项目保存到 ~/.qwen/tmp/<项目哈希>/scheduled_tasks.json(不在工作区,git status 不会看到),下次启动自动恢复。默认仍是 session-only,临时提醒不会写文件。
关闭期间到期的一次性提醒,重启时模型会先确认再执行,绝不静默跑。错过的周期任务启动后补跑一次再恢复正常节奏。同一项目多个会话时只有一个触发持久任务,持有者崩溃后另一个几秒内接管。周期任务 7 天后自动过期(触发最后一次后删除)。
你能用它做什么:
- ” 每小时检查一次我的 PR” → 重启后继续跑,不用重新安排
- 错过的周期任务重启后自动补跑一次
- 临时提醒
/loop 5m remind me仍随会话消亡,不写文件
详见 PR #5004
/cd:不重启 CLI 就能切目录
之前想让 Agent 从另一个项目目录工作,只能退出重启。多仓库或父子 workspace 之间切换时很不方便,也没有在会话中移动 active tool context 的入口。
这周新增 /cd <path> 斜杠命令。它会校验目标目录、处理信任确认、更新 workspace roots 和 cwd 服务、把当前会话的 transcript/runtime/worktree 文件迁移到新 workspace session 目录、刷新 system/directory context。路径补全仍然可用。
你能用它做什么:
/cd ../another-project切换到相邻项目,会话文件自动迁移/cd /path/to/parent-repo在会话内上下导航,不需要重启- 未信任的路径会弹出确认,和首次启动时的信任流程一致
详见 PR #4890

Thinking 可折叠:推理过程不再占屏
之前模型的 thinking 块永远展开显示完整推理文本,占据大量屏幕空间。这周改成三态显示:
- 流式阶段:4 行固定高度滚动窗口实时显示推理内容 + 计时器(”∴ Thinking… 8s”)
- 完成后折叠(默认):一行显示总耗时(”∴ Thought for 15s”)
- 展开查看:后续会为 thinking 块分配独立快捷键;目前 Ctrl+O 触发的是 compactMode 切换,和 thinking 展开共用同一按键,独立的展开/折叠快捷键会在后续 PR 解耦
thinkingDisplayMode 设置被移除,改为单一的可折叠模式。thinking 块是 UI history only,不会发送给 API,session resume 行为不变。
你能用它做什么:
- 复杂推理时 thinking 折叠成一行,不碍事
- Ctrl+O 随时展开查看模型完整的推理过程
- 流式阶段有计时器,知道模型思考了多久
详见 PR #4598

MCP 审批门控:项目级 MCP 配置不再自动连接
之前项目 .mcp.json 或 workspace .qwen/settings.json 里声明的 MCP server 会自动连接——打开包含恶意 .mcp.json 的仓库,server 可能在你审查前就启动。
这周加了审批门控。project .mcp.json 和 workspace scope 的 MCP server 必须先经过审批才能连接。审批决策持久化在 <QWEN_HOME>/mcpApprovals.json,按项目 root + server name 建索引,并绑定配置 hash。修改 server 的 command/args/URL/environment/headers 会改变 hash,让它重新变成 pending——不会静默继承旧审批。
MCP server 优先级模型:user/default settings < project .mcp.json < workspace/system settings < session (ACP/IDE) < --mcp-config。项目配置可以覆盖用户配置,但不能覆盖企业 system 配置。
你能用它做什么:
- 打开新仓库时,项目级 MCP server 显示为 “Pending approval”,不自动连接
qwen mcp approve <name>或qwen mcp approve --all批量审批- 修改 server 配置后自动重新要求审批(hash 绑定)
qwen mcp list查看所有 server 的审批状态
详见 PR #4713

后台 Agent 权限冒泡:后台任务不再自动拒绝确认
之前后台 Agent 需要权限确认的工具调用(如 git push、rm)会被自动拒绝,报 “background agents cannot prompt for confirmation”,然后父会话重新在前台跑——等于后台白跑了一轮,又回到前台排队。
这周加了 approvalMode: bubble。subagent 配置里设置 approvalMode: bubble 后,后台 Agent 遇到需要确认的工具调用时,请求会冒泡到父会话的 Background tasks UI,你从 footer pill 打开详情就能审批。批准后 Agent 继续执行,拒绝后正常退出。bubble 是 subagent-only 的 approvalMode 值,不是 session 级的选项。headless/ACP/SDK 语境下仍然自动拒绝(因为没有 UI 可以回答)。
你能用它做什么:
- 自定义 subagent 声明
approvalMode: bubble,后台任务不再自动拒绝 - footer pill 显示 ”⚠ needs approval”,按 ↓ 打开详情审批(只支持单次授权,没有 ” 总是允许 ” 选项)
- 批准后 Agent 继续执行并返回结果,不用回到前台重跑
详见 PR #4955

/compress-fast:不调用 LLM,秒级压缩上下文
之前 /compress 依赖 LLM 侧边查询生成摘要(约 2-5 秒,消耗约 30K token)。对于本地模型部署或只想快速释放空间的用户来说太慢了。
这周新增 /compress-fast,纯规则驱动:强制 microcompaction 清理旧工具结果和媒体内容(保留最近 N 个),然后剥离所有模型回复中的 thinking 部分。零 API 调用、零 token 开销、即时响应。会写入 chat_compression checkpoint 到 JSONL,--resume 行为和 /compress 完全一致。
你能用它做什么:
/compress-fast立即释放数千 token,无延迟无成本- 适合长会话跑了一堆工具调用后想快速回收空间
/compress仍然可用——需要语义摘要质量时用它- 连续两次
/compress-fast,第二次会提示 “No compression needed”
详见 PR #4893

更多新功能
| 功能 | PR | 对你的影响 |
|---|---|---|
| Workflow P2:parallel() + pipeline() 并发扇出 | #4947 | 工作流可以并行跑多个 subagent,不再只能串行;errors-as-data 契约让部分失败不拖垮整批(opt-in,QWEN_CODE_ENABLE_WORKFLOWS=1 启用) |
| Workflow P3:schema + agentType + model + isolation | #5034 | agent({schema}) 返回结构化输出、agent({agentType:'Explore'}) 选 subagent 种类、agent({isolation:'worktree'}) 隔离文件修改 |
| Declarative Agent frontmatter v1 | #4842 | .qwen/agents/*.md 支持 permissionMode、maxTurns、color 三个 CC 2.1.168 对齐字段 |
| Declarative Agent mcpServers + hooks | #4996 | per-agent MCP server 和 hooks 在 subagent 运行时生效,行为和 CC 一致 |
| Tool output 分层截断 | #4880 | shell 30k、grep 20k、agent 32k 的 per-tool 预算;超大输出落盘到临时文件,不再撑爆上下文 |
| /rewind 跨 session 恢复 | #4897 | session resume 后 /rewind 能用了——之前快照链在内存中,重启后丢失 |
| Plan Approval Gate | #4853 | AUTO/YOLO 退出 plan mode 时跑设计审查 agent,验证计划合理性;模型新增 enter_plan_mode 主动降权 |
| A2UI surfaces over MCP | #4961 | daemon 的 web client 可以渲染 MCP 工具返回的交互式 A2UI 界面,用户操作也能回传 |
| Daemon mode merge | #4490 | 386 文件、+115K LOC 的 daemon batch 合入,覆盖 ACP Bridge、MCP Transport Pool、Permission Mediator、Web Shell 等 |
| /sessions list 查看历史会话 | #5187 | CLI 新命令,qwen sessions list 列出所有历史会话;--json JSON Lines 输出便于脚本管道,--limit 控制数量;Phase 1,后续会加 show 和 rm |
| /import-config Claude MCP 迁移 | #5095 | 一键导入 Claude Code / Claude Desktop 的 MCP 配置到 Qwen Code |
| Loop/Cron 默认启用 | #4950 | /loop 和 cron 工具默认可用;不需要 opt-in,关闭用 QWEN_CODE_DISABLE_CRON=1 |
| Computer Use 迁移到 cua-driver | #5051 | 从 ocu npm backend 迁移到 cua-driver-rs Rust binary,首次使用自动下载到 ~/.qwen/computer-use/,暴露完整 35 工具面 |
| Web shell 换行快捷键 | #5005 | Option+Enter / Cmd+Enter 在 web shell 里换行,和 CLI TUI 肌肉记忆一致 |
| Desktop git branch 显示 | #5082 | Desktop 应用工作目录徽章显示当前 git branch |
| FileSearch AsyncFzf worker thread | #4621 | 文件搜索索引构建移到 worker thread,不阻塞主线程 |
| Daemon status API | #5174 | qwen serve 新增 daemon 状态查询端点 |
| Workflow P4:meta + /workflows + phase-tree | #5094 | 工作流新增 /workflows 命令和 phase-tree 进度展示 |
| auto-skill 前缀规范 | #4839 | 自动生成的 skill 强制 auto-skill- 前缀,避免和内置 skill 冲名 |
| Skill frontmatter YAML parser 升级 | #4870 | skill frontmatter 用完整 YAML 解析器,支持 block scalars 和嵌套结构 |
| Skill user-invocable frontmatter | #5037 | skill 可以声明用户可直接调用的命令入口 |
| CHANGELOG.md 自动同步 | #4881 | release 发布时自动生成并同步 CHANGELOG.md |
🔧 重要修复
| PR | 修复内容 | 对你的影响 |
|---|---|---|
| #4982 | 消除 debugResponses 积累导致的 OOM | debug 模式不再撑爆内存 |
| #4914 | idempotent compaction + explicit GC + debug log defaults | OOM 防护加固,压缩更稳定 |
| #4929 | SSH 环境下 OSC 52 clipboard fallback | SSH 远程会话粘贴终于正常了 |
| #4852 | 光标在 hard-wrapped 行边界处左移卡住 | 光标移动不再在换行边界卡住 |
| #4963 | fork subagent 默认启用 | /fork 后台 Agent 不再需要手动开启 |
| #5012 | Windows 启动时缺少 printf 命令报错 | Windows 用户不再遇到启动报错 |
| #4967 | MCP 工具 SchemaValidator 数字字符串强制转换 | 自托管 LLM 的 MCP 工具调用不再因类型不匹配失败 |
| #5111 | Bound active tool result history | 工具结果历史不再无限增长 |
| #5036 | Hard-stop repeated identical tool calls | 模型不再无限重复同一个工具调用 |
| #4793 | Coerce non-string tool params for self-hosted LLMs | 自托管模型的工具参数类型兼容 |
| #4969 | 修正文档中的过期 settings keys、错误默认值和缺失命令 | 文档更准确,不再误导 |
| #5073 | QWEN.md/AGENTS.md 超过 15% 上下文窗口时启动警告 | 过大的 context instructions 不再静默挤占模型上下文 |
| #5165 | monitor 通知批量处理 + 过期事件过滤 | monitor stdout 每行不再触发一次完整 LLM roundtrip,token 消耗大幅降低 |
| #5196 | /dev/tcp、/dev/udp 重定向不再误判为文件 I/O | 权限系统不会把网络套接字操作错误归类为文件读写 |
| #5171 | 首次 chunk 前的传输层错误自动重试 | 流式调用在网络抖动时不直接失败,先重试一次 |
| #5155 | fork 显式化:省略 subagent_type 不再意外变成 fire-and-forget | 并行 agent 调用的结果能正确回流到父 turn,不会静默丢失 |
🎉 贡献者
感谢以下贡献者本周的贡献:
| 贡献者 | 贡献内容 |
|---|---|
| @qqqys | Agent Team #4844 、后台 Agent 权限冒泡 #4955 、A2UI over MCP #4961 、Auto mode 自修改防护 #4572 、Prompt hooks #4377 、autofix workflow #4989 |
| @LaZzyMan | Workflow P2 #4947 、Workflow P3 #5034 、Workflow P4 #5094 、Declarative Agent frontmatter #4842 、Declarative Agent mcpServers+hooks #4996 、Tool output truncation #4880 、Computer Use cua-driver #5051 、Mac code-signing #5013 |
| @callmeYe | Plan Approval Gate #4853 、Skill frontmatter YAML parser #4870 、Skill .toml 命令 #5017 、prompt-cache prefix #4896 |
| @tanzhenxin | Durable /loop #5004 、Loop/Cron 默认启用 #4950 、Skill allowedTools #4704 、Agent Team messaging harden #4988 |
| @doudouOUC | Daemon mode merge #4490 、/rewind 跨 session #4897 、Oversized tool results 持久化 #5042 、Daemon status API #5174 、monitor 通知批量处理 #5165 |
| @DragonnZhang | MCP 审批门控 #4713 、Desktop git branch #5082 、Desktop app #3778 、VSCode ACP 通知 #4358 、CLI 换行快捷键 #5005 |
| @zzhenyao | OOM 消除 #4982 、OOM 加固 #4914 、SSH clipboard #4929 、Windows printf #5012 |
| @he-yufeng | /cd 命令 #4890 、fork 默认启用 #4963 、背景 agent 保留 launch flags #5061 、oversized context 警告 #5073 |
| @chiga0 | Thinking 折叠 #4598 、DaemonTransport abstraction #5040 、TUI spacing #4595 |
| @BenGuanRan | /stats dedup #4995 |
| @yiliang114 | 独立安装自动更新 #4629 、PR 审查 CI #4549 、release 资产校验 #3855 、telemetry memory/CPU #4868 、传输错误自动重试 #5171 |
| @wenshao | Web shell 多项改进 #5069 、#5109 、#5125 、#5088 、#5096 |
| @ytahdn | Web shell token/settings #5066 、transcript events #5193 、custom footer #5166 |
| @ZijianZhang989 | /compress-fast #4893 、/sessions list #5187 、qwen3.7-plus model list #4953 |
| @tt-a1i | /import-config Claude MCP #5095 、Desktop git branch #5082 |
| @pomelo-nwu | qwen3.7-plus multimodal #4803 、SchemaValidator coerce #4967 |
| @Jerry2003826 | Bound hard rescue retries #4526 、Bound foreground shell output #4524 |
| @warmjademe | /dev/tcp/udp 权限修复 #5196 |
| @huww98 | /copy argument hint #5110 |
升级方式:运行 npm i @qwen-code/qwen-code@latest -g 即可升级到最新版本。
如有问题或建议,欢迎在 GitHub Issues 反馈!