venv-manager
venv-manager
開発者とすべてのAIコーディングエージェントのための、単一のPython環境制御レイヤー。
Goで書かれています。単一の静的バイナリで、python3(または利用可能な場合はuv)以外のランタイム依存関係はありません。

上のGIFは実際の動作です: venv-manager watch app.py --venv X はファイルを監視し、小さなASTライトパーサーでインポートをスキャンし、不足しているものをpipインストールします — ファイルが変更されるたびに。LLMが反復処理しているスクリプトにこれを向けると、venvはコードの進化に合わせて収束します。
なぜ
Claude、Codex、Cursor、その他のコーディングエージェントは、すでにシェルコマンドを実行したり、.venvを作成したり、機密操作の前に承認を求めることができます。しかし、彼らが共有しないのは、永続的なPython環境の状態です。
サンドボックスはマシンを保護します。venv-managerはワークフローを保護します: 実行中のクライアントに関係なく、すべてのエージェントに同じ環境、メタデータ、パッケージ履歴、復旧パスを提供します。
このツールを生んだ2つの障害モード:
人間の乱雑さ。 venvが
~全体に増殖し、キャッシュディレクトリがGBを消費し、アクティベーション構文がシェルごとに異なり、「動作した環境」を複製するには、ターミナル間でpip freezeをコピー&ペーストする必要があります。エージェントの乱雑さ。 AIエージェントは誤ったインタープリタにインストールしたり、部分的な変更を残したり、クライアントを切り替えたり新しいセッションを開始すると環境コンテキストを失ったりする可能性があります。
venv-managerは、(1)をクリーンなCLIで解決し、(2)を共有のModel Context Protocolサーバー、永続的なレジストリ、型付きのスナップショットと差分、元に戻せるパッケージ変更、OSレベルのサンドボックスを備えた一時的なvenv、そして進化するコードとvenvを同期させるファイルウォッチャーで解決します。
エージェントサンドボックスが解決しないこと
エージェントの機能 | 共有環境制御 |
シェルコマンドを承認またはブロックする | どの環境がどのプロジェクトに属するかを記録する |
ファイルシステムとネットワークアクセスを制限する | Claude、Codex、その他のクライアント間で状態を保持する |
プロンプトでvenvを作成する | 作成日時と実際の最終使用メタデータを追跡する |
| スナップショット間のパッケージレベルの変更を表示する |
安全でないアクションを停止する | 破損した環境を既知の状態にロールバックする |
2つのレイヤーは相互に補完します: エージェントの権限は今何が起こるかを制御し、venv-managerは何が存在し、何が変更され、どう回復するかを記録します。
Related MCP server: Sympathy-MCP
インストール
Homebrew (macOS、Linux):
brew install jacopobonomi/tap/venv-managerワンライナーインストールスクリプト (macOS、Linux):
curl -sSL https://raw.githubusercontent.com/jacopobonomi/venv_manager/main/install.sh | bashソースから:
git clone https://github.com/jacopobonomi/venv_manager && cd venv_manager
make installビルドにはGo 1.24以上、実行時にはPython 3.xが必要です。
AI統合
MCPサーバー
venv操作をネイティブのModel Context Protocolツールとして公開します。Claude、Codex、Cursor、Zed、その他のMCPクライアントは、同じ型付きツールを呼び出し、独立してシェル呼び出しを推測する代わりに、同じ永続的な環境状態を操作します。
Claude Desktopで設定します (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"venv-manager": {
"command": "venv-manager",
"args": ["mcp", "--policy", "safe"]
}
}
}公開されるツール (stdio上のJSON-RPC 2.0):
ツール | 目的 |
| 管理されているすべてのvenvの名前。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 永続的なプロジェクト、タグ、作成日時、最終使用メタデータ。 |
|
|
|
|
サーバーはデフォルトでsafeポリシーです。インストール、ロールバック、削除、任意の実行にはconfirm: trueが必要です。検査専用クライアントには--policy read-only、無制限の互換性には--policy fullを使用し、--allow-tool NAMEを繰り返して明示的なサブセットのみを公開します。これらのポリシーは多層防御です: 異なるクライアントが異なる承認設定を持っていても一貫性を保ちます。
実装はサードパーティのMCP依存関係を一切使用しません。stdin/stdout上で改行区切りのJSON-RPC 2.0を使用します。
一時的な実行 (uvxスタイル、サンドボックス化)
# create → install → run → destroy, all in one call
venv-manager exec --with requests -- python -c "import requests; print(requests.__version__)"
# with an OS sandbox: no network, no writes outside /tmp + the ephemeral venv
venv-manager exec --sandbox --with pandas -- python untrusted.py--sandboxはmacOSではsandbox-exec、Linuxではbwrapを使用します。デフォルト拒否のプロファイルで、venvパス、/tmp、プロセス管理に対して明示的な許可リストを持ちます。ネットワークは共有されません。
ファイルウォッチャー
venv-manager watch app.py --venv myenv親ディレクトリに対するfsnotify(エディタのアトミックリネーム書き込みにも耐えます)、500msのデバウンス、その後:
.pyファイルのASTライト正規表現スキャン(docstring、相対インポート、ローカルモジュール/パッケージ、.venv、.git、__pycache__、node_modulesなどのベンダーディレクトリをスキップ)標準ライブラリモジュールセットでフィルタリング
インポート名 → pipパッケージのエイリアスを解決(
cv2→opencv-python、sklearn→scikit-learn、PIL→Pillow、bs4→beautifulsoup4、yaml→PyYAML、...)インストール済みパッケージとの差分を取る
差分を
pip installする
venvは常に現在のファイルの要件のスーパーセットになります。これが上のデモGIFが実行しているループです。
永続レジストリ
すべての環境は~/.venvs/.venv-manager/registry.jsonで追跡され、作成日時と最終使用タイムスタンプ、オプションのプロジェクトパス、タグが記録されます。書き込みはアトミックで、レジストリはライブのvenvディレクトリと自動的に整合します。
venv-manager registry
venv-manager registry set research --project ~/work/paper --tag data,ai
venv-manager registry researchpruneは、メタデータが利用可能な場合、ディレクトリの変更時刻ではなくレジストリのlast_used_atを使用します。
単一呼び出しのコンテキストプライマーとしてのJSONスナップショット
venv-manager describe myenv{
"name": "myenv",
"path": "/Users/me/.venvs/myenv",
"python_version": "3.12.6",
"python_path": "/Users/me/.venvs/myenv/bin/python",
"pip_path": "/Users/me/.venvs/myenv/bin/pip",
"packages": ["requests==2.34.2", "rich==15.0.0", ...],
"package_count": 12,
"size_bytes": 45123456,
"size_human": "43.03 MB",
"modified_at": "2026-07-20T15:41:35Z",
"freeze_hash": "sha256:2c58d830...",
"activation": {
"bash": "source '/Users/me/.venvs/myenv/bin/activate'",
"zsh": "source '/Users/me/.venvs/myenv/bin/activate'",
"fish": "source '/Users/me/.venvs/myenv/bin/activate.fish'"
}
}1回のツール呼び出しで、エージェントが環境を推論するために必要なすべてを取得できます。freeze_hashにより、エージェントはパッケージリストの差分を取る代わりに、2つのdescribe呼び出し間のドリフトをO(1)で検出できます。
コマンド
Command | Description | |||
| venv を作成します。設定で | |||
| venv を一覧表示します。 | |||
| venv を削除します。 | |||
|
| |||
| ソースの | |||
| インストール済みパッケージを表示します。 | |||
|
| |||
| 古いパッケージをアップグレードします(venv ごと、またはすべて)。 | |||
| pip キャッシュと | |||
| ディスク使用量を表示します。 | |||
|
| |||
|
| |||
| アクティベートせずに venv 内で実行します。stdio を継承します。 | |||
| 一時的な venv で実行します。 | |||
| 完全な JSON スナップショットを表示します(上記参照)。 | |||
| サードパーティのインポートを抽出し、venv と照合します。 | |||
| ファイル変更時に不足しているインポートを自動インストールします。 | |||
| pip freeze の状態を取得します。 | |||
| スナップショットを一覧表示します(新しい順)。 | |||
| まずスナップショットの状態をインストールし、次にスナップショットにないパッケージを削除します。 | |||
| スナップショット間の差分を表示するか、スナップショットと現在の状態を比較します。 | |||
| 移植可能なマニフェスト(名前 + Python バージョン + freeze)を JSON として出力します。 | |||
| マニフェストから venv を再作成します。 | |||
| 古い venv を報告します。削除には | |||
| 永続的な作成、使用、プロジェクト、タグのメタデータを表示します。 | |||
| プロジェクトの関連付けとタグを更新します。 | |||
| Python バージョン、uv、壊れた venv を診断します。 | |||
`config show | path | init` | 設定の表示 / 場所の特定 / 初期化を行います。 | |
| 読み取り専用、安全、または完全な認可ポリシーを持つ MCP サーバー。 | |||
| Bubble Tea TUI ブラウザ。 | |||
`completion [bash | zsh | fish | powershell]` | シェル補完スクリプト。 |
ほとんどの読み取りコマンドは、安定した機械解析可能な出力のために --json も受け付けます。
設定
~/.config/venv-manager/config.json($XDG_CONFIG_HOME と $VENV_MANAGER_CONFIG を尊重します):
{
"base_dir": "/custom/path/to/venvs",
"default_python": "3.12",
"use_uv": true,
"prune_after_days": 90
}初期化:venv-manager config init。
uv バックエンド
PATH に uv があり、use_uv: true の場合、create は uv venv を実行します。通常、コールドキャッシュでは python -m venv より 10〜100 倍高速です。
開発
make build # go build -o bin/venv-manager
make test # unit tests
make demo # regenerate scripts/demo/demo.gif via VHS
go test -tags=integration ./internal/manager/... # integration tests (real pip, real PyPI)CI は Ubuntu + macOS で go vet、go test -race を実行し、Ubuntu で Python 3.12 を使用した統合テストを実行します。
アーキテクチャ:
cmd/venv-manager/ cobra CLI
internal/manager/ core operations (create, install, snapshot, scan, watch, exec, describe, ...)
internal/config/ XDG-aware JSON config
internal/mcp/ JSON-RPC 2.0 MCP server (stdio)
internal/tui/ Bubble Tea browser
internal/utils/ platform helpers, size formattingライセンス
MIT。
作者
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for agentverse documentation, generated by doc2mcp.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProduction-ready MCP server for secure Python code execution with artifact capture, virtual environment support, and LM Studio integration.11Apache 2.0
- FlicenseAqualityDmaintenanceAn MCP server for managing Incus virtual machines through structured tools for command execution, file management, and snapshot operations. It enables AI agents to puppeteer VMs on a masternode by wrapping the Incus CLI.9
- AlicenseBqualityDmaintenanceProduction-grade MCP server that gives AI agents safe access to your local dev environment: filesystem, databases, processes, and OpenAPI specs.15673MIT
- FlicenseBqualityFmaintenanceAn MCP server that manages Python virtual environments using uv, allowing LLMs to reliably resolve dependencies and update virtual environments.67
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jacopobonomi/venv_manager'
If you have feedback or need assistance with the MCP directory API, please join our Discord server