Skip to content

Add Rust cloud CLI entrypoint - #4601

Open
lawrencecchen wants to merge 11 commits into
mainfrom
task-cmux-cloud-cli
Open

lawrencecchen wants to merge 11 commits into
mainfrom
task-cmux-cloud-cli

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented May 23, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add a Rust cmux-cloud helper for the cmux cloud command.
  • Have the Swift cmux launcher exec the bundled helper for cmux cloud while keeping cmux vm as the compatibility command.
  • Build and verify cmux-cloud in Xcode, nightly, and release flows.

Testing

  • cargo fmt --manifest-path Native/CloudCLI/Cargo.toml --check
  • cargo test --manifest-path Native/CloudCLI/Cargo.toml
  • ./scripts/build-cloud-cli.sh
  • ./scripts/reload.sh --tag cloudcli
  • Packaged CLI: cmux cloud --help, cmux cloud new --provider bad
  • CMUX_CLI_BIN=... python3 tests/test_cli_contract_help.py

Issues

  • Related: plain-text task, cmux cloud CLI should be Rust-backed and available as cmux cloud

View with Codesmith Autofix with Codesmith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.


Note

Medium Risk
Introduces a new bundled Rust executable and changes the cloud CLI dispatch path to execv into it, which can affect core VM workflows and release/nightly packaging if the helper build/lookup/env plumbing is wrong.

Overview
Makes cmux cloud a Rust-backed entrypoint by adding a bundled cmux-cloud helper (new Native/CloudCLI crate) and teaching the Swift launcher to execv into it for non-relay sockets, passing socket/password/window/id-format context via CMUX_CLOUD_* env.

Keeps cmux vm as a compatibility alias, updates help text and docs/cli-contract.md, and adds localized error strings for missing/failed helper launches.

Adds an Xcode build phase plus scripts/build-cloud-cli.sh to build/sign a universal (arm64+x86_64) cmux-cloud binary, and extends nightly/release CI to verify the helper’s architectures alongside existing binaries.

Reviewed by Cursor Bugbot for commit 4a2ff4f. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

cmux cloud now uses the bundled Rust cmux-cloud helper for local sockets instead of the Swift VM path; relay sockets keep the Swift path. cloud is now the primary command, while vm remains a compatibility alias.

Details

  • The helper handles rm, exec, and ssh-info, retries transient socket failures, focuses the requested window, and redacts socket credentials from errors.
  • Creation, listing, interactive sessions, and other unsupported operations delegate to the existing Swift implementation, preserving billing, image selection, and private transport behavior.
  • Delegation passes socket, password, JSON, ID-format, and window settings through CMUX_CLOUD_*; CMUX_CLOUD_CLI_PATH can override the bundled executable.
  • cloud new remains idempotent, supports --detach, and clears its idempotency record after attaching.

Build and docs

  • Xcode and scripts/build-cloud-cli.sh build and bundle a signed universal cmux-cloud binary.
  • Nightly and release workflows verify both arm64 and x86_64 slices, and the CLI contract documents the new dispatch behavior.

Written for commit 214ed4a. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Cloud is now a first-class CLI command with subcommands for listing, creating, destroying, exec, shell/attach and SSH; vm remains a compatibility alias. A bundled cloud helper binary is invoked for certain cloud flows.
  • Documentation

    • CLI help and docs updated to present Cloud as primary and document the Cloud VM subcommand contract and examples.
  • Chores

    • Build now produces and bundles a universal Cloud CLI binary; release/nightly workflows validate its macOS architectures.
  • Localization

    • Added localized messages for missing or failed-to-launch cloud helper.

Review Change Stack

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@vercel

vercel Bot commented May 23, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 23, 2026 9:43am
cmux-staging Building Building Preview, Comment May 23, 2026 9:43am

@coderabbitai

coderabbitai Bot commented May 23, 2026 •

Copy link
Copy Markdown

Important

Review skipped

We couldn't safely recover the incremental review. No full review was started, and the last reviewed checkpoint was preserved. Retry later, or explicitly request a full review by commenting @coderabbitai full review.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR introduces cmux cloud as a first-class CLI subcommand with a new Rust cmux-cloud binary, Swift launch/dispatch integration, a build script to produce universal macOS binaries, Xcode build-phase wiring, CI verification of architectures, docs updates, and localized error strings.

Changes

Cloud CLI Implementation and Integration

