Lời biên tập: Vào tháng 1 năm 2026, lời phàn nàn của Andrej Karpathy về việc Claude viết mã đã chỉ ra một tệp có vẻ nhỏ nhưng cực kỳ quan trọng trong quy trình lập trình AI: CLAUDE.md. Forrest Chang sau đó đã tổng hợp những vấn đề này thành 4 quy tắc ứng xử, nhằm ràng buộc các lỗi phổ biến của Claude khi viết mã: giả định ngầm định, kỹ thuật hóa quá mức, làm hỏng mã không liên quan và thiếu tiêu chuẩn thành công rõ ràng.
Nhưng vài tháng sau, phạm vi sử dụng Claude Code đã không chỉ còn là "để mô hình viết một đoạn mã". Khi Agent đa bước, kích hoạt chuỗi hook, tải xung đột kỹ năng và cộng tác đa kho mã trở thành tiêu chuẩn, các kiểu thất bại mới cũng bắt đầu xuất hiện: mô hình mất kiểm soát trong nhiệm vụ dài, kiểm tra thông qua nhưng không xác minh logic thực sự, di chuyển hoàn thành nhưng bỏ qua lỗi một cách âm thầm, các phong cách mã khác nhau bị trộn lẫn sai lầm.
Tác giả bài viết này đã thử nghiệm 30 kho mã trong 6 tuần và thêm 8 quy tắc mới dựa trên 4 quy tắc gốc của Karpathy, nhằm bao quát các vấn đề mới khi lập trình AI chuyển từ việc bổ sung đơn lẻ sang hợp tác hóa Agent.
Dưới đây là bài viết gốc:
Cuối tháng 1 năm 2026, Andrej Karpathy đã đăng một chuỗi tweet, phàn nàn về cách Claude viết mã. Ông chỉ ra ba vấn đề điển hình: đưa ra giả định sai lầm mà không có giải thích, phức tạp hóa quá mức, và gây ra sự phá hủy không liên quan đối với mã lẽ ra không nên sửa đổi.
Forrest Chang thấy chuỗi tweet này, đã tổng hợp những lời phàn nàn thành 4 quy tắc ứng xử, viết vào một tệp CLAUDE.md riêng biệt và đăng lên GitHub. Dự án này đạt được 5.828 Star ngay trong ngày đầu tiên, được 60.000 lần lưu trong hai tuần, và hiện nay đã có 120.000 Star, trở thành kho mã đơn tệp phát triển nhanh nhất năm 2026.
Sau đó, tôi đã dùng 30 kho mã để kiểm tra nó trong 6 tuần.
4 quy tắc này thực sự hiệu quả. Xác suất xuất hiện lỗi trước đây khoảng 40%, trong các nhiệm vụ mà các quy tắc này phát huy tác dụng, đã giảm xuống dưới 3%. Nhưng vấn đề là, mẫu ban đầu này được tạo ra để giải quyết các lỗi xuất hiện khi Claude viết mã vào tháng 1.
Đến tháng 5 năm 2026, các vấn đề mà hệ sinh thái Claude Code phải đối mặt đã khác: các Agent xung đột lẫn nhau, kích hoạt chuỗi hook, xung đột tải kỹ năng, và gián đoạn quy trình công việc đa bước xuyên phiên.
Vì vậy, tôi đã thêm 8 quy tắc nữa. Dưới đây là bản CLAUDE.md đầy đủ với 12 quy tắc: lý do tại sao mỗi quy tắc đáng để thêm vào, và bản mẫu gốc của Karpathy sẽ thất bại thầm lặng ở 4 điểm nào.
Nếu bạn muốn bỏ qua giải thích và sao chép sử dụng ngay, tệp đầy đủ được đặt ở cuối bài.
Tại sao điều này quan trọng
CLAUDE.md của Claude Code là tệp bị đánh giá thấp nhất trong toàn bộ ngăn xếp công nghệ lập trình AI. Hầu hết các nhà phát triển thường mắc ba loại sai lầm:
Thứ nhất, coi nó như thùng rác sở thích, nhồi nhét tất cả thói quen của mình vào, cuối cùng phình to đến hơn 4000 token, tỷ lệ tuân thủ quy tắc giảm xuống 30%.
Thứ hai, hoàn toàn không sử dụng, mỗi lần đều nhắc lại. Điều này gây lãng phí token gấp 5 lần, và thiếu tính nhất quán giữa các phiên khác nhau.
Thứ ba, sao chép một mẫu rồi không bao giờ động đến nữa. Nó có thể hiệu quả trong hai tuần, nhưng khi kho mã thay đổi, nó sẽ thất bại mà bạn không hề hay biết.
Tài liệu chính thức của Anthropic nói rất rõ: về bản chất, CLAUDE.md chỉ mang tính khuyến nghị. Claude sẽ tuân theo nó khoảng 80% thời gian. Một khi vượt quá 200 dòng, tỷ lệ tuân thủ sẽ giảm rõ rệt vì các quy tắc quan trọng bị chìm trong tiếng ồn.
Mẫu của Karpathy đã giải quyết vấn đề này: một tệp, 65 dòng, 4 quy tắc. Đây là mức chuẩn tối thiểu.
Nhưng mức trần có thể cao hơn. Sau khi thêm 8 quy tắc dưới đây, nó không chỉ bao quát các vấn đề viết mã mà Karpathy phàn nàn vào tháng 1 năm 2026, mà còn cả các vấn đề điều phối Agent xuất hiện vào tháng 5 năm 2026 - những vấn đề chưa tồn tại khi mẫu gốc được viết.
4 quy tắc gốc
Nếu bạn chưa xem kho của Forrest Chang, hãy xem phiên bản cơ bản này trước:
Quy tắc 1: Suy nghĩ trước khi viết mã.
Không ngầm định giả định. Hãy nêu rõ giả định của bạn, phơi bày các điểm đánh đổi. Hỏi trước khi đoán. Khi có giải pháp đơn giản hơn, hãy chủ động đưa ra ý kiến phản đối.
Quy tắc 2: Ưu tiên đơn giản.
Sử dụng mã ít nhất có thể giải quyết vấn đề. Không thêm các tính năng tưởng tượng. Không thiết kế lớp trừu tượng cho mã một lần. Nếu một kỹ sư kỳ cựu cho rằng nó quá phức tạp, thì nên được đơn giản hóa.
Quy tắc 3: Sửa đổi như phẫu thuật.
Chỉ sửa phần phải sửa. Đừng tùy tiện "tối ưu hóa" mã, chú thích hoặc định dạng liền kề. Đừng tái cấu trúc thứ chưa hỏng. Giữ phong cách nhất quán với hiện có.
Quy tắc 4: Thực thi hướng mục tiêu.
Trước tiên định nghĩa tiêu chuẩn thành công, sau đó lặp đi lặp lại cho đến khi hoàn thành xác minh. Đừng bảo Claude phải làm từng bước như thế nào, mà hãy bảo nó kết quả thành công nên trông ra sao, để nó tự lặp.
4 quy tắc này có thể giải quyết khoảng 40% kiểu thất bại mà tôi thấy trong các phiên Claude Code không có giám sát. Khoảng 60% vấn đề còn lại ẩn trong các khoảng trống dưới đây.
8 quy tắc tôi đã thêm, và lý do
Mỗi quy tắc đều đến từ một khoảnh khắc thực tế: 4 quy tắc gốc của Karpathy đã không đủ dùng. Dưới đây tôi sẽ nói về bối cảnh đó trước, sau đó đưa ra quy tắc tương ứng.
Quy tắc 5: Đừng để mô hình làm công việc phi ngôn ngữ
Quy tắc của Karpathy không bao quát điểm này. Do đó, mô hình bắt đầu quyết định những vấn đề lẽ ra nên do mã xác định xử lý: có nên thử lại một lần gọi API không, làm thế nào để định tuyến một tin nhắn, khi nào nên nâng cấp xử lý. Kết quả là, mỗi tuần phán đoán đều khác nhau. Bạn nhận được một câu lệnh if-else không ổn định, tính phí theo mỗi token 0,003 đô la.
Khoảnh khắc đó là như thế này: có một đoạn mã gọi Claude để "phán đoán khi gặp lỗi 503 có nên thử lại không". Ban đầu nó chạy rất tốt, kéo dài hai tuần, sau đó đột nhiên trở nên không ổn định, vì mô hình bắt đầu coi thân yêu cầu như ngữ cảnh phán đoán. Chiến lược thử lại trở nên ngẫu nhiên, vì bản thân prompt đã ngẫu nhiên.
Quy tắc 6: Đặt ngân sách token cứng, không có ngoại lệ
CLAUDE.md không có ràng buộc ngân sách, tương đương với một tấm séc trắng. Mỗi vòng lặp đều có thể mất kiểm soát, biến thành một đợt đổ ngữ cảnh 50.000 token. Mô hình sẽ không tự dừng lại.
Khoảnh khắc đó là như thế này: một phiên gỡ lỗi kéo dài 90 phút. Mô hình cứ lặp đi lặp lại xung quanh cùng một thông báo lỗi 8KB, và dần quên mất mình đã thử các phương án sửa chữa nào. Cuối cùng, nó bắt đầu đề xuất các phương án mà tôi đã bác bỏ từ 40 tin nhắn trước. Nếu có ngân sách token, quá trình này đã nên bị chấm dứt ở phút thứ 12.
Quy tắc 7: Phơi bày xung đột, đừng dung hòa trung bình
Khi hai phần trong kho mã mâu thuẫn với nhau, Claude sẽ cố gắng làm hài lòng cả hai bên, kết quả viết ra một mớ mã không mạch lạc.
Khoảnh khắc đó là như thế này: một kho mã tồn tại hai mẫu xử lý lỗi, một mẫu là async/await kèm try/catch rõ ràng, mẫu kia là ranh giới lỗi toàn cục. Mã mới Claude viết ra sử dụng cả hai mẫu. Kết quả là xử lý lỗi bị làm hai lần. Tôi mất 30 phút mới hiểu tại sao lỗi bị nuốt hai lần.
Quy tắc 8: Đọc trước, viết sau
Quy tắc "Sửa đổi như phẫu thuật" của Karpathy bảo Claude đừng sửa mã liền kề. Nhưng nó không bảo Claude: trước tiên hãy hiểu mã liền kề. Không có điều này, Claude sẽ viết ra mã mới xung đột với mã hiện có cách đó 30 dòng.
Khoảnh khắc đó là như thế này: Claude thêm một hàm mới có chức năng hoàn toàn giống bên cạnh một hàm đã có, vì nó không đọc hàm cũ trước. Hai hàm làm cùng một việc. Nhưng do thứ tự import, hàm mới ghi đè hàm cũ, mà hàm cũ đã tồn tại như tiêu chuẩn duy nhất trên thực tế trong 6 tháng.
Quy tắc 9: Kiểm tra không phải tùy chọn, nhưng bản thân kiểm tra không phải mục tiêu
Quy tắc "Thực thi hướng mục tiêu" của Karpathy ngụ ý kiểm tra có thể là tiêu chuẩn thành công. Nhưng trong thực tế, Claude sẽ coi "kiểm tra thông qua" là mục tiêu duy nhất, từ đó viết ra một số mã có thể thông qua kiểm tra nông cạn, nhưng lại phá hỏng thứ khác.
Khoảnh khắc đó là như thế này: Claude viết 12 bài kiểm tra cho một hàm xác thực, tất cả đều thông qua. Nhưng logic xác thực trong môi trường sản xuất hỏng. Những bài kiểm tra đó chỉ xác minh hàm "trả về cái gì đó", chứ không xác minh nó có trả về đúng thứ không. Hàm có thể thông qua kiểm tra vì nó trả về một hằng số.
Quy tắc 10: Thao tác chạy lâu cần điểm kiểm tra
Mẫu của Karpathy mặc định tương tác là một lần. Nhưng công việc Claude Code thực tế thường là đa bước: tái cấu trúc xuyên 20 tệp, xây dựng tính năng trong một phiên, gỡ lỗi xuyên nhiều commit. Nếu không có điểm kiểm tra, một bước sai, toàn bộ tiến độ trước đó đều có thể mất.
Khoảnh khắc đó là như thế này: một nhiệm vụ tái cấu trúc 6 bước sai ở bước thứ 4. Khi tôi phát hiện, Claude đã tiếp tục hoàn thành bước 5 và 6 trên trạng thái sai. Thời gian tháo gỡ sửa chữa còn dài hơn thời gian làm lại toàn bộ nhiệm vụ. Nếu có điểm kiểm tra, bước 4 đã có thể phát hiện vấn đề.
Quy tắc 11: Quy ước ưu tiên hơn sáng tạo mới
Trong một kho mã đã có mẫu trưởng thành, Claude thích giới thiệu cách viết của riêng nó. Dù cách viết của nó "tốt hơn", nhưng việc giới thiệu mẫu thứ hai, bản thân nó đã tệ hơn bất kỳ mẫu đơn lẻ nào.
Khoảnh khắc đó là như thế này: Claude giới thiệu hooks vào một kho mã React dựa trên class component. Nó thực sự chạy được. Nhưng đồng thời nó phá hỏng mẫu kiểm tra vốn có của kho mã, vì những bài kiểm tra đó phụ thuộc vào componentDidMount. Cuối cùng mất nửa ngày mới xóa và viết lại nó.
Quy tắc 12: Thất bại rõ ràng, đừng thất bại thầm lặng
Thất bại đắt giá nhất của Claude, thường là những thất bại trông giống như thành công. Một hàm "chạy được", nhưng trả về dữ liệu sai; một lần migration "hoàn thành", nhưng bỏ qua 30 bản ghi; một bài kiểm tra "thông qua", nhưng chỉ vì bản thân khẳng định là sai.
Khoảnh khắc đó là như thế này: Claude nói một lần di chuyển cơ sở dữ liệu "hoàn thành thành công". Nhưng thực tế, nó đã thầm lặng bỏ qua 14% bản ghi kích hoạt xung đột ràng buộc. Hành vi bỏ qua được ghi vào nhật ký, nhưng không được phơi bày rõ ràng. 11 ngày sau, khi dữ liệu báo cáo bắt đầu bất thường, chúng tôi mới phát hiện vấn đề.
Kết quả dữ liệu
Tôi đã theo dõi cùng một nhóm 50 nhiệm vụ đại diện trong 6 tuần, bao phủ 30 kho mã, kiểm tra ba cấu hình.
Tỷ lệ lỗi đề cập đến: nhiệm vụ cần được sửa chữa hoặc viết lại, để khớp với ý định ban đầu. Các lỗi tính bao gồm: giả định sai lầm thầm lặng, kỹ thuật hóa quá mức, phá hủy không liên quan, thất bại thầm lặng, vi phạm quy ước, dung hòa xung đột, bỏ lỡ điểm kiểm tra.
Tỷ lệ tuân thủ đề cập đến: khi một quy tắc nào đó áp dụng, xác suất Claude sẽ áp dụng rõ ràng quy tắc đó là bao nhiêu.
Kết quả thực sự thú vị, không chỉ là tỷ lệ lỗi giảm từ 41% xuống 3%. Quan trọng hơn, từ 4 quy tắc mở rộng thành 12 quy tắc, hầu như không tăng gánh nặng tuân thủ, tỷ lệ tuân thủ chỉ từ 78% giảm xuống 76%, nhưng tỷ lệ lỗi lại giảm thêm 8 điểm phần trăm. Các quy tắc mới bổ sung bao phủ các kiểu thất bại mà 4 quy tắc cũ chưa xử lý, chúng không tranh giành cùng một ngân sách chú ý.
Mẫu của Karpathy sẽ thất bại thầm lặng ở những đâu
Ngay cả không thêm quy tắc mới, mẫu 4 quy tắc gốc cũng ít nhất không đủ dùng ở 4 điểm.
Thứ nhất, nhiệm vụ Agent chạy lâu.
Quy tắc của Karpathy chủ yếu nhắm vào thời điểm Claude đang viết mã. Nhưng khi Claude đang chạy một pipeline đa bước, điều gì sẽ xảy ra? Mẫu gốc không có quy tắc ngân sách, không có quy tắc điểm kiểm tra, cũng không có quy tắc "thất bại lớn tiếng". Do đó pipeline sẽ dần trôi dạt.
Thứ hai, tính nhất quán đa kho mã.
"Khớp phong cách hiện có" mặc định chỉ có một phong cách. Nhưng trong một monorepo có 12 dịch vụ, Claude phải chọn khớp phong cách nào. Quy tắc gốc không bảo nó cách chọn. Do đó nó hoặc chọn ngẫu nhiên, hoặc trộn lẫn trung bình một vài phong cách.
Thứ ba, chất lượng kiểm tra.
"Thực thi hướng mục tiêu" sẽ coi "kiểm tra thông qua" là thành công, nhưng không nói rõ bản thân kiểm tra phải có ý nghĩa. Kết quả là, Claude viết ra một số bài kiểm tra hầu như không xác minh gì, nhưng những bài kiểm tra này khiến nó lầm tưởng mình rất tự tin.
Thứ tư, sự khác biệt giữa môi trường sản xuất và giai đoạn nguyên mẫu.
Cùng 4 quy tắc, có thể ngăn mã sản xuất bị kỹ thuật hóa quá mức, nhưng cũng có thể làm chậm phát triển nguyên mẫu. Vì đôi khi giai đoạn nguyên mẫu thực sự cần 100 dòng giàn giáo thăm dò, trước tiên tìm ra hướng đi. Quy tắc "Ưu tiên đơn giản" của Karpathy dễ kích hoạt quá mức trong mã giai đoạn đầu.
8 quy tắc mới bổ sung này không nhằm thay thế 4 quy tắc gốc của Karpathy, mà là sửa chữa các khoảng trống của chúng: mẫu gốc tương ứng với bối cảnh viết mã kiểu tự động bổ sung vào tháng 1 năm 2026; còn đến tháng 5 năm 2026, Claude Code đã bước vào môi trường cộng tác đa bước, đa kho mã do Agent điều khiển, vấn đề mà hai bên đối mặt không giống nhau.
Những phương pháp nào không hiệu quả
Trước khi quyết định cuối cùng 12 quy tắc này, tôi cũng đã thử một số phương án khác.
Thêm các quy tắc tôi thấy trên Reddit / X.
Trong số đó, hầu hết hoặc chỉ lặp lại 4 quy tắc gốc của Karpathy bằng cách diễn đạt khác, hoặc là các quy tắc đặc thù miền không thể khái quát hóa, như "luôn sử dụng class Tailwind". Cuối cùng đều xóa.
Vượt quá 12 quy tắc.
Tôi kiểm tra tối đa đến 18 quy tắc. Sau khi vượt quá 14 quy tắc, tỷ lệ tuân thủ từ 76% giảm xuống 52%. Giới hạn 200 dòng là có thật. Sau khi vượt quá độ dài này, Claude sẽ bắt đầu khớp mẫu thành "ở đây có quy tắc", thay vì thực sự đọc từng quy tắc.
Quy tắc phụ thuộc vào sự tồn tại của một số công cụ.
Ví dụ: "luôn sử dụng eslint", một khi dự án không cài đặt eslint, quy tắc này sẽ thất bại, và là thất bại thầm lặng. Sau đó tôi đổi nó thành cách diễn đạt không phụ thuộc công cụ cụ thể, ví dụ đổi "sử dụng eslint" thành "tuân theo phong cách đã được thực thi trong kho mã".
Đặt ví dụ trong CLAUDE.md, thay vì quy tắc.
Ví dụ chiếm nhiều ngữ cảnh hơn quy tắc. Ba ví dụ tiêu thụ ngữ cảnh, tương đương với khoảng 10 quy tắc, và Claude dễ quá khớp với ví dụ. Quy tắc là trừu tượng, ví dụ là cụ thể. Vì vậy, nên sử dụng quy tắc.
"Cẩn thận một chút" "suy nghĩ nghiêm túc" "tập trung một chút".
Đây đều là tiếng ồn. Tỷ lệ tuân thủ loại chỉ dẫn này giảm xuống khoảng 30%, vì chúng không thể kiểm tra được. Sau đó tôi thay thế chúng bằng các quy tắc mệnh lệnh cụ thể hơn, như "nêu rõ giả định".
Bảo Claude hãy giống như "kỹ sư kỳ cựu".
Điều này không hiệu quả. Claude vốn đã nghĩ mình giống kỹ sư kỳ cựu. Vấn đề thực sự không nằm ở chỗ nó có nghĩ như vậy không, mà ở chỗ nó có thực thi như vậy không. Quy tắc mệnh lệnh có thể thu hẹp khoảng cách này, từ ngữ nhắc danh tính không thể.
Bản CLAUDE.md đầy đủ 12 quy tắc
Dưới đây là phiên bản đầy đủ có thể sao chép dán sử dụng ngay.
Tạm thời không thể hiển thị nội dung này bên ngoài tài liệu Feishu
Lưu nó thành CLAUDE.md trong thư mục gốc kho mã. Dưới 12 quy tắc này, thêm các quy tắc chuyên biệt dự án, như ngăn xếp kỹ thuật, lệnh kiểm tra, mẫu lỗi, v.v. Tổng thể không vượt quá 200 dòng, sau khi vượt quá, tỷ lệ tuân thủ quy tắc sẽ giảm rõ rệt.
Cách cài đặt
Chỉ hai bước:
1. Nối 4 quy tắc cơ bản của Karpathy vào CLAUDE.md của bạn
curl https://raw.githubusercontent.com/forrestchang/andrej-karpathy-skills/main/CLAUDE.md >> CLAUDE.md
2. Dán các quy tắc 5–12 trong bài viết này vào bên dưới
Lưu tệp trong thư mục gốc kho mã. Ký hiệu >> ở đây rất quan trọng, tác dụng của nó là nối thêm vào CLAUDE.md đã có, thay vì ghi đè các quy tắc chuyên biệt dự án bạn đã viết.
Mô hình tâm trí
CLAUDE.md không phải danh sách mong muốn, mà là một hợp đồng hành vi, dùng để bịt các kiểu thất bại cụ thể bạn đã quan sát thấy.
Mỗi quy tắc nên trả lời một câu hỏi: Nó ngăn chặn lỗi gì?
4 quy tắc của Karpathy, ngăn các kiểu thất bại ông thấy vào tháng 1 năm 2026: giả định thầm lặng, kỹ thuật hóa quá mức, phá hủy không liên quan, tiêu chuẩn thành công yếu. Chúng là cơ sở, đừng bỏ qua.
8 quy tắc tôi thêm, ngăn các kiểu thất bại mới xuất hiện sau tháng 5 năm 2026: vòng lặp Agent không ràng buộc ngân sách, nhiệm vụ đa bước không điểm kiểm tra, kiểm tra trông có vẻ kiểm tra nhưng thực ra không kiểm tra logic then chốt, và vấn đề đóng gói thất bại thầm lặng thành thành công thầm lặng. Chúng là bản vá tăng cường.
Tất nhiên, hiệu quả cụ thể khác nhau tùy người. Nếu bạn không chạy pipeline đa bước, quy tắc 10 không quá quan trọng với bạn. Nếu kho mã của bạn chỉ có một phong cách thống nhất, và đã được lint thực thi, quy tắc 11 là thừa. Sau khi đọc 12 quy tắc này, giữ lại các quy tắc thực sự tương ứng với lỗi bạn thực tế mắc phải, xóa phần còn lại.
Một bản CLAUDE.md 6 quy tắc được tùy chỉnh cho kiểu thất bại thực tế, tốt hơn một bản có 12 quy tắc, trong đó 6 quy tắc bạn không bao giờ dùng đến.
Kết luận
Tweet của Karpathy vào tháng 1 năm 2026, về bản chất là một lời phàn nàn. Forrest Chang biến nó thành 4 quy tắc. Cuối cùng, 12 vạn nhà phát triển đã Star kết quả này. Và trong số đó, hầu hết mọi người, ngày nay vẫn chỉ sử dụng 4 quy tắc đó.
Mô hình đã tiến bộ, hệ sinh thái cũng đã thay đổi. Agent đa bước, kích hoạt chuỗi hook, tải kỹ năng, cộng tác đa kho mã - những thứ này đều không tồn tại khi Karpathy viết tweet đó. 4 quy tắc cũ không giải quyết những vấn đề này. Chúng không sai, mà là không đầy đủ.
Thêm 8 quy tắc. 6 tuần thời gian, kiểm tra bao phủ 30 kho mã. Tỷ lệ lỗi từ 41% giảm xuống 3%.
Tối nay hãy lưu bài viết này, dán 12 quy tắc này vào CLAUDE.md của bạn. Nếu nó giúp bạn tránh được một tuần vòng vo với Claude, hãy chia sẻ.













