Skip to content

Reject self-mentions that cannot wake another session - #3513

Merged
dr0uleau merged 1 commit into
mainfrom
nexus/wake-same-agent-workers-for-cross-task-handoffs-89217684
Nov 13, 2026
Merged

dr0uleau merged 1 commit into
mainfrom
nexus/wake-same-agent-workers-for-cross-task-handoffs-89217684

Conversation

@dr0uleau

@dr0uleau dr0uleau commented Nov 13, 2026 •

Copy link
Copy Markdown
Contributor

Why

An agent can post a mention to its own identity in another conversation and receive a successful post receipt. The runner ignores that message, so the intended worker never wakes.

What

Message tools now refuse self-mentions and direct callers to self_handoff. The handoff receipt states that the host queued work, with no claim of execution or completion.

How

Reuse the existing authorized handoff path and its exact channel/thread routing. Keep the runner's self-message filter and replay protection. Queue admission can fail when the local runner is unavailable or full. Repeated handoff calls remain separate requests, and the queue does not survive host shutdown.

Risk

Agents that send self-mentions must use self_handoff instead. Ordinary posts and mentions of other agents keep their behavior.

Testing

The self-mention regression failed before the fix: both message tools returned sent <id>. It passed after the fix. Service checks exercised idle and busy recipients with a held active turn and confirmed exact thread routing and self-post replay suppression. No browser cases were added or removed.

Shipping review at 646f60a8bef58523ea010e46383b8e09e28f75d4 found no blockers across correctness, quality, performance, compatibility, testing, and risk. Manual app testing was explicitly waived for this narrow change. No app was installed or restarted. This change provides a queued handoff path; it does not steer an active turn.

Generated with Codex

Direct same-identity work to self_handoff and distinguish queue admission from execution in its receipt.

Co-authored-by: Codex <[email protected]>
Signed-off-by: Daniel Rouleau <[email protected]>
@dr0uleau
dr0uleau requested review from gilgtm and kazemek21 November 13, 2026 21:24
@dr0uleau
dr0uleau marked this pull request as ready for review November 13, 2026 21:39
@dr0uleau
dr0uleau requested a review from a team as a code owner November 13, 2026 21:39

@gilgtm gilgtm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 No P0/P1 findings at 646f60a. Completed deep dual review of the full PR against main, including message-tool refusal, handoff routing, queue admission, and regression coverage.

Posted by duel-review skill [driver: codex(high), mode: deep-dual, review synthesized by codex(high)]

@dr0uleau
dr0uleau merged commit 095df3f into main Nov 13, 2026
64 checks passed
@dr0uleau
dr0uleau deleted the nexus/wake-same-agent-workers-for-cross-task-handoffs-89217684 branch November 13, 2026 22:28
philazar added a commit that referenced this pull request Nov 13, 2026
…ve-client

* origin/main:
  feat(solo): smooth chat recency reordering (#3502)
  Reject self-mentions that cannot wake another session (#3513)
  feat(status): offer don't clear for every status (#3515)
  Let plugin panels name their tab with panels.useTabTitle (#3251)
  fix(agents): report a conversation wake that fails before its turn starts (#2192)
  fix(usage): read Claude transcripts over 50 MB a page at a time (#3498)
  feat(agents): preview where interrupted agents were working before resume (#3494)
  perf(messages): close the editor and delete dialog on submit (#3493)
  feat(messages): quote selected message text into the composer (#2392)
  perf(toast): scope docked clearance to the toast host (#3489)
  fix(unread): undo exact captured ordinary reads conditionally (#3473)

Signed-off-by: Philip Azar <[email protected]>
philazar added a commit that referenced this pull request Nov 13, 2026
Main now refuses self-mentions (#3513). The archive exemption for this agent
still applies: its own name resolves to it and reaches that refusal instead of
being hidden as archived.

Co-authored-by: Coder1 <db50ef1f1688dc7f3e536c17351e8e994a7466bcbe009794f61d64355c0ffc2e@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Philip Azar <[email protected]>
wpfleger96 added a commit that referenced this pull request Nov 14, 2026
…y-unreads

* origin/main: (24 commits)
  [1/2] feat(agents): add a recommended agent setup (core) (#3344)
  test(browser): survive the live-stream restart a page-clock jump causes (#3442)
  chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438)
  test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445)
  test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446)
  fix(status): reopen a status whose preset deadlines coincide as Today (#3449)
  fix(messages): tolerate a cancelled reaction-name chunk load (#3450)
  fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451)
  test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444)
  Expose native channel headings to Solo sources (#3523)
  test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447)
  fix(solo): keep every contributed destination action (#3516)
  fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365)
  fix(identity): let a stuck at-launch sign-in copy its link (#2453)
  fix(profiles): open avatar previews on hover in compact density (#3510)
  feat(solo): smooth chat recency reordering (#3502)
  Reject self-mentions that cannot wake another session (#3513)
  feat(status): offer don't clear for every status (#3515)
  Let plugin panels name their tab with panels.useTabTitle (#3251)
  fix(agents): report a conversation wake that fails before its turn starts (#2192)
  ...

# Conflicts:
#	tests/browser/message-management.spec.mjs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants