← Lập trình với Claude Code

Bài 6 · Vận dụng · 18 phút· Cập nhật 11/06/2026

Slash command tùy chỉnh

Biên soạn bởi Nguyễn Anh Tuấn

Tự tạo lệnh tắt trong .claude/commands: frontmatter, tham số $ARGUMENTS/$1, namespacing; và các lệnh có sẵn.

Bạn có để ý mình gõ đi gõ lại vài câu giống nhau? “Viết commit message theo quy ước”, “Review đoạn này về bảo mật”, “Giải thích hàm này bằng tiếng Việt”… Slash command tùy chỉnh đóng gói một prompt hay dùng thành một lệnh /tên - gõ một lần là xong.

  • Lệnh tùy chỉnh = một file markdown chứa sẵn prompt; gõ /tên để chạy lại nhanh.
  • Bên cạnh các lệnh CÓ SẴN (/help, /clear…), bạn tạo lệnh CỦA RIÊNG mình.
  • Tên file = tên lệnh: commit.md → /commit.

Lệnh nay là “Skill” - nói thật

Claude Code đã hợp nhất command vào Skills: một file .claude/commands/deploy.md và một skill .claude/skills/deploy/SKILL.md đều tạo ra /deploy. Bài này làm dạng đơn giản (một file lệnh); bài Skills kế tiếp dạy dạng đầy đủ.

Tạo file .claude/commands/<tên>.md trong dự án; nội dung file chính là prompt sẽ chạy khi bạn gõ lệnh:

.claude/commands/review.md

Review đoạn code thay đổi gần đây trong dự án.
Tập trung vào: lỗi tiềm ẩn, bảo mật, và code khó đọc.
Trả lời ngắn gọn bằng tiếng Việt, nêu file + dòng cụ thể.

Giờ gõ /review trong phiên là Claude chạy đúng prompt trên. Đặt ở .claude/commands/ (dự án - commit để cả nhóm dùng) hoặc ~/.claude/commands/ (cá nhân - mọi dự án của bạn).

  • Một file .md = một lệnh; nội dung file là prompt sẽ chạy.
  • Cấp dự án (.claude/commands/) chia sẻ qua git; cấp cá nhân (~/.claude/commands/) theo bạn.
  • Không cần khai báo gì thêm - có file là có lệnh.

Lệnh sẽ mạnh hơn nhiều khi nhận tham số. Dùng $ARGUMENTS - nó được thay bằng những gì bạn gõ sau tên lệnh:

.claude/commands/fix.md

Sửa lỗi sau, giải thích nguyên nhân ngắn gọn rồi vá:
$ARGUMENTS

/fix nút đăng nhập bị lệch trên mobile$ARGUMENTS thành “nút đăng nhập bị lệch trên mobile”.

  • $ARGUMENTS = toàn bộ phần bạn gõ sau tên lệnh.
  • Cần tách riêng: $0 là tham số đầu, $1 là tham số thứ hai (đếm từ 0).
  • frontmatter argument-hint: [issue-number] giúp hiện gợi ý khi gõ lệnh.

Tham số có tên cho rõ ràng

Khai báo arguments: [issue, nhánh] trong frontmatter rồi dùng $issue, $nhánh trong nội dung - dễ đọc hơn $0/$1, nhất là lệnh nhiều tham số.

Một lệnh thật sự lợi hại khi nó tự kéo dữ liệu mới nhất vào. Dòng dạng !`lệnh` được Claude Code chạy trước và thay bằng kết quả; @đường-dẫn chèn nội dung một file:

.claude/commands/commit.md

Các thay đổi đã stage:
!`git diff --staged`

Viết MỘT commit message theo Conventional Commits (vd "feat(...): ..."),
ngắn gọn, mô tả đúng thay đổi ở trên.

Thử ngay: chọn một ví dụ rồi sửa ô “Bạn gõ” để thấy prompt Claude thực sự nhận đổi theo - kể cả lệnh /commit tự nhúng diff:

Một lệnh tắt là một template prompt. Chọn ví dụ, rồi sửa ô “Bạn gõ” để xem prompt Claude thực sự nhận thay đổi ra sao:

.claude/skills/<tên>/SKILL.md

--- argument-hint: [issue] ---

/fix-issue

→ Prompt Claude nhận

Sửa GitHub issue 123 theo đúng quy ước code của dự án.
Đọc mô tả issue, viết test trước, rồi mới sửa.
  • !`lệnh` chạy bash và nhúng kết quả vào prompt trước khi Claude đọc.
  • @đường-dẫn nhúng nội dung file (vd @docs/quy-uoc.md).
  • Nhờ vậy lệnh luôn làm việc với trạng thái mới nhất của dự án.

Bên cạnh lệnh của bạn, Claude Code có nhiều lệnh dựng sẵn rất hữu ích - gõ /help để xem tất cả:

/initSinh CLAUDE.md ban đầu cho dự án.
/reviewReview thay đổi/PR.
/agentsTạo & quản lý subagent (bài sau).
/mcpXem trạng thái server MCP (bài sau).
/compact · /clear · /memory · /permissionsĐã gặp ở các bài trước.

Thêm frontmatter (tùy chọn) để lệnh “xịn” hơn:

.claude/commands/fix.md - có frontmatter

---
description: Sửa một lỗi được mô tả, giải thích rồi vá
argument-hint: [mô tả lỗi]
allowed-tools: Read, Edit, Bash
---
Sửa lỗi sau, giải thích nguyên nhân ngắn gọn rồi vá:
$ARGUMENTS

Tiếp theo: Skills

Slash command là cách đơn giản để tái dùng một prompt. Bài Skills mở rộng ý này: gói cả quy trình nhiều bước + file phụ, để Claude tự gọi khi phù hợp nhờ phần mô tả - mà gần như không tốn ngữ cảnh cho tới khi dùng.

Câu hỏi thường gặp

Giống nhau ở cách gõ (đều bắt đầu bằng /). Khác ở chỗ: lệnh có sẵn do Claude Code cung cấp; lệnh TÙY CHỈNH do BẠN tạo - mỗi lệnh là một file markdown chứa sẵn một prompt. Gõ /tên-lệnh là Claude chạy đúng prompt đó, khỏi gõ lại cả đoạn.

Cấp DỰ ÁN: .claude/commands/<tên>.md (commit vào git để cả nhóm dùng). Cấp CÁ NHÂN: ~/.claude/commands/<tên>.md (mọi dự án của bạn). Tên file chính là tên lệnh: commit.md/commit.

Đúng - Claude Code đã HỢP NHẤT chúng. Một file .claude/commands/deploy.md và một skill .claude/skills/deploy/SKILL.md đều tạo ra /deploy và chạy như nhau. File .claude/commands/ cũ vẫn dùng tốt. Bài này dạy dạng ĐƠN GIẢN (một file lệnh); bài sau (Skills) dạy dạng ĐẦY ĐỦ (thư mục kèm file phụ, tự gọi khi cần…).

Dùng $ARGUMENTS trong nội dung lệnh - nó được thay bằng tất cả những gì bạn gõ sau tên lệnh. Vd lệnh /fix với nội dung “Sửa lỗi: $ARGUMENTS”, gõ /fix nút đăng nhập bị lệch → prompt thành “Sửa lỗi: nút đăng nhập bị lệch”. Cần tách riêng từng tham số thì dùng $0, $1 (đếm từ 0) hoặc khai báo tham số có tên.

Chúng làm lệnh “động”. Dòng dạng !lệnh sẽ được Claude Code CHẠY và thay bằng kết quả TRƯỚC khi Claude đọc - vd !git diff HEAD nhúng luôn diff hiện tại vào prompt. @đường-dẫn chèn nội dung một file. Nhờ vậy lệnh luôn làm việc với dữ liệu mới nhất, không cần bạn copy thủ công.

Không bắt buộc. File chỉ cần phần prompt là chạy. Thêm frontmatter (giữa hai dòng ---) để tinh chỉnh: description (mô tả), argument-hint (gợi ý tham số khi gõ), allowed-tools (công cụ được dùng không cần hỏi), model… Frontmatter là tùy chọn nâng cao.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

Tên file lệnh tùy chỉnh quan hệ thế nào với tên lệnh?

  1. 1

    Lệnh đầu tiên

    Tạo .claude/commands/giai-thich.md với nội dung: “Giải thích đoạn code sau bằng tiếng Việt, ngắn gọn cho người mới: $ARGUMENTS”. Dùng thử /giai-thich.

    Hoàn thành khi: /giai-thich kèm một đoạn code (hoặc tên hàm) → Claude giải thích đúng theo prompt bạn đã lưu.

  2. 2

    Lệnh commit động

    Tạo một lệnh /commit chèn !git diff --staged rồi yêu cầu viết commit message theo quy ước. Stage vài thay đổi và chạy thử.

    Hoàn thành khi: Lệnh tự nhúng diff đã stage và đề xuất commit message - bạn không phải dán diff thủ công.

  3. 3

    Dự án hay cá nhân?

    Bằng lời: lệnh /commit theo quy ước CỦA NHÓM nên đặt ở đâu? Còn lệnh /giai-thich tiện ích RIÊNG bạn?

    Hoàn thành khi: Quy ước nhóm → .claude/commands/ (commit vào git). Tiện ích riêng → ~/.claude/commands/ (mọi dự án của bạn).

  4. 4

    Thêm gợi ý tham số

    Thêm frontmatter cho một lệnh: descriptionargument-hint (vd [tên-file]). Gõ / và xem gợi ý hiện ra.

    Hoàn thành khi: Khi gõ /, lệnh của bạn hiện kèm mô tả và gợi ý tham số - dễ dùng hơn cho cả nhóm.

  5. 5

    Săn lệnh có sẵn

    /help và lướt danh sách. Tìm 3 lệnh có sẵn bạn thấy hữu ích và ghi lại chúng làm gì.

    Hoàn thành khi: Một danh sách 3 lệnh (vd /init, /review, /compact) kèm công dụng - bạn biết khi nào dùng chúng.