- Claude Code là agentic coding tool — có direct access vào file, terminal và codebase để tự làm việc, thay vì copy-paste qua lại như Claude.ai.
- Điểm khác biệt cốt lõi: nó chạy như một AI Agent = một LLM operating in a loop (real-time), có tools để tương tác với môi trường và đạt mục tiêu.
- Cơ chế: agentic loop 3 pha (Gather context → Take action → Verify results), context window được quản bằng compaction, tools chạy code khi cần, và 3 permission modes (Default · Auto-accept · Plan mode) cấu hình được.
- Cài đặt & surface: terminal (curl / PowerShell Invoke-RestMethod; Homebrew & winget không auto-update), VS Code, JetBrains, Desktop, hoặc web (claude.ai/code — chỉ GitHub repo); Claude chỉ truy cập thư mục chạy lệnh + mọi subfolder.
- Prompt: viết càng descriptive càng tốt; Shift+Tab cycle giữa Approval và Auto-accept; Plan Mode dùng read-only tools để phân tích codebase, hỏi clarifying questions rồi trả về kế hoạch chi tiết trước khi đụng code.
- Takeaway lớn nhất: workflow Explore → Plan → Code → Commit. Plan (read-only) để course-correct trước khi viết code; Code cần success criteria + tools + test suite; Commit thì chạy subagent code reviewer (fresh eyes, không bias) rồi tạo commit message theo style của mình.
- Quản lý context: /compact (nén, giữ nhớ) khi tiếp cùng feature · /clear (xoá sạch) khi sang feature mới tránh bias · /context để soi dung lượng. Tiết kiệm context: prompt cụ thể (mơ hồ tốn HƠN), tắt MCP server thừa (nạp hết tool) hoặc dùng Skills, và delegate cho subagent (context riêng, chỉ trả summary).
- Git workflow: code-reviewer subagent (read-only, check config vào repo cho cả team) review trước khi push; skill /commit-push-pr gộp commit·push·tạo PR một bước (có Slack MCP thì tự post link PR); claude --from-pr <số> resume session đã gắn với PR để xử lý review comment / build lỗi.
- CLAUDE.md = persistent memory của dự án: file Markdown ở root, Claude tự đọc mỗi session và nội dung được append vào prompt. Phân cấp project-level (root, commit cho team) vs user-level (config folder, preference riêng, xuyên mọi project). Tip: lưu correction lặp lại vào memory, tham chiếu docs bằng @file, nên bắt đầu KHÔNG có file rồi /init để giữ nó compact.
- Subagent: định nghĩa bằng Markdown + YAML frontmatter, tạo nhanh qua lệnh /agents → Create new agent (chọn scope, purpose, tools, color; Claude sinh name/description/prompt để biết khi nào gọi). Tuỳ biến: persistent memory (nhớ xuyên conversation) và preload skills qua key skill — LƯU Ý cả skill được nạp nguyên vào context, khác với skill ở hội thoại chính.
- MCP (Model Context Protocol) = open standard nối Claude Code với tool & data ngoài (database, app, repo). Thêm bằng claude mcp add — HTTP (remote) vs Stdio (local); quản bằng /mcp. Scope: Local (project+mình) · User (mọi project+mình) · Project (.mcp.json commit cho cả team). Context cost: server nạp tool definition dù không dùng → ưu tiên CLI (gh/aws, không định nghĩa thường trực) hoặc Skill; vượt 10% context tự bật tool search mode (kém tin cậy hơn).
- Hooks = kiểm soát tất định (deterministic): chạy command tại điểm lifecycle, LUÔN chạy (khác prompt chỉ 'đa số'). Cấu hình trong settings.json qua /hooks: event + matcher + command. 5 event: PreToolUse · PostToolUse · UserPromptSubmit · Stop · Notification. PostToolUse (matcher Edit|MultiEdit|Write) để auto-format & log; PreToolUse để chặn — exit 0 cho qua, exit 2 chặn (stderr feedback về Claude), code khác = lỗi non-blocking. Commit .claude/settings.json cho cả team; dùng CLAUDE_PROJECT_DIR trỏ script bất kể cwd.
Claude Code 101 là gì? Là khoá nhập môn về Claude Code — agentic coding tool của Anthropic — dạy cách để Claude tự đọc code, sửa file và chạy lệnh ngay trong môi trường dev của bạn. Đây là ghi chú tiếng Việt tóm tắt toàn khoá, thuật ngữ giữ nguyên tiếng Anh kèm chú thích.
TL;DR — Claude Code là một AI Agent biết lập trình: khác Claude.ai ở chỗ nó có direct access vào file/terminal/codebase và tự làm việc thay vì copy-paste. Lõi của "agent" = một LLM operating in a loop có tools. Dùng hiệu quả cần nhớ 3 điều: context window là working memory (không nhồi cả repo), nó hỏi permission trước khi hành động, và nó có thể sai nên phải luôn ở trong vòng review. Và takeaway lớn nhất của khoá: theo workflow Explore → Plan → Code → Commit — đừng nhảy thẳng vào code.
Claude Code là gì?
Claude Code = agentic coding tool (công cụ lập trình dạng agent): nó hiểu codebase, edit file, chạy lệnh terminal, và tích hợp với dev tools sẵn có để giúp bạn hoàn thành việc nhanh hơn.
Có mặt trên nhiều "cửa": terminal, Visual Studio Code, Claude Desktop app, web, và JetBrains IDEs.
Claude Code khác Claude.ai ở đâu?
Nếu đã dùng Claude.ai, bạn sẽ thấy khác biệt lớn: Claude.ai buộc bạn copy-paste code qua lại. Claude Code có direct access (truy cập trực tiếp) tới file, terminal và toàn bộ codebase → nó tự vào và làm, không cần bạn chép tay.
⭐ Điểm khác biệt cốt lõi: Claude Code hoạt động như một AI Agent.
AI Agent là gì? (khái niệm lõi)
AI Agent = phần mềm có thể tương tác với môi trường (environment) và thực hiện hành động (actions) để hoàn thành một mục tiêu (goal) định trước.
Về bản chất, nó vận hành bằng một LLM operating in a loop (mô hình ngôn ngữ chạy trong một vòng lặp) theo thời gian thực. AI Agent có thể được cấp tools, external services, hoặc thậm chí các AI Agent khác để đạt mục tiêu.
Nhịp của loop giống cách một người làm việc: nhìn → làm một việc → xem kết quả → nghĩ → làm tiếp, lặp đến khi xong. Bọc một LLM trong loop + cho nó tools là biến nó từ "chỉ nói" thành "làm được việc".
Claude Code làm được gì trong thực tế
- Đọc & hiểu codebase — nhờ giải thích một feature hoặc trace một bug xuyên suốt code.
- Sửa file xuyên project — refactor một function và update mọi file tham chiếu tới nó.
- Chạy lệnh terminal — build, chạy test, cài package, và dùng output để quyết định bước tiếp theo.
- Search web — tra documentation hoặc API reference mới nhất khi cần.
3 điều tâm niệm để dùng hiệu quả
- Context window — "working memory" (trí nhớ làm việc) của Claude. Chứa được nhiều nhưng không phải tất cả cùng lúc. Đây là chỗ tính "agentic" phát huy: Claude tự tìm chiến lược định vị câu trả lời trong codebase mà không load toàn bộ vào context.
- Nó hỏi permission — mặc định Claude Code xin phép trước khi chạy lệnh hoặc sửa file. Bạn luôn nắm quyền, dù thích kiểu hands-on hay hands-off.
- Nó có thể sai — như mọi công cụ, Claude Code không hoàn hảo: có thể hiểu nhầm ý, tạo bug, hoặc over-engineer. Ở trong vòng review giúp bắt lỗi sớm.
Áp dụng thực tế: "LLM in a loop, có tools, tự sai được" nghĩa là nên quản Claude Code như quản một junior engineer mới vào team: cấp context tốt, chốt success criteria rõ, review từng bước — chứ không giao khoán rồi tin tuyệt đối. Vì nó tự làm, rủi ro cũng tự nhân lên nếu buông tay.
Cơ chế bên trong: Agentic Loop
Claude Code khác app chat thông thường; hiểu agentic loop sẽ dùng nó hiệu quả hơn. Vòng lặp gồm 5 bước:
- Bạn nhập một prompt vào Claude Code.
- Claude gather context (thu thập ngữ cảnh cần) bằng cách tương tác với model — model trả về text hoặc một tool call mà Claude Code có thể thực thi.
- Take action — ví dụ sửa một file hoặc chạy một lệnh.
- Verify results — kiểm tra kết quả và xác định xem đã đạt đúng điều prompt đặt ra chưa.
- Đạt rồi → Claude kết thúc và chờ prompt tiếp theo. Chưa đạt → loop lại và thử tiếp cho tới khi kết quả hoàn chỉnh & verify được.
Gói gọn 3 pha: Gather context → Take action → Verify results. Xuyên suốt loop, bạn có thể add context, interrupt (ngắt), hoặc steer (lái) để dẫn Claude về đúng mục tiêu.
Context window & compaction
Claude có context window quyết định lưu và tham chiếu được bao nhiêu: hội thoại, nội dung file, output của lệnh, v.v. Khi chạm giới hạn, Claude Code thực hiện compaction — tự động quyết định bỏ hoặc tóm tắt phần nào để kéo context window về mức dùng được, rồi làm tiếp. ⚠️ Compaction là bản tóm lược → có thể làm rơi mất chi tiết.
Quản lý context: /compact · /clear · /context
Context = working memory của Claude. Mọi thứ — prompt bạn gõ, file Claude đọc, lệnh nó chạy, kết quả tool call nó nhận — đều chất vào context window. Không gian hữu hạn nên tối ưu cách dùng rất quan trọng.
3 lệnh cần thuộc:
/compact— nén thủ công mọi thứ tính tới thời điểm chạy lệnh. Hợp khi muốn giải phóng chỗ nhưng vẫn giữ trí nhớ về việc đã làm./clear— bắt đầu lại từ đầu, không còn trí nhớ phiên trước; xoá sạch mọi thứ./context— kiểm tra trạng thái context: tổng dung lượng, hạng mục ngốn nhiều chỗ nhất, kèm biểu đồ trực quan.
Dùng lệnh nào khi nào (rule of thumb):
- Dùng
/compactkhi đang làm một feature cụ thể, đụng trần context nhưng cần đi tiếp — giữ context bám sát feature hiện tại. - Dùng
/clearkhi bắt đầu feature mới — không để hội thoại cũ gây bias cho việc mới. Cái gì cần Claude nhớ xuyên session → đưa vàoCLAUDE.mdđể nó khỏi phải rediscover từ đầu.
3 mẹo tiết kiệm context:
- Be specific — prompt mơ hồ trông nhỏ nhưng thực ra tốn context HƠN về lâu dài: thiếu chỉ dẫn rõ, Claude buộc phải khám phá codebase nhiều hơn + tự suy luận, ngốn chỗ hơn hẳn một prompt chi tiết.
- Manage your MCP servers — MCP server nạp toàn bộ tool vào context mặc định, kể cả khi bạn không dùng. Server không liên quan project → tắt bớt. Có thể thử Skills — giống MCP nhưng không nạp hết mọi thứ vào context ngay từ đầu.
- Use subagents — subagent chạy song song với main agent nhưng có context window hoàn toàn riêng. Việc chỉ cần đáp án (VD "auth endpoints nằm ở đâu?") → subagent làm rồi chỉ trả về summary cho main agent → giữ context chính sạch.
Áp dụng thực tế: context giống ngân sách — tiêu khôn thì đi được xa. Tôi quản nó y như quản scope một sprint: một session = một feature (xong thì
/clear), tri thức lặp lại thì "tài liệu hoá" vàoCLAUDE.mdthay vì bắt Claude điều tra lại mỗi lần, và delegate phần tra cứu cho subagent để "bàn làm việc" chính không bị rác.
Tools — "tay chân" của agent
Tools là xương sống của cách agent hoạt động. Đa số AI assistant chỉ text in → text out; tools cho phép Claude Code quyết định khi nào chạy code để tiến gần hoàn thành task — có thể là file-reading tool, web search tool, hay vô số năng lực khác. Claude dùng semantic understanding (hiểu ngữ nghĩa) để quyết khi nào gọi tool và dùng output thế nào.
Permission modes (khoá dạy 3 — bản hiện tại đã có 5)
Khoá dạy 3 chế độ:
- Default behavior — Claude hỏi phép rõ ràng trước khi sửa file hoặc chạy shell command.
- Auto-accept — file được sửa không cần hỏi, nhưng lệnh vẫn cần được duyệt.
- Plan mode — chỉ dùng read-only tools để lập kế hoạch hành động trước khi bắt tay làm.
⚡ Cập nhật thực tế (07/2026): Claude Code bản hiện tại đã tách thành 5 mode (đổi nhanh bằng phím
1–5, hoặc cycle bằngShift+Tab):
- Ask permissions — chính là Default: hỏi trước mọi edit & command.
- Accept edits — chính là Auto-accept: tự sửa file, lệnh vẫn hỏi.
- Plan mode — read-only, vạch kế hoạch trước khi làm.
- Auto mode — chạy tự chủ hơn (tự thực thi trong phạm vi an toàn), nhanh hơn Accept edits nhưng chưa bỏ hết chốt như Bypass.
- Bypass permissions — bỏ qua HẾT permission, chạy mọi thứ không hỏi. Đây chính là "skip permissions" mà khoá cảnh báo — rủi ro cao nhất.
Ba mode đầu khớp 1-1 với những gì khoá dạy; hai mode sau (Auto mode, Bypass permissions) là phần khoá gốc chưa cập nhật.
Tất cả cấu hình trong settings file. ⚠️ Thận trọng khi bỏ qua permission (Bypass): cho Claude Code tự do chạy lệnh nghĩa là một sai sót có thể khó bắt kịp trước khi nó xảy ra.
Cài đặt & các "cửa" chạy Claude Code
Cài rất nhanh, tuỳ bạn muốn dùng ở terminal, IDE, desktop hay web.
Terminal
- macOS / Linux / WSL: cài một phát bằng lệnh
curl. Thích Homebrew thìbrew installcũng được — nhưng không hỗ trợ auto-update. - Windows: PowerShell dùng
Invoke-RestMethod; CMD dùngcurl; hoặcwinget— cũng không auto-update như Homebrew. - Cài xong gõ
claude; chưa nhận thì restart terminal.cdvào thư mục dự án rồi chạyclaude. - Lần đầu: chọn color theme, đăng nhập bằng Claude account (Pro / Max / Enterprise) hoặc API key. Có Enterprise thì chọn đúng option đó.
- ⭐ Phạm vi quyền = thư mục bạn chạy
claude: Claude truy cập được thư mục đó + toàn bộ subfolder.
IDE
- VS Code: Extensions → tìm "Claude Code" → chọn extension của Anthropic có dấu tích xanh (blue verification check) → Install → restart. Mở bằng command palette (
Ctrl/Cmd + Shift + P→ "Claude Code Open in New Tab") hoặc click logo Claude ở sidebar. Trải nghiệm gần như terminal; có thể tắt UI, dùng thẳng terminal trong settings. - JetBrains: cài plugin từ JetBrains Marketplace → restart → click logo Claude → mở pane terminal chạy cạnh editor.
Desktop & Web
- Desktop: đăng nhập Claude Desktop → có toggle "Code" ở trên; làm việc trong một folder cụ thể, đổi permission, chạy được cả cloud environment.
- Web: vào
claude.ai/code(hoặc nhãn "Code" ở sidebar chat). Giống desktop nhưng chỉ giới hạn ở GitHub repositories.
Chọn cửa nào?
- Terminal — muốn cutting edge: tính năng ship ở đây trước.
- IDE (VS Code / JetBrains) — trải nghiệm gần như y hệt, gắn liền editor.
- Desktop — hợp để Claude chạy nền trong lúc bạn làm việc khác.
- Web — hợp làm việc remote trên một GitHub repo.
Prompt đầu tiên & chọn chế độ duyệt
Nói chuyện với Claude Code y như mọi AI assistant khác. Khi gõ prompt, có vài thứ vừa bảo vệ bạn vừa làm mọi thứ dễ hơn.
Auto-Accept vs. Approval — bấm Shift + Tab để cycle giữa các chế độ:
- Approval mode — Claude hỏi phép mỗi lần muốn sửa file hoặc chạy lệnh. (Chính là "Default behavior" / "Ask permissions" ở phần trên.)
- Auto-accept mode — file edits tự duyệt, nhưng lệnh vẫn cần bạn cho phép.
- Không có đúng/sai — tuỳ bạn thấy thoải mái.
Plan Mode trong thực chiến
Plan Mode (cũng nằm trong menu Shift + Tab): lấy prompt của bạn, dùng read-only tools để phân tích codebase + research cách hiện thực. Nó hỏi lại các câu clarifying dọc đường, rồi trả về một kế hoạch chi tiết có thể đem thực thi.
Hợp nhất khi: lên kế hoạch cho thay đổi phức tạp hoặc code review an toàn (read-only, không đụng gì), và các feature nhiều bước (multi-step implementation).
Ví dụ — thêm Dark Mode toggle:
- Mở root directory của dự án, chạy
claude. - Bấm
Shift + Tabvài lần để vào Plan Mode. - Viết prompt mô tả rõ — VD: "app cần dark mode toàn bộ, tạo toggle trên header cho user chuyển light/dark, tự tìm contrast color hợp light theme hiện có".
- Để Claude lập plan → review plan → ổn thì accept, cho Claude xin duyệt ở từng bước.
- Cuối cùng bạn thấy đúng những gì Claude đã làm và cách nó đi tới kết luận.
Chốt: prompt càng descriptive (mô tả rõ) càng tốt; muốn stay in the loop ở mọi bước thì được; dùng Plan Mode để Claude đào sâu chi tiết trước khi đụng code.
⭐ Workflow lõi: Explore → Plan → Code → Commit
Nếu chỉ lấy một thứ từ khoá này, hãy lấy quy trình này. Nhảy thẳng vào "bảo Claude viết code" = phải course-correct (chỉnh sửa) nhiều về sau.
1. Explore & Plan — nhanh nhất là Plan Mode. Trong plan mode, Claude không sửa được file — chỉ đọc để thu thập thông tin về cách hiện thực. Vào bằng Shift + Tab tới khi thấy "Plan Mode", rồi viết prompt (VD: "thêm WebP conversion vào image upload pipeline — tìm chỗ nên đặt, có cần dependency mới không, tiếp cận thế nào"). Claude đọc file liên quan, chạy web search, trả về plan. Review → không đạt thì bảo nó sửa vùng cụ thể. ⭐ Đây là chỗ tốt nhất để course-correct vì CHƯA viết dòng code nào.
Có thể chạy explore subagent ngoài plan mode nếu chỉ muốn tóm tắt codebase mà không định sửa gì sau đó.
2. Code — plan ổn → approve → Claude làm từng item. Chọn auto-accept file edits hay hỏi mỗi lần. Claude tự troubleshoot trước khi coi plan "finished", nhưng đôi lúc bạn phải nhảy vào. Lợi thế Plan Mode: sau khi thực thi bạn có context vì sao ra kết quả đó → giúp định hướng bước tiếp. Ba tip cho phase này:
- Define success criteria — Claude cần biết "correct" trông thế nào để tự tin về kết quả; ghi explicit trong plan.
- Add tools — tool giúp Claude đạt mục tiêu → bớt qua lại. VD build web UI thì cài Claude in Chrome để Claude control tab browser + test UI trực tiếp.
- Include a test suite — cho Claude bộ test để liên tục validate; Claude viết test hộ được. ⚠️ Trước khi giao, đảm bảo test đáng tin (source of truth) để tránh false positive.
Quick tip: Claude cứ vấp đúng một lỗi lặp lại → bảo nó lưu cách giải vào
CLAUDE.md.
3. Commit — bạn tự test + hài lòng → push. Trước khi commit, chạy subagent code reviewer: một cặp mắt mới (fresh eyes), không dính thiên kiến mà main agent tích luỹ trong session. Rồi bảo Claude viết commit message theo style của bạn. Cứ thế lặp lại cho feature tiếp theo.
Recap 4 pha: Explore (đưa Claude context dự án) · Plan (bản kế hoạch để đo thành công) · Code (qua lại tới kết quả cuối) · Commit (review + push, rồi sang feature tiếp).
Góc Delivery Manager: bốn pha này gần như trùng với cách tôi vẫn quản một dự án giao cho team — chỉ khác là lần này người thực thi là Claude Code. Chốt kế hoạch và hướng đi trước khi bắt tay viết code (thay vì code trước rồi sửa sau); success criteria chính là Definition of Done; subagent review là tách người kiểm tra khỏi người làm để bỏ thiên kiến; test suite làm chuẩn để khỏi nghiệm thu nhầm. Đây là bộ khung tôi dùng để giao việc cho AI mà vẫn giữ được kiểm soát rủi ro.
Git workflow: subagent review · /commit-push-pr · --from-pr
Claude Code có vài tính năng built-in làm git workflow nhanh hơn.
Review bằng subagent (trước khi push PR): bảo Claude dùng subagent review thay đổi. Subagent chạy ở context window riêng, fresh eyes — không mang bias của main agent vừa viết code cả session. Hai chốt khi tạo code-reviewer subagent:
- Giới hạn ở read-only tools — reviewer chỉ flag issues, KHÔNG sửa file.
- Check subagent config vào repo → cả team dùng chung một reviewer, chuẩn review đồng nhất.
Skill /commit-push-pr: gộp commit · push · tạo PR trong một bước thay vì làm tay từng cái. Nếu có Slack MCP server cấu hình channel trong CLAUDE.md, nó tự động post link PR vào channel của team.
Session linking với --from-pr: khi Claude tạo PR qua gh pr create, session tự được link với PR đó. Cần quay lại sau (xử lý review comment, sửa build hỏng) thì chạy claude --from-pr <PR_NUMBER> → nối tiếp đúng chỗ đã dừng.
Áp dụng thực tế: đây đúng là "tách người làm khỏi người kiểm" mà tôi nói ở pha Commit — nhưng đóng gói thành cấu hình check vào repo để chuẩn review không phụ thuộc trí nhớ từng người.
/commit-push-pr+ Slack auto-post là bước "bàn giao" tự động;--from-prlà "mở lại đúng ticket" khi CI đỏ hay có review comment — bớt ma sát vặt của vòng đời một PR.
File CLAUDE.md — bộ nhớ bền vững của dự án
CLAUDE.md là một trong những tính năng hữu ích nhất của Claude Code: nó cho Claude một persistent memory (trí nhớ bền vững) về dự án của bạn.
Vấn đề nó giải: không có CLAUDE.md, mỗi lần mở Claude Code là bắt đầu lại từ đầu — nó phải tự re-explore codebase, tự đoán cần dependency nào, tự suy feature nào đã hiện thực. Đoán nhiều → dễ lệch, bạn phải course-correct liên tục.
Cách hoạt động: CLAUDE.md là một file Markdown đặt ở root của dự án. Claude Code tự đọc nó mỗi khi bắt đầu một session, và nội dung file được append thẳng vào prompt của bạn. Nói cách khác, nó là một onboarding script (kịch bản nhập môn) cho codebase.
Một ví dụ điển hình chứa 3 khối:
- Mô tả stack (VD: "Next.js 15 App Router, Tailwind, Drizzle ORM").
- Commands — lệnh dev / test / lint (VD
pnpm dev,pnpm test,pnpm lint). - Code Style — quy ước (VD: 2-space indent, prefer named exports, API routes ở
app/api/, ưu tiên server actions).
Có sẵn khối này, khi bạn nhờ tạo một React component, Claude đã biết dùng Tailwind + theo đúng convention của bạn, khỏi phải dặn lại.
CLAUDE.md là để cho cả team
Nên commit CLAUDE.md vào version control để cả team hưởng. Có một phân cấp (hierarchy) memory file tuỳ đối tượng:
- Project-level
CLAUDE.md— nằm ở root directory của dự án. Chia sẻ với team. - User-level
CLAUDE.md— nằm ở config folder của riêng bạn, áp cho mọi dự án của bạn. Để đây các personal preferences (sở thích cá nhân).
3 tip dùng CLAUDE.md
- Save corrections to memory — nếu bạn thấy mình sửa Claude một điều lặp đi lặp lại (VD "luôn dùng server actions thay vì API routes"), hãy bảo Claude lưu rule đó vào memory. Lần sau mở project nó tự biết. (Đúng mạch với tip ở pha Code: Claude vấp một lỗi hoài → lưu cách giải vào
CLAUDE.md.) - Reference project docs bằng
@— muốn Claude tham chiếu tài liệu sẵn có thì dùng ký hiệu@+ đường dẫn file thay vì chép lại nội dung, VD@README.md. - Bắt đầu KHÔNG có
CLAUDE.md— Anthropic khuyên chạy trần lúc đầu để thấy rõ chỗ nào bạn phải course-correct hoài, nhờ đóCLAUDE.mdgiữ được compact và chỉ chứa thông tin thật sự cần. Khi sẵn sàng, chạy/initđể Claude tự sinh một bản khởi điểm.
Recap: khác biệt giữa một session Claude Code ức chế và một session trơn tru thường nằm ở context — và CLAUDE.md là cách bạn cấp context đó. Bắt đầu từ stack + preferences + commands, rồi bồi đắp dần theo thời gian.
Áp dụng thực tế: với tôi,
CLAUDE.mdlà tờ handover cho một thành viên mới vào dự án — chỉ khác là thành viên đó là Claude, và nó đọc lại tờ đó ở mỗi lần vào việc. Vì nội dung bị append vào prompt, tôi coi nó như tài sản chung phải giữ ngắn và đúng: rule nào đã lỗi thời thì gỡ, đừng để phình. Chính repo này cũng có mộtCLAUDE.mdở root — nó là lý do vào là biết ngay dự án deploy qua Cloudflare Pages, i18n dùngvi/en/ja, và không được tự ý đề xuất feature ngoài/learn. Phân cấp project-level (chung, commit vào repo) vs user-level (riêng, config folder) thì tôi ánh xạ đúng như quy ước công ty vs sở thích cá nhân: cái ràng buộc cả team thì phải vào repo, cái chỉ hợp gu mình thì để riêng, không nhét vào chỗ chung.
Subagents — tạo & tuỳ biến agent con
Ở các phần trước, subagent xuất hiện như một công cụ giữ context sạch (explore subagent, code-reviewer subagent). Phần này đi vào cách tự tạo và tuỳ biến một subagent.
Nhắc lại vì sao cần: phần lớn context window bị ngốn bởi tool call dò codebase và web search lúc research. Những gì moi ra trong lúc đó không phải lúc nào cũng liên quan feature chính → làm rác context. Subagent giải quyết bằng cách chạy song song, với context window riêng: nó lo phần nặng (VD "explore this codebase for me"), xong tóm tắt findings trả về cho Claude. Kết quả: bạn có đáp án mà không lôi cả hành trình đi tới đáp án vào context chính.
Tạo subagent của riêng bạn
Subagent được định nghĩa trong file Markdown + YAML frontmatter. Cách dễ nhất là để Claude sinh giúp — chạy:
/agents
Rồi chọn "Create new agent". Bạn sẽ đi qua các bước: chọn scope (phạm vi), định nghĩa purpose (mục đích), chọn tools subagent được phép dùng, và cả color cho nó. Claude sẽ sinh name, description, và prompt cho subagent. Chính description/prompt này cũng báo cho Claude biết KHI NÀO nên gọi subagent đó, dựa trên các prompt bạn đưa.
Tuỳ biến sâu hơn
- Persistent memory — cho subagent giữ trí nhớ xuyên nhiều conversation. Rất hợp khi bạn dùng nó đều đặn trên cùng những dự án.
- Preload skills — nạp sẵn skill vào subagent bằng cách thêm key
skill+ liệt kê skill theo tên. ⚠️ Lưu ý: khác với skill ở conversation chính, ở đây CẢ skill được nạp nguyên vào context (main conversation thì nạp dần, không đổ hết một lúc).
Recap: giữ context window sạch là một trong những cách tốt nhất để làm việc năng suất với Claude Code. Với subagent, bạn cho một agent chạy nền lo phần heavy lifting và chỉ trả về đáp án cho context chính.
Đi sâu hơn: Anthropic có khoá riêng "Introduction to Subagents" — đúng khoá kế tiếp trong lộ trình Developer của track này.
Áp dụng thực tế: với tôi, subagent là cách "đóng gói một vai" thành cấu hình tái dùng thay vì mô tả lại mỗi lần. Ba núm chỉnh — scope · tools · prompt — chính là bản mô tả công việc (JD) của một vai: giới hạn read-only cho reviewer để nó chỉ soi không sửa, cho explore-agent tool đọc + web search, và prompt = "định nghĩa vai" để Claude biết khi nào triệu đúng người. Persistent memory là để một vai lặp lại (VD reviewer của repo này) nhớ được quy ước qua các phiên; còn preload skill thì tôi cân nhắc kỹ vì nạp NGUYÊN skill là đánh đổi chính context mà subagent sinh ra để tiết kiệm — chỉ preload khi subagent gần như luôn cần skill đó.
MCP — nối Claude Code với tool & dữ liệu ngoài
MCP (Model Context Protocol) là một open standard (chuẩn mở) cho phép Claude Code kết nối với external tools và data sources. Khi bạn hỏi, Claude tự hiểu khi nào nên dùng các tool đó để xử lý câu hỏi tốt hơn.
Rất nhiều context của bạn nằm ngoài codebase — trong database, productivity app, public repository. MCP bắc cầu khoảng cách đó.
Làm được gì với MCP?
Trước hết cần hiểu khái niệm "tools" trong agentic AI: tools cho agent (như Claude Code) khả năng thực hiện hành động để hoàn thành task hiệu quả hơn — khác với AI thường chỉ trả về một text response.
Ví dụ: team dùng Linear để quản dự án → thêm Linear MCP server để kéo chi tiết issue cụ thể (VD ticket MEN-12). Cần documentation mới nhất của một dependency → một docs MCP server như Context7 cấp cho Claude Code (VD tra docs shadcn/ui mới nhất).
Thêm một MCP server
Dùng lệnh claude mcp add. Có hai loại chính:
- HTTP server — cho dịch vụ remote: do provider host, nối qua network.
- Stdio server — cho local process chạy trên máy bạn.
Quản lý bằng /mcp trong một session Claude Code: xem cái gì đang connected, check status, và disable server không cần.
Scoping — 3 phạm vi
- Local — chỉ có ở project hiện tại, chỉ mình bạn.
- User — có ở mọi project của bạn.
- Project — dùng file
.mcp.jsonbạn commit vào version control → bất kỳ ai trên codebase tự động có đúng y bộ server đó.
Context costs — cái giá phải để mắt
MCP server thêm tool definitions vào context window ngay cả khi bạn không dùng tới. Cấu hình nhiều server → ăn mòn context khả dụng. Chạy /mcp để soi cái gì đang connected và disable cái không dùng. Ba hướng nhẹ context hơn:
- CLI equivalent — nếu một tool có bản CLI (như
ghcho GitHub,awscho AWS) thì CLI tiết kiệm context hơn vì không thêm tool definition thường trực. - Skill — một Skill chỉ nạp name + description vào context; Claude chỉ nạp full nội dung skill khi xác định cần dùng.
- Tool search mode — nếu MCP tools vượt 10% context window, Claude Code tự chuyển sang tool search mode, tự khám phá đúng tool theo nhu cầu — nhưng có thể kém tin cậy hơn.
Recap: MCP nối Claude Code với external tools & data sources. Thêm server bằng claude mcp add. Scope vào dự án bằng .mcp.json để cả team tự có. Và để mắt tới context bằng cách disable server không dùng.
Áp dụng thực tế: tôi xếp MCP đúng vào bài toán tổng chi phí context mà khoá nhắc suốt: mỗi server là một khoản "phí thuê bao" trừ thẳng vào context dù có xài hay không. Nên thứ tự ưu tiên của tôi là CLI → Skill → MCP: việc gì
gh/awslàm được thì gọi CLI (không để lại tool definition), năng lực đóng gói được thì để Skill (chỉ nạp name+description tới khi cần), chỉ giữ MCP thường trực cho thứ thật sự cần realtime như Linear/DB. Về scope, tôi ánh xạ đúng như CLAUDE.md: cái ràng buộc cả team (VD server issue tracker) thì để Project scope qua.mcp.jsoncommit vào repo; cái chỉ mình dùng thì Local/User, đừng nhét vào chỗ chung.
Hooks — kiểm soát tất định (deterministic)
Hooks cho phép bạn chạy lệnh tại những điểm cụ thể trong lifecycle của Claude Code. Điểm khác biệt cốt lõi so với mọi thứ khác trong khoá: hook là deterministic (tất định) — chúng LUÔN chạy.
Vì sao dùng hook
Bạn có thể dặn trong CLAUDE.md "chạy Prettier sau mỗi lần edit file". Đa số lần nó làm — nhưng thi thoảng nó không làm. Một hook khiến điều đó xảy ra mỗi lần, không ngoại lệ. Các use case phổ biến:
- Auto-format sau khi edit file.
- Log mọi lệnh đã chạy phục vụ compliance.
- Chặn thao tác nguy hiểm như sửa file production.
- Gửi notification cho bạn khi Claude làm xong task.
Cơ chế
Hook được cấu hình trong settings.json. Bạn chọn một event, tuỳ chọn đặt matcher (áp cho tool nào), và cấp một command để chạy. Cấu hình qua lệnh /hooks trong Claude Code, hoặc sửa thẳng settings.json. Các event có sẵn:
PreToolUse— chạy trước một tool call.PostToolUse— chạy sau khi tool call hoàn tất.UserPromptSubmit— chạy khi bạn submit prompt, trước khi Claude xử lý.Stop— chạy khi Claude trả lời xong.Notification— chạy khi Claude gửi notification.
⚡ Cập nhật thực tế (07/2026): 5 event trên là phần khoá dạy. Claude Code bản hiện tại đã có thêm các event mới, đáng chú ý:
SubagentStop(khi một subagent chạy xong),PreCompact(trước khi context bị nén — kịp lưu thứ quan trọng), vàSessionStart/SessionEnd(đầu/cuối mỗi session — hợp để nạp context động hoặc dọn dẹp). Cơ chế cấu hình (event + matcher + command, exit code) vẫn y như khoá dạy.
Ví dụ thực tế — auto-format
Hook phổ biến nhất: auto-format sau edit. Đặt một hook PostToolUse với matcher "Edit|MultiEdit|Write" để nó nổ mỗi khi Claude sửa file. Command check đuôi file rồi chạy formatter phù hợp — Prettier cho TypeScript, gofmt cho Go, tuỳ project của bạn dùng gì.
Chặn bằng PreToolUse
Hook PreToolUse có thể chặn tool call trước khi nó thực thi. Hook nhận tool name + input dạng JSON qua stdin. Exit code quyết định hành vi:
- Exit code
0— cho chạy bình thường. - Exit code
2— chặn hành động. Message ở stderr được đưa ngược lại cho Claude làm feedback → nó biết vì sao bị chặn và tự điều chỉnh. - Exit code khác — lỗi non-blocking, hiện cho bạn xem nhưng không dừng gì.
Đây là cách enforce hard rule (ép luật cứng): chặn ghi vào thư mục config production, chặn lệnh bash chứa rm -rf, chặn commit vào main. Bất cứ gì team cần được đảm bảo (guaranteed) chứ không chỉ gợi ý (suggested).
Chia sẻ hook cho team
Hook cấu hình trong .claude/settings.json là project-level và commit được vào repo → cả team tự động có cùng bộ hook. Dùng biến môi trường CLAUDE_PROJECT_DIR trong command để trỏ tới script lưu trong project, nhờ đó chúng chạy đúng bất kể current working directory của Claude.
Recap: hook cho bạn kiểm soát tất định hành vi Claude Code. Dùng PostToolUse để auto-format & log; dùng PreToolUse để chặn thao tác nguy hiểm. Cấu hình bằng /hooks hoặc settings.json, và commit vào repo để team cùng có. Cần xảy ra mỗi lần không sai sót → đừng để trong prompt, hãy để trong hook.
Áp dụng thực tế: đây là ranh giới tôi luôn vẽ khi giao việc cho AI: cái gì nên làm thì để prompt/
CLAUDE.md(mềm, model tự cân), cái gì bắt buộc thì để hook (cứng, không thương lượng). Với một Delivery Manager, hook chính là control trong ngôn ngữ quản trị rủi ro —PreToolUseexit 2 để chặnrm -rf/commit vào main là preventive control (ngăn trước),PostToolUselog mọi lệnh là audit trail cho compliance. Và vì nó nằm trong.claude/settings.jsoncommit vào repo, cả team thừa hưởng cùng một mức đảm bảo — guarantee không phụ thuộc việc ai đó có nhớ đọcCLAUDE.mdhay không.
Từ khoá cần thuộc
🔴 Core: agentic coding tool · AI Agent (LLM operating in a loop + tools) · direct access (files/terminal/codebase) · context window (working memory) · agentic loop (Gather context → Take action → Verify results) · compaction (nén context khi đầy, có thể rơi chi tiết) · /compact (nén, GIỮ nhớ) · /clear (xoá sạch, không nhớ) · /context (soi dung lượng context) · tools (dùng semantic understanding để quyết khi nào gọi) · permission modes (Default/Approval · Auto-accept · Plan mode) · Shift + Tab (cycle giữa các mode) · Plan Mode (read-only → clarifying questions → detailed plan) · descriptive prompt (mơ hồ = tốn context HƠN) · Explore → Plan → Code → Commit (workflow lõi) · success criteria · subagent (context window riêng, chỉ trả summary) · /agents → Create new agent (chọn scope · purpose · tools · color; Claude sinh name/description/prompt → biết khi nào gọi) · subagent = Markdown + YAML frontmatter · preload skills (key skill → nạp NGUYÊN skill vào context, khác hội thoại chính) · persistent memory (subagent nhớ xuyên conversation) · subagent code reviewer (fresh eyes, no session bias, read-only tools, check config vào repo dùng chung team) · /commit-push-pr (skill gộp commit·push·PR một bước) · claude --from-pr <PR> (resume session gắn với PR) · CLAUDE.md (persistent memory dự án: Markdown ở root, tự đọc mỗi session, nội dung append vào prompt; nhớ xuyên session / lưu solution lặp) · project-level vs user-level CLAUDE.md (root/commit-cho-team vs config folder/preference riêng-xuyên-mọi-project) · /init (Claude tự sinh CLAUDE.md khởi điểm) · MCP (Model Context Protocol — open standard nối tool & data ngoài) · claude mcp add · HTTP server (remote) vs Stdio server (local) · /mcp (xem/status/disable server) · MCP scope: Local (project+mình) · User (mọi project+mình) · Project (.mcp.json commit → cả team) · tool search mode (MCP tools >10% context → tự bật, kém tin cậy hơn) · Hooks (deterministic — LUÔN chạy, khác prompt) · hook events: PreToolUse · PostToolUse · UserPromptSubmit · Stop · Notification · matcher ("Edit|MultiEdit|Write" cho auto-format) · exit code hook: 0 cho qua · 2 chặn (stderr → feedback về Claude) · khác = non-blocking · /hooks (cấu hình trong settings.json) · .claude/settings.json (project-level, commit cho team) · CLAUDE_PROJECT_DIR (trỏ script bất kể cwd) · directory access (thư mục chạy claude + mọi subfolder) · "can make mistakes".
🟡 Important: các "cửa" chạy Claude Code (terminal · VS Code · Claude Desktop · web · JetBrains) · install: curl / PowerShell Invoke-RestMethod (Homebrew & winget KHÔNG auto-update) · sign in Pro/Max/Enterprise hoặc API key · terminal = features ship first · web = chỉ GitHub repos · VS Code blue verification check · Approval mode = Default (hỏi mỗi lần) · Plan Mode hợp cho safe code review + multi-step features · dùng terminal output để quyết bước tiếp · refactor cross-file · interrupt / steer / add context giữa loop · verify results (Claude tự kiểm việc mình làm) · tool call do model trả về · cấu hình permission trong settings file · explore subagent (chạy ngoài plan mode để tóm tắt codebase) · add tools (VD Claude in Chrome test UI) · test suite = source of truth (tránh false positive) · course-correct trước khi viết code · commit message theo style của mình · /compact khi tiếp cùng feature · /clear khi sang feature mới (tránh bias) · MCP servers nạp hết tool vào context mặc định (kể cả khi không dùng) → tắt server thừa · CLI equivalent (gh, aws) tiết kiệm context hơn MCP (không thêm tool definition thường trực) · Linear MCP (kéo issue) · Context7 (docs MCP, docs dependency mới nhất) · "tools" cho agent khả năng hành động (khác AI chỉ trả text) · Skills = giống MCP nhưng không nạp hết trước (chỉ name+description tới khi cần) · Slack MCP (channel trong CLAUDE.md) → /commit-push-pr tự post link PR · session tự link PR khi tạo qua gh pr create · CLAUDE.md = onboarding script cho codebase · save corrections to memory (rule sửa lặp lại) · @file tham chiếu docs trong CLAUDE.md (VD @README.md) · nên bắt đầu KHÔNG có CLAUDE.md rồi mới thêm (giữ compact).
🟢 Good-to-know: search web cho docs/API reference · "stay in the loop" · Claude.ai = copy-paste vs Claude Code = tự làm · restart terminal/IDE nếu chưa nhận lệnh · tắt UI dùng thẳng terminal trong VS Code · Desktop chạy nền + cloud environment · quy trình plan → review → accept → duyệt từng bước → xem lại kết quả · thận trọng khi skip permission (khó bắt lỗi trước khi xảy ra) · bản Claude Code hiện tại (07/2026) có 5 mode: Ask permissions · Accept edits · Plan mode · Auto mode · Bypass permissions (đổi bằng phím 1–5 / Shift+Tab) · subagent chạy song song với main agent.
Nguồn: Claude Code 101 (Anthropic Academy) — Copyright Anthropic. Phần đề thi thử cho khoá này nằm ở tab "Đề thi thử".