Claude Code

Dynamic workflows và ultracode: Claude điều phối hàng trăm subagent bằng script

Tóm tắt

Dynamic workflow để Claude viết script điều phối hàng chục đến hàng trăm subagent cho audit, migration, nghiên cứu, còn context chỉ nhận kết quả cuối. Dùng từ khoá ultracode cho từng việc lớn, chạy thử nhỏ trước vì tốn token.

Nhờ Claude "migrate 300 file từ JavaScript sang TypeScript" trong một hội thoại, sớm muộn context cũng đầy, Claude quên file nào đã xong, và kết quả chắp vá. Giao cho subagent thì Claude vẫn phải điều phối từng lượt, mọi kết quả vẫn đổ về context chính. Dynamic workflows đổi cách làm: Claude viết một script JavaScript điều phối hàng chục đến hàng trăm subagent, runtime chạy nền script đó, còn context của Claude chỉ nhận kết quả cuối cùng.

Khác gì subagent và agent teams?

SubagentAgent teamsWorkflow
Ai quyết bước tiếpClaude, từng lượtAgent trưởng, từng lượtScript
Kết quả trung gian nằm ởContext của ClaudeTask list chungBiến trong script
Quy môVài việc mỗi lượtMột nhóm nhỏ chạy lâuHàng chục đến hàng trăm agent
Chạy lại đượcĐịnh nghĩa workerĐịnh nghĩa teamToàn bộ cách điều phối

Ba cách bắt đầu

  • Workflow có sẵn: /deep-research <câu hỏi> tìm kiếm nhiều hướng, đối chiếu nguồn, bỏ các nhận định không qua được kiểm chứng, trả báo cáo có trích dẫn.
  • Yêu cầu trong prompt: thêm từ khoá ultracode hoặc nói "use a workflow".
  • Để Claude tự quyết: /effort ultracode, Claude lên workflow cho mọi việc đáng kể trong phiên.
ultracode: audit every API endpoint under src/routes/ for missing auth checks,
and adversarially verify each finding before reporting it

Theo dõi tiến độ bằng /workflows: xem từng phase, từng agent, tạm dừng (p), dừng (x), lưu script thành lệnh (s).

Prompt mẫu theo dạng việc

  • Audit hàng loạt: mỗi file một agent, rồi kiểm chứng chéo phát hiện.
  • Sửa đến khi pass: "chạy tsc --noEmit, sửa lỗi cho đến khi qua hoặc hai vòng liền không tiến triển".
  • Migrate song song: mỗi file trong một bản sao cô lập để không đè nhau.
  • Review PR: mỗi file một reviewer, một agent gộp và xếp hạng phát hiện.

Script trông như thế nào?

export const meta = { name: 'audit-routes', description: 'Audit routes for auth' }
const found = await agent('List every .ts file under src/routes/.', { schema: {...} })
const audits = await pipeline(found.files, f => agent(`Audit ${f} for missing auth.`))
return audits.filter(Boolean)

agent() tạo một subagent, pipeline() chạy một agent cho mỗi phần tử, parallel() chạy song song. Lưu vào .claude/workflows/ để cả team gọi bằng /audit-routes.

Giới hạn quan trọng

  • Mặc định tối đa 16 agent chạy đồng thời; tối đa 1.000 agent mỗi lần chạy.
  • Script không đọc/ghi file hay chạy shell trực tiếp; chỉ agent làm việc đó, và vẫn đi qua quyền, sandbox như bình thường.
  • Không nhận input giữa chừng; cần duyệt giữa các giai đoạn thì tách thành nhiều workflow.
  • Dừng giữa chừng thì chạy lại được trong cùng phiên; agent đã xong trả kết quả đã lưu.

Chi phí: điểm cần cẩn trọng nhất

  • Một lần chạy có thể tốn token hơn hẳn làm trong hội thoại. Claude Code cảnh báo Large workflow khi trên 25 agent hoặc dự kiến vượt 1,5 triệu token.
  • Ultracode bật cho cả phiên nghĩa là mỗi yêu cầu có thể thành vài workflow liên tiếp và chạm giới hạn gói nhanh hơn. Tắt bằng /effort ultracode off khi quay lại việc thường.
  • Đặt kích thước gợi ý workflowSizeGuideline (small/medium/large) và chạy thử trên một thư mục trước khi chạy cả repo.

Áp dụng thế nào?

  • Dev: Dùng từ khoá ultracode cho từng việc lớn (audit, migration), không bật ultracode cả phiên.
  • Tech Lead: Lưu các workflow chạy tốt vào .claude/workflows/; review script như review code.
  • PM: Dùng /deep-research cho nghiên cứu đối thủ, kèm yêu cầu trích dẫn nguồn.

Nguồn & tham khảo

  1. Orchestrate subagents at scale with dynamic workflows — Claude Code Docs