Qwen Code 0.22.3 named sessions: manage eight persistent Channel tasks without crossing owners
Quick answer
Qwen Code 0.22.3, released on August 28, 2026, adds owner-scoped named sessions to its experimental daemon-managed Channels. With sessionScope: "user" and multiSession: true, one sender can keep as many as eight persistent tasks in the same chat, inspect them with /sessions, and select an exact task with /session use.
This is useful for keeping work such as review, release, and docs separate without opening another chat. It is not parallel task execution and it is not worktree isolation. Each owner is keyed by the channel instance, chat, and sender, while every named task still uses the shared workspace. Qwen Code refuses to switch away from, reopen, or close a task that is running or waiting for permission; an exact-load failure leaves the current selection unchanged instead of silently creating a replacement.
The safe rollout is therefore: prove the owner boundary, prove exact session recovery, and prove shared-workspace behavior before letting a real team rely on the feature.
Who this is for
This guide is for developers operating Qwen Code through DingTalk, WeChat, Telegram, Feishu, or another Channel adapter in daemon-managed mode. It is especially useful when one person needs several durable lines of work in a single conversation but the deployment must not mix another sender's history.
If your question is how to constrain the tools those sessions can invoke, use the separate Qwen Code tool-surface and auto-permission checklist. Named sessions organize context; they do not narrow filesystem, command, network, or credential authority.
What changed in 0.22.3
The stable release notes describe up to eight persistent tasks per chat. The tagged source at commit 09825973e7d3c3fd07e17909c396aa62f48ce51f makes the operating contract more precise:
| Boundary | 0.22.3 behavior | What to verify |
|---|---|---|
| Owner | Catalog key includes channel instance, chat, and sender | Two senders in one group do not see or select each other's tasks |
| Selection | One named task is selected for an owner at a time | A prompt after /session use review lands only in review
|
| Capacity | At most eight open tasks per owner | The ninth create fails without closing or replacing an existing task |
| Recovery | Stored session IDs are loaded exactly | A missing or failed load does not create an empty substitute |
| Busy state | Switching and closing fail while the relevant task is running or waiting for permission | A rejected switch does not move the active pointer |
| Workspace | Current implementation records isolation: "shared"
|
Two tasks may touch the same files; names are not filesystem isolation |
Task names must be 1-32 ASCII letters, digits, underscores, or hyphens and must start with a letter or number. Matching is case-insensitive, so Review and review are the same name for collision purposes.
Run the compatibility gate first
Named sessions are deliberately opt-in and currently have a narrow compatibility envelope:
| Requirement | Supported state |
|---|---|
| Host |
qwen serve --channel ... daemon-managed Channel worker |
| Session scope | sessionScope: "user" |
| Feature flag | multiSession: true |
Standalone qwen channel start
|
Not supported |
| Webhook-triggered tasks | Not supported with named sessions |
| Group-history backfill | Not supported |
| Channel loops | Not supported |
| Per-task worktrees | Not supported in this release |
| Switch away from a running task | Rejected until the task finishes |
Fail the deployment review if any incompatible mode is enabled. Do not silently fall back to a shared legacy session, because that changes both the context boundary and the recovery evidence.
A six-stage rollout
1. Pin the stable release and evidence
Record Qwen Code 0.22.3, the resolved package or binary, the Channel adapter, the owning workspace, and the tagged commit. Do not validate this feature against a moving development branch: the release contract and the source you inspected must refer to the same build.
2. Enable one low-risk daemon-managed Channel
Start with one test chat and synthetic repository data. Set the Channel to user-scoped routing and opt into multi-session behavior. Keep webhook tasks, history backfill, loops, and standalone Channel startup out of this canary. If the configuration validator rejects the combination, fix the mode rather than removing the owner scope.
3. Create two named tasks and record their exact IDs
Use the shipped commands:
/session new review
/session new feature
/sessions
/session current
/session use review
The list should mark one task active and report shared isolation. Record each task name and daemon session ID from operational state or logs. The chat commands do not turn a named task into a separate checkout.
4. Prove the owner boundary
Have sender A add a harmless marker to review. In the same group chat, have sender B list tasks and create a task with the same display name. Sender B must not see A's catalog or inherit A's transcript. Repeat the check across a second chat on the same Channel instance.
This test matters more than the friendly name. The real boundary is the compound owner key, not a globally unique task name.
5. Prove fail-closed switching and recovery
While feature is producing a response, attempt to select review; the switch should be rejected and feature should remain selected. Repeat while the task is waiting for permission. Then restart the daemon-managed Channel worker and select review again. The recovered transcript must match the previously recorded session ID.
Also simulate an exact-load failure with a disposable session record. The expected result is an error with no newly created replacement and no change to the current task. A blank substitute would hide lost continuity.
6. Promote by owner cohort, not by chat count
Promote one adapter and a small sender allowlist first. Store the configuration, owner-key definition, eight-task limit, exact session IDs, canary results, shared-workspace warning, and rollback command. Roll back by disabling multiSession for the canary cohort only after exporting the evidence needed to recover active work.
Eight acceptance canaries
| Canary | Expected evidence |
|---|---|
| Same owner, two tasks |
review and feature retain different transcripts and exact session IDs |
| Second sender | Cannot list, select, or inherit the first sender's tasks |
| Second chat | Gets a separate catalog even when sender and task names match |
| Name rules | Invalid punctuation is rejected; Review collides with review
|
| Capacity | Ninth open task is rejected without replacement |
| Busy switch/close | Operation is rejected and the active pointer remains unchanged |
| Restart recovery | The stored ID and transcript reopen exactly |
| Shared workspace | A harmless file marker is visible across tasks, proving names are not worktrees |
Use synthetic data for every denial path. Do not place a real credential into one task just to prove that another owner cannot retrieve it.
Decision tree
Do you need several durable tasks inside one Channel chat?
no -> keep the default single routed session
yes -> are you using daemon-managed Channels with sessionScope=user?
no -> do not enable multiSession
yes -> are webhooks, backfill, loops, or per-task worktrees required?
yes -> keep those workflows separate in 0.22.3
no -> enable one canary owner
-> run all eight tests
-> promote a small sender cohort
Common mistakes
- Describing eight named tasks as eight tasks running in parallel.
- Treating task names as a security boundary instead of checking channel, chat, and sender ownership.
- Assuming
sharedmeans a separate worktree because the transcripts are separate. - Enabling
multiSessionwithoutsessionScope: "user"or outside daemon-managed mode. - Switching while a task is running or awaiting permission and then assuming the error changed selection.
- Accepting a blank replacement after an exact session fails to load.
- Putting webhooks, history backfill, loops, or worktree expectations into this release's rollout.
Copyable acceptance record
date / operator / Qwen Code version / commit:
Channel adapter / daemon mode / owning workspace:
sessionScope / multiSession / incompatible features checked:
owner key: channel instance / chat / sender
task names / exact daemon session IDs / selected task:
eight canary results:
shared-workspace warning shown to operators:
promotion cohort / rollback command:
Building something? Take a 60-sec game break. Score to rank your product or profile on tapto.top and get more exposure—free, no signup.
FAQ
Do named sessions run concurrently?
The 0.22.3 Channel UI selects one named task for the owner. It refuses to leave a selected task while that task is running or waiting for permission. Treat the feature as durable context switching, not parallel execution.
Does each task get its own worktree?
No. The implementation reports shared isolation, and /session new --worktree is explicitly unavailable in this release. Use another process or repository-isolation mechanism when tasks must edit independently.
Can two people use the same task name in one group chat?
Yes, because catalogs are scoped by sender as well as channel instance and chat. They are different owners. Verify this behavior with harmless markers before production use.
What happens when a stored session cannot be loaded?
The named-session manager requests the exact stored session and reports an error if it cannot load it. The current selection should not change and no replacement session should be created. Alert on that failure instead of hiding it.
Sources
- Qwen Code 0.22.3 release
- Owner-scoped named sessions pull request
- Tagged named-session manager source
- Tagged Channel command source
- Tagged Channel adapter documentation
Originally published at IndieSeek.
Top comments (0)