Learn > Claude > Introduction to Subagents

Introduction to Subagents

Ủy thác tác vụ cho subagent chạy trong context window riêng: built-in (General purpose, Explore, Plan), custom subagent, bốn pattern thiết kế và quy tắc quyết định khi nào nên/không nên delegate.

  • Subagent là trợ lý chuyên biệt mà Claude Code ủy thác (delegate) tác vụ cho; nó chạy trong context window riêng, làm việc xong thì chỉ trả một bản summary về main thread, còn toàn bộ hội thoại trung gian bị discard.
  • Một subagent nhận đúng hai thứ: custom system prompt từ file config (định nghĩa vai trò và hành vi) và task description do parent agent viết dựa trên yêu cầu của người dùng.
  • Claude Code có sẵn ba built-in subagent — General purpose (tác vụ nhiều bước cần cả explore lẫn hành động), Explore (tìm kiếm và điều hướng codebase nhanh) và Plan (research, phân tích codebase trong plan mode) — ngoài ra có thể tự tạo custom subagent với system prompt và tool access riêng.
  • Custom subagent là một file markdown có YAML frontmatter đặt tại .claude/agents/<tên>.md, tạo nhanh bằng slash command /agents; frontmatter gồm năm field name, description, tools, model, color, còn phần body chính là system prompt của subagent.
  • Name và description của mọi subagent khả dụng được đưa vào system prompt của main agent, nên description vừa quyết định khi nào subagent được launch, vừa định hình input prompt mà main agent viết ra để giao việc.
  • Bốn pattern làm subagent hiệu quả: description cụ thể, định nghĩa output format trong system prompt (cải thiện quan trọng nhất — tạo điểm dừng và chặn subagent chạy quá dài), thêm section báo cáo obstacle để main thread không phải khám phá lại workaround, và chỉ cấp đúng tool mà vai trò đó cần.
  • Quy tắc quyết định gọn trong một câu hỏi: phần việc trung gian có quan trọng không? Không quan trọng — chỉ cần kết quả cuối — thì delegate cho subagent; quan trọng — cần thấy và phản ứng theo từng bước — thì giữ ở main thread.
  • Nên dùng subagent cho research/exploration, code review và tác vụ cần custom system prompt; nên tránh với expert persona (không thêm năng lực gì), sequential pipeline mà mỗi bước phụ thuộc bước trước (mất thông tin ở handoff), và test runner (giấu mất output cần để debug).

TL;DRSubagent (trợ lý được ủy thác) là assistant chuyên biệt chạy trong context window riêng: nó tự đọc file, search, gọi tool, rồi chỉ trả một summary về main thread — phần còn lại bị discard. Nhờ vậy main context sạch và phiên làm việc kéo dài được lâu hơn. Đánh đổi: mất visibility vào cách nó đi tới kết luận.

Subagent là gì

Subagent là trợ lý chuyên biệt mà Claude Code có thể delegate (ủy thác) tác vụ cho. Hình dung nó như một người giúp việc chuyên trách: nhận việc, chạy trong context window (cửa sổ ngữ cảnh) riêng của mình, làm xong thì trả về main thread một bản tóm tắt.

Điểm mấu chốt: mọi intermediate step (bước trung gian) — đọc file, search, tool call — ở lại trong context của subagent, không bao giờ làm bẩn hội thoại chính.

Vì sao subagent quan trọng

Mỗi lần trò chuyện với Claude Code là mỗi lần cộng thêm vào main context window. Mọi tool call, mọi lần đọc file, mọi kết quả search đều được lưu ở đó. Không gian ấy hữu hạn — đầy rồi thì Claude bắt đầu mất dấu những phần trước của cuộc hội thoại.

Subagent giải quyết bằng cách mở một context window tách biệt. Subagent nhận đúng hai thứ:

  • Custom system prompt — từ file cấu hình, định nghĩa vai trò và hành vi của subagent.
  • Task description — do parent agent viết, dựa trên yêu cầu của người dùng.

Sau đó subagent tự làm việc: đọc file, chạy search, sửa code — bất cứ gì nó cần. Xong việc, chỉ summary quay về main conversation; toàn bộ hội thoại của subagent bị discard.

Nghĩa là main context giữ được sạch: có câu trả lời mà không có tiếng ồn của hành trình đi tìm nó. Tradeoff (đánh đổi): mất visibility — không thấy subagent đã lập luận thế nào để tới kết luận.

Ví dụ thực tế

Giả sử đang khám phá một codebase lạ và muốn biết service nào xử lý refund.

Không subagent Có subagent
Cách làm Claude đọc 15 file, chạy vài lượt search, lần theo nhiều function call Đặt câu hỏi → Explore subagent bới trong context riêng
Main context ghi lại Toàn bộ 15 file + mọi search — dù chỉ cần một fact Chỉ câu hỏi + summary

Built-in subagents

