Dùng quy trình Prompt-to-PR với Claude Code cục bộ: viết prompt nhỏ, gửi sửa đổi nhỏ, chạy kiểm tra, re-prompt khi lỗi và đạt PR sẵn sàng merge.

Các prompt lớn một lần thường dẫn đến thay đổi lớn, lộn xộn: chạm hàng chục tệp, refactor không liên quan, và mã bạn chưa kịp hiểu. Ngay cả khi đầu ra về mặt kỹ thuật đúng, việc review vẫn cảm thấy rủi ro vì khó biết gì đã thay đổi và vì sao.
Sửa đổi nhỏ khắc phục điều đó. Khi mỗi thay đổi có giới hạn và tập trung, bạn có thể đọc nó trong vài phút, bắt lỗi sớm, và tránh phá vỡ những chỗ bạn không định chạm đến. Reviewer tin tưởng các PR nhỏ hơn, nên việc merge diễn ra nhanh hơn và ít comment qua lại.
Prompt-to-PR là một vòng lặp đơn giản:
Nhịp này biến lỗi thành phản hồi nhanh thay vì bất ngờ ở cuối. Nếu bạn yêu cầu Claude Code chỉnh một quy tắc xác thực, giữ nó chỉ cho quy tắc đó. Nếu một test fail, dán kết quả lỗi và yêu cầu bản vá nhỏ nhất làm cho test pass, đừng yêu cầu viết lại toàn bộ module.
Một điều không thay đổi: bạn vẫn chịu trách nhiệm cho mã cuối cùng. Đối xử với mô hình như một đồng lập trình viên cục bộ gõ nhanh, chứ không phải autopilot. Bạn quyết định thứ gì vào, thứ gì giữ lại, và khi nào an toàn để mở PR.
Bắt đầu từ một baseline sạch. Nếu nhánh của bạn lạc hậu hoặc test đang fail, mọi đề xuất sẽ trở thành suy đoán. Pull các thay đổi mới nhất, rebase hoặc merge theo phong cách nhóm bạn, và đảm bảo trạng thái hiện tại là khỏe mạnh trước khi yêu cầu gì.
Một thiết lập "đồng lập trình viên cục bộ" có nghĩa Claude Code chỉnh sửa tệp trong repo của bạn trong khi bạn kiểm soát mục tiêu, các hàng rào, và mọi diff. Mô hình không biết codebase của bạn trừ khi bạn cho xem, nên hãy rõ ràng về tệp, ràng buộc và hành vi mong đợi.
Trước prompt đầu tiên, quyết định nơi chạy các kiểm tra. Nếu bạn có thể chạy test cục bộ, bạn sẽ nhận phản hồi trong vài phút, giúp các vòng nhỏ. Nếu một số kiểm tra chỉ chạy ở CI (một số quy tắc lint, suite dài, bước build), hãy quyết định khi nào bạn sẽ dựa vào CI để không phải chờ sau mỗi thay đổi nhỏ.
Một pre-flight đơn giản:
Giữ một scratchpad nhỏ mở trong khi làm việc. Ghi các ràng buộc như "không thay đổi API," "giữ tương thích ngược," "chỉ chạm module X," cùng mọi quyết định bạn thực hiện. Khi test fail, dán thông báo lỗi chính xác vào đó. Scratchpad đó trở thành đầu vào tốt nhất cho prompt tiếp theo và ngăn phiên làm việc bị trôi.
Các diff nhỏ bắt nguồn từ prompt được thu hẹp có chủ ý. Con đường nhanh nhất tới mã có thể merge là một thay đổi bạn có thể review trong một phút, không phải một refactor bạn phải hiểu trong một giờ.
Một prompt tốt nêu rõ một mục tiêu, một khu vực code, và một kết quả mong đợi. Nếu bạn không chỉ ra nơi thay đổi nên nằm (một tệp, thư mục, hoặc module), mô hình sẽ đoán và diff sẽ lan rộng.
Một khuôn dạng prompt giữ thay đổi chặt:
Ranh giới là vũ khí bí mật. Thay vì "fix lỗi login," hãy nêu những gì phải giữ nguyên: "Đừng thay đổi hình dạng API," "Đừng đổi tên hàm public," "Không chỉnh chỉ format," "Tránh phụ thuộc mới." Điều đó nói với đồng lập trình viên nơi không được sáng tạo.
Khi thay đổi vẫn không rõ, yêu cầu một kế hoạch trước khi code. Một kế hoạch ngắn ép công việc thành các bước và cho bạn cơ hội duyệt một bước nhỏ đầu tiên.
Goal: Fix the null crash when rendering the profile header.
Location: src/components/ProfileHeader.tsx only.
Constraints: Do not change styling, props, or any exported types.
Expected outcome: If user.name is missing, show "Anonymous" and no crash.
Diff constraint: Minimal diff. No refactors. No unrelated formatting.
If unclear: First reply with a 3-step plan, then wait for approval.
Nếu bạn làm việc trong nhóm, thêm ràng buộc review: "Giữ dưới ~30 dòng thay đổi" hoặc "Chỉ một file trừ khi thực sự cần." Nó làm cho diff dễ quét hơn và khiến prompt tiếp theo sắc nét hơn khi có lỗi.
Giữ mỗi vòng tập trung vào một thay đổi nhỏ, có thể kiểm thử. Nếu bạn có thể mô tả mục tiêu trong một câu và dự đoán tệp nào sẽ thay đổi, đó là kích thước phù hợp.
Các đơn vị công việc tốt bao gồm: sửa một bug trong một đường đi (với repro và guard), điều chỉnh một test đơn cho một hành vi, làm refactor bảo toàn hành vi (đổi tên, tách hàm, loại trùng lặp), hoặc cải thiện một thông báo lỗi hay quy tắc xác thực.
Đặt giới hạn thời gian cho mỗi vòng. 10–20 phút thường đủ để viết prompt rõ, áp dụng diff và chạy kiểm tra nhanh. Nếu bạn vẫn đang khám phá sau 20 phút, thu nhỏ đơn vị hoặc chuyển sang chỉ điều tra (ghi chú, logging, test failing) và dừng ở đó.
Định nghĩa "xong" trước khi bắt đầu:
Khi scope bắt đầu mở rộng, dừng sớm. Nếu bạn thấy mình nói "nhân tiện," bạn vừa tìm thấy vòng lặp tiếp theo. Ghi nó làm follow-up, commit diff nhỏ hiện tại, và tiếp tục.
Trước khi chạy test hoặc build, đọc diff như một reviewer. Đây là nơi workflow hoặc giữ sạch hoặc lặng lẽ trôi vào "tại sao nó chạm tệp đó?" territory.
Bắt đầu bằng việc yêu cầu Claude Code tóm tắt những gì nó đã thay đổi bằng ngôn ngữ thường: tệp chạm, thay đổi hành vi, và những gì nó không thay đổi. Nếu nó không thể giải thích rõ ràng, diff có khả năng làm quá nhiều.
Rồi tự review. Lướt để kiểm tra scope, sau đó đọc để hiểu ý định. Bạn đang tìm drift: chỉnh format không liên quan, refactor thêm, đổi tên symbol, hoặc thay đổi ngoài yêu cầu.
Một pre-check nhanh:
Nếu diff lớn hơn mong đợi, đừng cố test để thoát. Quay lại và re-prompt cho bước nhỏ hơn. Ví dụ: "Chỉ thêm một test failing tái hiện bug. Không refactor." Diff nhỏ giúp lỗi dễ diễn giải và prompt tiếp theo cụ thể hơn.
Diff nhỏ chỉ có ích nếu bạn xác minh ngay lập tức. Mục tiêu là vòng chặt: thay đổi ít, kiểm tra ít, bắt lỗi khi ngữ cảnh còn mới.
Bắt đầu với kiểm tra nhanh nhất có thể cho biết "điều này bị hỏng." Nếu bạn thay đổi format hoặc imports, chạy lint/format trước. Nếu bạn chạm logic nghiệp vụ, chạy unit test nhỏ nhất bao phủ tệp hoặc package đó. Nếu bạn sửa types hoặc config build, chạy compile nhanh.
Một thứ tự thực tế:
Khi có lỗi, lưu hai thứ trước khi sửa gì: lệnh bạn chạy và toàn bộ output lỗi (copy nguyên xi). Ghi lại đó để prompt tiếp theo cụ thể và tránh vòng "vẫn lỗi" lặp đi lặp lại.
Giữ scope chặt. Nếu lint fail và test fail, sửa lint trước, chạy lại, rồi xử lý test. Đừng trộn "dọn dẹp nhanh" với sửa crash trong cùng một pass.
Khi kiểm tra fail, coi output lỗi là prompt tiếp theo. Vòng nhanh nhất là: dán lỗi, nhận chẩn đoán, áp dụng bản vá nhỏ nhất, chạy lại.
Dán lỗi nguyên xi, bao gồm lệnh và toàn bộ stack trace. Yêu cầu nguyên nhân khả dĩ nhất trước, không phải một menu các lựa chọn. Claude Code làm tốt hơn khi nó có thể bám vào số dòng và thông báo lỗi cụ thể thay vì đoán mò.
Thêm một câu về những gì bạn đã thử để nó không gửi bạn quay vòng. Nhắc lại các ràng buộc quan trọng ("Đừng thay đổi API public," "Giữ hành vi hiện tại, chỉ sửa crash"). Rồi yêu cầu bản vá nhỏ nhất làm cho kiểm tra pass.
Một prompt lỗi tốt bao gồm:
Nếu bản vá đề xuất thay đổi hành vi, yêu cầu một test chứng minh hành vi mới là đúng. Nếu một handler giờ trả 400 thay vì 500, yêu cầu một test tập trung thất bại trên code cũ và pass trên bản vá. Điều đó giữ công việc trung thực và làm PR dễ tin cậy.
Dừng khi kiểm tra xanh và diff vẫn là một ý tưởng duy nhất. Nếu mô hình bắt đầu tối ưu mã không liên quan, re-prompt: "Chỉ xử lý test failing. Không dọn dẹp."
Một PR được merge nhanh khi rõ ràng những gì thay đổi, tại sao thay đổi, và làm sao để chứng minh nó hoạt động. Với workflow này, PR nên đọc như một câu chuyện ngắn: bước nhỏ, lí do rõ ràng.
Giữ commit phù hợp với các vòng lặp của bạn. Nếu bạn yêu cầu một thay đổi hành vi, làm commit đó. Nếu bạn rồi sửa test failing, làm commit tiếp theo. Reviewer có thể theo dõi hành trình và tin rằng bạn không lẳng lặng thêm thay đổi.
Viết message commit theo ý định, không phải tên tệp. "Fix login redirect when session expires" tốt hơn "Update auth middleware." Khi message nêu kết quả người dùng, reviewer ít tốn thời gian đoán.
Tránh trộn refactor với thay đổi hành vi trong cùng một commit. Nếu muốn đổi tên biến hoặc chuyển helper, làm riêng (hoặc bỏ qua bây giờ). Tiếng ồn làm chậm review.
Trong mô tả PR, giữ ngắn và cụ thể:
Ví dụ: một crash trang billing do record customer null. Commit 1 thêm guard và trạng thái lỗi rõ ràng. Commit 2 thêm test cho trường hợp null. Mô tả PR nói: "Mở Billing, load customer không có profile, xác nhận trang hiển thị trạng thái rỗng mới." Đó là loại PR reviewer có thể approve nhanh.
Nhịp này vỡ khi scope lặng lẽ mở rộng. Một prompt bắt đầu là "sửa test failing" biến thành "cải thiện error handling toàn module," và bỗng bạn review một diff lớn với ý định mơ hồ. Giữ chặt: một mục tiêu, một tập thay đổi, một tập kiểm tra.
Chậm nữa là chấp nhận refactor trông đẹp chỉ vì trông đẹp. Đổi tên, di chuyển file và thay đổi style tạo nhiễu trong review và khó phát hiện thay đổi hành vi thực sự.
Các bẫy thường gặp:
Một ví dụ cụ thể: test fail với "expected 400, got 500." Nếu bạn chỉ dán phần cuối stack trace, thường nhận đề xuất try/catch chung chung. Nếu dán toàn bộ output test, bạn có thể thấy vấn đề thật sự: thiếu nhánh validate. Điều đó dẫn tới một diff nhỏ, tập trung.
Trước khi commit, đọc diff như reviewer. Hỏi: mỗi dòng có phục vụ yêu cầu không, và tôi có thể giải thích nó trong một câu không? Nếu không, revert các thay đổi thừa và re-prompt với yêu cầu hẹp hơn.
Người dùng báo: "Trang cài đặt đôi khi reset về mặc định sau khi lưu." Bạn pull main, chạy test, và thấy một failure. Hoặc không có test, chỉ có repro rõ.
Xử lý như một vòng lặp: một yêu cầu nhỏ, một diff nhỏ, rồi kiểm tra.
Đầu tiên, cho Claude Code ngữ cảnh nhỏ nhất hữu ích: output test failing (hoặc các bước tái hiện), đường dẫn tệp bạn nghi ngờ, và mục tiêu ("giữ hành vi, chỉ sửa reset"). Yêu cầu chẩn đoán và bản vá tối thiểu, không refactor.
Rồi làm việc bằng vòng lặp ngắn:
Chạy kiểm tra sau khi bạn review diff.
Nếu kiểm tra pass nhưng bạn lo ngại về regression, thêm coverage.
Kết thúc với mô tả PR nhỏ: bug là gì, vì sao xảy ra, và thay đổi ra sao. Thêm ghi chú reviewer như "chỉ chạm X file" hoặc "thêm 1 test cho trường hợp reset" để review an toàn.
Ngay trước khi mở pull request, làm lần cuối để đảm bảo công việc dễ review và an toàn merge.
Một ví dụ nhanh: nếu bạn sửa bug login nhưng cũng reformat 20 tệp, undo commit format. Reviewer nên tập trung vào sửa login, không tự hỏi thứ gì khác thay đổi.
Nếu có mục nào fail, làm thêm một vòng nhỏ nữa: tạo diff nhỏ, chạy lại kiểm tra, và cập nhật ghi chú PR. Vòng lặp cuối đó thường tiết kiệm hàng giờ tra hỏi qua lại.
Tính nhất quán biến một phiên tốt thành workflow đáng tin cậy. Chọn một vòng lặp mặc định và chạy theo cùng cách mỗi lần. Sau một tuần, bạn sẽ thấy prompts ngắn hơn và diff dễ review hơn.
Một thói quen đơn giản:
Một template prompt cá nhân giúp bạn kỷ luật: "Chỉ thay đổi những gì cần. Chạm tối đa 2 tệp. Giữ hành vi public trừ khi tôi nói khác. Nói lệnh cần chạy và thành công trông như thế nào."
Nếu bạn xây dựng trong Koder.ai, bạn có thể dùng cùng vòng lặp trong giao diện chat của nó. Planning mode phù hợp để xác định lát cắt mergeable nhỏ nhất (inputs, outputs và acceptance checks), và snapshots cùng rollback giúp bạn phục hồi nhanh khi thí nghiệm lệch hướng.
Khi thay đổi ổn định, xuất source để chạy tooling cục bộ, CI và review đồng đội như bình thường. Triển khai khi cần kiểm tra end-to-end thực tế, như kiểm tra flow.
Hãy biến vòng lặp thành mặc định. Prompt nhỏ, diff nhỏ, kiểm tra thường xuyên và sửa nhanh sẽ tạo nên những PR nhàm chán theo nghĩa tốt nhất.
Mặc định: nhắm tới một thay đổi nhỏ, có thể review và bạn có thể giải thích trong một câu.
Một quy tắc tốt là: bạn có thể dự đoán tệp(s) nào sẽ thay đổi, và bạn có thể xác thực bằng một kiểm tra nhanh (một test nhắm mục tiêu, lint, hoặc chạy nhanh). Nếu không thể, nhiệm vụ vẫn còn quá lớn — chia nó thành “thêm test tái hiện” và “sửa lỗi” như các vòng riêng biệt.
Có — bắt đầu bằng việc yêu cầu một kế hoạch ngắn khi mục tiêu còn mơ hồ.
Dùng một cổng đơn giản:
Điều này ngăn mô hình phỏng đoán và chạm vào các tệp phụ trước khi bạn đồng ý cách tiếp cận.
Bao gồm những phần cơ bản này trong prompt của bạn:
Dừng lại và thu nhỏ phạm vi ngay lập tức.
Các bước thực tế:
X file. Không refactor. Không format không liên quan.”Cố gắng “kiểm tra để giải quyết” một diff lan rộng thường tốn thời gian hơn là làm lại nhỏ hơn.
Đọc diff trước, rồi chạy kiểm tra.
Một thứ tự đơn giản:
Dán lỗi verbatim và yêu cầu bản vá nhỏ nhất.
Bao gồm:
Tránh “nó vẫn lỗi” mà không có chi tiết — đầu ra cụ thể chính là thứ cho phép bản vá chính xác.
Hãy coi mô hình như một người gõ nhanh, không phải autopilot.
Bạn chịu trách nhiệm cho:
Thói quen tốt là yêu cầu một tóm tắt bằng ngôn ngữ thường: thay đổi gì, không thay đổi gì, và vì sao.
Không — tốt nhất là tách riêng theo mặc định.
Trộn refactor với thay đổi hành vi tạo ra nhiễu và làm reviewer nghi ngờ vì ý định khó xác minh hơn.
Giữ ngắn và cụ thể:
Nếu PR của bạn đọc như “một ý tưởng, được chứng minh bằng một kiểm tra,” nó có xu hướng được merge nhanh.
Koder.ai hỗ trợ cùng kỷ luật đó với vài tính năng hữu ích:
Dùng nó để giữ vòng lặp nhỏ và có thể đảo ngược, rồi merge qua quy trình review chuẩn của bạn.
Cấu trúc này tự nhiên giới hạn phạm vi và làm cho review nhanh hơn.
Điều này giữ vòng lặp chặt và khiến lỗi dễ diễn giải hơn.