Xin chào, Chào mừng trở lại!
Hãy dựng cho tôi một project AI agent hoàn chỉnh theo chuẩn Claude Code.
Tôi không rành kỹ thuật, nên hãy làm đủ mọi bước và đừng bỏ qua bước nào
trong im lặng. Bước nào không làm được thì nói rõ lý do.
## PHẦN A — ĐỌC TRƯỚC, RỒI HỎI PHẦN CÒN THIẾU
A0. Đọc tham khảo trước khi hỏi. Tìm thông tin về agent ở bốn nơi,
theo thứ tự ưu tiên:
1. File khai báo trong thư mục đã gắn (KHAI-BAO*.md, BRIEF*.md,
SPEC*.md, hoặc file mô tả dự án bất kỳ)
2. Ô Instructions của project
3. Ô mô tả project
4. Tài liệu trong mục Context
Đọc xong, in bảng đối chiếu sáu mục:
| # | Mục | Nội dung đọc được | Tìm thấy ở đâu | Rõ / Mơ hồ / Chưa có |
Sáu mục: (1) agent làm gì · (2) ai đọc kết quả · (3) đầu ra và lưu ở đâu
· (4) nguồn thông tin cần · (5) nhịp chạy · (6) điều cấm tuyệt đối.
Ba luật khi đọc:
- Đừng suy diễn thêm thứ tôi không viết. Không thấy thì ghi "chưa có".
- Nếu một mục xuất hiện ở nhiều nơi mà nói KHÁC NHAU, dừng lại hỏi tôi
lấy cái nào. Đừng tự chọn.
- Không tìm thấy gì cả thì nói rõ, rồi hỏi đủ sáu câu ở A1.
A1. CHỈ HỎI những mục "Mơ hồ" hoặc "Chưa có". Không hỏi lại thứ tôi đã
viết rõ. Hỏi một lượt, đánh số, mỗi câu kèm 2-3 gợi ý để tôi chọn nhanh.
Sáu câu gốc:
1. Agent này làm việc gì? (1-2 câu: đầu vào gì, đầu ra gì)
2. Ai sẽ đọc kết quả, và họ cần biết điều gì nhất?
3. Kết quả xuất ra dạng nào và lưu ở đâu?
4. Agent cần những nguồn thông tin nào?
5. Chạy theo lịch hay chạy khi tôi gõ lệnh? Nếu theo lịch thì mấy giờ,
và chạy trên một máy hay nhiều máy?
6. Có nguyên tắc nào tuyệt đối không được vi phạm không?
A2. Tài liệu chỉ trả lời được Ý ĐỊNH của tôi. Nó KHÔNG thay thế được việc
kiểm tra thực tế hệ thống ở Phần B. Dù tài liệu ghi rõ tôi dùng công cụ
nào, bạn VẪN PHẢI gõ /mcp để biết công cụ đó có thật sự đang kết nối
và tên chính xác là gì.
A3. Chờ tôi trả lời xong mới sang Phần B. Đừng vừa hỏi vừa dựng file.
## PHẦN B — XÁC MINH TRƯỚC KHI VIẾT FILE
0. Kiểm tra thư mục làm việc trước khi động vào file nào.
Liệt kê các thư mục đang gắn vào project, kèm đường dẫn đầy đủ.
CẢNH BÁO và DỪNG LẠI chờ tôi xác nhận nếu gặp một trong ba dấu hiệu:
- Có thư mục nào là thư mục CHA của thư mục khác đang gắn
- Có thư mục nào chứa trên 30 file ở cấp trên cùng
- Đã có sẵn CLAUDE.md trong hoặc trên các thư mục đó
Nếu có, khuyên tôi tạo một thư mục con riêng và trống cho agent này.
Thư mục sạch thì báo "thư mục hợp lệ" rồi đi tiếp.
1. Gõ /mcp, cho tôi xem danh sách server đang kết nối kèm TÊN VIẾT HOA
CHÍNH XÁC của từng server.
2. Đối chiếu với mục 4 của Phần A. Thiếu công cụ nào thì hướng dẫn tôi
kết nối theo đúng loại:
- OAuth: Customize > Connectors > "+" > Add custom connector
- API key qua header: khai vào .mcp.json, key để trong .env,
dùng cú pháp ${TEN_BIEN}
- Chạy cục bộ: khai .mcp.json dạng stdio với command/args/env
3. CHỈ ghi vào trường tools: những tên công cụ bạn ĐÃ NHÌN THẤY trong /mcp.
Tuyệt đối không đoán tên. Tên phân biệt chữ hoa chữ thường: mcp__Exa
khác mcp__exa. Sai một ký tự là agent không thấy công cụ và KHÔNG BÁO LỖI.
4. Tính di động giữa các máy. Tool từ mục Connectors thường đăng ký bằng
MÃ UUID, ví dụ mcp__b75d8e51-e93d-4809-9b97-e4ae292f00c7__web_search_exa.
Mã đó chỉ đúng trên máy này, với cách đăng nhập này.
Đối chiếu với mục 5 của Phần A:
- Chạy một máy, chạy tay: dùng tên UUID, chép nguyên xi.
- Chạy theo lịch hoặc nhiều máy: ƯU TIÊN khai tool vào .mcp.json với
TÊN SERVER DO TÔI ĐẶT (ví dụ "exa", "firecrawl"). Tên đó ổn định và
đi theo thư mục project. Nói cho tôi biết cần API key nào, lấy ở đâu.
Dù chọn cách nào, ghi lại vào file DI-DONG.md ở gốc project:
- Danh sách tool đang dùng, tên đầy đủ, nguồn (connector hay .mcp.json)
- Tool nào phụ thuộc máy, nhận biết bằng cách nào
- Ba bước phải làm khi chuyển sang máy mới
Nếu tôi chưa kết nối đủ, cứ dựng phần còn lại và ghi rõ chỗ nào đang thiếu.
## PHẦN C — TẠO FILE THEO ĐÚNG THỨ TỰ NÀY
### Bắt buộc — luôn tạo
1. CLAUDE.md ở gốc project, DƯỚI 200 DÒNG.
Chỉ chứa thứ gần như không đổi: dự án làm gì, ai đọc, nguyên tắc bất di
bất dịch, giọng văn, bố cục thư mục. KHÔNG đưa quy trình nhiều bước vào
đây — cái đó thuộc về skill.
Nội dung lấy từ mục 1, 2, 3, 4, 6 của Phần A. Viết lại cho gọn.
2. .claude/agents/.md — trái tim của agent.
Frontmatter phải có đủ:
- name: chữ thường, có gạch nối
- description: nói rõ LÀM GÌ và DÙNG KHI NÀO. Đây là dòng Claude đọc để
biết lúc nào giao việc, viết mơ hồ là chọn nhầm.
- tools: liệt kê rõ ràng. TUYỆT ĐỐI KHÔNG để trống — để trống là agent
thừa hưởng toàn bộ công cụ và sẽ tự gọi công cụ đắt tiền.
- model, maxTurns, memory: project
Phần thân: vai trò, các bước làm việc đánh số, luật cập nhật bộ nhớ,
nguyên tắc tuyệt đối.
BẮT BUỘC thêm vào đầu phần thân mục "Bước 0 — Kiểm tra công cụ":
"Trước khi làm gì, xác nhận bạn thấy đủ các công cụ liệt kê trong tools:.
Thiếu bất kỳ công cụ nào thì DỪNG LẠI và báo ngay tên công cụ bị thiếu,
không chạy tiếp trong im lặng."
### Tạo nếu phù hợp — giải thích cho tôi vì sao có hoặc không
3. .claude/skills//SKILL.md — nếu agent có quy trình từ 3 bước trở lên.
SKILL.md phải đúng tên. Giữ dưới 500 dòng, chi tiết đẩy sang file bên
cạnh rồi trỏ tới bằng liên kết.
4. .claude/rules/*.md — nếu CLAUDE.md có nguy cơ vượt 200 dòng.
5. .mcp.json ở gốc — nếu cần công cụ ngoài. Mỗi entry có url BẮT BUỘC phải
kèm "type": "http", thiếu type là bị bỏ qua âm thầm.
6. .env.example và .gitignore — nếu có API key. .env phải nằm trong .gitignore.
7. .claude/settings.json — chặn quyền:
deny tối thiểu: Bash(rm:*), Bash(sudo:*), Read(./.env)
allow: chỉ những thư mục agent được ghi.
8. .claude/hooks/.py + khai hooks: trong frontmatter agent —
nếu tôi cần theo dõi hoặc chặn cứng. Ưu tiên hai việc:
- PostToolUse: ghi mọi lần gọi công cụ ra logs/ dạng jsonl
- PreToolUse: chặn khi vượt hạn mức số lần gọi trong ngày
Kèm script scripts/bao-cao.py để tôi xem lại số liệu.
Hook phải nuốt mọi lỗi và thoát 0, không bao giờ làm hỏng lượt chạy.
9. Thư mục output/ và logs/ nếu agent cần ghi file.
### Bộ nhớ — tạo nếu agent chạy lặp lại
10. .claude/agent-memory//MEMORY.md
Tên thư mục con PHẢI TRÙNG trường name: của agent. Sai là agent mất
sạch bộ nhớ mà không có cảnh báo nào.
MEMORY.md là MỤC LỤC, một dòng một mục, giữ dưới 200 dòng — vì chỉ
200 dòng đầu được nạp vào system prompt, phần vượt bị cắt âm thầm.
Tạo kèm file chuyên đề, tối thiểu:
- hieu-qua-cong-cu.md: công cụ nào chạy được ở đâu, cái nào đã thử và hỏng
- da-lam.md: đã làm gì rồi, để chống lặp
- bai-hoc.md: sai ở đâu, sửa thế nào
Trong prompt agent phải viết rõ: khi nào ghi gì vào file nào, và khi
MEMORY.md chạm 180 dòng thì dọn ngay trong lượt đó.
## PHẦN D — MƯỜI CẠM BẪY PHẢI TRÁNH
Rà lại từng cái trước khi báo cáo xong:
1. tools: để trống → agent thừa hưởng mọi công cụ.
2. Hai công cụ cùng chức năng trong cùng một tools: → sẽ có lúc chọn nhầm.
3. Tên công cụ sai chữ hoa/thường → agent im lặng bỏ qua, không báo lỗi.
4. name: của agent không khớp thư mục agent-memory → mất bộ nhớ.
5. Entry .mcp.json có url mà thiếu "type" → bị bỏ qua âm thầm.
6. CLAUDE.md vượt 200 dòng → giảm mức độ tuân thủ.
7. MEMORY.md vượt 200 dòng → phần thừa không được nạp, không cảnh báo.
8. Tên connector dạng UUID → chuyển máy là mất công cụ trong im lặng.
9. Dựng file vào thư mục chung thay vì thư mục riêng → lẫn vào tài liệu cũ,
và mọi CLAUDE.md trên đường đi đều bị nạp.
10. Cùng nội dung nằm ở cả Instructions lẫn CLAUDE.md → tốn token hai lần,
và nếu hai bên lệch nhau thì hệ thống chọn tùy tiện.
## PHẦN E — TỰ KIỂM TRA VÀ BÁO CÁO
In cho tôi hai bảng.
Bảng 1 — file đã tạo:
| File | Đã tạo | Số dòng | Ghi chú |
Bảng 2 — phân chia nội dung:
| Nội dung | Đang ở đâu (khai báo / Instructions / CLAUDE.md) | Vì sao đặt ở đó |
Kèm bảy xác nhận, mỗi cái ghi rõ ĐẠT hay KHÔNG:
1. File được dựng vào đúng thư mục riêng của agent?
2. Mọi tên công cụ trong tools: khớp chính xác với /mcp?
3. Thư mục agent-memory trùng name: của agent?
4. CLAUDE.md < 200 dòng, SKILL.md < 500 dòng, MEMORY.md < 200 dòng?
5. Mọi file JSON hợp lệ? (chạy thử để kiểm tra, đừng chỉ nhìn)
6. Có tool nào mang tên UUID? Nếu có, liệt kê và ghi vào DI-DONG.md.
7. Có nội dung nào bị trùng giữa Instructions và CLAUDE.md?
Nếu có hook, chạy thử bằng dữ liệu giả và cho tôi xem kết quả, đừng chỉ
viết ra rồi hy vọng nó chạy.
Cuối cùng gõ /context, cho tôi xem mục Memory files để xác nhận file nào
thật sự đã được nạp.
## PHẦN F — HƯỚNG DẪN TÔI BƯỚC CUỐI
Viết bằng ngôn ngữ đơn giản:
1. Nếu tôi có khai báo trong ô Instructions, soạn giúp tôi bản rút gọn chỉ
còn phần "cách làm việc với tôi" (giọng văn, khi nào hỏi lại, lệnh tắt)
cộng một dòng trỏ về CLAUDE.md, để tôi dán đè lên nội dung cũ.
2. Tôi cần tự làm gì bằng tay (lấy API key ở đâu, dán vào đâu).
3. Câu lệnh để chạy thử agent lần đầu.
4. Nếu chạy theo lịch: câu lệnh đầy đủ để tạo scheduled task. Prompt của
lịch phải tự chứa vì mỗi lần chạy là một phiên hoàn toàn mới.
Giờ Việt Nam trừ 7 ra giờ UTC.
5. Nếu tôi dùng project này trên máy khác, ba bước phải làm:
- Gõ /mcp, đối chiếu tên công cụ với trường tools: trong file agent
- Tạo lại .env từ .env.example và điền key
- Kiểm tra python3 --version nếu có hook viết bằng Python
Nhắc tôi: chạy tay 3 ngày rồi mới bật lịch. Mỗi lần chỉ sửa một thứ.