Vì sao Jan chuyển từ Claude Code sang T3 Code

T3 Code là ADE điều phối Claude Code, Codex, Cursor trong một nơi: orchestrator V2, context handoff, T3 Connect, usage, và những điểm còn hỏng.

Đã duyệt độc lập · cập nhật 15/10/2026 · 32 min

1. Ba công cụ yêu thích, một môi trường duy nhất

Jan mở video bằng ba cái tên: Claude Code, Codex và Cursor. Anh nói anh yêu cả ba, nhưng cứ mỗi lần bắt đầu một project, anh lại phải chọn xem công cụ nào sẽ nhận việc. Có những lúc anh muốn dùng cả ba cùng lúc: Claude điều tra vấn đề, Codex build, Grok đi research. Điều anh mong là một môi trường duy nhất nơi tất cả cùng làm việc với nhau, và dùng chính những subscription anh đã có sẵn, đã trả tiền hằng tháng.

Logo Claude Code, Codex và Cursor dưới một biểu tượng trái tim
Màn mở đầu: ba công cụ coding agent Jan yêu thích, Claude Code, Codex và Cursor, đặt cạnh nhau dưới một trái tim.

Vì vậy, khi T3 Code liên tục xuất hiện trên feed Twitter của anh, nó thu hút sự chú ý của anh ngay lập tức. Có vẻ như ADE của Theo (người tạo ra T3 Code) cuối cùng có thể mang lại đúng cái setup anh vẫn luôn tìm kiếm. Chỉ có một vấn đề nhỏ: anh đã dùng thử T3 Code trước đây, và anh ghét tuyệt đối mọi thứ về nó. "It is what it is", anh nhắc lại hai lần.

Thế là anh cho nó thêm một cơ hội. Và lần này, anh nói thẳng với Theo: "Okay Theo, you cooked", lần này anh bị thuyết phục rồi. Một số tính năng, theo anh, thật sự là game changer: Orchestrator V2, T3 Connect, tính năng visualization, đó mới chỉ là vài cái tên. Có rất nhiều thứ đáng yêu ở đây, nhiều tới mức T3 Code có thể thực sự trở thành môi trường phát triển chính của anh, và điều đó nói lên nhiều lắm khi phát ra từ miệng anh. Dù vậy, vẫn còn vài thứ làm anh phát điên, và anh sẽ nói tới chúng trong video.

2. T3 Code không phải là harness

Bắt đầu vào nội dung, điều đầu tiên Jan muốn nói rõ ngay: T3 Code không phải là một harness. "Repeat after me, T3 Code is not a harness", anh hát lên câu đó, rồi đùa rằng ai cần học hát thì cứ gọi cho anh. Rồi anh nghiêm túc trở lại.

Trong lúc lướt Twitter, anh thấy rất nhiều tweet có nội dung na ná nhau. Anh mở một tweet làm ví dụ, đại ý: một số người có thể không thích Theo vì nhiều lý do, blah blah blah, nhưng mọi người nên thừa nhận T3 Code là harness tốt nhất hiện nay. Jan trả lời: ừ, kiểu như vậy, nhưng không hẳn. T3 Code không phải harness. Nó chưa bao giờ là harness và có lẽ sẽ không bao giờ là harness, và điều đó hoàn toàn ổn.

Vậy nó là gì? Đó là một agentic development environment, viết tắt là ADE, được xây quanh những coding agent harness đã có sẵn.

Bảng vẽ tay: What even is a harness, với ba gạch đầu dòng
Bảng vẽ Jan dùng để giải thích "harness là gì": model là bộ não, harness đưa cho nó công cụ và quản lý cách nó làm việc (đọc file, sửa code, chạy lệnh, quản lý context, xin quyền); Claude Code, Codex, Cursor mỗi bên có harness riêng.

Còn harness là gì? Theo Jan, model là bộ não lớn: nó lo phần suy nghĩ, lập luận và mọi thứ "xịn xò". Harness thì đưa cho model các công cụ và quản lý cách nó làm việc. Cụ thể là đọc file, sửa code, chạy lệnh, quản lý context, và khi cần thì xin quyền (permission).

Claude Code, Codex, Cursor và những cái tên tương tự, mỗi bên cung cấp harness riêng của mình. Nghĩa là nếu bạn đang dùng T3 Code, thì ở phía sau bạn cũng đang dùng Claude Code, Codex hoặc một công cụ tương tự. T3 Code không mang theo harness của riêng nó. Nó xây lên trên harness có sẵn, rồi thêm các tính năng của chính nó ở bên trên. "Thú vị đúng không?", anh hỏi.

3. Kiến trúc: ứng dụng, orchestrator V2 và các harness

Để người xem hiểu rõ hơn, Jan chuyển sang một sơ đồ. Ở mức cao, T3 Code cho bạn hai thứ: phần ứng dụng (application) và phần orchestrator. Hiện có hai loại ứng dụng: ứng dụng desktop và ứng dụng mobile. Khi bạn đã sẵn sàng, bạn gửi một prompt, kiểu như "hey, make me a millionaire" hay "build an intercom clone", đại loại vậy.

