Claude Code rất mạnh trong việc đọc một codebase lớn và giữ được kế hoạch xuyên suốt nhiều file. Codex lại mạnh ở những thay đổi có phạm vi hẹp, theo hướng test-driven. Không ít kỹ sư rốt cuộc đều muốn dùng cả hai trên cùng một repository: một con thì phác thảo bản refactor, con kia thì gia cố bộ test đang chập chờn. Nhưng ngay khi bạn thử, chính thư mục làm việc lại trở thành vấn đề. Hai công cụ khác nhau, hai CLI khác nhau, cùng một thư mục mà cả hai đều ghi vào.
Bài hướng dẫn này sẽ đi từng bước qua phần thiết lập, chỉ rõ kiểu lỗi ở mỗi bước, và cho thấy hai terminal sẽ hết khả năng mở rộng từ đâu. Phần cô lập thì đã có git worktree giải quyết gọn gàng. Phần phối hợp — biết con nào đang làm việc gì và giữ cho mọi thay đổi đều có thể review — mới là chỗ mà một lớp trung lập với runtime như Sharkly sẽ đảm nhận.
Sharkly không thay thế Claude Code hay Codex. Nó bổ sung lớp Task, Computer, ngữ cảnh và review dùng chung quanh những công cụ thực thi mà bạn đã chạy sẵn, biến một phiên Claude Code và một phiên Codex thành hai nhiệm vụ trong cùng một workflow, thay vì hai terminal mà bạn phải túc trực trông chừng.
Vì sao bạn lại muốn chạy Claude Code và Codex trên cùng một repo
Có ba lý do cứ lặp đi lặp lại, và chúng không phải cùng một vấn đề.
Thế mạnh khác nhau cho những tác vụ khác nhau. Bạn giao việc cần ngữ cảnh rộng (truy vết bug này xuyên suốt module, lên kế hoạch cho đợt migration này) cho một agent, còn việc hẹp và có thể kiểm chứng (làm test này pass, siết lại hàm này) cho agent kia. Việc ghép công cụ với tác vụ là một chủ đề riêng; xem bài mô hình nào cho tác vụ lập trình nào.
So kè trực tiếp trên công việc thật. Benchmark trung thực duy nhất chính là codebase của bạn, chứ không phải một bảng xếp hạng nào đó. Chạy cả hai trên cùng một ticket rồi so sánh các diff sẽ cho bạn biết nhiều hơn bất kỳ điểm số công bố nào. Chúng tôi trình bày phương pháp trong bài cách so sánh các coding agent trên chính codebase của bạn.
Bạn đã trả tiền cho cả hai rồi. Nhiều team đã có sẵn một gói đăng ký Claude và một ghế Codex hoặc API. Tính trung lập với nhà cung cấp mới là điểm mấu chốt: workflow của bạn phải sống sót bất kể công cụ nào tung ra mô hình tốt nhất tiếp theo, mà không cần xây lại từ đầu.
Dù lý do là gì, kiểu thất bại vẫn y hệt nhau. Hai agent trong cùng một thư mục giống như hai người cùng sửa một tài liệu mà không có khóa. Con này đổi nhánh ngay dưới chân con kia, hoặc reformat một file giữa lúc đang sửa, và bạn nhận về những diff áp dụng dở dang chẳng ra đâu vào đâu.
Bước 1: cho mỗi agent một worktree riêng
git worktree xử lý triệt để va chạm này từ gốc. Một repository có thể có nhiều thư mục làm việc được checkout cùng lúc, mỗi thư mục nằm trên nhánh riêng, chia sẻ chung một cơ sở dữ liệu .git duy nhất. Thay vì một thư mục mà cả hai công cụ tranh nhau, bạn có một thư mục cho mỗi tác vụ.
# One checkout per task, each on its own branch
git worktree add ../app-refactor -b agent/refactor
git worktree add ../app-tests -b agent/tests
git worktree list
Trỏ mỗi công cụ vào một thư mục:
cd ../app-refactor && claude # Claude Code on the refactor
cd ../app-tests && codex # Codex on the test suite
Kiểu lỗi nếu bạn bỏ qua bước này: cả hai công cụ đều cd vào cùng một repo, tranh nhau trên cùng những file, và con này lặng lẽ ghi đè lên phần việc chưa commit của con kia. Worktree khiến điều đó trở nên bất khả thi về mặt vật lý. Khâu dọn dẹp sau đó cũng có những góc cạnh riêng; bài quản lý worktree cho coding agent mà không phải khổ sở dọn dẹp sẽ nói về git worktree remove và vấn đề nhánh cũ tồn đọng.
Bước 2: trỏ mỗi công cụ vào đúng file hướng dẫn
Claude Code và Codex đọc những file dự án khác nhau. Claude Code tìm CLAUDE.md; Codex đọc AGENTS.md. Nếu repo của bạn chỉ có một trong hai, một agent sẽ làm việc mà không hề biết đến các quy ước của bạn.
Hãy giữ cả hai, và giữ chúng nhất quán. Cách làm đáng tin cậy là viết các quy tắc dùng chung một lần, rồi để mỗi điểm truy cập include chúng vào:
<!-- CLAUDE.md and AGENTS.md both start with -->
See ./docs/agent-conventions.md for build, test, and style rules.
# Verify each tool actually loads its file before you turn it loose
claude --version # Claude Code reads CLAUDE.md from the worktree root
codex --version # Codex reads AGENTS.md from the worktree root
Kiểu lỗi nếu bạn bỏ qua bước này: Codex tuân theo một cấu hình lint còn Claude Code tuân theo một cấu hình khác, và mọi lần merge lại biến thành một cuộc chiến style mà chẳng ai ghi lại. Có một lưu ý cá nhân đáng nói ở đây: một install token không mang theo các quy ước của bạn, và một file local bị đưa vào .gitignore sẽ không đi theo sang worktree. Hãy đặt các quy tắc dùng chung vào những file được track, nếu không thì mỗi worktree mới lại bắt đầu với hai bàn tay trắng.
Bước 3: khởi chạy, rồi xem khoảng trống phối hợp hiện ra
Với hai worktree và hai file cấu hình, phần cơ chế đã chạy được. Bạn có Claude Code trên một nhánh và Codex trên nhánh khác, không con nào đụng vào file của con nào. Trong một buổi chiều với hai agent, cách này vẫn trụ được.
Khoảng trống chỉ hiện ra khi bạn ngẩng lên khỏi bàn phím. Mỗi phiên giữ lịch sử riêng trong tab riêng của nó, con kia không nhìn thấy. Khi lượt chạy của Codex cần biết lượt chạy của Claude Code đã thay đổi những gì, chẳng có bộ nhớ chung nào để tra cứu, nên bạn trở thành chính lớp tích hợp. Các agent hoàn thành ở những thời điểm khác nhau rồi lặng lẽ chờ input, nên "chạy song song cả hai" cứ thế lặng lẽ thoái hóa thành "lần lượt kiểm tra từng con một".
Nhân lên quá hai con thì sao. Nước đi tự nhiên tiếp theo là một script wrapper tự động tạo worktree, khởi chạy đúng công cụ trong mỗi cái, và dẫn output vào những pane tmux được đặt tên. Cách này giúp được với một vài lượt chạy. Rồi nó phình ra: đặt tên nhánh, dọn dẹp, một cách để biết con nào đang làm task nào, retry cho con bị crash. Chẳng mấy chốc bạn phải bảo trì một framework điều phối mong manh được chắp nối bằng bash, nơi một nửa trạng thái nằm trong shell history còn nửa kia nằm trong đầu bạn. Chạy nhiều con cùng lúc đều gặp đúng bức tường đó, bất kể các agent đều là Claude Code — như trong bài chạy nhiều agent Claude Code — hay là trộn lẫn các loại.
Hai terminal hết khả năng mở rộng từ đâu
Phép thử trung thực để biết bạn đã vượt qua bộ thiết lập tự chế hay chưa:
- Một đồng đội có thể thấy các agent của bạn đang làm gì ngay lúc này mà không cần bạn đọc to màn hình terminal cho họ nghe không?
- Khi Codex hoàn thành lúc 2 giờ chiều và cần input, có thứ gì đó báo cho bạn biết không?
- Khi cả hai agent hoàn thành cùng lúc, có một hàng đợi để review công việc của chúng không, hay chỉ có bạn và hai nhánh?
Nếu câu trả lời là không, thứ còn thiếu không phải là thêm một shell script nữa. Mà là một lớp phân công công việc cho công cụ này hay công cụ kia, hiển thị trạng thái trực tiếp, và giữ mọi thay đổi đều có thể review trước khi merge. Đó là thứ mà một task board bổ sung thêm so với terminal thuần túy.
Đây là ranh giới đáng được nói rõ ràng rành mạch. Claude Code và Codex đảm nhận phần thực thi. Một lớp lệnh quản lý việc phân công, các Computer được kết nối, ngữ cảnh task, tiến độ, điểm nghẽn, kết quả và phần review của con người trên cả hai. Trong Sharkly, bạn giao một Task cho một Claude Code Runtime và một Task khác cho một Codex Runtime; mỗi cái chạy trong worktree cô lập riêng trên một Computer được kết nối, và quá trình thực thi, các điểm nghẽn cùng kết quả đều quay về dòng thời gian của Task thay vì biến mất vào những terminal riêng tư.
Phân công lao động vẫn rạch ròi. Agent nghiên cứu, thực thi, kiểm thử và báo cáo. Con người định hướng, cấp quyền và chấp nhận kết quả. Tự động hóa dừng lại đúng chỗ cần đến phán đoán của bạn, và trả về một diff kèm theo bằng chứng kiểm chứng. Bạn vẫn giữ những công cụ mình đã trả tiền, việc dùng mô hình vẫn chạy qua các gói đăng ký và API key đã cấu hình trong từng công cụ, và bạn có một chỗ duy nhất để thấy ai đang làm gì.
Hãy dùng cách thiết lập thủ công khi bạn chỉ chạy một hai agent trong một buổi chiều và có thể giữ hết trạng thái trong đầu. Còn hãy nghĩ đến một lớp dùng chung khi có người thứ hai cần thấy rõ mọi thứ, khi số lượng vượt quá những gì một cửa sổ terminal hiển thị được, hoặc khi bạn so sánh các công cụ đủ thường xuyên đến mức câu "lượt chạy nào tạo ra nhánh này" không còn rõ ràng nữa.
Danh sách kiểm tra bạn có thể chạy ngay hôm nay
Hãy chạy từ trên xuống dưới trong lần tới bạn đặt cả hai công cụ trên cùng một repo:
- [ ] Tạo một
git worktreecho mỗi task, mỗi cái trên nhánh riêng. Tuyệt đối không trỏ hai công cụ vào cùng một thư mục. - [ ] Commit cả
CLAUDE.mdlẫnAGENTS.md, mỗi file trỏ đến một file quy ước dùng chung trong phần source được track. - [ ] Xác nhận mỗi công cụ nạp cấu hình của nó từ gốc worktree trước khi bạn giao việc.
- [ ] Giao một Task có phạm vi rõ ràng cho mỗi agent. Việc cần ngữ cảnh rộng cho một con, việc hẹp theo hướng test-driven cho con kia.
- [ ] Quyết định cổng review ngay từ đầu: không nhánh nào được merge cho đến khi có người đọc diff và kết quả test.
- [ ] Khi bạn vượt qua hai hoặc ba lượt chạy đồng thời, hãy ngừng mở rộng đống bash và chuyển việc phân công, trạng thái cùng review vào một lớp duy nhất.
Nếu bạn muốn tiếp tục dùng cả Claude Code lẫn Codex thay vì cam kết với một hệ sinh thái, thì đó chính là bài toán mà Sharkly được thiết kế để giải. Tải Sharkly, kết nối một Computer, và giao Task đầu tiên của bạn cho agent nào phù hợp với công việc nhất.
Câu hỏi thường gặp
Claude Code và Codex có thể sửa cùng những file một cách an toàn không? Không, nếu ở cùng một thư mục. Hãy cho mỗi con một git worktree riêng để chúng làm việc trên những nhánh tách biệt, rồi merge qua khâu review. Chạy đồng thời trong cùng thư mục chính là chỗ phần việc chưa commit bị mất.
Tôi có cần hai gói đăng ký không? Bạn cần bất cứ thứ gì mà mỗi công cụ yêu cầu. Việc dùng mô hình vẫn tiếp tục qua các gói đăng ký hoặc API key đã cấu hình trong Claude Code và Codex; một lớp phối hợp không thay đổi cũng không bán lại quyền truy cập đó.
Task board có quá cồng kềnh cho hai agent không? Với hai agent mà bạn tự kiểm soát trong một lần ngồi, worktree thuần và hai terminal là đủ. Task board mới đáng giá khi có đồng đội cần thấy rõ mọi thứ hoặc khi số lượt chạy tăng lên. Xem bài những công cụ tốt nhất để quản lý các AI coding agent chạy song song.



