Skip to content

cmux NEXT: Needs you list and the Needs your input pill - #22646

Merged
teamleaderleo merged 35 commits into
feat-cmux-nextfrom
leo/needs-you
Oct 21, 2026
Merged

teamleaderleo merged 35 commits into
feat-cmux-nextfrom
leo/needs-you

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Agents keep writing "still waiting on you" because an open ask has nowhere to live once it scrolls away. This adds Needs you: one pinned list of every open ask, behind a count badge in the agent chat header. It covers approvals, decisions, verify-this asks and held agent-pair messages, from this chat, the Chief, its subagents and every other agent chat.

Each row shows:

  • the ask on one line;
  • who asked (the agent's mark, or the Chief's orb, plus the chat that started a subagent);
  • its kind and age;
  • one-click answers (Allow / Deny, or one of up to four choices), drawn the way Claude's permission card draws its options: numbered rows in one column, the first one ready;
  • Go to source, which opens the asking chat at the ask's turn;
  • Ask about this, a side question (_acpmux/ask) to a read-only copy of the asking chat, seeded with "What is going on here?".

An ask leaves the list as soon as it's answered anywhere: its card, the Feed, the CLI, another pane or a phone.

Needs your input pill (from Leo's Claude Code desktop screenshot):

  • While any ask is open, the floating Jump to latest button becomes a pill: the blue dot, "Needs your input" (or "Needs your input · N"), and a chevron.
  • It's a little bigger than Claude's: 34px, in the composer's surface and edge tokens.
  • A press goes to this chat's ask first, then cycles through the asks open in other chats.
  • With nothing open, it's the plain button again.
  • It reads the same Needs you list, not a signal of its own.

One mark. The blue dot is now the one "needs you" mark. It replaces two ad-hoc glyphs: the agent sidebar's amber status.needsinput and the Chief dock's waiting-card glyph. The badge and the pill wear it too. Its color is the window sidebar's unread dot (Palette.notificationBlue), fixed on every theme like the Messages blue. check-system-blue warns about the literal; that's deliberate.

No parallel store. Everything comes from what acpmux already reports (design and contract: plans/cmux-next/needs-you.md):

  • Asks (needsYou/asks.ts): pending permission requests in every watched chat.
    • _acpmux/permission_pending adds an ask.
    • A change to a chat's pendingPermissions, or an answer (permission_decision / permission_resolved), rereads _acpmux/info pending. That's what acpmux pending and the Feed bridge read.
    • A count of zero clears the chat at once.
    • Reads are fenced per chat, so a slow read never revives an answered ask or drops a new one.
  • Waiting chats. A chat that waits with no readable ask (e.g. on another computer) shows as one item, from its session indicator / pendingPermissions (cmux-tui: rank agent list by who needs you #21808's needs-me signal).
  • Held messages come from the open chat's agent-pair rows (acpmux: pause two agents that keep messaging each other without progress #21975).
  • Ids. Items use the Feed's dedupe key, acpmux:<permissionId>, so the Feed and pet notices can share them.

Agents. acpmux pending --json now gives each request a needsYou link, cmux://needs-you/<permissionId>. The acpmux skill tells agents to put that link in a reply instead of restating the ask. The pane draws the link as a chip that opens the list on that ask.

Debug Settings, both on by default; new agent tabs read them:

  • agentPane.debug.needsYou: pinned, compact or off;
  • agentPane.debug.needsYouPill.

The gallery's agent-pane host gains documentAttributes, so variants can render those choices.

Related: #21851 (New Tab's Needs you card) and #21945 (sidebar needs-you tray) show the same idea elsewhere. This list doesn't replace them.

Owned areas. None of the listed owned files are touched (newtab/, Composer, pickers, Inspector, Chief approval code). The ChiefDock.tsx change is a one-line glyph swap.

Testing

Added tests:

  • webviews/test/agent-pane-needs-you.test.tsx (15 tests):
    • each kind and its one-click answers;
    • waiting-chat and archived handling;
    • held pairs and Resume;
    • the subagent via;
    • answer params per harness (a permission by option; a Claude question by text);
    • link parsing;
    • the pill's visit order and cycling, and its labels;
    • the mode attribute;
    • the side-question prompt;
    • JSDOM panel answer / refuse / hide / compact.
  • webviews/test/agent-pane-needs-you-asks.test.ts (7 tests): AskTracker adds, a count of zero clears, an answer rereads, matching counts don't read, reads date asks, stale-read fencing, failed reads keep what's held, purge.
  • AgentPaneNeedsYouTunablesTests.swift: defaults set no attribute, the other choices set theirs, and both toggles are listed.

Each test imports only new code, so it fails on the base.

Run so far:

  • Both bun test files passed locally (22 pass) before cosmic-gray started refusing local bun test. Later edits, including the review fixes and their tests, ran in CI on this head.
  • vp check --no-fmt --no-lint (types) passes, and vp fmt / vp lint are clean on the changed files.
  • check-layers, check-type-scale and check-text-focus-rings pass. check-system-blue warns (above). prepush-gate.py reports no new violations. rustfmt --check is clean on standard.rs.
  • I looked at the gallery entry (agent-pane.needs-you) in a local gallery dev server, in dark and light: the list, the badge and pill, one ask, and the off state.

Not run:

  • No Mac app build and no Swift or Rust build here (cosmic-gray rule). The Swift tunable test and the acpmux change compile only in CI.
  • The live app is not dogfooded. In the app, held messages are listed only for the open chat. The Chief's Home page has no Jump to latest button, so it has no pill yet. Both are noted in the plan.

Review fixes (abaef19)

An independent review of a627fcf found six issues; all are fixed and the re-review passed.

  • Answering an ask in another chat now opens that chat first, then answers. The open (attach) brings the chat into the pane's scope on the click's scope credit and records the question's keys, so permission_respond and question answers are accepted. No relay change.
  • A new ask no longer drops a read in flight: asks are dated, and a read only removes asks it predates. permission_request also rereads.
  • _acpmux/info is reread only when a chat's reported count changes or an ask is made or answered.
  • Grouped permissions (groupId) are not listed one by one; the chat shows as one waiting item that opens its card.
  • A refused answer shows as failed instead of leaving the row sending.
  • A chat with held messages and an input marker shows once.
  • The pill makes one move per press: scroll to this chat's ask, or go to the next chat.

Known limits, for a follow-up:

  • An Allow or a question answer must reach the host within 1.5s of the click (answerWindow). Opening a large or remote chat can take longer; then the answer is refused safely, the chat is open on its card, and the row shows the failure. Deny is unaffected.
  • A chat holding both a grouped and an ungrouped ask lists only the ungrouped one; the grouped one is on the chat's card.

Review fix: a chat on another computer is never read (1f22414 red, 2324168 / 959265c green)

An independent review failed 037c733 on a cross-daemon read. The design says another computer's chat shows only as an input item and is never read, but:

  • an SSH or Cloud peer's chat is in the local daemon's watch with peer and its pendingPermissions (acpmux hub/peers.rs remote_summary);
  • the page reread any chat with a count above zero (needsYou/asks.ts) through chat.asks.pending;
  • the host sent _acpmux/info {sessionId: <bare id>} to the pane's own socket, and acpmux forwards a request for a peer's session to that peer (server/peer_forward.rs; _acpmux/info isn't excluded). So the peer's asks came back and were drawn with Allow and Deny.

Fixed in two layers, with no acpmux change:

  • Page (needsYou/asks.ts, model.ts): the tracker never reads a session whose summary names a peer. It holds no ask for it, including one from a relayed permission_pending, and drops any read still in flight. The list draws such a chat as one input item with no answers.
  • Host (AgentPanePendingAsks):
    • The read names the chat local/<id> (acpmux qualifies ids with /: session_identity.rs). hub.resolve matches that against its own sessions first.
    • An id already qualified as local/ isn't prefixed twice. An id with any other / is never sent and answers null.
    • acpmux peer names are any session name, so a peer could be named local, and its rows are keyed local/<id>. For that case the host also refuses any reply that names a peer: every forwarded reply carries one (peer_forward.rs), and a daemon's own _acpmux/info detail never does.
    • The page still keys the reply on its own unqualified id, because the host returns only pending.
  • Doc (plans/cmux-next/needs-you.md): the host read is described as what the code does: one plain connection to the pane's own acpmux socket, with no person proof, naming local/<id>. The doc no longer says "person-proven".
  • Base merge e70b6d2 (feat-cmux-next f90fbd9): the branch had started to conflict in AgentPageProvider.call, because base now matches the scrollAnchor ops by name (cmux-next: a chat reopens where the reader left it on the host it actually opens on (cx-6bgzj) #23232). The resolution keeps base's check and the chat.asks.pending line.

Red, then green (fleet):

  • webviews test/agent-pane-needs-you-asks.test.ts:
    • red: cmux-ci run --class light --script scripts/ci/run-webviews-tests.sh --ref 1f22414 --key pv-needs-peer-red-1f22414ba6 --env CMUX_WEB_TEST_FILES=test/agent-pane-needs-you-asks.test.ts failed: 15 pass, 1 fail. "a chat on another computer is never read..." expected reads ["near"] and got ["far", "near"].
    • green: the same with both needs-you test files, at 2324168 (key pv-needs-peer-green-232416889d) and at the head 959265c (key pv-needs-peer-green-959265ca16): both files PASS.
  • Swift AgentPanePendingAsksTests (scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext AgentPanePendingAsksTests):
  • cmux-ci compile-check --app: passed at 2324168 (61 s) and at the head 959265c (43 s).

Observed / Not run

  • Observed: the fleet runs above. scripts/web-lint.sh and prepush-gate.py passed before each push.
  • Not run:
    • no live two-machine check (a real SSH or Cloud peer with a pending ask in this pane); the forward path was read in acpmux source, not exercised;
    • the Swift suite never compiled on the PR's own SHAs (base red above);
    • no acpmux Rust tests (no Rust changed).

Changelog

Added: A Needs you badge in the agent chat header lists every approval and question your agents and the Chief are waiting on, with one-click answers, and Jump to latest becomes a "Needs your input" pill while any are open.

Proof

Gallery entry agent-pane.needs-you, captured in dark and light by the Linux Chromium gallery advisory run.

  • Before: the before variant, with both toggles off.
  • After: the list, badge-and-pill, pill-one-ask, ask-about-this, compact and empty variants.

Captures of this head: gallery advisory run 39524014238 (artifact gallery-advisory-22646-abaef19…), shown in the HQ feed card.

Checklist

  • Behavior changes have added or updated tests
  • Localization: 24 new needsYou.* keys in all 21 pane locales (non-English marked needs_review). The sample prompt to the agent is marked l10n-allow.

Agent session: cosmic-gray

One pinned list of every open ask (approvals, decisions, verify asks,
held agent-pair messages) from every agent chat and the Chief, behind a
count badge in the chat header, with one-click answers, Go to source and
Ask about this. While asks are open, Jump to latest becomes a "Needs your
input" pill that goes to the ask and cycles through the others. The blue
dot is the one needs-you mark (sidebar, Chief dock, badge, pill).

Built on acpmux's own pending requests (watch + _acpmux/info), so an ask
answered anywhere leaves the list. acpmux pending --json gains a
cmux://needs-you/<id> link that the pane draws as a chip. Both are Debug
Settings toggles, on by default.

Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=e8f63fd9-94e8-4878-bcd4-704659aba1f2&host=cosmic-gray
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 20, 2026 22:44 — with GitHub Actions Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-dknlq created for this PR by the cmux coordinator.

@teamleaderleo

teamleaderleo commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator Author

Visual preview of abaef19: in the maintainers' private review feed.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 00:29 — with GitHub Actions Inactive
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTunables.swift
#	webviews/src/agent-session/acpmux/App.tsx
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 00:36 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 38c9c16: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr22646 -f ref=leo/needs-you -f platform=macos -f backend_mode=local

Gallery before/after for 38c9c16: 16 states rendered, 32 images differ, 1413 more touched states not rendered. Images are in the run's artifact, not on this public PR.

gh run download 39615288680 -R manaflow-ai/cmux -n gallery-advisory-22646-38c9c1692740ce1c7a25bdca6f634bf30b48b9a6 (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.chat-width/standard Apple System Colors Light changed 0.0212% own App.tsx
agent-pane.chat-width/standard Apple System Colors changed 0.0209% own App.tsx
agent-pane.chat-width/wide Apple System Colors Light changed 0.0212% own App.tsx
agent-pane.chat-width/wide Apple System Colors changed 0.0209% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors Light changed 0.0212% own App.tsx
agent-pane.chat-width/wide-blocks Apple System Colors changed 0.0209% own App.tsx
agent-pane.chief-dock/baseline Apple System Colors Light changed 0.0964% own ChiefDock.tsx
agent-pane.chief-dock/baseline Apple System Colors changed 0.0681% own ChiefDock.tsx
agent-pane.chief-dock/wallpaper-glass Apple System Colors changed 0.0682% own ChiefDock.tsx
agent-pane.chief-dock/wallpaper-glass Apple System Colors Light changed 0.066% own ChiefDock.tsx
agent-pane.chief-dock/mascot-orb-spark Apple System Colors Light changed 0.0623% own ChiefDock.tsx
agent-pane.chief-dock/mascot-orb-spark Apple System Colors changed 0.0571% own ChiefDock.tsx
agent-pane.chief-dock/mascot-orb-hood Apple System Colors Light changed 0.0572% own ChiefDock.tsx
agent-pane.chief-dock/mascot-orb-hood Apple System Colors changed 0.0571% own ChiefDock.tsx
agent-pane.chief-dock/mascot-machine Apple System Colors Light changed 0.0572% own ChiefDock.tsx
agent-pane.chief-dock/mascot-machine Apple System Colors changed 0.0571% own ChiefDock.tsx
agent-pane.chief-dock/mascot-machine-cyan Apple System Colors changed 0.0992% own ChiefDock.tsx
agent-pane.chief-dock/mascot-machine-cyan Apple System Colors Light changed 0.0572% own ChiefDock.tsx
agent-pane.chief-dock/mascot-machine-blue Apple System Colors Light changed 0.0572% own ChiefDock.tsx
agent-pane.chief-dock/mascot-machine-blue Apple System Colors changed 0.0571% own ChiefDock.tsx
agent-pane.chief-dock/mascot-moon Apple System Colors Light changed 0.0892% own ChiefDock.tsx
agent-pane.chief-dock/mascot-moon Apple System Colors changed 0.0571% own ChiefDock.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors Light changed 0.0341% own App.tsx
agent-pane.composer-floats/scrolled-to-end Apple System Colors changed 0.0336% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors Light changed 0.0341% own App.tsx
agent-pane.composer-floats/composer-grown Apple System Colors changed 0.0336% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors Light changed 0.205% own App.tsx
agent-pane.docked-chat/new-chat Apple System Colors changed 0.202% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors Light changed 0.202% own App.tsx
agent-pane.docked-chat/after-turn Apple System Colors changed 0.199% own App.tsx
agent-pane.docked-chat/working Apple System Colors Light changed 0.268% own App.tsx
agent-pane.docked-chat/working Apple System Colors changed 0.264% own App.tsx

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Unclear: web / react-apps-check (1) failed: no known signature; failed step: Fail on the gate checks. This PR merged before its CI finished: fix forward on main.

CI failed on 38c9c16927 (run 39615977407 attempt 1): 2 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (1) unknown no known signature; failed step: Fail on the gate checks
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; base red: the same failure on the base 0376908; does not block
red: web / react-apps-check; base red: the same failure on the base 0376908; does not block
red: web / react-apps-check (1); base red: the same failure on the base 0376908; does not block

CI fast guards failed on 38c9c16927 (https://github.com/manaflow-ai/cmux/actions/runs/39615288836). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

Tour of 38c9c16927 (run)

Path-selected interactions

Interaction Changed paths
agent-pane Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift
Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPanePendingAsks.swift
Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTunables\+NeedsYou.swift
Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTunables.swift
Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneView.swift
Packages/macOS/CmuxNext/Tests/CmuxNextAgentPaneTests/AgentPaneNeedsYouTunablesTests.swift
Packages/macOS/CmuxNext/Tests/CmuxNextAgentPaneTests/AgentPanePendingAsksTests.swift

Agent pane (before): PASS — 3 ok

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 Open agent chat ok cmux agent new-chat
3 Queue a second chat ok cmux agent new-chat
Screenshots (3)

1. Launch
Launch

2. Open agent chat
Open agent chat

3. Queue a second chat
Queue a second chat

### Agent pane \(after\): PASS — 3 ok

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 Open agent chat ok cmux agent new-chat
3 Queue a second chat ok cmux agent new-chat
Screenshots (3)

1. Launch
Launch

2. Open agent chat
Open agent chat

3. Queue a second chat
Queue a second chat

Tours are data in scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 6 test failures on Blacksmith runners:

Failures

Test View Logs
test/agent-pane-math.test.tsx/agent-pane-math.test.tsx View Logs
test/agent-pane-math.test.tsx/agent-pane-math.test.tsx View Logs
test/agent-pane-scrollbar-full-height.test.ts/agent-pane-scrollbar-full-height.test View Logs
test/agent-pane-scrollbar-full-height.test.ts/agent-pane-scrollbar-full-height.test View Logs
test/gallery-agent-pane-entries.test.ts/gallery-agent-pane-entries.test View Logs
test/gallery-agent-pane-entries.test.ts/gallery-agent-pane-entries.test View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 00:40 — with GitHub Actions Inactive
@teamleaderleo

This comment has been minimized.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by priority-view-44 on cosmic-gray · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Adopting this PR in the priority-view lane, as an orphan. Its previous owner (session 01a15c8c, Claude Desktop) is no longer alive. Thanks to that session for the work: I keep its commits and will merge base, resolve the conflicts, get the compile green and land it after review. It pairs with the Priority view (#22778).

Agent session: cosmic-gray

Conflicts: AgentPaneTunables keeps both the Needs you tunables and base turnPreviewCards and the
renamed link-placement tunables; build-agent-pane-web.sh adds needsYou.css to base list;
direct.ts keeps base prompt_accepted and asks.pending on permission_pending.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 05:48 — with GitHub Actions Inactive
…oved PageTunables

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 05:50 — with GitHub Actions Inactive
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Independent review of the adopted head (3d83169, plus 7694e90's import CmuxNextPages fix): FAIL. It is held until these are fixed.

High

  1. direct.ts reads each chat's open asks with _acpmux/info, but the pane relay doesn't allow that method: it is missing from AcpmuxPaneMethods.swift and from the requests list in cmux-agent-pane-policy/policy.json. Every reread is refused, and asks.ts keeps what it already holds, so:
    • an answered ask stays in the list and in the pill count while other asks in the same chat are still open;
    • asks that were already open when the pane loaded never become answerable rows.
      The unit tests mock read, so they miss this.
  2. Ask about this sends _acpmux/ask. The Swift relay no longer allows that method (cmux NEXT: /btw side sessions share one right pane; pane relay allows _acpmux/btw #20826 replaced it with _acpmux/btw), so every side question fails.

Medium
3. After _acpmux/lagged, only chats whose count changed are reread. A chat purged during the lag keeps its asks forever.
4. Allow in another chat runs chat.select and then permission_respond. That switches the user's pane to that chat, and nothing tests whether the answer gesture is still fresh by the time the respond is sent.

Low
5. acpmux/Localizable.xcstrings was reserialized in a different format, about 89k changed lines; regenerate it in base's format.
6. The Rust link hard-codes cmux://.

Planned fix: read open asks through the host, the way AcpmuxPermissionFeedBridge already does, rather than widening the relay policy. Move Ask about this to _acpmux/btw, and regenerate the catalog in base's format.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / defaults-snapshot is red on 24 of 25 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

teamleaderleo and others added 3 commits October 20, 2026 23:10
…, and asks with _acpmux/btw

The read of a chat's open requests must not go through the pane relay,
which refuses _acpmux/info (the Swift allowlist is read from source, not
mocked); the host op chat.asks.pending must be on the page's op list and
hand back only permissionId, request, turnId and groupId. After
_acpmux/lagged every chat with open requests is read again and chats no
longer listed drop. Ask about this sends _acpmux/btw, opening another
chat first since the relay scopes it like an answer.

These fail on 7694e90: the op, pendingReader, resync and the
sideSession hook do not exist yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray
…ith _acpmux/btw

- The pane relay refuses _acpmux/info, so every read failed and answered
  asks stayed listed. The page now asks the host (cmux.agent.chat.asks.pending),
  which reads _acpmux/info on its own person-proven connection, as the
  approval banners do (AgentPanePendingAsks), and returns only each entry's
  permissionId, request, turnId and groupId. Relay policy is unchanged.
- On _acpmux/lagged, every chat with a nonzero count is read again once
  the session list is reread, and chats no longer listed are dropped (a
  read still out for one is discarded).
- Ask about this used _acpmux/ask, which the relay dropped in #20826. It
  now starts a side session with _acpmux/btw and opens it beside the chat
  (chat.sideChat); another chat's ask opens that chat first, since btw is
  session scoped like an answer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray
… keys

The catalog had been reserialized (key order and spacing), an 89k-line
diff. This restores base's file byte for byte and appends the 24
needsYou.* entries, every locale, in the file's own formatting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray
@teamleaderleo teamleaderleo added the media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push label Oct 21, 2026
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 13:41 — with GitHub Actions Inactive
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTunables.swift
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 13:48 — with GitHub Actions Inactive
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next fast gates / fast gates is red on 13 of 17 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

…ore its click

The ask-about-this play clicked the third ask's Ask about this with the matrix's
real pointer, but that button sits below the popover's fold (max-height 75vh,
480 px in the 640 px stage). The click landed outside the popover, which closed
it, so the side field never appeared (gallery health: waitFor did not hold).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cursor

cursor Bot commented Oct 21, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 14:11 — with GitHub Actions Inactive
# Conflicts:
#	Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift
#	webviews/src/agent-session/acpmux/App.tsx
#	webviews/src/agent-session/acpmux/SessionSidebar.tsx
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 21, 2026 14:15 — with GitHub Actions Inactive
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 21, 2026
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Merge receipt: head 38c9c16 (priority-view lane, session 6807b41c)

Review. Independent review subagents ran on each new head. They read the code from git; they built and ran nothing.

  • 959265c → 977d6b4: PASS. This is the cross-daemon fix coord-deputy asked for.
    • The page skips summaries that carry peer.
    • The host reads local/<id>.
    • The host refuses any reply that names a peer. This covers a peer named local.
    • The reviewer checked this against acpmux hub.resolve (local first) and peer_forward.rs (every forwarded reply carries peer, and a local session_detail never does).
  • Conflict-resolving base merges, each PASS:
    • b741d7c: the page-ops list keeps chats.watch and chat.asks.pending.
    • 0ff30f7: the AgentPaneTunables.attributes parameters needsYou/needsYouPill and streamWords are all kept, in declaration order.
    • 38c9c16: the page-ops list gets chat.tail/chat.tail.get alongside the pending-asks op, App.tsx gets the union of both import sets, and the dead SessionSidebar.tsx is deleted per cmux-next: remove the dead SessionSidebar (not shipped since #17504) #23339. The reviewer found no path from the new tail cache around the peer checks.
  • 05acd0d (gallery play fix): PASS. The play scrolls the third ask's button into view, then makes a real pointer click. It does not depend on timing.

Red then green (fleet, scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext AgentPanePendingAsksTests):

  • Red: 1f22414 on webviews, and the scratch host-fix revert on Swift (the bare s-1 is sent and the peer's asks come back).
  • Green on this PR's own heads:
    • 82978ee: 9/9.
    • 0ff30f7 and 38c9c16: green, with AgentPaneNeedsYouTunablesTests and AgentPaneThoughtTunablesTests added.
  • Fleet app compile-check passed on 38c9c16 (48 s).

Checks on 38c9c16.

Risk tier. risk:normal, from scripts/ci/risk_tier.py on the PR's paths. No high-tier path.

Follow-ups (non-blocking, next PR):

  • A relayed peer permission_pending that arrives before the summary shows Allow/Deny until the summary arrives. This is cosmetic only, because answering still goes through the peer forward. One-line fix in asks.ts:102.
  • The native Priority sidebar row (SidebarPriorityRowView.swift:100) still says "needs you" as yellow text, not the Needs you dot.
  • needsYou.css:25-29 has a dead selector, and the comment above it is stale.

Not run. No live SSH or Cloud peer holding a pending ask.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

teamleaderleo added a commit that referenced this pull request Oct 22, 2026
* ci(risk): pane host ops and allowlists are high risk

What an agent pane's web page may make the host do or read now grades high
by path: the AgentPageOps list, AcpmuxPaneMethods (relayed methods and
knownParams), the page-op param tables, the frame check, AcpmuxPathPolicy,
AgentPanePendingAsks, the cmux-agent-pane-policy crate and acpmux's
remote_guard.rs. #22646's chat.asks.pending graded normal and reached a
peer daemon until review caught it. Ordinary pane UI stays normal and the
policy tests stay low.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray

* ci(risk): the pane gesture rule and its page actions are high risk too

Review of #23476 found three files outside the rule that decide what a
pane page may make the host do: AgentPaneTransport+Frames (decide spends
a click's ticket), AgentPaneGestureIntent (which methods a ticket
redeems) and AgentPaneModel+Actions (connectActions, the app actions a
page may run). The docs row now names the rule as the code does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray

* ci(risk): the pane's click tickets are high risk too

Review of c0695a2 found AgentPaneUserGestures.swift (reserve,
consume, redeem: the tickets a click mints) outside the rule; a change
that let redeem accept any ticket would have graded normal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray

* risk tier: test that the relayed-allow, picked-folder and full-access transport files grade high

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray

* risk tier: the relayed-allow proof, picked folder roots and full-access refusal are pane host policy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15bf1-fe0d-7f92-b3aa-5ffc1910a994&host=cosmic-gray

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was previously deployed

4 inactive (3 outdated) deployments
cmux-tui-merge-tree — 38c9c169 Deployed Oct 21, 2026 by teamleaderleo
ci-routing-agent — 82978eef Deployed Oct 21, 2026 by github-actions[bot]
artifacts — 82978eef Deployed Oct 21, 2026 by teamleaderleo
sentry-dsyms — 82978eef Deployed Oct 21, 2026 by teamleaderleo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

media-tour Run the cmux-next UI tour (cmux-next-media.yml) on every push risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant