Cách giữ ngữ cảnh khi chuyển đổi giữa các coding agent

Chuyển một tác vụ qua lại giữa Claude Code, Codex và Gemini sẽ làm mất mọi thứ ngoại trừ diff. Hãy giữ ngữ cảnh xuyên suốt các coding agent bằng một file quy tắc, ghi chú bàn giao và một Task dùng chung.

Aiden Flux

Aiden Flux

4 tháng 11 2026

Cách giữ ngữ cảnh khi chuyển đổi giữa các coding agent

Bạn bắt đầu một tính năng trong Claude Code. Nó bị kẹt ở một lỗi kiểu dữ liệu (type error) hóc búa, nên bạn giao cùng repo đó cho Codex, vốn giỏi hơn ở kiểu việc nặng nhọc này. Codex sửa xong, nhưng giờ nó chẳng biết tính năng đó để làm gì, những file nào bạn đã thống nhất là không được đụng vào, hay thế nào thì coi là "xong" ở đây. Bạn phải giải thích lại toàn bộ từ ký ức. Mười phút sau bạn quay lại, và Claude Code cũng đã quên hết. Code thì tiến về phía trước. Còn ngữ cảnh thì không.

Đây chính là cái giá phải trả khi chạy nhiều hơn một coding agent. Mỗi công cụ giữ bộ nhớ riêng theo định dạng riêng và phiên (session) riêng, nên ngay khi công việc chuyển từ agent này sang agent khác, mọi thứ trừ đoạn diff đều rơi xuống đất. Giữ ngữ cảnh khi chuyển đổi giữa các coding agent nghĩa là làm cho ngữ cảnh đó sống ở một nơi nào đó bên ngoài bất kỳ agent đơn lẻ nào, dưới một dạng mà agent kế tiếp có thể đọc được mà bạn không phải thuật lại.

Bài viết này sẽ hướng dẫn cách làm điều đó, dùng Sharkly như một quy trình: lớp nằm phía trên các coding agent của bạn và giữ cho ngữ cảnh, tiến độ, điểm tắc nghẽn, kết quả và phần đánh giá của con người luôn hiển thị từ lúc gửi yêu cầu đến lúc phát hành. Bạn đã có sẵn các coding agent. Vấn đề ở đây là đường nối giữa chúng, và nó ngày càng rộng ra mỗi khi bạn thêm một agent.

Vì sao ngữ cảnh không di chuyển được giữa các agent

Ngữ cảnh cho một tác vụ lập trình nằm ở ba nơi, và chỉ một trong số đó là có thể mang đi được.

Thứ nhất là file hướng dẫn: CLAUDE.md, AGENTS.md, GEMINI.md. Các quy tắc thường trực, quy ước, lệnh để chạy test. Thứ hai là trạng thái phiên: lịch sử cuộn lại những gì bạn và agent vừa trao đổi, những gì nó đã thử, những gì nó đã loại bỏ. Thứ ba là chính sản phẩm đầu ra, tức đoạn diff trên đĩa hoặc trên nhánh (branch).

Chỉ có thứ ba là di chuyển miễn phí. Một agent khác có thể đọc code, nhưng nó không thể đọc một cuộc hội thoại mà nó không tham gia, và nó cũng sẽ không đọc một file hướng dẫn vốn được viết cho một công cụ khác. Đó chính là ranh giới cần nói thẳng ra: chuyển đổi agent thì giữ được code nhưng đánh rơi lý lẽ đằng sau. Commit thì tồn tại. Còn cái "vì sao" thì nằm trong bộ đệm lịch sử cuộn mà một agent nhìn thấy và agent kế tiếp sẽ không bao giờ thấy được.

Vậy nên giữ ngữ cảnh qua một lần chuyển đổi thực ra là hai việc: làm cho các quy tắc thường trực đọc được bởi mọi agent, và làm cho trạng thái tác vụ đang diễn ra tồn tại dưới dạng một thứ gì đó khác ngoài bộ nhớ của một công cụ. Các phần tiếp theo sẽ lần lượt giải quyết chúng. (Nếu nỗi đau của bạn là mất ngữ cảnh giữa các lần chạy của cùng một agent, thì đó là một vấn đề liên quan nhưng khác biệt, được trình bày trong duy trì ngữ cảnh xuyên các phiên AI.)

Gộp các quy tắc thường trực vào một file mà mọi agent đều đọc

Hãy bắt đầu bằng thắng lợi rẻ nhất. Claude Code đọc CLAUDE.md, Codex đọc AGENTS.md, Gemini CLI đọc GEMINI.md. Cùng một nhiệm vụ, ba tên file. Nếu bạn duy trì chúng riêng rẽ, chúng sẽ lệch nhau, và agent mà bạn vừa chuyển sang sẽ đang tuân theo những quy tắc lỗi thời trong khi bạn tưởng là không.

Hãy viết quy tắc một lần rồi cho các tên file khác trỏ vào nó. Trên macOS hoặc Linux:

# AGENTS.md is the source of truth; the others are aliases
ln -s AGENTS.md CLAUDE.md
ln -s AGENTS.md GEMINI.md
git add AGENTS.md CLAUDE.md GEMINI.md

Giờ đây mọi agent mở repo đều đọc cùng một bộ quy ước, và chỉ còn một file để cập nhật mỗi khi chúng thay đổi. Hãy giữ nó ngắn gọn và thực tế: lệnh test, những thư mục bị cấm đụng vào, quy tắc review, commit nên trông như thế nào. Đây là khế ước chung mà mỗi agent thừa hưởng ngay khi khởi động, bất kể bạn đã chuyển sang agent nào.

Kiểu lỗi cần đề phòng: đưa chi tiết riêng của từng tác vụ vào những file này. File hướng dẫn là để chứa các quy tắc đúng cho mọi tác vụ trong repo. "Chúng ta dùng Vitest, không phải Jest" thuộc về đây. Còn "Hoàn thiện logic thử lại của checkout và đừng đụng vào middleware auth" thì không; câu đó đúng với một tác vụ trong tuần này và sai ngay tuần sau. Trộn hai loại này với nhau nghĩa là mọi agent đọc những hướng dẫn vốn dành cho một công việc đã xuất xưởng từ lâu.

Mang theo ngữ cảnh đang làm việc, không chỉ các quy tắc

File quy tắc đưa một agent mới đến được vạch xuất phát. Nó không nói gì về tác vụ đang tiến hành: những gì đã được quyết, những gì làm dở dang, những gì còn chưa chắc chắn. Chính kiến thức đó là thứ bốc hơi khi bạn chuyển đổi, bởi vì nó vốn chỉ tồn tại trong phiên của agent trước.

Cách sửa thủ công là một bản ghi chú bàn giao (handoff note). Trước khi chuyển agent, hãy để agent hiện tại viết ra nó đang ở đâu: mục tiêu, những file nó đã thay đổi, những gì nó đã kiểm chứng, và một điều duy nhất nó chưa chắc chắn. Dán bản đó vào agent kế tiếp như tin nhắn đầu tiên. Cách này hiệu quả, và với một lần chuyển đổi thì thế là đủ. Kiểu mẫu này đáng để tự mình ghi nhớ; hình dạng của một bản ghi chú tốt được trình bày trong các mẫu bàn giao cho agent.

Kiểu lỗi ở đây là bản ghi chú không tồn tại ở đâu bền vững. Nó là một đoạn văn trong terminal mà bạn sắp đóng, hoặc một tin nhắn bạn gõ lại mỗi lần. Chuyển qua chuyển lại hai lần là bạn đang duy trì bản ghi chú bàn giao bằng tay, trong đầu, xuyên qua ba công cụ. Ngữ cảnh có tồn tại, nhưng bạn đã trở thành cơ sở dữ liệu lưu trữ nó. Điều đó trụ được với một tác vụ. Nhưng nó không trụ được khi bạn chạy vài tác vụ cùng lúc, và đó là chỗ cách tự làm (DIY) hết đất dụng võ.

Nơi cách tự làm hết khả năng mở rộng

Quy tắc liên kết tượng trưng (symlink) cộng với một bản ghi chú bàn giao dán vào sẽ đưa bạn đi được một quãng dài với một repo và hai agent. Thêm agent thứ ba, repo thứ hai, hoặc một tác vụ kéo dài cả ngày, và phép toán sẽ quay lại chống bạn. Mỗi lần chuyển đổi là một lần xuất và nhập thủ công. Mỗi tác vụ có mạch "những gì đã xong" riêng chỉ tồn tại ở nơi mà agent cuối cùng để lại. Không có gì cho bạn biết rằng một agent backend đã xong endpoint mà agent frontend đang chờ, bởi vì việc "cho biết" vốn là một tin nhắn trong terminal mà chẳng ai đang xem.

Đến lúc đó thì cách sửa không phải là một bản ghi chú tốt hơn. Mà là chuyển ngữ cảnh đang làm việc ra khỏi các agent hoàn toàn và đặt lên một Task (Tác vụ) chung mà mọi agent và con người đều đọc và ghi lại. Một Task trong Sharkly lưu trữ mục tiêu, tiêu chí nghiệm thu, đoạn diff, các điểm tắc nghẽn và phần thảo luận trong một bản ghi duy nhất. Việc thực thi, tắc nghẽn, kết quả và phần theo dõi đều quay về dòng thời gian của Task đó, nên việc chuyển đổi agent không còn là một lần xuất dữ liệu nữa. Bạn chỉ cần giao lại Task; agent kế tiếp đọc đúng bản ghi mà agent cuối cùng đã viết vào.

