Skip to content

政策檔 ​

政策檔決定有哪些密碼、代理可以怎麼用。它放在 ~/.config/keymitt/policy.toml(Windows 是 %APPDATA%\keymitt\policy.toml),裡面沒有任何密碼值,可以放心收進你的 dotfiles。

toml
version = 1

[approval]
method = "auto"
ttl_secs = 0
timeout_secs = 120
allow_weak = true

[secrets.github]
description = "GitHub fine-grained token"
channels = ["http"]
hosts = ["api.github.com"]

[secrets.pg-staging]
description = "staging DB password"
channels = ["env", "stdin"]
commands = ["/opt/homebrew/bin/psql"]
env = ["PGPASSWORD"]

[files]
read_roots = ["~/projects/infra"]

可以手動編輯,也可以用 keymitt add、keymitt allow 與 keymitt disallow。不認得的鍵會被拒絕, 打錯字不會悄悄放寬規則。MCP 伺服器在啟動時讀取政策——修改後要重新啟動。

管道(channels) ​

管道是密碼抵達目的地的方式。

管道值會…
stdin寫進程式的標準輸入
env設成程式的環境變數
file寫進僅限擁有者的暫存檔,執行完覆寫後刪除
http由 keymitt 自己放進 HTTP 請求送出(http_request)

沒有「命令列參數」這個管道:機器上的其他程序讀得到參數。

執行 keymitt add 沒有指定 --channel 時,keymitt 會依你給的規則挑選:--command 開啟 stdin、env 與 file; --host 開啟 http。

程式 ​

commands 列出可以經由 stdin、env 或 file 收到這組密碼的程式:

寫法比對
/opt/homebrew/bin/psql剛好就是這個檔案
psql任何在 PATH 絕對路徑目錄裡、名為 psql 的程式——請避免,見下方
*任何程式——請避免

keymitt add --command psql 與 keymitt allow --command psql 會當場解析名稱並存下完整路徑,請優先用它們, 不要手寫名稱;keymitt doctor 會指出只寫名稱的項目。收到請求時,程式只會在 keymitt 自己 PATH 裡的絕對路徑 目錄中尋找——相對或空白的項目會以代理可能控制的目錄為基準,因此一律忽略——./tool 這類相對路徑也會被拒絕。

不要把 shell 或直譯器加進允許清單

sh、bash、python 或 node 拿到密碼之後什麼都做得出來。請改為允許特定的工具。

環境變數名稱 ​

走 env 管道的密碼會放進一個環境變數,而且變數的值必須剛好就是佔位符。會改變程式如何載入程式碼或設定的名稱—— PATH、HOME、LD_*、DYLD_*、BASH_FUNC_*、GIT_*、NODE_*、PYTHON*、CARGO_*、代理伺服器與 CA 變數、 pager 與編輯器等——一律拒絕(NODE_AUTH_TOKEN、CARGO_REGISTRY_TOKEN 這類套件庫 token 例外)。要固定某組密碼能用的名稱:

toml
env = ["PGPASSWORD"]

主機 ​

hosts 列出 http_request 可以把密碼送去哪裡:

寫法比對
api.github.com443 埠的 HTTPS,主機完全相同
*.example.com443 埠的 HTTPS,example.com 的任何子網域(不含 example.com 本身)
http://127.0.0.1:8080協定、主機與埠完全相同——給本機的明文 HTTP 服務用
*任何 HTTPS 主機——請避免

代理可以讀的檔案 ​

read_file_redacted 只能讀 MCP 伺服器工作目錄底下(用戶端在專案裡啟動伺服器時,就是你的專案)以及 [files] read_roots 列出的目錄。工作目錄如果是家目錄或檔案系統根目錄就不採用。憑證存放處(~/.ssh、~/.aws、 ~/.cloudflared、~/.netrc、鑰匙圈…)與金鑰檔(id_*、*.pem、*.key…)即使在這些目錄裡也一律拒絕。

toml
[files]
read_roots = ["~/projects/infra", "/etc/myapp"]

核准設定 ​

鍵預設意義
methodautoauto:用最強的可用方式,允許時才退回。native:只用強驗證。cli:從終端機核准
ttl_secs0對「位元組完全相同」的請求記住核准這麼多秒。0 表示每次都問
timeout_secs120時間內沒人回應就拒絕
allow_weaktrue沒有強驗證可用時,允許不驗證身分的方式

各種方式的細節請看核准。

以 MIT 或 Apache-2.0 授權釋出。