Skip to content

agent pane, cmux-tui: a question answered for a chat on another machine reaches that machine's acpmux with its answers - #23999

Closed
teamleaderleo wants to merge 6 commits into
feat-cmux-nextfrom
leo/person-proof-covers-answers
Closed

teamleaderleo wants to merge 6 commits into
feat-cmux-nextfrom
leo/person-proof-covers-answers

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

What broke

In the Mac app, answering a question (an AskUserQuestion-style prompt that has answers) for a chat whose agent runs on another machine (huge-blue) always failed with "approve this on the Mac app: … accepted only from the cmux app". Plain allows to the same chats worked.

Part of the cause is the transport. RemoteAcpmuxWire dropped the answers and sent a bare allow. cmux-tui's agent-session-permission also refused an answers field (deny_unknown_fields). So that machine's acpmux never received the answer at all, whatever proof the pane made.

The fix

This PR only fixes the transport. The decision proof that covers the answers, the pane signing them, and the page's ticket for a question are #23869 (a separate lane's PR). This PR does not touch hub/person.rs or the person-proof protocol. Both PRs are needed for the answer to count on huge-blue.

  • RemoteAcpmuxWire forwards answers (an object; anything else is refused at the wire).
  • AgentSessionRemoteClient / AgentTabRemoteClient / AgentSessionAttachClient carry answers. The attach client re-encodes them compact and puts them in the request.
  • cmux-tui agent-session-permission takes answers (an object of at most 64 KiB) and passes it to acpmux unchanged beside the proof; acpmux still decides. New capability agent-session-permission-answers-v1, advertised with agent-session-attach-v1. If the remote daemon is older and lacks it, the app refuses the answer (agent_session.answers_unsupported) instead of sending a bare allow.
  • Spec (cmux-tui/spec/commands.md) and plans/cmux-next/daemon-capabilities.json updated.
  • Plain allows are byte-for-byte unchanged on every hop.

Tests

  • Rust a_question_answer_carries_its_answers_to_acpmux_unchanged (cmux-tui-core agent_session_attach_tests.rs): the capability is advertised, non-object answers are a bad request, and an object goes to acpmux with the proof. Red on the test commit c242d6c, green at head (fleet results below).
  • Swift RemoteAcpmuxWireAnswersTests: the wire refuses non-object answers and forwards an object with the nonce and proof.

Fleet evidence:

  • Rust GREEN at 1772179 (cmux-tui-rust-check.sh test agent_session, step 1b84acceba92214740cde9ba): 94 passed, including a_question_answer_carries_its_answers_to_acpmux_unchanged. RED run on the test commit c242d6c: pending, reported in a comment.
  • Swift GREEN at 1772179 (package-test-lane.sh suite RemoteAcpmuxWireAnswersTests, RemoteAcpmuxObserverTests, AgentPaneRelayedAllowTests, RemoteChildSessionsTests; step 712fcf758ed41d8b4d4c9ed4): all 4 suites passed. Re-run at the head 7b4c4e1 with DaemonCapabilityExportTests added (step ab63efb8018dee32f007b634): all 5 suites passed.
  • cmux-ci compile-check --app fails the same way at the base 783c206 (job 0ba18ab3) and at this head: product 'CmuxSentryReporting' required by ... 'CmuxNextCrashReporting' not found in package 'CmuxSentryTelemetry'. That is a base red, not caused by this PR.

No capture: no UI changes. This only changes how a question's answers travel from the pane to another machine's daemon.

Observed / Not run

