☰ Mục lục series
Agent và công cụ

Harness cho mọi tác vụ: workflow động trong Claude Code

Bản dịch từ claude.dev/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code/

Tác giả bài gốc: Thariq Shihipar and Sid Bidasaria (Members of Technical Staff). Đăng ngày 02/06/2026 trên claude.dev.

Tuần trước, chúng tôi ra mắt workflow động trong Claude Code. Claude giờ có thể tự viết harness ngay khi cần, được thiết kế riêng cho tác vụ đang xử lý.

Dù harness mặc định của Claude Code được xây dựng để viết code, nó cũng hữu ích với nhiều loại tác vụ khác, vì hóa ra nhiều tác vụ có nét tương đồng với việc viết code. Nhưng với một số nhóm tác vụ, chúng tôi phải xây dựng harness riêng trên nền Claude Code để đạt hiệu quả cao nhất, chẳng hạn như Research, phân tích bảo mật, nhóm agent hay Code Review.

Workflow cho phép bạn tạo động các harness trên nền Claude Code, giúp Claude giải quyết tất cả những vấn đề đó một cách tự nhiên hơn. Bạn cũng có thể chia sẻ và tái sử dụng những workflow này với người khác.

Trong bài viết này, mình sẽ chia sẻ những trải nghiệm và bài học ban đầu với workflow để bạn tận dụng chúng tốt nhất. Hãy nhớ rằng các best practice vẫn đang hình thành: workflow động thường dùng nhiều token hơn và phù hợp nhất với những tác vụ phức tạp, có giá trị cao.

Ví dụ prompt

Trước khi đi vào chi tiết kỹ thuật, mình muốn bắt đầu bằng một vài ví dụ prompt để bạn hình dung những khả năng của workflow:

“Test này có lẽ thất bại 1 lần trong 50 lần chạy. Thiết lập một workflow để tái hiện lỗi. Đưa ra các giả thuyết cạnh tranh về tình trạng tranh chấp (race), và đừng dừng lại cho đến khi chỉ còn một giả thuyết đứng vững trước bằng chứng.”

“Dùng một workflow để xem lại 50 session gần nhất của mình, tìm những điều mình liên tục phải chỉnh lại, rồi biến những điều lặp lại thành quy tắc trong CLAUDE.md”

“Dùng một workflow để đào sâu vào #incidents trên Slack trong sáu tháng qua và tìm những nguyên nhân gốc rễ lặp lại mà chưa ai tạo ticket.”

“Lấy kế hoạch kinh doanh của mình và chạy một workflow trong đó các agent khác nhau phản biện nó từ góc nhìn của nhà đầu tư, khách hàng và đối thủ cạnh tranh.”

“Đây là thư mục gồm 80 hồ sơ ứng tuyển, dùng một workflow để xếp hạng chúng cho vị trí backend và kiểm tra lại mười hồ sơ đứng đầu. Hỏi mình bằng tool AskUserQuestion để xây dựng bộ tiêu chí đánh giá (rubric).”

“Mình cần một cái tên cho tool CLI này. Dùng một workflow để brainstorm nhiều phương án rồi tổ chức một giải đấu để chọn ra 3 cái tên tốt nhất.”

“Dùng một workflow để đổi tên model User của chúng tôi thành Account ở mọi nơi.”

“Xem bản nháp bài blog của mình và dùng một workflow để kiểm chứng mọi nhận định kỹ thuật với codebase, mình không muốn đăng bất cứ điều gì sai.”

Workflow động hoạt động như thế nào

Workflow động thực thi một file JavaScript có một vài hàm đặc biệt giúp tạo và phối hợp các subagent:

Hàm agent(prompt, opts) với chú thích cho các tùy chọn: prompt là đầu vào bắt buộc duy nhất, schema trả về JSON đã được kiểm tra, model chọn opus, sonnet hoặc haiku, isolation là worktree hoặc remote, agentType chọn một subagent. Bên dưới, parallel() phân nhánh và đợi tất cả hoàn tất; pipeline() đưa từng mục lần lượt qua mọi giai đoạn.

Ba thành phần nền tảng của một script workflow: agent() tạo một subagent; parallel() và pipeline() kết hợp nhiều subagent.

