Skills → Sub-Agents: Cách Biến Skill Thành Agent Tự Động (2026)

[IMAGE: Claude Code skills and sub-agents pipeline diagram showing two directions: skill-to-agent fork and agent-loading-skills — claude code skills sub agents pipeline architecture]

Claude Code skills và sub-agents là hai tính năng mạnh nhất trong bộ công cụ tự động hóa của Anthropic. Nhưng chúng thực sự khác nhau như thế nào, và quan trọng hơn, kết hợp chúng ra sao? Theo Stack Overflow Developer Survey 2025 (n=33.662), 84% developer đang dùng AI tools mỗi ngày — nhưng chưa đến 20% biết cách tạo pipeline tự động với skills và sub-agents cùng nhau.

Mình đã thử nghiệm cả hai hướng kết hợp này khi xây dựng workflow viết blog cho ongboit.com. Pipeline gồm researcher, writer, reviewer chạy tuần tự — mỗi agent được “nạp” skills phù hợp trước khi bắt đầu. Kết quả giảm được khoảng 40% thời gian so với để Claude ôm hết tất cả trong một context.

TL;DR

Skills và sub-agents kết hợp theo 2 hướng: (1) context: fork — skill chạy trong context riêng của sub-agent thay vì main context; (2) skills: field — sub-agent tự nạp skills vào system prompt lúc khởi động. Sub-agents không kế thừa skills từ parent — phải khai báo tường minh. Không được phép lồng sub-agent trong sub-agent. Pipeline thực tế: reviewer agent (read-only, plan mode) nhận security-checklist skill từ frontmatter, trả findings về main Claude để fix.

2
Hướng kết hợp skills + sub-agents

84%
Developer dùng AI tools hàng ngày (SO 2025)

0
Lớp lồng sub-agent cho phép (không nesting)

95%
Context capacity kích hoạt auto-compaction

Bài này là cầu nối giữa L5 (Skills) và L6 (Orchestration) trong lộ trình Claude Code. Nếu bạn đã biết skills là gì và sub-agents là gì, đây là lúc ghép chúng lại.

Skills Và Sub-Agents Khác Nhau Thế Nào?

Skills là reusable prompts chạy trong main context, còn sub-agents là các AI assistants độc lập có context window riêng. Theo tài liệu chính thức Anthropic, mỗi sub-agent có model, tools, permissions, và memory scope riêng biệt — hoàn toàn tách biệt với parent agent.

Nhầm lẫn hai khái niệm này rất dễ xảy ra. Cả hai đều dùng file Markdown với YAML frontmatter, đều lưu trong thư mục .claude/. Nhưng cách hoạt động khác nhau hoàn toàn.

Hãy nhìn vào bảng so sánh này trước. Nó sẽ giúp bạn hình dung rõ hơn trước khi đi vào cách kết hợp:

Thuộc tính Skills Sub-Agents
Vị trí lưu .claude/skills/ .claude/agents/
Context Chạy trong main context Context window riêng biệt
Tools Dùng tools của main context Khai báo tools riêng (có thể hạn chế)
Model Kế thừa từ parent Chỉ định riêng (vd: Haiku)
Mục đích Reusable workflow, domain knowledge Isolated execution, parallel tasks
Kế thừa skills N/A Không tự động — phải khai báo tường minh
Nesting Không áp dụng Không cho phép lồng sub-agent
Auto-compaction Không Có (kích hoạt ở 95% capacity)

Điểm quan trọng nhất trong bảng trên: sub-agents không kế thừa skills từ parent. Nếu main context của bạn đang dùng skill api-conventions, sub-agent không tự động biết điều đó. Bạn phải khai báo lại trong frontmatter của sub-agent.

Điều này ban đầu mình thấy hơi phiền. Nhưng nhìn lại, nó có lý. Mỗi sub-agent cần được kiểm soát tường minh. Bạn không muốn một sub-agent “vô tình” nhận được kiến thức nó không cần — vừa tốn context, vừa rủi ro về permissions.

So sánh chi tiết hơn về ba khái niệm skills, hooks, và MCP, xem thêm bài skills vs hooks vs MCP trên ongboit.com.

[IMAGE: Side-by-side comparison of skills folder vs agents folder in .claude directory structure — claude code skills vs sub-agents file structure comparison]

Cách 1: Skill Chạy Trong Sub-Agent (context: fork)?

Hướng đầu tiên là thêm context: fork vào frontmatter của skill. Khi Claude chạy skill này, thay vì thực thi trong main context, nó sẽ spawn một sub-agent mới và inject nội dung skill vào system prompt của sub-agent đó. Cách này phù hợp khi skill cần đọc nhiều file mà bạn không muốn “ô nhiễm” main context.

Nhìn vào cấu trúc file skill bình thường trước. Một skill thông thường không có context: fork sẽ chạy trực tiếp trong main context:

---
name: code-review
description: "Review code quality in main context"
---

Review the code for quality issues.
Check naming, structure, and comments.

Bây giờ thêm context: fork để skill chạy trong sub-agent riêng:

---
name: deep-review
description: "Deep code review with isolated context"
context: fork
agent: researcher
---

Review the code for security issues, performance problems,
and style violations. Return a structured findings report.

Trường agent: researcher là tùy chọn. Nếu bạn khai báo nó, Claude sẽ dùng agent có tên researcher trong .claude/agents/ để chạy skill này. Nếu bỏ qua, Claude tự sinh một sub-agent mới với default settings.

Khi Nào Nên Dùng context: fork?

Dùng context: fork khi skill của bạn cần đọc nhiều file hoặc thực hiện tác vụ dài. Nếu skill review phải đọc 20 file để phân tích, toàn bộ 20 file đó sẽ vào main context — lãng phí và chậm. Với context: fork, 20 file đó nằm trong context của sub-agent, main context vẫn gọn.

Lưu ý: Khi skill dùng context: fork, nội dung skill được inject vào system prompt của sub-agent, không phải user turn. Điều này có nghĩa là sub-agent “biết” skill từ đầu, trước khi nhận task cụ thể.

Checkpoint: Sau khi tạo skill với context: fork, bạn gọi nó bình thường bằng cách tag skill trong prompt. Claude tự động hiểu cần fork context và spawn sub-agent. Bạn không cần làm gì thêm.

[IMAGE: Diagram showing skill with context fork spawning a sub-agent with skill content injected into system prompt — claude code context fork skill sub agent injection]

Cách 2: Sub-Agent Load Skills (skills: field)?

Hướng thứ hai ngược lại: thay vì skill quyết định “tôi muốn chạy trong sub-agent”, thì sub-agent khai báo “tôi muốn được nạp những skills này”. Field skills trong frontmatter của sub-agent nhận một mảng tên skills. Toàn bộ nội dung các skills đó được inject vào system prompt của sub-agent khi nó khởi động.

Đây là ví dụ một sub-agent reviewer với skills được nạp từ đầu:

---
name: reviewer
description: "Review codebase for security and API conventions"
model: haiku
tools: [Read, Glob, Grep]
disallowedTools: [Write, Edit, Bash]
permissionMode: plan
skills:
  - security-checklist
  - api-conventions
maxTurns: 10
memory: true
---

You are a code reviewer. Read the specified files and return
a structured report of findings. Do not edit any files.

Khi sub-agent reviewer này được spawn, Claude tự động đọc nội dung của security-checklist.mdapi-conventions.md từ .claude/skills/, rồi inject toàn bộ vào system prompt. Reviewer “biết” mọi tiêu chuẩn bảo mật và API conventions ngay từ đầu.

Sự Khác Biệt Giữa “Inject” và “Available”

Nhiều người nhầm tưởng skills: field chỉ “làm cho skill available” — nghĩa là agent có thể gọi khi cần. Thực tế khác: toàn bộ nội dung skill được inject vào system prompt ngay lập tức. Agent không cần gọi skill, nó đã “biết” skill từ trước. Đây vừa là ưu điểm (luôn sẵn sàng), vừa là hạn chế (tốn context space).

Vì skills được inject đầy đủ, hãy chú ý khi bạn khai báo nhiều skills nặng. Một sub-agent với 5 skills dài mỗi skills 500 words sẽ có system prompt rất lớn trước khi làm bất cứ việc gì. Mình thường giữ mỗi skill dưới 300 words và không khai báo quá 3 skills cho một sub-agent.

[IMAGE: Diagram showing sub-agent startup loading skills array into system prompt with full content injection — claude code sub agent skills field frontmatter injection]

Pipeline Thực Tế: Review Và Fix Code Tự Động?

Kết hợp cả hai hướng vào một pipeline thực tế. Đây là pattern mình dùng nhiều nhất: user yêu cầu review và fix module code, Claude main tự động điều phối qua hai giai đoạn. Theo Pragmatic Engineer Survey 2026 (n=906), 46% developer chọn Claude Code là AI coding tool yêu thích — pipeline automation là lý do hàng đầu.

