Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
9c95dcf
feat(core): address other sessions by name from send_message and list…
qqqys Aug 26, 2026
bb19edb
Merge remote-tracking branch 'upstream/main' into feat/peer-addressin…
qqqys Aug 26, 2026
74d708a
fix(core): close the review findings on peer addressing before openin…
qqqys Aug 26, 2026
21fc0b3
Merge remote-tracking branch 'upstream/main' into feat/peer-addressin…
qqqys Aug 26, 2026
79891b2
fix(core): preserve task revival in tool summary
qqqys Aug 26, 2026
e344af9
Merge remote-tracking branch 'upstream/main' into codex/pr-10158-revi…
qqqys Aug 27, 2026
126d5e4
fix: close peer messaging review blockers
qqqys Aug 27, 2026
7b35869
Merge remote-tracking branch 'upstream/main' into codex/pr-10158-revi…
qqqys Aug 27, 2026
30fba2f
test(cli): narrow peer receipt status assertions
qqqys Aug 27, 2026
d43afe6
fix(core): close the round-2 review findings on peer addressing
qqqys Aug 27, 2026
a889852
fix(core): close the round-3 review findings on peer addressing
qqqys Aug 27, 2026
b07a199
fix(core): close the round-4 review findings on peer addressing
qqqys Aug 27, 2026
7f213a5
fix(core): close the round-5 review finding on peer addressing
qqqys Aug 28, 2026
cf3bbd0
Merge branch 'main' into feat/peer-addressing-v2
qqqys Aug 28, 2026
653828a
fix(core): exclude every incarnation of this session from peer addres…
qqqys Aug 28, 2026
e0b7a83
fix(core): make near-miss addressing and the messaging-off error usable
qqqys Aug 28, 2026
ce0ee7a
refactor(core): drop the unread peerName field and name the ledger's …
qqqys Aug 28, 2026
654ba55
fix(core): stop handing the model peer addresses that re-resolve ambi…
qqqys Aug 28, 2026
9c7f8dc
test(peer): pin the three unwitnessed production wirings
qqqys Aug 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions docs/users/configuration/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -402,11 +402,13 @@ See [Memory](../features/memory) for details on how auto-memory works and how to

#### agents

| Setting | Type | Description | Default |
| ----------------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart. | `inherit` |
| `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart. | `undefined` |
| `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart. | `undefined` |
| Setting | Type | Description | Default |
| ------------------------------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| `agents.builtin.exploreModel` | string | Model selector for the built-in Explore subagent. Use `inherit` for the main session model, `fast` for `fastModel`, a model ID, or an `authType:model-id` selector. A custom same-name Explore agent keeps its own model configuration. Requires restart. | `inherit` |
| `agents.modelGrades` | object | Maps semantic grade names exposed to the Agent tool to model selectors. Requires restart. | `undefined` |
| `agents.allowedGrades` | array of strings | Optional whitelist of configured model grades the Agent tool may use. Requires restart. | `undefined` |
| `agents.crossSessionMessaging` | boolean | Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Turning it on opens this session to peer messages, makes it discoverable to others, and lets its model address them from `send_message`. Requires restart. | `false` |
| `agents.crossSessionInbound` | enum | What happens to messages other sessions send this one: `accept` delivers them, `hold` parks them for `/peers` review without letting the model act, `refuse` opts this session out. Unset means approval-mode parity (see [Messaging another running session](../features/commands.md#messaging-another-running-session)). | `undefined` |

#### permissions

Expand Down
41 changes: 41 additions & 0 deletions docs/users/features/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ Commands for managing AI tools and models.
| → `auto-edit` | Auto-approve edits (trusted environment) | `/approval-mode auto-edit` |
| → `auto` | Classifier-evaluated approval (autonomous) | `/approval-mode auto` |
| → `yolo` | Auto-approve everything (quick prototyping) | `/approval-mode yolo` |
| `/peers` | Review messages held from other Qwen Code sessions on this machine | `/peers`, `/peers accept <id>`, `/peers deny all` |
| `/model` | Switch model used in current session | `/model`, `/model <model-id>` (switch immediately) |
| `/model --fast` | Set a lighter model for prompt suggestions | `/model --fast qwen3-coder-flash` |
| `/model --voice` | Set the model used for voice transcription | `/model --voice <model-id>` |
Expand Down Expand Up @@ -795,3 +796,43 @@ qwen sessions ps
# raw-data note above); pipe through a sanitizer if the path is untrusted.
qwen sessions ps --json | jq -r .cwd
```

#### Messaging another running session
Comment thread
yiliang114 marked this conversation as resolved.
Resolved

Two interactive sessions on the same machine can send each other
messages. The feature is experimental and **off by default**; turn it on
in `settings.json` and restart:

```json
{ "agents": { "crossSessionMessaging": true } }
```

Once on, the model in one session can discover the others with
`list_agents` — each appears under `sessions` with the `name` that
`qwen sessions ps --json` records (the table view may truncate long
names) — and address one with `send_message` using
that name as `to`. When two sessions share a name, `list_agents` shows
each with a short `[ref]` and the send must include it (`name [ref]`); a
bare name that could mean either is refused rather than guessed.
`list_agents` also reports the session's own name under `self`, and
`to: "*"` still means "my Agent Team teammates" and never reaches other
sessions.

A message arrives in the other session marked as coming from another
session, not from its user, and carries none of your authority there:
the receiving session acts on it only within its own permission settings.
Its user can choose what happens to incoming messages with
`agents.crossSessionInbound` (`accept`, `hold`, or `refuse`). When unset,
a message is delivered if the receiving session still reviews each
action (default or plan mode), or if both sessions are in a mode that
applies actions without per-action review; otherwise it is held for
review. Held messages are listed and released with `/peers` in the
receiving session.

The `send_message` call only confirms the message was handed to the other
session. What became of it arrives later as a receipt: if it was held,
declined, expired, or misaddressed (the address changed hands — list the
agents again) — or released after a hold — a notice appears in the
sending session's transcript (`Message to <name>: …`). The model that
sent it is not told; if the other session replies, the reply arrives as a
cross-session message.
2 changes: 1 addition & 1 deletion packages/cli/src/config/settingsSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3270,7 +3270,7 @@ const SETTINGS_SCHEMA = {
requiresRestart: true,
default: false,
description:
'Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Off by default; turning it on both opens this session to peer messages and makes it discoverable to others.',
'Experimental. Let Qwen Code sessions on this machine send each other messages over a per-session local socket. Off by default; turning it on opens this session to peer messages, makes it discoverable to others, and lets its model address them from send_message.',
showInDialog: false,
},
crossSessionInbound: {
Expand Down
Loading
Loading