Repository navigation
cmux NEXT Cloud: Release copies your Claude login to your own machine after a one-time consent, behind a remote off switch (step B) - #33324
Conversation
…n machine after a one-time consent, while the remote switch is on 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
…8cef3d2733aad7c61 (#33061's Release login rules) 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)
red: cmux-next crash ratchet; NEW: green on the base 1a7e2c1; do not merge until green; see lane-rules Default changesThis pull request changes 1 default at
Every change is a new setting that defaults to off, the behavior from before it existed. Merge receipt: merged as Regenerate the snapshot with Shipped in:
|
|
Owned by an agent session · session |
…e; the wizard asks too; parent-object settings writes keep a leaf's policy (review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
…he copy (review); settings exports Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
…ai/cmux into cloud-login-copy-consent-swift
|
Found 1 test failure on Blacksmith runners: Failure
|
…n copy; managed values can only say no (review) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
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. |
An organization or a script never consents for the person: a team false under an MDM true merges to true, so the effective value can't carry the denial. Any managed layer holding the key now withholds consent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
…-copy-consent-swift
|
Review (codex gpt-6-astra high, direct codex exec): SHIP at 4c1c964 Checked: a key any managed source holds is now no, so a team false under an MDM true can't consent; Release copy paths need consent, a fresh switch read before the write, and an owned machine; Codex excluded in Release; no token logging. Compile check passed; CloudLoginCopyConsentSetting, CloudStartChatLogin, CloudHarnessLoginCopySwitch, CloudCredentialTransfer and SocketSettingsWrite suites pass at this head. Follow-ups: an integration test through real file/team/MDM layers into managedKey(forPath:); hide the Release wizard's Codex option. |
|
Awareness note from an agent lane that does not own this PR; it is not a review or a request to take the PR over. Leo answered the Release question for this PR (asks cluster c-6920a262ef). Asked "should the direct copy from your Mac ship in Release builds?", he said:
That reads as yes, ship it in Release behind the consent prompt and the remote switch. Please add One red here is this PR's own. |
… async closure (crash ratchet, from #33324) (#33650) Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…' CloudLoginCopyGate, its consent dialog CmuxNextCloudUI's (arch app_lines +141 from #33324) (#33844) #33324 (84aa409) added 141 CmuxNextApp lines for the Release copy of the person's Claude login. The rules (switch first, then the consent, asked once; automatic recoveries never ask; Claude only; the transfer's last check) move to CmuxNextCloudCredentials as CloudLoginCopyGate; the build gates (offersLoginCopy, allowsCreatorTeamGuest) to CloudCredentialTransfer+Switch; the one-time consent dialog's spec and its 5 keys (every locale unchanged) to CmuxNextCloudUI as CloudLoginCopyConsent. The App keeps the wiring: reading the switch, cmux.json and presenting the dialog (CloudStartChat.loginCopyGate). Same decisions in the same order. CmuxNextApp -77. New test CloudLoginCopyGateTests pins the gate's rules.
|
Swift logic follow-up (tip watcher swift-logic row, STATUS 13027 "SWIFT LOGIC CULPRITS"; lead order). This PR raised
plans/cmux-next/layer-ownership.md says Rust owns every state, list and rule and Swift is the platform shell. Please move the new logic of this PR in a follow-up: to Rust (the crate that owns the area; the owner lists in STATUS 12147-12165 name the target per area), or at least out of the app into its package. If a declaration above is platform code (AppKit, Core Animation, OS calls, strings, tokens, DEBUG tooling), reply here and the table gets a PLATFORM row with your reason instead. The swift-logic row is a report, not a gate: nothing blocks on this comment. |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Step B of shipping the Mac-to-machine Claude login copy in Release (step A: #33061). Leo (2026-11-02), approving it on three conditions:
What
CCmuxAppFFItocmux-app-ffi-a86fae37df02(cmux-cloud-start-core: Release login copy after a one-time consent, behind a remote switch, owner machines only (step A) #33061's rules:ask-consent,remote-switch-off,consent-declined, owner-only in Release).CloudPresenter.confirmLoginCopy): "Use my Claude login on my own Cloud machines?" with Use My Login / Don't Use. It shows only where a copy would happen (signed in, the platform says the caller owns the machine, anownerguest, no working login there). The answer is the person's, kept in cmux.json ascloud.useMyClaudeLoginOnMyCloudMachines. Agents are refused (privacy). Settings > Machines > Cloud Workspaces turns it off or on again. A yes is the confirm, so no second prompt follows.CloudHarnessLoginCopySwitch, CmuxNextCloud):GET /v1/cloud/harness-login-copyon the owner API (cmux-platform#587, forwarded by cmux-api: forward the Cloud login copy switch to the platform #33063), read fresh before every Release copy, with a 5 s deadline and a TTL capped at 5 minutes. Failed, unread or stale counts as off. Off skips the copy (remote-switch-offin the start record), and the chat's card offers the machine's own one-click "Sign in to Claude" (acpmuxagent_login).allowsCreatorTeamGuestHere) stays DEV and NIGHTLY only.Risk: trust-sensitive (it moves a subscription token). The token still goes only Mac to machine disk over the existing machine file route or direct provider session. Audited: nothing on the classic
/api/vmroute, cmux-tuicloud machine-ioor cmux-platformMachineGuestlogs or stores it (cmux-platform#587 adds tests).Design: leo-workspace
design/cloud.md, "Subscription logins", rule 4.Test
CloudStartChatLoginTests(Release gate, consent and switch through the FFI) andCloudHarnessLoginCopySwitchTests(decode, TTL cap, stale is off).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
Enables Release builds to copy the user's own Claude login from their Mac to Cloud machines they own, after a one-time consent, while a remote off switch is on. Previously this was DEV and NIGHTLY only.
cmux.jsoncan say yes — any managed layer (MDM, team policy,defaults) holding the key is no, whatever its value. Settings > Machines can turn it off or on again.GET /v1/cloud/harness-login-copy) is read fresh before every copy and rechecked right before the login is written; unread, failed, or stale counts as off, and the machine's chat then offers one-click "Sign in to Claude".ownerguests of machines the caller owns; team guests never receive it in Release, and the new-workspace setup gates on the switch too.Written for commit 4c1c964. Summary will update on new commits.