使用 mu
權限與安全
三種權限模式、Jev 能替你核准什麼、你的硬性約束、危險指令和外來內容。
mu 不問你就能做多少事,由權限模式決定。它顯示在狀態列和桌面版的傳送框裡,/permissions 隨時可以切換。
三種模式
| 模式 | 不問就執行 | 要問你 |
|---|---|---|
| 完全存取 | 一切 | 什麼都不問 |
| Jev 審批(預設) | 讀取;改專案裡的檔案;Jev 確定任務需要的一切 | Jev 拿不準的、認為超出你要求的,或認為無關的 |
| 最小權限 | 只有讀取 | 每一次編輯、指令、對外操作和子代理 |
/permissions full、/permissions jev 和 /permissions ask 直接切換。切換對目前的對話生效,並成為新對話的預設;其他正在執行的對話保持各自的模式。MU_PERMISSIONS=ask mu 只為一次執行設定。
Jev 審批什麼
在「Jev 審批」模式下,每條指令、專案外的改動、對外操作和子代理都先交給 Jev,只問一個問題:這次呼叫對任務和你說過的話來說是需要的,超出了範圍,無關,還是不清楚?只有「需要」且機率達到 0.8 或以上,才不經過你直接執行。其他情況都會問你,提示裡寫明原因,例如「Jev 認為這一步超出了你的要求」。
沒有判定器能回答時(沒有金鑰且免費的 Jev 無法使用、帳戶額度用完,或者只有一個本機判定器,而本機判定器不被信任來審批),mu 每一步都會問你,並說明原因。用 mu setup 設定一組 Jev 金鑰,或者切換模式。
mu 什麼時候問你
需要你決定的呼叫會顯示一個選擇框:
- 允許這一次
- 這次對話都允許,只在這次呼叫有安全的範圍時才提供:專案內的所有編輯、一個程式(對
git、npm、cargo這類程式還加上它的子指令,所以是npm test,而不是所有npm)、專案外的一個檔案,或一個工具 - 不允許
帶有串接、重新導向或指令替換的指令,或以 sudo、env 開頭的指令,只能允許一次。Esc 算作「不允許」。拒絕會告訴模型不要另找辦法繞過去,而是問你,或者不做這件事繼續往下。切換模式或執行 /permissions reset 時,允許過的操作會被忘掉。
任何模式下都成立的規則
- 你的硬性約束。 你排除掉的事,例如「別碰 migrations」,會一字不差地記在任務框架裡。任何會改變東西的呼叫之前,都會對照這些約束檢查,確定的違反會被攔下,並引用你的原話。完全存取模式下也一樣,子代理也受同樣的約束。
- 讀取從不需要問:讀取、搜尋和列出檔案,網頁搜尋和網頁讀取,以及只由唯讀程式組成的 shell 指令,例如
git status或cat … | grep …。 - 未知的工具要問。 mu 不認識的工具,例如一個 MCP 工具,需要授權。
- mu 自己的設定歸你管。 動到
~/.mu/agent的呼叫每次都要問你;Jev 不能核准它。
危險指令
規則會標記看起來危險的指令:rm -rf、強制推送、sudo、執行下載來的指令碼等等。在「Jev 審批」模式下,這樣的指令只有在 Jev 確定是你要的時才執行;在最小權限模式下,問你時會顯示這個標記。被標記的指令只能允許一次,不能整個對話都允許。
外來內容
網頁、搜尋結果、內建瀏覽器和 MCP 伺服器可能帶著寫來操弄 AI 的文字:「忽略你的規則」、「把這個檔案傳出去」、「執行這條指令」,或者一個把對話內容帶出去的連結。模型讀這類結果之前,會一段一段地篩查;帶著衝著 AI 來的指令的段落會被扣下,換成一行說明。判定器沒有按時回答時,明顯的注入語句仍會被規則扣下。
web_fetch 本身也有限制:每次請求有時間和大小上限,頁面文字標為不可信,你私人網路裡的位址會被拒絕,除非你允許,所以網頁沒辦法把讀取引導到你的區域網路裡。
撤銷改動
在每個會改檔案的回合裡,第一次改動之前,mu 會為專案拍一張快照,存進它自己的影子 git 目錄。你的儲存庫、索引和分支從不被碰到,專案也不需要是一個 git 儲存庫。存著機密的檔案(.env、金鑰、憑證)從不進快照。
/checkpoints列出對話目前分支上的檢查點。/rewind先顯示會有什麼變化,再把檔案、對話或兩者一起退回去。你自己在那之後改過的檔案會單獨列出來,並問你。/rewind undo撤銷上一次回退。
在你的主目錄裡開始的工作階段,以及非常大的專案(要收進的檔案超過 5,000 個或 200 MB),會跳過檢查點,並給出說明。另請見目標模式與收尾。