script agents
Claude Code Ghi chú Kỹ thuật · Vol. 03
Điều phối subagent ở quy mô lớn

Dynamic
Workflows

Điều phối hàng chục đến hàng trăm subagent từ một script Claude tự viết.

trong Claude Code · 21.07.2026
01 / 19
// 01 — vì saothe case

Khi một tác vụ cần nhiều agent hơn một hội thoại điều phối nổi.

Workflow là một script JavaScript điều phối subagent ở quy mô lớn. Claude viết script cho tác vụ bạn mô tả, còn runtime chạy nó ở chế độ nền — đưa kế hoạch vào code để context của Claude chỉ giữ lại câu trả lời cuối cùng.

← → để chuyển slide 02 / 19
// 02 — cơ chếhow it runs

Workflow chạy thế nào

Bạn
Mô tả tác vụ bằng lời hoặc kèm từ khóa ultracode.
Claude
Viết một script điều phối — bạn duyệt trước khi chạy.
Runtime
Chạy nền, tung ra nhiều subagent song song.
Kết quả
Một báo cáo về session; kết quả trung gian ở biến script.

Kết quả trung gian nằm trong biến của script thay vì đổ vào context — và runtime theo dõi từng agent nên có thể tiếp tục trong cùng session.

← → để chuyển slide 03 / 19
// 03 — so sánhwho holds the plan

Ai giữ kế hoạch?

Subagents
Skills
Agent teams
Workflows
Bản chất
Worker Claude tạo ra
Chỉ dẫn Claude làm theo
Lead giám sát các phiên
Script runtime chạy
Ai quyết bước kế
Claude, từng lượt
Claude, theo prompt
Lead, từng lượt
Chính script
Kết quả trung gian
Context của Claude
Context của Claude
Task list chung
Biến của script
Quy mô
Vài tác vụ/lượt
Như subagent
Ít phiên chạy dài
Hàng chục–hàng trăm
Workflow đưa kế hoạch — vòng lặp, rẽ nhánh, kết quả — vào code 04 / 19
// 04 — mẫu fan-outone agent per item

Tung ra một agent cho mỗi phần việc

agent · file_1.ts agent · file_2.ts agent · file_3.ts agent · … agent · file_n.ts pipeline()

Audit từng route · migrate từng component · đọc song song nhiều nguồn — rồi thu về & kiểm chứng.

← → để chuyển slide 05 / 19
// 05 — khái niệm cốt lõithe barrier

pipeline() so với parallel()

pipeline()
Mỗi item chạy hết cả chuỗi độc lập — không có rào chắn.
bước 1bước 2bước 3
item 1
·
item 2
·
item 3
·
·
Item A có thể ở bước 3 khi B mới ở bước 1.
parallel()
Rào chắn — chờ tất cả xong mới sang bước sau.
bước 1bước 2bước 3
item 1
·
item 2
·
item 3
·
BARRIER
Chỉ dùng khi bước sau cần toàn bộ kết quả trước.
Mặc định hãy dùng pipeline() — nhanh hơn về wall-clock 06 / 19
// 06 — nguyên hàmscript primitives

Bộ công cụ trong script

agent(prompt, opts)
Tung một subagent. Kèm schema để nhận về dữ liệu có cấu trúc.
pipeline(items, …stages)
Mỗi item chạy qua tất cả bước độc lập — không rào chắn. Mặc định nên dùng.
parallel(thunks)
Chạy đồng thời rồi chờ tất cả — một rào chắn đồng bộ.
phase(title)
Mở một giai đoạn; các agent sau được gom nhóm trong bảng tiến độ.
log(message)
Gửi dòng tiến độ hiển thị cho người dùng.
budget · workflow()
Theo dõi token đã dùng; hoặc chạy một workflow khác như bước con.
← → để chuyển slide 07 / 19
// 07 — ví dụ.claude/workflows/

Script thực tế trông thế nào

export const meta = { name: 'audit-routes', description: 'Rà auth mọi route' } const found = await agent('Liệt kê mọi file .ts dưới src/routes/.', { schema }) const audits = await pipeline(found.files, file => agent(`Rà ${file} xem thiếu kiểm tra auth.`, { label: file }), ) return audits.filter(Boolean) // JS thuần, top-level await
agent() tung một subagent · pipeline() chạy một agent cho mỗi item 08 / 19
// 08 — mẫu chất lượngtrustworthy results

Không chỉ chạy nhiều hơn — mà đáng tin hơn

Adversarial verify

Nhiều agent độc lập cùng phản biện một phát hiện; loại nếu đa số bác bỏ.
tìm ? ? ?

Judge panel

Nhiều lời giải từ các góc khác nhau, ban giám khảo chấm, tổng hợp từ bản thắng.
A B C win

Loop-until-dry

Tìm theo từng vòng, dừng khi vài vòng liên tiếp không ra gì mới.
round n
← → để chuyển slide 09 / 19
// 09 — chạy workflowhave Claude write one

Ba cách khởi động

01 · lời tự nhiên
"use a workflow…"
Nói thẳng trong prompt; Claude viết script cho tác vụ đó.
02 · từ khóa
ultracode:
Thêm ultracode vào prompt để chạy một tác vụ dưới dạng workflow.
03 · dựng sẵn
/deep-research
Workflow tích hợp: fan-out tìm kiếm, đối chiếu nguồn, trả báo cáo có trích dẫn.

