ixt โ Universal CLI Tool Isolator¶
One CLI for Python, Node, and binary tools โ each in its own isolated env. Optional Linux runtime policy can restrict env vars and filesystem access per tool.
Zero third-party deps. Zero system pollution. One command, any ecosystem.
Get started in 30 seconds¶
# 1. Install ixt (pinned release, SSH-signed)
uv tool install git+https://gitlab.com/pytgaen-group/ixt.git@v0.7.0
# 2. Add ixt-managed shims to your PATH
ixt setup path
# 3. Install your first tool โ any ecosystem
ixt tool install ruff # Python
ixt tool install @anthropic-ai/claude-code # Node
ixt tool install BurntSushi/ripgrep # GitHub binary
That's it. ixt setup path supports bash, zsh, fish, and PowerShell. Each tool lives in its own isolated env; run ixt environment to see the exact config, install, and cache paths for your platform.
Full installation guide CI usage
ixt has no telemetry and no background network activity. It contacts registries only for explicit commands that resolve, download, upgrade, or diagnose remote state.
Three ecosystems, one command¶
ixt auto-detects the backend from the package name โ no flag, no config, no guessing.
Python tools from PyPI¶
Simple name โ PyPI. ixt creates one isolated venv per tool with uv venv + uv pip install.
Node CLIs from npm¶
Scoped @scope/name โ npm. Uses bun for fast installs (falls back to npm).
Binaries from GitHub Releases¶
owner/repo โ GitHub Releases. Pure Python stdlib โ no runtime, no compiler.
Declarative, repeatable setups¶
Snapshot your tools once, replay them everywhere โ local, teammates, CI.
Exact repeatability comes from exact version pins; unpinned or ranged entries
are resolved when ixt tool apply runs.
Runtime policy โ one step further¶
Dependency isolation keeps each tool's packages separate. Runtime policy goes deeper: it controls which environment variables and filesystem paths a tool can access when launched through ixt shims. It does not sandbox install-time package-manager scripts, it does not block network access, and it is not a general malware sandbox. If the install step itself is untrusted, use a disposable VM/container/user.
No daemon. The shim is a plain Python file you can read and audit; enforcement is delegated to bubblewrap when env/fs policy needs kernel support. When you reset the policy, it goes back to a direct symlink โ zero overhead.
Linux only for now
Enforcement relies on POSIX execve and Linux namespaces. On macOS / Windows the policy is saved to ixt.json but not enforced at runtime โ the tool runs with the full environment.
The fs axis additionally requires bubblewrap:
sudo apt install bubblewrap ยท sudo dnf install bubblewrap ยท sudo pacman -S bubblewrap ยท sudo apk add bubblewrap.
Without bubblewrap, the env axis is hygiene-only: the filtered env reaches the process, but /proc can still expose the parent environment.
Policy reference ยท Real-world scenarios
Why ixt?¶
-
One tool, every ecosystem
Python linters, Node CLIs, Rust/Go/C binaries โ all managed the same way, with the same commands.
-
Per-tool isolation
Each tool gets its own env. No dependency conflicts, ever. Uninstall is a clean
rm -rf. -
Runtime policy
Restrict env vars and filesystem paths per tool on Linux. Effective filesystem policy requires bubblewrap; network isolation is roadmap.
-
Zero configuration
The backend is auto-detected from the package name.
ixt tool install <anything>just works. -
Zero dependencies
Pure Python stdlib, zero PyPI packages.
bunauto-bootstraps on first Node install โuvis typically already there (you used it to install ixt), with an auto-download fallback if missing.
Where to next?¶
-
Getting started
Install ixt, verify the signature, add it to PATH, install your first tool.
-
Commands reference
Every
ixtcommand, every flag, with copy-paste examples. -
Configuration
ixt.tomlformat, version pinning, exposure rules, the mental model.
Coming from uvpipx?¶
ixt is the successor to uvpipx. Same core concepts (isolation, exposure, injection), generalized across three backends. Directory layout, metadata, and CLI all evolved โ a migration script is provided.