Bạn giao cho Claude Code một task “nhỏ”: đổi cách tính phí vận chuyển trong checkout. Mười phút sau nó đã sửa 8 file, đụng cả module thanh toán — và bạn ngồi đó diff tay từng file, tự hỏi sao không bắt nó nêu ý định trước.
Có một chế độ đúng cho tình huống này: plan mode Claude Code. Trong plan mode, Claude Code đọc file, chạy lệnh khám phá và viết kế hoạch thực hiện — nhưng không được sửa một dòng code nào cho đến khi bạn bấm duyệt. [1]
Đây là bài thứ bảy trong series Claude Code. Nếu bạn chưa cài tool, đọc Claude Code là gì? Hướng dẫn cài đặt trước. Bài này sẽ chỉ cho bạn cách bật plan mode, cách đọc một plan cho đúng, và một mẹo nhỏ để plan không “bay màu” sau 30 ngày.

Tóm tắt nhanh
- Plan mode là một permission mode của Claude Code: Claude được đọc file và khám phá codebase, nhưng mọi thao tác sửa file đều bị chặn cho tới khi bạn duyệt kế hoạch. [1]
- Bật bằng
Shift+Tabtới khi status bar hiện⏸ plan mode on, gõ/plantrước prompt, hoặc chạyclaude --permission-mode plan. - Sau khi duyệt plan có 3 lựa chọn: chuyển sang auto mode, tự duyệt từng edit, hoặc ở lại plan mode yêu cầu sửa kế hoạch.
- Plan được lưu thành file Markdown trong
~/.claude/plans/và tự xóa sau khoảng 30 ngày — muốn giữ lại thì trỏplansDirectoryvào repo rồi commit. - Dùng plan mode khi thay đổi đụng nhiều file, repo bạn chưa rành, hoặc yêu cầu có nhiều cách làm hợp lý; bỏ qua cho việc vặt như sửa typo.
Plan mode Claude Code là gì?
Plan mode là một permission mode của Claude Code: Claude nghiên cứu và đề xuất thay đổi mà không được thực hiện chúng — nó đọc file, chạy lệnh shell để khám phá và viết ra kế hoạch, nhưng không sửa source của bạn cho tới khi bạn approve. [1]
- Plan mode
- Chế độ permission trong Claude Code, nơi mọi thao tác ghi file đều bị chặn cho đến khi bạn phê duyệt kế hoạch Claude đề xuất.
- Plan
- File Markdown chứa kế hoạch triển khai — file nào sẽ đổi, theo thứ tự nào, kèm rủi ro và cách kiểm chứng.
- Permission mode
- Mức quyền nền của một session, quyết định Claude được làm gì mà không cần hỏi bạn trước.
Điểm khác biệt cốt lõi cần nắm: nói với Claude “đừng sửa code, chỉ đề xuất” là một chỉ dẫn — model có thể quên hoặc hiểu sai. Plan mode là một rào chắn: quyền ghi file bị khóa ở tầng tool, nên không có chuyện Claude “lỡ tay” edit trước khi bạn kịp đọc. [1]
Bạn đang đọc bài viết thuộc chuyên mục Lập trình của VietnamTutor — nơi mình chia sẻ cách dùng AI trong engineering theo hướng thực dụng, có kiểm soát.
Cách bật và tắt plan mode
Nhấn Shift+Tab để vòng qua các permission mode cho đến khi status bar hiện ⏸ plan mode on, hoặc gõ /plan ở đầu prompt. Nhấn Shift+Tab thêm lần nữa sẽ thoát plan mode mà không duyệt plan nào. [1]
Cụ thể có 4 cách vào plan mode:
Shift+Tabtrong session: mỗi lần nhấn chuyển một mode theo vòngauto → manual → acceptEdits → plan. Nhìn status bar để biết đang ở đâu. [1][2]/planđặt trước prompt: chỉ áp dụng plan mode cho prompt đó. Trong VS Code, gõ/plantrần sẽ mở lại plan hiện tại, còn/plan fix the auth bugvào plan mode luôn và bắt đầu lập kế hoạch — cần Claude Code v2.1.280 trở lên. [3]- Khởi động với flag:
claude --permission-mode planđể session mở ngay ở plan mode — hợp với repo bạn chưa từng đụng vào. [1] - Đặt làm mặc định cho project: đặt
"permissions": {"defaultMode": "plan"}trong.claude/settings.json; riêng VS Code thì đặtclaudeCode.initialPermissionModethànhplantrong user settings. [1]
# Mo session moi ngay trong plan mode
claude --permission-mode plan
# settings.json cua project — moi session deu bat dau o plan mode
{
"permissions": {
"defaultMode": "plan"
}
}Mình khuyên bạn đặt defaultMode: "plan" cho những repo khách hàng hoặc codebase production team mới tiếp quản — chi phí là vài phút đọc plan, đổi lại là không có cú “sửa nhầm file” nào.

