Find a file
Shaojin Wen 4b014c96e5
fix(review): stop shedding the convergence observation first (#9715)
* fix(review): stop shedding the convergence observation first

The convergence paragraph is the only thing a posted review says about the
SHAPE of the loop rather than about the diff, and it was rank 0 — the second
block the body-budget ladder sheds, right after the mechanism-health note.
The reasoning was that an advisory paragraph decides nothing, so it should
yield before the deferral list and the not-reviewed disclosures.

The arithmetic does not support that ordering. Rendered bilingually the
paragraph is 603 characters when only the volume signal fired, 1,510 with
three recurrence clusters, and 2,372 with the clusters, the evidence caveats
and the land reading together — against a body budget of 56,830. Shed
second it can pay for at most 4% of an overflow, so any overflow larger than
the paragraph itself spent it and then went on to spend the deferral list and
the disclosures anyway. On the rounds this fires on — the high-volume ones,
which is the whole point — that is the normal case: the author lost the
reminder AND the disclosures.

It is rank 3 now, the last rank the ladder sheds. Still ranked, not untagged:
a body that genuinely cannot hold its blockers must drop an advisory, and
being ranked is what makes the trim notice name it when that happens. Ranked
last because it is the cheapest block to keep and the only one whose reader
is the pull request's author alone — the deferral list has a second durable
copy in the findings artifact, the disclosures are restated in the terminal
report, and the mechanism-health note above it is written for the operator,
who has the `HEALTH:` line.

The test that pinned the old order is replaced by two that pin the new one:
one sized to the window where the ladder sheds the disclosures and stops,
asserting the paragraph survives and the notice names what actually went; one
sized a rung further, asserting the paragraph goes last and is named when it
does, before the hard cut.

Mutation-verified: restoring `trim: 0` reddens both; making the block
untagged reddens the last-and-named test (and the existing terminal-copy
test); removing the rank's name from RANK_NAMES reddens only the naming
assertion.

* test(review): finish the rank move in the comments, and re-centre a constant

Two hygiene items the review caught on the trim-rank change.

A test title and its comment still said the convergence paragraph is the
first rank the ladder sheds — the sentence the change makes false. Three
other copies of that wording were updated with the move; this one was
missed.

And `keeps the terminal copy on the round that actually sheds the paragraph`
was sized at 55,850. Reaching a body that dropped the paragraph now means
sizing past every other rank, and the window that does so without also
truncating runs 55,825–56,350 — so the constant sat twenty-five characters
above its own floor, with no note saying it was tuned at all. It is 56,100
now, near the middle, and carries the same retuning instruction as the two
order tests. It also asserts the body was not truncated, so a future retune
that overshoots reads as a failure rather than as a pass for the wrong
reason.

Measured, not guessed: sweeping the blocker size in 25-character steps puts
the shed boundary between 55,800 and 55,825 and the truncation boundary
between 56,350 and 56,375. Dropping the constant back below the window
reddens the test, so it still reaches the case the terminal copy exists for.

* docs(review): finish the rank move where the rationale actually lives

Six comments still asserted that the convergence paragraph is the first thing
the overflow ladder sheds. The reviewer named five; a sweep found a sixth,
and two of the six were already inaccurate before this branch touched
anything.

Corrected:

- the `convergence` result-field doc — "sheds this paragraph first"
- the deferral block's own rank comment — "the first thing to yield", which
  ranks -1 and 0 had both preceded since before this branch
- the not-reviewed disclosures — "and before nothing else"
- the `CONVERGENCE:` stderr line's rationale — "the first thing the overflow
  ladder sheds"
- `save-artifact.ts`'s allow-list — "the ONE clause the overflow ladder sheds
  first"
- the body-budget suite's own statement of the policy under test, which
  listed two of the four ranks

Left alone, and verified correct: every "sheds first" attached to the
mechanism-health note, which is rank -1 and genuinely first
(`save-artifact.ts`, `save-artifact.test.ts`, the health-note terminal-copy
test), and the `keep`-ordering comment about the tail cut, which is not
about `trim` at all.

Each corrected site keeps its own reasoning — durability, the artifact, the
terminal copy — and states the ordering only as far as that reasoning needs,
rather than restating the whole argument a sixth time. Six copies of one fact
is what let it drift; the argument for the ordering lives at the convergence
block and the others point at it.

The durability rationale gets stronger, not weaker, and the comments now say
so: a body that sheds rank 3 has already shed every other rank, so the
terminal and artifact copies are the only ones left exactly when they fire.
2026-08-22 13:24:45 +00:00
.github fix(autofix): pass CI=true through the gate's env -i launches (#9649) 2026-08-22 12:30:42 +00:00
.husky Sync upstream Gemini-CLI v0.8.2 (#838) 2025-10-23 09:27:04 +08:00
.qwen feat(autofix): audit the approach instead of stopping on growth-budget breach (#9262) 2026-08-21 04:54:07 +00:00
.vscode Merge branch 'main' into feat/sandbox-config-improvements 2026-03-06 14:38:39 +08:00
docs feat(review): close Aone residual gaps — composeUrl, test-plan routing, a1 version floor (#9624) 2026-08-22 12:55:25 +00:00
docs-site Hide internal docs from docs site (#4357) 2026-06-01 15:55:14 +08:00
eslint-rules pre-release commit 2025-07-22 23:26:01 +08:00
integration-tests feat(core): make list_directory opt-in (disabled by default) (#9424) 2026-08-21 07:24:05 +00:00
integrations/external-context chore(release): v0.21.14 (#9594) 2026-08-20 15:21:01 +00:00
packages fix(review): stop shedding the convergence observation first (#9715) 2026-08-22 13:24:45 +00:00
patches feat(cli): add TUI image display tool (#8217) 2026-08-01 12:39:52 +00:00
scripts refactor(cli): keep acp-integration off serve internals (#8084) (#9144) 2026-08-22 12:39:08 +00:00
.dockerignore fix(cli): skip stdin read for ACP mode 2026-03-27 11:47:01 +00:00
.editorconfig pre-release commit 2025-07-22 23:26:01 +08:00
.gitattributes feat(installer): add standalone hosted install and uninstall flow (#3828) 2026-05-21 11:57:10 +08:00
.gitignore chore(ci): Add security hygiene: CODEOWNERS for release workflows, least-privilege permissions, security checks and Scorecard (#9008) 2026-08-14 01:22:53 +00:00
.npmrc chore: remove google registry 2025-08-08 20:45:54 +08:00
.nvmrc chore(deps): upgrade ink 6.2.3 → 7.0.2 + bump Node engine to 22 (#3860) 2026-05-11 17:29:50 +08:00
.prettierignore feat(acp): support /cd command in ACP sessions (#5903) 2026-06-27 14:47:40 +00:00
.prettierrc.json pre-release commit 2025-07-22 23:26:01 +08:00
.yamllint.yml feat(desktop): Add desktop app package with Qwen ACP SDK integration (#3778) 2026-06-11 21:57:20 +08:00
AGENTS.md fix(devx): fail with actionable message when unit-test build prerequisites are missing (#9149) (#9171) 2026-08-18 13:19:09 +00:00
CHANGELOG.md chore(release): v0.21.14 (#9594) 2026-08-20 15:21:01 +00:00
CLAUDE.md docs: rewrite CLAUDE.md to point to AGENTS.md as authoritative source (#5138) 2026-06-15 15:23:26 +08:00
CONTRIBUTING.md revert: remove local PR verification gate (#7031) 2026-07-16 11:24:38 +00:00
Dockerfile perf(ci): cut the E2E suite from ~40min to ~24min (#7798) 2026-07-28 12:56:34 +00:00
esbuild.config.js chore(deps): Clear high-severity CVE baseline and harden the security gate (#9584) 2026-08-21 07:43:32 +00:00
eslint.config.js refactor(cli): keep acp-integration off serve internals (#8084) (#9144) 2026-08-22 12:39:08 +00:00
eslint.legacy-filenames.mjs feat(workflows): add cooperative pause and resume (#8320) 2026-08-08 04:21:21 +00:00
LICENSE Sync upstream Gemini-CLI v0.8.2 (#838) 2025-10-23 09:27:04 +08:00
Makefile feat: update docs 2025-12-22 21:11:33 +08:00
package-lock.json perf(review): give review agents their own subagent type (#9678) 2026-08-22 09:51:25 +00:00
package.json chore(deps): Clear high-severity CVE baseline and harden the security gate (#9584) 2026-08-21 07:43:32 +00:00
README.md docs(readme): add Korean to the documentation language bar (#8836) 2026-08-10 07:34:11 +00:00
SECURITY.md fix: update security vulnerability reporting channel 2026-02-24 14:22:47 +08:00
tsconfig.json # 🚀 Sync Gemini CLI v0.2.1 - Major Feature Update (#483) 2025-09-01 14:48:55 +08:00
vitest.config.ts feat(channel): add QQ Bot (QQ机器人) channel adapter (#5202) 2026-06-19 06:32:52 +08:00

npm version License Node.js Version Downloads

QwenLM%2Fqwen-code | Trendshift

The open-source AI coding agent that lives in your terminal.

中文 | Deutsch | français | 日本語 | Русский | Português (Brasil) | 한국어

Why Qwen Code?

  • Agentic out of the box — Auto-Memory, Auto-Skills, SubAgents, Agent Teams, and MCP. Dynamic workflows, zero setup.
  • Open-source, inside and out — The framework and the Qwen models are open-source. They evolve together. No vendor lock-in.
  • Multi-protocol — Supports OpenAI, Anthropic, Gemini, and Qwen APIs. Any third-party provider or local model (Ollama / vLLM). Switch at runtime.
  • Beyond the terminal — IDE plugins, Desktop app, daemon mode, SDKs, and IM bots (Telegram / DingTalk / WeChat / Feishu).

Tip

Qwen Code is actively iterating on itself — using its own agent and models to file issues, submit PRs, review code, and run tests. Powered by the community, driven by AI.

Installation

Linux / macOS:

curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen-standalone.sh | bash

Windows:

irm https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen-standalone.ps1 | iex

Restart your terminal after installation to ensure environment variables take effect.

NPM / Homebrew

NPM (requires Node.js 22+):

npm install -g @qwen-code/qwen-code@latest

Homebrew (macOS / Linux):

brew install qwen-code

Quick Start

qwen          # Launch interactive terminal UI
# Inside the session:
/auth         # Configure your provider and API key

See the Authentication Guide and Settings Reference for detailed setup.

Qwen Code

How to Use Qwen Code

Mode Command Use Case
Interactive qwen Terminal UI with rich rendering, @file references, slash commands
Headless qwen -p "..." Scripts, CI/CD, batch processing — no UI
IDE VS Code, Zed, JetBrains
Desktop Qwen Code Desktop — GUI for macOS, Windows, Linux
Daemon qwen serve Shared agent session over HTTP+SSE (ACP). Multiple clients, one agent. (experimental) Docs
SDK TypeScript, Python, Java
IM Bot qwen channel Connect to Telegram, DingTalk, WeChat, or Feishu
SDK example (Python)
import asyncio

from qwen_code_sdk import is_sdk_result_message, query


async def main() -> None:
    result = query(
        "Summarize the repository layout.",
        {
            "cwd": "/path/to/project",
            "path_to_qwen_executable": "qwen",
        },
    )

    async for message in result:
        if is_sdk_result_message(message):
            print(message["result"])


asyncio.run(main())

Capabilities

If you know Claude Code, you already know Qwen Code — and then some. We've put significant effort into bringing Qwen Code to feature parity with Claude Code, improving both breadth and reliability across the board.

Feature Qwen Code Claude Code
SubAgents, Agent Teams, Dynamic Workflows
Auto-Memory, Auto-Skills, Hooks
Built-in Skills (/review, /batch, /loop, /bugfix…)
MCP, Plan Mode, LSP Integration
Auto Mode, Sandbox, Git Worktrees
Computer Use (desktop automation)
IDE Plugins (VS Code / JetBrains / Zed)
SDK
Headless Mode, Session Management
Open-source — model and framework
Multi-protocol (OpenAI / Anthropic / Gemini / Qwen + any provider)
Agent Arena (multi-model head-to-head on same task)
Daemon Mode — qwen serve (multi-client shared agent)
IM Channels (Telegram / DingTalk / WeChat / Feishu)

Ecosystem

  • Qwen Code Desktop — Official desktop app for macOS, Windows, and Linux

  • AionUi — A modern GUI for command-line AI tools including Qwen Code

  • Gemini CLI Desktop — A cross-platform desktop/web/mobile UI for Qwen Code

  • 🦞 Qwen Code Claw — Let other agents (Claude, Codex, etc.) delegate coding tasks to Qwen Code via ACP. Paste this prompt into your agent:

Use Qwen Code as a coding agent. First, fetch and read this skill reference:
https://raw.githubusercontent.com/QwenLM/qwen-code/refs/heads/main/.qwen/skills/qwen-code-claw/SKILL.md
Then follow the instructions inside to install, authenticate, and use Qwen Code via acpx for all coding tasks.
  • Aliyun Model Studio CLI — Official CLI for Aliyun's AI platform (bailian-cli). Extends Qwen Code with image/video generation, knowledge retrieval, app orchestration, and model deployment

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

Acknowledgments

This project was originally based on Google Gemini CLI v0.8.2. We gratefully acknowledge the Gemini CLI team's excellent work. Starting from Qwen Code v0.1, we stopped syncing with upstream and began independent development as a multi-protocol, multi-platform agent framework with deep integrations for Qwen models and beyond.