Workflow động cũng bao gồm các hàm JavaScript tiêu chuẩn như JSON, Math và Array để hỗ trợ xử lý dữ liệu.

Một điều đặc biệt hữu ích cần biết là workflow động có thể quyết định agent dùng model nào và liệu các subagent có chạy trong worktree riêng hay không, cho phép Claude chọn mức độ thông minh và sự cô lập cần thiết.

Nếu workflow bị gián đoạn, chẳng hạn do thao tác của người dùng hoặc thoát terminal, việc tiếp tục session sẽ cho phép workflow tiếp tục từ nơi nó dừng lại.

Vì sao cần workflow động

Khi bạn yêu cầu harness mặc định của Claude Code làm một tác vụ, nó phải vừa lập kế hoạch vừa thực thi trong cùng một context window. Với nhiều tác vụ viết code, cách này rất hiệu quả, nhưng có thể không còn đáp ứng được với những tác vụ kéo dài, song song ở quy mô lớn, có cấu trúc chặt chẽ và/hoặc cần phản biện đối kháng.

Lý do là Claude càng làm lâu một tác vụ phức tạp trong một context window duy nhất thì càng dễ mắc một số kiểu lỗi cụ thể:

  • Sự lười biếng của agent (agentic laziness) là khi Claude dừng lại trước khi hoàn thành một tác vụ đặc biệt phức tạp, gồm nhiều phần, rồi tuyên bố đã xong dù mới làm được một phần, chẳng hạn chỉ xử lý 35 trong số 50 mục của một đợt review bảo mật.
  • Thiên kiến ưu ái bản thân (self-preferential bias) là xu hướng Claude ưu tiên những kết quả hoặc phát hiện của chính nó, đặc biệt khi được yêu cầu kiểm chứng hay đánh giá chúng theo một rubric.
  • Sự lệch mục tiêu (goal drift) là việc dần không còn bám sát mục tiêu ban đầu qua nhiều lượt trao đổi, đặc biệt sau khi nén context (compaction). Mỗi bước tóm tắt đều làm mất thông tin, và những chi tiết như yêu cầu cho trường hợp biên hay ràng buộc “đừng làm X” có thể bị thất lạc.

Tạo một workflow giúp khắc phục những vấn đề này bằng cách điều phối các subagent Claude riêng biệt, mỗi subagent có context window riêng và mục tiêu tập trung, tách biệt.

Workflow động và workflow tĩnh

Có thể trước đây bạn đã tạo một workflow tĩnh bằng Claude Agent SDK hoặc claude -p để phối hợp nhiều phiên bản Claude Code với nhau.

Nhưng vì workflow tĩnh cần hoạt động với mọi trường hợp biên, chúng thường mang tính tổng quát hơn. Với Claude Opus 4.8 và workflow động, Claude giờ đã đủ thông minh để viết một harness tùy chỉnh, được thiết kế riêng cho trường hợp sử dụng của bạn.

Câu hỏi “Có nên chuyển dịch vụ checkout của chúng tôi sang một nhà cung cấp mới không?” được xử lý theo hai cách. Harness tĩnh thực hiện năm lượt tìm kiếm web, lấy kết quả, kiểm chứng và tổng hợp thành một báo cáo nghiên cứu chung chung. Workflow động đọc code thanh toán, kiểm tra từng tính năng với tài liệu của nhà cung cấp mới, tính chi phí theo khối lượng giao dịch thực tế, chạy một agent đóng vai người phản biện, rồi kết thúc bằng một đề xuất cụ thể.

Harness tĩnh chạy cùng những bước cho mọi câu hỏi; workflow động được định hình theo câu hỏi cụ thể trước mắt.

Những mẫu hữu ích khi dùng workflow động

Bạn có thể bắt đầu dùng workflow động chỉ bằng cách yêu cầu Claude tạo một workflow, hoặc dùng từ kích hoạt “ultracode” để đảm bảo Claude Code tạo workflow.

Nhưng việc hình dung được cách workflow động hoạt động sẽ giúp bạn hiểu khi nào nên dùng chúng và cách định hướng Claude thông qua prompt.

