> ## Documentation Index
> Fetch the complete documentation index at: https://huongdan.luklak.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bài 6 — Best practices & Guardrails

> 8 nguyên tắc tách biệt người dùng Claude Code hiệu quả với người dùng thất vọng. Prompt tốt là prompt có thể kiểm chứng.

**Điểm cốt lõi của bài này**

<Check>
  **Người dùng Claude Code giỏi nhất không phải người viết prompt đẹp nhất — mà là người biết khi nào dừng lại, kiểm chứng, và biết cách tổ chức hệ thống hợp với bộ não mình. Prompt tốt là prompt có thể kiểm chứng.**
</Check>

## Mở đầu

Sau 5 bài, bạn đã hiểu Claude Code vận hành ra sao. Bài này là phần "kinh nghiệm đau". 8 nguyên tắc đã được đúc kết từ hàng trăm phiên làm việc thực tế — tránh cho bạn những lỗi mà ai cũng mắc khi mới bắt đầu.

## 8 nguyên tắc cốt lõi

<CardGroup cols={2}>
  <Card title="1. Ngữ cảnh là vua (Context is king)" icon="crown" iconType="duotone">
    Đặt quy tắc bền vững vào CLAUDE.md, không vào chat. File luôn có thể đọc lại; hội thoại sẽ bị nén mất khi cửa sổ ngữ cảnh đầy.
  </Card>

  <Card title="2. Lên kế hoạch trước khi thực thi" icon="list-check" iconType="duotone">
    Với task lớn, dùng plan mode. Claude lên kế hoạch, bạn duyệt, rồi mới thực thi. Tiết kiệm nhiều hơn là viết lại.
  </Card>

  <Card title="3. Vòng lặp ngắn + kiểm chứng thắng vòng lặp dài + hy vọng" icon="arrows-rotate" iconType="duotone">
    Sau mỗi bước quan trọng: đọc lại file, chạy test, xác nhận. Đừng giao 10 task cùng lúc rồi hy vọng tất cả đúng.
  </Card>

  <Card title="4. Uỷ quyền cho sub-agent với task cách ly nặng ngữ cảnh" icon="users-gear" iconType="duotone">
    Nghiên cứu codebase, phân tích dependency, dịch file dài — giao cho sub-agent. Cuộc trò chuyện chính của bạn không bị rác.
  </Card>

  <Card title="5. Không bao giờ tin đầu ra sai một cách tự tin" icon="triangle-exclamation" iconType="duotone">
    Đặc biệt: số liệu, URL, tên API, lời khuyên pháp lý/y tế. LLM luôn tự tin — đúng hay sai đều như nhau.
  </Card>

  <Card title="6. Giữ con người ở những quyết định phán xét" icon="user-check" iconType="duotone">
    AI có thể soạn thảo chiến lược, thương hiệu, trust với khách hàng. Nhưng bạn là người phê duyệt. Đừng tự động hóa phán xét.
  </Card>

  <Card title="7. Commit thường, push ít hơn" icon="code-branch" iconType="duotone">
    Commit (lưu lại mốc) sau mỗi bước rõ ràng. Push (đẩy lên public) chỉ khi đã kiểm tra kỹ. Reversibility (khả năng quay lui) quan trọng.
  </Card>

  <Card title="8. Tổ chức theo CÁCH CỦA BẠN" icon="folder-tree" iconType="duotone">
    Quy ước thư mục chính thức (`.claude/agents/`, `.claude/skills/`) là gợi ý, không phải luật. Nếu cấu trúc của bạn hợp hơn với bộ não bạn — dùng nó. Claude theo ý định, không theo quy ước.
  </Card>
</CardGroup>

## Ví dụ thực: Bad prompt vs Good prompt

<Tabs>
  <Tab title="Prompt kém">
    ```
    Sửa lỗi login.
    ```

    **Vấn đề**: Claude không biết lỗi gì, ở file nào, hành vi mong muốn ra sao. Nó sẽ đoán, có thể đoán sai.
  </Tab>

  <Tab title="Prompt tốt">
    ```
    Trong file src/auth/login.ts, user nhập sai password 3 lần thì không bị lockout —
    cần lockout 15 phút. Xem hàm `handleLoginAttempt`. Sau khi sửa, chạy test
    `npm test -- login.test.ts` và xác nhận pass.
    ```

    **Vì sao tốt**: ngữ cảnh rõ (file nào, hàm nào), hành vi mong muốn rõ (lockout 15 phút), có cách kiểm chứng (test cụ thể).
  </Tab>
</Tabs>

## Anti-pattern phổ biến