Layer / File(s) Summary
Rust Cloud CLI: Core types, socket I/O, and entrypoint
Native/CloudCLI/Cargo.toml, Native/CloudCLI/src/main.rs
Crate metadata and core runtime: CloudContext, socket connection with validation/retry, newline-delimited v2 RPC I/O, and the main entrypoint that parses argv/env and dispatches subcommands.
Rust Cloud CLI: Subcommand handlers
Native/CloudCLI/src/main.rs
Implements cloud ls, cloud new (with local idempotency/TTL), cloud rm, cloud exec (terminator + shell quoting), cloud ssh-info, and delegated interactive flows to parent cmux vm.
Rust Cloud CLI: Utilities and tests
Native/CloudCLI/src/main.rs
Window-handle normalization/validation, idempotency persistence under $HOME/.cmuxterm/, request-id/time helpers, option parsing, error/details formatting/redaction, shell quoting, and unit tests.
Swift Bridge: Command dispatch and cloud binary launch
CLI/cmux.swift
Adds relay-path classification, resolves and launches the bundled cmux-cloud via execv with CMUX_CLOUD_* env, routes the cloud subcommand to the helper when appropriate, clears idempotency env, and updates help/examples/usage text.
Build Infrastructure: Rust compilation and universal binary packaging
scripts/build-cloud-cli.sh
Determines Rust macOS targets from Xcode env or host, ensures rustup targets, builds per-target release artifacts, merges per-arch artifacts with lipo into a universal cmux-cloud, and optionally codesigns the result.
Xcode build phase and CI/CD validation
cmux.xcodeproj/project.pbxproj, .github/workflows/nightly.yml, .github/workflows/release.yml
Inserts a "Build Cloud CLI" shell-script phase into the Xcode cmux target to run the build script and stage cmux-cloud, and extends nightly/release workflows to verify the cmux-cloud binary contains both arm64 and x86_64.
Docs and localization
docs/cli-contract.md, Resources/Localizable.xcstrings
Splits cloud and vm into distinct top-level commands, adds a "Cloud VM subcommands" section, and adds localized keys for cloud helper missing/launch-failed messages.

Sequence Diagram

sequenceDiagram
  participant User
  participant CMux as cmux (Swift)
  participant Cloud as cmux-cloud (Rust)
  participant Socket as UnixSocketDaemon
  User->>CMux: cmux cloud new --image <image>
  CMux->>CMux: resolve cmux-cloud executable path & env
  CMux->>Cloud: execv(cmux-cloud, env: CMUX_CLOUD_SOCKET_PATH, CMUX_CLOUD_SOCKET_PASSWORD, CMUX_CLOUD_JSON, CMUX_CLOUD_WINDOW, ...)
  Cloud->>Cloud: parse argv, CloudContext::from_env
  Cloud->>Socket: connect (with retry & timeouts)
  Socket->>Cloud: v2 RPC responses / auth probe results
  Cloud->>Socket: v2 RPC request: vm.create / vm.exec / vm.list
  Cloud->>Cloud: persist idempotency record (when applicable)
  Cloud->>CMux: execv parent cmux vm (when delegating interactive flows)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • manaflow-ai/cmux#4211: Overlaps on --window/window_id parsing and window-scoped request plumbing used by the cloud CLI.

Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (3 errors, 1 warning)

