Bạn yêu cầu thêm một banner, còn agent tiện thể đề xuất cập nhật một mô-đun cũ. Xem trước kế hoạch như vậy rồi bỏ mục không cần thiết sẽ rất hữu ích. Để làm được điều đó, cần cả mô tả nhiệm vụ rõ ràng lẫn chế độ làm việc phù hợp.

Chế độ quyền quyết định cách các hành động của Claude Code được phê duyệt: việc gì có thể chạy ngay, việc gì cần hỏi bạn và việc gì sẽ bị chặn. Cài đặt và các quyền đã cấp cũng ảnh hưởng đến từng hành động. Bản thân chế độ không đánh giá chất lượng giải pháp.

Hãy xem từng chế độ qua ví dụ về một phiên Claude Code cục bộ trong terminal.

Yêu cầu và quyền

Ở đây rất dễ nhầm hai thứ trông giống nhau nhưng hoạt động khác hẳn.

Thứ nhất là nội dung bạn ghi trong mô tả nhiệm vụ: phần liệt kê những điều loại trừ, câu "trước tiên hãy cho tôi xem kế hoạch, đừng thay đổi gì", danh sách tệp không được đụng đến. Đây là ranh giới về nội dung: chúng giải thích nhiệm vụ và ảnh hưởng đáng kể đến đề xuất của agent. Nhưng chúng chỉ là văn bản, không tác động đến quyền kỹ thuật.

Thứ hai là chế độ quyền, hay permission mode. Đây là cài đặt của phiên. Bạn hoàn toàn có thể viết "đừng thay đổi gì" trong khi đang dùng chế độ tự động chấp nhận chỉnh sửa. Agent cần làm theo yêu cầu, nhưng riêng câu đó không bật cơ chế chặn chỉnh sửa về mặt kỹ thuật.

Có một ngoại lệ, nhưng chỉ một phần. Trong chế độ auto, bộ phân loại đọc cuộc trò chuyện và xem "đừng push" hoặc "chờ tôi review" là tín hiệu để chặn các hành động đó. Tuy nhiên, đây không phải quy tắc trong cài đặt: nếu tin nhắn cấm bị lược bỏ khi nén ngữ cảnh, lệnh cấm cũng mất theo. Muốn có ranh giới cứng, bạn cần cài đặt chứ không phải một câu yêu cầu.

Không thể biết chế độ từ yêu cầu

Câu "trước tiên hãy lập kế hoạch" trong yêu cầu rất hữu ích vì nó xác định thứ tự làm việc. Nhưng chỉ dựa vào đó thì bạn không thể biết chế độ hiện tại; hãy xem chỉ báo trên thanh trạng thái của phiên. Chế độ lúc phiên khởi chạy phụ thuộc vào phiên bản, giao diện, gói dịch vụ và cài đặt. Vì vậy, hãy nhìn chỉ báo trước thay vì đoán.

Các chế độ từ an toàn đến rủi ro

Hãy hình dung các chế độ như một chiếc thang thay vì cố nhớ một danh sách. Ở nấc trên cùng, agent hầu như không làm gì nếu không có bạn; ở dưới cùng, agent chẳng hỏi gì cả. Có năm nấc, cộng thêm một chế độ nằm ngoài thang này.

Năm chế độ quyền được xếp từ trên xuống theo mức tự chủ tăng dần: plan, default, acceptEdits, auto và bypassPermissions. Riêng dontAsk nằm ngoài thang này, không hỏi gì và từ chối mọi thứ chưa được cho phép trướcCác chế độ tự chủ từ an toàn đến rủi roRiêng biệt, ngoài thang mức độ tự chủplandefaultacceptEditsautobypassPermissionsdontAskTìm hiểu và lập kế hoạch, không sửa mãHỏi trước khi sửa và chạy lệnhTự chấp nhận chỉnh sửa tệpTự làm hầu hết mọi việc,bộ phân loại kiểm tra lệnh và mạngHầu như không hỏi gìĐọc và những gì được phép trước,còn lại bị từ chối mà không hỏi
Năm nấc trên cùng một thang, còn dontAsk đứng riêng bên ngoài

