← Lập trình với Claude Code

Bài 8 · Nâng cao · 24 phút· Cập nhật 11/06/2026

Subagents - trợ lý chuyên trách

Biên soạn bởi Nguyễn Anh Tuấn

Giao việc cho subagent có ngữ cảnh riêng: khi nào dùng, .claude/agents, giới hạn công cụ/model, chạy song song & cô lập.

Có những việc phụ làm ngập ngữ cảnh chính bằng thứ bạn sẽ không cần giữ: lục 30 file để tìm một chỗ gọi API, đọc cả núi log để truy lỗi, review một loạt thay đổi. Subagent nhận việc đó, làm trong cửa sổ riêng, rồi chỉ trả về một bản tóm tắt.

  • Giữ ngữ cảnh: khảo sát/đọc/review xảy ra ở cửa sổ riêng, ngữ cảnh chính sạch.
  • Giới hạn công cụ: vd reviewer chỉ-đọc, không sửa được file.
  • Chuyên biệt & tiết kiệm: system prompt riêng cho từng việc; chạy bằng model rẻ (Haiku) khi hợp.

Đã có sẵn vài subagent

Claude Code kèm các subagent dựng sẵn như Explore (khảo sát nhanh) và Plan (lập kế hoạch) - Claude tự dùng khi hợp. Bạn còn tạo được subagent của riêng mình cho dự án.

So sánh: không có subagent thì mọi “rác” trộn vào ngữ cảnh chính; có subagent thì nó được cô lập.

Không subagent

Ngữ cảnh chính phình lên vì 30 file + log + kết quả tìm kiếm. Việc chính bị “loãng”, mau đầy, Claude dễ đãng trí.

Có subagent

Subagent “ngốn” 30 file trong cửa sổ riêng, chỉ trả về kết luận gọn. Ngữ cảnh chính vẫn sạch để làm tiếp việc lớn.

claude - ~/cua-hang-x

Review các thay đổi gần đây của tôi.

⤷ giao cho subagent: code-reviewer (ngữ cảnh riêng)

… subagent đọc 12 file, chạy linter, soi diff (trong cửa sổ của nó) …

Tóm tắt từ reviewer: 2 vấn đề - (1) thiếu kiểm tra null ở api.ts:42; (2) hàm trùng logic với utils.ts. Còn lại ổn.

Thử chuyển giữa hai chế độ để thấy ngữ cảnh chính thay đổi ra sao:

Nhiệm vụ: Điều tra luồng auth - Đọc 5 file để hiểu luồng xác thực, tìm chỗ gây lỗi timeout.

(Số token là ước lượng minh hoạ, không phải con số chính xác của mô hình.)

Ngữ cảnh chính đang dùng

8,000 / 30,000 token 27%

Các file nạp vào ngữ cảnh chính

  • src/auth/authService.ts 1,800 tok
  • src/auth/tokenManager.ts 1,200 tok
  • src/middleware/authMiddleware.ts 950 tok
  • src/api/userRoutes.ts 1,100 tok
  • src/config/authConfig.ts 450 tok

Nền: 2,500 tok (lịch sử chat + system prompt) - cộng vào cả hai chế độ.

  • Subagent có CỬA SỔ NGỮ CẢNH RIÊNG, tách khỏi cuộc trò chuyện chính.
  • Nó chỉ trả về KẾT QUẢ (tóm tắt), không đổ toàn bộ quá trình vào ngữ cảnh chính.
  • Đây chính là cách giữ phiên dài không bị đầy ngữ cảnh (xem bài “Cách hoạt động”).

Mỗi subagent là một file markdown: frontmatter khai báo metadata, phần thân là system prompt định hình hành vi của nó:

.claude/agents/code-reviewer.md

---
name: code-reviewer
description: Review code về chất lượng, lỗi tiềm ẩn và bảo mật. Dùng khi người dùng nhờ review thay đổi hoặc một file.
tools: Read, Grep, Glob
model: sonnet
---

Bạn là người review code cẩn thận. Chỉ ĐỌC, không sửa.
Tập trung: lỗi tiềm ẩn, rủi ro bảo mật, code khó đọc, trùng lặp.
Trả lời ngắn gọn bằng tiếng Việt, nêu file + dòng cụ thể,
xếp theo mức độ nghiêm trọng. Không bàn chuyện ngoài phạm vi.
  • Vị trí: .claude/agents/<tên>.md (dự án) hoặc ~/.claude/agents/<tên>.md (cá nhân).
  • Chỉ name và description là bắt buộc; tools, model… là tuỳ chọn.
  • Phần thân = system prompt: subagent CHỈ nhận prompt này (không có toàn bộ system prompt của Claude Code).
  • Lệnh /agents mở giao diện tạo & quản lý subagent (tạo qua đây có hiệu lực ngay).

Hai chỗ tinh chỉnh quan trọng nhất là công cụmodel:

  • tools: danh sách CHO PHÉP (allowlist). Bỏ trống = kế thừa mọi công cụ của phiên chính.
  • disallowedTools: danh sách CẤM - kế thừa hết trừ những cái liệt kê (vd cấm Write, Edit).
  • model: sonnet / opus / haiku / một model-id, hoặc inherit (mặc định = giống phiên chính).

Reviewer nên chỉ-đọc

Cho subagent reviewer chỉ Read, Grep, Glob (không Edit/Write) để nó chỉ nhận xét, không tự sửa - tránh “vừa đá bóng vừa thổi còi”. Việc đơn giản, lặp nhiều thì đặt model: haiku cho nhanh & rẻ; việc khó thì opus.