Claude Code có sẵn ba subagent dùng được ngay:

  • General purpose — tác vụ nhiều bước, cần cả exploration lẫn action.
  • Explore — tìm kiếm và điều hướng codebase nhanh.
  • Plan — dùng trong plan mode: research và phân tích codebase trước khi trình bày plan.

Custom subagents

Ngoài built-in, có thể tạo subagent riêng — ví dụ code reviewer, test writer, documentation generator, hoặc bất cứ vai trò nào hợp workflow. Về bản chất, một custom subagent là một file markdown có YAML frontmatter: frontmatter nói cho Claude khi nào dùng subagent, body nói subagent hành xử ra sao.

Tạo subagent bằng /agents

Cách dễ nhất là slash command /agents — giao diện quản lý subagent — rồi chọn Create new agent. Claude Code hỏi lần lượt:

1. Scope (phạm vi):

  • Project-level — chỉ dùng được trong project hiện tại.
  • User-level — dùng chung cho mọi project trên máy.

2. Creation method (cách tạo):

  • Generate with Claude (khuyến nghị) — mô tả điều muốn subagent làm, Claude sinh ra name, description và system prompt.
  • Manual configuration — tự viết config.

3. Tools — chọn nhóm tool subagent được truy cập: Read-only tools · Edit tools · Execution tools · MCP tools · Other tools.

Hãy cân nhắc subagent thực sự cần gì. Một code reviewer hầu như không cần edit tools — nó nên đọc và phân tích code, không sửa. Nhưng nên giữ execution tools để nó dễ nhận diện pending changes (thay đổi đang chờ).

4. Model — chọn mô hình chạy subagent:

Model Dùng khi
haiku tác vụ nhanh, nhẹ
sonnet cân bằng giữa tốc độ và chiều sâu
opus phân tích phức tạp
inherit dùng đúng model mà main conversation đang chạy

5. Color — màu hiển thị trên UI để biết ngay subagent nào đang hoạt động. Chi tiết nhỏ, nhưng hữu ích khi chạy nhiều subagent.

File config

Tạo xong, config được lưu vào project — thường ở .claude/agents/<tên-agent>.md:

---
name: code-quality-reviewer
description: Use this agent when you need to review recently written or modified code for quality, security, and best practice compliance.
tools: Bash, Glob, Grep, Read, WebFetch, WebSearch
model: sonnet
color: purple
---

You are an expert code reviewer specializing in quality assurance, security best practices, and
adherence to project standards. Your role is to thoroughly examine recently written or modified code
and identify issues that could impact reliability, security, maintainability, or performance.

Từng field:

  • name — định danh duy nhất. Dùng để gọi subagent: hỏi Claude trực tiếp, hoặc gõ @agent code-quality-reviewer trong tin nhắn.
  • descriptionđiều khiển khi nào Claude quyết định dùng subagent. Bắt buộc một dòng (cần ngắt dòng thì dùng escape \n). Có thể đưa ví dụ hội thoại vào đây để Claude hiểu lúc nào nên delegate.
  • tools — danh sách tool subagent được truy cập; khớp với lựa chọn lúc tạo, nhưng sửa lại được bất cứ lúc nào.
  • modelsonnet · opus · haiku · inherit.
  • color — màu nhận diện trên UI.

System prompt

Body của file markdown (mọi thứ dưới YAML frontmatter) chính là system prompt. Đây là nơi giao chỉ thị cho subagent: tập trung vào gì, phân tích thế nào, báo cáo kết quả về main agent ra sao.

Một system prompt viết tốt là khác biệt giữa subagent hữu ích và subagent lạc đề. Hãy cụ thể về cái cần soi và cấu trúc output mong muốn.

Delegate tự động & test

Muốn Claude tự giao việc cho subagent mà không cần yêu cầu tường minh: đưa từ "proactively" vào field description.

description: Proactively suggest running this agent after major code changes...

Cũng nên thêm ví dụ hội thoại vào description — ví dụ càng cụ thể, Claude càng biết đúng lúc nào nên delegate.

Tạo xong thì test: sửa vài chỗ trong code rồi nhờ Claude review. Nếu subagent không được gọi như mong đợi → quay lại kiểm tra description, thêm ví dụ và trigger scenario cụ thể hơn.

Config của subagent được dùng ra sao

Đây là cơ chế nền cần nắm trước khi tối ưu. Mỗi khi gửi tin nhắn cho main context window agent, namedescription của MỌI subagent khả dụng đều được đưa vào system prompt của main agent. Đó chính là cách main agent quyết định launch subagent nào, khi nào. Muốn kiểm soát tốt hơn việc subagent có được trigger tự động hay không → chỉnh name + description.

description còn có vai trò thứ hai: khi main agent launch subagent, nó phải tự viết một input prompt để khởi động task — và nó dùng description làm kim chỉ nam để viết prompt đó. Nên description không chỉ quyết định khi nào subagent chạy, mà còn định hình subagent được bảo làm gì.

Pattern 1 — Description định hình input prompt