Có một vài mẫu phổ biến mà Claude có thể sử dụng và kết hợp khi xây dựng workflow:

Sáu mẫu workflow dưới dạng sơ đồ nhỏ: phân loại rồi hành động, phân nhánh rồi tổng hợp, kiểm chứng đối kháng, tạo rồi lọc, giải đấu và lặp đến khi hoàn tất.

Sáu mẫu workflow mà Claude dùng để kết hợp.

Phân loại rồi hành động

Dùng một agent phân loại để xác định loại tác vụ, rồi chuyển tới các agent hoặc cách xử lý khác nhau tùy theo tác vụ. Hoặc dùng một bộ phân loại ở cuối để quyết định đầu ra.

Phân nhánh rồi tổng hợp

Chia một tác vụ thành nhiều bước nhỏ hơn, chạy một agent cho mỗi bước rồi tổng hợp các kết quả đó. Cách này đặc biệt hữu ích khi có rất nhiều bước nhỏ, hoặc khi mỗi bước được hưởng lợi từ một context window sạch riêng để không ảnh hưởng hay làm lẫn thông tin của nhau. Bước tổng hợp là một điểm đồng bộ (barrier) — nó đợi tất cả các agent ở những nhánh hoàn tất, rồi hợp nhất đầu ra có cấu trúc của chúng thành một kết quả.

Kiểm chứng đối kháng

Với mỗi agent được tạo, chạy thêm một agent riêng để kiểm chứng đầu ra của nó theo hướng phản biện, dựa trên một rubric hoặc bộ tiêu chí.

Tạo rồi lọc

Tạo một số ý tưởng về một chủ đề rồi lọc chúng theo rubric hoặc bằng cách kiểm chứng, loại bỏ các ý tưởng trùng lặp và chỉ trả về những ý tưởng chất lượng cao nhất, đã được kiểm tra.

Giải đấu

Thay vì chia công việc, hãy để các agent cạnh tranh với nhau. Tạo N agent, mỗi agent thử thực hiện cùng một tác vụ bằng một cách tiếp cận khác nhau. Sau đó, dùng prompt hoặc model để một agent chấm điểm đánh giá kết quả theo từng cặp cho đến khi tìm ra phương án chiến thắng.

Lặp đến khi hoàn tất

Với những tác vụ chưa biết trước khối lượng công việc, hãy lặp việc tạo agent cho đến khi đạt điều kiện dừng (không có phát hiện mới hoặc không còn lỗi trong log), thay vì chạy một số lượt cố định.

Các trường hợp sử dụng

Hãy sáng tạo trong việc chọn thời điểm và cách yêu cầu Claude Code tạo workflow động. Mình thấy đôi khi workflow còn hữu ích hơn với công việc phi kỹ thuật.

Migration và refactor

Bun đã được viết lại từ Zig sang Rust bằng workflow. Bạn có thể đọc thêm về cách họ làm trong chuỗi bài đăng của Jarred, hoặc xem cách chúng tôi thực hiện migration code bằng AI trên các codebase hàng triệu dòng.

Điểm mấu chốt là chia tác vụ thành một chuỗi bước cần xử lý, chẳng hạn các chỗ gọi hàm (callsite), test đang thất bại, module, v.v. Tạo một subagent trong worktree cho mỗi việc cần sửa, sau đó để một agent khác review theo hướng phản biện rồi merge chúng. Hãy cân nhắc yêu cầu agent không dùng những lệnh ngốn tài nguyên để có thể song song hóa tối đa mà không làm máy hết tài nguyên.

Nghiên cứu chuyên sâu

Chúng tôi đã phát hành một skill nghiên cứu chuyên sâu (/deep-research) trong Claude Code sử dụng workflow động. Cụ thể, nó phân nhánh các lượt tìm kiếm web, lấy nguồn, kiểm chứng các nhận định trong nguồn theo hướng phản biện, rồi tổng hợp thành một báo cáo có trích dẫn.

Nhưng bạn có thể thực hiện kiểu nghiên cứu này không chỉ với tìm kiếm web. Chẳng hạn, yêu cầu Claude tổng hợp một báo cáo tình hình từ context trong Slack, hoặc nghiên cứu cách một tính năng hoạt động bằng cách khám phá sâu codebase.