Trong plan mode, Claude được làm gì?
Claude được đọc file và chạy lệnh shell để khám phá codebase, nhưng không được sửa file nào; với lệnh shell nằm ngoài nhóm chỉ-đọc, classifier của auto mode sẽ duyệt thay bạn, hoặc Claude phải hỏi trước khi chạy. [1]
Nói cách khác, plan mode không làm Claude “câm” — nó vẫn điều tra được:
- Đọc bất kỳ file nào trong working directory để hiểu cấu trúc, dependency và convention của dự án.
- Chạy các lệnh khám phá: tìm kiếm, list file, đọc log — những lệnh trong nhóm read-only chạy thoải mái.
- Lệnh ngoài nhóm chỉ-đọc sẽ được classifier của auto mode xét duyệt nếu session của bạn có auto mode (setting
useAutoModeDuringPlanmặc định bật); nếu không, Claude hỏi bạn trước khi chạy. [1] - Viết kế hoạch ra file Markdown — đây là thứ duy nhất Claude được “ghi” trong plan mode.
Thú vị nhỉ — chính vì được đọc kỹ trước khi viết, plan từ plan mode thường chất lượng hơn hẳn việc bạn gõ “đề xuất cách làm” rồi hy vọng model tự giữ lời. Claude bắt buộc phải đi khảo sát thật thay vì đoán.
Cách đọc plan cho đúng trước khi duyệt
Một plan đáng duyệt phải trả lời được 6 thứ: file nào đổi, các bước theo thứ tự, rủi ro có thể vỡ, câu hỏi cần bạn quyết, test nào chứng minh xong việc, và cách undo nếu hỏng. Plan thiếu mục nào thì yêu cầu bổ sung trước khi approve. [4]
Đây là checklist mình rà qua khi đọc plan của Claude:
- Files: mọi file sẽ tạo hoặc sửa đều liệt kê kèm lý do. File nào xuất hiện mà bạn không ngờ tới — hỏi trước khi duyệt.
- Steps: theo thứ tự và kiểm chứng được. “Đổi hằng số A” đọc được; “cải thiện checkout” thì không.
- Risks: chỗ nào dễ vỡ nhất. Với task đụng thanh toán, giá, hoặc tracking mà plan không nêu rủi ro — gần như chắc chắn nó đang giấu một giả định.
- Questions: những quyết định nghiệp vụ Claude không nên tự quyết. Plan không có câu hỏi nào cho một thay đổi business thường là dấu hiệu xấu. [4]
- Tests: test nào sẽ thêm hoặc sửa, và lệnh chạy test là gì.
- Undo: revert thế nào nếu triển khai hỏng.
Mẹo từ team Anthropic: đừng chỉ đọc — hãy chất vấn plan. Hỏi “thay đổi này có thể phá gì”, “bước nào rủi ro nhất”, “bạn đã loại bỏ phương án nào”. Lặp lại tới khi một người chưa từng xem cuộc hội thoại cũng implement được chỉ bằng file plan đó. Có team còn mở một session Claude thứ hai đóng vai staff engineer để review plan trước khi duyệt. [5][6]
Và lỗi kinh điển nhất: duyệt mà không đọc. Approve mù một plan thì khác nào tắt plan mode rồi trả thêm tiền chờ — vì plan mode cũng tốn token cho pha khảo sát. [4]