Lấy code review subagent làm ví dụ. Với description chung chung, main agent có thể viết input prompt kiểu:

"use get diff to find the current changes"

Mơ hồ — subagent phải tự đoán file nào đáng quan tâm.

Sửa description, thêm vào:

"You must tell the agent precisely which files you want it to review"

Giờ main agent sẽ viết input prompt cụ thể hơn hẳn, liệt kê đúng các file cần review.

Kỹ thuật này dùng chéo được cho mọi loại subagent. Ví dụ: thêm "return sources that can be cited" vào description của một web search subagent → main agent tự đưa chỉ thị đó vào khi delegate.

Pattern 2 — Định nghĩa output format

Đây là cải thiện quan trọng nhất có thể làm cho một subagent, và nó nằm trong system prompt. Nó làm hai việc:

  • Tạo stopping point tự nhiên — subagent biết mình xong khi đã điền đủ mọi section của format.
  • Ngăn subagent chạy quá dài — không có output định sẵn, subagent vật lộn để quyết định bao nhiêu research là đủ và thường chạy lâu hơn cần thiết.

Ví dụ output format có cấu trúc cho code review subagent:

Provide your review in a structured format:

1. Summary: Brief overview of what you reviewed and overall assessment
2. Critical Issues: Any security vulnerabilities, data integrity risks,
   or logic errors that must be fixed immediately
3. Major Issues: Quality problems, architecture misalignment, or
   significant performance concerns
4. Minor Issues: Style inconsistencies, documentation gaps, or
   minor optimizations
5. Recommendations: Suggestions for improvement, refactoring
   opportunities, or best practices to apply
6. Approval Status: Clear statement of whether the code is ready
   to merge/deploy or requires changes

Format này cho subagent một checklist rõ ràng để đi qua. Điền xong mọi section = biết được phép dừng.

Pattern 3 — Báo cáo obstacle

Khi subagent phát hiện một workaround trong lúc làm việc — giải quyết một vấn đề dependency, hay phát hiện một lệnh cần flag đặc biệt — chi tiết đó phải xuất hiện trong summary nó trả về. Không thì main thread phải tự khám phá lại chính những giải pháp đó, tốn thời gian và token.

Những thứ nên được bắt báo cáo:

  • Setup issue hoặc environment quirk (điểm dị của môi trường)
  • Workaround phát hiện trong lúc làm task
  • Lệnh cần flag hoặc cấu hình đặc biệt
  • Dependency hoặc import gây trục trặc

Cách lấy thông tin này: yêu cầu tường minh trong output format. Thêm một section "Obstacles Encountered" vào template là nó được surface một cách đáng tin cậy.

7. Obstacles Encountered: Report any obstacles encountered during the
   review process. This can be: setup issues, workarounds discovered or
   environment quirks. Report commands that needed a special flag or
   configuration. Report dependencies or imports that caused problems.

Pattern 4 — Giới hạn tool access

Không phải subagent nào cũng cần mọi tool. Hãy nghĩ xem subagent thực sự cần làm gì, rồi chỉ cấp tool cần cho việc đó. Việc này được hai điều: tránh side effect ngoài ý muốn, và làm rõ vai trò của từng subagent khi có nhiều subagent.

Loại subagent Tool cần Vì sao
Research / read-only Glob, Grep, Read Không thể lỡ tay sửa file
Code reviewer + Bash Cần chạy git diff để thấy có gì thay đổi — nhưng vẫn không cần Edit/Write
Styling / code modification + Edit, Write Đây mới là chỗ cấp quyền sửa, vì việc của nó chính là đổi code

Bốn đặc điểm của subagent hiệu quả

  1. Description cụ thể — description điều khiển khi nào subagent được launch và nó nhận chỉ thị gì. Viết để lái cả hai.
  2. Structured output — định nghĩa output format trong system prompt để subagent biết khi nào xong và trả về thông tin main thread dùng được.
  3. Obstacle reporting — chừa một section cho workaround, quirk và vấn đề, để main thread khỏi khám phá lại.
  4. Limited tool access — chỉ cấp tool thực sự cần: read-only cho research, Bash cho reviewer, Edit/Write chỉ cho subagent có nhiệm vụ đổi code.

Mỗi pattern tách ra thì đơn giản, nhưng gộp lại biến subagent từ thứ "cố gắng giúp một cách mơ hồ" thành một worker tập trung, dự đoán được, xong đúng hạn và báo cáo rõ ràng.

Khi nào subagent toả sáng

Khác biệt nằm ở đúng một thứ: phần việc trung gian có quan trọng với main thread không.

Subagent chạy tốt nhất khi exploration tách rời được khỏi execution. Nếu mỗi bước trong task phụ thuộc vào phát hiện của bước trước → muốn việc đó ở main thread. Còn nếu chỉ cần một câu trả lời và không quan tâm hành trình → delegate.