Kiểm chứng chuyên sâu

Một báo cáo được đưa vào bộ trích xuất nhận định, rồi phân nhánh tới các bộ kiểm tra nhận định từ 1 đến N, mỗi bộ có thể được nối tiếp bằng một bộ thẩm định nguồn, sau đó hội tụ thành một báo cáo đã được kiểm chứng.

Kiểm chứng chuyên sâu: một agent kiểm tra cho mỗi nhận định thực tế, có thể thêm một agent thẩm định nguồn phía sau mỗi agent.

Mặt khác, nếu bạn có một báo cáo và muốn kiểm tra, tìm nguồn cho mọi nhận định thực tế được nêu trong đó, bạn có thể tạo một workflow với một agent xác định tất cả các nhận định thực tế rồi tạo một subagent để kiểm tra chi tiết từng nhận định. Bạn cũng có thể để một agent kiểm chứng kiểm tra subagent tìm nguồn nhằm đảm bảo nguồn của nó có chất lượng cao.

Sắp xếp

1,000 mục được đưa vào một bảng đấu: vòng một ghép từng cặp với một agent mới cho mỗi lần so sánh, các mục thắng gặp nhau ở vòng hai, một lần so sánh cuối quyết định kết quả chung cuộc, và đầu ra là một danh sách đã sắp xếp.

Sắp xếp theo giải đấu: mỗi lần so sánh có một agent mới, nên không context nào phải chứa cả 1,000 mục.

Bạn có thể có một danh sách các mục muốn sắp xếp theo một thước đo định tính mà bạn tin Claude Code đánh giá tốt, chẳng hạn xếp các ticket hỗ trợ theo mức độ nghiêm trọng của bug. Nhưng nếu bạn thử sắp xếp 1000+ dòng trong một prompt, chất lượng sẽ giảm và dữ liệu sẽ không vừa context. Thay vào đó, hãy chạy một giải đấu, một pipeline các agent so sánh từng cặp (đánh giá tương đối đáng tin cậy hơn chấm điểm tuyệt đối), hoặc chia nhóm và xếp hạng song song rồi hợp nhất. Mỗi lần so sánh do một agent riêng thực hiện, nên vòng lặp tất định giữ bảng đấu và chỉ thứ tự hiện tại được giữ trong context.

Ghi nhớ và tuân thủ quy tắc

Một diff gồm +142 và −87 dòng được kiểm tra theo năm quy tắc, mỗi quy tắc có một agent kiểm chứng. Hai quy tắc đánh dấu dòng 42 và 90; những quy tắc còn lại không phát hiện vấn đề. Một agent hoài nghi đọc lại từng mục được đánh dấu để tách vi phạm thật khỏi báo nhầm, chỉ giữ lại những vi phạm đã được xác nhận.

Review từng quy tắc: một agent kiểm chứng cho mỗi quy tắc trong context sạch, rồi một agent hoài nghi lọc các mục được đánh dấu.

Nếu bạn có một bộ quy tắc cụ thể mà Claude hay bỏ sót hoặc gặp khó khăn khi tuân theo, ngay cả khi đã đưa vào CLAUDE.mds, hãy tạo một workflow với danh sách quy tắc bắt buộc được các agent kiểm chứng kiểm tra — một agent cho mỗi quy tắc. Tạo một subagent đóng vai người hoài nghi để rà soát việc áp dụng các quy tắc, đảm bảo mọi thứ phù hợp, sẽ giúp tránh quá nhiều báo nhầm.

Chiều ngược lại cũng hiệu quả: tìm trong các session gần đây và bình luận code review những điều bạn liên tục phải chỉnh lại, dùng các agent song song để nhóm chúng, kiểm chứng từng quy tắc ứng viên theo hướng phản biện (quy tắc này có ngăn được một sai sót thực sự không?), rồi chắt lọc những quy tắc còn lại vào CLAUDE.md.

Điều tra nguyên nhân gốc rễ

Debug hiệu quả nhất khi bạn đưa ra nhiều giả thuyết độc lập rồi kiểm tra chúng, nhưng nếu chỉ dùng một context window, Claude có thể mắc thiên kiến ưu ái bản thân.

