Mod, hook, skill hay MCP: bốn tầng tuỳ biến Claude Code

Giải một yêu cầu 'không làm lộ secret' bằng skill, MCP, hook và mod, rồi dùng flowchart bốn câu hỏi để chọn tầng nhẹ nhất cho Claude Code.

Đã duyệt độc lập · cập nhật 29/10/2026 · 8 min

1. Một yêu cầu, bốn cách giải

Video mở đầu bằng một khẳng định: có bốn cách khác nhau để ngăn Claude Code làm lộ API key của bạn, đó là một skill, một MCP server, một hook, hoặc một mod. Theo TechWhistle (video đăng ngày 27/10/2026), hai trong số đó không chặn được gì cả, một cách thì quá tay, và chỉ một cách là đúng công cụ. Hết video, bạn sẽ biết đó là cách nào và vì sao.

Tiêu đề Stop Claude Code leaking your API keys, 4 ways, với một file .env có API_KEY và DB_PASSWORD đã che
Bài toán của cả video: một file .env chứa API_KEY và DB_PASSWORD (giá trị đã che bằng dấu chấm), và câu hỏi làm sao để Claude Code không làm lộ chúng, với bốn cách được thử trong video đăng ngày 27/10/2026.

Vấn đề, theo TechWhistle (video đăng ngày 27/10/2026): Claude Code giờ có bốn cách để tuỳ biến, và tutorial nào cũng chỉ đi tham quan một tầng riêng lẻ. Kết quả là bạn có một skill đang làm việc của hook, hoặc một mod đang làm việc mà một dòng config là đủ. Hôm nay video chỉ lấy một yêu cầu duy nhất: không bao giờ làm lộ secret, và giải nó theo bốn cách khác nhau. Sau đó là một flowchart bạn dùng được cho bất cứ việc gì.

2. Claude là nhân viên mới: bốn tầng, bốn động từ

Hãy hình dung Claude là một nhân viên mới vào công ty bạn. Theo cách so sánh của TechWhistle (video đăng ngày 27/10/2026):

  • Skills là cuốn sổ tay nhân viên mà người đó đọc. Nó thay đổi những gì Claude biết (theo video đăng ngày 27/10/2026).
  • MCP là thẻ từ để vào các toà nhà khác. Nó thay đổi những gì Claude với tới được (theo video đăng ngày 27/10/2026).
  • Hooks là cổng an ninh kiểm tra từng chiếc túi. Nó thay đổi những gì xảy ra khi có sự kiện (theo video đăng ngày 27/10/2026).
  • Mods thì sửa sang lại chính văn phòng: màn hình mới, nút bấm mới. Nó thay đổi cách Claude Code trông và hành xử (theo video đăng ngày 27/10/2026).
Slide Now stack it, one verb per layer: Mods interface and behavior, Hooks events, MCP reach, Skills knowledge
Bốn tầng xếp chồng lên nhau, theo slide trong video đăng ngày 27/10/2026: Skills ở dưới cùng (knowledge), rồi MCP (reach), Hooks (events), và trên cùng là Mods (interface & behavior).

Giờ xếp chồng chúng lại: knowledge, reach, events, interface và behavior. Mỗi tầng một động từ: know, reach, enforce, show (biết, với tới, cưỡng chế, hiển thị), theo video đăng ngày 27/10/2026.

Và đây là chiếc hộp đựng cả bốn: theo TechWhistle (video đăng ngày 27/10/2026), một plugin có thể chứa cả bốn thứ cùng lúc. Vậy plugin không phải là một tầng, nó là chiếc xe tải giao hàng. Trang so sánh trong docs của Claude Code cũng ghi rằng một plugin có thể chứa tất cả, nên một mod có thể đi chung plugin với một skill và một MCP server (đọc ngày 29/10/2026).

Plugin: chiếc xe giao hàng, không phải một tầng Skillknow MCPreach Hookenforce Modshow theo video đăng ngày 27/10/2026
Hình 2.1Một plugin có thể chở cả bốn tầng cùng lúc; mỗi tầng gắn với một động từ, theo cách chia trong video đăng ngày 27/10/2026.

3. Cách 1: một skill

Lần thử đầu tiên là một skill. Theo TechWhistle (video đăng ngày 27/10/2026), phần lớn mọi người nghĩ skill là một quy tắc mà Claude bắt buộc phải tuân theo. Không phải vậy. Một skill là một file markdown chứa hướng dẫn. Claude nạp nó khi task của bạn khớp với phần description của skill.

Vậy bạn viết một skill về secret: không bao giờ in nội dung file .env, dùng placeholder trong ví dụ. Theo video đăng ngày 27/10/2026, phần lớn thời gian Claude làm theo khá ngoan.

File .claude/skills/secrets-hygiene/SKILL.md với frontmatter name và description, bên dưới là ba quy tắc về secret
Skill mẫu trong video đăng ngày 27/10/2026, nằm ở .claude/skills/secrets-hygiene/SKILL.md: phần frontmatter (được tô sáng) chứa tên và description quyết định khi nào Claude nạp skill, bên dưới là ba quy tắc. Dòng chú thích: "A skill is just a markdown file of instructions".

Nội dung skill trên màn hình:

---
name: secrets-hygiene
description: Use when showing config, env files,
  or examples that could contain credentials.
---
# Secrets hygiene
- Never print the contents of .env files.
- Use placeholders like <your-key-here> in examples.
- Never echo an API key back to the user.

Nhưng "làm theo" không giống "cưỡng chế". Theo TechWhistle (video đăng ngày 27/10/2026), một skill là chữ nằm trong context window. Nó cạnh tranh với mọi thứ khác Claude đang đọc. Nó không theo dõi được một tool call, và cũng không huỷ được tool call nào.

Bảng so sánh của chính Anthropic nói thẳng điều này: chọn skill khi bạn cứ phải dán đi dán lại cùng một hướng dẫn vào chat (docs Mods overview, đọc ngày 29/10/2026). Theo TechWhistle (video đăng ngày 27/10/2026), đó là huấn luyện, không phải ổ khoá.

4. Cách 2: một MCP server

Lần thử thứ hai là MCP, Model Context Protocol. Theo TechWhistle (video đăng ngày 27/10/2026), mental model sai là "MCP làm Claude thông minh hơn". Mental model đúng là "MCP cho Claude thêm tool mới". Một server chạy bên ngoài Claude Code và mở ra các hành động: query một database, đọc một ticket, gọi một vault.

Vậy bạn thêm một server Secrets Manager. Theo video đăng ngày 27/10/2026, giờ Claude lấy credential vào lúc deploy, và bạn không bao giờ phải dán key vào chat nữa. Điều đó hữu ích.

Slide Look at the direction: bốn ô mở khoá database, tickets, vault, docs và một ô đỏ .env room; nhãn ADDS reach, còn REMOVES reach bị gạch
"Look at the direction": MCP mở khoá thêm các cánh cửa database, tickets, vault, docs, còn căn phòng .env vẫn mở như cũ. Nhãn "ADDS ↑ reach" sáng, "REMOVES ↓ reach" bị gạch bỏ, theo slide trong video đăng ngày 27/10/2026.

Nhưng hãy nhìn vào chiều tác động. Theo TechWhistle (video đăng ngày 27/10/2026), MCP thêm khả năng với tới, nó không bao giờ lấy bớt đi. Một MCP server không thể ngăn Claude chạy cat lên file .env của bạn. Nó chỉ thêm cửa. Với yêu cầu của chúng ta, MCP đang giải một bài toán khác.

5. Cách 3: một hook

Lần thử thứ ba là hooks. Theo TechWhistle (video đăng ngày 27/10/2026), nhiều người coi hook là thứ "có thì tốt": tự format code, một cái ping trên desktop. Thực ra hook là tầng đầu tiên trong bốn tầng này mang tính deterministic. Một hook là một script mà Claude Code chạy khi có một lifecycle event.

Theo video đăng ngày 27/10/2026, có hơn 30 event. PreToolUse chạy trước mọi tool call. Script của bạn đọc tool call đó dưới dạng JSON. Thoát với exit code 2 thì tool call bị chặn.

Vậy đây là secrets guard dạng hook, như video đăng ngày 27/10/2026 mô tả: match các tool Read, Edit và Bash. Nếu input nhắc tới .env, thoát với code 2. Claude thấy lý do bạn đưa ra và chuyển sang việc khác. Không cần thuyết phục, không có chuyện quên. Nó chạy mỗi lần, không trừ lần nào.

Cửa sổ claude: Read(.env) bị chặn với dòng PreToolUse hook: Secrets stay local.
Kết quả trên màn hình trong demo của video đăng ngày 27/10/2026: tool call Read(.env) bị chặn, Claude nhận dòng lý do "PreToolUse hook: Secrets stay local."

Quay lại với nhân viên mới: cuốn sổ tay ghi "không mang laptop về nhà", còn cổng an ninh thì thực sự kiểm tra cái túi (theo cách so sánh trong video đăng ngày 27/10/2026).

6. Giới hạn của hook, và hai thứ cùng tên "hook"

Nhưng hook có những giới hạn. Thứ nhất, theo TechWhistle (video đăng ngày 27/10/2026), pattern matching chỉ là best effort: một lệnh khéo léo có thể lọt qua regex. Hooks docs của Anthropic nói thẳng: muốn allow hay deny cứng thì dùng permission system. Vì vậy hãy đi kèm hook một deny rule cho việc đọc .env.

Slide Edge 1, pattern matching is best effort: grep -q '\.env' và lệnh cat .e""nv bị đóng dấu SLIPPED PAST
Ví dụ trên slide (video đăng ngày 27/10/2026): hook kiểm bằng grep -q '\.env', nhưng lệnh cat .e""nv chèn hai dấu nháy vào giữa tên file nên không khớp pattern và được đóng dấu "SLIPPED PAST".

Hooks reference hiện ghi: vì bộ lọc if chỉ là best effort, hãy dùng permission system thay vì hook để cưỡng chế một quy tắc allow hoặc deny cứng (đọc ngày 29/10/2026).

Thứ hai, theo video đăng ngày 27/10/2026, một settings hook chạy bên ngoài Claude Code. Nó có thể chặn, cho phép và ghi log. Nó không vẽ được gì cả, không thể cho bạn xem một cái nút.

Và đây là chỗ cách đặt tên gây rối. Theo TechWhistle (video đăng ngày 27/10/2026), mở docs về mods ra thì handler nào cũng được gọi là hook. Còn cái script trong file settings của bạn, giờ Anthropic gọi là settings hook. Cùng một từ, hai thứ khác nhau. Và khác biệt không nằm ở chỗ chúng phản ứng với cái gì, mà ở chỗ code chạy ở đâu: bên ngoài Claude Code hay bên trong nó.

Hai ô HOOK đặt cạnh nhau với dấu hỏi, bên dưới là trích dẫn từ Claude Code docs, Mods overview
Hai chữ "HOOK" đặt cạnh nhau, kèm câu trích từ trang Mods overview của docs Claude Code: "On these pages, "hook" means a mod's handler, and the settings-file kind is a "settings hook"." (slide trong video đăng ngày 27/10/2026; câu này vẫn có trong docs, đọc ngày 29/10/2026).

7. Cách 4: một mod

Lần thử thứ tư là mods. Theo TechWhistle (video đăng ngày 27/10/2026), mental model sai là "mod là theme", là skin trang trí. Đây là định nghĩa của Anthropic mà video dẫn: mod là một plugin thay đổi cách Claude Code trông và hành xử. Nó được làm từ các event handler viết bằng JavaScript hoặc TypeScript, và chúng chạy bên trong chính process của Claude Code.

Theo video đăng ngày 27/10/2026, mỗi handler làm được ba việc: quan sát một event, viết lại nó, hoặc tự trả lời nó để hành vi mặc định không bao giờ chạy. Trang Mods overview gọi ba việc này là Observe, Rewrite và Answer (đọc ngày 29/10/2026).

Và vì mod sống bên trong, nó vẽ được. Theo TechWhistle (video đăng ngày 27/10/2026): một pane bên cạnh khung hội thoại, một dải phía trên ô prompt, một status line bên dưới nó, một toast ở góc màn hình. Nó còn vẽ lại được cả spinner hay một dòng tool call. Nó có thể thêm một slash command chạy ngay lập tức, không cần một lượt của Claude. Và pane /diff bạn vẫn dùng? Đó là một mod có sẵn.

Cửa sổ claude với prompt fix the login redirect bug, pane /diff bên phải, nhãn built-in mod: cc-plugin-diff
Minh hoạ trong video đăng ngày 27/10/2026: người dùng gõ /diff trong lúc Claude đang sửa lỗi redirect khi login, và một pane hiện bên phải với các dòng thêm/bớt. Nhãn bên dưới ghi đó là mod có sẵn cc-plugin-diff; bảng mod có sẵn trong docs cũng liệt kê tên này (đọc ngày 29/10/2026).

Vậy đây là secrets guard dạng mod, như video đăng ngày 27/10/2026 mô tả: một handler cho tool call kiểm tra .env và từ chối lệnh gọi. Cùng logic với hook. Nhưng giờ có một toast bật lên: "Blocked a read of .env", và status line giữ một bộ đếm chạy liên tục. Mẫu blast-radius của Anthropic còn đi xa hơn: nó giữ lại một lệnh nguy hiểm và cho bạn hai nút Proceed và Cancel.

Anthropic's blast-radius sample: held: rm -rf build/, WOULD DELETE ba mục, hai nút Proceed và Cancel
Mẫu blast-radius của Anthropic như trong video đăng ngày 27/10/2026: lệnh rm -rf build/ bị giữ lại, mục "WOULD DELETE" liệt kê build/index.js, build/assets/ (212 files) và build/manifest.json, kèm hai nút Proceed và Cancel.

Vậy mod có phải đúng công cụ không? Theo TechWhistle (video đăng ngày 27/10/2026), để chặn thì không. Nó quá tay.

8. Đối xử với mod như code: cài, xem, gỡ và tắt mod

Và đây là điều mà phần lớn tutorial về mod bỏ qua, theo TechWhistle (video đăng ngày 27/10/2026): docs của Anthropic cảnh báo rằng mod không được sandbox. Một mod chạy với quyền của chính bạn. Nó đọc được biến môi trường, file settings và API key của bạn. Hãy nghĩ về điều đó: tầng mạnh nhất để canh giữ secret cũng có thể đọc từng cái một trong số chúng. Thứ duy nhất nó không chạm tới được là permission prompt; không mod nào vẽ lại được thứ đó. Trang Mods overview hiện ghi "Mods aren't sandboxed" và mod không thể đổi những gì permission prompt hiển thị (đọc ngày 29/10/2026).

Vì vậy, theo TechWhistle (video đăng ngày 27/10/2026), hãy đối xử với mod như mọi đoạn code bạn cài vào máy:

  • Cài: mod được cài dưới dạng plugin từ một marketplace (theo video đăng ngày 27/10/2026).
  • Ở đâu: bản sao nằm trong thư mục home, dưới .claude/plugins/cache (theo video đăng ngày 27/10/2026).
  • Liệt kê: chạy claude plugin list để xem từng plugin cùng version, scope và trạng thái (theo video đăng ngày 27/10/2026).
  • Đang chạy: trong một session, /plugin cho biết mod nào đang active (theo video đăng ngày 27/10/2026).
  • Kiểm trước khi cài: chạy claude plugin validate trên thư mục của mod. Theo video đăng ngày 27/10/2026, lệnh này liệt kê mọi event mà mod xử lý và mọi lệnh gọi nó thực hiện.
  • Gỡ: dùng xong thì chạy claude plugin uninstall với tên và marketplace (theo video đăng ngày 27/10/2026).
Terminal zsh chạy claude plugin list, hiện secrets-guard@your-org Version 1.2.0 Scope user Status enabled và context-pane@community
Ví dụ đầu ra của claude plugin list trong video đăng ngày 27/10/2026: plugin mẫu secrets-guard@your-org với Version 1.2.0, Scope user, Status enabled, bên dưới là context-pane@community. Thanh trên cùng đánh dấu các bước install, where, list, active, validate, remove.
$ claude plugin list

Và nếu một mod chạy sai, theo TechWhistle (video đăng ngày 27/10/2026): khởi động Claude Code với Safe Mode để có một session sạch, hoặc đặt "disable all hooks" thành true trong user settings. Cẩn thận: cách thứ hai cũng dừng luôn các settings hook và custom status line của bạn. Trên trang Mods overview, hai cách này là cờ --safe-mode (cho một session) và "disableAllHooks": true trong ~/.claude/settings.json (cho mọi session), kèm đúng lời cảnh báo đó (đọc ngày 29/10/2026).

9. Phán quyết cho bốn cách

Vậy phán quyết cho bốn lần thử, theo TechWhistle (video đăng ngày 27/10/2026):

  • Skill dạy thói quen, nhưng không chặn được (theo video đăng ngày 27/10/2026).
  • MCP cho quyền truy cập an toàn tới secret, nhưng cũng không chặn được (theo video đăng ngày 27/10/2026).
  • Mod chặn được và cho bạn thấy mọi thứ, nhưng nó nặng và chạy với toàn bộ quyền của bạn (theo video đăng ngày 27/10/2026).
  • Hook cộng một permission deny rule là đúng công cụ: deterministic, nhỏ gọn, bạn audit được nó trong 10 giây (theo video đăng ngày 27/10/2026).
Slide The verdict on our four attempts: Skill teaches, can't block; MCP gives access; Hook; Mod; file .env ở giữa
"The verdict on our four attempts" trong video đăng ngày 27/10/2026: file .env ở giữa, Skill gắn nhãn "TEACHES, can't block", MCP gắn nhãn "GIVES ACCESS", còn Hook và Mod chưa hiện nhãn ở thời điểm này của slide.

Tầng mạnh nhất không phải lúc nào cũng là tầng đúng (video đăng ngày 27/10/2026).

10. Flowchart bốn câu hỏi và năm yêu cầu thật

Giờ tới flowchart: bốn câu hỏi, hỏi theo thứ tự (theo video đăng ngày 27/10/2026).

  1. Claude có cần biết cách làm một việc gì đó không? Skill (theo video đăng ngày 27/10/2026).
  2. Claude có cần với tới một hệ thống mà hôm nay nó chưa chạm được không? MCP (theo video đăng ngày 27/10/2026).
  3. Có việc gì phải xảy ra mỗi lần, không ngoại lệ không? Hook (theo video đăng ngày 27/10/2026).
  4. Bạn có cần thấy nó, bấm nó, hoặc thay đổi chính Claude Code không? Mod (theo video đăng ngày 27/10/2026).

Rồi thử trên năm yêu cầu thật; video mời bạn dừng lại và đoán từng cái trước khi nghe đáp án (video đăng ngày 27/10/2026):

  • "Luôn viết commit theo format của team mình." Đó là kiến thức: skill (theo video đăng ngày 27/10/2026).
  • "Cho Claude đọc các ticket Linear của mình." Đó là reach: MCP (theo video đăng ngày 27/10/2026).
  • "Chạy formatter sau mỗi lần edit." Mỗi lần: hook (theo video đăng ngày 27/10/2026).
  • "Hiện mức dùng context của mình live bên cạnh khung chat." Bạn cần nhìn thấy nó: mod (theo video đăng ngày 27/10/2026).
  • Và yêu cầu thứ năm: "Research toàn bộ codebase này mà không làm phình session của mình." Không thuộc tầng nào trong bốn. Đó là một sub-agent, một context mới tinh làm việc rồi trả về một bản tóm tắt (theo video đăng ngày 27/10/2026).
Flowchart bốn câu hỏi KNOW, REACH, EVERY TIME, SEE/PRESS dẫn tới Skill, MCP, Hook, Mod; none of the four dẫn tới Subagent; bên phải là Request 5/5
Flowchart trong video đăng ngày 27/10/2026: bốn ô quyết định KNOW?, REACH?, EVERY TIME?, SEE / PRESS?, mỗi câu "YES" dẫn tới Skill, MCP, Hook, Mod, câu "NO" đi xuống câu tiếp; "none of the four" dẫn tới SUBAGENT. Bên phải là yêu cầu 5/5 "Research this whole codebase without bloating my session." với thanh thời gian để đoán.

11. Mental model để mang theo

Đây là mental model để giữ lại, theo TechWhistle (video đăng ngày 27/10/2026): skills thay đổi những gì Claude biết, MCP thay đổi những gì nó với tới được, hooks thay đổi những gì xảy ra khi có event, mods thay đổi chính Claude Code. Bắt đầu với tầng nhẹ nhất giải được bài toán. Chỉ leo lên tầng trên khi bạn đụng tường.

Mods: thay đổi chính Claude Code Hooks: thay đổi những gì xảy ra khi có event MCP: thay đổi những gì Claude với tới được Skills: thay đổi những gì Claude biết bắt đầu ở tầngnhẹ nhất theo video đăng ngày 27/10/2026đụng tườngmới leo lên
Hình 11.1Mental model cuối video đăng ngày 27/10/2026: bốn tầng xếp từ nhẹ (skills) tới nặng (mods); bắt đầu ở tầng nhẹ nhất giải được bài toán và chỉ leo lên khi đụng tường.

Nguồn và liên kết 11 nguồn

  1. Tên gốc: Mods vs Hooks vs Skills vs MCP: Claude Code's 4 Layers
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=1dRsdI9dERY youtube.com
  4. Kênh YouTube TechWhistle (TechWhistle): youtube.com/channel/UCnH4476A44losQ--_162NGA youtube.com
  5. Claude Code docs, Mods overview (bảng so sánh mod, settings hook, skill, MCP server; "Mods aren't sandboxed"; cách tắt mod; mod có sẵn cc-plugin-diff), đọc ngày 29/10/2026: code.claude.com/docs/en/plugins/mods/overview code.claude.com
  6. Claude Code docs, vẽ trong giao diện bằng mod (đọc ngày 29/10/2026): code.claude.com/docs/en/plugins/mods/interface code.claude.com
  7. Claude Code docs, Hooks reference (exit code 2, permission system cho allow/deny cứng), đọc ngày 29/10/2026: code.claude.com/docs/en/hooks code.claude.com
  8. Claude Code docs, cài và quản lý plugin (claude plugin list với Version, Scope, Status), đọc ngày 29/10/2026: code.claude.com/docs/en/plugins/install code.claude.com
  9. Claude Code docs, plugin loading reference (đọc ngày 29/10/2026): code.claude.com/docs/en/plugins/loading code.claude.com
  10. Các mod mẫu của Anthropic (thư mục có blast-radius và token-weather, đọc ngày 29/10/2026): github.com/anthropics/claude-code-playground/tree/main/claude-code/mods github.com
  11. Model Context Protocol (đọc ngày 29/10/2026): modelcontextprotocol.io modelcontextprotocol.io