Blog

Kimi Code Never Ask: các chế độ và lệnh nguy hiểm

Markdown

Ở chế độ Never Ask, Kimi Code chạy rm -rf và shutdown mà không hỏi. 3 chế độ khác nhau thế nào, và làm sao cấm một lệnh nguy hiểm trong config.toml?

Đọc toàn bộ bài viết

Trong Kimi Code, chế độ Never Ask (/auto) tự động chấp thuận mọi thứ: nó sẽ thực thi rm -rf, shutdown và reboot mà không hỏi một câu nào. Tác nhân chỉ hỏi trước khi thực thi các lệnh này ở 2 chế độ còn lại là Always Ask và Ask When Needed.

Bản thân tôi làm việc với Claude Code và bật chế độ “cho phép mọi thứ”; nếu không thì chúng ta sẽ phải ngồi bấm: có, có, có. Nhưng cứ 10 lần thì có một lần tác nhân làm theo cách riêng của nó.

Ngay nguyên mẫu cá nhân cũng có thể lộ tệp quý và credential. Dùng bản sao hoặc container cách ly, quyền hạn chế và backup đã xác minh; hệ thống khách hàng còn cần danh tính cơ sở dữ liệu riêng chỉ có quyền cần thiết.

Hãy cùng xem từng chế độ Kimi Code hoạt động thế nào, biện pháp bảo vệ có tác dụng ở đâu và cách thiết lập lệnh cấm. Bắt đầu nhé.

Để biết cách sử dụng dịch vụ, xem tài liệu Ailoot.

Điểm chính

Kimi Code có 3 chế độ. Always Ask là chế độ mặc định: việc đọc diễn ra tự động, còn bạn phải xác nhận từng hành động khác. Ask When Needed (/yolo) tự chấp thuận các chỉnh sửa thông thường, nhưng sẽ hỏi trước khi truy cập tệp chứa khóa, chạy lệnh nguy hiểm hoặc thoát khỏi chế độ lập kế hoạch. Never Ask (/auto) không hỏi gì và không có biện pháp bảo vệ khỏi các lệnh nguy hiểm. Bạn có thể thiết lập lệnh cấm vĩnh viễn bằng quy tắc deny trong ~/.kimi-code/config.toml; tốt nhất đừng bật Never Ask khi kết nối với cơ sở dữ liệu đang hoạt động.

3 chế độ Kimi Code khác nhau thế nào?

Nếu bạn đã cài đặt Kimi Code, hẳn bạn đã thấy bảng yêu cầu phê duyệt: tác nhân muốn chỉnh sửa tệp hoặc chạy lệnh và chờ bạn trả lời “có”. Trước đây, các chế độ này có tên Manual, YOLO và Auto, nên chúng vẫn dùng các lệnh cũ: /yolo và /auto.

Always Ask. Chế độ mặc định. Tác nhân đọc tệp mà không hỏi, nhưng bạn phải xác nhận riêng từng chỉnh sửa và từng lệnh. Đây là chế độ chậm nhất.

Ask When Needed. Bật bằng /yolo. Tác nhân tự chấp thuận các chỉnh sửa và lệnh thông thường, nhưng sẽ hỏi trước khi truy cập .env (tệp chứa mật khẩu và khóa của dự án) và khóa SSH của máy chủ, trước các lệnh nguy hiểm như shutdown (tắt máy tính) và rm -rf (xóa toàn bộ thư mục, bỏ qua thùng rác), cũng như trước khi thoát khỏi chế độ lập kế hoạch. Tác nhân cũng có thể tự đặt câu hỏi cho bạn.

Never Ask. Bật bằng /auto. Mọi thao tác đều được tự động chấp thuận, kể cả truy cập các tệp nhạy cảm và thoát khỏi chế độ lập kế hoạch. Tác nhân không hỏi bạn điều gì và tự quyết định mọi thứ.

Bảng về ba chế độ quyền trong Kimi Code: Always Ask, Ask When Needed, Never Ask
3 chế độ quyền trong Kimi Code CLI.

Chế độ Plan được bật riêng bằng Shift-Tab hoặc /plan: trước tiên tác nhân viết kế hoạch và chờ bạn phê duyệt, sau đó mới thao tác với các tệp.

Khi tôi tự làm việc mà không cần xác nhận

Trong Claude Code, tôi mặc định bật “cho phép mọi thứ” trong mỗi cuộc trò chuyện mới. Nếu không có chế độ này, việc lập trình theo cảm hứng quá chậm. Người lập trình theo cảm hứng vốn đã hiểu rất ít, vậy mà còn phải liên tục bấm nút: có, có, có, không, không, không.

Nhưng ở chế độ này, tác nhân có thể làm bất cứ điều gì liều lĩnh, kể cả xóa sạch cơ sở dữ liệu. Sau đó nó sẽ nói “xin lỗi, tôi xin lỗi”, nhưng đôi khi những gì nó đã làm không thể khắc phục được nữa. Vì vậy, chế độ này dành cho người không ngại rủi ro, và bạn phải tự chịu trách nhiệm.