Đây cũng là chỗ sự phân chia giữa con người và agent trở nên rõ ràng. Agent nghiên cứu, thực thi, kiểm thử và báo cáo về Task. 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 ở nơi cần đến phán đoán của đội ngũ, và bản ghi mà người lao động kế tiếp đọc cũng chính là bản ghi mà người đánh giá đọc. Điều đó chỉ khả thi vì ngữ cảnh không còn bị mắc kẹt trong một phiên nữa.

Đây là cặp quyết định thẳng thắn. Nếu bạn chạy một agent trong một terminal trên một repo, bạn không cần bất cứ thứ gì ở đây cả; ngữ cảnh không bao giờ rời đi, nên chẳng có gì để bảo toàn. Hãy dùng một Task chung ngay khi ngữ cảnh phải sống sót qua một lần chuyển đổi, dù lần chuyển đó là agent sang agent, agent sang người, hay chỉ là bạn của sáng mai. Nếu bạn muốn tiếp tục dùng nhiều coding agent thay vì cam kết với một hệ sinh thái duy nhất, thì tính di động đó chính là điểm cốt lõi: quy trình của bạn tồn tại bất kể bạn chọn agent nào tiếp theo, bởi vì ngữ cảnh chưa bao giờ được lưu bên trong bất kỳ agent nào. Đó cũng là cách thiết lập cho phép bạn chạy Claude Code và Codex cùng nhau trên một codebase mà không cái nào bị mù ở thời điểm bàn giao, và nó kết hợp tự nhiên với worktree, mỗi tác vụ một bản checkout, để các agent chạy song song không đụng nhau.

Danh sách kiểm tra bạn có thể chạy ngay hôm nay

Hãy làm theo thứ tự này. Ba việc đầu không tốn gì; việc thứ tư là cái bạn tiến tới khi ba việc đầu không còn theo kịp nữa.

  • Hợp nhất file quy tắc. Tạo symlink CLAUDE.md, AGENTS.md và GEMINI.md trỏ về một nguồn duy nhất. Chỉ giữ các quy ước toàn repo, không có chi tiết tác vụ.
  • Viết ghi chú bàn giao trước mỗi lần chuyển đổi. Mục tiêu, các file đã thay đổi, những gì đã kiểm chứng, câu hỏi còn bỏ ngỏ. Agent hiện tại có thể soạn nháp; bạn dán nó vào agent kế tiếp.
  • Quyết định chuyển đổi dựa trên tác vụ, không dựa trên thói quen. Ghép agent với công việc trước mắt, dùng một hướng dẫn định tuyến thay vì mặc định dùng cái terminal nào đang mở.
  • Chuyển ngữ cảnh ra khỏi các agent khi ghi chú không còn mở rộng được. Khi bạn đã phải xoay xở với nhiều hơn vài agent hoặc repo, hãy đặt mục tiêu, trạng thái và phần review lên một Task chung để việc chuyển đổi là một lần giao lại, chứ không phải một lần giải thích lại.

Nếu bạn đã chạy vài agent và phải thuật lại cùng một ngữ cảnh mỗi lần chuyển đổi, thì đó chính là vấn đề mà Sharkly được xây dựng để giải quyết: một nơi mà tác vụ, tiến độ và kết quả của mỗi agent luôn hiển thị, để ngữ cảnh sống lâu hơn mỗi lần chuyển đổi.

Khám phá thêm

GPT-6 Cyber có ý nghĩa gì đối với các đội ngũ vận hành AI Agent

GPT-6 Cyber có ý nghĩa gì đối với các đội ngũ vận hành AI Agent

GPT-6 Cyber yêu cầu Daybreak Red cùng với sự phê duyệt mô hình và có mức giá 20 USD cho mỗi một triệu token đầu vào. Dưới đây là cách các đội ngũ phát triển AI agent nên phân luồng quy trình rà soát bảo mật và phân loại xử lý.

6 tháng 11 2026

Bảng giá Gemini Omni 1.2 Flash: Mức giá 0,07 USD/giây tốn bao nhiêu ở quy mô đội ngũ

Bảng giá Gemini Omni 1.2 Flash: Mức giá 0,07 USD/giây tốn bao nhiêu ở quy mô đội ngũ

Giá của Gemini Omni 1.2 Flash khởi điểm từ 0,07 USD/giây cho độ phân giải 720p, nhưng các nhóm sẽ trả phí theo từng lượt xử lý. Hãy xem chi tiết biểu phí cho từng mức độ phân giải cùng kế hoạch ngân sách hàng tháng mà bạn có thể tái sử dụng.

6 tháng 11 2026

Gemini Omni 1.2 Flash có miễn phí không?

Gemini Omni 1.2 Flash có miễn phí không?

Gemini Omni 1.2 Flash không có gói miễn phí trên Gemini API, và khoản tín dụng 300 USD của Google Cloud cũng không áp dụng cho Gemini API. Những nơi vẫn hỗ trợ tạo video với giá 0 USD (Google Vids và Flow), hạn mức của từng công cụ, chi phí cho mỗi clip, và ý nghĩa thực sự khi các agent tự mình...

6 tháng 11 2026