Duyệt plan: 3 lựa chọn và những phím tắt cần nhớ
Khi plan sẵn sàng, Claude trình lên và hỏi bạn muốn đi tiếp thế nào — bạn có thể duyệt rồi chạy ở auto mode, duyệt rồi tự xét từng edit, hoặc ở lại plan mode để yêu cầu sửa kế hoạch. [1]
Ba lựa chọn khi approve:
- Yes, and use auto mode (hoặc Yes, auto-accept edits nếu auto mode không khả dụng): duyệt và để Claude thực thi liên tục không hỏi thêm. Hợp với plan bạn đã đọc kỹ và tin.
- Yes, manually approve edits: duyệt plan nhưng vẫn xem từng edit một. Chọn cái này khi plan đụng chỗ nhạy cảm — giá, thanh toán, migration dữ liệu.
- No, keep planning: chưa ưng, ở lại plan mode và nói Claude cần sửa chỗ nào. [1]
Hai phím tắt đáng nhớ trong bước này: Ctrl+G mở plan trong text editor mặc định để bạn sửa tay trước khi duyệt; và nếu bật setting showClearContextOnPlanAccept, menu approve sẽ có thêm lựa chọn đầu tiên — duyệt plan và xóa luôn context pha lập kế hoạch, tiết kiệm token cho pha implement. [1][7]
Một chi tiết tiện lợi: sau khi bạn duyệt, session tự được đặt tên theo nội dung plan — tra lại trong danh sách session dễ hơn hẳn. [1]

Plan được lưu ở đâu, và cách giữ nó lại trong Git
Claude Code lưu plan thành file Markdown trong ~/.claude/plans/, đặt tên từ prompt của bạn cộng từ ngẫu nhiên — và thư mục này nằm trong diện tự dọn sau khoảng 30 ngày theo cleanupPeriodDays. Muốn giữ plan như một phần deliverable thì trỏ plansDirectory vào trong repo rồi commit. [7][8]
Chi tiết về file plan:
- Mỗi cuộc hội thoại một file; khi plan thay đổi Claude sửa đúng file đó — không giữ version cũ.
- Từ v2.1.111, tên file bắt đầu từ prompt bạn gõ kèm từ ngẫu nhiên, ví dụ
fix-auth-race-snug-otter.md. - Plan nằm ngoài project nên sống sót qua cả compaction — khi context bị nén, plan được nạp lại từ đĩa. [7][8]
Vấn đề: plan trong ~/.claude/plans/ chỉ có agent của bạn đọc được, và hết ~30 ngày là mất. Nếu bạn coi plan là một phần của audit trail — reviewer muốn so diff với ý định ban đầu — hãy đưa nó về repo:
{
"plansDirectory": "./plans"
}Đặt trong .claude/settings.json và commit file settings đó để cả team dùng chung; đường dẫn tương đối resolve từ project root. Sau đó commit plan vào cùng branch task — người review đọc plan ngay trong PR, và git log -p trên file plan cho thấy ý định thay đổi thế nào theo thời gian. [8]

Khi nào nên dùng plan mode?
Dùng plan mode khi thay đổi chạm nhiều file, khi bạn chưa rành repo, hoặc khi yêu cầu có hơn một cách làm hợp lý; bỏ qua nó cho việc một chỗ như sửa typo hay rename biến. Quy tắc ngón tay: đọc request mà thấy hai hướng đều đúng — thì plan. [4]
| Nên dùng plan mode | Không cần |
|---|---|
| Thay đổi đụng checkout, thanh toán, giá, thuế | Sửa typo, đổi một dòng copy |
| Task chạm nhiều file cùng lúc | Rename một biến trong một file |
| Repo bạn chưa từng làm việc | Thay đổi bạn đã làm chục lần |
| Yêu cầu có business rule mơ hồ | Fix có sẵn test fail chỉ đường |
Và khi đã quen dùng, ba pattern này giúp plan mode phát huy tối đa:
- Đổ công sức vào plan để implement một phát xong. Flow chuẩn của power user: vào plan mode → mài kế hoạch → duyệt sang auto-accept edits → Claude thực thi. [5]
- Đi chệch hướng thì quay lại plan mode, đừng vá giữa chừng. Cứ
Shift+Tabvề plan mode và lập lại, thay vì cố chỉnh prompt đang chạy. [5] - Nhờ Claude thứ hai review plan. Một session viết plan, một session khác đóng vai staff engineer bắt lỗi — tách vai trò người viết và người duyệt. [5]
Plan mode Claude Code cũng xứng đôi với checkpoint: plan bảo vệ bạn trước khi code bị đổi, checkpoint cứu bạn sau khi đổi hỏng. Và nếu muốn hiểu đầy đủ các mức quyền còn lại của Claude Code — từ manual đến bypass — đọc bài permission mode trong Claude Code. Toàn bộ cách tiếp cận “để AI tự chạy nhưng vẫn giữ tay lái” này, nhân tiện, chính là cốt lõi của vibe coding có kiểm soát mà mình từng phân tích.

