Mục tiêu học tập
Sau bài này, bạn sẽ có thể:- ✅ Giải thích subagent là gì và cơ chế forked context hoạt động như thế nào
- ✅ Sử dụng thành thạo 3 built-in subagents: general-purpose, Explore, Plan
- ✅ Tạo custom subagent qua lệnh /agents với tools, scope, và system prompt riêng
- ✅ Phân biệt khi nào nên dùng subagent thay vì để main agent xử lý trực tiếp
- ✅ Customize subagent nâng cao: persistent memory, preloaded skills, tool restrictions
Mở đầu: “You get the answer without the journey”
Hãy tưởng tượng bạn vừa được assign vào một codebase mới — một hệ thống e-commerce mà team vừa mua lại. Sếp cần biết ngay: “Authentication endpoint nằm ở đâu?” Bạn mở Claude Code và hỏi thẳng. Không có subagent, Claude bắt đầu một cuộc hành trình khám phá:- Đọc package.json để hiểu dependencies — 1.200 token
- Scan src/ với glob pattern để tìm file liên quan — 2.400 token
- Đọc src/app.ts, src/server.ts, src/routes/index.ts — 4.100 token
- Grep “auth” toàn project — 3.800 kết quả, mỗi hit load vào context — 6.200 token
- Đọc thêm 8 file middleware để trace request flow — 7.300 token
- Cuối cùng: “Endpoint nằm ở src/api/auth/login.ts dòng 42”
Subagent là gì?
Subagent là một specialized agent mà Claude Code spawn ra để xử lý một task cụ thể. Điểm khác biệt then chốt so với main agent: subagent chạy trong forked context window riêng — hoàn toàn tách biệt với context window của bạn.Cơ chế hoạt động
3 thành phần cốt lõi
| Thành phần | Mô tả |
|---|---|
| Forked context | Subagent có context window riêng (cũng 200k token), độc lập hoàn toàn với main |
| Custom system prompt | Defined trong config file — hướng chuyên môn của subagent |
| Task description | Parent viết dựa trên request của bạn — nhiệm vụ cụ thể cho lần chạy này |
Built-in Subagents
Claude Code đi kèm 3 built-in subagents sẵn dùng ngay — không cần cấu hình.| Subagent | Tools có sẵn | Use case | Context budget điển hình | Khi nào dùng |
|---|---|---|---|---|
| general-purpose | Bash, Read, Write, Grep, Web Search, MCP | Multi-step tasks: vừa explore vừa action | 50-150k token | Task phức tạp, không chắc scope, cần cả đọc lẫn sửa |
| Explore | Read, Grep, Glob (read-only) | Fast codebase searching, không write | 10-40k token | Tìm kiếm thuần túy: “function này ở đâu?”, “ai đang dùng API này?” |
| Plan | Read, Grep, Glob (read-only) | Research + analysis trong Plan Mode trước khi lên kế hoạch | 20-60k token | Khi bạn dùng Shift+Tab Plan Mode, cần Claude hiểu codebase trước khi plan |
- Chỉ cần tìm kiếm, không sửa gì → Explore
- Đang trong Plan Mode, cần research → Plan (Claude tự spawn)
- Cần cả research lẫn thực thi → general-purpose
Tạo custom subagent
Ngoài 3 built-in, bạn có thể tạo subagent chuyên biệt cho nhu cầu riêng của project.Cách tạo qua /agents
Output: file markdown với YAML frontmatter
Subagent được lưu dưới dạng markdown file tại .claude/agents/your-agent.md:Scope: project-level vs user-level
| Scope | Lưu ở | Ai thấy | Khi nào chọn |
|---|---|---|---|
| Project | .claude/agents/ (check vào repo) | Cả team | Subagent liên quan đến project cụ thể (e.g., check business rules của project đó) |
| User | ~/.claude/agents/ | Chỉ bạn | Subagent dùng được mọi project (e.g., security checker tổng quát) |
Subagent vs Main Agent: Khi nào dùng cái nào?
| Tiêu chí | Subagent | Main Agent |
|---|---|---|
| Context window | Forked — riêng biệt, bị discard sau khi xong | Shared — tích lũy suốt session |
| Visibility | Bạn chỉ thấy summary, không thấy journey | Bạn thấy từng tool call, từng file đọc |
| Best for | Exploration, answer-only tasks, read-heavy work | Interactive tasks, multi-turn, cần steering |
| Steerability | Thấp — one-shot, không interrupt giữa chừng | Cao — bạn có thể can thiệp bất kỳ lúc nào |
| Chi phí inference | Separate inference (subagent chạy riêng) | Same inference session |
| Debug khi sai | Khó hơn — phải xem summary, không thấy steps | Dễ hơn — thấy từng bước |
| Phù hợp | ”Tìm X, trả về Y" | "Giúp tôi implement X, tôi cần xem quá trình” |
Ví dụ thực chiến: COBOL Modernization Case Study
Đây là ví dụ thực tế từ demo AWS Mainframe — một trong những ca phức tạp nhất về subagent workflow.Tình huống
Một công ty financial services có hệ thống credit card core được viết bằng COBOL từ thập niên 1980. Tổng repo ~100 file, trong đó 94 file COBOL thực sự, còn lại là build scripts và README cũ. Gần như 0 documentation, không ai trong team hiện tại biết COBOL. Mục tiêu: hiểu hệ thống và migrate sang Java — mà không làm mất bất kỳ business rule nào.Phase 1: Documentation từ subagent
Bước 1: Tạo custom subagent cobol-documentation-expert với CLAUDE.md chứa specialized instructions:- Đọc và phân tích 94 file COBOL
- Extract business rules từng module
- Tạo Mermaid diagrams cho data flow
- Viết plain-English explanation cho từng paragraph
Phase 2: Migration COBOL → Java
Với documentation sẵn có, Phase 2 dùng dual test harness — chạy song song GNU COBOL và JavaScript để verify output bit-for-bit:Case studies theo role
Backend Engineer — tìm deprecated function usage
Tình huống: Bạn cần deprecate function sendLegacyEmail() nhưng không biết nó đang được gọi ở bao nhiêu chỗ trong codebase 200k LOC.DevOps — phân tích log incident
Tình huống: Production alert lúc 3 giờ sáng. Log file đang có 50MB. Nhồi log vào main context là không tưởng.Architect — parallel review 5 modules
Tình huống: Trước khi kick off Q2 refactor, bạn cần architectural review của 5 service riêng biệt.Frontend Engineer — WCAG accessibility audit
Tình huống: Design system có 30 components. Cần verify WCAG 2.1 AA compliance trước khi launch.Open Source Maintainer — triage incoming issues
Tình huống: Repo nhận 20 issues mới mỗi tuần. Triage thủ công tốn 2 giờ.Customization nâng cao
Persistent memory
Mặc định, subagent context bị discard sau mỗi lần chạy. Với persistent memory, subagent retain state across conversations — hữu ích cho long-running workflows trải dài nhiều sessions:Preload skills
Thêm skill key trong frontmatter để subagent tự load skill khi khởi động:Tool restrictions — subagent read-only
Một trong những customization quan trọng nhất: giới hạn tools để subagent không thể làm gì ngoài phạm vi cho phép.Custom system prompt — focus chuyên môn
System prompt quyết định “tính cách” và expertise của subagent. Ví dụ 3 hướng: Security focus:Anti-patterns
Spawn subagent cho task cần interactive back-and-forth
Subagent là one-shot: nó nhận task, chạy, trả về result, xong. Không có cơ chế để bạn interrupt giữa chừng và nói “khoan, đổi hướng.” Nếu task cần: “Đọc file A, hỏi tôi về option X hay Y, rồi tiếp tục” → đây không phải task cho subagent. Để main agent xử lý để bạn có thể steer.Custom subagent có ALL tools — mất đi ý nghĩa tách biệt
Không check .claude/agents/ vào repo
Bạn tạo security-checker subagent, dùng mỗi ngày. Teammate mới join, clone repo, chạy Claude Code — subagent đó không có. Họ không biết nó tồn tại, tự làm lại từ đầu, inconsistent với cách bạn làm. Fix: Luôn commit .claude/agents/ vào repo. Đây là team tooling, không phải personal preference.Spawn subagent cho task tiny dưới 5 phút
Spawn subagent có overhead: khởi tạo context mới, load system prompt, setup tools. Nếu task chỉ mất 30 giây — “file này có bao nhiêu dòng?” — overhead spawn lớn hơn task. Quy tắc ngón tay cái: Task mà main agent làm xong trong 1-2 tool call → không cần subagent.Forget rằng main agent không “thấy” journey của subagent → khó debug
Nếu subagent trả về kết quả sai, bạn chỉ thấy summary sai — không thấy nó đã đọc file nào, grep gì, hiểu gì sai. Debug cực khó. Cách phòng tránh:- Nếu summary critical, ask Claude verify một sample cụ thể sau khi nhận
- Với task quan trọng, dùng main agent lần đầu để “thấy” journey, sau mới convert sang subagent workflow khi đã tin tưởng
- Viết system prompt của custom subagent thật cụ thể — ambiguous instructions dẫn đến ambiguous results
Mẹo nâng cao
Parallel subagents: 4 cái cùng lúc = 4x throughput
Subagent chain: A research → B implement
Pattern mạnh cho complex workflows:Chọn đúng built-in cho task
Không chắc scope → general-purpose (safe default) Pure search → Explore (nhanh hơn, focused hơn) Đang trong Plan Mode → Plan (Claude tự dùng khi cần) Kết hợp research + action → general-purposeSubagent + skill combo cho specialized workflow
Verify subagent output khi critical
Áp dụng ngay
Bài tập 1 (15 phút): Spawn Explore subagent trên project của bạn
Mở Claude Code trong project bạn đang làm, thử:- Mất bao nhiêu thời gian?
- Context window của bạn tăng thêm bao nhiêu? (gõ /context trước và sau)
- Summary có đủ chính xác không?
- Nếu summary thiếu chi tiết, thử refine task description cho cụ thể hơn.
Bài tập 2 (25 phút): Tạo custom subagent cho project
Chọn 1 trong 2 và tạo qua /agents: Option A — Code Reviewer:- Purpose: Review code changes theo coding standards của project
- Tools: Read, Grep, Glob (read-only)
- System prompt focus: consistency với existing patterns, naming conventions, test coverage
- Purpose: Scan code changes cho security vulnerabilities
- Tools: Read, Grep, Glob (read-only)
- System prompt focus: OWASP Top 10, input validation, authentication issues
- Check file được tạo tại .claude/agents/ — đọc frontmatter và system prompt
- Thử dùng: “Spawn [tên subagent] để review file [file bạn vừa edit]”
- Điều chỉnh system prompt nếu kết quả chưa đủ specific
Tóm tắt bài học
🎯 Subagent = forked context — chạy trong context window riêng, trả về chỉ summary, discard toàn bộ intermediate work. Main context của bạn không bị nhồi hành trình khám phá. 🎯 3 built-in sẵn dùng: Explore (search-only), Plan (Plan Mode research), general-purpose (explore + action). Chọn Explore cho pure search, general-purpose khi không chắc scope. 🎯 Custom subagent qua /agents: YAML frontmatter + markdown system prompt, lưu tại .claude/agents/ (project-level) hoặc ~/.claude/agents/ (user-level). Luôn commit project-level agents vào repo. 🎯 Subagent là one-shot — không phù hợp cho interactive tasks cần multi-turn steering. Dùng khi task rõ ràng đầu vào/đầu ra, không cần bạn can thiệp giữa chừng. 🎯 Parallel subagents = throughput multiplier — 4 subagents chạy song song thay thế 1 sequential session dài gấp 4 lần, giữ main context gọn.Bài tiếp theo
Bạn đã biết cách dùng subagent để tách context và chạy parallel. Nhưng có một cơ chế khác để mở rộng Claude Code: Skills — reusable workflows bạn định nghĩa một lần và dùng lại nhiều lần bằng slash command. Điểm khác biệt then chốt: Skill không fork context, không chạy parallel — nó load instructions vào main conversation và bạn vẫn thấy toàn bộ execution. Đây là đánh đổi ngược lại so với subagent, phù hợp cho workflow khác nhau. Bài 2.9 sẽ đi sâu vào Skills: cách tạo, khi nào dùng skill vs subagent vs MCP, và cách kết hợp cả ba để build extension ecosystem mạnh nhất cho workflow của bạn. Cross-references:- Bài 2.5 — Subagent là một trong 5 chiến thuật tiết kiệm context (chiến thuật “outsource exploration”)
- Bài 2.6 — Dùng subagent làm code reviewer trước khi commit
- Bài 2.9 — Skill vs subagent: hai sides of the same coin (slash command không fork context vs có fork)
- Bài 2.10 — Subagent kết hợp MCP: mở rộng tools available cho subagent
Tài liệu tham khảo
- Introduction to Subagents — Dedicated course, Anthropic Skilljar
- Claude Code: Subagents documentation — Official docs
- COBOL Modernization demo — AWS Mainframe case study
- Lệnh trong session: /agents — gõ trực tiếp trong Claude Code để tạo hoặc manage subagents
- Transcript “The future of agentic coding” — Boris Cherny về skills vs subagents: “Two sides of same thing — slash commands without forked context, sub-agents with”