核准
每次副作用工具呼叫在執行前都會被分類。
風險:Read、Write、Privileged、Forbidden。
權限:Workspace、OutsideWorkspace、Network、PrivilegedEscalation。
授權:Once、Session、Persistent。
| 模式 | 行為 |
|---|---|
| Default | 工作區讀取自動執行。寫入、shell 和工作區外的路徑會詢問你。啟用 Skills 時,Skills 搜尋目錄中的任何路徑自動放行。 |
| Edit | 內建 write 和 edit 的工作區檔案更改無需審查即放行。Shell、外部工具和工作區外的路徑仍然詢問。 |
| Review | 內建 write 和 edit 的工作區檔案更改無需審查即放行,與 Edit 相同。另一個模型檢查其餘每個副作用呼叫,包括 bash、bash_start、bash_stop,以及工作區外的 read、list、tree、glob、grep、search、write 和 edit,還有外部 Write。啟用 Skills 時,Skills 搜尋目錄自動放行。會附上有界的記錄摘錄(最早和最新的使用者回合作為錨點,然後是其他使用者回合,再然後是最近的助手和工具證據)。壓縮摘要代表被摺疊的回合。沒有這些證據時,主機詢問你。之後的使用者訊息細化任務;狀態問題不會撤銷先前的授權。透過 question 工具給出的答案算作使用者授權。Allow 會執行,除非該呼叫是 Forbidden 或需要強制提示。Deny 變成模型可見的拒絕文字。Ask、對 Forbidden 的 allow,以及強制提示的 allow,都會回退到你。審查者請求的瞬時失敗按 approvalRetry 重試(預設五次);仍然失敗時詢問你。Review 不是授權,也不是完全放行。 |
| Audit | 審查者和記錄規則與 Review 相同,但工作區 write 和 edit 也會被檢查。它們不會自動放行。 |
| Full | 限制在工作區內、策略允許的動作無需審查即放行,包括任何保持 Write + Workspace 的已載入外部工具。Forbidden、Privileged、工作區外和強制提示的呼叫從不完全自動放行。 |
不要把模式命名為 auto。這個詞在審查和完全放行之間含糊。不帶參數的 /approval 循環 Default、Edit、Review、Audit 和 Full。/approval review(以及其他名稱)設定一種模式並寫入 config.json。舊值 autoedit、fullreview 和 full-review 仍然可以解析。
除非你開啟單獨的核准模型,否則審查模型就是工作階段模型。/approval model 顯示 Approval model Off,或在儲存了提供商和模型時顯示 Approval model On openai gpt-5.6-sol;儲存的非預設檔位會追加為 · Think High。/approval model on 和 /approval model off 持久化該開關,並保留已儲存的提供商、模型和檔位。/approval model <model> 或 /approval model <provider> <model> 選擇目錄中的模型,保留已儲存的檔位,並開啟開關。模型必須存在於 providers.json。缺少憑證或未知模型會被拒絕,先前設定保持不變。開關開啟時,Review 和 Audit 用該模型自己的憑證和已儲存的思考檔位呼叫它。/approval thinking 循環該檔位,或按名稱設定一個,並持久化它。它需要已儲存或已選擇的核准模型,開關關閉時也能工作。模型不提供的已儲存檔位回退到提供商預設值,無法關閉思考的模型上 /approval thinking 會拒絕 off。Tab 從 on、off 和目錄補全 /approval model,並從該模型的檔位補全 /approval thinking。/model 和工作思考檔位不會改變它。壓縮留在工作階段模型上。開關關閉時,不建立單獨的用戶端,Review 和 Audit 跟隨 /model。更改核准模型前先完成目前回合。/status 只在開關開啟時增加 Approval model 和 Approval thinking 列,/status full 列出有效的 retry 和 approvalRetry 策略。狀態列不會。
詢問你時,覆蓋層使用兩欄欄位網格(Status、Reason、Risk、Authority,審查時還有 Outcome 和理由):
| 鍵 | 授權 |
|---|---|
| Y、Enter 或 1 | Once |
| S 或 2 | Session |
| A 或 3 | Always(持久) |
| N、Escape 或 4 | Deny |
持久授權儲存在 ~/.crystal/permissions.json。Session 和 Persistent 只提供給沒有強制提示的普通 Workspace Read/Write 呼叫。OutsideWorkspace、Network、Privileged、Forbidden 和強制提示只提供 Once/Deny;Session/Always 鍵被忽略。每次呼叫都會對照目前分類檢查現有授權,它們不能繞過升級。審查者 Allow 之後,強制提示仍會詢問你;審查者 Deny 則拒絕。crystal run 拒絕任何到達此提示的呼叫。
呼叫自動放行時(策略、記住的授權或審查允許),shell 印出帶有 Status、Reason、Risk 和 Authority 的面板,加上分類器摘要。審查允許還會印出 Outcome、審查者的風險和授權,以及理由。/verbose approvals 隱藏或顯示策略和授權面板。/verbose review 隱藏或顯示審查允許面板。除非 config.json 中對應欄位為 false,否則各自保持開啟。本工作階段中已經印出的卡片跟隨各自的開關。已儲存的 verboseApprovals 值為 false 不再隱藏審查允許卡片。詢問你時仍然使用覆蓋層。
Shell 分類把 sudo、破壞性檔案系統命令、管道到 shell 的下載、強制推送和憑證路徑寫入視為 Forbidden 或 Privileged。Forbidden 從不完全自動放行。Review 和 Audit 可以拒絕這些呼叫,或把它們升級給你。.ssh、.gnupg 或 ~/.crystal/credentials.json 下的寫入是 Forbidden。