Repository navigation
Contracts: bridge senders by object, closed empty schemas, raw method strings, typed acpmux params and _meta, open-remote --focus - #36820
Conversation
… schemas, raw method strings, _meta.acpmux keys, open-remote --focus Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
…e object-property scan) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
…pmuxRequestMeta Each of the 63 untyped methods in the pane's knownParams now has a closed params schema (protocol/params.rs) of the keys acpmux's handler reads, plus `_meta`. ACP standard methods carry the spec's top-level keys. ForkParams and SessionAuthParams close schema-only (no serde change). Every request's `_meta.acpmux` names AcpmuxRequestMeta, the keys acpmux reads there, so it lands in the IR's types. IR and web types regenerated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
… ownerCloud and features keys Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
|
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)
Passes: CI passes on CI passes on Written by web and size checks: green Gallery before/after for
States
Pick other states with a |
|
Owned by an agent session · session |
|
Review (codex, router-review): SHIP at 97e8c40 Reviewer: codex gpt-6-astra high, fast tier. Follow-ups: 2. They land as checklist items in this PR's one follow-up tracking issue in this repo ( SHIP at 97e8c40 Visual verdict: no images; Leo tries the build
Follow-ups:
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
…into contract/followups-3
|
Review (codex, router-review): SHIP at 58414b0 Reviewer: codex gpt-6-astra high, fast tier. Follow-ups: 2. They land as checklist items in this PR's one follow-up tracking issue in this repo ( SHIP at 58414b0 Visual verdict: no images; Leo tries the build
Follow-ups:
|
…-focus=VALUE takes only true or false (#36944) * contract follow-ups from #36820's review: AcpmuxRequestMeta lists every key acpmux's own clients send (class, topic, effort, tags, worktree, disallowedTools, compression) with a test; --focus=VALUE takes only true or false Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5 * acpmux protocol IR and web types: regenerated for the completed AcpmuxRequestMeta Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5 * cli-action-requests fixture: regenerated against the current catalog Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Leo, 2026-11-05: "You guys keep running into these. These are weird issues that I feel like you should be able to just fix beforehand and check on beforehand."
The open follow-ups from #36260, #36265, #36579 and #36592, in one PR. Each check that stops a hand-named field from drifting across a boundary now covers the cases it missed.
Webview to Swift bridge (
agentBridgeContract.test.ts)opts.send(...)), destructured parameters ({ post },{ send: s }, defaults included), and destructured locals (const { postNative: post } = deps). The self-test covers each shape, plus a daemon sender passed by object that it must not report.git.capabilitiesincheckpoints/controller.tsx, which no app serves. It is now listed underunservedinschemas/agent-bridge/contract.jsonwith the reason. The Swift test fails onceAgentPageOpsserves it.Swift to acpmux (
scripts/ci/check-swift-acpmux-protocol.py)additionalProperties: false) now allows no keys. Before, it allowed any key.knownParamsare tokenized as Swift strings: raw (#"..."#), multiline ("""), and strings containing]or,._meta.acpmuxkeys are checked against the new closedAcpmuxRequestMetatype in the spec. That coversknownParams' meta set and the pane's writes (acpmux["k"] =,setAcpmuxMeta,setDecision(field:)). The check fails if the spec has noAcpmuxRequestMeta.protocol/params.rs): all 65 methods the app sends now have closed params schemas (63 were untyped). The keys come from each handler's reads.AcpmuxRequestMetalists the 68 keys acpmux reads fromparams._meta.acpmux. The IR and the webmethods.ts/types.tsare regenerated, so most of this diff is generated. Three new allowlist entries, each with its reason:noProjectis the pane's own key, stripped byAcpmuxPathPolicybefore sending.ownerCloudandfeaturesare reply keys thatRemoteAcpmuxWirewrites when it answersinitializeas the remote daemon.CLI to app actions (
cli/app.rs,action_argument_contract.rs)cmux open-remote --focus [true|false]and--focus=falsenow reach the action's ownfocusargument. Before, only--arg focus=...reached it. The run's own focus follows the same value. An action without afocusargument keeps--focusas the run's focus only.open_remote_focus_reaches_the_actionpins those spellings.every_argument_named_like_a_cli_flag_reaches_its_actionchecks every argument an offered action takes whose--flagthe CLI also owns. Each one must reach the action through that flag, or be listed inGLOBAL_FLAG_ARGUMENTSwith the spelling that does reach it. Today four are listed:sessionon agent open, agent open-tab, remote connect and history resume, all reached with--arg session=orcmux action run ... --session. A new collision fails the test. So does a stale entry.cli-action-requests.jsonis regenerated: open-remote now sendsfocusthrough--focus.After screenshots don't apply: this changes contract checks and the CLI's argument encoding only, with no UI.
Checks, all on fleet Linux:
action_argument_contract6/6, clippy-D warningson cmux-tui and acpmux, fmt.protocoltests.check-swift-acpmux-protocol.pyon the repo, plus its 13 unit tests.The review's follow-ups (multiline method literals in the app-wide scan;
compressionand any other request key missing fromAcpmuxRequestMeta) are filed as follow-ups from the review receipt.every_safe_transport_operation_has_a_noun_first_path(git.diffbase/head) androot_help_lists_every_scope...(remote-host) fail the same way on base 424f297. They are not from this PR.Takes back #28098: its
untyped(method::…)registry line inacpmux/src/protocol/mod.rsis nowkeyed::<…Params>(method::…)with a closed params schema; the method, its kind and its handler are unchanged (the IR still lists all 292 methods).Takes back #28859: its
untyped(method::…)registry line inacpmux/src/protocol/mod.rsis nowkeyed::<…Params>(method::…)with a closed params schema; the method, its kind and its handler are unchanged (the IR still lists all 292 methods).Takes back #29003: its
untyped(method::…)registry line inacpmux/src/protocol/mod.rsis nowkeyed::<…Params>(method::…)with a closed params schema; the method, its kind and its handler are unchanged (the IR still lists all 292 methods).Takes back #30188: its
untyped(method::…)registry line inacpmux/src/protocol/mod.rsis nowkeyed::<…Params>(method::…)with a closed params schema; the method, its kind and its handler are unchanged (the IR still lists all 292 methods).Takes back #30879: its
untyped(method::…)registry line inacpmux/src/protocol/mod.rsis nowkeyed::<…Params>(method::…)with a closed params schema; the method, its kind and its handler are unchanged (the IR still lists all 292 methods).Changelog
cmux open-remote --focus falsenow opens the remote pane without focusing it, as the action's ownfocusargument says.Agent session: agent session
🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.Summary by cubic
Closes the contract-check follow-ups from #36260, #36265, #36579 and #36592: each check that stops a hand-named field from drifting across a boundary now covers the cases it missed.
Bridge and Swift-to-acpmux checks
git.capabilities, now listed as unserved in the agent-bridge contract._meta.acpmuxkeys must appear in the new closedAcpmuxRequestMeta.AcpmuxRequestMetacovers the 68_meta.acpmuxkeys. The IR and web types are regenerated, so most of the diff is generated.noProject(the pane's own key, stripped byAcpmuxPathPolicy) andownerCloud/features(reply keys forinitialize).CLI action arguments
cmux open-remote --focus [true|false]and--focus=falsenow reach the action's ownfocusargument; only--arg focus=...did before.--flagthe CLI owns and that can't reach the action through that flag; foursessioncases are listed inGLOBAL_FLAG_ARGUMENTS.cli-action-requests.jsonis regenerated.Changelog:
cmux open-remote --focus falsenow opens the remote pane without focusing it. Two test failures (every_safe_transport_operation_has_a_noun_first_path,root_help_lists_every_scope...) also fail on base and are not from this PR.Written for commit 97e8c40. Summary will update on new commits.