Sơ đồ kiến trúc T3 Code: Desktop/Mobile, Orchestrator V2, bốn harness và Your Environment
Khối T3 Code gồm Desktop / Mobile ở trên, Orchestrator V2 (threads, delegation, provider switching) ở dưới; orchestrator rẽ xuống bốn harness có logo Cursor, OpenAI, Claude và một harness khác; dưới cùng là Your Environment với project files, git worktrees, terminal và tools.

Tin nhắn đó sau đó được định tuyến qua orchestrator, ở đây là orchestrator V2. Ở mức đơn giản, orchestrator có nhiệm vụ tạo và quản lý các thread, phân việc (delegate), và cho phép chuyển đổi giữa các provider (provider switching).

Jan đoán trước câu hỏi: "Jan, V2 orchestrator là gì? Có cả V1 orchestrator à?" Câu trả lời là hiện tại có, và giữa hai bản có khác biệt. Nếu bạn dùng bản nightly, tức bản beta, bạn có orchestrator V2. Nếu dùng bản stable của T3 Code, bạn có orchestrator V1.

Vấn đề lớn nhất của orchestrator V1 là bạn không thể dùng nhiều harness cùng một lúc. Và đây là một điều bạn nên biết về Jan: anh là người thích dùng nhiều model cùng lúc. Opus, GPT 6.1 Sol, Grok 4.7, có khi cả Gemini nữa. "Không, đùa thôi", anh nói ngay sau khi nhắc Gemini, nhưng chắc bạn hiểu ý: anh thích dùng nhiều model cùng lúc.

Với orchestrator V1, điều đó không thể làm được. Bạn bị khoá vào một harness. Nếu bạn bắt đầu thread với, chẳng hạn, Opus 5.5 và qua đó là Claude Code, thì bạn phải gắn với Claude Code và các model do harness đó cung cấp. Nếu bạn tạo thread với một model do harness Codex cung cấp, thì bạn phải dùng các model của harness đó. Theo Jan, đó là một trong những vấn đề lớn nhất của T3 Code trước đây, và cũng là lý do anh không thật sự thích trải nghiệm hồi ấy. Nhưng điều này cuối cùng đã thay đổi.

4. Nhiều model trong một session, và câu hỏi "chỉ là wrapper?"

Giờ bạn có thể dùng nhiều model trong một session cùng lúc. Jan gọi đây là một game changer lớn, vì không có provider nào khác làm được điều đó. Đúng là với Cursor bạn cũng dùng được nhiều model một lúc, nhưng như vậy cũng có nghĩa là bạn dùng harness do Cursor cung cấp. Với T3 Code, bạn tận dụng được phần usage được trợ giá (subsidized usage) mà các provider như Anthropic, OpenAI, Google... đưa ra trong subscription của họ. Thành thật mà nói, theo Jan, đó gần như là một "cheat code" nho nhỏ.

Cuối cùng, ở đáy sơ đồ là environment của bạn: các file project, git worktree, terminal, và các tool như skill, MCP server và những thứ khác.

Orchestrator V1 (Stable)Orchestrator V2 (Nightly) một threadmột harness duy nhất một thread Claude CodeCodexCursor bị khoá vào model của harness đóđổi model, đổi harness ngay trong session
Hình 4.1Khác biệt Jan nhấn mạnh: bản Stable dùng orchestrator V1, mỗi thread bị khoá vào một harness; bản Nightly dùng orchestrator V2, một session dùng được model của nhiều harness và tận dụng subscription sẵn có của từng nhà.

Rồi Jan lại đặt câu hỏi thay người xem: "Okay Jan, thú vị đấy. Nhưng thành thật một giây thôi: chẳng phải T3 Code chỉ là một wrapper bọc harness sao?"

Câu trả lời của anh: ở mức cao, đúng, nó là một wrapper, nhưng nó thêm rất nhiều tính năng lên trên harness có sẵn. Và anh cho rằng ở tầng sâu hơn, T3 Code là một multi-agent orchestrator. Đó là tính năng cốt lõi. Đồng thời bạn còn có T3 Connect: bạn dùng điện thoại và đăng nhập vào bất kỳ environment nào bạn đang có, MacBook, Mac Studio, máy Windows, không quan trọng. Bạn cũng có checkpoint, tích hợp GitHub và nhiều thứ "xịn" khác. Nhưng ý tưởng cốt lõi của T3 Code vẫn là multi-agent orchestrator: dùng nhiều agent, nhiều harness trong một môi trường, không cần chuyển qua lại.

5. Quảng cáo, rồi quay lại với bản Nightly

Trước khi đi tiếp, video có một đoạn quảng cáo cho Letaido, một công cụ marketing của đội ngũ đứng sau Ahrefs.

Hết quảng cáo, Jan quay lại ứng dụng T3 Code. Điều đầu tiên anh muốn người xem nhận ra là anh đang cài bản Nightly. Dấu hiệu nhận biết: ở góc trên bên trái có một ảnh nền kiểu dải ngân hà, "hay gọi là gì cũng được".

6. Cài Nightly, đừng cài Stable; bố cục của một ADE

Đó cũng là một trong những lời khuyên lớn nhất Jan đưa ra: xin đừng cài bản stable, hãy cài bản nightly. Bản nightly có nhiều tính năng hơn hẳn: lại là orchestrator V2, rồi T3 Connect mà theo anh chạy tốt hơn (anh cũng không rõ vì sao), tính năng visualization và nhiều thứ khác. Nó cũng nhanh hơn, mượt hơn rất nhiều.

Trang Download T3 Code với hai tab Stable và Nightly
Trang tải T3 Code đang chọn kênh Nightly ("Built 5 hours ago"), với bản macOS Apple Silicon (.dmg), tuỳ chọn bản x64 cho Intel Mac và bản Windows 10, 11 (.exe).

Anh biết nghe có vẻ lạ, vì bản stable lẽ ra phải tốt hơn, nhưng thực tế không phải vậy. Theo anh, bản nightly tốt hơn gấp mười lần.

Rồi anh quay lại phân tích nhanh giao diện. Bố cục này hẳn trông khá quen, vì ADE nào cũng trông giống nhau. Bên trái là sidebar chứa tất cả các thread. Ở giữa là cuộc hội thoại của từng thread, nơi bạn đưa chỉ dẫn qua ô prompt ở dưới, xem agent làm việc và xem cả các sub-agent. Anh mở một thread đang chạy và chỉ cho thấy hiện có một sub-agent đang hoạt động; về lý thuyết anh có thể mở nó ra để xem công việc ngay tại đó.

Bên phải là một panel kiểu "thread details": environment đang dùng (Mac Studio), nút mở project, worktree, branch hiện tại, và phần xem các thay đổi (changes).

7. Demo orchestrator V2: main agent GPT gọi sub-agent Haiku

Điều Jan muốn cho xem ngay là orchestrator V2 hoạt động thế nào. Anh tạo một thread mới bằng nút new thread, một cửa sổ mở ra, và anh bắt đầu trong repo SyntaxKit của mình. Anh thu sidebar lại, rồi đổi main agent: anh chọn model của Codex, cụ thể là GPT 6.1 Sol với reasoning effort ở mức high. Mục tiêu: để main agent này dựng một sub-agent đến từ một harness khác, harness của Claude Code.

Prompt anh gõ:

Hey, I want you to figure out when the repository was created, so please spin up a Haiku 5.5 sub-agent to just find out when the repository was created, how many PRs have already been created, and when the last PR was merged.

Anh bấm Enter và bảo người xem nhìn vào một điều rất quan trọng. "Một, hai, ba", và màn hình hiện "setting up worktree". Anh đang bật một setting để T3 Code tự tạo worktree mới mỗi khi anh tạo thread mới, và worktree đó dựa trên origin, nên luôn là code mới nhất. Tiếp theo là dòng "getting orchestration capabilities": T3 Code bắt đầu điều phối giữa hai harness. Agent trả lời rằng nó sẽ kiểm tra các model có sẵn và giao việc tra cứu repo cho Haiku 5.5.

Trên màn hình xuất hiện biểu tượng Claude, nghĩa là sub-agent đang dùng harness Claude Code, dù main agent dùng harness Codex. Jan mở sub-agent ra và cho thấy nó đang xử lý yêu cầu.

8. Kết quả, phần Providers, và vì sao T3 Code khác OpenCode

Trong lúc chờ, Jan mở phần settings. Ở đó có mục để thêm hoặc cập nhật các provider. Hiện anh có ba provider: Codex, Claude Code và Cursor. Nhờ đó anh chuyển được giữa các harness, và T3 Code cũng điều phối được giữa các harness khác nhau.

Anh còn đùa: làm sao biết phần mềm này do một YouTuber làm ra? Vì tên hiển thị và email tài khoản bị làm mờ sẵn theo mặc định.

Quay lại session đang chạy, sub-agent đã hiện biểu tượng "done". Anh bấm vào và có kết quả: repo được tạo vào tháng Một, đã có khoảng 500 PR, và đây là PR được merge gần nhất. Jan nói đó là lý do anh yêu T3 Code: nó cho phép điều phối giữa các harness khác nhau mà không gặp vấn đề gì. Và đó cũng là điều khiến T3 Code khác với, chẳng hạn, OpenCode.

Về bản chất, OpenCode có cùng ý tưởng: lấy các subscription sẵn có và dùng chúng trong một môi trường. Vấn đề của OpenCode là họ dùng harness của riêng mình. Điều đó có nghĩa là Anthropic không cho phép họ dùng subscription; nói cách khác, bạn không dùng được subscription Claude Code hiện có của mình trong OpenCode. Với T3 Code thì được, vì T3 Code không có harness riêng.

T3 CodeOpenCode giao diện + orchestratorharness Claude Code / Codex / Cursor giao diệnharness riêng, tổng quát dùng được subscription Claude Codekhông dùng được subscription Claude Code
Hình 8.1So sánh theo lời Jan: T3 Code chạy trên chính harness của từng provider nên dùng được subscription có sẵn; OpenCode có cùng ý tưởng nhưng dùng harness riêng.

Thêm nữa, theo Jan, dùng harness của chính provider thật ra còn tốt hơn dùng harness của bên thứ ba. Ví dụ harness của Claude Code được xây riêng cho các model Claude. Harness của OpenCode là một harness tổng quát hơn, và họ không thật sự có quyền truy cập vào toàn bộ dữ liệu nội bộ mà Anthropic có.

9. Một thread từ A tới Z và context handoff khi hết usage limit

