Bỏ qua để đến nội dung

Điều phối dynamic workflow

Bài viết được dịch tự động từ bài viết gốc, chưa được kiểm tra lại bởi con người. Chỉ những bài viết có dấu tick xanh cạnh tiêu đề là đã được kiểm tra.

Dynamic workflow là một script JavaScript điều phối subagent ở quy mô lớn. Claude viết script cho việc bạn mô tả, và một runtime thực thi nó ở nền trong khi phiên của bạn vẫn phản hồi bình thường.

Dùng workflow khi một việc cần nhiều agent hơn khả năng một hội thoại điều phối nổi, hoặc khi bạn muốn “đóng gói” cách điều phối thành một script đọc và chạy lại được. Ví dụ: quét lỗi toàn bộ codebase, migrate 500 file, một câu hỏi nghiên cứu cần đối chiếu nguồn chéo nhau, hoặc một kế hoạch khó đáng để soạn từ nhiều góc độc lập trước khi chốt.

Subagent, skill, agent team, và workflow đều chạy được việc nhiều bước. Khác biệt nằm ở ai giữ kế hoạch:

SubagentSkillAgent teamWorkflow
Là gìWorker Claude spawnHướng dẫn Claude làm theoLead giám sát các phiên ngang hàngMột script được runtime thực thi
Ai quyết định bước tiếp theoClaude, theo từng lượtClaude, theo promptLead, theo từng lượtScript
Kết quả trung gian ở đâuContext window của ClaudeContext window của ClaudeTask list dùng chungBiến trong script
Cái gì lặp lại đượcĐịnh nghĩa workerHướng dẫnĐịnh nghĩa teamBản thân sự điều phối
Quy môVài task giao mỗi lượtGiống subagentVài “peer” chạy dàiHàng chục–hàng trăm agent mỗi lần chạy

Workflow đưa kế hoạch vào code. Với subagent, skill, agent team - Claude là người điều phối: nó quyết định theo từng lượt cái gì chạy tiếp, mọi kết quả đổ vào context window. Script workflow tự giữ vòng lặp, nhánh rẽ, và kết quả trung gian, nên context của Claude chỉ chứa câu trả lời cuối.

Đưa kế hoạch vào code cũng cho phép workflow áp dụng một khuôn mẫu chất lượng lặp lại được - không chỉ chạy nhiều agent hơn: có thể cho các agent độc lập phản biện phát hiện của nhau trước khi báo cáo, hoặc soạn kế hoạch từ nhiều góc rồi cân nhắc so sánh - cho kết quả đáng tin hơn một lượt chạy đơn.

Cách nhanh nhất để thấy workflow hoạt động: chạy /deep-research, workflow tích hợp sẵn để nghiên cứu một câu hỏi qua nhiều nguồn.

/deep-research What changed in the Node.js permission model between v20 and v22?

Claude Code hỏi có cho phép chạy workflow không - chọn Yes. Chạy trong nền; theo dõi bằng /workflows, chọn lần chạy, Enter để mở view tiến độ (hiện từng phase kèm số agent, tổng token, thời gian). Khi xong, báo cáo đổ về phiên của bạn, trích dẫn nguồn cho mỗi claim, những claim không qua được đối chiếu chéo đã bị lọc bỏ.

CommandViệc nó làm
/deep-research <câu hỏi>Tìm kiếm web theo nhiều góc, fetch và đối chiếu chéo nguồn, vote từng claim, trả báo cáo có trích dẫn

Workflow bạn tự lưu cũng trở thành command theo cách này, xuất hiện trong autocomplete / cạnh các workflow có sẵn.

/workflows liệt kê các lần chạy đang tiến hành và đã xong. Trong view tiến độ:

PhímHành động
/Chọn phase hoặc agent
Enter/Drill vào phase, rồi vào agent để xem prompt, tool call gần đây, kết quả
Esc/Lùi lại một cấp
pTạm dừng / tiếp tục
xDừng agent đang chọn, hoặc dừng cả workflow nếu focus ở run
rKhởi động lại agent đang chạy được chọn
sLưu script của lần chạy này thành command

Có hai cách:

  • Yêu cầu trong prompt: gõ trực tiếp bằng lời của bạn, hoặc bao gồm từ khoá ultracode.
  • Để Claude tự quyết định với ultracode: đặt /effort ultracode, Claude sẽ lên kế hoạch workflow cho mỗi việc đáng kể trong phiên.
ultracode: audit every API endpoint under src/routes/ for missing auth checks

Từ khoá chỉ chọn cách Claude cấu trúc công việc - workflow tạo theo cách này vẫn chạy trong permission mode hiện tại của phiên, tool call của các agent vẫn qua cùng permission check và sandboxing như mọi tool call khác.

Nếu không muốn kích hoạt, nhấn Option+W (macOS) / Alt+W (Windows, Linux) để bỏ highlight, hoặc tắt hẳn trigger từ khoá trong /config.

Ultracode kết hợp effort xhigh với tự động lên kế hoạch workflow - Claude tự quyết khi nào việc đáng workflow thay vì chờ bạn yêu cầu:

/effort ultracode

Ultracode kéo dài trong phiên hiện tại, reset khi bạn mở phiên mới. Quay về /effort high khi làm việc thường ngày - vì mỗi request dùng nhiều token và thời gian hơn.

Trong CLI, prompt hiện các phase đã lên kế hoạch với lựa chọn: Yes, run it, Yes, và không hỏi lại cho workflow này trong project này, View raw script, No. Ctrl+G mở script trong editor.