Subagent xuất sắc ở các task mà:

  • Cần một kết quả, không cần tường thuật từng nước đi.
  • Phần việc thăm dò sẽ làm bẩn context của main thread.
  • Task hưởng lợi từ góc nhìn tươi mới hoặc một custom system prompt.

Research

Use case kinh điển. Ví dụ: điều tra cơ chế authentication trong một codebase lạ. Main thread cần biết JWT được validate ở đâu, chứ không cần thấy từng file đã search dọc đường.

Research subagent có thể đọc hàng chục file, trace qua các function call, khám phá nhiều code path — toàn bộ ở lại context của nó. Main thread nhận một summary sạch:

JWT validation happens in middleware/auth.js line 42,
called from the Express router in route/api.js

Subagent gánh phần nặng; main thread nhận đúng thứ cần để đi tiếp.

Code review

Claude review code hiệu quả hơn khi code được trình bày như do người khác viết. Nếu xây một feature qua nhiều lượt với main thread rồi nhờ chính thread đó review, phản hồi thường yếu — Claude đã tham gia tạo ra nó nên khó nhìn bằng con mắt tươi mới.

Reviewer subagent thấy thay đổi trong context riêng: chạy git diff, đọc file đã sửa, áp tiêu chí review chuyên biệt — không mang theo lịch sử code được viết ra sao. Tách như vậy còn cho phép mã hoá chuẩn review riêng của project vào system prompt của subagent → tiêu chí review nhất quán cho cả team.

Custom system prompt

System prompt mặc định của Claude Code nhấn mạnh phản hồi cô đọng, tập trung vào code. Tuyệt cho lập trình, nhưng không hợp mọi việc. Hai trường hợp custom system prompt làm subagent thực sự hơn hẳn main thread:

  • Copywriting subagent — cho nó chỉ dẫn về tone, audience và style. Default prompt của Claude Code thiên về văn kỹ thuật cô đọng — không phải thứ cần cho landing page hay email campaign. Copywriting subagent mang chỉ dẫn hoàn toàn khác về voice và cấu trúc.
  • Styling subagent — trỏ nó vào các file design system. Khi subagent chạy, những file đó tự nạp vào context của nó, nên nó biết color variable, quy ước spacing và component pattern trước cả khi bắt đầu viết CSS.

Khi nào subagent gây hại

Chi phí của việc launch subagent — mất visibility vào việc nó làm và nén phát hiện thành summary — chỉ đáng trả khi subagent làm được điều main thread không làm được. Ba anti-pattern cần tránh:

Expert claims

Subagent tự nhận chuyên gia hiếm khi giúp ích. Prompt kiểu "you are a Python expert" hay "you are a Kubernetes specialist" không thêm giá trị — Claude đã có sẵn kiến thức đó. Không có gì một "expert subagent" làm được mà main thread không làm trực tiếp được.

Sequential pipelines

Pipeline subagent tuần tự sinh vấn đề. Ví dụ chuỗi ba agent: một để reproduce bug, một để debug, một để fix. Pipeline chỉ chạy được khi các task thực sự độc lập. Nó thất bại khi mỗi bước phụ thuộc vào phát hiện của bước trước — mà sửa bug thì gần như luôn như vậy. Thông tin bị mất ở khâu handoff (bàn giao) giữa các agent.

Test runners

Test runner subagent hay giấu mất thông tin cần. Khi test fail, ta cần output đầy đủ để chẩn đoán. Một subagent chỉ trả về "tests failed" buộc ta phải viết thêm debug script để lấy lại chi tiết lẽ ra đã hiện ngay trong output trực tiếp. Thử nghiệm cho thấy test runner pattern cho kết quả tệ nhất trong tất cả cấu hình.

Quy tắc quyết định

Khi phân vân có nên dùng subagent, hỏi đúng một câu: phần việc trung gian có quan trọng không?

  • Không — chỉ cần kết quả cuối → delegate.
  • — cần thấy và phản ứng theo những gì đang diễn ra dọc đường → giữ ở main thread.
✅ Dùng subagent cho ❌ Tránh subagent cho
Research và exploration "Expert" persona không thêm năng lực thật
Code review Pipeline nhiều bước mà bước sau phụ thuộc bước trước
Task cần custom system prompt Chạy test khi cần output đầy đủ để debug

Áp dụng thực tế

Ở góc Delivery Manager, tôi đọc subagent như mô hình ủy thác trong team. Khi giao một dev đi điều tra "service nào xử lý refund", tôi không cần biết bạn ấy mở 15 file nào — tôi cần một câu trả lời và giữ đầu mình trống cho phần việc điều phối. Chi phí cũng giống hệt: giao xong thì mất khả năng kiểm chứng đường đi. Nên với việc tìm kiếm/khảo sát (kết luận dễ verify lại) tôi ủy thác thoải mái; với việc mà cách làm quan trọng ngang kết quả thì tôi giữ trong main thread để nhìn từng bước.

