Claude Code Dynamic Workflows Là Gì? Ultracode, /workflows Và Giới Hạn 1.000 Agent (2026)
Dynamic workflows là tính năng mới của Claude Code: bạn gõ ultracode (hoặc nói bằng lời tự nhiên như "dùng workflow cho việc này") vào prompt, Claude sẽ tự viết một script JavaScript rẽ một tác vụ lớn thành tối đa 1.000 subagent (chạy song song tối đa 16 agent một lúc) ở nền, trong khi phiên chat chính của bạn vẫn rảnh để làm việc khác. Nói ngắn gọn: kế hoạch điều phối nằm trong code, không nằm trong đầu Claude từng lượt một.
- Các con số và ngưỡng version trong bài đã đối chiếu tài liệu chính thức (code.claude.com/docs/en/workflows) tại thời điểm viết (08/2026); đây là tính năng đổi gần như mỗi bản release, hãy kiểm tra docs live trước khi phụ thuộc.
Bài này ở mức nâng cao - viết cho người đã dùng Claude Code với subagent và skill, không nhắc lại kiến thức nền. Nếu bạn chưa rõ subagent là gì, đọc cách subagent trong Claude Code hoạt động hoặc skill trong Claude Code là gì trước khi đọc tiếp.
Dynamic workflow thực chất là gì
Một dynamic workflow không phải một tính năng UI riêng biệt - nó là một cơ chế: khi bạn kích hoạt, Claude tự viết ra một script JavaScript mô tả kế hoạch (bước nào chạy trước, bước nào chạy song song, bước nào phải chờ kết quả của bước trước). Script đó rẽ công việc ra nhiều subagent chạy nền, và Claude chỉ giữ lại kết quả cuối cùng trong context của phiên chính - không phải toàn bộ quá trình suy luận của từng subagent con.
Ví dụ minh họa để dễ hình dung cơ chế (không phải số liệu thật, chỉ mô tả logic): bạn yêu cầu Claude audit toàn bộ thư mục src/ xem có lỗi bảo mật không. Script mà nó tự viết có thể trông như "mỗi thư mục con giao cho một agent riêng quét, agent nào phát hiện vấn đề thì báo cáo kèm bằng chứng, một agent tổng hợp cuối cùng gom kết quả thành một bảng" - toàn bộ logic rẽ nhánh, chờ nhau, gom kết quả đó nằm trong file script, không nằm trong bộ nhớ làm việc (working memory) của Claude như khi bạn tự điều phối subagent thủ công.
Yêu cầu: Claude Code từ bản v2.1.154 trở lên (ngưỡng version - kiểm tra lại version bạn đang chạy trước khi phụ thuộc), hoạt động trên mọi gói trả phí cũng như API/Bedrock/Vertex/Microsoft Foundry. Với gói Pro, tính năng không tự bật mặc định - bạn phải bật thủ công ở dòng "Dynamic workflows" trong /config. Đừng nhầm nó với auto-mode (đã mặc định bật từ 14/08/2026) - đó là một tính năng hoàn toàn khác, không liên quan tới dynamic workflows, dù cả hai đều xuất hiện gần nhau trong cùng đợt cập nhật.
Yêu cầu Claude Code v2.1.154+ (kiểm tra version thật trước khi phụ thuộc); chạy trên mọi gói trả phí cộng API/Bedrock/Vertex/Microsoft Foundry; gói Pro phải tự bật thủ công ở
/config, không mặc định bật.
Hai cách kích hoạt nó
Có hai cách gọi dynamic workflow ra, tùy bạn muốn nó chạy cho một tác vụ hay cho cả phiên làm việc.
| Cách | Kích hoạt thế nào | Phạm vi |
|---|---|---|
| Gõ từ khóa / gõ tự nhiên | Gõ ultracode trong prompt, hoặc diễn đạt tự nhiên kiểu "dùng workflow cho việc này" | Một lượt / một tác vụ |
/effort ultracode | Chạy lệnh /effort ultracode đầu phiên (yêu cầu v2.1.203+) | Toàn phiên - mọi tác vụ đủ lớn tự vào chế độ xhigh reasoning kèm tự động điều phối, reset khi mở phiên mới |
Một chi tiết lịch sử hay bị bỏ qua: từ khóa gõ tay từng là workflow trước bản v2.1.160, rồi đổi tên thành ultracode từ v2.1.160 trở đi. Nhưng cách diễn đạt tự nhiên ("dùng workflow cho việc này") thì luôn hoạt động ở cả hai giai đoạn - nó không phụ thuộc vào tên từ khóa chính xác. Nếu bạn thấy tài liệu cũ hay bài viết khác nhắc "gõ workflow", đó là cách gọi trước v2.1.160.
Gotcha đáng nhớ: từ khóa chỉ kích hoạt khi được gõ trực tiếp bởi người dùng - không hoạt động qua cờ -p, không qua input phi-người-dùng của Agent SDK, không qua scheduled task, và không qua webhook/PR-comment relay. Nếu bạn đang script hóa Claude Code qua các kênh đó, chỉ nhét chữ "ultracode" vào đâu đó sẽ không tự bật dynamic workflow.
Chọn cách nào phụ thuộc vào bạn đang làm gì. Nếu chỉ một việc lớn trong cả buổi (ví dụ "ultracode: audit toàn bộ error handling trong thư mục api/"), gõ từ khóa cho riêng lượt đó là đủ - phần còn lại của phiên vẫn chạy bình thường, không tốn thêm reasoning cho các việc nhỏ. Nếu bạn biết cả buổi sẽ toàn việc lớn (một ngày dành riêng cho migration hoặc audit), /effort ultracode tiết kiệm công gõ lại từ khóa mỗi lượt - nhưng đổi lại, mọi tác vụ đủ lớn trong phiên đều tự vào chế độ xhigh reasoning, kể cả những việc bạn không định chạy dạng workflow.
Thử workflow dựng sẵn /deep-research trước
Cách nhanh nhất để thấy dynamic workflow chạy thật, không cần setup gì, là dùng workflow dựng sẵn /deep-research:
- Chạy
/deep-research <câu hỏi của bạn>. - Duyệt (approve) kế hoạch Claude đề xuất trước khi nó chạy.
- Theo dõi tiến trình bằng
/workflows. - Đọc báo cáo cuối - có trích dẫn nguồn kèm theo.
Điểm đáng chú ý: các claim không qua được đối chiếu chéo bị lọc bỏ, còn claim không kiểm chứng được thì bị đánh dấu "chưa xác minh" chứ không bị phủ định thẳng - khác hẳn kiểu Claude tự tin bịa ra một câu trả lời duy nhất. Lưu ý workflow này cần công cụ WebSearch đang bật. Nếu bạn còn chưa quen khái niệm subagent, đọc cách subagent hoạt động trong Claude Code trước khi đọc tiếp phần dưới.
Vì sao đáng thử trước tiên: đây là workflow duy nhất bạn không phải tự viết prompt điều phối - Anthropic đã đóng gói sẵn phần logic "tìm nguồn → đối chiếu chéo → lọc claim yếu → viết báo cáo có trích dẫn" bên trong. Chạy thử một câu hỏi kỹ thuật cụ thể (ví dụ "so sánh cách Next.js 16 và Remix xử lý streaming SSR") sẽ cho bạn thấy rõ mẫu hình chung của mọi dynamic workflow: một kế hoạch được duyệt trước, nhiều agent chạy song song bạn không phải theo dõi từng bước, và một kết quả cuối đã được lọc lại thay vì một câu trả lời chưa qua kiểm chứng.
Theo dõi và điều khiển một lượt chạy - /workflows
Gõ /workflows để mở view theo dõi trực tiếp: giai đoạn hiện tại, số agent đang chạy, tổng token đã dùng, thời gian đã trôi qua - tất cả trong một màn hình cập nhật liên tục.
| Phím | Hành động |
|---|---|
p | Tạm dừng / chạy tiếp (pause/resume) |
x | Dừng hẳn lượt chạy (stop) |
r | Chạy lại từ đầu (restart) |
s | Lưu lại thành lệnh dùng lại (save) |
f | Lọc danh sách agent đang hiển thị (filter) |
View này quan trọng hơn bạn nghĩ: đây là cách duy nhất để biết một lượt chạy đang "ăn" bao nhiêu token trước khi nó ăn hết ngân sách tuần của bạn - xem thêm ở phần chi phí bên dưới. Coi nó giống như để một pipeline CI chạy mà không có dashboard: bạn vẫn có thể để nó tự chạy, nhưng không nên rời mắt hoàn toàn khỏi một lượt chạy quy mô lớn lần đầu, ít nhất cho tới khi bạn quen với tốc độ nó tiêu token trên loại tác vụ bạn hay giao.
Những con số cần biết trước khi bật tính năng này
Đây là phần nên đọc kỹ nhất trước khi bật dynamic workflow cho việc gì lớn.
Giới hạn cứng: tối đa 1.000 agent cho một lượt chạy (chặn vòng lặp chạy mãi không dừng), và tối đa 16 agent chạy đồng thời (ít hơn trên máy hoặc container giới hạn CPU).
| Size guideline | Giới hạn agent | Ghi chú |
|---|---|---|
unrestricted | Không giới hạn | - |
small | < 5 | - |
medium | < 15 | Mặc định |
large | < 50 | - |
Size guideline chỉ mang tính khuyến nghị, không phải giới hạn cứng (yêu cầu v2.1.202+ - ngưỡng version, kiểm tra lại trước khi phụ thuộc). Bạn có thể chỉnh nó nếu muốn ép Claude giữ số agent thấp hơn mặc định.
Cảnh báo Large workflow: xuất hiện khi một lượt chạy vượt 25 agent HOẶC 1,5 triệu token dự phóng (con số 25 sẽ đổi theo size guideline bạn tự đặt). Đây chỉ là cảnh báo - nó không tự dừng lượt chạy. Phiên đã bật /effort ultracode sẽ không hiện cảnh báo này, vì bật chế độ đó tức là bạn đã chủ động chấp nhận các lượt chạy lớn từ đầu.
Ráp các con số lại với nhau cho dễ hình dung: một lượt audit gói gọn trong một thư mục vài chục file, dùng size guideline mặc định medium (dưới 15 agent), gần như chắc chắn sẽ không bao giờ chạm ngưỡng cảnh báo 25 agent. Nhưng một lượt migrate xuyên suốt 200+ file trên toàn repo rất dễ vượt cả 25 agent lẫn 1,5 triệu token - lúc đó bạn nên chủ động đặt size guideline thành large (hoặc chấp nhận cảnh báo xuất hiện) thay vì để nó bất ngờ dừng lại giữa chừng để hỏi ý bạn. Nói cách khác: ba con số 1.000/16/25 không phải để dọa bạn đừng dùng tính năng này, mà để bạn ước lượng trước "việc mình sắp giao nằm ở mức nào" trước khi bấm enter.
Workflows vs subagents vs skills vs agent teams - ai giữ kế hoạch
Đây là câu hỏi quan trọng nhất nếu bạn đã quen dùng subagent/skill: bốn thứ này khác nhau ở ai giữ kế hoạch điều phối, không phải ở việc "cái nào mạnh hơn".
| Tiêu chí | Subagents | Skills | Agent teams | Dynamic workflows |
|---|---|---|---|---|
| Ai quyết định bước tiếp theo | Claude, từng lượt một | Claude, từng lượt một | Một agent trưởng điều phối các agent ngang hàng | Một script đã viết sẵn kế hoạch |
| Kết quả nằm ở đâu | Context của phiên chính | Context của phiên chính | Task list chia sẻ giữa các agent | Chỉ kết quả cuối quay về context chính |
| Có lặp lại được không | Không cố định, tùy quyết định của Claude | Có, nếu prompt/context khớp lại skill | Không cố định (phiên hợp tác dài, thử nghiệm) | Có - lưu lại thành lệnh, chạy lại y hệt |
| Quy mô | Giới hạn bởi context window | Giới hạn bởi context window | Vài agent cộng tác, phiên dài | Tới 1.000 agent/lượt, 16 đồng thời |
| Hành vi khi bị ngắt | Mất tiến trình lượt đó | Mất tiến trình lượt đó | Có thể tiếp tục phiên, nhưng thử nghiệm | Pause/resume/restart qua /workflows |
Nói bằng lời thường: subagent và skill để Claude tự quyết định từng bước, bị giới hạn bởi context window của phiên đó. Agent teams (tính năng thử nghiệm - xem agent teams multi-session) là một agent trưởng giám sát các agent ngang hàng qua một task list dùng chung, hợp cho phiên cộng tác dài. Dynamic workflow khác hẳn ở chỗ kế hoạch nằm trong script, không nằm trong context của Claude - nên context chính chỉ phải giữ câu trả lời cuối, không phải toàn bộ quá trình.
Chọn nhanh: việc ủy quyền thường ngày → dùng subagent/skill. Phiên cộng tác dài, cần giám sát liên tục → agent teams. Việc lớn hơn một context window, hoặc cần đối chiếu chéo kiểu adversarial (nhiều agent kiểm tra chéo kết quả của nhau) → dynamic workflow. Muốn tự định nghĩa subagent riêng cho việc lặp lại, xem hướng dẫn tạo subagent; muốn hiểu skill là gì trước, xem skill trong Claude Code là gì.
Điểm dễ nhầm nhất giữa bốn thứ này: subagent và skill đều để Claude của phiên chính ra quyết định - chúng chỉ khác nhau ở việc skill là một gói hướng dẫn được nạp theo ngữ cảnh còn subagent là một "nhân cách" riêng được gọi ra làm một việc cụ thể rồi trả kết quả về. Cả hai đều sống và chết theo context window của phiên đó: ngắt phiên giữa chừng, tiến trình mất. Agent teams và dynamic workflow đều thoát được giới hạn đó, nhưng theo hai cách khác nhau - agent teams thoát bằng cách để nhiều phiên cộng tác qua một task list sống ngoài context của từng agent; dynamic workflow thoát bằng cách đưa hẳn kế hoạch ra khỏi context, biến nó thành một đối tượng có thể lưu, versioning bằng git, và chạy lại y hệt bất kỳ lúc nào - đây chính là lý do nó phù hợp cho việc quy mô lớn, lặp lại được, hơn là cho một cuộc trò chuyện khám phá.
Lưu một workflow ưng ý thành lệnh dùng lại
Chạy xong một lượt ưng ý? Lưu nó lại để dùng lần sau, khỏi phải để Claude viết lại script từ đầu:
- Mở
/workflows, chọn lượt chạy muốn lưu. - Gõ
sđể lưu. - Chọn nơi lưu:
.claude/workflows/(dùng chung, theo project) hoặc~/.claude/workflows/(cá nhân). - Workflow đã lưu trở thành lệnh
/<tên-workflow>, có thể nhận tham số quaargs.
Nếu bạn làm việc theo team, một workflow cũng có thể đóng gói bên trong plugin (thư mục workflows/), gọi ra theo namespace /tên-plugin:tên-workflow - tiện để chia sẻ script điều phối cho cả team dùng, không phải copy-paste lệnh qua lại.
Điểm hay của việc lưu workflow thành file: vì nó chỉ là một file text trong .claude/workflows/, bạn commit nó vào git như bất kỳ file nào khác trong repo. Đồng nghiệp pull code về là có sẵn cùng workflow, không cần Claude "học lại" cách audit hay migrate kiểu bạn đã tinh chỉnh. Đây cũng là chỗ khác biệt rõ nhất so với subagent/skill: một subagent bạn dùng quen không tự động trở thành thứ đồng đội gõ lệnh chạy lại y hệt được - còn một dynamic workflow đã lưu thì có.
Thực tế về chi phí token
Nói thẳng: tài liệu chính thức không đưa ra con số tiền cụ thể nào cho dynamic workflow, và mình không tự bịa ra một con số để bài viết trông "đầy đủ" hơn. Có một câu chuyện lan truyền kiểu "gói Max $200/tháng cháy 20% hạn mức tuần chỉ trong một ngày" - mình đã kiểm tra và nó bắt nguồn từ một bài blog tổng hợp lại một bài đăng mạng xã hội, không phải nguồn chính thức hay kiểm chứng được độc lập, nên mình không nhắc lại con số đó ở đây.
Điều tài liệu có nói rõ: hai giới hạn cứng (1.000 agent / 16 đồng thời) tồn tại đúng để chặn chi phí chạy mất kiểm soát. Mỗi agent con dùng model của phiên chính, trừ khi script hoặc biến CLAUDE_CODE_SUBAGENT_MODEL định tuyến sang model khác.
Lời khuyên thực tế theo tài liệu:
- Thử trên một lát cắt nhỏ trước (một thư mục, không phải cả repo) trước khi chạy full.
- Theo dõi tổng token từng agent trực tiếp trong
/workflowskhi lượt chạy đang diễn ra. - Hạ size guideline xuống
smallnếu muốn ép số agent thấp hơn mặc định.
Lý do mình không tự suy ra một con số ước lượng: chi phí thật phụ thuộc quá nhiều biến - độ dài mỗi task con, model bạn đang set cho phiên, số agent script quyết định spawn cho từng nhánh - nên bất kỳ con số "trung bình" nào cũng dễ gây hiểu lầm hơn là giúp ích. Cách an toàn hơn nhiều là tự đo trên chính workload của bạn: chạy một lượt nhỏ, đọc số token trong /workflows, rồi ước lượng tuyến tính lên quy mô bạn định chạy thật - thay vì tin vào một con số ai đó nhặt được trên mạng xã hội.
AgentKit có cho bạn tính năng này không? (câu trả lời thật)
Câu hỏi hay gặp nếu bạn đã dùng AgentKit: AgentKit có "workflow" riêng không, và nó có phải cùng thứ với tính năng này không? Trả lời thẳng: không. Dynamic Workflows là một engine gốc của Claude Code - chính là cơ chế viết script JS rẽ nhánh agent mà bài này mô tả. AgentKit không đóng gói engine đó, cũng không có phiên bản tương đương phía ak.
Mình đã kiểm tra trực tiếp docs.agentkit.best/en/beta/reference/cli (08/2026): chữ "workflow" trên trang AgentKit là ngôn ngữ marketing chung cho bộ skill của họ, còn lệnh ak orchestrate là một tính năng khác hẳn - job graph cho CLI ngoài, chỉ chạy trên macOS, không liên quan gì tới dynamic workflow của Claude Code.
Vậy AgentKit thật sự cho bạn gì? Một bộ skill và persona subagent đã soạn sẵn, có bản quyền (gọi qua /ak:cook và các lệnh tương tự) mà bạn có thể trỏ một dynamic workflow (tự viết tay hoặc để Claude viết) vào - dùng như bất kỳ subagent nào khác trong kế hoạch. Nói cách khác: mua AgentKit để có lớp skill/persona dựng sẵn; dùng Dynamic Workflows (miễn phí, gốc Claude Code) để có lớp điều phối quy mô lớn. Hai thứ chồng lên nhau, không cạnh tranh nhau. Đọc thêm ở review AgentKit đầy đủ.
Ví dụ minh họa cho cách hai lớp này ghép vào nhau (không phải kết quả đo thật, chỉ mô tả cách dùng): một dynamic workflow audit bảo mật cho năm microservice có thể giao mỗi service cho một agent chạy skill ak-security của AgentKit, rồi một agent tổng hợp cuối cùng gom kết quả từ cả năm lại. Script điều phối (bước nào chạy song song, bước nào chờ) là của Dynamic Workflows; "hiểu biết" bên trong mỗi agent con về cách rà bảo mật là của skill bạn mua. Bỏ AgentKit ra, workflow vẫn chạy được - chỉ là agent con dùng kiến thức chung của Claude thay vì một skill đã được soạn sẵn cho việc đó.
Muốn có sẵn lớp skill/persona chất lượng để trỏ dynamic workflow vào? AgentKit đóng gói skill và subagent persona dùng được trên cả Claude Code lẫn Codex - bạn khỏi phải tự viết persona cho từng agent con trong workflow. Giá niêm yết Engineer Kit $99, trang thường hiển thị giảm 20% còn khoảng $79.20 tại thời điểm viết.
Có nên bật tính năng này ngay hôm nay?
Verdict ngắn gọn: thử từ khóa ultracode trên một việc thật, có giới hạn rõ trước (audit một thư mục, không phải migrate cả repo), rồi mới cân nhắc bật /effort ultracode cho cả phiên. Hợp với: migration lớn, audit toàn bộ codebase, nghiên cứu cần đối chiếu chéo nhiều nguồn. Nên bỏ qua nếu: việc sửa nhỏ thường ngày, hoặc bạn đang ở gói Pro và nhạy cảm với ngân sách token, chưa có dư địa.
Checklist nhanh trước khi bấm enter: (1) việc có đủ lớn để tách thành nhiều nhánh độc lập không, hay thật ra chỉ là một chuỗi bước tuần tự bạn tự làm nhanh hơn; (2) bạn có đang mở /workflows để theo dõi không, hay định bỏ đi làm việc khác; (3) nếu lượt chạy này thất bại giữa chừng, bạn có chấp nhận được phần token đã tiêu không. Trả lời "có" cho cả ba thì cứ bật; còn nếu câu 1 là "không", một subagent thường vẫn nhanh và rẻ hơn.
Câu hỏi thường gặp (FAQ)
Ultracode trong Claude Code là gì?
Ultracode là từ khóa (và effort setting) kích hoạt dynamic workflow - cơ chế Claude tự viết script JS rẽ một tác vụ ra tối đa 1.000 subagent chạy nền. Gõ "ultracode" vào prompt, hoặc diễn đạt tự nhiên như "dùng workflow cho việc này", đều kích hoạt được.
Một dynamic workflow chạy được tối đa bao nhiêu agent?
Tối đa 1.000 agent cho một lượt chạy, với tối đa 16 agent chạy đồng thời (ít hơn trên máy hoặc container giới hạn CPU). Đây là giới hạn cứng, không phải khuyến nghị.
Cảnh báo Large workflow xuất hiện khi nào?
Khi một lượt chạy vượt 25 agent hoặc 1,5 triệu token dự phóng (con số 25 sẽ đổi theo size guideline bạn tự đặt). Đây chỉ là cảnh báo, không tự dừng lượt chạy.
Dynamic workflow có giống agent teams không?
Không. Agent teams là một agent trưởng giám sát các agent ngang hàng qua task list dùng chung, hợp cho phiên cộng tác dài (tính năng thử nghiệm). Dynamic workflow có kế hoạch nằm trong một script đã viết sẵn, không phải trong context của Claude, và có thể lưu lại chạy y hệt nhiều lần.
Có cần gói trả phí để dùng dynamic workflow không?
Có. Tính năng chạy trên mọi gói trả phí cùng API/Bedrock/Vertex/Microsoft Foundry. Gói Pro phải tự bật thủ công ở dòng "Dynamic workflows" trong /config, không mặc định bật.
AgentKit có bao gồm dynamic workflows của Claude Code không?
Không. Dynamic Workflows là engine gốc, miễn phí của Claude Code. AgentKit là bộ skill/persona subagent trả phí, riêng biệt, mà bạn có thể dùng làm agent con bên trong một dynamic workflow - hai thứ bổ sung nhau, không phải là một.
Kết luận
Dynamic workflows là tính năng cho power-user: giới hạn thật (1.000 agent / 16 đồng thời), cảnh báo mang tính khuyến nghị ở 25 agent / 1,5 triệu token, và nó đi cùng - chứ không thay thế - lớp skill của AgentKit. Thử trên một việc nhỏ trước khi bật cho cả phiên, và luôn theo dõi /workflows để biết mình đang tiêu bao nhiêu.