cmux là lớp UI cho multi-agent
Multi-agent không chỉ cần model, prompt và context window. Khi nhiều worker chạy cùng lúc, ta còn cần một lớp nhìn thấy trạng thái của chúng.
cmux là lớp UI cho multi-agent
Một phòng điều khiển không làm máy móc thông minh hơn, nhưng làm con người biết máy nào đang chạy, máy nào kẹt, và máy nào vừa xong. Với multi-agent, phần bị nói thiếu thường không phải model hay prompt, mà là bề mặt quan sát. Khi sáu agent (tác nhân AI có thể nhận nhiệm vụ, dùng công cụ và trả kết quả) chạy cùng lúc, câu hỏi rất đời thường xuất hiện: mình nhìn chúng bằng gì?
Ở bài trước về Claude Code làm orchestrator, mình viết rằng parallel work cần git worktree và tmux, rồi nhắc OMX và cmux như bản productize của pattern đó. Bài này đi sâu vào cmux, vì nó không cố thay đổi nguyên tắc orchestration (điều phối nhiều tác nhân/công cụ theo một kế hoạch chung). Claude Code vẫn có thể là orchestrator, Codex và agy vẫn là worker headless. cmux chỉ làm phần giữa bớt mù: nó cho mình thấy ai đang làm gì, ở branch nào, có port nào đang mở, và khi nào cần chú ý.
Nói trước: cmux là chuyện máy Mac
Cần nói sớm và rõ: cmux là native macOS app. Nó viết bằng Swift/AppKit, dùng libghostty để render terminal bằng GPU, không phải Electron, và hiện không chạy trên Linux hay Windows. Nếu workflow của bạn nằm trên VPS/Linux, hoặc bạn cần detach/reattach qua SSH mỗi ngày, cmux không phải lựa chọn đúng. tmux vẫn là công cụ cross-platform chắc hơn. cmux là câu chuyện của local-Mac workflow, nơi nhiều agent chạy quanh repo trên máy cá nhân và bạn cần một lớp UI để nhìn chúng.
cmux v0.64.9 còn trẻ, miễn phí, GPL-3.0, và ra mắt vào tháng 2 năm 2026. Điều này đáng giữ trong đầu khi xây workflow dài hạn: CLI và Unix socket API có thể thay đổi, nên nếu bạn phụ thuộc sâu vào script, hãy pin theo build cụ thể. Mình không nhìn cmux như nền móng vĩnh viễn cho hạ tầng production. Nó giống một giao diện điều khiển đang lớn nhanh cho một kiểu làm việc đang hình thành.
Mental model của cmux
Hierarchy của cmux khá rõ: Window > Workspace > Surface > Pane. Window là cửa sổ app. Workspace nằm ở sidebar, thường tương ứng với một project, branch, task hoặc worktree. Surface là một tab trong workspace. Pane là split terminal bên trong surface. Cấu trúc này quan trọng vì nó khớp với cách multi-agent thật sự được vận hành: không chỉ có nhiều terminal, mà có nhiều đơn vị công việc cần metadata riêng.
Sidebar của cmux không chỉ là danh sách tab. Nó có thể hiển thị git branch, PR status, current working directory, ports, và last notification của từng workspace. Với workflow một repo nhiều worktree, đây là chi tiết rất đáng giá. Bạn không phải nhớ terminal nào đang ở branch worker-docs, terminal nào đang chạy dev server, terminal nào vừa báo cần approval. Những thứ tmux có thể làm bằng convention và script, cmux đưa lên bề mặt UI như một phần trải nghiệm mặc định.
Điểm này khớp trực tiếp với mô hình orchestrator. Trong setup Claude Code gọi worker headless qua CLI (command-line interface, giao diện dòng lệnh), MCP (Model Context Protocol, giao thức mở để ứng dụng AI gọi công cụ/dịch vụ theo chuẩn chung), hoặc script, worker thường vô hình. Bạn biết nó chưa trả kết quả, hoặc đã trả kết quả. Phần giữa là một khoảng mù. Nếu worker kẹt ở prompt approval, chạy sai thư mục, hoặc chờ một lệnh test quá lâu, orchestrator có thể không nhận được tín hiệu giàu đủ cho đến khi timeout hoặc output cuối xuất hiện.
cmux sửa đúng khoảng mù đó bằng surface layer. Mỗi agent có thể là một workspace riêng hoặc một native split. Sidebar giữ metadata để mình không phải đọc từng terminal. Notification ring báo khi agent xong hoặc cần duyệt. Một agent có thể log progress lên sidebar thay vì đổ mọi thứ vào terminal. Điều này không làm Codex, Claude hay agy thông minh hơn, nhưng làm hệ thống vận hành được ở quy mô nhiều phiên hơn.