Viết config subagent thì đúng bằng viết JD cho một vị trí: description là phần "khi nào gọi người này vào" — thứ người phân việc đọc; system prompt mới là bản mô tả công việc — thứ người làm đọc. Đây cũng là lý do khi subagent không bao giờ được gọi, chỗ hỏng nằm ở description chứ không phải ở system prompt. Còn toolscấp quyền theo vai trò: reviewer bị cắt edit tools nhưng vẫn giữ execution tools để nhìn được pending changes — cắt đúng chỗ, không cắt cho đủ chỉ tiêu an toàn.

Cả bốn anti-pattern/use case ở bài cuối quy về một câu tôi thấy đáng nhớ hơn cả decision rule: subagent là một cơ chế nén thông tin — chỉ delegate khi phần bị nén là rác. Research: 15 file đọc dọc đường là rác, nén thoải mái. Test runner: stack trace lúc test fail chính là thứ quý nhất, nén nó thành "tests failed" là nén nhầm chỗ — nên nó tệ nhất trong mọi cấu hình là hợp lý. Pipeline reproduce → debug → fix: cái bước sau cần là chi tiết thô của bước trước, mà giữa hai agent chỉ còn summary.

Riêng lý do tách reviewer thì đáng ngẫm với người làm review thật: nó không phải chuyện context sạch, mà là chuyện mắt tươi. Tự review PR của chính mình sau ba ngày viết thì ta không đọc code — ta đọc lại ý định của mình. Reviewer subagent thoát được bẫy đó vì nó không mang theo lịch sử feature này ra đời thế nào. Và chỗ này mới là đòn bẩy team: chuẩn review của project mã hoá vào system prompt thì mọi người review bằng cùng một bộ tiêu chí, thay vì tuỳ tâm trạng người review hôm đó.

Ba pattern còn lại thì đúng nghề quản lý delivery đến mức không cần dịch. description nằm trong system prompt của main agent, nghĩa là sửa nó là sửa tờ giấy mà người phân việc đang cầm — không phải huấn luyện lại người làm; đó là lý do một câu như "phải nói rõ chính xác file nào cần review" lại đổi được chất lượng đầu vào của subagent. Output format thì đúng bằng đưa template báo cáo thay vì bảo "viết báo cáo đi": không có tiêu chí xong thì không ai biết lúc nào dừng, và với subagent cái giá của việc không biết dừng trả bằng token. Còn "Obstacles Encountered" là chỗ tôi thấy đắt nhất: context của subagent bị discard, nên mọi thứ nó học được dọc đường sẽ bốc hơi trừ khi ta bắt viết vào summary — không có section đó, main thread giẫm lại đúng ổ gà cũ và trả tiền lần nữa.

Ba lợi ích chốt lại

  • Chia việc thành các mảnh tập trung — mỗi subagent lo đúng một tác vụ.
  • Giữ main context window sạch bằng cách cách ly toàn bộ việc trung gian.
  • Trả về đúng thông tin cần dưới dạng summary ngắn gọn.

Càng ít nhiễu trong main context, phiên làm việc càng dài và càng hiệu quả.

Từ khoá cần thuộc

🔴 Core: subagent · context window · delegate · summary · custom system prompt · task description · parent agent · main thread · /agents · description (quyết định khi nào delegate + định hình input prompt) · .claude/agents/<name>.md · proactively · output format · input prompt · limited tool access · decision rule: "does the intermediate work matter?" · expert claims · sequential pipelines · test runners

🟡 Important: General purpose subagent · Explore subagent · Plan subagent · plan mode · custom subagent · tool access · intermediate steps · discarded · YAML frontmatter · name · tools · model · color · project-level vs user-level · inherit · Generate with Claude vs Manual configuration · stopping points · Obstacles Encountered · structured output · Glob / Grep / Read · Bash · Edit / Write · git diff · exploration vs execution · fresh eyes · copywriting subagent · styling subagent · design system files · handoff · anti-pattern

🟢 Good-to-know: visibility tradeoff · configuration file · code reviewer / test writer / documentation generator · @agent <name> · Read-only / Edit / Execution / MCP / Other tools · pending changes · trigger scenarios · environment quirks · workarounds · Approval Status · Critical / Major / Minor Issues · side effects


Nguồn: Introduction to Subagents (Anthropic Academy) — Copyright Anthropic. Phần đề thi thử cho khoá này nằm ở tab "Đề thi thử".

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

