Plan mode Claude Code: bắt AI lập kế hoạch trước khi viết code

Nội dung

Bài giải thích plan mode trong Claude Code: cách bật bằng Shift+Tab hoặc /plan, Claude được làm gì khi chỉ-đọc, checklist đọc plan trước khi duyệt, và cách lưu plan vào Git.

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.

Plan mode Claude Code buộc AI trình kế hoạch trước khi được sửa code
Plan mode buộc Claude trình kế hoạch trước khi đụng code.

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+Tab tới khi status bar hiện ⏸ plan mode on, gõ /plan trước prompt, hoặc chạy claude --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ỏ plansDirectory và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+Tab trong session: mỗi lần nhấn chuyển một mode theo vòng auto → 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õ /plan trần sẽ mở lại plan hiện tại, còn /plan fix the auth bug và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ì đặt claudeCode.initialPermissionMode thành plan trong 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.

Vòng chuyển permission mode bằng Shift+Tab trong Claude Code dừng lại ở plan mode
Shift+Tab vòng qua các mode; dừng lại khi thấy plan mode on.

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 useAutoModeDuringPlan mặ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]

Checklist đọc plan Claude Code gồm file, bước, rủi ro, câu hỏi, test và cách undo
Sáu mục một plan đáng duyệt phải có.

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]

Ba lựa chọn sau khi duyệt plan trong Claude Code
Duyệt xong chọn cách Claude thực thi: auto, từng edit, hay lập lại plan.

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]

File plan trong thư mục claude plans được chuyển vào repo và commit bằng Git
Trỏ plansDirectory vào repo để plan đi cùng commit, thay vì tự hết hạn sau 30 ngày.

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 modeKhô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úcRename một biến trong một file
Repo bạn chưa từng làm việcThay đổ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+Tab về 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.

Vòng lặp plan mode Claude Code: khám phá, lập kế hoạch, duyệt, thực thi và quay lại khi chệch hướng
Đi chệch hướng? Quay về plan mode lập lại thay vì vá giữa chừng.

Nguồn tham khảo

  1. Claude Code Docs — Choose a permission mode (Plan mode)
  2. Claude Help Center — Claude Code cheatsheet
  3. Claude Code Docs — Use Claude Code in VS Code (/plan)
  4. EcomLabs — Claude Code plan mode: plan before code
  5. Claude Help Center — Claude Code power user tips
  6. Claude Academy — Plan mode as the default starting point
  7. DEV Community — Commit PLAN.md instead
  8. 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!

Tú Anh

Cây bút chính tại VietnamTutor

Bài viết cùng chuyên mục

Checkpoint trong Claude Code: quay lại khi AI sửa hỏng code

Bài giải thích cơ chế checkpoint của Claude Code, cách dùng /rewind để khôi phục code và hội thoại, những trường hợp checkpoint không cứu được,

Permission mode trong Claude Code: chọn mức quyền an toàn

Bài giải thích 6 permission mode của Claude Code, cách đổi chế độ bằng Shift+Tab và cờ khởi động, cùng nguyên tắc chọn mức quyền an

Sửa code bằng Claude Code: quy trình an toàn cho người mới

Bài hướng dẫn quy trình sửa code bằng Claude Code an toàn cho người mới: cách viết yêu cầu, duyệt quyền, kiểm tra thay đổi, kiểm

CLAUDE.md là gì? Cách ghi quy tắc dự án để Claude Code làm đúng

Bài giải thích CLAUDE.md là gì, file này load từ đâu, nên ghi nội dung nào và cách bảo trì để Claude Code làm đúng quy

7 lệnh Claude Code cần biết: /help, /clear, /compact và cách dùng

Bài hướng dẫn 7 lệnh Claude Code quan trọng nhất cho người mới bắt đầu, kèm ví dụ thực tế và thời điểm nên dùng từng

Claude Code là gì? Hướng dẫn cài đặt và chạy dự án đầu tiên

Bài giải thích Claude Code là gì, cách cài đặt đúng trên macOS, Windows và Linux, cùng quy trình chạy dự án đầu tiên an toàn

Prompt vibe coding: mẫu brief để AI hiểu rõ sản phẩm

Prompt vibe coding hiệu quả bắt đầu từ một brief rõ, không phải một câu lệnh dài. Mẫu này giúp bạn mô tả sản phẩm, giới

WordPress cho developer 2026: những thay đổi cần kiểm tra

Bài viết tóm tắt các thay đổi WordPress cho developer 2026 đáng chú ý trong tháng 5: Gutenberg, REST API, block editor, theme và kiểm thử

@wordpress/build là gì? Tooling mới cho plugin WordPress

@wordpress/build là hướng tooling mới cho plugin WordPress: build nhanh hơn, convention-based, hỗ trợ script modules và tự tạo file PHP registration.

Docker sandbox AI coding agent: cấu hình an toàn

Bài viết hướng dẫn lập trình viên cấu hình Docker sandbox AI coding agent để giảm rủi ro khi agent đọc repo, sửa file và chạy

Vibe coding và nợ kỹ thuật thầm lặng: kiểm soát bằng kỹ thuật ngữ cảnh

Vibe coding tăng tốc nhưng âm thầm tích lũy nợ kỹ thuật. Bài này giải thích vì sao và cách context engineering giúp bạn giữ codebase

Git stash: lưu tạm công việc dở và khôi phục đúng lúc

Git stash cho phép lưu tạm các thay đổi chưa commit để chuyển sang task khác, rồi khôi phục lại đúng lúc — tránh commit dở