Claude Code Mastery: Từ Người Dùng Casual Thành Daily Driver

Karify98 & Amy 🌸·
Cover Image for Claude Code Mastery: Từ Người Dùng Casual Thành Daily Driver

Khoảng Cách Giữa Casual User và Daily Driver

Claude Code có khoảng cách rất lớn giữa người dùng casual và daily driver. Người dùng casual gõ prompt, chấp nhận đề xuất, xem nó như autocomplete nâng cao. Daily driver dùng nó như một agent lập trình được — có bộ nhớ, lệnh tùy chỉnh, phiên song song, và cấu hình dự án tích lũy qua thời gian.

Bài viết này dành cho nhóm thứ hai.

Plan Mode: Đừng Nhảy Thẳng Vào Code

Nguyên tắc quan trọng nhất từ Boris Cherny (đội Claude Code): cho Claude cách tự xác minh công việc của chính nó. Bỏ qua bước này, developer là vòng phản hồi duy nhất. Khi Claude tự xác minh được, chất lượng output tăng 2-3x.

Một số pattern cụ thể:

Khám phá → lập kế hoạch → code. Nhấn Shift+Tab hai lần để vào plan mode. Claude ở chế độ read-only — đọc file, truy vết flow, hiểu data model. Sau đó mới lập kế hoạch, rồi thực thi. Bỏ qua plan cho sửa lỗi nhỏ. Dùng plan cho thay đổi chạm nhiều hơn một file.

Dùng plan mode như design document. Claude A viết plan. Claude B (phiên mới) review plan đó như staff engineer. Không context bias, Claude B phát hiện lỗ hổng Claude A bỏ sót.

Tham chiếu, đừng mô tả. Thay vì "xem module auth", gõ @src/auth/login.py. Thay vì paste lỗi, pipe nó: cat error.log | claude. Context chính xác luôn tốt hơn mô tả xấp xỉ.

Ủy thác, đừng pair-program. Cat Wu (Claude Code team): "Model hoạt động tốt nhất khi developer xem nó như kỹ sư được giao việc, không phải pair programmer hướng dẫn từng dòng." Viết brief rõ ràng, rồi để nó chạy.

CLAUDE.md: File Nhỏ, Tác Động Lớn

CLAUDE.md được load vào đầu mỗi phiên. Viết sai → Claude lặp lại cùng một lỗi. Viết đúng → cùng một prompt cho ra output tốt hơn hẳn.

Hai nguyên tắc Boris nhấn mạnh:

Giữ nó ngắn. Với mỗi dòng, tự hỏi: "Xóa dòng này có khiến Claude phạm lỗi không?" Nếu không → cắt bỏ.

Để Claude tự viết rule cho chính nó. Mỗi khi Claude làm sai, thêm vào cuối prompt: "Update CLAUDE.md so you do not repeat this." Boris gọi Claude "eerily good" ở khả năng chắt lọc lỗi của chính nó. Lặp lại vài tuần, CLAUDE.md trở thành danh sách mọi gotcha của dự án.

CLAUDE.md thật của đội Claude Code (được Boris chia sẻ công khai):

# Development Workflow
**Always use `bun`, not `npm`.**
# 1. Make changes
# 2. Typecheck (fast)
bun run typecheck
# 3. Run tests
bun run test -- -t "test name"
bun run test:file -- "glob"
# 4. Lint before committing
bun run lint:file -- "file1.ts"
bun run lint
# 5. Before creating PR
bun run lint:claude && bun run test

Toàn bộ file chỉ có vậy. Lệnh build Claude không đoán được. Thứ tự chạy chính xác. Cách gọi single test. Nghi thức trước PR. Không style guide. Không codebase tour. Không lời sáo rỗng.

Một mẫu CLAUDE.md đầy đủ hơn theo triết lý tương tự:

# Code style
- Use ES modules (import/export), not CommonJS (require)
# Workflow
- Always use `bun`, not `npm`
- Run `bun run typecheck` before claiming done
- Never push to main directly. Always open a PR.
# Architecture
- All API routes go through src/api/middleware/auth.ts
- New database queries go in src/db/queries/. No inline raw SQL.
# Gotchas
- `User` và `UserRecord` là hai type khác biệt.
- `formatCurrency` mặc định là USD. Dùng `formatCurrencyByLocale` cho quốc tế.

Phần "Gotchas" mới là thứ tạo ra khác biệt. Mỗi entry là một lỗi Claude từng mắc, được ghi lại ngay khoảnh khắc nó xảy ra.

.claude/ Directory: Hơn Cả Một File

Thư mục .claude/ là hệ thống cấu hình phân lớp:

  • CLAUDE.md — load mọi phiên, commit vào git cho cả team
  • CLAUDE.local.md — riêng tư, gitignored, chứa ghi chú cá nhân
  • rules/*.md — hướng dẫn theo chủ đề, có thể path-gate (chỉ load khi làm việc trong thư mục cụ thể)
  • skills//SKILL.md — prompt tái sử dụng, gọi bằng /name
  • agents/*.md — định nghĩa subagent

Một pattern mạnh: sau mỗi lần review PR, dump tất cả feedback vào CLAUDE.local.md. Qua thời gian, file này trở thành bộ rule cá nhân hóa cho chính xác những gì reviewer thường góp ý.

"Compounding Engineering"

Boris dùng thuật ngữ "Compounding Engineering" để mô tả quá trình mỗi PR review trở thành một cải tiến CLAUDE.md. Trong PR comment:

nit: dùng string literal, không dùng ts enum
@claude add to CLAUDE.md to never use enums, always prefer literal unions

Mỗi comment review không chỉ fix code hiện tại — nó còn ngăn Claude lặp lại lỗi đó trong tương lai. Đây là vòng lặp cải tiến tự động tích lũy theo thời gian.

Kết Luận

Khác biệt giữa casual user và daily driver không nằm ở kỹ năng prompt. Nó nằm ở việc xây dựng hệ thống: plan mode, CLAUDE.md duy trì liên tục, phân lớp .claude/, và vòng lặp "compounding engineering" từ mỗi PR review.

Bắt đầu từ hôm nay: mỗi khi Claude mắc lỗi, thêm "Update CLAUDE.md so you do not repeat this." Đây là thói quen đơn giản nhất nhưng mang lại hiệu quả tích lũy cao nhất.