Quick rule: Prefer semantic reduction first:
--jsonwith selected fields, then--jq/vx rgfiltering, then--compactfor broad logs. SetVX_OUTPUT=json,VX_OUTPUT=toon, orVX_OUTPUT=compactonly when you want that default for the whole invocation.
vx-native commands support --json, --toon, --compact, and
--output-format <text|json|toon|compact>. Forwarded tools such as vx git,
vx gh, vx cargo, or vx npm keep their native stdout by default; use the
tool's own structured flags first, or add vx --compact ... when broad
subprocess output must be filtered.
bash
vx analyze --json # Analyze project structure
vx check --json # Verify tool constraints
vx ai context --json # Generate AI-friendly project context
Output fields (analyze):
ecosystems[] - Detected ecosystems (nodejs, python, rust, go)dependencies[] - Project dependenciesscripts[] - Available scriptsrequired_tools[] - Tools neededOutput fields (check):
requirements[] - Tool requirement statusall_satisfied - Whether all constraints are metmissing_tools[] - Tools that need installationOutput fields (ai context):
project - Project info (name, languages, frameworks)tools[] - Installed tools with versionsscripts[] - Available scriptsconstraints[] - Tool constraintsbash
vx list --json # List installed tools
vx versions node --json # List available versions
vx which node --json # Find tool location
vx search <query> --json # Search for tools
Output fields (list):
runtimes[] - Available runtimestotal - Total countinstalled_count - Installed countOutput fields (versions):
versions[] - Available versions with metadatalatest - Latest versionlts - LTS version (if applicable)Output fields (which):
path - Executable pathversion - Resolved versionsource - Source (vx, system, global_package)bash
vx install node@22 --json # Install tool
vx sync --json # Sync from vx.toml
Output fields (install):
runtime - Runtime nameversion - Installed versionpath - Installation pathduration_ms - Installation durationdependencies_installed[] - Dependencies also installedOutput fields (sync):
installed[] - Successfully installedskipped[] - Skipped (already installed)failed[] - Failed installationsduration_ms - Total durationbash
vx ai context # Generate AI-friendly context (Markdown)
vx ai context --json # JSON format
vx ai context --minimal # Minimal output
vx ai session init # Initialize session state
vx ai session status # Show session status
vx ai session cleanup # Clean up session
bash
vx env --json # Show environment variables
vx dev --export # Export shell environment
Check vx --version and vx --help first. If shim is listed, inspect
vx shim --help and vx shim add --help for this interface; v0.9.34 does not
include it. Do not probe an unknown subcommand as a runtime on older builds.
bash
vx shim path # Default targets and their PATH status
vx shim list --json # Recorded names, targets, launcher, directories, files
# After checking name conflicts and every destination file:
vx shim add jq --as jq-vx --dir "/absolute/path/to/shim-bin"
vx shim remove jq-vx # Remove by exposed name, not runtime spec
--dir is repeatable and replaces the defaults; use absolute paths so later
sync/ remove do not depend on the working directory. Without it, add writes to
both the vx bin directory and the directory containing the current vx executable
(deduplicated). Adding a shim does not install its target or edit PATH.
After upgrading or moving vx, use vx shim sync only after checking ownership
of every registered destination: it rewrites all entries, including existing
files. --force is an explicit overwrite decision, never the default repair.
For Codex targets, shell-specific resolution, conflicts, and safe removal, read
the managed command shim guide.
There is no vx shim rebuild or vx shim codex form in this interface.
bash
vx list --json
# Output: {"runtimes": [...], "total": 50, "installed_count": 5}
bash
vx list --output-format toon
vx list --toon
# Output:
# runtimes[50]{name,installed,description}:
# node,true,Node.js runtime
# python,false,Python runtime
# ...
TOON format is recommended for AI agents - it saves 40-60% tokens compared to JSON.
bash
# vx-native compact summary
vx --compact list node
vx list --output-format compact
# Forwarded subprocess filtering
vx --compact gh run view 789 --log
vx --compact --filter-level aggressive cargo test
Compact mode is RTK-inspired: it strips ANSI noise, collapses repeated lines,
keeps error-looking lines, and enforces a line budget for subprocess output.
Use it after semantic options like gh --json --jq or vx rg filters.
bash
# Smallest useful status view
vx gh run view 789 --json status,conclusion,jobs --jq '.jobs[] | {name,conclusion}'
# Failure search with capped matches
vx gh run view 789 --log | vx rg -n -m 80 "error|failed|panic|Traceback|FAILED|warning"
# Broad fallback without raw-log token cost
vx --compact gh run view 789 --log
Do not rely on default vx gh or vx git output to save tokens. Their default
behavior is transparent forwarding; savings come from selected fields, --jq,
search filters, or explicit --compact.
bash
export VX_OUTPUT=json # Default to JSON output
export VX_OUTPUT=toon # Default to TOON output
export VX_OUTPUT=compact # Default to compact output/filtering
export VX_FILTER_LEVEL=normal # light, normal, aggressive
bash
vx <tool> [args...] # Run any tool
vx npm install # Run npm
vx cargo build # Run cargo
bash
# Runtime with version
vx node@22 app.js # Use specific Node.js version
# Runtime executable override
vx msvc@14.42::cl main.cpp # Run cl from MSVC runtime
# Package execution (ecosystem:package pattern)
vx npm:vite # Run vite via npm
vx uv:ruff check . # Run ruff via uv
vx npm:typescript@5.0::tsc # Run tsc from specific typescript version
# Package aliases (shortcuts)
vx vite # Same as: vx npm:vite
vx meson # Same as: vx uv:meson
# Multi-runtime composition
vx --with bun@1.1 --with deno node app.js # Multiple runtimes in PATH
bash
vx install <tool>@<version> # Install tool
vx uninstall <tool> # Uninstall tool
vx list # List tools
vx versions <tool> # Show versions
vx which <tool> # Find tool path
vx switch <tool>@<version> # Switch version
bash
vx init # Initialize vx.toml
vx add <tool> # Add tool to project
vx remove <tool> # Remove tool from project
vx sync # Sync tools from vx.toml
vx lock # Generate vx.lock
vx check # Check constraints
bash
vx run <script> # Run script from vx.toml
vx run --list # List available scripts
bash
vx cache dir # Show cache directory
vx cache clean # Clean cache
bash
--json # JSON output
--toon # TOON output
--compact, -u # Compact RTK-style output / subprocess filter
--output-format <text|json|toon|compact> # Output format
--fields <a,b,c> # Field mask for JSON-capable vx commands
--filter-level <light|normal|aggressive> # Compact subprocess filter level
--verbose # Verbose output
--debug # Debug output
--use-system-path # Use system PATH
--cache-mode <mode> # Cache mode (normal, refresh, offline, no-cache)
0 - Success1 - General error2 - Tool not found3 - Installation failed4 - Version not found5 - Network error6 - Permission error7 - Configuration errorGitHub PRs, CI runs, and dashboards are supporting evidence, not the delivery surface. The conclusion has to land where the work is tracked.
Concretely: the delivery surface is the team's issue or task tracker — the issue comment plus its metadata. A PR comment alone delivers nothing.