Tiếp theo, Jan mở một thread mà anh đã đi trọn từ A tới Z: bắt đầu bằng một prompt đơn giản và kết thúc bằng một PR hoàn chỉnh. Nhiệm vụ đơn giản: làm một đợt audit. Đại ý prompt là: dùng CLI React Doctor, tìm tất cả vấn đề, dùng các sub-agent Haiku 5.5. Lead agent làm đúng như vậy và khởi động 10 research agent. Main agent lúc đầu là Opus 5.5.

Agent tìm ra một số vấn đề, anh lướt qua kết quả React Doctor ("blah, blah, blah, không quan trọng lắm"), rồi anh bảo agent dùng skill pstack để sửa tất cả. Agent bắt đầu sửa. Và đến đây màn hình cho thấy anh đã hết usage limit: "Claude usage limit reached. This turn is paused until the 5-hour limit resets", còn khoảng 2 tiếng nữa mới reset.

Thread Audit React Upgrade Best Practices với thông báo hết usage limit và Context handoff từ Claude Opus 5.5 sang GPT-6.1-Sol
Thread "Audit React Upgrade Best Practices": cảnh báo màu cam "Claude usage limit reached", ngay dưới là dòng "Context handoff Claude Opus 5.5 → GPT-6.1-Sol" sau khi Jan yêu cầu chuyển sang Codex; agent xác nhận đang chạy trên Codex và công việc React Doctor cùng context đã được mang theo.

Anh đã làm gì? Anh nhớ ra mình đang dùng T3 Code, nên nói với agent: tôi hết usage limit rồi, chuyển sang GPT 6.1 Sol đi. Và màn hình hiện đúng điều đó: context handoff từ Claude Opus 5.5 sang GPT 6.1 Sol. Vậy là không chỉ điều phối được giữa các sub-agent khác nhau, bạn còn đổi được cả main agent, tức main model, ngay giữa lúc đang chạy. T3 Code tự động tạo một context handoff.

Agent tiếp tục, tạo thêm vài sub-agent, rồi usage limit lại hết. Lần này anh lại làm context handoff, từ GPT 6.1 Sol về Opus 5.5. Jan nói đó là việc anh làm liên tục: khi hết usage limit của Claude thì chuyển sang Codex; hết usage limit của Codex thì chuyển sang Cursor; và cứ thế xoay vòng. Theo anh, cách đó khá mạnh.

10. Điều khó chịu thứ nhất: không thấy code mà sub-agent viết

Giờ tới những thứ làm Jan khó chịu nhiều. Thứ đầu tiên là cách sub-agent hoạt động. "Khoan, gì cơ?" anh tự hỏi lại: chẳng phải vừa nói chúng chạy rất tốt, xem được mọi thứ, giao việc được cho sub-agent từ nhiều harness khác nhau sao? Đúng vậy, nhưng chúng vẫn chưa hoàn hảo.

Anh đang có hai sub-agent chạy, ví dụ sub-agent "Cost-weighted AI quota and USD cost". Nó đã làm việc 33 phút, và trên màn hình agent đã làm khá nhiều thứ: đầu tiên suy nghĩ và lập luận, rồi dùng skill pstack của anh (anh gọi là "potato mode"), lại suy nghĩ, rồi chạy vài lệnh. Nhìn thì mọi thứ đều ổn.

Sub-agent Cost-weighted AI quota and USD cost với danh sách lệnh đã chạy nhưng không hiện diff code
Sub-agent "Cost-weighted AI quota and USD cost": danh sách lệnh, suy nghĩ và dòng tóm tắt "Ran 24 commands, changed 3 files, and performed 5 other actions", nhưng không có chỗ nào cho xem nội dung code đã đổi.

Vậy vấn đề ở đâu? "Bạn có thấy thay đổi code nào không? Không." Vậy chắc agent không viết dòng code nào, đúng không? Cũng không. Thật ra agent đã tạo khoảng 2000 dòng code, nhưng anh không thể review chúng ở trong này. Anh không thấy được sub-agent đã làm gì. Và điều tương tự cũng đúng với main agent: anh mở một main agent, và cũng không thấy thay đổi code nào.

Bạn chỉ review được mọi thứ ở cuối, khi agent đã xong. Ví dụ ở thread này agent đã cập nhật PRD, và tới lúc đó anh mới review được tất cả. Đây là điều làm anh khó chịu nhiều.

Để so sánh, anh chuyển sang Claude Code, mở một session ngẫu nhiên anh từng làm cho một app "fake tweet generator". Ở đó anh thấy ngay agent đã làm gì: agent đọc file tweet card, rồi bước tiếp theo nó viết code, và diff hiện ra ngay trong cuộc hội thoại.

Anh thừa nhận đây là chuyện nhỏ, khá vặt. Nhưng theo anh nó rất, rất thiết yếu, vì anh hay thấy mình tạo sub-agent, rồi sub-agent ngồi đó 20 phút liền mà không thấy làm gì. Anh thường phải vào main agent hỏi: "này, có đang lag không? Sub-agent có bị treo không?" Và main agent trả lời: không, sub-agent đã viết 300 dòng code rồi.

11. Sub-agent không tự chạy lại, và sidebar không có grouping

"Tuyệt, cảm ơn", nhưng Jan muốn tận mắt thấy điều đó, và với T3 Code thì không làm được. Anh nhắc lại: đây là thứ rất cơ bản, rất vặt, và anh không hiểu sao nó chưa được thêm vào.