Claude tự giao việc cho subagent khi việc khớp description (hoặc bạn gọi rõ). Trong một phiên, nhiều subagent có thể chạy song song cho các việc phụ độc lập.

  • Hợp khi: khảo sát/nghiên cứu, đọc log, review - việc “ngốn ngữ cảnh” và cần cô lập.
  • description rõ ràng = Claude giao đúng việc; mơ hồ = giao sai hoặc bỏ sót.
  • Đừng lạm dụng: việc nhỏ, cần qua lại nhiều với bạn thì làm thẳng ở ngữ cảnh chính.

Giới hạn cần biết

Subagent sống trong một phiên. Muốn chạy nhiều phiên độc lập song song (vd nhiều tính năng cùng lúc) và theo dõi tập trung thì dùng background agents hoặc git worktree với nhiều phiên claude - bài cuối khoá sẽ nhắc. Tiếp theo: Hooks - tự động hoá tại các mốc vòng đời (tự format, tự test, chặn lệnh nguy hiểm).

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

Là một “trợ lý phụ” chuyên trách, chạy trong NGỮ CẢNH RIÊNG với system prompt riêng, quyền dùng công cụ riêng. Claude chính giao một việc phụ cho nó; nó làm độc lập rồi trả về một bản TÓM TẮT. Mọi “rác” trong quá trình làm (kết quả tìm kiếm, log, nội dung file) nằm trong cửa sổ của subagent, không làm bẩn ngữ cảnh chính.

Nhớ bài “Cách hoạt động”: cửa sổ ngữ cảnh có hạn và đầy dần. Việc như “đọc 30 file tìm chỗ gọi API” sẽ nhồi đầy ngữ cảnh chính bằng thứ bạn không cần giữ. Đẩy việc đó cho subagent: nó “ngốn” ngữ cảnh của riêng nó, rồi chỉ trả về câu trả lời gọn - ngữ cảnh chính vẫn sạch để làm tiếp.

Bài Cách Claude Code hoạt động - cửa sổ ngữ cảnh →

Mỗi subagent là MỘT file markdown: .claude/agents/<tên>.md (dự án - commit cho cả nhóm) hoặc ~/.claude/agents/<tên>.md (cá nhân). Frontmatter YAML khai báo name, description (bắt buộc), kèm tuỳ chọn tools, model…; phần thân markdown là SYSTEM PROMPT định hình hành vi của subagent. Hoặc dùng lệnh /agents để tạo qua giao diện.

Nó đọc trường description của từng subagent và giao khi gặp việc khớp. Vì thế description phải nêu rõ subagent dùng để làm gì. Bạn cũng có thể gọi rõ ràng. Có sẵn vài subagent dựng sẵn (vd Explore để khảo sát, Plan để lập kế hoạch).

Có. Skill mở rộng việc Claude làm TRONG ngữ cảnh chính (cùng cửa sổ). Subagent làm việc trong CỬA SỔ RIÊNG rồi trả về tóm tắt. Việc phụ ngốn nhiều ngữ cảnh, cần cô lập, hoặc cần giới hạn công cụ/model → subagent. Một prompt/quy trình bạn muốn chạy ngay tại chỗ → skill/command.

Bài Agent Skills →

Trong MỘT phiên, Claude có thể dùng nhiều subagent (kể cả song song) cho các việc phụ. Nhưng subagent sống trong một phiên. Muốn chạy NHIỀU PHIÊN độc lập song song và theo dõi tập trung thì dùng cách khác (background agents, hoặc git worktree với nhiều phiên claude) - sẽ nhắc ở bài cuối.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

Lợi ích cốt lõi của việc subagent có “ngữ cảnh riêng” là gì?

  1. 1

    Tạo bằng /agents

    /agents → tạo một subagent cá nhân “code-reviewer” chỉ-đọc (chỉ chọn công cụ đọc). Đặt description rõ ràng.

    Hoàn thành khi: Có file ~/.claude/agents/code-reviewer.md; subagent chỉ có công cụ đọc (Read/Grep/Glob).

  2. 2

    Giao việc thật

    Nhờ Claude: “Review các thay đổi gần đây của tôi”. Quan sát nó có giao cho subagent code-reviewer không.

    Hoàn thành khi: Claude giao việc cho subagent (theo description); kết quả trả về là bản tóm tắt review, ngữ cảnh chính không bị ngập file.

  3. 3

    Vì sao ngữ cảnh riêng?

    Bằng lời: một việc “đọc 40 file log tìm nguyên nhân lỗi” nên làm ở ngữ cảnh chính hay subagent? Vì sao?

    Hoàn thành khi: Subagent - 40 file log sẽ nhồi đầy ngữ cảnh chính; để subagent “ngốn” rồi trả về kết luận gọn.

  4. 4

    Giới hạn công cụ

    Mở file subagent reviewer, đảm bảo nó KHÔNG có Edit/Write. Vì sao reviewer nên chỉ-đọc?

    Hoàn thành khi: Frontmatter tools chỉ gồm công cụ đọc; reviewer chỉ nên nhận xét, không tự sửa - tránh “vừa đá bóng vừa thổi còi”.

  5. 5

    Chọn model tiết kiệm

    Đặt model: haiku cho một subagent làm việc đơn giản, lặp nhiều. Vì sao hợp lý?

    Hoàn thành khi: Việc đơn giản không cần model mạnh nhất; Haiku nhanh & rẻ → tiết kiệm chi phí cho việc khối lượng lớn.