Skip to Content
BlogQwen Code Weekly: Zero-Config Built-in Computer Use, Feishu Integration, Compression Engine Rewrite
Back to Blog

Qwen Code Weekly: Zero-Config Built-in Computer Use, Feishu Integration, Compression Engine Rewrite

Qwen Team
2026-06-04

Qwen Code released v0.17.0 and v0.17.1 this week, with 60+ PRs merged across four directions:

Computer Use is now a built-in capability. Previously you had to install extensions, configure MCP, grant permissions, restart—most people couldn’t complete this workflow. Now 9 desktop automation tools are registered as deferred built-ins. The model prompts a one-time confirmation on first invocation, and everything else (binary download, macOS permission guidance, server lifecycle) is fully automatic. While Anthropic continues enhancing Computer Use in Opus 4.8 but locks it to their own model, Qwen Code runs with whatever model you choose—you control the cost.

Feishu integration is live. Qwen Code already supports WeChat integration, and this week Feishu was added too. WebSocket and Webhook connection modes, with Agent replies streamed via Feishu interactive cards in real-time, with a stop button. Just @ the bot in a Feishu group chat to use the Agent—no tool switching needed.

Long task compression no longer loses context. The old compression model split by character count at 70/30. Single-turn long tasks (typical computer-use workflows) have only one user message, and the splitting logic couldn’t find a split point, so it discarded all screenshots and the original user prompt. The new engine uses full-history summary + selective restoration: 9-section structured summaries preserve narrative continuity, and the most recent 5 files + 3 images restore state continuity. When Computer Use compresses mid-run, the Agent no longer goes “blind.”

CJK users can finally stop suffering. The IME candidate window for Chinese/Japanese/Korean input methods always jumped to the terminal’s bottom-left corner, miles away from where you’re actually typing. This week, by traversing the yoga tree to move the physical cursor to the visual cursor position, the candidate window finally follows along.

✨ New Features

Zero-Config Built-in Computer Use: Desktop Automation with One Confirmation

Qwen Code makes Computer Use a zero-config built-in capability. 9 tools including computer_use__list_apps, computer_use__get_app_state, computer_use__click are registered as deferred built-in tools. When the model first invokes any of them, a standard tool-permission dialog appears—you click Approve once, and everything after is automatic—npx -y open-computer-use mcp pulls the upstream binary (~50MB), macOS automatically guides Accessibility and Screen Recording permissions, and MCP server lifecycle is auto-managed.

Enabled by default (tools.computerUse.enabled: true). Disable it with one config change if you don’t want it. Runs with your chosen model, not locked to any specific provider.

What you can do with it:

  • Ask the Agent “open the Stocks app, click the first stock”—the Agent sees the screenshot, identifies UI elements, and clicks automatically
  • First use requires only one confirmation, subsequent calls go through directly
  • The model sends select:computer_use__list_apps,computer_use__get_app_state,computer_use__click to batch-load schemas, loading multiple tools at once
  • macOS permission guidance is fully automatic: Accessibility → Screen Recording → auto-reconnect after restart
  • Disable with tools.computerUse.enabled: false, or override the upstream binary version with QWEN_COMPUTER_USE_PACKAGE

See PR #4590 

Feishu Channel: Use Qwen Code Directly in Feishu

Qwen Code already supports WeChat integration, and this week Feishu was added. The new Feishu (Lark) channel adapter supports both WebSocket and Webhook connection modes. Agent replies are streamed via Feishu interactive cards in real-time, with a stop button. Quoted/replied context is correctly captured—whether it’s a text message or a card message.

Each message has independent state isolation, so multiple users won’t interfere with each other.

What you can do with it:

  • @ Qwen Code in a Feishu private chat or group chat to ask questions or assign tasks directly
  • Watch the Agent’s thinking and output process in real-time via streaming cards, interrupt anytime with the stop button
  • Quote a message to ask a question, and the Agent can see the quoted original text
  • Supports image and file attachments

See PR #4379 

Compression Rewrite: Long Tasks No Longer Lose Context

Last week we designed auto-compression as a three-tier ladder. This week we went one level deeper: the compression engine itself was rewritten.