Check name Status Explanation Resolution
Cmux Swift Actor Isolation ❌ Error SocketPasswordResolver (line 1326) is a pure utility enum with only static methods but lacks the required 'nonisolated' annotation per swift-actor-isolation.md rules for helpers. Mark SocketPasswordResolver as: nonisolated enum SocketPasswordResolver { ... } to avoid unnecessary MainActor coupling per the rules.
Cmux User-Facing Error Privacy ❌ Error Two user-facing error messages expose environment variable names in violation of the rules: (1) Line 269 exposes CMUX_SOCKET_PATH in error message, (2) Line 874 exposes HOME in error message. Remove environment variable names from user-visible error messages. Replace with generic user-friendly messages directing users to reload cmux or check documentation.
Cmux Full Internationalization ❌ Error New user-facing Swift CLI help for 'cloud'/'vm' and Rust CLI output lack localization. Swift help not using String(localized:). Rust cmux-cloud has hardcoded user-facing strings. Localize Swift command help using String(localized:) with xcstrings entries for all 20 locales. Implement localization for Rust CLI output or document exemption as operational CLI utility.
Docstring Coverage ⚠️ Warning Docstring coverage is 12.66% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (13 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically summarizes the main change: adding a Rust-backed cloud CLI entrypoint, which aligns with the core objective of the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Blocking Runtime ✅ Passed No blocking synchronization primitives found in Swift changes: no semaphores, sleeps, locks, main-queue sync, or polling. New functions use execv to delegate cloud commands to helper binary.
Cmux No Hacky Sleeps ✅ Passed The only in-scope file (scripts/build-cloud-cli.sh) contains no sleep, timeout, polling, or other hacky timing constructs. It's a clean build script using standard tools.
Cmux Swift Concurrency ✅ Passed 122 new lines in CLI/cmux.swift use only synchronous POSIX APIs (execv, setenv). Zero DispatchQueue.global().async, Combine, completion handlers, or fire-and-forget Tasks found.
Cmux Swift @Concurrent ✅ Passed All new Swift functions in CLI/cmux.swift are synchronous; no async/nonisolated async declarations or @concurrent annotations found.
Cmux Swift File And Package Boundaries ✅ Passed CLI/cmux.swift adds only 122 lines (below 250 threshold), cloud logic delegated to separate Rust binary, no responsibility mixing—just focused dispatch/execution helpers with clear single purposes.
Cmux Swift Logging ✅ Passed New Swift code in CLI/cmux.swift complies with logging rules: no problematic print/NSLog statements, no ad hoc diagnostics, no unredacted secrets, errors use localized messages.
Cmux Swiftui State Layout ✅ Passed PR adds Rust cloud CLI and updates CLI tool (CLI/cmux.swift) to execute it; no SwiftUI Views, @Observable/@published state, GeometryReader, or lazy/list store references found in any changes.
Cmux Architecture Rethink ✅ Passed Clean conditional dispatch by socket type using execv process delegation (a required platform bridge). No timing repairs, duplicate paths, new state observers, or split lifecycle ownership.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR adds no NSWindow, NSPanel, NSWindowController, SwiftUI Window, or WindowGroup. Only CLI/cmux.swift modified with dispatch logic and helper binary resolution.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task-cmux-cloud-cli

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented May 23, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a Rust-backed cmux-cloud binary and routes cmux cloud subcommands through it for local (non-relay) sockets, while keeping the existing Swift path for relay sockets and preserving cmux vm as a compatibility alias.

  • New cmux-cloud Rust crate (Native/CloudCLI/) implements ls, new, rm, exec, ssh-info, and delegates interactive shell/attach/ssh back to the parent Swift CLI via Unix exec(). Previous issues with signal/exit-code semantics, password exposure in argv, and remote exec exit-code propagation are all addressed in this revision.
  • Swift routing (CLI/cmux.swift): detects cloud on non-relay paths and execvs the bundled helper, passing context via CMUX_CLOUD_* env vars. An idempotency-clearing hook lets the Rust helper signal the parent to drop stale vm.create keys after a successful attach.
  • Build/CI updates: Xcode gains a "Build Cloud CLI" phase, nightly and release workflows validate the universal (arm64 + x86_64) binary, and Localizable.xcstrings adds localized error strings for the missing/failed-to-launch helper cases.

Confidence Score: 5/5

Safe to merge; the new Rust binary, Swift routing, and build integration are all well-structured and the previously flagged issues have been addressed.

The exec/signal semantics, password-in-argv, and remote exit-code issues raised in earlier rounds are all fixed. The Cargo.lock dependencies (zmij, serde_core) are legitimate crates. The only finding is that 18 non-Japanese locales in the new xcstrings entries carry English copy marked as 'translated' instead of real translations — a localization quality issue rather than a functional defect.

Resources/Localizable.xcstrings — the two new string keys should have actual translations for all supported locales before shipping to non-English users.

Important Files Changed

Filename Overview
Native/CloudCLI/src/main.rs New 1 300-line Rust binary implementing ls/new/rm/exec/ssh-info/shell/attach/ssh subcommands. Previously flagged issues (exec semantics, password in argv, exit-code propagation) are all addressed. Code is well-structured with tests.
CLI/cmux.swift Routes cmux cloud on non-relay sockets to execv into cmux-cloud; adds idempotency-clearing helpers and env-var-based password forwarding. Logic is correct.
Resources/Localizable.xcstrings Adds cli.cloud.helper.missing and cli.cloud.helper.launchFailed; only Japanese is actually translated — 18 other locales copy the English text verbatim but mark state as "translated".
scripts/build-cloud-cli.sh Builds a universal cmux-cloud binary via cargo + lipo; handles TARGET_TRIPLE/ARCHS from Xcode and code-signs when identity is present. No issues.
Native/CloudCLI/Cargo.lock All deps are legitimate crates.io packages (zmij by dtolnay replaces ryu; serde_core is the new serde trait-only split). Checksums are present.

Sequence Diagram

sequenceDiagram
    participant User
    participant Swift as cmux (Swift)
    participant Rust as cmux-cloud (Rust)
    participant Socket as cmux daemon

    User->>Swift: cmux cloud subcommand
    Swift->>Swift: isRelaySocketPath()?
    alt relay socket
        Swift->>Socket: "vm.* (existing Swift path)"
        Socket-->>Swift: response
        Swift-->>User: output
    else local socket
        Swift->>Rust: "execv(cmux-cloud, env: CMUX_CLOUD_*)"
        Note over Swift,Rust: process image replaced
        alt ls / new / rm / exec / ssh-info
            Rust->>Socket: v2 RPC (vm.list / vm.create / etc.)
            Socket-->>Rust: response
            Rust-->>User: output
        else shell / attach / ssh
            Rust->>Swift: exec(cmux vm shell id)
            Note over Rust,Swift: process image replaced
            Swift->>Socket: vm.shell / attach
            Socket-->>User: interactive session
        end
        opt cloud new non-detach
            Note over Rust,Swift: sets CMUX_CLOUD_CLEAR_IDEMPOTENCY_*
            Swift->>Swift: clearVMCreateIdempotencyFromCloudEnvironment()
        end
    end
Loading

Reviews (6): Last reviewed commit: "fix: retry cloud cli socket connect" | Re-trigger Greptile

Comment thread Native/CloudCLI/src/main.rs
Comment thread Native/CloudCLI/src/main.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux.swift`:
- Around line 2650-2655: The loop over candidates incorrectly treats directories
with traverse permission as executables; update the check in the candidates
iteration (the code using variable candidate and path and calling
fileManager.isExecutableFile(atPath:)) to first call
fileManager.fileExists(atPath:isDirectory:) (or equivalent) and ensure
isDirectory == false before calling isExecutableFile(atPath:), returning the
path only if it is not a directory and is executable.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 37a817f1-dd8e-4e11-8981-dfc93880bf38

📥 Commits

Reviewing files that changed from the base of the PR and between 3874faa and f7932dd.

⛔ Files ignored due to path filters (1)
  • Native/CloudCLI/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (8)
  • .github/workflows/nightly.yml
  • .github/workflows/release.yml
  • CLI/cmux.swift
  • Native/CloudCLI/Cargo.toml
  • Native/CloudCLI/src/main.rs
  • cmux.xcodeproj/project.pbxproj
  • docs/cli-contract.md
  • scripts/build-cloud-cli.sh

Comment thread CLI/cmux.swift
Comment thread Native/CloudCLI/src/main.rs
Comment thread Native/CloudCLI/src/main.rs Outdated
Comment thread Native/CloudCLI/src/main.rs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux.swift`:
- Line 2698: The CLI error messages in CLI/cmux.swift (e.g., the user-facing
strings produced by the CLIError cases around the CLIError enum/throw sites
at/near the symbols mentioned on lines ~2698 and ~2735) are hardcoded English;
update those messages to use Swift's localized API (for example
String(localized:defaultValue:)) instead of raw literals and add matching
entries to the string catalog, or if localization is intentionally exempt, add a
short documented exemption comment near the CLIError declaration; ensure every
user-facing string in the CLIError cases uses the localized API with a
corresponding catalog key.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5ef0623d-4821-4ab3-a274-e49483e56815

