安裝
Vacant 是 Python 套件 vacant-network,安裝後用 vacant on 從選單挑你電腦上已有的 AI 助手,在中介之下啟動,不改動你的常駐設定。
#需求
| Python | 3.11 以上 |
| 作業系統 | macOS、Linux(Windows 的沙箱無法建置) |
| 模型通道 | 任何 OpenAI 相容端點:LM Studio、Ollama、vLLM,或雲端 API |
| AI 助手 | 指令列代理(Codex、OpenCode、Claude Code、pi…),或你自己接的 OpenAI 相容代理 |
#三種接法,強制程度不一樣
這是安裝前最該知道的一件事。Vacant 對「每一通都經過我」這件事的保證,範圍取決於它怎麼接。
| 形態 | 強制性 | 說明 |
|---|---|---|
| 函式庫/MCP 工具 | 自願 | 代理在自己的設定註冊 Vacant 的 MCP 伺服器,可以呼叫 delegate 等工具。代理不呼叫,Vacant 也無從介入。 |
| 控制器 | 只對親手啟動的子行程 | 先委派、驗收、再啟動下游代理。保證只涵蓋透過這個控制器啟動的行程;同一作業系統使用者可以直接繞過它執行代理。 |
| 擁有迴圈的執行框架 | 完全強制 | 生成、驗收、出貨都由它控制。增益實驗的 runner 屬於這一類。 |
2026 年 7 月的一次實測保存了反面教材:Hermes 代理少設一個環境變數,就安靜地直接連到外部服務。除了 requests_seen 為零之外,那一格的每一個欄位都像一次合法的拒交。所以收據上的 requests_seen 欄位是唯一能證明中介真的發生過的證據——「我設了環境變數」不是證據。
#安裝
git clone https://github.com/cosmopig/Vacant.git
cd Vacant
pip install -e .
# 或
pip install git+https://github.com/cosmopig/Vacant.git
#兩種啟動方式,證據等級不同
#vacant on(不改你的設定,建議)
vacant on
從選單挑你電腦上實際存在的命令列代理,在中介之下啟動它。vacant on 把 base URL 寫進這一次執行自己的暫存設定目錄,不改動你的常駐設定檔。選單上會標出每一種代理的通道驗證到什麼程度,例如「通道已驗」或「通道沒量過,跑完請看 requests_seen」。
#vacant install(改常駐設定)
把代理的常駐設定改掉。兩者的證據等級不同,不能互相背書——用 install 跑出來的收據不能拿來證明 on 的通道是通的。
#交付點在哪
2026 年 9 月 18 日加入的 vacant run 建立在一個觀察上:若只是要攔下交付,觸發點不在網路協定上,而在代理行程結束的那一刻。這個訊號完全可靠、不需要任何協定知識、不耗 token,而且跨所有框架成立。
它的流程:
- 啟動本機代理伺服器,依一份名單設定代理的 base URL 環境變數;把真實上游位址與金鑰從代理的環境中移除,只留在代理伺服器行程。
- 記錄工作區的樹雜湊。
- 啟動代理並等待結束;結束後終止整個行程群組,以防孫行程在凍結後寫入。
- 在凍結的工作區快照上執行可見驗收,並再量一次樹雜湊;不相等則標為基礎設施失敗。
- 簽下每次嘗試與每格裁決,以退出碼反映裁決。
| 退出碼 | 意義 |
|---|---|
0 | 交付 |
20 | 拒交 |
22 | 基礎設施失敗(樹雜湊對不上) |
#收據等級
收據會說清楚自己證明了多少。等級由探針結果決定,不是由「我們裝過了」的推論。
| 等級 | 條件 | 收據能說的話 |
|---|---|---|
| A | 圍欄成立、框架掛鉤的探針已觸發、未解釋的呼叫數為 0 | 每一通模型呼叫都經過 Vacant,且都對得上一個工具事件 |
| B | 圍欄成立,沒有掛鉤 | 每個離開的位元組都有紀錄,但分不出哪一通是模型發出的 |
| B′ | 模型通道不在(或不完整在)Vacant 眼前,但工���層有紀錄 | 只能說明工具層事件 |
| C | 兩者皆無 | 拒發收據 |
第一張真實代理的 A 級收據簽於 2026-09-20(pi 0.85.1 在真模型上執行,未解釋呼叫數為 0)。涵蓋性欄位全部採三態(真、假、未量)——未量到的值不得寫成零或假。