The old model split history by character count into the first 70% (compressed into a summary) and the last 30% (preserved verbatim). The problem was with single-turn long tasks like computer-use—the user says just one thing like “open Safari, click the search result, take a screenshot,” then the Agent runs dozens of tool call rounds. The splitting logic requires at least two user messages to find a split point; single-turn can never find one, and the fallback replaces all screenshots and the original user prompt with a text summary. After recovery, the Agent goes “blind”—no visual context, no verbatim user intent.

The new engine uses summary + selective restoration:

  • 9-section structured summary: Section 6 forces verbatim quotation of every user message, ensuring user intent survives compression
  • Most recent 5 files restored: Size-adaptive—small files embed freshly-read complete content from disk, large files get only path references
  • Most recent 3 images restored: Each image carries a metadata header (turn index + source tool name + args), so the model can correlate visual state with the action that produced it

What you can do with it:

  • After compression during a long Computer Use task, the Agent can still see recent screenshots and your original instructions
  • /compress adds a focus directive: /compress focus on the auth bug—guides the summary to focus on what you care about (max 2000 characters)
  • Plan mode and background subagent state auto-recover after compression, no silent loss

See PR #4599 , #4688 

Approval Mode Renamed: Default → Ask Permissions

The default approval mode was previously called “Default”—a name that only tells you “this is the default,” not what permissions the mode actually grants. Other modes (Plan, Auto-Edit, Auto, YOLO) all directly describe behavior; Default was the only exception.

Renamed to Ask Permissions, directly answering “will the Agent ask me in this mode?” Simultaneously aligned with Claude Code’s naming for the equivalent mode, reducing cognitive cost across tools.

Internal enum value ApprovalMode.DEFAULT, "default" in settings.json, and CLI command /approval-mode default all remain unchanged—zero migration for existing configs. Translations for 9 locales updated simultaneously.

What you can do with it:

  • The Settings dialog shows Ask permissions in the Tool Approval Mode row—instantly clear that this mode will ask for your consent
  • The /approval-mode selector shows behavior descriptions, not a meaningless “Default”
  • Existing settings.json and CLI commands are fully compatible, no changes needed

See PR #4674 

IME Candidate Positioning: CJK Input Methods Finally Work

Qwen Code renders the visual cursor with reverse-color characters, while the physical cursor is hidden and defaults to the terminal’s bottom-left corner. CJK input method users’ candidate windows always follow the physical cursor—an entire screen away from where you’re actually typing. Hermes and OpenClaude have the same issue; their solution is to fork the Ink source code.

Qwen Code takes a different approach: using addLayoutListener (triggered after yoga’s calculateLayout(), zero jitter) to traverse the yoga tree and get the input component’s absolute position, then moving the physical cursor to the visual cursor position. Uses patch-package to expose ink/dom and ink/components/CursorContext internal modules without forking all of Ink.

What you can do with it:

  • Switch to Sogou/Apple Pinyin or other CJK input methods, and the candidate window appears next to the cursor instead of jumping to the bottom-left
  • The candidate window follows when you move the cursor with arrow keys
  • Normal conversations, multi-line input, and history scrolling are unaffected

See PR #4652 

More New Features

