Main session spawn một subagent bằng cách gọi Agent tool. Nghe đơn giản, nhưng cách gọi đó có nhiều biến thể, và mỗi biến thể kéo theo hành vi rất khác nhau về blocking, về context isolation, về cost, và về khả năng resume sau này.
Bài 8 đã giới thiệu subagent là gì: một Claude instance riêng biệt, context riêng, tool set riêng, chạy song song hoặc nối tiếp với main session. Bài này đi vào phần tiếp theo: 4 spawning pattern và khi nào dùng cái nào.
Subagent là gì, nhắc nhanh
Subagent không phải là “luồng xử lý song song trong cùng session”. Nó là một Claude instance độc lập với:
- Context window riêng (không chia sẻ với main session)
- Tool set riêng (bạn chỉ định khi spawn)
- Working directory riêng (hoặc cùng working dir với main, tùy config)
- Không có “bộ nhớ ngắn hạn” về những gì main session đang làm
Khi main session gọi Agent, nó chuyển prompt, tool list, và context cần thiết. Subagent nhận prompt đó, làm việc, trả kết quả về. Main session nhận kết quả như nhận kết quả của bất kỳ tool call nào.
Pattern 1: Parallel foreground
Nhiều Agent call trong cùng một response block. Main session block (không xử lý gì thêm) cho đến khi tất cả agent trả kết quả về.
main session
|
+-- Agent A (src/api/) ----+
| |
+-- Agent B (src/ui/) -----+ <- chạy song song
| |
+-- Agent C (docs/) -----+
| |
+<--------------------------+ main session tiếp tục
Dùng khi nào:
- File scope của các task disjoint (A:
src/api/, B:src/ui/, C:docs/). Không overlap. - Task ngắn, turnaround nhanh, main session không cần làm gì trong lúc chờ.
- Không cần output của A để bắt đầu B.
Ví dụ thực tế: viết tests cho 3 module độc lập, hoặc dịch 4 file documentation cùng lúc, hoặc refactor 3 endpoint không liên quan.
Giới hạn: main session bị block hoàn toàn. Nếu bạn cần tiếp tục làm gì đó trong lúc agent chạy, phải dùng background pattern.
Pattern 2: Sequential
Spawn 1 agent, chờ nó xong, dùng output của nó để spawn agent 2. Cứ thế tiếp tục.
main session
|
+-- Agent A (bước 1) --> kết quả A
|
+-- Agent B (bước 2, nhận kết quả A) --> kết quả B
|
+-- Agent C (bước 3, nhận kết quả B) --> kết quả C
|
tiếp tục
Dùng khi nào:
- B phụ thuộc vào output của A. Ví dụ: A viết migration schema, B viết API dựa trên schema đó, C viết UI dựa trên API.
- Worktree của B phải base trên HEAD mới sau khi A đã merge vào branch chính (xem bài 17 về worktree isolation).
- Cần review hoặc approve từng bước trước khi tiếp tục.
Ví dụ thực tế: pipeline “generate type definitions” -> “implement service layer” -> “implement UI components”. Hoặc: “viết API spec” -> “viết mock server từ spec” -> “viết integration test từ spec”.
Lưu ý: sequential bắt buộc phải foreground vì bạn cần output. Không thể làm sequential với background pattern.
Pattern 3: Background
Spawn agent với run_in_background: true. Main session không block, tiếp tục làm việc. Bạn nhận notification khi agent xong.
main session
|
+-- Agent A (background) ~~~> [chạy ngầm]
|
main session tiếp tục làm việc khác
|
[notification khi A xong]
|
đọc kết quả của A
Dùng khi nào:
- Task dài (build, large refactor, deploy, test suite dài).
- Main session phải stay live: đang tail log production, đang monitor container, đang debug một vấn đề cần theo dõi liên tục.
- Task độc lập, không cần output ngay.
Ví dụ thực tế: spawn agent chạy test suite đầy đủ trong lúc bạn tiếp tục review code. Hoặc spawn agent làm large refactor trong khi bạn đang monitor deployment. Hoặc spawn 3 agent background để làm 3 hotfix độc lập trong lúc debug vấn đề main session đang theo dõi.
Rủi ro cần biết: main session blind về những gì agent đang sửa trong working directory. Nếu không dùng worktree isolation, agent và main session có thể cùng edit các file chồng lên nhau. Giải pháp là dùng worktree (xem bài 17).
Kết hợp với parallel: bạn có thể spawn nhiều agent background cùng lúc. Parallel + background là combo phổ biến cho các task lớn, độc lập, không cần kết quả ngay.
Pattern 4: Teammate
Dùng TeamCreate để tạo agent có tên, sau đó giao tiếp qua SendMessage. Khác 3 pattern trên ở chỗ: agent này persistent và addressable xuyên nhiều turn.
main session
|
TeamCreate "alice" (writer)
TeamCreate "bob" (reviewer)
|
SendMessage to "alice": "viết module auth"
|
[alice làm việc, trả kết quả]
|
SendMessage to "bob": "review code của alice"
|
[bob review]
|
SendMessage to "alice": "fix theo comment của bob"
|
...
Dùng khi nào:
- Cần coordination giữa 2 agent: ví dụ alice viết, bob review, rồi alice fix theo feedback của bob.
- Cần resume một agent sau nhiều turn trong cùng session. Một lần spawn thông thường (pattern 1-3) không thể resume, nhưng teammate thì có thể.
- Workflow dài cần nhiều vòng lặp giao tiếp qua lại.
Yêu cầu: cần CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 trong environment (set trong ~/.claude/settings.json).
Forward-link: bài 18 đi sâu vào team mode: cách thiết lập, cách hai agent phối hợp, và các pattern coordination phức tạp hơn.
Bảng quyết định
| Tình huống | Pattern phù hợp |
|---|---|
| 3 task độc lập, cần kết quả trước khi tiếp tục | Parallel foreground |
| 5 task độc lập, main session cần tiếp tục làm việc | Parallel background |
| B phụ thuộc vào output của A | Sequential |
| Task dài, main session đang debug production | Single background |
| Agent A viết, Agent B review, quay lại | Teammate |
| Cần resume lại agent sau vài turn | Teammate |
Tính kết hợp
Các pattern không loại trừ nhau:
- Parallel + foreground: nhiều agent, main block chờ tất cả.
- Parallel + background: nhiều agent, main không block, nhận notification từng cái khi xong.
- Sequential bắt buộc foreground: cần output của bước trước để làm bước sau, nên không thể background.
- Teammate có thể kết hợp background: spawn teammate background, tiếp tục làm việc, sau đó SendMessage khi cần.
Bảng tóm tắt:
Foreground Background
(block) (non-block)
Một agent OK OK
Nhiều agent Parallel OK Parallel OK
Sequential OK KHÔNG (cần output)
Teammate OK OK
Token cost
Mỗi agent có context window riêng. Spawn 5 agent song song bằng 5x token cost của một session tương đương. Context riêng cũng có nghĩa là agent không “biết” những gì agent khác đang làm, trừ khi bạn chủ động chuyển thông tin qua prompt.
Implication thực tế:
- Không spawn agent cho task nhỏ (fix typo, đổi tên biến). Làm thẳng trong main session rẻ hơn.
- Context size mỗi agent ảnh hưởng cost nhiều. Brief agent ngắn gọn, focused là tốt hơn brief dài và vague.
- Background agent vẫn tốn token dù bạn không nhìn thấy nó chạy. Nhận notification và đọc kết quả khi xong không có nghĩa là “miễn phí”.
File scope strategy và anti-pattern
Strategy đúng: slice task theo file hoặc folder scope.
Agent A: src/api/auth/ (auth endpoints)
Agent B: src/api/orders/ (order endpoints)
Agent C: src/ui/checkout/ (checkout UI)
Ba agent trên không overlap. Merge kết quả về dễ, không conflict.
Anti-pattern: spawn nhiều agent vào cùng folder.
Agent A: sửa src/api/ (toàn bộ)
Agent B: refactor src/api/ (toàn bộ)
Agent C: thêm tests cho src/api/ (toàn bộ)
Race condition. Agent B và C không biết Agent A đang sửa gì. Last writer wins. Kết quả là code bị overwrite, hỏng, hoặc conflict không thể merge. Không dùng worktree? Tệ hơn nữa vì tất cả edit cùng working tree.
Rule thực tế: nếu hai agent cần touch cùng một file, chúng phải chạy sequential, không phải parallel.
Khi nào dùng worktree
Parallel background với file scope disjoint là ổn ngay cả khi không có worktree isolation. Nhưng một số tình huống cần worktree hard-isolation:
- Main session đang mid-debug (tail log, edit
.env, monitor container). Không thể switch branch. - Task target branch khác với branch main session đang ở.
- Cần PR/review gate trước khi merge.
Bài 17 đi sâu vào worktree isolation, cách nó kết hợp với background pattern, và tại sao nó là giải pháp cho “main session đang debug production” scenario.
Cross-agent communication
Pattern 1-3 giao tiếp một chiều: main gửi prompt cho agent, agent trả kết quả. Agent không nói chuyện được với nhau trực tiếp.
Với teammate mode (pattern 4), communication có thể qua main session làm trung gian: main nhận kết quả từ alice, chuyển cho bob qua SendMessage. Không phải alice và bob trực tiếp chat nhau, mà main session orchestrate.
Bài 19 đào sâu hơn về multi-agent coordination: cách thiết kế handoff, cách tránh context stale, và khi nào cần shared state ngoài conversation.
Tóm tắt và bài tiếp theo
- 4 pattern spawning: parallel foreground (block, nhiều agent cùng lúc), sequential (cần output từng bước), background (non-block, nhận notification), teammate (persistent, addressable, resumable).
- Parallel + background là combo mạnh nhất cho task lớn độc lập. Sequential phải foreground.
- Mỗi agent = context riêng = token riêng. Spawn không vô tư.
- Slice theo file scope để tránh race condition. Không để nhiều agent parallel edit cùng folder.
Bài 17 tiếp tục với worktree isolation: cách hard-isolate working tree cho từng agent, tại sao đây là giải pháp đúng khi main session đang mid-debug, và cơ chế hook WorktreeCreate hoạt động ra sao.
Liên quan:
- Bài 26 (Một vài session không phải là không xuất hiện, mà là xuất hiện trễ) giải thích kiến trúc daemon đứng sau mọi spawn này: roster.json, spare worker pool, và vì sao session foreground có độ trễ visibility trong
claude agents. - Skill
nf-agentsđóng gói 4 pattern này thành 5 named mode (standby, tasks, solo, status, teardown) kèm pre-flight check, để bạn không phải nhớ flag combo mỗi lần spawn team.
Bài thuộc series Claude Code từ zero. Series plan tại bài giới thiệu.