Permission mode của bạn quyết định có bị hỏi hay không: default/accept-edits hỏi mỗi lần chạy (trừ khi đã chọn không hỏi lại); auto chỉ hỏi lần đầu (bỏ qua hoàn toàn khi ultracode bật); bypass permissions / claude -p / Agent SDK không bao giờ hỏi.

Subagent workflow spawn luôn chạy ở acceptEdits mode, kế thừa tool allowlist của bạn, bất kể permission mode phiên là gì - file edit được auto-approve. Lệnh shell, web fetch, MCP tool ngoài allowlist vẫn có thể prompt bạn giữa chừng.

Chạy /workflows, chọn lần chạy muốn giữ, nhấn s. Tab chuyển giữa hai vị trí lưu:

  • .claude/workflows/ trong project: chia sẻ với mọi người clone repo
  • ~/.claude/workflows/ trong home directory: dùng ở mọi project, chỉ mình bạn thấy

Nhấn Enter để lưu - workflow chạy như /<tên> ở các phiên sau.

Workflow đã lưu nhận input qua args - script đọc như một biến global tên args:

Run /triage-issues on issues 1024, 1025, and 1030

Workflow phù hợp nhất khi việc lớn hơn khả năng một agent giữ trong context, hoặc cùng một bước cần chạy trên nhiều mục. Một số mẫu:

use a workflow to audit every route handler under src/routes/ for missing authentication checks, and adversarially verify each finding before reporting it
use a workflow to run npx tsc --noEmit and keep fixing the reported errors until the type check passes or two rounds in a row make no progress
use a workflow to migrate every component under src/components/ from styled-components to Tailwind, working on each file in its own isolated copy
use a workflow to review every file changed in this PR for correctness issues, then merge the per-file findings into one ranked summary
export const meta = {
name: 'audit-routes',
description: 'Audit every route handler for missing auth checks',
}
const found = await agent('List every .ts file under src/routes/.', {
schema: { type: 'object', required: ['files'], properties: { files: { type: 'array', items: { type: 'string' } } } },
})
const audits = await pipeline(found.files, file =>
agent(`Audit ${file} for missing authentication checks.`, { label: file }),
)
return audits.filter(Boolean)

Nội dung là JavaScript thuần với top-level await. agent() spawn một subagent, pipeline() chạy một cái cho mỗi mục trong danh sách.

Runtime thực thi script trong môi trường cách ly, tách khỏi hội thoại của bạn - kết quả trung gian nằm trong biến script thay vì đổ vào context của Claude. Mỗi lần chạy ghi script ra file dưới thư mục phiên trong ~/.claude/projects/ - bạn có thể mở đọc, diff với lần chạy trước, hoặc sửa tay rồi nhờ Claude chạy lại từ bản đã sửa.

Giới hạnVì sao
Không nhận input người dùng giữa chừngChỉ permission prompt của agent mới tạm dừng được. Muốn xác nhận giữa các giai đoạn, chạy mỗi giai đoạn thành workflow riêng
Không truy cập filesystem/shell trực tiếp từ scriptAgent đọc/ghi/chạy lệnh; script chỉ điều phối
Tối đa 16 agent chạy đồng thờiGiới hạn tài nguyên máy local (ít hơn trên máy CPU yếu)
Tối đa 1.000 agent mỗi lần chạyChống vòng lặp chạy trốn

Nếu dừng một lần chạy, bạn resume được - agent đã xong thường trả kết quả cache, còn lại chạy lại thật. Hai quy tắc quyết định kết quả nào giữ được:

  • Agent đang chạy khi bạn dừng thì không được lưu - chạy lại từ đầu khi resume.
  • Replay theo thứ tự agent bắt đầu chạy. Kết quả cache dừng ở agent đầu tiên chưa xong, mọi agent bắt đầu sau đó chạy lại - kể cả agent đã hoàn thành.

Vì vậy dừng giữa lúc một đợt fan-out nhiều agent tốn kém: nếu 4 agent A, B, C, D khởi động theo thứ tự đó và bạn dừng lúc B đang chạy, A trả từ cache, B/C/D đều chạy lại - dù C, D có thể đã xong trước khi bạn dừng. Một workflow chia việc thành nhiều agent nhỏ giữ được nhiều tiến độ hơn một agent chạy dài.

Một workflow spawn nhiều agent nên một lần chạy có thể tốn token nhiều hơn đáng kể so với làm cùng việc trong hội thoại thường. Để ước lượng chi phí trước khi cam kết việc lớn, chạy thử trên một phần nhỏ trước. View /workflows hiện token usage từng agent theo thời gian thực, bạn có thể dừng bất cứ lúc nào mà thường không mất tiến độ đã xong.

Claude Code cảnh báo khi workflow lên lịch hơn 25 agent hoặc dự phóng vượt 1.5 triệu token, hiện cảnh báo Large workflow trong task panel - đây chỉ là cảnh báo, không tự dừng hay giới hạn lần chạy.

Size guideline gợi ý cho Claude số agent nên nhắm tới khi viết workflow - đây là lời khuyên, không phải giới hạn cứng:

Giá trịSố agent Claude nhắm tới
unrestrictedKhông gợi ý: Claude tự định cỡ theo việc
smallDưới 5 agent
mediumDưới 15 agent
largeDưới 50 agent

Đổi bằng mục Dynamic workflow size trong /config, hoặc /config workflowSizeGuideline=small.

  • Tắt trong /config
  • "disableWorkflows": true trong ~/.claude/settings.json
  • Biến môi trường CLAUDE_CODE_DISABLE_WORKFLOWS=1

Tắt cho cả tổ chức: "disableWorkflows": true trong managed settings, hoặc toggle trên trang admin settings.