インストール
Vacant は Python パッケージ vacant-network です。インストール後、vacant on でメニューからあなたのコンピュータにすでにある AI アシスタントを選び、仲介のもとで起動します。常駐の設定は変更しません。
#要件
| Python | 3.11 以上 |
| OS | macOS、Linux(Windows ではサンドボックスを構築できません) |
| モデルの通信路 | OpenAI 互換の任意のエンドポイント:LM Studio、Ollama、vLLM、またはクラウド API |
| AI アシスタント | コマンドラインのエージェント(Codex、OpenCode、Claude Code、pi…)、またはあなた自身が接続した OpenAI 互換のエージェント |
#三つの接続方法、強制の度合いが違う
これがインストール前に最も知っておくべきことです。「すべての呼び出しが自分を経由する」ことについての Vacant の保証は、どう接続するかによって範囲が決まります。
| 形態 | 強制性 | 説明 |
|---|---|---|
| ライブラリ/MCP ツール | 任意 | エージェントが自分の設定に Vacant の MCP サーバーを登録し、delegate などのツールを呼び出せます。エージェントが呼び出さなければ、Vacant は介入しようがありません。 |
| コントローラ | 自ら起動した子プロセスに対してのみ | まず委任し、受け入れ検査をしてから、下流のエージェントを起動します。保証はこのコントローラを通して起動したプロセスにしか及びません。同じ OS ユーザーなら、これを迂回してエージェントを直接実行できます。 |
| ループを所有する実行フレームワーク | 完全に強制 | 生成、受け入れ検査、出荷をすべてこれが制御します。利得実験の 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)。網羅性の項目はすべて三値(真、偽、未測定)を取ります——測っていない値をゼロや偽と書いてはなりません。
#次に読むもの
- 実際に一度動かす:クイックスタート
- ゲートが裏で何をしているか知りたい:実行可能な受け入れ層
- 私たちの実験を自分で再実行したい:再実行の方法