Một điều nữa làm anh khó chịu với sub-agent: chúng không chạy lại khi session limit đã reset. Trong ví dụ của anh, rate limit bị chạm từ hôm qua, vậy mà sub-agent vẫn chưa chạy lại. Main agent thì đã chạy lại, còn sub-agent thì không. Đây là một điều phiền cần được sửa.

Thứ khác anh không thích là sidebar bên trái. Anh muốn phóng to màn hình, và nhân tiện, tính năng zoom in cũng không hoạt động bằng phím tắt; anh phải vào menu View rồi bấm Zoom In. "Nhưng okay, it is what it is."

Bên trái là toàn bộ thread như đã nói. Anh có thể "settle" một thread, nghĩa là đã xong, và xem lại mọi thứ trong đó. Mỗi thread hiện tên repo: syntaxkit-final, cargo-new, syntax-path-homepage... Nhưng điều anh không thích là không có grouping (nhóm).

Sidebar của Claude Code với mục Workspaces, các session nhóm theo workspace
Để so sánh, sidebar của ứng dụng Claude Code: mục Workspaces nhóm các session theo từng workspace (syntaxkit-final, Marshaldesk...), mỗi workspace mở hoặc thu gọn được và có nút "+" để tạo session ngay trong đó.

Ý anh là gì? Anh mở Claude Code: ở đó bạn nhóm được các session thread. Anh có workspace SyntaxPath với hai session, tương tự là một workspace khác với một session. Cursor cũng vậy: anh mở Cursor, mở sidebar, và có workspace, bên trong là tất cả các session.

12. Bảng hover của thread, rồi mở T3 Connect

Jan không hiểu vì sao T3 Code chọn cách làm không có grouping. Giờ anh đã phần nào quen với nó, nhưng anh hoàn toàn không thích. Anh thích nhóm tất cả session thread của mình, thích xem chúng theo kiểu thư mục, mở ra, thu lại. Nó giúp mọi thứ dễ hơn với anh.

Hệ quả là nếu muốn tạo session hoặc thread mới, anh không thể bấm vào một nhóm và nói "tạo thread trong repo này". Anh phải bấm nút new thread, rồi chọn đúng repo, rồi mới bắt đầu được. Điều này tạo ra ma sát không cần thiết mà anh không cần và thật lòng không muốn. Anh ước có một setting nào đó. Đúng là có thể lọc (filter): bảo T3 Code chỉ hiện session thread của một repo, và danh sách sẽ hiện đúng như vậy. Dù vậy anh vẫn không thích, đó không phải cách làm việc anh ưa. Anh biết là chuyện vặt, nhưng nó nên được đổi, hoặc ít nhất nên có chức năng tạo thư mục nhóm bình thường.

Một thứ anh rất thích là bảng hover nhanh (quick toggle hover) trên mỗi thread. Di chuột vào là thấy ngay: tên thread, repo, máy đang chạy, branch, model, và các PR đã tạo. Ví dụ một thread có một chuỗi PR, bốn cái tổng cộng; ở đó cũng thấy ngay chữ "limited", nghĩa là usage limit lại hết. Một thread khác hiện cả loạt PR, mười cái hoặc hơn. Anh thấy phần này rất mượt.

Giờ tới các tính năng anh thật sự yêu, và một trong số đó là T3 Connect. Anh vào settings, trong đó có mục Connections.

Settings Connections của T3 Code: T3 Connect, Authorized clients và Environments với MacBook Pro
Trang Settings / Connections: bật T3 Connect ("This environment is available to your other devices through T3 Connect"), Publish agent activity, Hold webhooks while offline, Authorized clients, và mục Environments có chiếc MacBook Pro đang ở trạng thái reconnecting trước khi máy được bật lên.

Anh thu nhỏ màn hình một chút. Đây là environment local của anh, Mac Studio, chính máy anh đang dùng để quay. Anh còn một environment khác: chiếc MacBook. Việc anh làm bây giờ là cầm chiếc MacBook lên, bật nó, rồi tải lại trang: MacBook đã kết nối. Anh có thêm một environment nối vào Mac Studio này, và điều đó cho phép làm một việc rất mạnh.

13. Chạy agent trên một máy khác và trên điện thoại

Anh quay lại màn xem thread chính và tạo một session mới trong repo SyntaxKit. Lúc này anh đổi được environment thực tế: dùng Mac Studio, chính máy đang chạy, hoặc dùng MacBook. Anh chọn MacBook và gõ "hey, how are you?".

Bấm Enter, T3 Code vẫn tạo worktree, fetch base branch, rồi agent bắt đầu suy nghĩ. Và lần này nó không chạy trên máy của anh, nó chạy trên chiếc MacBook ở xa. Về lý thuyết anh có thể đang ở Mỹ (hiện anh đang ở Đức) và mọi thứ vẫn chạy hoàn toàn bình thường. Đây chỉ là một kết nối remote; anh kết nối được từ xa vào máy đó.

Điều cần nhận ra là kết nối này luôn bật. Anh không phải vào terminal. Với Claude Code chẳng hạn, anh phải mở terminal, gõ lệnh remote control của Claude, đợi một lúc, chọn mặc định, blah blah blah, rồi mới mở điện thoại. Cách đó chạy đầy đủ, anh nói rõ đừng hiểu nhầm. Nhưng trải nghiệm T3 Connect mượt hơn nhiều, thật lòng là ở một đẳng cấp khác.