📥 Commits

Reviewing files that changed from the base of the PR and between f7932dd and 75b9482.

📒 Files selected for processing (3)
  • CLI/cmux.swift
  • Native/CloudCLI/src/main.rs
  • cmux.xcodeproj/project.pbxproj

Comment thread CLI/cmux.swift Outdated
Comment thread Native/CloudCLI/src/main.rs Outdated
Comment thread Native/CloudCLI/src/main.rs Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Native/CloudCLI/src/main.rs (1)

418-425: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Clear the idempotency record after a successful interactive handoff.

This path never clears the persisted key on success. exec_parent_vm() calls Command::exec(), so once the delegated shell starts, control never returns here to remove the record. A second cmux cloud new with the same image/provider inside the 10-minute TTL will therefore reuse the previous VM instead of creating a new one. Add a success-path cleanup mechanism here, or hand cleanup responsibility to the delegated flow.

Also applies to: 583-589

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Native/CloudCLI/src/main.rs` around lines 418 - 425, The idempotency key
persists because exec_parent_vm() calls Command::exec() and never returns, so
clear the persisted idempotency record before handing off to the delegated
shell: add a call to the same cleanup helper used to create the key (e.g.
remove_idempotency_record(...) / clear_idempotency_key(...)) right before
exec_parent_vm(ctx, &vm_args) in the block that constructs vm_args (using id and
target_window), and mirror the same pre-exec cleanup in the other delegated
handoff path that also calls exec_parent_vm (the similar block later in the
file). Ensure the cleanup call succeeds (log/ignore errors) before calling
exec_parent_vm so the persisted key is not reused by subsequent runs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@Native/CloudCLI/src/main.rs`:
- Around line 418-425: The idempotency key persists because exec_parent_vm()
calls Command::exec() and never returns, so clear the persisted idempotency
record before handing off to the delegated shell: add a call to the same cleanup
helper used to create the key (e.g. remove_idempotency_record(...) /
clear_idempotency_key(...)) right before exec_parent_vm(ctx, &vm_args) in the
block that constructs vm_args (using id and target_window), and mirror the same
pre-exec cleanup in the other delegated handoff path that also calls
exec_parent_vm (the similar block later in the file). Ensure the cleanup call
succeeds (log/ignore errors) before calling exec_parent_vm so the persisted key
is not reused by subsequent runs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5bb43e91-64eb-4f51-a4d1-981cdebd2461