FeaturePRImpact
Virtual Viewport: opt-in virtualized history rendering (ui.useTerminalBuffer: true), only renders visible area, keyboard/mouse scrolling, fixes long conversation flickering and lag#4146 1000-turn conversations no longer flicker/lag/scroll-storm, directly fixes #3702 #2950 #3118 #2972
Fork SubAgent Gating + Prompt Discipline: disables fork in non-interactive mode, injects “Don’t peek / Don’t race” constraints in interactive mode#4574 Fork no longer accidentally triggers in CI/headless; in interactive mode the Agent won’t peek at fork intermediate results or fabricate completion status
Memory Pressure Monitoring: cgroup-aware RSS + V8 heap monitoring, auto-clears FileReadCache#4403 Automatically releases cache during long session memory pressure, avoiding OOM
Pre-OOM Auto Diagnostic Dump: writes diagnostic JSON to disk at hard/critical pressure#4654 Diagnostic data persists after process crash, can be directly attached to bug reports
Background Shell Completion Notifications: terminal notifications when background tasks complete/fail/cancel#4355 No need to manually ask the Agent if background tasks are done
Atomic Write Phase 2: credentials/memory/config/JSONL all use atomic writes#4333 kill -9 / OOM / power loss no longer corrupts credential files or causes JSONL record sticking
CPU Profiling: /doctor cpu-profile or QWEN_CODE_CPU_PROFILE=1 or SIGUSR1 signal trigger#4620 Three ways to generate .cpuprofile, load directly in Chrome DevTools for analysis
Settings JSON Corruption Warning: warning dialog when config file has syntax errors#4560 Manual settings.json editing errors no longer silently swallowed
Statusline Customization: respectUserColors + hideContextIndicator options#4670 Status bar colors and context indicator adjustable per preference
MiniMax-M3 Model: added MiniMax-M3 model configuration#4668 Select MiniMax-M3 directly from /model
Web Shell /delete: batch delete sessions#4603 Batch clean old sessions in Web UI
Runtime MCP add/remove: dynamically add/remove MCP servers at runtime#4552 Manage MCP servers without restarting
Triage Skill: built-in issue/PR classification skill#4577 Agent can do initial issue and PR classification for you
Simplify Skill: built-in code simplification skill#3570 Agent has a systematic code simplification workflow
Agent Reproduction Workflows: Agent issue reproduction workflows#4118 Standardized Agent behavior issue reproduction and debugging workflow
Shell Subprocess Context Env Vars: session/agent/prompt ID injected into shell environment variables#4649 Custom scripts can access current session context
AUTO Denial Observability + Caps: observability and caps for AUTO mode denials#4476 What AUTO mode denied and why—now there’s data
Web Shell Inline Terminal: inline terminal command interface in Web UI#4710 See command execution directly in Web UI
Computer Use Signed Package: uses signed + notarized @qwen-code/open-computer-use fork#4726 macOS Gatekeeper no longer blocks Computer Use binary
Desktop Multi-Brand Support#4581 Desktop app supports multi-brand builds
Daemon Non-Blocking Prompt#4585 POST /prompt immediately returns 202 + promptId, non-blocking

🔧 Important Fixes

PRFixImpact
#4644 Replace structuredClone with shallow copy/tail variant during resume, preventing OOMResuming long sessions no longer causes memory overflow from deep-copying entire history
#4650 /memory toggle state correctly persists after dialog reopening/memory switch no longer loses settings after reopening
#4605 Disable undici 300s bodyTimeout (no-proxy Node.js path)Long model calls no longer interrupted by 300-second timeout
#4580 Fix rewind false “compressed turn” error when mid-turn messages existConversation rewind no longer falsely reports errors in compressed sessions
#4505 DashScope correctly sends enable_thinking when reasoning is disabledDashScope users no longer see reasoning output after disabling thinking
#4540 Expose Anthropic empty stream provider errorClear error message when Anthropic provider returns empty stream, no longer silently hangs
#4474 Load ~/.env variables before settings variable resolutionEnvironment variable references in settings.json can finally correctly resolve variables defined in ~/.env
#4431 atomicWriteFile preserves file uid, avoiding shared write file corruptionAtomic writes in multi-process scenarios no longer change file ownership
#4689 Daemon isolates parallel subAgent text streamsParallel subAgent outputs no longer interleave in transcripts
#4701 Arena model selection dialog Space key fixSpace key finally works when selecting models in Arena mode
#4558 Suppress completion menu before history restore text editPressing ↑ to restore history input no longer immediately triggers completion menu
#4623 Screenshot-triggered compression correctly labeled in auto-compact notificationCompression notifications no longer mislabel screenshot-triggered compression as regular compression
#4531 Guard oversized resume history sendsResuming ultra-long sessions no longer fails due to oversized payload
#4439 Fix hostile provider usage token countingAbnormal token counts from certain providers no longer display incorrect data

🎉 New Contributors

Thanks to the following first-time contributors:

ContributorContribution
@kagura-agent Display startup warnings on stderr before TUI rendering #4461 
@yuanyuanAli Feishu (Lark) channel adapter #4379 
@he-yufeng IDE proxy requests use undici fetch #4607 , hide completed sticky todos #4635 , honor list extensions flag #4673  and more
@zzhenyao Settings JSON corruption warning dialog #4560 , IME candidate positioning #4652 , Statusline customization options #4670 
@Pepograminger Disable undici 300s bodyTimeout #4605 
@InfiniteUselessness Update @google/genai dependency to 2.6.0 #4485 
@ZijianZhang989 Arena model selection Space key fix #4701 

How to upgrade: Run npm i @qwen-code/qwen-code@latest -g to upgrade to the latest version.

If you have questions or suggestions, feel free to provide feedback on GitHub Issues !

Last updated on