Anh cũng có quyền truy cập y như vậy trên điện thoại. Anh giơ điện thoại lên: ứng dụng T3 Code đã cài sẵn. Trong đó anh gõ tin nhắn "Yo, what's up?" và đổi model, lần này dùng GPT-6 Luna. Anh bấm save, rồi Enter.

Ứng dụng T3 Code trên điện thoại với bảng Thread settings chọn model, cạnh ứng dụng desktop cùng thread
Bên trái là ứng dụng T3 Code trên điện thoại, bảng "Thread settings" liệt kê model theo harness: Codex (GPT-6.1-Sol, GPT-6-Astra, GPT-6-Luna), Claude (Opus 5.5, Sonnet 5.5, Fable 5.1, Haiku 5.5), Cursor, cùng tuỳ chọn Reasoning, Fast Mode và Runtime; bên phải là cùng thread "Casual Greeting" trên desktop.

Trên desktop xuất hiện ngay một tin nhắn mới "Yo, what's up?", kèm một context handoff, rồi một câu trả lời mới: "Hey, I'm here and ready." Anh cũng thấy chính tin nhắn đó trên điện thoại. Anh gõ "Thank you" rồi đổi model thêm một lần nữa.

Lần này anh dùng Cursor, và chọn model qua Cursor: Grok 4.7. Bấm save, bấm Enter, và lại thấy tin nhắn hiện ngay ở desktop. Chuỗi context handoff giờ là Opus 5.5, GPT-6 Luna, Grok 4.7.

14. Đăng nhập là đủ: Mac Mini, app mobile và sync engine

"Cảm ơn. Đó là sức mạnh của T3 Code", Jan nói. Mọi thứ chạy ngay. Anh không phải mở terminal, chạy một lệnh nào đó, rồi vào app điện thoại, rồi tạo một kiểu kết nối kỳ quặc. Với anh, T3 Connect là một game changer.

Việc duy nhất bạn phải làm là đăng nhập. Anh chỉ vào chỗ hiển thị tài khoản đang đăng nhập: đó là cách anh kết nối được giữa mọi thiết bị của mình. Điều này cũng có nghĩa là bạn có thể mua một máy chủ bên ngoài, ví dụ một chiếc Mac Mini, biến nó thành máy làm việc, rồi chỉ việc đăng nhập hoặc kết nối vào máy đó và chạy mọi thứ ở trong đó. Đó cũng là điều anh sắp làm: mua một chiếc Mac Mini nhỏ và để mọi thứ chạy trên đó.

Thêm một lưu ý nhanh: nếu muốn cài ứng dụng mobile, hoặc bản nightly của ứng dụng mobile, hãy vào phần General settings và bấm vào mục mobile application.

Nhìn vào settings, bạn cũng thấy mọi thứ thân thiện với developer đến mức nào. Ví dụ anh cập nhật được default model, và không chỉ cho environment hiện tại (Mac Studio), mà áp dụng hoặc đổi default model cho tất cả environment của mình. Mọi thứ được đồng bộ. T3 Connect không chỉ cho bạn một cuộc gọi remote đơn giản; về bản chất nó là một sync engine, anh nói.

Settings General của T3 Code: Model Grok 4.7, Permissions Full access, Workspace với lựa chọn Current checkout và New worktree
Trang Settings / General: default model đã đổi sang Grok 4.7 (500K, High, Fast), Permissions là Full access, và menu Workspace đang mở với hai lựa chọn "Current checkout" và "New worktree"; bên dưới là Project grouping, Project order, Auto-resume limited threads.

Anh minh hoạ: đây là MacBook, anh đổi default model sang Grok 4.7, rồi nhìn sang desktop: nó đã cập nhật tự động. Tất cả đều realtime. "Cool đúng không?"

15. Workspace, Appearance, và những thứ hay hỏng ở bản Nightly

Setting tiếp theo theo Jan là cực kỳ quan trọng: Workspace. Anh đặt nó là "New worktree". Nghĩa là mỗi khi tạo thread mới, thay vì dùng checkout hiện tại và kiểu như trộn lẫn mọi thứ vào nhau, T3 Code sẽ tạo một worktree mới. Anh thấy cách này tốt hơn gấp mười lần và luôn khuyên làm như vậy.

Ở đây cũng có mục Appearance, cho phép đổi màu giao diện. Thật lòng, anh đã thử hết các lựa chọn và không thích cái nào; theme mặc định của T3 Code trông đẹp nhất, nên anh khuyên dùng theme đó.

Một tính năng anh khá thích là snapshots. Nó rất giống Codex: dùng một phím tắt để chụp màn hình. Anh mở trang web T3 Connect, bấm hai phím Command, rồi quay lại: ảnh chụp đã nằm ở đó. Nhưng "ngạc nhiên chưa", vì đang dùng bản nightly nên tính năng này lại hỏng: ảnh chụp không tải được, mờ hoàn toàn, khá phiền. Đây cũng không phải lần đầu anh gặp lỗi này. Anh từng bị một lần, rồi cập nhật T3 Code thì nó chạy lại, giờ lại hỏng tiếp.