Điều đáng chú ý ở đây là có bao nhiêu hành động được thực hiện mà không cần bạn trả lời. Càng xuống thấp, con số đó càng tăng, và cái giá của sai sót cũng vậy. Ở trên cùng, bạn mất thời gian xác nhận; ở dưới cùng, bạn chỉ biết về một chỉnh sửa không như ý khi nó đã xảy ra rồi.

Điểm chính của từng chế độ:

  • plan - agent tìm hiểu dự án và đề xuất thay đổi trước khi thực hiện; trong lúc đó, việc sửa mã nguồn bị chặn. Có một ngoại lệ: nếu phiên được khởi chạy với bypassPermissions đã cho phép, thì khi lập kế hoạch trong terminal, chỉnh sửa không còn bị chặn; agent chỉ được yêu cầu không thay đổi gì. Chế độ này phù hợp khi bạn cần câu trả lời về mã chứ không cần thay đổi trong mã. Khi auto khả dụng, bộ phân loại cũng kiểm tra các lệnh dùng để khảo sát, nên đôi khi chế độ này còn ít hỏi hơn default. Nó ở nấc cao hơn vì không thay đổi mã nguồn. Khi kế hoạch sẵn sàng, Claude Code hỏi bạn muốn tiếp tục thế nào: phê duyệt và chuyển sang auto, phê duyệt nhưng xác nhận chỉnh sửa thủ công, hay tiếp tục lập kế hoạch.
  • default, thường hiển thị là Manual - hỏi trước khi sửa, chạy lệnh và truy cập mạng. Việc đọc dự án không cần hỏi, các quyền đã cấp cũng vậy, nên bạn không phải xác nhận lại mọi hành động. Đôi khi chế độ này hỏi cả với lệnh trông có vẻ vô hại. Không phải nó xét nét đâu: find cùng cờ -exec có thể chạy bất kỳ lệnh nào, còn -delete xóa các mục tìm được. Vì vậy, những dạng lệnh này sẽ không chạy nếu bạn chưa trả lời.
  • acceptEdits, hiển thị là "accept edits" - tự áp dụng các chỉnh sửa tệp trong thư mục làm việc và một số lệnh tệp, gồm cả rm và mv. Chế độ này giúp làm nhanh với những tệp quen thuộc mà dù sao bạn cũng sẽ đọc lại sau đó.
  • auto - tự làm gần như mọi việc. Việc đọc và chỉnh sửa trong thư mục làm việc diễn ra ngay; một mô hình riêng, bộ phân loại, sẽ kiểm tra lệnh và truy cập mạng. Bộ phân loại chặn một số hành động, phần sau sẽ nói kỹ hơn.
  • bypassPermissions, còn gọi là cờ --dangerously-skip-permissions - hầu như không hỏi gì. Chỉ còn các quy tắc bạn đặt rõ trong cài đặt (từ chối và "luôn hỏi") cùng một vài cơ chế bảo vệ của hệ thống. Chế độ này được gọi là YOLO, quả không sai.

Chế độ thứ sáu, dontAsk, nằm riêng trên sơ đồ. Lý do là thế này: các nấc khác nhau ở số hành động được thực hiện mà không cần bạn trả lời, càng xuống thấp thì agent càng được phép làm nhiều. dontAsk hoạt động ngược lại: nó cũng không hỏi, nhưng thay vì đồng ý thì từ chối. Những việc mà ngay cả ở chế độ thường cũng không cần hỏi (đọc file trong thư mục làm việc, các lệnh an toàn chỉ đọc) cùng những việc đã được cho phép trước sẽ được thực hiện. Mọi việc lẽ ra cần hỏi đều bị từ chối mà không có câu hỏi nào. Phiên không phải chờ câu trả lời. Chế độ này dành cho nơi không có ai để trả lời, như quy trình tự động và môi trường khép kín; khi ngồi làm việc thường ngày, bạn không cần đến nó.

