keymitt 是什麼
keymitt 讓 AI 代理使用你的憑證,而憑證的值永遠不會進入代理的上下文。它是一個 MCP 伺服器加上命令列工具,跑在你自己的機器上。
問題在哪
代理的任務遲早會需要一組憑證:API token、資料庫密碼、部署金鑰。現在只有三種做法,沒有一種是好的:
| 做法 | 會出什麼事 |
|---|---|
| 貼進對話 | 它從此留在對話紀錄裡,紀錄流到哪它就到哪。 |
| 放進代理讀得到的檔案 | 代理會讀——然後在摘要或日誌裡原封不動地引用出來。 |
| 那一步自己來 | 你變成代理的手,自動化就不再自動。 |
keymitt 是第四種做法:代理用名稱使用密碼,永遠看不到它的值。
運作方式
- 代理在請求裡寫一個佔位符,例如
{{secret:github}}——放在標頭、要送進程式 stdin 的文字、環境變數或暫存檔裡。 - keymitt 檢查政策:這組密碼可以給這支程式、或送往這個主機嗎?
- keymitt 請你核准這一個請求:macOS 用 Touch ID 或密碼、Windows 用 Windows Hello、Linux 用 polkit。
- keymitt 從作業系統鑰匙圈讀出值,在最後一刻才代入。
- 所有回來的東西——stdout、stderr、回應標頭與內容——在代理看到之前都先經過遮蔽。
代理能做什麼
keymitt 提供五個工具:
| 工具 | 用途 |
|---|---|
list_secrets | 有哪些密碼、各自能怎麼用——絕不包含值 |
run_with_secrets | 執行程式,密碼放進 stdin、環境變數或暫存檔 |
http_request | 讓 keymitt 對允許的主機送出 HTTP 請求 |
read_file_redacted | 讀取設定檔,憑證會被遮蔽 |
request_secret | 請你存入它需要的密碼,附上一行現成指令 |
刻意不提供任何會回傳值、匯出密碼或修改政策的工具。
遮蔽
回傳給代理之前,keymitt 會把所有已登記密碼的值——不只這次用到的——換成 [REDACTED:NAME]。 它也會抓出值在輸出裡最常出現的變形:base64(在較長資料裡的任何對齊位置)、URL 編碼、hex 與 JSON 跳脫。 遮蔽發生在截斷輸出之前,所以剛好卡在截斷點上的值不會漏出一半。
read_file_redacted 為設定檔再多加一層:任何看起來像密碼、token、私鑰,或連線字串裡密碼的東西,也一併遮蔽。
keymitt 不是什麼
keymitt 防止意外外洩,並讓每一次使用都被看見、經過核准。它不是用來對付「刻意作惡、能以你的身分執行任何指令」 的代理的沙箱。安全模型寫清楚了兩者的差別。