Free

Slash Command: Xây dựng hệ thống lệnh tái sử dụng cho Claude Code

Định nghĩa slash command tái sử dụng dưới dạng file Markdown, chia sẻ cho cả team qua git, và bao phủ các tác vụ thường xuyên như code review, tạo test và mô tả PR.


Claude Code có sẵn một số slash command tích hợp — /help, /clear, /compact. Nhưng những lệnh thực sự tăng tốc workflow của bạn là những cái tự viết.

Bài này hướng dẫn cách thiết kế hệ thống slash command có thể tái sử dụng để cả team dùng chung một thư viện prompt, thay vì mỗi lần lại phải mô tả công việc từ đầu.

Slash Command tùy chỉnh là gì

Trong Claude Code, slash command tùy chỉnh chỉ là một file Markdown. Đặt nó vào đúng thư mục, Claude Code tự nhận khi khởi động, gõ /tên-file là kích hoạt.

Nội dung file chính là prompt gửi cho Claude. Chỉ vậy thôi.

Không có cú pháp đặc biệt, không có định dạng cấu hình — một file .md là một lệnh.

Đặt file ở đâu

Hai vị trí, hai mục đích:

Vị trí Đường dẫn Phạm vi
Dự án .claude/commands/ Chỉ dự án hiện tại, có thể commit vào git
Người dùng ~/.claude/commands/ Tất cả dự án, cá nhân

Cấp dự án là cốt lõi của việc chia sẻ trong team. Commit .claude/commands/ vào git, mọi người clone repo đều tự động có bộ lệnh đầy đủ.

Cấp người dùng phù hợp cho thói quen cá nhân — kiểu kiểm tra code style bạn thích, hoặc tích hợp công cụ chỉ mình bạn dùng.

Tạo Command đầu tiên

Từ thư mục gốc dự án:

mkdir -p .claude/commands

Tạo .claude/commands/review.md:

Xem xét chất lượng code của các thay đổi hiện tại. Tập trung vào:

1. Lỗi logic và các trường hợp biên
2. Tên biến/hàm có rõ ràng không
3. Code trùng lặp đáng được trích xuất
4. Vấn đề bảo mật (SQL injection, XSS, lộ thông tin nhạy cảm)

Đưa ra gợi ý cụ thể có thể thực hiện ngay — không phải lời khuyên chung chung.

Khởi động lại Claude Code và gõ /review để kích hoạt.

Dùng $ARGUMENTS để nhận đầu vào

Lệnh có nội dung cố định giới hạn cách dùng. $ARGUMENTS làm lệnh linh hoạt hơn — nội dung người dùng gõ sau /lệnh sẽ được chèn vào prompt.

Ví dụ .claude/commands/test.md:

Viết test cho phần sau: $ARGUMENTS

Yêu cầu:
- Bao gồm đường dẫn thông thường và các trường hợp biên
- Tên test phải tự giải thích được
- Dùng dữ liệu thật thay vì mock khi có thể

Cách dùng:

/test phương thức login của class UserAuthentication

Claude nhận được:

Viết test cho phần sau: phương thức login của class UserAuthentication

Yêu cầu:
...

$ARGUMENTS có thể xuất hiện ở bất kỳ đâu trong prompt và dùng nhiều lần.

Nguyên tắc thiết kế

Một lệnh, một trách nhiệm

Đừng viết lệnh "đa năng" nhồi tất cả vào. /review chỉ để review code, /test chỉ để viết test, /pr chỉ để tạo mô tả PR. Lệnh có phạm vi hẹp dễ nhớ hơn và dễ tái sử dụng hơn.

Viết prompt cụ thể, không trừu tượng

Tệ:

Giúp tôi tối ưu code này

Tốt:
```
Tối ưu hóa code này về hiệu năng. Ưu tiên:
1. Giảm query database không cần thiết (vấn đề N+1)
2. Tránh tính toán lặp lại trong vòng lặp
3. Thay tìm kiếm tuyến tính bằng cấu trúc dữ liệu hiệu quả hơn

Giữ nguyên interface — chỉ thay đổi implementation bên trong.
```

Ràng buộc cụ thể dẫn đến kết quả đúng mục tiêu.

Thêm frontmatter vào lệnh

Field description hiển thị trong danh sách lệnh của Claude Code, giúp thành viên team nhanh chóng hiểu mục đích của từng lệnh:

---
description: Xem xét các thay đổi hiện tại để phản hồi chất lượng code
---

Xem xét chất lượng code của các thay đổi hiện tại...

Bộ Command cấp dự án thực tế

Với dự án Rails, những lệnh này bao phủ các tác vụ phát triển hàng ngày phổ biến nhất:

.claude/commands/review.md — Code review

```markdown

description: Xem xét các thay đổi hiện tại về logic, bảo mật và khả năng đọc

Xem xét các thay đổi trong git diff. Kiểm tra:
- Lỗi logic và xử lý trường hợp biên
- Vấn đề bảo mật: SQL injection, kiểm tra phân quyền
- Tên rõ ràng dễ đọc
- Logic trùng lặp đáng trích xuất

Với mỗi vấn đề, chỉ ra vị trí cụ thể và gợi ý sửa cụ thể.
```

.claude/commands/test.md — Tạo test

```markdown

description: Tạo các trường hợp test cho code được chỉ định

Viết test cho code này: $ARGUMENTS

Dùng RSpec. Bao phủ: đường dẫn thông thường, trường hợp biên, điều kiện lỗi.
Định dạng đặt tên: describe ... context ... it ...
Mặc định dùng object thật; chỉ mock dependency bên ngoài khi cần thiết.
```

.claude/commands/pr.md — Mô tả PR

```markdown

description: Tạo tiêu đề và mô tả PR từ các thay đổi hiện tại

Dựa trên git diff và log commit, tạo mô tả PR.

Định dạng:

Thay đổi gì

(2-3 câu tóm tắt những gì đã làm)

Tại sao

(Bối cảnh và động lực)

Cách kiểm tra

(Cách xác minh thay đổi này)

Ngắn gọn, viết cho người review code.
```

.claude/commands/explain.md — Giải thích code

```markdown

description: Giải thích file hoặc hàm được chỉ định làm gì

Giải thích $ARGUMENTS làm gì:
- Trách nhiệm tổng thể là gì?
- Logic chính hoạt động thế nào?
- Các trường hợp biên nào đáng lưu ý?

Viết cho developer mới tiếp cận phần code này. Tập trung vào tại sao, không chỉ làm gì.
```

Command cấp người dùng: Workflow cá nhân

Một số thói quen mang tính cá nhân, không nên áp đặt cho cả team. Đặt chúng vào ~/.claude/commands/:

~/.claude/commands/standup.md — Chuẩn bị standup hàng ngày
```markdown
Dựa trên git log hôm nay và TODO chưa hoàn thành, chuẩn bị tóm tắt standup:
- Những gì đã hoàn thành hôm qua
- Kế hoạch hôm nay
- Có blocker nào không

Tối đa 5 câu.
```

~/.claude/commands/refactor.md — Gợi ý refactor
```markdown
Phân tích $ARGUMENTS và gợi ý cải tiến qua refactoring.

Chỉ đề xuất thay đổi thực sự có giá trị — đừng refactor vì refactor.
Với mỗi gợi ý, giải thích: giải quyết vấn đề gì, khối lượng công việc thế nào, rủi ro ra sao.
```

Chìa khóa để team áp dụng: Commit vào git

Giá trị thực sự của lệnh tùy chỉnh không phải năng suất cá nhân — mà là tạo ra ngôn ngữ chung cho team.

Commit .claude/commands/ vào repo và ghi lại các lệnh có sẵn trong README hoặc CLAUDE.md. Thành viên mới clone repo là có ngay thư viện prompt mà team đã tích lũy, không cần tự mình khám phá.

Khi dự án phát triển, các lệnh cũng phát triển. Nếu một prompt không hiệu quả, sửa một dòng và push — cả team nhận cập nhật. Đây là cách chi phí thấp nhất để triển khai kỹ thuật prompt ở cấp team.

Cấu trúc thư mục tham khảo

.claude/
├── commands/
│   ├── review.md      # Code review
│   ├── test.md        # Tạo test
│   ├── pr.md          # Mô tả PR
│   └── explain.md     # Giải thích code
└── settings.json