DEV Community

Ahab
Ahab

Posted on Originally published at indieseek.co

Qwen Code 0.22.3 Named Sessions Isolation Checklist

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 shared means a separate worktree because the transcripts are separate.
  • Enabling multiSession without sessionScope: "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:
Enter fullscreen mode Exit fullscreen mode

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

Originally published at IndieSeek.

Top comments (0)