Theo anh, đó là cái giá khi đứng ở "bleeding edge", và anh chấp nhận được, vì vẫn dùng được công cụ chụp màn hình bình thường. Đúng là đội ngũ ship rất nhiều tính năng và nhiều thứ chạy rất tốt; dù vậy cũng có nhiều thứ hỏng liên tục, như công cụ chụp màn hình này.

Một thứ khác cũng hỏng với anh là design mode. Anh mở trình duyệt tích hợp trong T3 Code (còn không chắc dev server có đang chạy không) và nói T3 Code có đủ các tính năng tiêu chuẩn bạn muốn và chờ đợi. Anh phóng to một chút, bấm nút design mode, và giờ có thể chọn từng phần tử trên trang. Anh chọn dòng chữ tiêu đề, thẻ h1, và gõ "hey this is broken" làm ví dụ (thật ra nó không hỏng). Bấm attach, phần tử được đính vào ô nhập; bấm Enter thì về lý thuyết nó cũng phải tạo một ảnh chụp màn hình.

16. Browser mode và cửa sổ usage ước tính chi phí API

Nhưng nó không tạo ảnh. Ảnh chụp lại hỏng, như trên màn hình. Anh đóng đi, thử lại, tự hỏi ảnh đâu, mở được không. Mở ra thì đúng là có ảnh, nhưng anh không rõ có vấn đề gì. Cứ có thứ gì đó hỏng liên tục, mà cụ thể là ảnh chụp màn hình. Anh không thích, "but it is what it is".

Trong đó cũng có browser mode: anh xem được chính xác agent đang làm gì. Lúc này agent đang truy cập trang của anh, và anh có thể cuộn trang theo, khá hay. Vậy là có rất nhiều tính năng tuyệt vời, và cũng có rất nhiều tính năng tuyệt vời đang hỏng hoàn toàn.

Tiếp theo là thứ anh yêu và chưa từng thấy ở provider nào khác: cửa sổ usage. Ở đây anh thấy ước tính usage API. Như đã biết, anh dùng Claude Code, Codex, Cursor và các công cụ khác, và với tất cả các provider này, anh nhận usage được trợ giá. Bạn cũng vậy. "Tôi không được tài trợ đâu nhé", anh nói; ai cũng nhận usage như nhau. Anh trả 100 đô mỗi tháng cho Claude Code ("chỉ" là tương đối thôi), vậy mà đã dùng khoảng 3.000 đô giá trị nếu tính theo API credit hay API usage. Anh thấy điều đó khá tuyệt.

Trang Usage của T3 Code: 599,18 đô ước tính API trong 30 ngày, chia theo Codex và Claude Code
Trang Usage / All environments ở chế độ Cost: ước tính 599,18 đô chi phí API cho 51 session (Codex 30,49 đô, Claude Code 568,69 đô), biểu đồ chi phí theo ngày, tổng token đã xử lý 2,07B, cached input 2,01B, uncached input 3,38M, output 5,58M, cache savings 6.031,89 đô, và chi phí theo loại.

Khi chuyển sang mốc 90 ngày, anh biết usage Cursor của mình "cao ngất trời", 20 nghìn đô. "Đừng comment về chuyện đó, tôi biết là quá nhiều. Chắc tôi sắp phá sản tới nơi." Rồi anh nói ngay là đùa thôi. Nhưng anh thấy tính năng này rất hay.

Anh xem được chính xác hôm nay đã dùng model nào, usage, token, cached input, uncached input, output, cache savings, và cả bảng breakdown theo từng model. Anh chưa từng thấy điều này ở provider nào khác: OpenCode, Antigravity, Cursor. Hoặc đúng hơn là có thấy, nhưng không được chia nhỏ theo cách này. Bạn cũng luôn thấy xu hướng model, những gì mình đang dùng gần đây. Trong bảy ngày qua anh gần như không dùng model Codex nào, chỉ dùng Cursor và Claude Code, hai cái anh thích nhất. Với anh, tất cả trông rất ổn.

17. Pull request, scheduled task và tính năng visualization

Một tính năng cốt lõi khác của T3 Code là công cụ review PR, tức màn hình pull requests. Anh xem được tất cả PR ở đây, 11 cái đang mở. Mở một PR ra, bên phải có phần tóm tắt (summary), có timeline (comment, pull request, docs), và có thể review lại code nếu cần. Khá cơ bản, nhưng trông đẹp.

Điều hay nữa là T3 Code tự động subscribe vào các PR của bạn. Thay vì anh phải vào đó và nói "hãy xem PR này, đảm bảo mọi thứ chạy, sửa các comment của Bugbot", T3 Code tự làm hết mà không cần anh can thiệp.

Anh nhắc nhanh rằng bạn cũng có scheduled tasks, nhưng thật lòng anh không dùng nhiều. Tất cả schedule trong đó đều do agent của anh tạo ra, anh không tự làm. Anh không thích làm việc đó, và thường không thấy cần schedule: thứ gì làm bằng schedule được thì cũng làm thủ công được. Có thể anh chưa dùng schedule đủ nhiều để đảm bảo cho nó. Dù sao nó vẫn là một tính năng, một thứ mà agent có quyền dùng.