Bạn phải tự chuyển chế độ, không thể chỉ yêu cầu trong cuộc trò chuyện. Trong terminal, nhấn Shift+Tab để lần lượt chuyển qua các chế độ, hoặc dùng lệnh /plan để vào chế độ lập kế hoạch. Bạn cũng có thể đặt chế độ lúc khởi chạy:

claude --permission-mode plan

Nhập lệnh trong terminal tại thư mục dự án; còn /plan thì dùng trong phiên đang mở. Trong trình soạn thảo, bộ chuyển đổi trông khác và nằm bên dưới ô nhập, nhưng ở đâu cũng có cùng một điểm tham chiếu: chỉ báo chế độ hiện tại.

Về nấc dưới cùng

bypassPermissions chỉ phù hợp khi bạn không ngại mất toàn bộ môi trường, chẳng hạn một nhiệm vụ dùng một lần trong container hoặc máy ảo. Với dự án đang làm, một lệnh sai sẽ gây thiệt hại lớn hơn tất cả thời gian tiết kiệm được nhờ bớt xác nhận. Chế độ này cũng không khôi phục được thứ đã xóa: nó chỉ cho phép lệnh chạy, chứ không có cách hoàn tác.

Có hai điều cần nhớ để không đánh giá quá cao chiếc thang này. Lập kế hoạch không phải bản sao lưu: nó không tạo điểm khôi phục hay hủy những gì đã làm, mà chỉ cho bạn thấy dự định trước khi nó biến thành chỉnh sửa. Và không nấc nào thay đổi ranh giới của nhiệm vụ; chúng vẫn ở đúng nơi bạn đã mô tả.

Khi auto cản trở thay vì giúp ích

Có một kỳ vọng về auto nên điều chỉnh trước. Chế độ mang tên "tự động", nên bạn có thể nghĩ rằng mọi thứ đều được thực hiện. Không phải vậy: bộ phân loại ở đó chính là để chặn một số hành động.

Mặc định, bộ phân loại chặn các việc như deploy lên production và migration, gửi dữ liệu đến địa chỉ bên ngoài, force push, xóa hàng loạt trong kho lưu trữ đám mây, cấp quyền, tải xuống và chạy mã từ mạng, cũng như xóa không thể khôi phục các tệp đã tồn tại trước khi phiên bắt đầu. Danh sách này có lý do đơn giản: đó là những việc bạn không thể tự hoàn tác.

Tiếp theo xảy ra điều gì tùy thuộc vào số lần bị chặn. Một hành động bị chặn sẽ xuất hiện trong danh sách những mục vừa bị từ chối (/permissions, thẻ Recently denied), nơi bạn có thể chạy lại với xác nhận thủ công. Trong lúc đó, Claude nhận được thông báo từ chối và thử cách khác. Nếu bộ phân loại chặn ba lần liên tiếp hoặc hai mươi lần trong một phiên, chế độ sẽ tạm dừng và Claude Code quay lại hỏi như bình thường; sau khi bạn xác nhận, auto được bật lại. Các ngưỡng này cố định, bạn không thể chỉnh.

Đến đây có thể thấy lúc nào chế độ bắt đầu gây cản trở. Nếu nhiệm vụ chỉ có một lệnh đáng ngại, auto hoạt động đúng như dự kiến: bạn tự phê duyệt lệnh đó rồi tiếp tục. Nhưng nếu cả nhiệm vụ chủ yếu gồm những lệnh như vậy - dựng môi trường thử nghiệm, chạy migration, làm việc với hạ tầng của người khác - thì mọi chuyện thành ra khá kỳ cục. Bạn vẫn phải xác nhận thủ công gần như từng bước, nhưng lại phải đi đường vòng: agent gặp lệnh bị chặn, tìm cách khác, còn chế độ thì cứ tạm dừng rồi lại bật lên.