Workflow có thể ngăn điều này ngay từ cấu trúc bằng cách tạo các agent đưa ra giả thuyết từ những nhóm bằng chứng tách biệt. Chẳng hạn, có các agent riêng cho log, file và dữ liệu. Sau đó, mỗi giả thuyết có thể được một nhóm agent kiểm chứng và bác bỏ xem xét.

Cách này không chỉ dành cho code. Workflow có thể dùng trong bán hàng (vì sao doanh số giảm vào tháng 3?), kỹ thuật dữ liệu (vì sao pipeline này thất bại?) hoặc bất kỳ hoạt động phân tích sau sự cố nào.

Phân loại xử lý ở quy mô lớn

Một backlog không đáng tin cậy gồm ticket hỗ trợ, báo cáo bug và phản hồi của người dùng đi vào vùng cách ly với tool chỉ đọc, nơi các agent đọc phân loại từng mục, loại trùng với những gì đã được theo dõi và chỉ xuất bản tóm tắt có cấu trúc. Một vùng đáng tin cậy với các tool đặc quyền cao chứa agent hành động dựa trên các bản tóm tắt, thử sửa và mở PR nếu sửa được, nếu không thì chuyển cho con người. /loop chạy quy trình này liên tục.

Cách ly rồi hành động: các agent đọc tiếp xúc với nội dung không đáng tin cậy mà không có đặc quyền; agent hành động chỉ thấy các bản tóm tắt của chúng.

Đội ngũ nào cũng có một hàng đợi hỗ trợ, báo cáo bug hoặc một backlog khác mà con người không thể xử lý hết.

Workflow phân loại xử lý (triage) phân loại từng mục, loại trùng với những gì đã được theo dõi và thực hiện hành động. Hành động đó có thể là thử sửa lỗi hoặc chuyển cho người dùng là con người xử lý.

Một mẫu hữu ích cho workflow triage là cách ly. Cách này ngăn các agent đọc nội dung công khai không đáng tin cậy thực hiện những hành động có đặc quyền cao; thay vào đó, những hành động này do các agent phụ trách hành động dựa trên thông tin thực hiện.

Kết hợp workflow triage với /loop để Claude làm việc này liên tục.

Khám phá và gu thẩm mỹ

Workflow có thể hữu ích khi khám phá các cách tiếp cận khác nhau cho một giải pháp, đặc biệt khi lựa chọn phụ thuộc vào gu, như thiết kế hoặc đặt tên, và một rubric sẽ giúp ích.

Hãy thử yêu cầu Claude khám phá nhiều giải pháp, rồi đưa cho một agent review rubric mô tả thế nào là giải pháp tốt. Tác vụ hoàn tất khi agent review cho rằng giải pháp đã đáp ứng các tiêu chí. Bạn cũng có thể sắp xếp hoặc chọn giải pháp thông qua một giải đấu dựa trên rubric.

Eval

Bạn có thể chạy các eval nhẹ cho những tác vụ cụ thể bằng cách tạo các agent riêng trong worktree, rồi tạo các agent so sánh để đối chiếu và chấm điểm những đầu ra cụ thể theo một rubric. Chẳng hạn, đánh giá rồi tinh chỉnh một skill bạn đã tạo theo một bộ tiêu chí cụ thể.

Định tuyến model và mức độ thông minh

Tạo một agent phân loại được tinh chỉnh theo các tác vụ của bạn để quyết định dùng model nào. Cách này có thể hữu ích khi tác vụ cần nhiều tool call và việc nghiên cứu trước khi thực thi có thể xác định model tốt nhất cho công việc.

Chẳng hạn, model tốt nhất cho tác vụ “giải thích module auth hoạt động như thế nào” phụ thuộc vào số file trong module auth và cấu trúc của codebase. Một agent phân loại có thể nghiên cứu điều này rồi định tuyến tới Sonnet hoặc Opus dựa trên độ phức tạp dự kiến của tác vụ.

Khi nào không nên dùng workflow động

