venv-manager
venv-manager
Один уровень управления Python-окружениями для разработчиков и каждого AI-кодинг-агента.
Написан на Go. Один статический бинарник, без зависимостей во время выполнения, кроме python3 (или uv, если доступен).

GIF выше — настоящий: venv-manager watch app.py --venv X отслеживает файл, сканирует его импорты с помощью крошечного AST-подобного парсера и pip-устанавливает всё недостающее — при каждом изменении файла. Укажите его на скрипт, над которым итерирует LLM, и venv сходится вместе с кодом.
Зачем
Claude, Codex, Cursor и другие кодинг-агенты уже умеют выполнять shell-команды, создавать .venv и запрашивать разрешение на чувствительные операции. Чего у них нет — так это долговременного состояния Python-окружения.
Песочница защищает машину. venv-manager защищает рабочий процесс: он даёт каждому агенту одни и те же окружения, метаданные, историю пакетов и путь восстановления, независимо от того, какой клиент запущен.
Два сценария отказа привели к созданию этого инструмента:
Человеческий хаос. Venv размножаются по
~, кэш-каталоги съедают гигабайты, синтаксис активации различается в зависимости от оболочки, а клонирование «того самого окружения» означает копированиеpip freezeмежду терминалами.Агентный хаос. AI-агенты могут устанавливать в неправильный интерпретатор, оставлять частичные изменения и терять контекст окружения при переключении клиента или начале новой сессии.
venv-manager решает (1) с помощью чистого CLI и (2) с помощью общего Model Context Protocol сервера, постоянного реестра, типизированных снимков и различий, обратимых изменений пакетов, временных venv с песочницей на уровне ОС и наблюдателя за файлами, который поддерживает venv в синхронизации с развивающимся кодом.
Что песочница агента не решает
Возможность агента | Общий контроль окружения |
Одобряет или блокирует shell-команду | Записывает, какое окружение принадлежит какому проекту |
Ограничивает доступ к файловой системе и сети | Сохраняет состояние между Claude, Codex и другими клиентами |
Создаёт venv по запросу | Отслеживает метаданные создания и реального последнего использования |
Запускает | Показывает изменения на уровне пакетов между снимками |
Останавливает опасное действие | Откатывает повреждённое окружение к известному состоянию |
Два уровня дополняют друг друга: разрешения агента контролируют что может произойти сейчас; 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"]
}
}
}Предоставляемые инструменты (JSON-RPC 2.0 через stdio):
Инструмент | Назначение | |
| Имена всех управляемых venv. | |
|
| |
|
| |
|
| |
| `{name, packages[] | requirements_file}` → pip install с объединённым stdout+stderr. |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| Постоянные метаданные проекта, тегов, создания и последнего использования. | |
|
| |
| Версии Python на |
Сервер по умолчанию использует политику safe. Установка, откат, удаление и произвольное выполнение требуют confirm: true. Используйте --policy read-only для клиентов только для просмотра, --policy full для неограниченной совместимости и повторяйте --allow-tool NAME, чтобы открыть только явный поднабор. Эти политики — защита в глубину: они остаются согласованными, даже когда разные клиенты имеют разные настройки одобрения.
Реализация использует ноль сторонних MCP-зависимостей. JSON-RPC 2.0 с разделителями строк на stdin/stdout.
Временное выполнение (в стиле 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 использует sandbox-exec на macOS и bwrap на Linux. Профиль «запрещено по умолчанию» с явными списками разрешений для пути venv, /tmp и управления процессами. Сеть не разделяется.
Наблюдатель за файлами
venv-manager watch app.py --venv myenvfsnotify на родительском каталоге (переживает атомарные перезаписи редактора), задержка 500 мс, затем:
AST-подобное регулярное сканирование
.py-файлов (пропускает 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'"
}
}Один вызов инструмента — всё, что нужно агенту для рассуждения об окружении. freeze_hash позволяет агенту обнаружить расхождение между двумя вызовами describe за O(1), а не сравнивать списки пакетов.
Команды
Command | Description | |||
| Создать venv. Использует | |||
| Список venv. | |||
| Удалить venv. | |||
| Переименовать и перегенерировать скрипты активации через | |||
| Новый venv, наполненный | |||
| Установленные пакеты. | |||
|
| |||
| Обновить устаревшие пакеты (для конкретного venv или всех). | |||
| Очистить кэш pip и каталоги | |||
| Использование диска. | |||
| Вывести shell-команду для | |||
| Вывести | |||
| Выполнить в venv без активации; наследует stdio. | |||
| Запуск во временном venv. | |||
| Полный JSON-снимок (см. выше). | |||
| Извлечь сторонние импорты; проверить относительно venv. | |||
| Автоустановка отсутствующих импортов при изменении файла. | |||
| Захватить состояние pip freeze. | |||
| Список снимков (сначала новые). | |||
| Сначала установить состояние снимка, затем удалить пакеты, отсутствующие в нём. | |||
| Сравнить снимки или сравнить один снимок с текущим состоянием. | |||
| Вывести переносимый манифест (имя + версия python + freeze) в формате JSON. | |||
| Воссоздать venv из манифеста. | |||
| Сообщить об устаревших venv; требует | |||
| Показать постоянные метаданные создания, использования, проекта и тегов. | |||
| Обновить привязку к проекту и теги. | |||
| Диагностика версий python, uv, повреждённых venv. | |||
`config show | path | init` | Показать / найти / инициализировать конфиг. | |
| MCP-сервер с политикой авторизации «только чтение», безопасной или полной. | |||
| TUI-браузер на Bubble Tea. | |||
`completion [bash | zsh | fish | powershell]` | Скрипты автодополнения для shell. |
Большинство команд чтения также принимают --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
Если uv находится в PATH и use_uv: true, команда create выполняет uv venv. Обычно в 10–100 раз быстрее, чем python -m venv при холодном кэше.
Разработка
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 запускает go vet, go test -race на Ubuntu + macOS и интеграционные тесты на 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