Đây là các quy tắc của tôi. Với dự án cá nhân, thử nghiệm và nguyên mẫu, chỉ dùng không xác nhận trong bản sao/container cách ly, không tệp quý hay khóa production, có quyền hẹp và backup. Không có khách hàng không bảo vệ tệp, khóa cá nhân; vẫn phải kiểm cách ly. Nhưng nếu bật chế độ này trong chính dự án có quyền truy cập vào máy chủ production, chỉ cần 1 prompt là đủ để tác nhân xóa cơ sở dữ liệu ở đó qua đêm và triển khai các thay đổi lên trang web đang hoạt động.

Vì sao lời dặn bằng ngôn từ không thể bảo vệ bạn

Nhiều người viết “đừng đụng vào cơ sở dữ liệu” trong hướng dẫn cho tác nhân. Đừng trông chờ lời dặn đó sẽ cứu bạn. Bạn bảo nó: này, đừng vào đây. Nhưng nó vẫn sẽ vào và lấy thứ nó cần khi cần. Đặc biệt là Kimi của Trung Quốc: nó sẽ vi phạm mọi lệnh cấm bạn đặt ra. Các mô hình của Mỹ được huấn luyện tốt hơn nhiều để không làm vậy.

Tôi vẫn dùng Kimi trong công việc. Kimi K3 rất chú ý; tôi dùng nó để kiểm tra dự án xem có khóa bị lộ không và thu thập thông tin. Có lần tôi đã dùng hết mọi hạn mức của nó chỉ trong vài ngày. Kimi không giở chứng và làm mọi thứ bạn yêu cầu. Vì vậy bạn cần cách ly môi trường khi làm việc với nó. Tôi đã mô tả tại đây cách tôi thử nghiệm nó với các công việc của mình.

Bạn cần 2 hình thức cách ly:

  1. Danh sách chặn lệnh trong thiết lập. Nó chặn lời gọi công cụ khớp; mẫu cho một cách viết không là ranh giới đầy đủ với công cụ khác hay thao tác tương đương. Dùng cùng quyền OS, container và cơ sở dữ liệu.
  2. Quyền chỉ đọc cơ sở dữ liệu. Trên cơ sở dữ liệu đang hoạt động, tác nhân có một người dùng riêng với quyền chỉ đọc. Như vậy, ngay cả ở chế độ Never Ask, tác nhân cũng không thể xóa sạch cơ sở dữ liệu.

Biện pháp bảo vệ khỏi lệnh nguy hiểm hoạt động ở đâu

Biện pháp bảo vệ tích hợp của Kimi Code khỏi các lệnh nguy hiểm được bật theo mặc định. Trong Always Ask và Ask When Needed, hệ thống yêu cầu xác nhận trước khi thực thi shutdown, reboot (khởi động lại) hoặc rm -rf. Trong Never Ask, các lệnh này được thực thi mà không dừng lại để hỏi.

Có 2 ngoại lệ:

  • rm -rf chạy mà không hỏi nếu chỉ xóa nội dung trong các thư mục tạm /tmp hoặc /temp (từ phiên bản 0.43.0);
  • ở chế độ Ask When Needed, Kimi Code không hỏi về các lệnh terminal mà hệ thống không thể phân tích trước (từ phiên bản 2.0.1).

Ở phiên bản 0.40.0, chế độ Auto chặn các lệnh nguy hiểm; tính năng chặn này bị gỡ bỏ ở phiên bản 0.41.0.

Trước đây/hiện nay: chế độ tự động của Kimi Code từng chặn các lệnh nguy hiểm, nhưng hiện không còn chặn
0.40.0: Auto chặn các lệnh nguy hiểm. 0.41.0: lệnh chặn đã bị gỡ bỏ.

Bạn có thể tắt biện pháp bảo vệ bằng dangerous_command_guard = false trong phần [permission] của tệp cài đặt ~/.kimi-code/config.toml, hoặc bằng biến KIMI_CODE_DANGEROUS_COMMAND_GUARD=false. Nhà phát triển khuyến nghị chỉ làm vậy ở những nơi các lệnh nguy hiểm đã được chặn bằng biện pháp bên ngoài.

Cách thiết lập lệnh cấm vĩnh viễn trong Kimi Code

Khi tác nhân muốn thay đổi điều gì đó, Kimi Code hiển thị bảng yêu cầu phê duyệt:

  • Approve: dùng phím mũi tên và Enter, hoặc nhấn trực tiếp 1, 2 hoặc 3;
  • Reject: Esc, Ctrl-C hoặc Ctrl-D;
  • Approve for this session: các lệnh cùng loại sẽ được chấp thuận cho đến khi phiên kết thúc;
  • Quy tắc vĩnh viễn: quy tắc allow hoặc deny vĩnh viễn trong tệp cài đặt.

