# Cách phân công một nhiệm vụ lớn trong Claude Code bằng subagent lồng nhau

> Anthropic cho phép subagent của Claude Code tạo subagent của riêng chúng sâu tối đa 5 cấp trong phiên bản v2.1.172. Hướng dẫn phân công một nhiệm vụ lớn.

Source: https://ailoot.ai/blog/vi/claude-code-nested-subagents/
Canonical: https://ailoot.ai/blog/vi/claude-code-nested-subagents/
Language: vi
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-232
Revision: sha256-fc72ad3892bf0146d17fa398c342cfecca8c7928a97b245f035b8e54baf37d2c


<div class="aside" data-semantic="editorial-reference" role="note" aria-label="Tài liệu Ailoot">

[Tài liệu Ailoot](https://ailoot.ai/docs/) — tài liệu tham khảo về cách sử dụng dịch vụ.

</div>

## Claude Code v2.1.172 đã thay đổi điều gì?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Anthropic phát hành Claude Code v2.1.172 và xóa bỏ một quy tắc tồn tại suốt hai năm chỉ bằng một dòng trong nhật ký thay đổi. Giờ đây, subagent có thể tạo subagent của riêng mình, sâu tối đa 5 cấp. Tính năng này không nhằm tăng tốc hay dùng thêm CPU. Ý tưởng chính là giữ những công việc chuẩn bị ồn ào, nhiều dữ liệu khỏi làm lộn xộn ngữ cảnh chính của bạn.

</div>

Nếu bạn từng đọc về các tác nhân AI trong Claude Code vài tháng qua, hẳn bạn đã gặp cùng một câu quen thuộc. Câu này xuất hiện trong tài liệu chính thức, trong hướng dẫn của tôi [về subagent](https://ailoot.ai/blog/vi/claude-code-subagents/), và trong mọi bài phân tích của đối thủ. Câu đó là: “một subagent không thể tạo một subagent khác.” Tính đến ngày 11 tháng 6 năm 2026, dòng này vẫn còn ở ba vị trí khác nhau trên `code.claude.com/docs/en/sub-agents`. Anthropic đơn giản là chưa cập nhật nó.

Ngày 10 tháng 6 lúc 20:44 UTC, Claude Code v2.1.172 xuất hiện trên GitHub Releases. Mục chính trong nhật ký thay đổi chỉ có một dòng:

<figure>
<blockquote>
Giờ đây, subagent có thể tạo subagent của riêng mình, sâu tối đa 5 cấp.
</blockquote>
<figcaption>— Nhật ký thay đổi Claude Code, https://github.com/anthropics/claude-code/releases/tag/v2.1.172</figcaption>
</figure>

Bản phát hành này cũng sửa một lỗi chỉ có thể xảy ra khi lồng nhau: một subagent chạy nền vẫn được tô sáng là đang hoạt động trong bảng agents sau khi subagent lồng bên trong mà nó khởi chạy đã bị dừng.

Đây là trường hợp hiếm hoi mà tài liệu chính thức vẫn mâu thuẫn với bản dựng đã phát hành. Tiếp theo, tôi sẽ giải thích lồng nhau khác subagent song song thế nào, “độ sâu 5” có nghĩa gì và ba tình huống nào thực sự hữu ích hiện nay.

## Subagent lồng nhau khác subagent song song và tuần tự thế nào?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Nếu bạn thấy bối rối, bạn không phải người duy nhất. Song song, nối chuỗi và lồng nhau là ba cấu trúc độc lập với nhau. Song song là về tốc độ, nối chuỗi là về thiết lập thứ tự thực thi, còn lồng nhau là về một điều hoàn toàn khác: nó giấu công việc ồn ào khỏi cửa sổ chính. Nhầm lẫn chúng với nhau, bạn sẽ đốt token trong vài giờ rồi không tìm được lỗi nằm ở đâu.

</div>

Tôi đã mất khá lâu tự thử cả ba cách, và đây là cách tôi hình dung: việc phân công có ba chiều—chiều rộng, chiều dài và chiều sâu. Mỗi chiều giải quyết một vấn đề khác nhau.

**Chiều rộng—subagent song song.** Cuộc trò chuyện chính khởi chạy N subagent độc lập ở cùng một cấp. Mỗi subagent nhận một nhiệm vụ hẹp, làm việc trong cửa sổ biệt lập riêng và chỉ trả về kết quả. Chiều rộng giúp tăng tốc: 5 subagent làm song song hoàn thành trong thời gian một subagent cần để làm cùng công việc tuần tự. Đây là mô hình tôi trình bày trong hướng dẫn [về subagent song song dùng worktree](https://ailoot.ai/blog/vi/claude-code-parallel-worktree-agents/).

**Chiều dài—chuỗi subagent.** A làm việc rồi chuyển kết quả cho B, B làm việc rồi chuyển cho C. Mỗi subagent thấy đầu vào từ subagent trước. Chiều dài thiết lập thứ tự: B không thể bắt đầu cho tới khi nhận dữ liệu từ A. Ví dụ điển hình: trước tiên một subagent nghiên cứu thu thập nguồn, sau đó một subagent biên tập viết bài dựa trên các nguồn đó, rồi một subagent kiểm chứng sự thật kiểm tra bài viết. Đây là chuỗi phẳng; cuộc trò chuyện chính nắm toàn bộ mạch nội dung.

**Chiều sâu—subagent lồng nhau.** A khởi chạy B, B khởi chạy C, C khởi chạy D. Mỗi tác nhân con làm việc bên trong tác nhân cha, trong cửa sổ biệt lập riêng, và chỉ trả về **kết quả** cho tác nhân cha. Cuộc trò chuyện chính không thấy những gì diễn ra ở các tác nhân con, cháu và chắt. Đây là điều mới trong v2.1.172.

Sự nhầm lẫn chính là mọi người nghĩ độ sâu 5 có nghĩa “bạn có thể khởi chạy 5 subagent cùng lúc”. Không phải vậy. Độ sâu là một cấp dọc trong cây, không phải số tác nhân con hoạt động đồng thời. Ở mỗi cấp có thể có một hoặc một trăm subagent. Độ sâu 5 có nghĩa chuỗi phân công có thể đi xuống 5 bước: cuộc trò chuyện chính → cháu-1 → cháu-2 → cháu-3 → cháu-4 → cháu-5. Và có thể phân nhánh ở mọi cấp.





Version 2.1.172 đã gỡ bỏ quy tắc ngăn subagent tạo một subagent khác.

Nếu bạn cần tốc độ, bạn cần chiều rộng. Nếu bạn có thứ tự thực thi nghiêm ngặt, bạn cần chiều dài. Chiều sâu chỉ hữu ích trong đúng một trường hợp: khi một trong các nhiệm vụ của bạn chứa **nhiệm vụ phụ ồn ào** (15 yêu cầu web, rà soát log, đọc cả tá tệp) và bạn không muốn lượng thông tin đó tràn vào cửa sổ chính.

## “Độ sâu 5 cấp” có ý nghĩa gì trong thực tế?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

5 cấp là khoảng cách dọc tối đa từ cuộc trò chuyện chính đến tác nhân chắt xa nhất. Đây là giới hạn phía máy chủ; bạn không thể tăng, giảm hay tắt nó bằng flag. Và các nguồn chính thức vẫn chưa nói liệu cuộc trò chuyện chính có được tính vào 5 cấp đó hay không.

</div>

Đây là điểm cần nói thật. Tôi đã dành nửa ngày đọc tài liệu và phân tích cộng đồng để phát hiện rằng Anthropic chưa đưa ra định nghĩa chính xác. Đây là điều bạn cần biết.

**Đây là giới hạn, không phải cài đặt.**



Giới hạn được tích hợp ở phía máy chủ. Việc đảo ngược kỹ thuật client v2.1.172 không tìm thấy hằng số `MAX_DEPTH`. Điều đó có nghĩa bước kiểm tra diễn ra ở đâu đó trong Anthropic API, chứ không phải trên máy của bạn. Bạn không thể đặt `--max-depth 7` để làm cây sâu hơn. Bạn cũng không thể đặt `--max-depth 2` để thiết lập một giới hạn thấp hơn, an toàn hơn. Quyền kiểm soát duy nhất của bạn là allowlist `Agent(agent_type)` trong frontmatter—nhưng nó giới hạn **loại** tác nhân con, không phải độ sâu.

**Anthropic chưa định nghĩa chính xác “5”.** Đây là điểm quan trọng thứ hai:

**Anthropic chưa xác định chính xác “5” nghĩa là gì.** Các nguồn chính thức không nói depth=5 là năm cấp bên dưới gốc hay tổng cộng năm agent, tính cả gốc.

Hiện tại, các tích hợp bên thứ ba diễn giải khác nhau. ADR-147 trong dự án `ruvnet/ruflo` giả định “5 cấp con bên dưới gốc = 6 agent trong chuỗi”. Tôi dùng cùng quy ước trong các thử nghiệm: cuộc trò chuyện chính là cấp 0, các tác nhân con trực tiếp là cấp 1, rồi tiếp tục đến cấp 5. Nhưng quy ước này không được ghi trong tài liệu công khai.

**Giới hạn đã được bật sẵn, không cần flag.** Bạn không cần kích hoạt gì cả. Sau khi cập nhật Claude Code lên v2.1.172, bạn có thể thêm `Agent` vào `tools` của một tác nhân con, và nó sẽ khởi chạy một subagent khác. Điểm mấu chốt là tác nhân cha phải cho phép (`tools: Agent(...)`).

## Hiện nay bạn phân công theo cách nào: chiều rộng, chiều dài hay chiều sâu?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Trong các dự án vibe-coding thực tế, tôi gần như luôn thấy chiều rộng và đôi khi thấy chiều dài. Chiều sâu là thứ mọi người làm thủ công: mở cửa sổ mới, sao chép prompt, rồi quay lại với kết quả. Trước ngày 9 tháng 6, tính năng này chưa được tích hợp sẵn. Đó là lý do hầu hết mọi người thậm chí không nhận ra mình đang thiếu nó.

</div>

Hãy xem lại 5 prompt gần nhất của bạn. Bạn đã làm việc này thường xuyên đến đâu: bắt đầu một nhiệm vụ, Claude bắt đầu grep tệp, thực hiện 10 yêu cầu web, đổ cả bức tường log vào ngữ cảnh—rồi 20 phút sau bạn nhận ra cửa sổ đã đầy. Câu trả lời cuối cùng đã phải chạy với ngân sách token ít ỏi vì 70 phần trăm ngữ cảnh bị các dữ liệu trung gian chiếm mất.

Đây là tình huống bạn cần **chiều sâu**. Không phải song song, không phải chuỗi—mà là chiều sâu. Cuộc trò chuyện chính nên giao “nghiên cứu” cho một subagent, rồi subagent đó khởi chạy các tác nhân con của riêng nó từ bên trong để thực hiện những tìm kiếm web, đọc tệp và grep cụ thể. Các tác nhân con chỉ trả về những nhận định đã chắt lọc. Một tác nhân chắt nói với tác nhân cha: “đã tìm thấy, đã xác nhận” hoặc “không tìm thấy, lý do X”. Tác nhân cha tập hợp thành một bản tóm tắt duy nhất rồi gửi lại cho bạn. Cuộc trò chuyện chính vẫn gọn gàng.

Trước ngày 9 tháng 6, tôi mô phỏng cách này bằng tay. Tôi mở một phiên Claude Code thứ hai, sao chép prompt “nghiên cứu việc này”, chạy nó, rồi tự chuyển kết quả về cửa sổ chính. Tôi đã mô tả chi tiết cách thiết lập này trong hướng dẫn về cách phân công công việc cho nhiều AI agent. Với v2.1.172, bạn có thể mô tả trực tiếp điều đó trong system prompt của orchestrator—Claude sẽ tự xây dựng cây.



## Có 3 tình huống nào mà subagent lồng nhau thực sự hữu ích?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Không phải nhiệm vụ nào cũng cần đến nó. Chiều sâu hợp lý khi một lần phân công có chứa nhiệm vụ phụ ồn ào mà bạn không muốn đưa vào cửa sổ chính. Tôi sẽ trình bày ba tình huống điển hình thường gặp ở những người làm vibe-coding: nghiên cứu sâu kèm kiểm chứng sự thật, phân tích một repository lớn và kiểm tra dependency end-to-end khi thay đổi schema hoặc contract.

</div>

### Tình huống 1. Nghiên cứu sâu kèm kiểm chứng sự thật

Giả sử bạn đang thu thập tài liệu cho một bài viết hoặc đề xuất bán hàng. Trước tiên, bạn cần rút ra 5–10 nhận định từ các nguồn công khai, sau đó xác minh từng nhận định—tìm nguồn gốc, bảo đảm trích dẫn chính xác và tính các số liệu thực tế.

Trước v2.1.172, bạn có hai lựa chọn. Hoặc để một subagent làm tất cả, nó sẽ vật lộn với 30 yêu cầu web và nhồi mọi thứ vào ngữ cảnh của mình. Hoặc tự chia nhỏ: một prompt để trích xuất nhận định, rồi lặp qua từng nhận định và khởi chạy một subagent riêng cho mỗi nhận định. Cuộc trò chuyện chính sẽ đầy những bức tường danh sách trung gian.

Trong công thức dưới, chat chính giao `research-orchestrator` (cấp 1). Orchestrator tự trích nhận định rồi gửi từng mục tới `fact-verifier` (cấp 2); mỗi verifier giao tìm kiếm hẹp cho `web-deep-search` (cấp 3). Cuộc trò chuyện chính chỉ nhận được một mảng các nhận định đã xác minh cùng nguồn. Mọi thứ khác ở trong cửa sổ con và không bao giờ đi vào ngữ cảnh của bạn.

### Tình huống 2. Phân tích một repository lớn

Bạn được giao một dự án có 200 tệp. Bạn cần hiểu kiến trúc, tìm các mô-đun chính và đánh giá nợ kỹ thuật. Hãy chạy `Glob` cùng cả tá lệnh `Read` bằng tay là cửa sổ của bạn sẽ đầy trong 10 phút.

Chiều sâu giải quyết việc này như sau: cuộc trò chuyện chính khởi chạy một subagent “architect”. Architect tạo ba tác nhân con ở bên trong—một tác nhân kiểm tra cấu trúc thư mục (chạy `Glob` và tóm tắt), tác nhân thứ hai đọc 5 tệp cấu hình quan trọng, còn tác nhân thứ ba grep các mẫu chính. Mỗi tác nhân trả về một bản tóm tắt ngắn gọn cho architect. Architect tập hợp bức tranh tổng thể và đưa cho cuộc trò chuyện chính báo cáo cuối cùng dài nửa màn hình. Bạn có được sơ đồ dự án mà không làm ngập ngữ cảnh bằng cả bức tường đầu ra `cat` từ mọi tệp.

### Tình huống 3. Phân tích dependency end-to-end

Bạn đang thay đổi schema cơ sở dữ liệu, contract API hoặc một tệp cấu hình dùng chung. Bạn cần biết những nơi nào sẽ chịu ảnh hưởng. Nhiệm vụ này làm cạn ngữ cảnh nhanh nhất vì có nhiều dependency và mỗi dependency cần được kiểm tra trong mã nguồn.

Với chiều sâu, cuộc trò chuyện chính khởi chạy một “impact-analyzer” (cấp 1). Nó khởi chạy một `dependency-tracer` cho mỗi tệp bị ảnh hưởng (cấp 2). Mỗi tracer khởi chạy một `consumer-finder` bên trong (cấp 3), để grep codebase tìm các consumer của dependency đó. Sau đó mỗi tác nhân chỉ trả về ý chính: “ba vị trí này sẽ hỏng”. Cuộc trò chuyện chính tổng hợp thành bảng “tệp bị ảnh hưởng → tác động” mà không cần biết kết quả grep.





## Cách thiết lập subagent lồng nhau trong 10 phút

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Không cần flag, không cần cập nhật cấu hình. Chỉ cần thêm `Agent` vào `tools` của tác nhân con, là nó có thể khởi chạy subagent của riêng mình. Để cây không biến thành sòng bạc, hãy dùng allowlist `Agent(name1, name2)`. Tiếp theo, tôi sẽ đưa bạn mẫu sẵn dùng cho orchestrator ba cấp để bạn sao chép.

</div>

**Bước 1. Đảm bảo bạn đang dùng v2.1.172 trở lên.**

```bash
claude --version
```

Nếu phiên bản thấp hơn, hãy cập nhật. Tính năng chính của bản phát hành này là một dòng trong nhật ký thay đổi: “Giờ đây, subagent có thể tạo subagent của riêng mình, sâu tối đa 5 cấp” ([toàn văn](https://github.com/anthropics/claude-code/releases/tag/v2.1.172)).

**Bước 2. Tạo một agent cha có thể tạo tác nhân con.**

Tệp `.claude/agents/research-orchestrator.md`:

```markdown
---
name: research-orchestrator
description: Phân công nghiên cứu với fact-check chuyên sâu
tools: Agent(fact-verifier), Read, WebFetch
model: opus
---

Bạn là orchestrator nghiên cứu. Khi nhận một chủ đề:
1. Đọc tài liệu hoặc lấy URL nguồn công khai đã được cung cấp.
   Tự trích tối đa 5 nhận định cụ thể, ghi văn bản nhận định,
   URL hoặc tệp nguồn và đúng đoạn hỗ trợ cho mỗi mục.
   Nếu chưa có tư liệu, yêu cầu trước khi giao việc.
2. Gọi fact-verifier cho từng nhận định — nó tự tạo
   các subagent con để tìm kiếm và đối chiếu trên web.
3. fact-verifier chỉ trả lại cho bạn các kết luận cuối cùng —
   đừng nạp các bản dữ liệu trung gian vào ngữ cảnh của bạn.

Báo cáo cuối cùng chỉ gồm một mảng { claim, sources[], confidence }.
```

Dòng `tools` chỉ cấp loại con `fact-verifier`. Trích nhận định là bước đầu orchestrator tự làm nên không cần tệp `claim-extractor` chưa định nghĩa. Allowlist loại giới hạn gọi ai, không giới hạn số lần gọi loại đó. Giữ công thức tối đa năm nhận định trích.

**Bước 3. Tạo agent con có thể tự tạo agent cháu.**

Tệp `.claude/agents/fact-verifier.md`:

```markdown
---
name: fact-verifier
description: Kiểm chứng nhận định qua các lượt tìm kiếm web của tác nhân con
tools: Agent(web-deep-search), Read
model: sonnet
---

Bạn là người kiểm chứng sự thật. Khi nhận một nhận định:
1. Soạn 2-3 truy vấn tìm kiếm.
2. Với mỗi truy vấn, chạy web-deep-search — nó tự thực hiện
   WebSearch và WebFetch rồi trả về các trích đoạn đã xác minh.
3. Gộp thành một verdict: { claim, sources[], confidence }.
```

Bạn thấy phần quan trọng chứ? `tools` lại ghi `Agent(web-deep-search)`. Điều đó có nghĩa fact-verifier (cấp 2 trong cây của chúng ta) có thể tự khởi chạy một subagent khác (cấp 3). Trước đây, dòng này không có tác dụng—tài liệu vẫn ghi:

<figure>
<blockquote>
Subagent không thể tạo subagent khác, vì vậy Agent(agent_type) không hoạt động trong các định nghĩa subagent.
</blockquote>
<figcaption>— Tài liệu Claude Code, https://code.claude.com/docs/en/sub-agents</figcaption>
</figure>

Với v2.1.172, dòng đó đã lỗi thời. Cú pháp vẫn như cũ, nhưng giờ nó hoạt động ở mọi độ sâu trong cây.

**Bước 4. Tạo agent chắt.**

Tệp `.claude/agents/web-deep-search.md`:

```markdown
---
name: web-deep-search
description: Tìm kiếm web và trả về các trích đoạn
tools: WebSearch, WebFetch
model: haiku
---

Bạn nhận được một truy vấn tìm kiếm. Thực hiện WebSearch, chọn 3 URL liên quan nhất, dùng WebFetch lấy bằng chứng nguyên văn xác nhận nhận định. Trả về một mảng { url, snippet, supports_claim: yes|no }.
```

Agent chắt không có `Agent` trong `tools`, vì vậy nó không tạo thêm tác nhân nào sâu hơn trong cây.

**Bước 5. Chạy orchestrator.**

```bash
claude --agent research-orchestrator
```

Cấp văn bản hoặc URL công khai trong chat: “Trích và xác minh tối đa 5 nhận định cụ thể từ nguồn này; trả nhận định, nguồn, độ tin cậy.” Với `--agent research-orchestrator`, chính phiên là orchestrator; verifier và search thêm hai cấp giao dưới nó. Nếu phiên chính thường giao cho orchestrator, có ba cấp giao dưới phiên chính đó.

## 5 kiểu chống mẫu nào làm lãng phí token và phá hỏng khả năng quan sát?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Chiều sâu tốn kém. Mỗi cấp tăng thêm nhân lượng token và hiệu ứng nhân sẽ chồng lũy tiến. Sau đây là năm tình huống mà lồng nhau gây hại. Đừng làm vậy—nếu không, bạn sẽ đốt sạch ngân sách hằng ngày trong một giờ và mất dấu lỗi ở tầng thứ tư của cây.

</div>

**Chống mẫu 1. Nhiệm vụ vừa trong một cửa sổ.**

Nếu một subagent có thể xử lý mà không gây nhiễu, đừng thêm cấp: việc lồng nhau chỉ làm tăng chi phí và độ trễ vô ích.



**Chống mẫu 2. Bạn cần tốc độ chứ không phải sự biệt lập.**

Nếu bạn muốn tốc độ, bạn cần **song song**, không phải chiều sâu. Khởi chạy 5 subagent cạnh nhau ở cùng một cấp thay vì dựng một chuỗi. Chiều sâu tồn tại để chuyển công việc chuẩn bị ồn ào sang cửa sổ con, không phải để tăng tốc.

**Chống mẫu 3. Công việc vốn dĩ nông.**

“Tìm tệp này và cho tôi xem” là **yêu cầu hai bước**; nó không cần hệ thống phân cấp ba cấp. Lồng nhau đáng dùng khi nhiệm vụ có nhiệm vụ phụ ồn ào. Nếu không có nhiễu, đừng thêm subagent.

**Chống mẫu 4. Prompt ở cấp đầu tiên mơ hồ.**

Đây là tình huống nguy hiểm nhất. Nếu bạn đưa prompt mơ hồ cho orchestrator cấp 1, sự mơ hồ sẽ nhân lên. Một prompt mơ hồ ở cấp 1 biến thành 4 prompt mơ hồ ở cấp 2 và 16 prompt ở cấp 3. Khi các tác nhân cháu bắt đầu làm việc, chúng thậm chí không biết mình đang tìm gì.

**Chống mẫu 5. Chi phí tăng theo cấp số nhân.**

Đây là lập luận kinh tế chính: việc lồng nhau nhân lượng token sử dụng, và hiệu ứng nhân tiếp tục chồng lũy tiến theo độ sâu.



Một phép tính sơ bộ: chuỗi độ sâu 3 với nhánh rẽ 3 ở mỗi cấp nghĩa là 27 subagent. Ít nhất cũng tốn token gấp 27 lần một yêu cầu đơn giản. Với gói Pro của Claude, phép tính này sẽ dùng hết giới hạn hằng ngày trong vài giờ. Nếu bạn dùng gói Max, bạn sẽ dùng hết hạn mức một tuần trong một ngày.

**Chống mẫu bổ sung (kinh nghiệm của tôi): “50 agent làm việc vô ích”.**

Khi xem dự án của người khác, tôi thường thấy câu này: “Tôi có 50 agent đang làm việc.” Tôi hỏi chúng đang làm gì. Và 50 agent đó **đang làm việc vô ích**. Chúng tạo ra hàng đống đầu ra không cần thiết, vô số bản tóm tắt thô, nội dung trùng lặp và những bức tường log. Mỗi agent làm điều gì đó “nói chung là hữu ích”, còn kết quả là ngữ cảnh chìm trong thông tin và hóa đơn token như của một công ty nhỏ. Độ sâu 5 không giải quyết vấn đề này—nó **làm vấn đề tệ hơn**. Nếu ở cấp 1 đã không rõ ai làm gì, độ sâu 5 có nghĩa là năm cấp độ hỗn loạn.

Trước khi khởi chạy bất kỳ subagent nào, hãy kiểm tra nó bằng cách trả lời 4 câu hỏi trong nửa phút:

- Chính xác thì nó làm gì (trong một câu)?
- Nó tác động đến những tệp nào?
- Nó trả lại gì cho tác nhân cha?
- Ai kiểm tra nó?

Nếu bạn không thể trả lời trong 30 giây, subagent này không nên tồn tại. Tôi giải thích riêng quy tắc này trong hướng dẫn [về subagent song song](https://ailoot.ai/blog/vi/claude-code-parallel-worktree-agents/).

## Vì sao lồng nhau mà không có context engineering lại đồng nghĩa với 5 cấp ảo giác?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Cạm bẫy của giao sâu là thiếu ngữ cảnh tác vụ. Con không tự nhận toàn hội thoại cha hay mọi tệp cha đọc. Tác nhân con tùy chỉnh thường nạp CLAUDE.md áp dụng trừ khi cấu hình bỏ, nhưng không tự nạp mọi tệp kinh doanh được dẫn. Mỗi bàn giao cần đúng tư liệu, đường dẫn và giao kèo kết quả. Nếu dự án không có cấu trúc ngữ cảnh vững chắc, cây càng sâu thì mỗi tác nhân cháu càng trôi xa vào tưởng tượng. Bạn sẽ có 5 tầng ảo giác, mỗi cấp một tầng.

</div>

Đây là lúc mọi người thường hỏi: “Tôi đã cập nhật Claude Code, thêm Agent vào tools, cây đang được dựng—nhưng câu trả lời cuối vẫn sai lệch. Vì sao?”

Câu trả lời rất đơn giản. Mọi subagent trong Claude Code đều bắt đầu **từ đầu**. Theo tài liệu chính thức:

<figure>
<blockquote>
Mỗi subagent bắt đầu với một cửa sổ biệt lập mới. Nó không thể thấy lịch sử cuộc trò chuyện, các skill bạn đã gọi hoặc những tệp Claude đã đọc.
</blockquote>
<figcaption>— Tài liệu Claude Code, https://code.claude.com/docs/en/sub-agents</figcaption>
</figure>

Ở cấp 1, việc này có thể kiểm soát được: orchestrator truyền mô tả nhiệm vụ ngắn cho tác nhân con. Nhưng ở cấp 3, tác nhân chắt nhận thông điệp phân công từ tác nhân cha, mà chính tác nhân cha cũng chỉ nhận được một thông điệp phân công. Mỗi cấp chỉ truyền đi một ít. Đến cấp 5, bạn có một subagent mà cửa sổ chỉ chứa cụm “kiểm tra nhận định X” và không có gì khác. Nó không biết đang làm việc trong dự án nào, đang giải quyết nhiệm vụ gì hay cần tập trung vào đâu.

Không có [CLAUDE.md](https://ailoot.ai/blog/vi/claude-md-template/), tác nhân chắt cấp năm giống như một nhân viên lần đầu tiên trong đời đến văn phòng mà không được hướng dẫn gì. Nó sẽ làm việc gì đó vì được giao nhiệm vụ. Nhưng đó sẽ không phải việc dự án cần.

**Đó là lý do thiết lập này rất cần thiết.** Độ sâu 5 mà không có `CLAUDE.md`, `business/` và quy trình skills được cấu hình đúng cách thì chẳng khác nào một sòng bạc. Có chúng, đó là một công cụ.

## Ngoài lồng nhau, v2.1.172 còn thay đổi điều gì?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Bản phát hành này xoay quanh subagent. Bên cạnh tính năng chính, nó có 4 bản sửa lỗi cho hạ tầng phân công. Một lỗi trong số đó chỉ có thể xảy ra khi lồng nhau.

</div>

Mở nhật ký thay đổi v2.1.172 đầy đủ và bạn sẽ thấy toàn bộ bản phát hành đều nói về subagent.

**Bản sửa 1.** Một subagent chạy nền sẽ không còn bị “kẹt” ở trạng thái active trong bảng agents sau khi subagent lồng bên trong mà nó khởi chạy bị dừng. Lỗi này chỉ có thể xảy ra khi lồng nhau.

**Bản sửa 2.** Các giới hạn `availableModels` giờ cũng áp dụng cho subagent. Trước đây, nếu bạn giới hạn những mô hình nhóm có thể dùng (ví dụ cấm opus để tiết kiệm chi phí), subagent có thể lách quy tắc bằng cách override trong cấu hình riêng. Với v2.1.172, quy tắc có hiệu lực ở mọi nơi.

**Bản sửa 3.** Phím mũi tên lên trong lịch sử prompt giờ hiển thị prompt từ tab **hiện tại** của subagent, không phải của agent chính. Một cải tiến về khả năng quan sát.

**Bản sửa 4.** Giảm mức sử dụng CPU khi nhàn rỗi: chỉ báo `/goal` không còn vẽ lại terminal ở tần số 5 Hz khi nhàn rỗi, và giao diện người dùng vẽ lại ít thường xuyên hơn khi subagent song song đang hoạt động.

Tôi muốn chỉ ra rằng cả bốn bản sửa lỗi đều liên quan đến subagent. Điều đó có nghĩa Anthropic phát hành toàn bộ lớp hạ tầng lồng nhau, chứ không chỉ một dòng trong nhật ký thay đổi. Lồng nhau đã được sử dụng bên trong Anthropic một thời gian trước khi công bố.

## Danh sách kiểm tra: khi nào lồng nhau có ích và khi nào gây hại

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Điểm chính của phần này">

Điểm chính

Trước mỗi lần khởi chạy subagent mới, hãy kiểm tra nhiệm vụ qua 6 câu hỏi. Nếu có ít nhất 3 câu trả lời là “có, hãy dùng chiều sâu”, hãy dùng nó. Nếu ít hơn, hãy chọn song song hoặc một subagent duy nhất. Cách này sẽ tiết kiệm token, giảm căng thẳng và giúp bạn tránh mất vài giờ tìm hiểu chuỗi 27 lần khởi chạy lồng nhau rốt cuộc đang làm gì.

</div>

Dùng lồng nhau nếu:

- Nhiệm vụ có một việc phụ cần số lượng lớn yêu cầu web, thao tác grep hoặc lượt đọc tệp.
- Việc mất nhiệm vụ phụ đó là chấp nhận được (nếu tác nhân chắt trả về “không tìm thấy gì”, orchestrator vẫn có thể tiếp tục).
- Bạn **không cần** kết quả trung gian trong cửa sổ chính.
- Bạn có `CLAUDE.md` và ngữ cảnh dự án đã được tập hợp để subagent dựa vào.
- Bạn có thể mô tả rõ từng cấp sẽ trả về gì (đầu vào, đầu ra, định dạng).
- Bạn dùng gói Max hoặc có dư địa cho lượng token ×27.

Đừng dùng lồng nhau nếu:

- Một subagent có thể giải quyết nhiệm vụ mà không gây nhiễu.
- Bạn cần kết quả trung gian trong cửa sổ chính (điều đó có nghĩa bạn muốn chạy song song).
- Dự án không có CLAUDE.md hoặc chỉ có ít ngữ cảnh nghiệp vụ.
- Prompt cấp 1 mơ hồ (sự mơ hồ sẽ nhân lên theo cấp số nhân trong cây).
- Bạn cần tốc độ—với kết quả tương đương, song song nhanh hơn chiều sâu.
- Bạn dùng gói Pro và làm việc cả ngày—bạn sẽ hết hạn mức trong vài giờ.

<div class="section" role="doc-bibliography" aria-label="Nguồn">

### Nguồn

- [Bản phát hành Claude Code v2.1.172 - GitHub Releases](https://github.com/anthropics/claude-code/releases/tag/v2.1.172)
- [Tạo subagent tùy chỉnh - Tài liệu Claude Code](https://code.claude.com/docs/en/sub-agents)

</div>





Có thêm tài liệu trên [Ailoot](https://ailoot.ai/).

## Câu hỏi thường gặp

### Có cần tạo claim-extractor cho công thức được sao chép không?

Không. research-orchestrator đã sửa tự trích tối đa năm khẳng định từ tài liệu được cấp. Tạo ba tệp research-orchestrator, fact-verifier, web-deep-search rồi cung cấp văn bản hoặc URL nguồn.

### Chỉ cho phép fact-verifier có giới hạn số lần gọi tác nhân con không?

Không. Danh sách loại tác nhân chỉ giới hạn loại được gọi, không giới hạn số lượt. Công thức này giới hạn riêng việc trích ban đầu ở năm khẳng định; theo dõi số gọi và token thực tế.


## Ailoot · Công ty và danh mục dự án của công ty

Ailoot dựa trên kinh nghiệm vận hành tích lũy, cơ sở khách hàng lớn, dịch vụ ổn định và việc kiểm soát KPI liên tục.

Công ty và danh mục dự án của công ty: hàng triệu khách hàng; doanh số hàng tỷ mỗi tháng.

Ailoot áp dụng kinh nghiệm vận hành này để cung cấp quyền truy cập API vào các tính năng AI trong sản phẩm của khách hàng, tác tử, ứng dụng và quy trình tự động hóa.
