Sẽ mở trong thẻ mới
PDL AIAI Worker — trợ lý AI trực 24/7: trả lời khách, xử lý yêu cầu, báo cáo tự động

Kỹ sư phần mềm thời AITờ 02-06 / 112

AGENTS.md, rules và skills: viết ‘sổ tay nhân viên’ cho agent

Bảng quy định ngắn, kệ sổ quy trình, cảm biến khói và cổng kiểm tra, ví cho AGENTS.md, skill và hook
Tờ
02-06 / 112
Hạng mục
M02 · Hiểu AI và agent coding
Cấp độ
Trung cấp
Thời gian đọc
18 phút
Giai đoạn công trình
0 · Khám phá
Cập nhật
Bản đồ công trìnhTờ này lắp: Coding agent, Repo & CI
Bản đồ công trình Mộc OMSBài này: Coding agent, Repo & CI. Đã học: Khách hàng, Kênh bán, Sheet & sổ tay. Chưa tới: PRD & spec, Kiểm thử, Hosting & tên miền, Giám sát lỗi, Giao diện app, API, Database, Dashboard, báo cáo, Trợ lý AI nhận đơn, Màn hình bếp, Đăng nhập, vai trò, Thanh toán VietQR, Thông báo khách, Nhiều tiệm (MộcOS), Kế toán, hoá đơn.Thi công & hạ tầngDòng đơn hàngNghiệp vụ & dịch vụMở rộng MộcOSPRD & specspecCoding agentagentRepo & CIrepo-ciKiểm thửtestsHosting & tên miềnhostingGiám sát lỗimonitoringKhách hàngcustomerKênh bánchannelsGiao diện appapp-uiAPIapiDatabasedatabaseDashboard, báo cáoreportsSheet & sổ taysheetTrợ lý AI nhận đơnai-assistantMàn hình bếpkitchenĐăng nhập, vai tròauthThanh toán VietQRpaymentsThông báo kháchnotificationsNhiều tiệm (MộcOS)tenantsKế toán, hoá đơnintegrations0 Khám phá1 MVP2 Ra mắt3 Thêm AI4 Mở rộng
Bản đồ công trình Mộc OMSBài này: Coding agent, Repo & CI. Đã học: Khách hàng, Kênh bán, Sheet & sổ tay. Chưa tới: PRD & spec, Kiểm thử, Hosting & tên miền, Giám sát lỗi, Giao diện app, API, Database, Dashboard, báo cáo, Trợ lý AI nhận đơn, Màn hình bếp, Đăng nhập, vai trò, Thanh toán VietQR, Thông báo khách, Nhiều tiệm (MộcOS), Kế toán, hoá đơn.Dòng đơn hàngKhách hàngKênh bánGiao diệnAPIDatabaseBáo cáoNghiệp vụ & dịch vụSheet, sổ tayTrợ lý AIMàn hình bếpĐăng nhậpThanh toánThông báoThi công & hạ tầngPRD & specCoding agentRepo & CIKiểm thửHostingGiám sátMở rộng MộcOSNhiều tiệmKế toán0 Khám phá1234

Bài nàyĐã họcChưa tớiĐã thay thế

Bạn sẽ học được gì

Tiêu chí nghiệm thu

Vì sao agent cần sổ tay

Nhớ lại bài Context engineering02-05: agent không nhớ gì giữa các phiên. Mỗi sáng bạn lại có một “nhân viên mới” rất giỏi nhưng chưa biết: dự án chạy test bằng lệnh nào, tiền lưu dạng gì, mã đơn có định dạng ra sao, thư mục nào không được đụng.

Có hai cách xử lý. Cách một: mỗi phiên dặn lại từ đầu, và thế nào cũng có hôm quên dặn. Cách hai: viết một cuốn sổ tay nhân viên đặt ở chỗ ai vào cũng thấy. Tiệm bánh nào cũng có bảng quy định dán trong bếp: “Rửa tay trước khi vào”, “Kem tươi để ngăn trên tủ mát số 2”, “Bánh kem ghi chữ phải đọc lại cho khách xác nhận”. Không ai dán cả giáo trình làm bánh lên tường; chỉ dán những điều mà thiếu nó là hỏng việc.

File hướng dẫn cho agent chính là tấm bảng đó.

AGENTS.md, CLAUDE.md và rules của từng công cụ