Nguồn tham khảo
- Claude Code Docs — Choose a permission mode (Plan mode)
- Claude Help Center — Claude Code cheatsheet
- Claude Code Docs — Use Claude Code in VS Code (/plan)
- EcomLabs — Claude Code plan mode: plan before code
- Claude Help Center — Claude Code power user tips
- Claude Academy — Plan mode as the default starting point
- DEV Community — Commit PLAN.md instead
- Flanner — Version control for Claude Code plans (plansDirectory)
Các câu hỏi thường gặp
Plan mode Claude Code khác gì việc bảo Claude “chỉ đề xuất, đừng sửa”?
Chỉ dẫn bằng lời là một yêu cầu model có thể quên hoặc hiểu sai giữa session dài. Plan mode khóa quyền ghi file ở tầng tool — Claude không thể edit dù có muốn, cho tới khi bạn duyệt kế hoạch. Đó là khác biệt giữa “nhờ giữ lời” và “không thể phá vỡ”.
Làm sao biết session đang ở plan mode?
Nhìn status bar: plan mode hiển thị “⏸ plan mode on”. Nếu thấy các trạng thái khác như “accept edits on” hay “auto mode on”, cứ nhấn Shift+Tab cho tới khi đúng — mỗi lần nhấn chuyển một mode trong vòng auto → manual → acceptEdits → plan.
Trong plan mode, Claude có chạy được lệnh shell không?
Có, nhưng có kiểm soát. Lệnh thuộc nhóm chỉ-đọc chạy bình thường để Claude khảo sát codebase. Lệnh ngoài nhóm đó sẽ được classifier của auto mode xét duyệt nếu session có auto mode (setting useAutoModeDuringPlan mặc định bật); không thì Claude phải xin phép bạn trước. Còn sửa file thì bị chặn hoàn toàn.
Tôi duyệt plan rồi muốn đổi hướng thì làm sao?
Nhấn Shift+Tab để quay lại plan mode rồi lập kế hoạch lại — đây là cách power user xử lý khi thấy việc đi chệch hướng, thay vì cố vá bằng prompt giữa chừng. Nếu Claude đã sửa hỏng code, dùng thêm /rewind của checkpoint để quay file về trước.
File plan của Claude Code nằm ở đâu và giữ được bao lâu?
Plan được viết thành file Markdown trong ~/.claude/plans/, tên bắt đầu từ prompt của bạn cộng từ ngẫu nhiên. Thư mục này tự dọn file cũ sau khoảng 30 ngày (setting cleanupPeriodDays). Muốn giữ lâu và chia sẻ với team thì đặt “plansDirectory”: “./plans” trong .claude/settings.json rồi commit plan vào repo.
Plan mode có tốn thêm token không?
Có — pha đọc file và khảo sát codebase trước khi viết plan đều tốn token. Nhưng bù lại, một plan tốt thường giúp Claude implement đúng ngay lần đầu thay vì sửa đi sửa lại. Bạn cũng có thể bật setting showClearContextOnPlanAccept để duyệt plan và xóa luôn context pha lập kế hoạch, giảm token cho phần thực thi.
Plan mode Claude Code là thay đổi nhỏ về thói quen nhưng lớn về kiểm soát: thay vì diff tay sau khi Claude làm xong, bạn duyệt ý định trước khi nó đụng vào code. Với task nhiều file hoặc repo lạ, vài phút đọc plan gần như luôn rẻ hơn cả buổi đi revert.
Bạn đã thử flow “plan mode → refine → auto-accept” chưa, hay vẫn để Claude chạy tự do rồi vá sau? Chia sẻ cách bạn làm ở comment nhé — và đừng quên đọc tiếp các bài khác trong series Claude Code trên VietnamTutor!
