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.

.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).

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).
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.

.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.

.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.

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.

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ó.

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.

/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.

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,
/plugincho 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 validatetrê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 uninstallvới tên và marketplace (theo video đăng ngày 27/10/2026).

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).

.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).
- 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).
- 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).
- 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).
- 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).

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.
Nguồn và liên kết 11 nguồn
- Tên gốc: Mods vs Hooks vs Skills vs MCP: Claude Code's 4 Layers
- Sự kiện: YouTube
- Video gốc: https://www.youtube.com/watch?v=1dRsdI9dERY youtube.com
- Kênh YouTube TechWhistle (TechWhistle): youtube.com/channel/UCnH4476A44losQ--_162NGA youtube.com
- 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 - 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
- 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
- Claude Code docs, cài và quản lý plugin (
claude plugin listvới Version, Scope, Status), đọc ngày 29/10/2026: code.claude.com/docs/en/plugins/install code.claude.com - Claude Code docs, plugin loading reference (đọc ngày 29/10/2026): code.claude.com/docs/en/plugins/loading code.claude.com
- 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
- Model Context Protocol (đọc ngày 29/10/2026): modelcontextprotocol.io modelcontextprotocol.io