Nhìn vào flow cụ thể:

# User prompt:
"Review and fix the auth module"

# Claude main doc luong:

Step 1: Main Claude doc prompt
Step 2: Delegate cho sub-agent "reviewer"
        - reviewer co: skills: ["security-checklist", "api-conventions"]
        - tools: [Read, Glob, Grep] -- read-only
        - permissionMode: plan
        - maxTurns: 10
Step 3: Reviewer phan tich auth module, tra ve findings
Step 4: Main Claude nhan findings
Step 5: Main Claude implement fixes truc tiep
        # (hoac delegate cho "fixer" sub-agent neu can isolation)
Step 6: Main Claude chay tests de verify

Điểm mấu chốt của pipeline này: reviewer chỉ có quyền đọc, không thể sửa file. Kể cả khi Claude reviewer “muốn” fix một lỗi nó thấy, nó không thể vì không có tools Write hay Edit. Đây là separation of concerns thực sự, không phải chỉ là convention.

File Cấu Hình Cho Pipeline

Cấu trúc thư mục cho pipeline trên:

.claude/
├── agents/
│   └── reviewer.md          # sub-agent, read-only, plan mode
└── skills/
    ├── security-checklist.md # skill: OWASP top 10, injection, auth vulns
    └── api-conventions.md    # skill: REST naming, error codes, versioning

File reviewer.md (sub-agent) khai báo hai skills trong frontmatter. Khi pipeline khởi động, reviewer được spawn với đầy đủ kiến thức từ cả hai skills đó ngay từ turn đầu tiên.

Muốn thêm isolation cho giai đoạn review? Dùng context: fork trong skill thay vì để main Claude gọi agent trực tiếp:

---
name: auth-review
description: "Review auth module in isolated context"
context: fork
agent: reviewer
---

Analyze the auth module thoroughly.
Focus on: JWT handling, session management, input validation.
Return a structured JSON report with severity levels.

Với cách này, khi user nói “review auth module”, Claude tự động fork context, dùng reviewer agent đã được nạp security skills, thực hiện analysis trong bubble riêng, rồi trả về findings cho main context. Main context không bị “ô nhiễm” bởi hàng chục file auth module.

Mình đã dùng pattern này cho blog workflow trên ongboit.com. Researcher agent (Haiku, rẻ) đọc topic brief và research data, trả về structured outline. Writer agent (Sonnet) nhận outline đó và viết nội dung. Mỗi giai đoạn trong context riêng, không ảnh hưởng nhau.

[IMAGE: Flowchart of review-fix pipeline showing main Claude orchestrator delegating to reviewer sub-agent then implementing fixes — claude code review fix pipeline orchestration flow]

Khi Nào Dùng Skills, Khi Nào Dùng Sub-Agents?

Câu hỏi này mình nhận được nhiều nhất khi chia sẻ về workflow ongboit.com. Không có câu trả lời tuyệt đối — nhưng có framework để quyết định. Dựa trên kinh nghiệm thực tế và cách Nick Saraev (1,1 triệu lượt xem khóa Claude Code) mô tả, skills là “kiến thức”, sub-agents là “executor” có giới hạn rõ ràng.

Pattern Dùng Khi Ví Dụ
Skill đơn thuần Reusable workflow, context không quan trọng Format commit message theo convention
Sub-agent đơn thuần Isolated task, cần model khác, permissions khác Haiku agent đọc file logs, trả summary
Skill + context: fork Skill cần isolation khỏi main context Deep code review đọc nhiều file
Agent + skills: field Agent cần domain knowledge từ đầu Reviewer agent biết security checklist
Agent Teams Nhiều agents cần chạy song song 3 agents test song song: unit, integration, e2e

Heuristic đơn giản để quyết định: nếu task cần đọc nhiều hơn 10 file hoặc chạy quá 5 turns, dùng sub-agent để giữ main context sạch. Nếu task cần kiến thức domain cụ thể ngay từ đầu, inject skills vào agent đó.

Còn một trường hợp hay bị bỏ qua: tiết kiệm chi phí. Sub-agent với model Haiku rẻ hơn Sonnet đáng kể cho các task đơn giản như tìm kiếm, đọc file. Mình chia sẻ chi tiết cách tính toán trong bài tiết kiệm token Claude Code.

Permission Modes: Sub-agents hỗ trợ permissionMode: plan (chỉ đề xuất, không thực thi) và permissionMode: default (thực thi bình thường). Reviewer agents nên luôn dùng plan kết hợp với disallowedTools: [Write, Edit, Bash]. Xem chi tiết trong bài permission modes Claude Code.

[IMAGE: Decision tree flowchart for choosing between skills, sub-agents, context fork, or skills field pattern — claude code skills sub agents decision guide when to use]

Câu Hỏi Thường Gặp

Sub-agent có thể spawn sub-agent khác không?

Không. Claude Code không cho phép nesting sub-agents. Một sub-agent không thể spawn sub-agent khác. Chỉ có main context (parent) mới có quyền tạo sub-agents. Giới hạn này là intentional — ngăn pipeline trở nên quá phức tạp và khó debug. Nếu bạn cần nhiều tầng xử lý, thiết kế pipeline tuần tự ở main context thay vì lồng agents.

Skills trong .claude/skills/ global có được inject vào sub-agent không?

Không tự động. Skills ở cấp project (.claude/skills/) chỉ được inject vào sub-agent khi bạn khai báo tường minh trong field skills: của sub-agent frontmatter. Sub-agent không kế thừa bất kỳ skills nào từ parent hay từ CLAUDE.md. Đây là quy tắc quan trọng nhất khi thiết kế pipeline.

maxTurns là gì và nên đặt bao nhiêu?

maxTurns giới hạn số lượt tương tác tối đa của sub-agent trước khi trả kết quả về parent. Mình thường đặt 10 cho reviewer agents (đủ để đọc nhiều file) và 20 cho writer agents (cần nhiều turns hơn để viết). Nếu sub-agent chưa xong khi hết maxTurns, nó trả về kết quả partial. Đặt quá thấp gây incomplete results, đặt quá cao tốn chi phí không cần thiết.

Có thể dùng MCP tools trong sub-agent không?

Có. Sub-agents hỗ trợ MCP tools như bất kỳ tool nào khác. Khai báo trong field tools: của frontmatter. Tuy nhiên, sub-agent chỉ có quyền dùng MCP tools mà parent context đã có quyền truy cập. Sub-agent không thể tự cấp thêm quyền cho mình. Xem cách cài MCP trong bài Claude Code skills và MCP.

context: fork và sub-agent thường khác nhau như thế nào?

Khi dùng context: fork không chỉ định agent:, Claude tạo một sub-agent tạm thời với default settings. Khi chỉ định agent: reviewer, Claude dùng file .claude/agents/reviewer.md với cấu hình tùy chỉnh (model, tools, permissions, skills). Cho production workflows, luôn chỉ định agent cụ thể để kiểm soát tường minh. Default agent tiện lợi nhưng thiếu khả năng audit.

Sub-agent có auto-compaction như main context không?

Có. Mỗi sub-agent có context window riêng và hỗ trợ auto-compaction khi đạt 95% capacity. Khi compaction xảy ra, sub-agent tự tóm tắt conversation history để giải phóng context. Điều này đặc biệt hữu ích cho sub-agents chạy dài như researcher đọc nhiều file. Compaction xảy ra trong bubble của sub-agent, không ảnh hưởng đến main context.

Kết Luận

Skills và sub-agents không cạnh tranh nhau. Chúng bổ sung cho nhau theo hai hướng rõ ràng: context: fork cho phép skill thoát khỏi main context khi cần isolation, còn skills: field cho phép sub-agent được “giáo dục” ngay từ khi khởi động. Hiểu được sự khác biệt này là bước chuyển từ dùng skills đơn lẻ sang xây pipeline tự động thực sự.

Ba điều mình muốn bạn nhớ sau bài này. Một: sub-agents không kế thừa skills — luôn khai báo tường minh. Hai: không có nesting — chỉ main context mới spawn được sub-agents. Ba: inject skills = toàn bộ nội dung vào system prompt, không phải chỉ “làm available”.

Nếu bạn mới bắt đầu, hãy đọc bài Claude Code là gì để hiểu nền tảng trước khi tối ưu pipeline. Bước tiếp theo tự nhiên là xây Agent Teams — nhiều AI sessions giao tiếp peer-to-peer thay vì chỉ báo cáo về parent. Mình đã viết về sub-agents pattern trong bài Claude Code sub-agents chi tiết, bao gồm cả cách CLAUDE.md ảnh hưởng đến toàn bộ pipeline. Hoặc nếu bạn muốn học cách tạo skill từ đầu, bài tạo Claude Code skill là điểm khởi đầu tốt.


Similar Posts