Tách các AI agent chạy song song vào worktree riêng

Dùng git worktree cho AI agent nghĩa là mỗi coding agent trong một repo (Claude Code, Codex, OpenCode) có branch và bộ file riêng. MXterm Pro tự động hóa việc này: bạn chọn cô lập worktree khi tạo workspace, và mỗi agent pane mở trong worktree riêng, trên một branch mới, không cần gõ git worktree add bằng tay. Nếu không cô lập, lệnh git checkout hoặc git stash của agent này có thể ghi đè file mà agent khác đang sửa.
Khi nào cần tách worktree riêng cho từng agent
Một agent chạy một mình trong repo thì không có gì để va chạm. Thư mục làm việc chính là đủ, và bật cô lập cũng chẳng mang lại gì.
Cô lập chỉ có ý nghĩa khi bạn chạy từ hai agent trở lên trên cùng một repo cùng lúc. Swarm Task Orchestrator của MXterm Pro có sẵn hai preset cho trường hợp này. "Full Swarm Trio (Lead, QA, Docs)" chạy Claude Code, Codex và OpenCode cùng nhau. "Feature Duo (Dev + Tester)" ghép Claude Code với Codex. Cả hai đều mặc định bật cô lập worktree khi bạn khởi chạy.
Bạn không cần dùng preset. Mở một tab mới, chọn các agent, rồi tự chọn "Tách biệt tính năng bằng Git Worktree" trong form tạo workspace. Ô này mặc định tắt và chỉ hoạt động trong git repository. Pane bạn chia thêm sau đó mở trong thư mục workspace, không nằm trong worktree riêng.
Bài liên quanTerminal docker build trên Mac: build cạnh phiên SSH deploy trong một cửa sổCách MXterm Pro tạo sẵn worktree cho từng agent pane
Tùy chọn này xuất hiện ở hai nơi và có tác dụng như nhau: màn hình Thêm Không gian ("Tách biệt tính năng bằng Git Worktree") và hộp thoại Swarm Task Orchestrator ("Cô lập từng tính năng bằng Git Worktree"), hộp thoại bạn thấy khi khởi chạy một preset. Tài liệu agent và Control Room (trước đây là War Room) mô tả cùng thiết lập này.
Khi bật, mỗi agent pane mới có một bản checkout riêng trong thư mục .worktrees/ của repo. Branch được tạo mới, đặt tên swarm/<adjective>-<noun>, ví dụ swarm/brave-otter. Pane terminal thường, không gắn agent, vẫn mở ở thư mục gốc của repo và không bị đụng tới.
Tên được chọn ngẫu nhiên từ khoảng 17.000 tổ hợp, không đánh số tuần tự, nên hai lần chạy không vô tình dùng lại một worktree cũ. Nếu tên đã tồn tại, MXterm thử lại với hậu tố số (swarm/brave-otter-2, rồi -3, và cứ thế), thử tối đa năm tên rồi bỏ cuộc với pane đó.
MXterm tự thêm thư mục .worktrees/ vào .gitignore của repo ngay lần đầu tạo nó. Các bản checkout dùng một lần này không bao giờ hiện thành thay đổi untracked trong working tree chính của bạn.
Nếu thư mục bạn trỏ MXterm tới không phải git repository, app bỏ qua cô lập thay vì ép làm. Đến bản 1.0.21, app từng chạy git init, git add . và một commit trên những thư mục như vậy, và có thể kéo một file .env hoặc private key vào một lịch sử không ai yêu cầu. Từ bản 1.0.22, app không còn chạy git init trên chúng nữa.
Form tạo workspace giờ hiện thông báo "Thư mục này không phải là repo git, nên các agent sẽ dùng chung thư mục trực tiếp (không tách biệt worktree)". Các pane mở không cô lập ở thư mục gốc, và mỗi pane có một thông báo tắt được, nêu lý do. Nếu muốn cô lập, bạn chạy git init và tự tạo commit đầu tiên.
Có một ngoại lệ: trong repo đã có sẵn nhưng chưa có commit nào, form tạo workspace và hộp thoại Swarm Task Orchestrator tạo một file .gitkeep rỗng và chỉ commit đúng file đó với message "Initial commit" trước khi tạo worktree (các file khác đã có trong thư mục không được stage), vì worktree cần một commit để rẽ branch.
Header của mỗi pane hiển thị tên branch của worktree dưới dạng một badge nhỏ. Bạn biết agent đang ở branch nào mà không cần mở panel Git.
Worktree được tạo tuần tự, có chủ đích: các lệnh git worktree add chạy đồng thời trên một repo tranh nhau file khóa của git, và một lỗi thoáng qua có thể làm mất cô lập của cả một pane. Nếu không tạo được worktree (lỗi khóa git, hết dung lượng đĩa hay lý do khác, sau khi đã thử lại tên trùng), pane đó quay về thư mục gốc repo và ghi log một cảnh báo. Phần còn lại của workspace vẫn mở bình thường.
Tránh xung đột file giữa các AI agent: ngăn được gì, không ngăn được gì
Lấy một trường hợp cụ thể: chạy "Feature Duo", Claude Code nằm trên branch và worktree riêng, Codex nằm trên một cái khác.
Nếu không cô lập, cả hai agent dùng chung một thư mục làm việc. Nếu Codex chạy git checkout hoặc git stash giữa chừng, các file Claude Code đang mở trên đĩa sẽ thay đổi ngay giữa lúc nó đang dùng. Không agent nào biết, ở lần gọi tool kế tiếp, vì sao file vừa ghi lại không khớp với nội dung đọc lại.
Với các worktree riêng, mỗi agent có bản sao riêng của mọi file, checkout ở branch riêng. Cách này giảm khả năng lệnh checkout của một agent ghi đè file mà agent khác đang mở.
Cô lập không loại bỏ mọi kiểu xung đột. Hai agent cùng sửa một tính năng từ hai hướng vẫn có thể tạo ra các branch cần một lần merge thật, có người xem xét, ở bước sau, và MXterm không tự động hóa phần đó. Cái mà cô lập loại bỏ hẹp hơn và thuần cơ học: cuộc tranh giành ở mức filesystem quanh một thư mục làm việc dùng chung.
Worktree không phải sandbox. Pane vẫn là một shell bình thường, nên agent có thể rời khỏi thư mục của nó và chạy mọi lệnh mà tài khoản của bạn chạy được. Mọi worktree cũng dùng chung một .git phía sau repo. Cô lập chỉ giữ file của các agent tách nhau, chứ không giới hạn những gì agent làm được.
Thêm, merge và xóa worktree giữa phiên
Cô lập không chỉ được quyết định lúc tạo workspace. Trong lúc phiên chạy, một agent có thể tạo một pane worker cô lập mới cho một tác vụ con được giao, bằng tool worktree.spawn. Cách này chỉ hoạt động trong workspace được tạo khi bật cô lập worktree.
Việc merge cố ý để thủ công. Khi branch của agent sẵn sàng, bạn merge theo cách thông thường: git merge swarm/brave-otter từ worktree chính, hoặc push rồi mở pull request, tùy team bạn đang làm cách nào. Việc của MXterm dừng ở chỗ tạo worktree và dọn nó sau này. MXterm không quyết định code bên trong được xử lý ra sao.
Việc xóa được làm thận trọng có chủ đích, và có hai đường xóa riêng tùy ai gọi. Agent chỉ xóa được worktree không còn thay đổi nào chưa commit. Nếu còn, thao tác bị từ chối hẳn, không có cách ghi đè.
Xóa từ giao diện thì khác. Nút "Dọn worktree…" nằm cạnh danh sách worktree của panel Git. Nút này dọn các mục lỗi thời (worktree đã mất thư mục) mà không hỏi xác nhận, rồi mở một hộp thoại.
Trong hộp thoại, các worktree có file chưa commit được liệt kê theo branch, kèm số file của từng cái. Chúng mặc định không được chọn, nên bạn tự chọn từng cái muốn xóa. Các worktree không có gì chưa commit chỉ được tóm tắt bằng một con số, và bị xóa khi bạn xác nhận.
Hộp thoại chỉ đếm các commit vượt trước upstream của branch, mà branch MXterm tạo ra không có upstream, nên với chúng nó không đếm commit nào. Hãy tự kiểm tra commit của branch trước khi xác nhận, vì thao tác xóa cũng xóa luôn branch bằng git branch -D.
Không đường nào tự chạy. Đóng một pane, một workspace hay cả app đều không bao giờ tự xóa worktree. Việc dọn chỉ xảy ra khi bạn, hoặc một agent làm việc trong giới hạn chặt của nó, chủ động làm.
Một ràng buộc cần biết trước: thư mục của worktree không bao giờ được đổi tên sau khi tạo, vì trạng thái phiên của agent gắn với đường dẫn tuyệt đối đó. Bạn có thể đổi tên branch git bên trong thoải mái, nhưng không đổi được tên thư mục.
Free và Pro: giới hạn nằm ở đâu
Cô lập worktree không phải tùy chọn chỉ dành cho Pro. Nó hoạt động như nhau ở cả hai gói.
Cái bị giới hạn là kích thước của một Control Room. Mặc định gói Free không giới hạn số pane, nhưng giới hạn mỗi Control Room (nhóm agent dùng chung ngữ cảnh) ở 2 thành viên. Các giới hạn Free khác, 5 SSH host đã lưu và 1 Machine đã lưu, không liên quan tới worktree. Gói Pro gỡ các giới hạn này.
Preset "Feature Duo" (2 agent, 2 worktree) nằm gọn trong giới hạn 2 thành viên Control Room của gói Free. "Full Swarm Trio" có ba agent, nên một Control Room gồm cả ba cần Pro.
Git worktree so với iTerm2, Warp, Termius và MobaXterm
Phương án miễn phí thay cho tự động hóa của MXterm không phải một app khác. Đó là git worktree cho AI agent do bạn tự dựng bằng tay, với các lệnh git worktree add và git worktree remove trong terminal bạn đang dùng. Cách này chạy tốt với một hoặc hai agent.
Phần MXterm Pro loại bỏ là khâu quản lý lặt vặt khi số agent tăng lên: nghĩ một tên branch không trùng, tạo worktree, nối thư mục làm việc của pane vào đó, và từ chối xóa nhầm một worktree còn việc chưa commit.
iTerm2 là một terminal emulator macOS xuất sắc, script hóa rất sâu. Như các terminal thuần khác, nó không tự tạo git worktree cho bạn. Chạy quy trình này ở đó nghĩa là gõ git worktree add bằng tay cho từng pane, rồi nhớ tự git worktree remove và xóa branch về sau.
Warp cũng đặt một AI agent ở vị trí trung tâm trong terminal. Nó chạy được nhiều agent cùng lúc trong các tab hoặc pane riêng, và hướng dẫn multi-agent của chính Warp khuyên dùng một git worktree cho mỗi agent (xem MXterm Pro vs Warp). Góc tiếp cận của MXterm Pro hẹp hơn: khi bật cô lập, chính app tạo branch và worktree cho từng agent pane.
Terminal đa pane, Command Recipes (Cmd+J), và Control Room (trước đây là War Room) đa agent: miễn phí để bắt đầu.
Đã có MXterm Pro? Đọc hướng dẫn cài đặt →
Chưa dùng MXterm Pro? Xem bảng giá →
Câu hỏi thường gặp
Không. MXterm Pro đặt tên branch và chạy các lệnh worktree add/remove thay bạn mỗi khi bật cô lập. Tự gõ các lệnh đó là tùy chọn.
Không. Đóng một pane, một workspace, thậm chí thoát MXterm Pro cũng không bao giờ xóa worktree. Bạn dọn worktree chủ động, theo một trong hai cách. Tool của agent chỉ xóa được khi worktree hoàn toàn sạch. Hoặc dùng "Dọn worktree…" cạnh danh sách worktree của panel Git khi bạn xong việc với branch đó.
Có một chút, nhưng ít hơn nhiều so với một bản clone thứ hai đầy đủ. Một git worktree dùng chung lịch sử commit và object của repo qua cùng một .git. Chỉ các file được checkout và một lượng nhỏ metadata của từng worktree bị nhân đôi. Vì vậy chi phí tăng theo kích thước working tree, không theo toàn bộ lịch sử repo.
MXterm Pro cố ý không tự merge branch. Khi branch swarm/<name> của agent đã sẵn sàng, bạn merge theo cách thông thường từ worktree chính (git merge swarm/brave-otter) hoặc push rồi mở pull request, tùy team bạn đang làm cách nào.
Cô lập bị bỏ qua, và các pane mở ra dùng chung thư mục đó, mỗi pane kèm một thông báo nêu lý do. MXterm Pro không chạy git init trên thư mục này. Bạn chạy git init và tự tạo commit đầu tiên, rồi tạo lại workspace.