Subagent trong Claude Code là gì?
Subagent là một trợ lý chuyên biệt mà Claude Code có thể ủy thác (delegate) tác vụ cho. Mỗi subagent chạy trong context window riêng của nó, tự đọc file, search và gọi tool để hoàn thành việc, rồi trả về main thread một bản summary. Các bước trung gian nằm cách ly trong context của subagent và không làm bẩn hội thoại chính.
Vì sao nên dùng subagent?
Vì main context window là hữu hạn: mỗi tool call, mỗi lần đọc file hay kết quả search đều được lưu vào đó, và khi đầy thì Claude bắt đầu mất dấu những phần trước của hội thoại. Subagent mở một context window tách biệt để làm phần việc nặng, nên main context chỉ ghi lại câu hỏi và bản summary. Nhờ đó phiên làm việc dài giữ được hiệu quả lâu hơn.
Một subagent nhận được những gì khi được giao việc?
Đúng hai thứ. Thứ nhất là custom system prompt lấy từ file cấu hình, định nghĩa vai trò và hành vi của subagent. Thứ hai là task description do parent agent viết, dựa trên yêu cầu người dùng. Sau đó subagent tự làm việc độc lập và chỉ trả về summary.
Claude Code có sẵn những subagent nào?
Ba built-in subagent. General purpose dành cho tác vụ nhiều bước cần cả exploration lẫn hành động. Explore dành cho tìm kiếm và điều hướng codebase nhanh. Plan được dùng trong plan mode để research và phân tích codebase trước khi trình bày kế hoạch. Ngoài ra người dùng có thể tạo custom subagent với system prompt và tool access riêng.
Tạo custom subagent trong Claude Code thế nào?
Cách nhanh nhất là dùng slash command /agents rồi chọn Create new agent. Claude Code sẽ hỏi lần lượt: scope (project-level chỉ dùng trong project hiện tại, hay user-level dùng chung mọi project trên máy), cách tạo (Generate with Claude — khuyến nghị — hoặc Manual configuration), nhóm tools được phép truy cập, model, và color. Kết quả là một file markdown lưu tại .claude/agents/<tên>.md.
Field description trong config subagent dùng để làm gì?
Description điều khiển việc Claude quyết định KHI NÀO dùng subagent đó, chứ không chỉ mô tả suông. Nó bắt buộc phải nằm trên một dòng — nếu cần xuống dòng thì dùng ký tự escape \n — và có thể chứa ví dụ hội thoại để Claude hiểu lúc nào nên delegate. Nếu subagent không được gọi như mong đợi, chỗ cần sửa đầu tiên chính là description.
Làm sao để Claude tự động dùng subagent mà không cần yêu cầu?
Đưa từ "proactively" vào field description, ví dụ "Proactively suggest running this agent after major code changes...". Ngoài ra nên thêm các ví dụ hội thoại cụ thể vào description; ví dụ càng cụ thể thì Claude càng biết đúng lúc nào cần delegate.
Main agent dùng thông tin nào của subagent để quyết định delegate?
Mỗi khi người dùng gửi tin nhắn, name và description của mọi subagent khả dụng đều được đưa vào system prompt của main context window agent — đó là cách main agent biết launch subagent nào và khi nào. Muốn kiểm soát tốt hơn việc subagent có được kích hoạt tự động hay không, hãy chỉnh chính name và description.
Vì sao description lại định hình cả nội dung công việc giao cho subagent?
Vì description có vai trò thứ hai: khi main agent launch một subagent, nó phải tự viết một input prompt để khởi động task, và nó dùng description làm kim chỉ nam để viết prompt đó. Ví dụ, thêm câu "You must tell the agent precisely which files you want it to review" vào description sẽ khiến main agent viết input prompt liệt kê đúng các file cần review thay vì một câu mơ hồ như "use get diff to find the current changes".
Cải thiện quan trọng nhất cho một subagent là gì?
Là định nghĩa output format trong system prompt của subagent. Nó làm hai việc: tạo ra các điểm dừng tự nhiên — subagent biết mình đã xong khi điền đủ mọi section của format; và ngăn subagent chạy quá dài — khi không có output định sẵn, subagent rất khó quyết định bao nhiêu research là đủ và thường chạy lâu hơn mức cần thiết.
Làm sao để subagent báo lại các workaround nó tìm ra?
Phải yêu cầu tường minh trong output format: thêm một section "Obstacles Encountered" vào template output. Những thứ nên bắt báo gồm setup issue, environment quirk, workaround phát hiện trong lúc làm, lệnh cần flag hay cấu hình đặc biệt, và dependency/import gây trục trặc. Nếu không, main thread sẽ phải tự khám phá lại chính những giải pháp đó, tốn thời gian và token.
Vì sao nên giới hạn tool của subagent?
Vì hai lý do: tránh side effect ngoài ý muốn, và làm rõ vai trò của từng subagent khi bạn có nhiều subagent. Nguyên tắc theo vai trò: subagent research/read-only chỉ cần Glob, Grep và Read nên không thể lỡ tay sửa file; code reviewer cần Bash để chạy git diff xem có gì thay đổi nhưng vẫn không cần Edit hay Write; chỉ subagent có nhiệm vụ sửa code — như styling agent — mới được cấp Edit và Write.
Custom subagent chọn model nào?
Có bốn lựa chọn. Haiku cho tác vụ nhanh và nhẹ. Sonnet là mức cân bằng giữa tốc độ và chiều sâu. Opus cho phân tích phức tạp. Inherit dùng đúng model mà main conversation đang chạy.
Một subagent code reviewer nên được cấp những tool nào?
Nên bỏ edit tools, vì reviewer chỉ cần đọc và phân tích code chứ không nên sửa. Nhưng nên giữ execution tools để nó dễ dàng nhận diện các thay đổi đang chờ (pending changes). Nguyên tắc chung là cấp đúng những gì vai trò đó thực sự cần.
Khi nào nên dùng subagent, khi nào không?
Quy tắc quyết định là một câu hỏi duy nhất: phần việc trung gian có quan trọng không? Nếu không — chỉ cần kết quả cuối — thì delegate cho subagent. Nếu có — cần thấy và phản ứng theo những gì đang diễn ra dọc đường — thì giữ trong main thread. Subagent hợp với research và exploration, code review, và tác vụ cần custom system prompt; nên tránh với expert persona, pipeline nhiều bước mà bước sau phụ thuộc bước trước, và chạy test khi cần output đầy đủ để debug.
Vì sao nên để một subagent riêng review code thay vì hỏi main thread?
Vì Claude review code hiệu quả hơn khi code được trình bày như do người khác viết. Nếu bạn xây một feature qua nhiều lượt với main thread rồi nhờ chính thread đó review, phản hồi thường yếu — Claude đã tham gia tạo ra nó nên khó nhìn bằng con mắt tươi mới. Reviewer subagent thấy thay đổi trong một context riêng: nó chạy git diff, đọc file đã sửa và áp tiêu chí review chuyên biệt mà không mang theo lịch sử code được viết ra sao. Tách như vậy còn cho phép mã hoá chuẩn review riêng của project vào system prompt của subagent, giữ tiêu chí nhất quán cho cả team.
Vì sao subagent kiểu "you are a Python expert" không giúp ích?
Vì Claude vốn đã có sẵn kiến thức đó. Không có việc gì một subagent tự nhận là chuyên gia làm được mà main thread không tự làm trực tiếp được. Chi phí của subagent — mất visibility và bị nén kết quả thành summary — chỉ đáng trả khi subagent làm được điều main thread không làm được.
Vì sao sequential pipeline nhiều subagent thường thất bại?
Pipeline chỉ chạy tốt khi các task thực sự độc lập. Nó thất bại khi mỗi bước phụ thuộc vào phát hiện của bước trước, vì thông tin bị mất ở khâu bàn giao giữa các agent. Ví dụ chuỗi ba agent — một để tái hiện bug, một để debug, một để fix — gần như luôn hỏng, bởi sửa bug hầu như luôn phụ thuộc chi tiết mà bước trước phát hiện ra.
Vì sao không nên dùng subagent để chạy test?
Vì test runner subagent giấu mất thông tin bạn cần. Khi test fail, bạn cần output đầy đủ để chẩn đoán; một subagent chỉ trả về "tests failed" buộc bạn phải viết thêm script debug để lấy lại những chi tiết lẽ ra đã hiện ngay trong output trực tiếp. Thử nghiệm cho thấy pattern test runner cho kết quả tệ nhất trong tất cả cấu hình.
Custom system prompt giúp subagent hơn main thread ở chỗ nào?
System prompt mặc định của Claude Code nhấn mạnh phản hồi cô đọng, tập trung vào code — rất hợp để lập trình nhưng không hợp mọi việc. Một copywriting subagent có thể mang chỉ dẫn hoàn toàn khác về tone, đối tượng và văn phong, thứ cần cho landing page hay email campaign. Một styling subagent thì được trỏ vào các file design system: khi chạy, những file đó tự nạp vào context của nó, nên nó biết color variable, quy ước spacing và component pattern trước cả khi bắt đầu viết CSS.
Dùng subagent có nhược điểm gì không?
Có một đánh đổi: mất visibility. Vì toàn bộ hội thoại của subagent bị discard sau khi nó trả kết quả, người dùng chỉ thấy bản summary chứ không thấy subagent đã đọc file nào, search gì và lập luận ra sao để đi tới kết luận đó.