Bức tranh tại thời điểm viết (2026)

File Công cụ đọc Ghi chú
AGENTS.md Định dạng mở, được nhiều agent hỗ trợ: OpenAI Codex, Cursor, GitHub Copilot coding agent, Jules, Aider, Zed, Windsurf… Markdown thuần, không bắt buộc cấu trúc; có thể đặt thêm trong thư mục con
CLAUDE.md Claude Code Có thể nhập nội dung file khác, ví dụ trỏ tới AGENTS.md
.cursor/rules/ Cursor Nhiều file quy tắc, có thể áp theo nhóm file
.github/copilot-instructions.md GitHub Copilot Hướng dẫn chung cho repo; có thêm file hướng dẫn theo đường dẫn
GEMINI.md Gemini CLI Mặc định; có thể cấu hình để đọc AGENTS.md

Danh sách hỗ trợ thay đổi nhanh; hãy kiểm tra trang https://agents.md và tài liệu chính thức của công cụ bạn dùng.

Một nguồn sự thật, nhiều “cửa vào”

Nếu đội bạn dùng nhiều công cụ (chị Lan dùng agent dòng lệnh, Khoa dùng Cursor), đừng viết năm file với nội dung lặp lại; chúng sẽ lệch nhau sau vài tuần. Hãy chọn AGENTS.md làm nguồn chính, các file riêng chỉ trỏ tới nó. Ví dụ CLAUDE.md có thể chỉ gồm một dòng nhập nội dung AGENTS.md:

MARKDOWN
@AGENTS.md

Nếu cần thêm hướng dẫn chỉ dành cho một công cụ (ví dụ cách dùng một tính năng riêng của nó), ghi vào file riêng đó, phía dưới dòng trỏ.

AGENTS.md lồng nhau

Với dự án lớn có nhiều phần khác biệt, có thể đặt thêm AGENTS.md trong thư mục con, ví dụ src/db/AGENTS.md chứa quy tắc riêng cho database. Nhiều agent đọc file gần nhất với file đang sửa. Với Mộc OMS giai đoạn MVP, một file ở gốc là đủ; đừng phức tạp hóa sớm.

Nội dung nên có và không nên có

Phép thử một câu

Với mỗi dòng trong file hướng dẫn, hỏi: “Nếu bỏ dòng này, agent có làm sai không?“ Nếu không, xóa nó. File càng dài, những quy tắc quan trọng càng dễ bị lờ đi, vì chúng bị chìm giữa những dòng hiển nhiên. Đây là cùng nguyên lý “chú ý loãng” của bài trước.

Bảng nên và không nên