Observed: the fleet runs above. Not run: a live answer to a huge-blue chat (it needs #23869 too).

Changelog

Fixed: answering an agent's question in a chat on another machine no longer fails with "approve this on the Mac app" (with #23869).

Agent session: cosmic-gray

🤖 Generated with Claude Code


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


Summary by cubic

Fixes answering a question for a chat on another machine, which always failed with "approve this on the Mac app" because answers never reached that machine's acpmux: the wire dropped them and sent a bare allow, and cmux-tui's agent-session-permission refused the field.

  • answers (a JSON object, max 64 KiB) now flows through the wire, the attach client, and agent-session-permission to acpmux unchanged; non-object answers are refused at the wire.
  • The new agent-session-permission-answers-v1 capability gates the field and is advertised with agent-session-attach-v1; against an older daemon the app refuses the answer (agent_session.answers_unsupported) instead of sending a bare allow.
  • Plain allows are byte-for-byte unchanged on every hop.
  • This PR only fixes the transport; the decision proof covering the answers is a separate PR (acpmux, agent pane: a question answered in the pane counts on another machine #23869), and both are needed for the answer to count.

Written for commit 379a990. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 3 commits October 21, 2026 17:41
… the person's proof (red)

agent-session-permission refuses an `answers` field (deny_unknown_fields),
so a question answered in the Mac pane for a chat on another machine can
never reach that machine's acpmux with its answers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d41-f5e8-7631-b4aa-a544e3ef96a8&host=cosmic-gray
…ne reaches that machine's acpmux with its answers

RemoteAcpmuxWire dropped a question's `answers` and sent a bare allow, and
cmux-tui's agent-session-permission refused an `answers` field, so an answer
to a question for a chat on huge-blue never reached that machine's acpmux as
an answer: it was refused there ("approve this on the Mac app"), whatever
proof the pane made. The wire now forwards the answers (objects only), the
attach client sends them, and the session daemon passes them to acpmux
unchanged beside the proof (`agent-session-permission-answers-v1`, at most
64 KiB). An older daemon gets no answers: the app refuses the answer rather
than send a bare allow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d41-f5e8-7631-b4aa-a544e3ef96a8&host=cosmic-gray
…y export, and send a question's answers re-encoded compact (review)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a15d41-f5e8-7631-b4aa-a544e3ef96a8&host=cosmic-gray
@teamleaderleo teamleaderleo added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 22, 2026
@teamleaderleo
teamleaderleo temporarily deployed to cmux-tui-merge-tree October 22, 2026 01:33 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

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

Review 379a990: 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=pr23999 -f ref=leo/person-proof-covers-answers -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on a62351d to compare; do not merge until green; see lane-rules

@blacksmith-sh

blacksmith-sh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Found 8 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmp15hb9gxc/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpdc__tdei/summary-missing.json (live):/summary-missing.json (live): View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
test_base_passes (main.NoticesPairTests.test_base_passes)/
test_base_passes (main.NoticesPairTests.test_base_passes)
View Logs
test_targets_outside_the_app_go_to_the_mac_canary (main.SwiftCanaryFleetCoverage.te
st_targets_outside_the_app_go_to_the_mac_canary)/
test_targets_outside_the_app_go_to_the_mac_canary (main.SwiftCanaryFleetCoverage.te
st_targets_outside_the_app_go_to_the_mac_canary)
View Logs

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

@teamleaderleo

teamleaderleo commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by nx-chat on big-red · took over from session 01a15d41

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next crash-class rules / cmux-next crash-class rules is red on 11 of 11 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

Copy link
Copy Markdown
Collaborator Author

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (codex xhigh via acpmux, correctness first): SHIP at 7b4c4e1

Codex (gpt-6.1-sol, xhigh) on the full diff 783c206..7b4c4e1: no correctness findings. The JSON splice is well formed and can't inject fields. The capability is listed everywhere it's needed. Plain allows are unchanged. The remote relay still refuses agent-session verbs. Every client conformer is updated. A Claude subagent review also returned SHIP at this head, after its two findings were fixed: the capability export file, and compact re-encoding of the answers.

Fleet evidence:

@cursor

cursor Bot commented Oct 22, 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

Review (codex xhigh via acpmux, correctness first): SHIP at de2b69a

Codex (gpt-6.1-sol, xhigh, on cmux16) reviewed this head against the newer base aca5900 that was brought in: no correctness findings in any of the six areas it checked (the splice, where the capability is listed, plain allows unchanged, the relay deny, the tests and conformers, and how the change combines with the base).

Evidence at this head:

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / nightly-guards / workflow-guard-tests / release-notary is red on 18 of 18 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

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Checks job structure is red on 16 of 18 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

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › No fleet host names in gallery fixtures is red on 16 of 18 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

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › No new SwiftUI (macOS UI is AppKit) is red on 16 of 18 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

Copy link
Copy Markdown
Collaborator Author

Orphaned: no activity for 14 h, and no lane holds a lease on it. Adopted by the orphan sweep: merged feat-cmux-next in at 379a990. A later pass queues it for the merge hub if it is reviewed, small and red only on base reds.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next checks (god files, concurrency, crash safety, l10n) › Script tests (pin-cmux-tui, embed-cef, ensure-cef store) is red on 14 of 15 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

Copy link
Copy Markdown
Collaborator Author

cmux-next / cmux-next swift test is red on 10 of 14 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

Copy link
Copy Markdown
Collaborator Author

Stale (13d, conflicts); rebuild fresh from feat-cmux-next if still wanted

This branch was previously deployed

4 inactive deployments
artifacts — 379a990d Deployed Oct 23, 2026 by teamleaderleo via add the Windows daemon to the tree #45201
ci-routing-agent — 379a990d Deployed Oct 23, 2026 by github-actions[bot] via cmux-next macOS placement #31493
sentry-dsyms — 379a990d Deployed Oct 23, 2026 by teamleaderleo via upload cmux-tui dSYMs to Sentry #45201
cmux-tui-merge-tree — 379a990d Deployed Oct 23, 2026 by teamleaderleo via publish the merge tree #5087
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant