Codex và Claude Code, nhìn từ các file trên ổ đĩa của bạn
Đây không phải là phán quyết xem bên nào viết code tốt hơn. Đây là mô tả cách hai công cụ này thực sự hoạt động, viết bởi những người phải làm một cửa sổ điều khiển được cả hai.
Vì sao so sánh này khác với những bài khác
Phần lớn những gì được viết về Codex vs Claude Code chỉ là benchmark trên laptop của ai đó, và nó lỗi thời chỉ sau một tháng vì cả hai đều ra model mới nhanh hơn tốc độ người ta viết về chúng. Trang này không làm vậy. Bên nào viết code tốt hơn là câu hỏi phụ thuộc vào model tại thời điểm bạn hỏi, và chúng tôi không giả vờ trả lời câu đó.
Điều chúng tôi có thể nói với bạn là hai chương trình được tạo nên từ những gì, vì Vobuda đã phải đọc cả hai để vẽ thanh điều khiển lên trên từng cái. Mỗi cái lưu phiên ở đâu, gọi việc tiếp tục một phiên là gì, danh sách model của nó nằm ở đâu, nó thông báo chế độ đang dùng ra sao. Đó là những sự thật nằm trên ổ đĩa của chính bạn, thay đổi chậm, và chính chúng quyết định mỗi cái hợp với một ngày làm việc ra sao.
Tóm lại: Claude Code dễ đọc hơn khi nhìn từ bên ngoài. Nó ghi các model vào một file, lưu phiên trong một thư mục riêng cho mỗi dự án, và dùng một cờ để tiếp tục một phiên. Codex giữ nhiều thứ hơn cho riêng mình. Nó đổi model qua một bộ chọn riêng, nên việc trung thực cần làm là mở bộ chọn đó và đọc những gì nó hiện ra thay vì đưa ra một danh sách sẽ sai.
Mỗi bên lưu gì ở đâu
Mọi thứ trong bảng này đều nằm trên chính máy bạn đang dùng, và bạn có thể tự vào xem.
| Claude Code | Codex | |
|---|---|---|
| Phiên làm việc cũ | Một thư mục riêng cho mỗi dự án trong ~/.claude/projects | Một file chỉ mục duy nhất, ~/.codex/session_index.jsonl, đặt tên cho từng luồng |
| Mở lại một phiên cũ | --resume <id> | resume <id> |
| Tiếp tục phiên gần nhất | --continue | resume --last |
| Skill | ~/.claude/skills, cộng với thư mục tương ứng trong dự án | ~/.codex/skills, cộng với thư mục tương ứng trong dự án |
| Danh sách model | File riêng của nó, được ghi theo những gì máy chủ của nó cho biết, nên model mới xuất hiện ngay ngày nó ra mắt | Bộ chọn riêng của nó, mà menu mở ra và đọc từng dòng một |
| Chọn model | /model cho model, /effort cho mức | Bộ chọn /model riêng của nó, rồi một mức cho từng model |
| File cấu hình | settings.json | config.toml |
| Thanh trạng thái hiển thị gì | Opus 5.5 với effort cao, Claude Max | gpt-5.6-terra medium |
| Tiến trình trông như thế nào | claude | node, vì Codex chạy dưới dạng node |
Đọc vào tháng 9 năm 2026, dựa trên các bản cài đặt hiện tại của cả hai. Tài liệu chính thức của từng bên mới là nguồn xác thực; đây chỉ là cách cả hai trông như thế nào từ góc nhìn của một cửa sổ phải điều khiển chúng.
Hai thư mục, nơi mọi thứ trong bảng trên được đọc ra
Không agent nào giấu giếm điều này. Thanh điều khiển trong Vobuda đọc chính xác các file này, đó là lý do nó có thể hiển thị danh sách model mà chúng tôi chưa từng tự viết ra.
settings.json model, effort, quyền hạnprojects/ một thư mục cho mỗi dự án <project>/ các phiên của dự án, mới nhất ở cuốiskills/ của bạn, cộng với skill riêng của dự ánhistory.jsonl những gì bạn đã gõ, theo thứ tự config.toml model và mức suy luậnsession_index.jsonl mọi luồng, mỗi luồng một dòngskills/ của bạn, cộng với skill riêng của dự án Ba cái bẫy chúng tôi từng gặp để bạn nhận ra chúng
Mỗi cái trong số này ban đầu là một lỗi trong Vobuda, và mỗi cái đều nói lên điều gì đó đúng về hai agent này.
Tiến trình sâu nhất của một phiên Claude thường là codex
Claude Code chạy Codex như một công cụ trợ giúp của riêng nó. Vì vậy nếu lấy tiến trình sâu nhất trong cây để quyết định block thuộc agent nào, dock sẽ hiện CODEX cho một phiên Claude và khiến việc khởi động lại chạy nhầm chương trình. Agent mà một block thuộc về là agent mà người dùng đã khởi động, không phải agent mà nó khởi động ra.
Codex không phải là node_repl
Codex chạy dưới dạng node, và một shell khởi động chương trình bằng cách fork chính nó rồi thay thế chính nó bằng chương trình đó, nên danh sách tiến trình vẫn gọi nó bằng tên cũ suốt vòng đời trừ khi tên file thực thi được hỏi trực tiếp. Một block đang chạy Codex từng bị đặt tên là node_repl.
Danh sách của agent này hiện trên block của agent khác
Hai danh sách model và một cờ continue được viết ra từ thời chỉ có một agent, rồi vẫn dùng chung khi đã có ba agent. Mở một block Codex lại hiện ra Opus, Sonnet, Haiku và Fable, còn continue thì gửi codex --continue, và Codex trả lời bằng lỗi cú pháp sử dụng. Giờ đây bất cứ thứ gì đọc từ một chương trình đều thuộc về chính chương trình đó và chỉ được hỏi qua nó.
Các chữ trong giao diện của agent sẽ thay đổi
Đọc câu trả lời của một agent, hay yêu cầu nó nhận được, bằng cách tìm những từ cụ thể trong giao diện sẽ thất bại ngay ở bản phát hành tiếp theo của agent đó. Thay vào đó cả hai được nhận diện qua hình dạng: một agent được biết đến qua dấu nhắc chờ nó đặt trước nội dung bạn gõ, chứ không phải qua khung vẽ quanh nó, vì cái khung là thời trang còn dấu nhắc thì không.
Câu trả lời mà hầu hết mọi người thực sự muốn là cả hai
Trong thực tế chẳng ai chọn một bên rồi xóa bên kia. Bên này giỏi hơn ở việc bạn đang làm giờ này, bên kia lại giữ phiên làm việc của việc bạn làm lúc khác, và cả hai đều có giới hạn sử dụng ập đến vào những lúc bất tiện nhất. Điều quan trọng là chạy cả hai cùng lúc có tốn thêm gì cho bạn hay không.
Trong Vobuda thì không. Hai block trong một tab, hoặc hai tab, mỗi block có thanh riêng đọc agent riêng của nó, mỗi block hiển thị model và effort riêng, kèm chế độ quyền của Claude Code bên cạnh. Cả hai giao tín hiệu cho cửa sổ theo cùng một cách, nên một huy hiệu, một âm thanh và một thông báo có cùng ý nghĩa dù cái nào phát ra chúng, và bản ghi những gì đã xảy ra khi bạn vắng mặt liệt kê chúng cạnh nhau, nhóm theo block.
Không cái nào được nối bằng một mục cài đặt hay một công tắc, vì một tín hiệu mà bạn phải cấu hình trước khi nó hoạt động thì không phải là tính năng, mà là bài tập về nhà. Chúng tự nối khi khởi động, và nút Tích hợp trên thanh tab đặt lại các liên kết cho một agent đã chạy sẵn. Các hook của bên thứ ba có sẵn vẫn được giữ nguyên, và bất cứ thứ gì đã chiếm một sự kiện sẽ được gọi ngay sau hook của chúng tôi.
Codex và Claude Code, hỏi thẳng
Codex hay Claude Code tốt hơn?
Về chất lượng code, câu trả lời phụ thuộc vào model mà mỗi bên đang chạy tại thời điểm bạn hỏi, nên bất kỳ câu trả lời nào viết ra cũng sẽ lỗi thời. Còn về cách chúng hoạt động như một chương trình, Claude Code dễ đọc hơn từ bên ngoài: nó ghi danh sách model vào một file, lưu phiên làm việc trong thư mục riêng cho mỗi dự án và dùng một cờ để tiếp tục phiên. Codex giữ kín nhiều thứ hơn bên trong.
Tôi có thể chạy Codex và Claude Code song song không?
Có. Hai block trong cùng một cửa sổ, mỗi block có thanh điều khiển riêng đọc đúng agent của nó. Cả hai đều báo khi hoàn tất hoặc cần quyền, và cả hai đều xuất hiện trong cùng một bản ghi những gì xảy ra trong lúc bạn vắng mặt.
Vobuda liệt kê model của Codex bằng cách nào?
Bằng cách hỏi Codex. Có lần chúng tôi đưa ra một danh sách hai model mà Codex không chạy, và nó sai ngay ngày phát hành. Giờ nút model mở bộ chọn riêng của Codex, đọc các dòng nó hiện ra và bấm dòng bạn chọn, và mỗi model đưa ra các mức mà Codex trao cho nó.
Có bên nào cần tài khoản Vobuda không?
Không. Vobuda hoàn toàn không có tài khoản. Mỗi agent dùng gói đăng ký hoặc khóa mà bạn đã đưa cho nó. Vobuda dùng đăng nhập của Claude Code cho đúng một việc, hỏi Anthropic về các giới hạn sử dụng của bạn, và không bao giờ chạm vào đăng nhập của Codex.
Còn dùng model chạy cục bộ thì sao?
Một model cục bộ chạy qua Ollama chỉ là một mục trong agents.json và không cần viết code. Nó vẫn có block và thanh riêng, hiển thị đúng những gì agent đó có thể tự khai báo trung thực về mình.
Một cửa sổ, cả hai agent
Miễn phí, không cần tài khoản, và mỗi thanh đọc đúng agent bên dưới nó.
curl -fsSL https://vobuda.com/install.sh | sh