✅ Nên có Ví dụ ❌ Không nên có Vì sao
Lệnh build, test, lint mà agent không đoán được npm run test:e2e cần chạy npm run db:seed trước Điều agent tự đọc code là biết Tốn chỗ, agent đã tự thấy
Quy ước khác mặc định Tiền là bigint VNĐ, không dùng số thực Quy ước chuẩn của ngôn ngữ “Dùng camelCase cho biến” là mặc định của TypeScript
Cách chạy một test đơn lẻ npx vitest run tests/unit/order-total.test.ts Tài liệu API dài Dẫn đường link hoặc đường dẫn file thay vì chép
Quy ước repo Tên nhánh, quy ước commit, quy trình PR Thông tin hay thay đổi Danh sách task tuần này, số phiên bản cụ thể dễ lỗi thời
Quyết định kiến trúc riêng của dự án Mọi ghi dữ liệu đi qua server action trong src/features/*/actions.ts Giải thích dài dòng lịch sử quyết định Để trong ADR, AGENTS.md chỉ trỏ tới
Biến môi trường bắt buộc Cần DATABASE_URL, NEXT_PUBLIC_SUPABASE_URL trong .env.local Mô tả từng file một Agent tự liệt kê được thư mục
Cạm bẫy đã từng gặp Không dùng service role key ở phía trình duyệt Lời khuyên hiển nhiên “Viết code sạch, dễ đọc” không thay đổi hành vi
Chỉ đường tới tài liệu Spec ở docs/specs/, ADR ở docs/adr/ Bí mật Không bao giờ ghi khóa, mật khẩu vào file hướng dẫn
Bàn thử

Dán AGENTS.md → đếm dòng (cảnh báo > 60), đánh dấu câu chung chung (‘code sạch’, ‘chú ý bảo mật’), chuỗi giống khóa bí mật, dòng nên chuyển sang skill/hook theo bảng ‘chọn lớp nào’; nạp sẵn bài tập 5 dòng rác

Bàn thử cần bật JavaScript.

Kết quả chỉ để tham khảo, không thay cho việc bạn tự duyệt.

AGENTS.md mẫu cho banhmoc-oms

Dưới đây là phiên bản tham khảo cho repo banhmoc-oms giai đoạn MVP. Lưu ý độ dài: đủ để đọc trong một phút.

MARKDOWNAGENTS.md
# AGENTS.md — banhmoc-oms

Hệ thống quản lý đơn hàng (Mộc OMS) cho chuỗi tiệm bánh Bánh Mộc.
Next.js App Router + TypeScript, Supabase (Postgres, Auth), Drizzle ORM, Zod, Tailwind + shadcn/ui.

## Lệnh
- Cài đặt: `npm install` (Node theo `.nvmrc`)
- Chạy local: `npm run dev` (cần `.env.local`, mẫu ở `.env.example`)
- Kiểm tra trước khi báo xong: `npm run typecheck && npm run lint && npx vitest run --reporter=dot`
- Một file test: `npx vitest run tests/unit/<ten-file>.test.ts`
- E2E: `npm run db:seed` rồi `npm run test:e2e`
- Migration: sửa `src/db/schema.ts` → `npm run db:generate` → đọc file SQL sinh ra. KHÔNG tự chạy migration lên database ngoài local.

## Quy ước dữ liệu (bắt buộc)
- Tiền: số nguyên VNĐ (`bigint`), không dùng số thực. Định dạng hiển thị bằng `formatVND` trong `src/lib/format.ts`.
- Thời gian: lưu `timestamptz`, hiển thị theo Asia/Ho_Chi_Minh qua `src/lib/time.ts`.
- Trạng thái đơn: `moi → da_xac_nhan → dang_lam → dang_giao → hoan_tat`, hoặc `da_huy`. Mọi thay đổi trạng thái đi qua `src/features/orders/status.ts` và ghi `order_status_history`.
- Mã đơn: `BM-YYMMDD-XXX`, sinh ở server, không sinh ở client.
- Số điện thoại: chuẩn hóa bằng `normalizePhone` trước khi lưu hoặc tìm.

## Kiến trúc
- Mỗi tính năng trong `src/features/<ten>/` (actions.ts, queries.ts, schema.ts, components/).
- Ghi dữ liệu qua server action; validate đầu vào bằng Zod ở server, kể cả khi client đã validate.
- Phân quyền theo vai trò `owner | manager | staff`; kiểm tra ở server và bằng RLS. Xem `docs/adr/0003-phan-quyen.md`.

## Ranh giới
- Không cài thư viện mới khi chưa hỏi.
- Không dùng `SUPABASE_SERVICE_ROLE_KEY` trong code chạy ở trình duyệt.
- Không sửa `.env*` (trừ `.env.example`), không đọc `node_modules/`, `.next/`, file lock.
- Không sửa hoặc xóa test để cho qua; sửa nguyên nhân gốc.

## Git
- Nhánh: `feat/...`, `fix/...`, `chore/...`. Commit theo Conventional Commits, tiếng Việt được.
- Mỗi PR một thay đổi nhỏ; mô tả PR nêu cách đã kiểm chứng.

## Tài liệu
- Yêu cầu: `docs/PRD.md`; spec từng tính năng: `docs/specs/`; quyết định kiến trúc: `docs/adr/`.
- Khi thay đổi ảnh hưởng spec, cập nhật spec trong cùng PR.

Vài điểm đáng chú ý trong mẫu:

  • Không có câu nào kiểu “hãy viết code chất lượng”. Mọi dòng đều cụ thể, kiểm tra được.
  • Lệnh “kiểm tra trước khi báo xong” đặt ngay đầu, biến tiêu chí kiểm chứng thành mặc định của mọi phiên.
  • Chỉ đường thay vì chép: quy tắc phân quyền chi tiết nằm trong ADR, AGENTS.md chỉ trỏ tới.
  • Ranh giới viết dạng phủ định rõ ràng, vì đó là những chỗ agent hay “tiện tay”.

Skills và lệnh tùy biến cho quy trình lặp lại

Vấn đề: quy trình dài không hợp với AGENTS.md

Một số việc lặp lại có quy trình nhiều bước: tạo migration database, thêm một trạng thái đơn mới, viết spec theo mẫu, chuẩn bị bản phát hành. Nếu nhét toàn bộ quy trình vào AGENTS.md, file sẽ phình to và mọi phiên đều phải “cõng” nội dung chỉ cần vài lần một tháng.

Skill: cẩm nang nạp khi cần

Skill là một thư mục chứa file SKILL.md (và có thể kèm script, mẫu tài liệu) mô tả kiến thức chuyên biệt hoặc quy trình lặp lại. Điểm then chốt: thường chỉ phần mô tả ngắn của skill nằm sẵn trong ngữ cảnh; agent tự nạp nội dung đầy đủ khi thấy việc đang làm khớp với mô tả, hoặc khi bạn gọi tên. Vì vậy bạn có thể có hàng chục skill mà không làm phình ngữ cảnh mỗi phiên.

Tại thời điểm viết (2026), định dạng skill dạng thư mục có SKILL.md được Claude Code hỗ trợ và đang được nhiều công cụ khác áp dụng; vị trí thư mục và cách gọi khác nhau giữa các công cụ, hãy xem tài liệu chính thức. Ví dụ một skill cho Mộc OMS, đặt tại .claude/skills/tao-migration/SKILL.md:

MARKDOWN
---
name: tao-migration
description: Quy trình thay đổi schema database bằng Drizzle cho banhmoc-oms. Dùng khi cần thêm hoặc sửa bảng, cột, chỉ mục, ràng buộc.
---

# Tạo migration an toàn

1. Đọc `src/db/schema.ts` và spec liên quan trong `docs/specs/` trước khi sửa.
2. Sửa schema. Tiền dùng `bigint`, thời gian dùng `timestamp with time zone`.
3. Chạy `npm run db:generate`. Mở file SQL mới trong `src/db/migrations/` và kiểm tra:
   - Có lệnh xóa cột hoặc bảng không? Nếu có, DỪNG và hỏi người dùng.
   - Cột mới NOT NULL trên bảng đã có dữ liệu có giá trị mặc định chưa?
4. Áp dụng lên database local: `npm run db:migrate:local`. Không chạy lên database khác.
5. Cập nhật `src/db/seed.ts` nếu cần dữ liệu mẫu cho cột mới.
6. Cập nhật hoặc thêm test liên quan; chạy lệnh kiểm tra trong AGENTS.md.
7. Báo cáo: file SQL sinh ra (dán nội dung), rủi ro với dữ liệu hiện có, cách quay lui.

Lưu ý phần description: đây là thứ agent đọc để quyết định khi nào dùng skill, nên phải nói rõ khi nào cần nó. Các lệnh như db:migrate:local là ví dụ; dự án của bạn đặt tên script trong package.json thế nào thì ghi đúng thế ấy. Chi tiết về migration an toàn có ở bài Database production và migration10-05.

Lệnh tùy biến: prompt đóng gói

Lệnh tùy biến (custom command, thường gọi bằng dấu gạch chéo như /review-pr) là một prompt bạn hay dùng, lưu thành file để gọi nhanh. Khác với skill (agent có thể tự nạp khi thấy phù hợp), lệnh tùy biến thường do bạn chủ động gọi. Ví dụ những lệnh chị Lan hay dùng: /phong-van-spec (phỏng vấn ngược rồi viết spec), /ban-giao (viết file bàn giao trước khi làm mới phiên), /review-diff (review thay đổi so với spec). Nhiều công cụ hỗ trợ cơ chế này; ở một số công cụ, skill và lệnh tùy biến đã gộp làm một.

Cơ chế Nạp khi nào Hợp với Ví dụ
AGENTS.md Mọi phiên Quy ước ngắn, lệnh, cạm bẫy “Tiền là bigint VNĐ”
Skill Khi việc khớp mô tả hoặc khi được gọi Quy trình dài, kiến thức chuyên biệt Quy trình tạo migration
Lệnh tùy biến Khi bạn gọi Prompt hay dùng /ban-giao
Hook Tự động tại thời điểm cố định Quy tắc bắt buộc Chặn sửa .env

Hooks: quy tắc bắt buộc tự động

Khuyến nghị và bắt buộc

Mọi thứ viết trong AGENTS.md hay skill đều là khuyến nghị: agent thường làm theo, nhưng không có gì đảm bảo. Phần lớn thời gian thế là đủ. Nhưng có những quy tắc mà vi phạm một lần là quá đắt: sửa file bí mật, đẩy code chưa qua kiểm tra, chạy lệnh xóa dữ liệu.

Hook là script chạy tự động tại các thời điểm cố định trong vòng lặp agent: trước khi agent dùng một công cụ, sau khi sửa file, khi agent định kết thúc lượt làm việc… Hook không phụ thuộc vào việc agent “nhớ” hay “đồng ý”; nó luôn chạy. Có thể ví hook như cảm biến khói trong bếp: không ai cần nhắc, nó tự kêu.

Hình chữ ký Phát lại phiên agent
  1. AGENTS.md: khuyến nghị, mọi phiên
  2. Skill: quy trình, nạp khi cần
  3. Hook: bắt buộc, chạy tự động trên máy
  4. Git hook / CI: chốt chặn cuối, độc lập công cụ
  5. Không được sửa file bí mật
Xem sơ đồ gốc (Hình 1)

Vuốt ngang để xem hết sơ đồ

AGENTS.md: khuyến nghị, mọi phiên

Skill: quy trình, nạp khi cần

Hook: bắt buộc, chạy tự động trên máy

Git hook / CI: chốt chặn cuối, độc lập công cụ

Vuốt ngang để xem hết sơ đồ

AGENTS.md: khuyến nghị, mọi phiên

Skill: quy trình, nạp khi cần

Hook: bắt buộc, chạy tự động trên máy

Git hook / CI: chốt chặn cuối, độc lập công cụ

Hình 1 Sơ đồ luồng
Đọc sơ đồ dạng chữ
  1. AGENTS.md: khuyến nghị, mọi phiên → Skill: quy trình, nạp khi cần
  2. Skill: quy trình, nạp khi cần → Hook: bắt buộc, chạy tự động trên máy
  3. Hook: bắt buộc, chạy tự động trên máy → Git hook / CI: chốt chặn cuối, độc lập công cụ

Ví dụ hook trong Claude Code

Hook được cấu hình trong file cài đặt của dự án. Ví dụ sau làm hai việc: chặn agent sửa file .env thật, và tự định dạng code sau mỗi lần agent sửa file.

JSON
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/chan-sua-env.sh" }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write --ignore-unknown" }
        ]
      }
    ]
  }
}

Script chặn sửa file bí mật:

BASH
#!/usr/bin/env bash
# .claude/hooks/chan-sua-env.sh
# Agent gửi thông tin lời gọi công cụ dạng JSON qua stdin; lấy đường dẫn file định sửa
file=$(jq -r '.tool_input.file_path // empty')

case "$file" in
  *.env|*.env.*)
    if [[ "$file" != *.env.example ]]; then
      echo "Không được sửa file bí mật: $file. Hãy cập nhật .env.example và báo người dùng." >&2
      exit 2   # mã thoát 2: chặn hành động và gửi lý do lại cho agent
    fi
    ;;
esac
exit 0

Tên sự kiện, cú pháp và cách truyền dữ liệu là của Claude Code tại thời điểm viết (2026); một số agent khác cũng có cơ chế hook tương tự với cú pháp riêng. Hãy đối chiếu tài liệu chính thức trước khi dùng.

Lớp bắt buộc không phụ thuộc công cụ

Nếu công cụ của bạn không có hook, hoặc đội dùng nhiều công cụ, vẫn có hai lớp bắt buộc độc lập:

  • Git hook chạy trên máy trước khi commit (thường thiết lập qua công cụ như husky hoặc lefthook): chạy lint, type check, quét secret. Áp dụng cho cả người lẫn agent.
  • CI trên GitHub Actions: mọi pull request phải qua test, lint, type check mới được merge. Đây là chốt chặn cuối cùng, không ai bỏ qua được. Xem bài CI/CD với GitHub Actions10-04 và Kiểm tra tĩnh08-06.

Chọn lớp nào cho quy tắc nào

Quy tắc Lớp phù hợp Lý do
“Tiền dùng bigint” AGENTS.md + test Cần hiểu ngữ cảnh; test bắt vi phạm
“Quy trình tạo migration” Skill Dài, chỉ cần khi làm migration
“Định dạng code” Hook sau khi sửa file Máy móc, không cần agent nhớ
“Không sửa .env” Hook chặn trước khi sửa Vi phạm một lần là rủi ro
“Không merge khi test đỏ” CI Chốt chặn cuối, áp dụng cho mọi người

Giữ file hướng dẫn tiến hóa cùng dự án

File hướng dẫn là tài liệu sống, không phải văn bản viết một lần:

  • Đưa vào Git. Mọi thay đổi AGENTS.md, skill, hook đều qua pull request, để cả đội thấy và góp ý.
  • Thêm khi có lỗi lặp lại. Agent mắc cùng một lỗi hai lần là tín hiệu thêm một dòng.
  • Xóa khi không còn cần. Quy tắc cho thư viện đã gỡ, cạm bẫy đã được hook chặn: xóa khỏi AGENTS.md.
  • Rà soát định kỳ (ví dụ hằng tháng): đọc lại từng dòng với phép thử “bỏ đi có sai không”.
  • Nhờ agent đề xuất, bạn quyết định: “Dựa trên phiên vừa rồi, có điều gì nên thêm vào AGENTS.md để lần sau không phải nhắc? Đề xuất tối đa 3 dòng, ngắn gọn.”
  • Kiểm tra hiệu quả: nếu agent liên tục làm trái một dòng đã có, có thể dòng đó diễn đạt mơ hồ, bị chìm giữa file quá dài, hoặc cần chuyển thành hook.

Áp dụng vào dự án Bánh Mộc

Nhật ký công trình · Bánh Mộc

BM-261012-020

12.10.2026

  • Chị LanChủ chuỗi
  • KhoaFreelancer
Chị Lan cắt bản hướng dẫn dài gần 300 dòng xuống còn một tấm thẻ ngắn

Phiên bản AGENTS.md đầu tiên của chị Lan dài gần 300 dòng. Chị chép cả PRD vào, liệt kê từng file, thêm những câu như “hãy viết code dễ hiểu”, “luôn chú ý bảo mật”. Kết quả trái ngược mong đợi: agent vẫn thỉnh thoảng dùng số thực cho tiền, dù quy tắc đó nằm ở dòng 187.

Chị áp dụng phép thử từng dòng, cắt xuống còn khoảng 50 dòng như mẫu ở trên. PRD chuyển về docs/PRD.md, AGENTS.md chỉ trỏ tới. Quy tắc tiền được đưa lên đầu mục “Quy ước dữ liệu (bắt buộc)”. Từ đó lỗi số thực không lặp lại.

Hai tuần sau, có lần agent sửa .env.local để “tiện” thêm một biến môi trường, làm hỏng cấu hình kết nối Supabase của chị. Dòng “Không sửa .env*” vẫn nằm đó, nhưng đó chỉ là khuyến nghị. Chị nhờ agent viết hook chặn sửa file .env (như ví dụ ở trên), đọc kỹ script trước khi bật. Từ đó, vi phạm không thể xảy ra nữa, và dòng trong AGENTS.md vẫn giữ để agent hiểu lý do.

Khi làm migration thêm cột zalo_id cho bảng customers, chị nhận ra mình dặn agent cùng một quy trình lần thứ ba. Chị biến nó thành skill tao-migration. Lần sau chỉ cần nói “thêm cột birthday_reminder_sent_at cho customers”, agent tự nạp skill và làm đúng bảy bước.

Khi Khoa tham gia ở giai đoạn 4, anh dùng Cursor. Vì AGENTS.md là nguồn chính, Cursor đọc được ngay; Khoa chỉ thêm một vài quy tắc riêng cho giao diện trong thư mục rules của Cursor, phía dưới ghi chú “quy tắc chung xem AGENTS.md”. CI trên GitHub là chốt chặn chung cho cả hai.

Prompt mẫu

Nhờ agent soạn AGENTS.md phiên bản đầu từ dự án có sẵn:

Giao việc cho agent

Đọc package.json, cấu trúc thư mục src/, docs/ và các file cấu hình.
Soạn AGENTS.md cho repo này, tối đa 60 dòng, gồm: lệnh (cài, chạy, kiểm tra, test một file),
quy ước dữ liệu khác mặc định, kiến trúc thư mục, ranh giới (điều không được làm), Git, chỉ đường tài liệu.
Với mỗi dòng, tự hỏi "bỏ dòng này agent có làm sai không?"; nếu không thì bỏ.
Không chép tài liệu dài, không ghi giá trị bí mật. Trình bày bản nháp để mình duyệt, chưa ghi file.

Rà soát AGENTS.md hiện có:

Giao việc cho agent

Đọc AGENTS.md. Với từng dòng, đánh giá: giữ / rút gọn / chuyển sang docs hoặc skill / xóa,
kèm lý do một câu. Chỉ ra dòng nào nên chuyển thành hook vì vi phạm quá đắt.
Không sửa file, chỉ trả về bảng đề xuất.

Đóng gói quy trình thành skill:

Giao việc cho agent

Mình vừa hướng dẫn bạn quy trình [tên quy trình] trong phiên này.
Hãy viết thành skill tại [đường dẫn thư mục skill theo công cụ]/[ten-skill]/SKILL.md:
frontmatter có name và description (nêu rõ KHI NÀO dùng), thân là các bước đánh số, ngắn,
có bước kiểm chứng và điều kiện phải dừng lại hỏi người dùng.

Sai lầm thường gặp

  1. Sự cố 01

    File hướng dẫn quá dài.

    Triệu chứng

    Quy tắc quan trọng bị chìm, agent lờ đi.

    Cách tránh

    Phép thử từng dòng; chuyển nội dung dài sang docs/ hoặc skill; giữ AGENTS.md trong vài chục dòng.

  2. Sự cố 02

    Viết lời khuyên chung chung.

    Triệu chứng

    “Viết code sạch”, “chú ý bảo mật” không thay đổi hành vi agent.

    Cách tránh

    Thay bằng quy tắc cụ thể, kiểm tra được: “Validate đầu vào bằng Zod ở server.”

  3. Sự cố 03

    Dựa vào khuyến nghị cho quy tắc sống còn.

    Triệu chứng

    AGENTS.md không đảm bảo agent tuân thủ 100%.

    Cách tránh

    Quy tắc mà vi phạm một lần là quá đắt thì làm thành hook, Git hook hoặc CI.

  4. Sự cố 04

    Nhiều file hướng dẫn lặp nội dung cho từng công cụ.

    Triệu chứng

    Sau vài tuần chúng lệch nhau, agent nhận chỉ dẫn mâu thuẫn.

    Cách tránh

    AGENTS.md là nguồn chính, file riêng của công cụ chỉ trỏ tới và thêm phần riêng.

  5. Sự cố 05

    Viết một lần rồi bỏ quên.

    Triệu chứng

    Tài liệu lỗi thời khiến agent làm sai một cách tự tin.

    Cách tránh

    Đưa vào Git, sửa qua PR, rà soát định kỳ, thêm dòng khi có lỗi lặp lại.

  6. Sự cố 06

    Ghi bí mật vào file hướng dẫn.

    Triệu chứng

    File này được commit và đọc bởi nhiều công cụ.

    Cách tránh

    Chỉ ghi tên biến môi trường; giá trị để trong .env.local.

Checklist

Phiếu nghiệm thu

Bài tập thực hành

  1. Bài 1

    Cơ bản

    Phép thử từng dòng

    Lấy mẫu AGENTS.md trong bài, thêm vào 5 dòng “rác” (ví dụ “Viết code dễ đọc”, “Dùng TypeScript”). Đưa cho một người bạn (hoặc một phiên AI mới) và yêu cầu áp dụng phép thử từng dòng.

    Kết quả mong đợi

    5 dòng rác bị loại, cùng lý do. Bạn luyện được con mắt nhận ra dòng thừa.

  2. Bài 2

    Cơ bản

    Viết AGENTS.md cho dự án của bạn

    Với dự án thực hành của bạn, viết AGENTS.md không quá 50 dòng theo cấu trúc: lệnh, quy ước, kiến trúc, ranh giới, Git, tài liệu.

    Kết quả mong đợi

    Một file mà người khác đọc trong một phút là biết cách chạy, kiểm tra và những điều không được làm trong dự án.

  3. Bài 3

    Nâng cao

    Một skill và một hook

    Chọn một quy trình bạn đã lặp lại ít nhất hai lần, viết thành skill. Chọn một quy tắc sống còn, viết hook (hoặc Git hook nếu công cụ không có hook) để thực thi nó. Thử cố tình yêu cầu agent vi phạm quy tắc.

    Kết quả mong đợi

    Agent tự nạp skill khi việc khớp mô tả; hook chặn hành động vi phạm và agent nhận được lý do.

Thuật ngữ trong bài

AGENTS.md
File hướng dẫn dạng chuẩn mở cho coding agent, đặt trong repo
CLAUDE.md
File hướng dẫn mà Claude Code đọc; có thể trỏ tới AGENTS.md
Rules
File quy tắc riêng của từng công cụ, như thư mục rules của Cursor
Skill
Thư mục có SKILL.md chứa quy trình hoặc kiến thức, nạp khi cần
Lệnh tùy biến (custom command)
Prompt hay dùng được lưu lại, gọi bằng dấu gạch chéo
Hook
Script chạy tự động ở thời điểm cố định trong vòng lặp agent
Git hook
Script Git chạy tự động, ví dụ trước khi commit
CI
Tích hợp liên tục: tự động kiểm tra mỗi khi có thay đổi đẩy lên
Conventional Commits
Quy ước viết commit message có tiền tố như feat, fix, chore

Đọc thêm

Nghiệm thu tờ 02-06

Đọc xong và tự kiểm theo phiếu nghiệm thu, rồi đánh dấu tờ này.

Tác giả
Phú Digital
Đội ngũ PDL Digital — triển khai website, giải pháp AI và digital marketing cho doanh nghiệp.
Tư vấn 1:1

Muốn dựng phần mềm riêng cho doanh nghiệp của bạn?

Kỹ sư PDL cùng bạn chọn bước đầu tiên phù hợp — phản hồi trong giờ làm việc (T2–T7, 8h–18h).

<script src="https://cdn.jsdelivr.net/npm/page-flip/dist/js/page-flip.browser.js"></script>

<div id="container-flipbook" style="display:flex; justify-content:center;">
    <div id="my-flipbook">
       <div class="page"> <img src="https://pdl.vn/wp-content/uploads/2025/05/AI-Google-Search.jpg" /> </div>
       <div class="page"> <img src="https://pdl.vn/wp-content/uploads/2025/05/wearable-tech-advertising.jpg" /> </div>
       <div class="page"> <img src="https://pdl.vn/wp-content/uploads/2025/05/multimodal-embeddings-digital-marketing.jpg" /> </div>
    </div>
</div>
#my-flipbook {
    box-shadow: 0 0 20px rgba(0,0,0,0.2);
    margin: 20px auto;
    background-color: #f0f0f0;
}

.page {
    background-color: white;
    overflow: hidden;
}

.page img {
    width: 100%;
    height: 100%;
    object-fit: cover; /* Giúp ảnh vừa vặn trang sách */
}
// Đảm bảo thư viện đã sẵn sàng
function initFlipbook() {
    const el = document.getElementById("my-flipbook");
    if (!el || !window.St) return; // Nếu chưa thấy thư viện St thì thoát

    const pageFlip = new St.PageFlip(el, {
        width: 550,
        height: 733,
        size: "stretch",
        minWidth: 315,
        maxWidth: 1000,
        minHeight: 420,
        maxHeight: 1350,
        showCover: true,
        maxShadowOpacity: 0.5,
    });

    pageFlip.loadFromHTML(document.querySelectorAll(".page"));
}

// Chạy khởi tạo
if (document.readyState === 'complete') {
    initFlipbook();
} else {
    window.addEventListener('load', initFlipbook);
}
PDL · Tư vấn 1:1

Nhận tư vấn
miễn phí

Để lại thông tin, chuyên viên PDL sẽ liên hệ để hiểu nhu cầu và đề xuất giải pháp phù hợp ngân sách của bạn.

  • Phân tích nhanh hiện trạng website, quảng cáo, kênh bán hàng
  • Đề xuất lộ trình & báo giá minh bạch, rõ từng hạng mục
  • Không ràng buộc: nghe tư vấn xong mới quyết định
Giờ làm việc T2–T7 · 08:00–18:00

Chỉ mất khoảng 30 giây

Bạn cần tư vấn về

🔒 Thông tin được bảo mật, chỉ dùng để PDL liên hệ tư vấn.