Các quy tắc vĩnh viễn được ghi trong tệp cài đặt ~/.kimi-code/config.toml, trong các khối [[permission.rules]]. Kimi Code kiểm tra chúng theo thứ tự và áp dụng quy tắc khớp đầu tiên, vì vậy hãy đặt lệnh cấm phía trên quyền cho phép. Mỗi quy tắc có decision: allow (cho phép ngay), deny (từ chối ngay) hoặc ask (hỏi mỗi lần).

Cấm rm -rf và yêu cầu xác nhận trước mọi lệnh terminal khác:

[[permission.rules]]
decision = "deny"
pattern = "Bash(rm -rf*)"

[[permission.rules]]
decision = "ask"
pattern = "Bash"

Với lệnh terminal, mẫu được đặt trong dấu ngoặc đơn: Bash(command-pattern); với thao tác đọc tệp, dùng Read(path-pattern). Chỉ có thể cấm các công cụ MCP, AgentSwarm và công cụ của riêng bạn bằng tên đầy đủ của chúng.

Nếu bạn không rành kỹ thuật và không muốn mở tệp cài đặt, chỉ cần dán prompt dưới đây cho tác nhân: nó sẽ tự tìm ra những gì cần hạn chế. Nhưng hãy yêu cầu nó nói trước việc này sẽ khiến bạn chậm đi bao nhiêu. Nếu đã quen làm việc mà không cần xác nhận, một số thứ sẽ ngừng hoạt động sau khi bạn thêm các lệnh cấm. Đây là prompt của tôi:

Phân tích dự án của tôi và cho biết bạn có quyền truy cập vào máy chủ production, cơ sở dữ liệu staging và các khóa production hay không. Nếu có, hãy cấu hình biện pháp bảo vệ trước các lệnh nguy hiểm: cấm xóa toàn bộ thư mục, các lệnh viết lại lịch sử thay đổi theo cách không thể hoàn tác và các lệnh trực tiếp tác động đến cơ sở dữ liệu production. Trước tiên, hãy trình bày kế hoạch theo định dạng “trước - sau” và nói thật cho tôi biết việc này sẽ khiến tôi chậm đi bao nhiêu.

Tôi đã hướng dẫn cách cấu hình điều tương tự trong Claude Code ở một bài viết riêng. Bạn cũng nên xem bài viết về cách chế độ Auto trong Claude Code kiểm tra hành động của tác nhân.

Nên chọn chế độ nào

  • Bạn muốn xem mọi bước tác nhân thực hiện: Always Ask, chế độ mặc định. Bạn xác nhận mọi thứ trừ thao tác đọc.
  • Dự án cá nhân hoặc nguyên mẫu không có khách hàng thật: bắt đầu Always Ask hoặc Ask When Needed. Chỉ cân nhắc Never Ask với bản sao bỏ được, cách ly, quyền hẹp, không dữ liệu quý hay khóa; thiếu khách hàng không tự tạo an toàn.
  • Dự án có khách hàng thật và quyền truy cập máy chủ: đừng bật Never Ask. Thiết lập lệnh cấm deny trong config.toml và cấp cho tác nhân quyền chỉ đọc cơ sở dữ liệu.

Và hãy sao lưu cơ sở dữ liệu trên một máy tính tách biệt với máy dùng cho dự án. Các quy tắc an toàn khác được tập hợp trong một bài viết riêng.

Hãy chọn chế độ xác nhận phù hợp với quyền truy cập của dự án và kiểm tra nơi nào cần đặt lệnh cấm.

Nguồn

  • Kimi Code: Tương tác và nhập liệu — 3 chế độ quyền, /yolo, /auto, biện pháp bảo vệ khỏi các lệnh nguy hiểm trong từng chế độ, bảng yêu cầu phê duyệt và chế độ Plan.
  • Kimi Code: Tệp cấu hình — [[permission.rules]], thứ tự kiểm tra quy tắc, dangerous_command_guard, KIMI_CODE_DANGEROUS_COMMAND_GUARD và đường dẫn config.toml.
  • Kimi Code: Nhật ký thay đổi — các phiên bản 0.40.0, 0.41.0, 0.43.0 và 2.0.1: biện pháp bảo vệ khỏi các lệnh nguy hiểm và việc đổi tên các chế độ.

Tìm hiểu về Ailoot.

Xem thêm chi tiết

Câu hỏi thường gặp

Never Ask có an toàn chỉ vì dự án chưa có khách hàng không?

Không. Tác nhân vẫn có thể phá tệp cá nhân hoặc lộ khóa. Dùng quyền hạn chế, bản sao dùng thử cách ly hoặc container và bản sao lưu trước khi cân nhắc chế độ không xác nhận.

Quy tắc deny cho rm -rf có thay được cách ly không?

Không. Nó chặn lời gọi công cụ khớp, không chặn mọi cách tương đương để đổi tệp. Để dữ liệu quý và khóa sản xuất ngoài tầm truy cập; dùng danh tính cơ sở dữ liệu riêng với quyền tối thiểu cần thiết.

Tất cả bài viết