Còn một tính năng nữa anh muốn cho xem: visualization. Anh lại phóng to qua View rồi Zoom In ("vâng, nó hỏng, tôi biết, hơi phiền"). Ở đây T3 Code đã tạo ra một bản trực quan hoá.

Bối cảnh: anh muốn tạo một plugin hoặc một effect cho Final Cut Pro, cho phép tự động zoom in và đặt khuôn mặt của anh ở phía bên phải. Chi tiết không quan trọng lắm, nhưng anh đã hỏi agent sẽ làm việc đó thế nào. Agent trả lời rằng nó sẽ dùng motion template, có thể là FX plugin hay đại loại vậy. "Ai quan tâm chứ?"

Rồi anh nói với agent: hay đấy, bạn có thể tạo một visualization chất lượng cao giải thích chi tiết cách nó sẽ hoạt động không? Và đó chính là thứ đang hiện ra.

Visualization trong thread Build a Reusable Facecam Effect với các thanh trượt Size, Top margin, Right margin, Zoom
Visualization trong thread "Build a Reusable Facecam Effect": bản demo tương tác của effect, kéo điểm trên camera gốc vào khuôn mặt, effect thu nhỏ clip, đưa khuôn mặt vào giữa và đặt ở góc trên bên phải; các thanh trượt Size, Top margin, Right margin, Zoom và tuỳ chọn Shape chỉnh trực tiếp.

Anh chỉnh trực tiếp được: thu nhỏ, phóng to, đổi margin. Nhìn rất thích. Rồi anh thành thật: Claude Code cũng có thứ này với artifacts; Codex cũng có kiểu visualization tương tự. Đây không phải một tính năng đột phá. Nhưng điều quan trọng, điều bạn cần nhận ra, là nó chạy với bất kỳ harness nào: Claude Code, Cursor, OpenCode, Codex, Antigravity, "tôi không quan tâm", ở đâu cũng chạy. Đó là thứ bạn không có ở các provider khác, vì mỗi provider có primitive riêng của mình.

18. Không xem được artifacts, và kết luận sau sáu ngày dùng

Claude Code có artifacts, Codex về cơ bản có thứ tương tự, còn Antigravity thì anh còn không chắc có visualization không. Ý anh muốn nói là: dù không đột phá, visualization của T3 Code chạy với mọi harness, giống như một primitive đã được chuẩn hoá.

Một điều nữa anh không thích lắm: bạn không dùng được primitive của các harness khác. Như đã nói, Claude Code có artifacts, và điều phiền là trong T3 Code anh không thể xem hay tạo artifacts. Anh không hiểu vì sao, vì anh đang dùng harness của Claude Code, nên về lý thuyết nó phải xem được mọi artifact. Nhưng lần nào anh cũng nhận lỗi báo rằng artifacts không xem được ở đây. Anh không rõ vấn đề nằm ở đâu, và theo anh nên sửa, vì đó là một tính năng của harness, anh muốn xem artifact của mình ngay trong T3 Code. "It is what it is", đơn giản vậy thôi.

Vậy là đã xem hết các tính năng, mọi thứ T3 Code mang lại và mọi thứ còn hỏng. Tóm lại anh nghĩ gì? Anh là một fan lớn. Anh bắt đầu dùng T3 Code thường xuyên khoảng sáu ngày trước, như trên màn hình cho thấy, và chưa dừng lại. Anh dùng nó mỗi ngày, trên điện thoại, trên Mac Studio, trên MacBook.

Khoảng 60% thời gian anh dùng T3 Connect, vì anh liên tục code trên chiếc MacBook trong khi kết nối vào Mac Studio. Mọi thứ chạy ổn định. Anh không gặp vấn đề nào với T3 Connect, điều khá bất ngờ, vì T3 Code miễn phí và mã nguồn mở. Có những sản phẩm trả phí còn làm tệ hơn.

Thứ cần sửa là sidebar: anh rất muốn nhóm mọi thứ. Anh biết có người không thích như vậy, nhưng anh thích grouping. Anh đã quen với các thread riêng lẻ, nhưng không thích chúng; anh muốn dùng primitive grouping hơn, vì nó dễ hiểu và gọn gàng hơn. Và đó là tất cả.

Anh mời người xem để lại bình luận: nghĩ gì về video, về T3 Code, đang dùng hay đã từng dùng chưa, và sẽ so sánh T3 Code với các đối thủ thế nào. Anh nói anh đọc mọi bình luận và rất thích trò chuyện với người xem. Anh chúc mọi người một ngày tốt lành, hẹn gặp ở video sau, "over and out", tạm biệt.

Nguồn và liên kết 7 nguồn

  1. Tên gốc: I Switched From Claude Code to T3 Code
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=SAFrydhpgJo youtube.com
  4. Kênh YouTube Jan Marshal (Jan Marshal): youtube.com/channel/UC--oQmMTiFaW3kmCwrjl9-A youtube.com
  5. Trang chủ T3 Code, "the open-source control plane for coding agents", điều phối Claude Code, Codex, Antigravity, OpenCode, Cursor và Grok từ một giao diện: t3.codes t3.codes
  6. Trang tải T3 Code với hai kênh Stable và Nightly: t3.codes/download t3.codes
  7. Repo mã nguồn mở của T3 Code (README liệt kê các provider được hỗ trợ và cách cài): github.com/pingdotgg/t3code github.com