<Warning>
  Những lỗi dưới đây xuất hiện ở gần như mọi người mới bắt đầu. Nhận ra sớm, tránh được nhiều giờ làm lại:

  * **Mơ hồ hóa**: "làm cho nó tốt hơn" — tốt theo tiêu chí gì? Đo thế nào?
  * **Uỷ quyền việc phán xét**: "quyết định xem nên dùng React hay Vue" — đây là câu hỏi kiến trúc, con người phải trả lời.
  * **Không kiểm chứng**: giao task, nhận báo cáo "xong rồi", không đọc lại → bug ngầm.
  * **Cửa sổ ngữ cảnh bị bội thực**: đọc quá nhiều file, trò chuyện quá dài → Claude "quên" quy tắc ban đầu.
  * **Trust numbers blindly**: "AI báo cáo đã dịch 45 file", thực tế chỉ 40. Luôn đếm lại cho chắc.
</Warning>

## Nguyên tắc vàng: "Verified > Done"

<Info>
  Nguyên tắc duy nhất quan trọng nhất của Claude Code: **KIỂM CHỨNG QUAN TRỌNG HƠN HOÀN THÀNH**. Một task "xong nhưng sai" tệ hơn một task "chưa xong". Luôn xác nhận.
</Info>

```mermaid theme={null}
flowchart TD
    Start([Nhận task mới]) --> Size{Task lớn<br/>hay nhỏ?}
    Size -->|Nhỏ, 1-2 bước| Run[Chạy trực tiếp]
    Size -->|Lớn / rủi ro cao| Plan[Plan mode<br/>lên kế hoạch]

    Plan --> Review{Bạn duyệt<br/>kế hoạch?}
    Review -->|Chưa ổn| Plan
    Review -->|OK| Run

    Run --> Isolation{Task có cần<br/>ngữ cảnh nặng?}
    Isolation -->|Có| Delegate[Uỷ quyền<br/>cho sub-agent]
    Isolation -->|Không| Direct[Main agent<br/>tự làm]

    Delegate --> Verify
    Direct --> Verify[Kiểm chứng<br/>đọc lại, chạy test]

    Verify --> Check{Kết quả<br/>đúng?}
    Check -->|Không| Fix[Sửa + lặp lại]
    Fix --> Verify
    Check -->|Có| Commit[Commit thường]

    Commit --> Push{Đã thực sự<br/>xong & đúng?}
    Push -->|Chưa chắc| Verify
    Push -->|Chắc| Done([Push + publish])

    style Start fill:#e3f2fd
    style Done fill:#c8e6c9
    style Verify fill:#fff9c4
    style Check fill:#fff9c4
```

Sơ đồ trên là **vòng lặp ra quyết định** bạn nên chạy trong đầu mỗi task. Bốn điểm quyết định (diamond) chính là nơi gu thẩm mỹ và kỷ luật phân biệt người dùng giỏi với người dùng thất vọng.

## Tự kiểm tra

<AccordionGroup>
  <Accordion title="Khi nào tôi nên dùng plan mode?" icon="circle-question">
    Khi task có nhiều bước, khi bạn chưa chắc cách tiếp cận, khi rủi ro sai cao (ví dụ sửa file quan trọng). Với task nhỏ 1-2 bước, không cần.
  </Accordion>

  <Accordion title="Claude báo 'xong rồi', tôi có nên tin không?" icon="circle-question">
    **Không mù quáng.** Luôn: đọc lại file thay đổi, chạy test, xác nhận kết quả. Claude đôi khi báo cáo thiếu chính xác, đặc biệt với task phức tạp.
  </Accordion>

  <Accordion title="Tôi có cần phải tuân theo cấu trúc thư mục `.claude/agents/` không?" icon="circle-question">
    **Không.** Đó là convention chính thức, không phải luật. Bạn có thể đặt agent ở bất kỳ đâu. Claude đọc ý định qua prompt, không quét cấu trúc cứng.
  </Accordion>
</AccordionGroup>

## Bài tập

<Steps>
  <Step title="Lấy một task thực tế của bạn">
    Đừng nghĩ ra giả. Ví dụ: *"sửa lỗi trong file config.yaml"*, *"dịch bài blog mới nhất sang tiếng Anh"*.
  </Step>

  <Step title="Viết prompt kém">
    Càng ngắn càng tốt, bỏ ngữ cảnh. Quan sát xem bạn có xu hướng viết gọn thế nào.
  </Step>

  <Step title="Viết prompt tốt">
    Đầy đủ vai trò, ngữ cảnh, task, ràng buộc, cách kiểm chứng. Dài hơn prompt kém 3-5 lần.
  </Step>

  <Step title="So sánh">
    Prompt tốt dài hơn, nhưng tiết kiệm thời gian tổng thể — ít phải làm lại.
  </Step>

  <Step title="Thử cả 2 prompt trên Claude Code">
    Quan sát khác biệt về độ chính xác, số lần bạn phải chỉnh lại, và thời gian hoàn thành.
  </Step>
</Steps>

## Tiếp theo?

* [Bài 7 — Nâng cao: Skills, Hooks, MCP, Schedule](/06-academy/claude-code/nang-cao)
* [Quay lại Bài 5 — Ví dụ Lulu](/06-academy/claude-code/vi-du-thuc-te-lulu)