Cách dễ: cmux claude-teams
Có hai cách chính để dùng cmux trong workflow Claude. Cách dễ nhất là cmux claude-teams. Lệnh này chạy Claude Code với agent teams bật lên, và các teammate agents xuất hiện như native cmux splits kèm sidebar metadata. Theo thông tin hiện tại, nó set CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1, nên cần xem đây là bề mặt experimental. Tên flag đã nói đủ: behavior có thể đổi. Với người thích thử local workflow nhanh, đây là nút bấm tốt; với người đang viết quy trình ổn định cho team, cần giữ mức kỳ vọng phù hợp.
Cách script: CLI và socket
Cách thứ hai là scriptable. cmux có CLI và Unix socket API. Mỗi cmux terminal tự set CMUX_WORKSPACE_ID và CMUX_SURFACE_ID, nên lệnh chạy trong pane có thể mặc định tác động vào “chính chỗ này” mà không cần truyền id dài. Các lệnh như cmux <path>, cmux new-split, cmux send, cmux list-surfaces cho phép mở workspace, tạo split, gửi lệnh và liệt kê surface. Phần mình thấy thú vị hơn là sidebar self-reporting qua cmux set-progress, cmux log, cmux notify. Một worker không chỉ in text; nó có thể cập nhật trạng thái cho UI.
Ví dụ một script fan-out có thể mở ba worktree: code, docs, tests. Với mỗi worktree, script mở một cmux workspace, chạy worker tương ứng, rồi dùng cmux set-progress để báo đang đọc repo, đang sửa patch, đang chạy test. Khi xong, worker gọi cmux notify với message ngắn. Claude Code, với vai orchestrator, vẫn là nơi đọc patch và quyết định merge. cmux chỉ giúp người điều phối hoặc chính Claude trong terminal thấy trạng thái phân tán rõ hơn.
Git worktree vẫn là xương sống
Git worktree vẫn là backbone. cmux không thay thế Git, và cũng không nên. Mỗi worktree mở thành workspace riêng, branch hiện ở sidebar, và patch của từng worker nằm trong không gian file tách biệt. Đây là ranh giới chống lộn xộn quan trọng hơn mọi UI. Nếu nhiều agent cùng sửa một working tree, cmux có đẹp đến đâu cũng chỉ làm bạn nhìn thấy sự rối nhanh hơn.

cmux không giết tmux
So với tmux, ranh giới khá rõ. tmux thắng ở cross-platform, VPS, SSH, detach/reattach, và độ bền của một công cụ terminal lâu năm. Nếu bạn chạy agent trên server xa, tmux vẫn là lựa chọn tự nhiên. cmux thắng ở local Mac visual workflow: sidebar metadata, notification ring, embedded browser, session restore, và cảm giác mỗi workspace là một đơn vị công việc nhìn được. cmux cũng cố tình nói cùng vocabulary với tmux command, nên nhiều script cũ có thể port tương đối dễ, nhưng đừng nhầm nó là tmux mới cho mọi môi trường.
Có thể nhắc Warp một lần để đặt cmux vào bản đồ. Warp có hướng cloud orchestration, trải nghiệm polished, nhưng paid và cloud-hosted. Mình vẫn thích giữ Claude Code local làm orchestrator, nhất là khi repo, auth, và workflow cá nhân nằm trên máy. cmux hợp với hướng này vì nó không buộc mình đưa toàn bộ điều phối lên cloud. Nó là lớp UI local cho một kiểu làm việc vốn đã local.
Giá trị lớn nhất là hết mù
Điều mình thích ở cmux không phải là nó “giải quyết multi-agent”. Nó không giải quyết decomposition, không thay bạn quyết định task nào nên giao worker, không làm prompt tốt hơn, không làm context window (cửa sổ ngữ cảnh, lượng thông tin model giữ được trong phiên làm việc) rộng hơn. Nó giải quyết một vấn đề thấp hơn nhưng rất thật: blindness. Khi một worker chạy headless (không có giao diện tương tác, chạy nền qua lệnh hoặc script), bạn cần biết nó đang sống hay kẹt. Khi nhiều worker cùng chạy, bạn cần biết cái nào đáng nhìn trước.
Cũng vì vậy, mình nghĩ cmux nên được đưa vào workflow sau khi pattern đã rõ. Nếu bạn vẫn đang dùng một Claude Code session và thỉnh thoảng gọi Codex v0.130.0 qua codex exec, terminal thường là đủ. Nếu bạn bắt đầu chạy Codex, agy CLI (v1.0.0, khác Antigravity desktop app v2.x), test runner, dev server, và docs pass song song, UI bắt đầu có giá trị. Nếu bạn cần schema (khuôn dữ liệu mô tả cấu trúc output) để worker trả JSON sạch, đó là phần machine-readable; nếu bạn cần biết worker đang ở đâu trong đời thực, đó là phần human-visible. Hai thứ này bổ sung cho nhau.

Nói cách khác, cmux không làm kiến trúc multi-agent sâu hơn, nó làm nó có thể quan sát được. Điều này nghe ít sexy hơn model mới, nhưng trong công việc thật, quan sát được là điều kiện để tin được. Một hệ thống chạy nền mà không có trạng thái rõ sẽ khiến mình hoặc kiểm tra quá nhiều, hoặc tin quá mức vào kết quả cuối. Cả hai đều làm giảm chất lượng điều phối.
Mình nghĩ cuộc thảo luận về multi-agent đang hơi lệch về model, prompt, MCP, context window và chi phí token. Những thứ đó quan trọng, nhưng còn một câu hỏi rất bình thường: khi nhiều agent chạy cùng lúc, màn hình làm việc của bạn trông như thế nào? Với người dùng Mac local, cmux là một câu trả lời đáng thử. Với Linux, Windows, VPS, tmux vẫn là câu trả lời bền hơn. Còn với mỗi người đang tự xây workflow AI của mình, câu hỏi mở là: nếu sáu agent cùng chạy, bạn muốn nhìn chúng qua terminal text, qua sidebar có trạng thái, hay qua một lớp điều phối khác chưa tồn tại?