Đề thi thử (55 câu)

Đề thi thử tự biên soạn, bám sát đề thi chứng chỉ thật — trích 20 câu đầu dưới đây. Bản tương tác — chấm điểm, đáp án & giải thích từng câu — nằm ở tab “Đề thi thử” trên trang.

  1. Introduction to subagents What is a subagent in Claude Code?

    • A. A background process that compresses the main conversation when it gets too long
    • B. A specialized assistant that Claude Code delegates tasks to, running in its own context window
    • C. A separate CLI session the user must start manually in another terminal
    • D. A plugin that adds new built-in tools to the main agent
  2. Introduction to subagents What does the main conversation receive when a subagent finishes its work?

    • A. The full transcript of everything the subagent read and did
    • B. Only a summary of the subagent's work
    • C. A list of every file the subagent opened, plus its final answer
    • D. Nothing — the result is written to a file instead
  3. Introduction to subagents A subagent receives exactly two inputs when it starts. What are they?

    • A. The user's raw message and the full main conversation history
    • B. A custom system prompt from a configuration file and a task description written by the parent agent
    • C. A task description and a list of files it is allowed to read
    • D. The main agent's system prompt and a compacted summary of the session
  4. Introduction to subagents Why does the main context window filling up cause a problem?

    • A. Claude Code refuses to run any further tool calls
    • B. The session is terminated and must be restarted
    • C. Claude starts losing track of earlier parts of the conversation
    • D. Responses are still accurate but become slower and more expensive
  5. Introduction to subagents What is the tradeoff of delegating work to a subagent?

    • A. You lose visibility into how the subagent reached its conclusions
    • B. The subagent cannot edit code, only read it
    • C. The main agent must wait and cannot use any tools afterwards
    • D. The answer returned is less accurate than doing the work in the main thread
  6. Built-in subagents Which built-in subagent is designed for fast searching and navigation of codebases?

    • A. General purpose
    • B. Explore
    • C. Plan
    • D. Navigator
  7. Built-in subagents When is the Plan subagent used?

    • A. Whenever a task requires more than three tool calls
    • B. During plan mode, for research and analysis of the codebase before presenting a plan
    • C. After code is written, to plan the commit and deployment steps
    • D. Only when the user explicitly writes a custom configuration file for it
  8. Built-in subagents Which built-in subagent is best suited to a multi-step task that requires both exploration and action?

    • A. Explore
    • B. Plan
    • C. General purpose
    • D. Any custom subagent — the built-in ones are read-only
  9. Custom subagents What can you define when creating a custom subagent?

    • A. Its own system prompt and tool access
    • B. Its own model weights and training data
    • C. The size of the main context window it consumes
    • D. The exact number of tool calls it is allowed to make
  10. Introduction to subagents In the refund-service example, what does the main context window record when the work is delegated to an Explore subagent?

    • A. The 15 files that were read, so they can be reviewed later
    • B. Every search query the subagent ran, but not the file contents
    • C. Only the question and the summary
    • D. Nothing, until the user explicitly asks for the result
  11. Introduction to subagents Which of the following are stated benefits of subagents? (Select all that apply)

    • A. They break work into focused pieces, letting each subagent concentrate on a specific task
    • B. They keep the main context window clean by isolating intermediate work
    • C. They bring back just the information you need as a concise summary
    • D. They guarantee the task completes faster than doing it in the main thread
  12. Introduction to subagents What happens to the subagent's own conversation after it returns its result?

    • A. It is merged into the main conversation for reference
    • B. It is discarded
    • C. It is compacted and kept as a short transcript in the main thread
    • D. It is saved to the configuration file for reuse
  13. Creating custom subagents In what format is a custom subagent defined?

    • A. A JSON file listing the agent's tools and model
    • B. A markdown file with YAML frontmatter
    • C. A Python class that subclasses the Agent base class
    • D. A section inside CLAUDE.md
  14. Creating custom subagents Which slash command opens the interface for managing and creating subagents?

    • A. /subagents
    • B. /config
    • C. /agents
    • D. /new-agent
  15. Creating custom subagents What is the difference between project-level and user-level subagent scope?

    • A. Project-level subagents are available only in the current project; user-level ones are shared across all projects on your machine
    • B. Project-level subagents can edit files; user-level ones are read-only
    • C. Project-level subagents are committed to git; user-level ones run on Anthropic's servers
    • D. Project-level subagents inherit the main model; user-level ones require an explicit model
  16. Creating custom subagents What is the recommended creation method when making a new subagent?

    • A. Manual configuration, so you control every field
    • B. Copying an existing built-in subagent's config file
    • C. Generate with Claude — describe what you want and Claude produces the name, description, and system prompt
    • D. Installing one from the MCP registry
  17. Creating custom subagents Which tool category should typically be DISABLED for a code reviewer subagent?

    • A. Read-only tools
    • B. Edit tools
    • C. Execution tools
    • D. MCP tools
  18. Creating custom subagents Why might you keep execution tools enabled for a code reviewer subagent?

    • A. So it can automatically fix the issues it finds
    • B. So it can more easily identify pending changes
    • C. Because read-only tools cannot open files without them
    • D. Because the model field requires at least one execution tool
  19. Creating custom subagents What does setting a subagent's model to `inherit` do?

    • A. Uses whatever model your main conversation is running
    • B. Uses the cheapest available model for the task
    • C. Lets Claude pick the best model per task automatically
    • D. Uses the model defined in the parent subagent's config
  20. Subagent config file What does the `description` field in a subagent config control?

    • A. The text shown in the UI when the subagent is running
    • B. When Claude decides to use the subagent
    • C. The instructions the subagent follows while working
    • D. The summary format the subagent returns to the main agent

…và 35 câu nữa trong bản đề thi thử đầy đủ (55 câu) — mở tab “Đề thi thử” trên trang để làm toàn bộ, có chấm điểm & giải thích.