/effort ultracode — để Claude tự lên workflow cho mọi tác vụ đáng kể trong cả session. Lưu lại bằng phím s trong /workflows để tái dùng như một lệnh /<name>.

← → để chuyển slide 10 / 19
// demohands-on · audit-routes

DEMO — Tạo
workflow đầu tiên

Tác vụ: rà mọi route handler dưới src/routes/ xem chỗ nào thiếu kiểm tra auth — và phản biện từng phát hiện trước khi báo.
← → để chuyển slide 11 / 19
// demo · bước 1ra lệnh

Mô tả tác vụ cho Claude

~/my-app · claude code
> use a workflow to audit every route handler under src/routes/ for missing auth checks # hoặc dùng từ khóa để chạy một tác vụ dưới dạng workflow: > ultracode: audit src/routes/ for missing auth checks

Nói thẳng bằng lời ("use a workflow…") hoặc thêm từ khóa ultracode. Claude tô sáng từ khóa và viết một script điều phối thay vì làm từng lượt.

← → để chuyển slide 12 / 19
// demo · bước 2approve the plan

Duyệt kế hoạch trước khi chạy

Chạy workflow "audit-routes"?
1
Scan — liệt kê & đọc từng route handler
2
Verify — nhiều agent phản biện từng phát hiện
3
Synthesize — gộp thành một báo cáo xếp hạng
⚠ Workflow có thể tung nhiều agent & dùng nhiều token
Yes, run it View raw script No
Ctrl+G mở script trong editor · Tab để chỉnh prompt trước khi chạy 13 / 19
// demo · xem scriptView raw script

Script Claude đã viết

.claude/workflows/audit-routes.mjs
export const meta = { name: 'audit-routes', phases: [{ title: 'Scan' }, { title: 'Verify' }], } phase('Scan') const { files } = await agent('Liệt kê route handler dưới src/routes/.', { schema: FILES }) const found = await pipeline(files, f => agent(`Đọc ${f} — tìm endpoint thiếu kiểm tra auth.`, { schema: FINDING }), ) phase('Verify') // phản biện đối kháng const checked = await parallel(found.flat().map(x => () => agent(`Phản biện: "${x.claim}". Mặc định SAI nếu không chắc.`, { schema: VERDICT }) .then(v => ({ ...x, real: v.real })), )) return checked.filter(v => v.real) // chỉ giữ phát hiện đã xác minh

Fan-out một agent mỗi file bằng pipeline(), rồi phản biện đối kháng từng phát hiện bằng parallel() — chỉ giữ cái đã xác minh.

Ctrl+G mở trong editor · sửa rồi nhờ Claude chạy lại từ bản đã sửa 14 / 19
// demo · bước 3/workflows

Theo dõi & tiếp tục

Scan
8 agents · 240k tok
✓ xong
Verify
12 agents · 410k tok
▶ đang chạy
Synthesize
1 agent · 30k tok
· chờ

Mỗi giai đoạn hiện số agent, tổng token và thời gian. Khi dừng, agent đã xong trả kết quả từ cache, phần còn lại chạy tiếp — nên chia nhỏ nhiều agent giữ được nhiều tiến độ hơn.

Tiếp tục hoạt động trong cùng một session Claude Code 15 / 19
// demo · bước 4report & save

Đọc báo cáo & lưu thành lệnh

audit-routes · kết quả
✓ Hoàn tất · 21 agents · 3 phát hiện đã xác minh src/routes/admin.ts:42 thiếu requireAuth() src/routes/billing.ts:88 endpoint để public src/routes/users.ts:15 bỏ qua middleware auth
Nhấn s trong /workflows
──▶
/audit-routes
lệnh tái dùng ở mọi session
Báo cáo đã lọc bỏ các phát hiện không qua kiểm chứng chéo 16 / 19
// 11 — giới hạn & chi phíbounds

Ranh giới cần nhớ

16
agent chạy đồng thời tối đa (ít hơn nếu CPU yếu).
1000
tổng agent mỗi run — chặn vòng lặp mất kiểm soát.
>25
agent → cảnh báo "Large workflow" trong bảng tác vụ.
1.5M
token dự phóng → cũng bật cảnh báo (chỉ mang tính nhắc).

Chạy thử trên một lát nhỏ trước để ước lượng chi phí. Đặt Dynamic workflow size trong /config để giữ quy mô nhỏ theo mặc định.

← → để chuyển slide 17 / 19
// 12 — khi nào dùnggood fits

Hợp nhất khi việc lớn hơn một agent hoặc lặp trên nhiều item

Rà nhiều file cùng một lỗi
Một agent mỗi file, rồi phản biện từng phát hiện trước khi báo.
Sửa đến khi check pass
Chạy checker, sửa cái lỗi, lặp đến khi đạt hoặc ngừng tiến triển.
Migrate hàng loạt song song
Mỗi file trong một bản sao cô lập để không xung đột chỉnh sửa.
Nghiên cứu đối chiếu chéo
Fan-out nhiều nguồn rồi tổng hợp; hoặc phác kế hoạch từ nhiều góc.
← → để chuyển slide 18 / 19
Điều đọng lại

Đưa kế hoạch vào code.
Để runtime lo phần còn lại.

Nó là gìScript điều phối
hàng chục–hàng trăm
subagent, chạy nền.
Cách chạy"use a workflow"
ultracode: …
/deep-research
Nguồncode.claude.com
/docs/en/workflows
Claude Code · Ghi chú Kỹ thuật 19 / 19