Lúc đó, đơn giản hơn là tự chuyển lên nấc cao hơn. Chọn chế độ nào tùy vào điều đang cản trở:

  • default - lựa chọn trực tiếp nhất. Mỗi lần sửa hoặc chạy lệnh đều cần bạn cho phép, nên hoàn toàn không phát sinh mục bị từ chối nào. Chậm hơn, nhưng bạn thấy rõ từng bước;
  • acceptEdits - dùng khi bạn đồng ý cho sửa tệp, còn điều đáng ngại chỉ là các lệnh như deploy hay migration. Lưu ý: chế độ này cho phép rm và mv chạy trong thư mục làm việc mà không hỏi; còn ở auto, bộ phân loại sẽ chặn việc xóa các tệp hiện có.

Đây không phải cách lách lệnh chặn, đừng nhầm hai việc này. Bạn không tắt bước kiểm tra mà tự đảm nhận nó. Ngay cả trong bypassPermissions, việc xóa đường dẫn hệ thống như thư mục gốc của ổ đĩa hay thư mục home cũng không thể thực hiện nếu chưa có xác nhận của bạn. Ở chế độ này và ở auto, Claude Code sẽ hỏi bạn, và trong terminal bạn có vài phút để trả lời. Ở nơi không thể hỏi, auto từ chối lệnh đó, còn dontAsk thì luôn từ chối. Ý ở đây là đừng đi đường vòng nếu bạn vốn định tự xác nhận mọi thứ.

Lý do thứ hai để chuyển lên nấc cao hơn không liên quan đến việc bị chặn. Bộ phân loại quyết định hành động có nguy hiểm không, chứ không xem công việc có đi đúng hướng hay không. Nếu agent sửa cùng một thứ đến lần thứ ba mà kết quả vẫn chưa đúng, trong auto nó sẽ cứ thử lần thứ tư, cũng không hỏi gì. Nhóm Claude Code khuyên đừng cố tiếp tục theo cách đó: hãy quay lại plan, thống nhất lại dự định rồi mới làm tiếp. Nguyên tắc này cũng áp dụng ngay từ đầu. Nếu bạn hiểu rõ toàn bộ nhiệm vụ, có thể bắt đầu bằng chế độ ít ràng buộc hơn. Nếu chính bạn vẫn chưa chắc kết quả cần đạt là gì, hãy bắt đầu với plan.

Vì sao lệnh vô hại vẫn bị chặn

Bộ phân loại chỉ biết những gì nó thấy về dự án: thư mục làm việc và các repository từ xa được cấu hình trước khi phiên bắt đầu được xem là của bạn. Repository được thêm vào giữa chừng không nằm trong danh sách đó, nên truy cập nó trông như đang đi ra ngoài. Vì vậy, câu "nó chặn một lệnh vô hại" thường có nghĩa là thiếu ngữ cảnh chứ không phải lệnh đó có vấn đề.

Điều này thay đổi công việc ra sao

Trong công việc hằng ngày, mọi thứ gói gọn trong bốn thói quen.

  1. xem chỉ báo khi bắt đầu. Nó cho biết chế độ hiện tại; với từng hành động cụ thể, các quyền đã cấp cũng quan trọng;
  2. đối chiếu kế hoạch được đề xuất với ranh giới nhiệm vụ trước khi thực hiện. Chỉ cần nói rõ để bỏ một mục thừa, đó là cách chỉnh sửa ít tốn công nhất;
  3. đọc kỹ lựa chọn dùng để phê duyệt kế hoạch: nội dung đó cho biết phiên sẽ tiếp tục ở chế độ nào sau khi rời plan;
  4. kiểm tra kết quả sau khi hoàn tất. Không chế độ nào đảm bảo nhiệm vụ được giải quyết đúng; việc đó cần bạn tự kiểm tra.

Chế độ quyền trả lời câu hỏi "việc gì có thể làm khi không có tôi", chứ không phải "việc này đã được làm đúng chưa". Dù chọn chế độ nào, câu hỏi thứ hai vẫn do bạn trả lời.