📥 Commits

Reviewing files that changed from the base of the PR and between 75b9482 and a610404.

📒 Files selected for processing (2)
  • CLI/cmux.swift
  • Native/CloudCLI/src/main.rs

Comment thread Native/CloudCLI/src/main.rs Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

There are 2 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0cc0c60. Configure here.

Comment thread Native/CloudCLI/src/main.rs
@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@lawrencecchen

Copy link
Copy Markdown
Contributor Author

Mac fleet instructions for head 214ed4a6357ea651b98952a464a83cc3009efb8f. Planned tag: pr-4601-214ed4a6; this is not yet a published build.

JOB_JSON=$(~/.local/bin/cmux-ci submit --kind cmux --command 'CMUX_FLEET_BUILD_TAG=pr-4601-214ed4a6 /Users/Shared/cmux-build-fleet/recipes/cmux.sh https://github.com/manaflow-ai/cmux.git 214ed4a6357ea651b98952a464a83cc3009efb8f' --artifact artifacts/cmux.app.zip --workspace https://github.com/manaflow-ai/cmux/pull/4601 --source-digest 214ed4a6357ea651b98952a464a83cc3009efb8f --cache-key cmux:pr-4601 --min-free-bytes 268435456000 --label cmux --label ram48)
JOB_ID=$(python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])' <<<"$JOB_JSON")
~/.local/bin/cmux-ci wait "$JOB_ID" --receipt artifacts/fleet/$JOB_ID.json
~/.local/bin/cmux-ci publish-hq "$JOB_ID"

Use an existing campaign job ID if one is already posted; do not submit a duplicate. A wait timeout leaves the remote job running. Published results will include an exact-head artifact link and timing/disk receipt. This recipe validates the macOS app only, not iOS or tests. Never use maclease or put credentials in a PR comment.

@github-actions

Copy link
Copy Markdown
Contributor

Automatic catch-up: main is green again and this branch needed it.

I tried to catch this branch up with main (0f200fd5ca1f), but these files need a person:

  • CLI/cmux.swift: not a generated file; needs a person

Nothing was pushed. Merge main locally, fix those, and push; /catch-up is there again whenever you want it.

Automatic catch-up will not try this head again; a new push or /catch-up does.
Label the pull request no-auto-catch-up to opt out.

Catch-up run

@github-actions

Copy link
Copy Markdown
Contributor

Automatic catch-up: main is green again and this branch needed it.

I tried to catch this branch up with main (0f200fd5ca1f), but these files need a person:

  • CLI/cmux.swift: not a generated file; needs a person

Nothing was pushed. Merge main locally, fix those, and push; /catch-up is there again whenever you want it.

Automatic catch-up will not try this head again; a new push or /catch-up does.
Label the pull request no-auto-catch-up to opt out.

Catch-up run

@teamleaderleo teamleaderleo added S2: major A crash, hang, lost state, broken connection, or a regression on a path people use area: cloud Cloud machines and workspaces, relay transport area: cli The cmux CLI, cmux-tui, the socket API and SDKs labels Sep 30, 2026

This branch was successfully deployed

1 active (outdated) deployment
Preview – cmux — 4a2ff4fd Deployed May 23, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli The cmux CLI, cmux-tui, the socket API and SDKs area: cloud Cloud machines and workspaces, relay transport S2: major A crash, hang, lost state, broken connection, or a regression on a path people use

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants