Vibe Code
Giáo trình/Phần 6 — Cao cấp nhất

Claude Code nâng cao

CLAUDE.md, skills, subagent, MCP, hooks — biến một trợ lý chung chung thành một đồng nghiệp biết luật của bạn.

Cấp 640 phút đọc

Ở Cấp 1–5, bạn ra đề từng việc. Ở Cấp 6, bạn cài đặt cách làm việc để không phải nhắc lại cùng một thứ mỗi ngày.

CLAUDE.md — thứ đáng giá nhất, làm trước tiên

Đặt file CLAUDE.md ở gốc project. Claude Code tự đọc nó mỗi phiên, không cần bạn nhắc.

# App chấm công Minh Trung

## Chạy thử
    npx wrangler dev --local     # cổng 8787

## Deploy — KHÔNG đi tắt
1. npx wrangler versions upload  → test trên link preview
2. Test cả đường ĐỌC và GHI (tài khoản test 09xx chỉ-xem,
   KHÔNG lộ lỗi đường ghi)
3. npx wrangler versions deploy <id>@100% --yes
4. curl bản chính, grep đúng file assets (không grep HTML khung)

## Luật của project này
- Mọi SQL dùng .bind(), cấm nối chuỗi.
- Danh sách phải có LIMIT + phân trang. Cấm SELECT * cho danh sách.
- Tiền lưu INTEGER đơn vị đồng. Thời gian lưu UTC, +7 khi hiển thị.
- KHÔNG đặt việc nặng vào ctx.waitUntil (đã gây treo app 20/08).
- Trần rate limit KHÔNG đếm theo IP (4G Việt Nam dùng chung IP).
- Giao diện: nền trắng, một màu nhấn #0e7c86. Không gradient,
  không bóng đổ, không viền trái màu.
- Nhãn nút tiếng Việt không được bẻ dòng ở khổ 375px.

## Bẫy môi trường (máy Windows này)
- Dữ liệu tiếng Việt KHÔNG nhét vào dòng lệnh — ghi ra file rồi
  curl --data-binary @file.
- Node 24 không spawn được .cmd — gọi thẳng file .js bằng node.

## Cấm
- Không sửa thẳng trong dist/ (build sinh ra).
- Không viết lại cả file khi chỉ cần sửa một chỗ.
- Không tự deploy lên bản thật khi chưa có tôi duyệt.

Ba quy tắc viết CLAUDE.md cho hiệu quả:

  1. Chỉ viết thứ không suy ra được từ mã. Cấu trúc thư mục thì nó tự đọc; "vì sao không được dùng waitUntil" thì không.
  2. Viết luật, kèm lý do ngắn. Có lý do thì nó áp dụng đúng cả vào tình huống mới; không có thì nó áp máy móc.
  3. Mục "Cấm" quan trọng ngang mục "Làm". Phần lớn rắc rối đến từ việc AI làm thêm.
CLAUDE.md là nơi kinh nghiệm của bạn trở thành tài sảnchuyên gia insight & case thực tế

Không có nó, mỗi phiên làm việc bắt đầu từ số không: bạn lại phải dặn "đừng viết lại cả file", "nhớ dùng .bind()", "tiền lưu INTEGER". Mỗi lần quên dặn là một lần có khả năng tái phạm lỗi cũ.

Với nó, một bài học trả giá một lần sẽ được áp dụng mãi mãi — kể cả khi bạn quên mất mình từng học nó.

Cách tôi dùng: mỗi lần có sự cố, sau khi xử lý xong, việc cuối cùng là thêm một dòng vào CLAUDE.md. Không phải "sẽ nhớ", mà là một dòng viết ra. File CLAUDE.md của app lớn nhất của tôi dài 80 dòng, và gần như mỗi dòng là một lần đau.

Skills — bộ quy tắc dùng lại giữa nhiều project

CLAUDE.md nằm trong một project. Khi bạn có 10 app cùng luật, hãy đóng gói thành skill: một thư mục trong .claude/skills/<tên>/ với file SKILL.md.

---
name: quy-tac-cua-toi
description: Quy trình deploy, rulebook API/UX/test và bẫy môi trường.
  Nạp khi sửa hoặc deploy bất kỳ app Cloudflare nào của tôi.
---

# Quy tắc làm việc

## 1. Quy trình deploy (không đi tắt)
...

## 2. Rulebook API
...

Phần description quyết định khi nào nó được nạp. Viết rõ tình huống, đừng viết chung chung.

Skill chứa được cả file phụ — bảng kiểm, script, mẫu tài liệu — và tham chiếu tới chúng từ SKILL.md. Đây là cách biến giáo trình này thành công cụ làm việc hằng ngày của bạn.

Subagent — giao việc song song

Khi một việc lớn chia được thành nhiều nhánh độc lập, Claude Code chạy được nhiều agent song song, mỗi agent một ngữ cảnh riêng.

Hợp để giao:

  • Rà soát rộng: "tìm mọi chỗ dùng innerHTML trong 12 project".
  • Xử lý hàng loạt: đọc 200 ảnh biên bản, mỗi agent một phần.
  • Việc đọc nhiều, kết luận ngắn: khảo sát mã nguồn lạ.

Không hợp để giao: việc cần thấy toàn cảnh, việc sửa mã có liên hệ chặt với nhau (hai agent sửa cùng một file là xung đột).

Mỗi subagent bắt đầu từ ngữ cảnh trống

Nó không biết cuộc hội thoại của bạn, không biết quyết định bạn vừa đưa ra. Đề giao cho subagent phải tự đứng được: đủ đường dẫn, đủ ràng buộc, đủ tiêu chí xong.

Và đừng giao chỉ vì nghe "song song thì nhanh hơn". Với việc nhỏ, chi phí mô tả lại bối cảnh còn lớn hơn việc tự làm.

MCP — nối Claude với hệ thống khác

MCP cho Claude Code nói chuyện trực tiếp với dịch vụ ngoài: cơ sở dữ liệu, trình duyệt, kho tài liệu, hệ thống quản lý việc. Giá trị thật: nó tự kiểm chứng được, thay vì chỉ sinh ra mã rồi để bạn đi kiểm.

Ví dụ trong giáo trình này: một máy chủ MCP trình duyệt cho phép nó tự mở app, tự bấm, tự đọc lỗi console, tự chụp màn hình — biến bước test từ việc của bạn thành việc nó làm rồi báo cáo.

Nguyên tắc an toàn: chỉ nối những gì cần, và đừng nối thứ có quyền ghi vào hệ thống thật nếu chưa có cổng duyệt của con người.

Hooks — tự động hóa việc lặp

Hooks chạy lệnh của bạn khi có sự kiện trong phiên làm việc. Hai cách dùng đáng giá nhất:

  • Sau mỗi lần sửa file: chạy định dạng mã, hoặc chạy phép thử nhanh.
  • Trước khi cho phép một lệnh: chặn những lệnh nguy hiểm (ví dụ wrangler deploy thẳng lên bản thật).

Hook là chỗ bạn biến luật thành thứ không thể quên. CLAUDE.md nói "đừng deploy thẳng"; hook thì chặn việc đó.

Ba thói quen đáng giá nhất

1. /clear giữa các việc. Việc mới mà giữ ngữ cảnh cũ thì nó lôi theo quyết định cũ, dễ sửa lung tung. Một việc = một ngữ cảnh.

2. Bắt nó tự kiểm chứng, luôn luôn. Đây là điểm khác biệt lớn nhất so với chép-dán từ web:

Sau khi sửa, tự chạy và báo cho tôi KẾT QUẢ THẬT:
- npx wrangler dev rồi curl cả 3 đường API
- In ra mã trả về và nội dung thật của từng lệnh

Đừng nói "đã xong". Hãy đưa bằng chứng.

3. Tách điều tra khỏi sửa chữa. Với việc rủi ro: "Chỉ đọc và chạy lệnh đọc. Nói nguyên nhân gốc. Chưa được sửa gì." Bạn đọc kết luận, thấy đúng, rồi mới cho sửa.

Khởi tạo CLAUDE.md cho project có sẵnchuyên gia thực thi
Đọc toàn bộ project này rồi soạn file CLAUDE.md gồm 5 mục:

1. Chạy thử tại máy (lệnh thật, đọc từ package.json / wrangler.toml)
2. Quy trình deploy (đọc từ script và workflow nếu có)
3. Cấu trúc file: file nào là nguồn, file nào sinh ra
4. Quy ước đã thấy trong mã: cách đặt tên, màu, cách xử lý lỗi,
   cách lưu tiền và thời gian
5. Mục "Cấm" — để trống, tôi sẽ tự điền

CHỈ ghi những gì bạn ĐỌC ĐƯỢC trong mã. Chỗ nào không chắc thì ghi
"chưa rõ", đừng đoán. Đừng viết lời khuyên chung chung.

Rồi bạn tự điền mục 5 — vì mục "Cấm" là nơi chứa kinh nghiệm của bạn, không phải thứ đọc ra từ mã.

Tôi viết CLAUDE.md sau khi mắc cùng một lỗi ba lầnngười dùng bình thường góp ý

Lỗi của tôi rất buồn cười: tôi cứ sửa thẳng vào thư mục dist, rồi chạy build và mất hết. Ba lần. Mỗi lần tôi đều tự nhủ "lần sau nhớ".

Lần thứ ba tôi viết một dòng vào CLAUDE.md: "CẤM sửa trong dist — đó là thư mục build sinh ra. Sửa trong src." Và không bao giờ mắc lại, vì cả tôi lẫn trợ lý đều đọc dòng đó.

Điều tôi nhận ra muộn: file này không chỉ dành cho AI. Nó cũng là nơi tôi tự nhắc mình. Tôi mở nó ra đọc mỗi lần quay lại một project cũ.

Chốt review bài nàychuyên gia review
  • Đủ: CLAUDE.md có mẫu thật, skills, subagent, MCP, hooks, ba thói quen.
  • Cố ý ngắn ở phần MCP và hooks: chúng đổi nhanh theo phiên bản công cụ. Nguyên lý thì bền, cú pháp thì nên tra tài liệu hiện hành.
  • Rủi ro còn lại: tất cả những thứ này đều là đòn bẩy — chúng khuếch đại cách làm việc của bạn. Nếu quy trình của bạn ở Cấp 5 còn lỏng, tự động hóa nó chỉ làm sai nhanh hơn. Làm đúng thứ tự.
Bài tập chốt
  1. Viết CLAUDE.md cho project chính của bạn, đủ 5 mục, trong đó mục "Cấm" tự tay viết, ít nhất 3 dòng từ lỗi bạn đã mắc.
  2. Mở một phiên mới, ra một đề mơ hồ cố ý, xem nó có tuân theo luật trong file không.
  3. Nếu bạn có từ 3 app trở lên: gom luật chung thành một skill dùng lại.
  4. Thêm một dòng vào CLAUDE.md ngay hôm nay từ lỗi gần nhất bạn gặp.