Repository navigation
cmux NEXT: Needs you list and the Needs your input pill - #22646
Conversation
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
|
Bead |
|
Visual preview of abaef19: in the maintainers' private review feed. |
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTunables.swift # webviews/src/agent-session/acpmux/App.tsx
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a Unclear: CI failed on
Not re-run automatically: Written by red: web / Web status; base red: the same failure on the base 0376908; does not block
Agents: Tour of Path-selected interactions
Agent pane (before): PASS — 3 ok
Tours are data in |
|
Found 6 test failures on Blacksmith runners: Failures
|
Bugbot needs on-demand usage enabledBugbot 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. |
… groups, refusals, duplicates, pill) Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=e8f63fd9-94e8-4878-bcd4-704659aba1f2&host=cosmic-gray
This comment has been minimized.
This comment has been minimized.
|
Owned by priority-view-44 on cosmic-gray · session |
|
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>
…oved PageTunables Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bugbot needs on-demand usage enabledBugbot 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. |
|
Independent review of the adopted head (3d83169, plus 7694e90's High
Medium Low Planned fix: read open asks through the host, the way |
|
|
…, 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
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift
Bugbot needs on-demand usage enabledBugbot 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. |
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPaneTunables.swift
|
|
…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>
Bugbot needs on-demand usage enabledBugbot 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. |
# Conflicts: # Packages/macOS/CmuxNext/Sources/CmuxNextAgentPane/AgentPageProvider.swift # webviews/src/agent-session/acpmux/App.tsx # webviews/src/agent-session/acpmux/SessionSidebar.tsx
|
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.
Red then green (fleet,
Checks on 38c9c16.
Risk tier. Follow-ups (non-blocking, next PR):
Not run. No live SSH or Cloud peer holding a pending ask. |
|
Shipped in:
|
* 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>








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:
_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):
One mark. The blue dot is now the one "needs you" mark. It replaces two ad-hoc glyphs: the agent sidebar's amber
status.needsinputand 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-bluewarns 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):needsYou/asks.ts): pending permission requests in every watched chat._acpmux/permission_pendingadds an ask.pendingPermissions, or an answer (permission_decision/permission_resolved), rereads_acpmux/infopending. That's whatacpmux pendingand the Feed bridge read.indicator/pendingPermissions(cmux-tui: rank agent list by who needs you #21808's needs-me signal).acpmux:<permissionId>, so the Feed and pet notices can share them.Agents.
acpmux pending --jsonnow gives each request aneedsYoulink,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.tsxchange is a one-line glyph swap.Testing
Added tests:
webviews/test/agent-pane-needs-you.test.tsx(15 tests):via;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:
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, andvp fmt/vp lintare clean on the changed files.check-layers,check-type-scaleandcheck-text-focus-ringspass.check-system-bluewarns (above).prepush-gate.pyreports no new violations.rustfmt --checkis clean onstandard.rs.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:
Review fixes (abaef19)
An independent review of a627fcf found six issues; all are fixed and the re-review passed.
permission_respondand question answers are accepted. No relay change.permission_requestalso rereads._acpmux/infois reread only when a chat's reported count changes or an ask is made or answered.groupId) are not listed one by one; the chat shows as one waiting item that opens its card.Known limits, for a follow-up:
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.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
inputitem and is never read, but:peerand itspendingPermissions(acpmuxhub/peers.rsremote_summary);needsYou/asks.ts) throughchat.asks.pending;_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/infoisn't excluded). So the peer's asks came back and were drawn with Allow and Deny.Fixed in two layers, with no acpmux change:
needsYou/asks.ts,model.ts): the tracker never reads a session whose summary names apeer. It holds no ask for it, including one from a relayedpermission_pending, and drops any read still in flight. The list draws such a chat as oneinputitem with no answers.AgentPanePendingAsks):local/<id>(acpmux qualifies ids with/:session_identity.rs).hub.resolvematches that against its own sessions first.local/isn't prefixed twice. An id with any other/is never sent and answers null.local, and its rows are keyedlocal/<id>. For that case the host also refuses any reply that names apeer: every forwarded reply carries one (peer_forward.rs), and a daemon's own_acpmux/infodetail never does.pending.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, naminglocal/<id>. The doc no longer says "person-proven".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 thechat.asks.pendingline.Red, then green (fleet):
test/agent-pane-needs-you-asks.test.ts: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.tsfailed: 15 pass, 1 fail. "a chat on another computer is never read..." expected reads["near"]and got["far", "near"].pv-needs-peer-green-232416889d) and at the head 959265c (keypv-needs-peer-green-959265ca16): both files PASS.AgentPanePendingAsksTests(scripts/ci/package-test-lane.sh suite Packages/macOS/CmuxNext AgentPanePendingAsksTests):PageEnginePolicyTests.swift:43(fixed on base by fix(next): the CmuxNext package compiles again — three one-line breaks on base #23281). Now it breaks atRemoteChildSessionsTests.swift:14: the fake lacksisReadOnly. That's a base red, with open fixes cmux-next tests: RemoteChildSessionsTests' fake client states isReadOnly (base red: tests don't compile) #23362, cmux-next: the app test target compiles again (RemoteChildSessionsTests fake gets isReadOnly) #23363 and cmux-next tests: RemoteChildSessionsTests compiles again (FakeClient gets isReadOnly) #23369. So the runs on the PR's own SHAs gave no verdict (keyspv-needs-peer-swift-red-1f22414ba6,-green-232416889d,-red-5f212140d5,-green-959265ca16).var isReadOnly: Bool { false }on the fake), on scratch branches since deleted:pv-needs-peer-swift-scr-nofix-9e3730cddc): 8 tests, 4 issues. The host sents-1, notlocal/s-1. A mirrored peer chat's asks came back forpeer-mirrorandpeer-chat. The reads were["peer-chat", "own", "local/own", "build-host/peer-chat"].pv-needs-peer-swift-scr-peerreply-e43207a5b6): 9 tests, 1 issue.aReplyForwardedFromAPeerIsRefusedgot that peer's asks.pv-needs-peer-swift-scr-fixed-37a855f4c6): 9 tests in 1 suite passed.cmux-ci compile-check --app: passed at 2324168 (61 s) and at the head 959265c (43 s).Observed / Not run
scripts/web-lint.shandprepush-gate.pypassed before each push.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.beforevariant, with both toggles off.list,badge-and-pill,pill-one-ask,ask-about-this,compactandemptyvariants.Captures of this head: gallery advisory run 39524014238 (artifact
gallery-advisory-22646-abaef19…), shown in the HQ feed card.Checklist
needsYou.*keys in all 21 pane locales (non-English marked needs_review). The sample prompt to the agent is markedl10n-allow.Agent session: cosmic-gray