Workflow còn mới. Dù có nhiều trường hợp sử dụng mà chúng mang lại kết quả vượt trội, không phải tác vụ nào cũng cần workflow, và chúng có thể tiêu tốn nhiều token hơn đáng kể.

Tốt nhất là dùng workflow một cách sáng tạo để mở rộng khả năng của Claude Code theo những cách bạn chưa từng thử. Với các tác vụ viết code thông thường, hãy tự hỏi: tác vụ này có thực sự cần thêm tài nguyên tính toán không? Chẳng hạn, phần lớn các tác vụ viết code truyền thống không cần một nhóm 5 người review.

Cách cân nhắc tương tự cũng áp dụng ở tầng cao hơn, tầng kiến trúc: quyết định đa agent hay một agent tuân theo logic tương tự — lợi ích của tính song song và chuyên môn hóa phải xứng đáng với chi phí phối hợp.

Mẹo xây dựng workflow động

Viết prompt

Viết prompt chi tiết cho workflow động, sử dụng những kỹ thuật cụ thể chúng tôi đã mô tả ở trên, sẽ tạo ra kết quả tốt nhất.

Workflow không chỉ dành cho tác vụ lớn. Bạn có thể yêu cầu model dùng một “workflow nhanh”. Chẳng hạn, bạn có thể tạo một đợt review đối kháng nhanh cho một giả định.

Kết hợp với /goal và /loop

Khi dùng các workflow có thể lặp lại, chẳng hạn triage, nghiên cứu hoặc kiểm chứng, hãy kết hợp chúng với /loop để chạy theo chu kỳ đều đặn, và /goal để đặt một yêu cầu hoàn tất bắt buộc.

Hạn mức sử dụng token

Bạn có thể đặt hạn mức sử dụng token rõ ràng cho workflow động để giới hạn số token một tác vụ dùng. Bạn có thể đưa hạn mức vào prompt, chẳng hạn: “dùng 10k token”, để thiết lập giới hạn đó.

Lưu và chia sẻ workflow động

Bạn có thể lưu workflow bằng cách nhấn “s” trong menu workflow. Bạn có thể đưa chúng vào ~/.claude/workflows hoặc phân phối qua một skill.

Bảng Dynamic workflows trong Claude Code liệt kê ba lượt chạy với số agent, tổng token và thời lượng: review-changes (14 agent, 482k token, 6m 12s), find-flaky-tests (6 agent, vẫn đang chạy) và deep-research (22 agent, 1.1M token, 11m 3s). Các phím ở cuối: chọn, enter xem, s lưu, esc đóng.

Bảng workflow động — nhấn s để lưu một lượt chạy thành workflow có thể tái sử dụng.

Để chia sẻ qua skill, hãy đặt các file workflow JavaScript vào thư mục skill và tham chiếu tới chúng trong SKILL.md. Để linh hoạt hơn, bạn có thể muốn yêu cầu Claude coi các workflow trong skill là mẫu, thay vì một script cần chạy nguyên xi.

Một thư mục skill tại ~/.claude/skills/deep-verify/ chứa SKILL.md, verify-claims.workflow.js và rubric.md, bên cạnh là nội dung SKILL.md, tham chiếu tới ./verify-claims.workflow.js để kiểm tra từng nhận định bằng một subagent riêng.

Một điểm khởi đầu mới để khám phá

Workflow là một cách mới hữu ích để mở rộng Claude Code. Mình khuyến khích bạn xem chúng như điểm khởi đầu để khám phá những cách mới dùng Claude giúp hoàn thành các tác vụ của bạn. Vẫn còn nhiều điều để khám phá về cách dùng chúng tốt nhất. Hãy cho mình biết bạn tìm ra điều gì.

Để tìm hiểu các nguyên tắc về những gì nên nằm trong một harness ngay từ đầu, hãy xem ba mẫu thiết kế harness của chúng tôi khi xây dựng với Claude.

Bài viết này được viết bởi Thariq Shihipar và Sid Bidasaria, các thành viên đội ngũ kỹ thuật tại Anthropic đang làm việc trên Claude Code.

Nội dung gốc: claude.dev Blog © Anthropic, PBC, giấy phép đăng lại có sự cho phép của Anthropic. Bản dịch và ghi chú: Lê Văn Dũng.