asdf — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited asdf (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
asdf is a universal CLI version manager — one tool to replace nvm, pyenv, rbenv, tfenv, goenv and more. It manages per-project versions via .tool-versions files and switches versions automatically as you navigate directories.
Use this skill when the user is:
command not found errors.tool-versions for reproducible environments$HOME~/.asdf/shims/ that intercept tool invocations and dispatch to the right version.tool-versions in cwd) → parent dirs → $HOME/.tool-versions → env var ASDF_${TOOL}_VERSION# Debian/Ubuntu
sudo apt install -y git curl
# macOS
brew install git curl# Download latest release from https://github.com/asdf-vm/asdf/releases
# Or via git clone (classic method):
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.16.7Fish shell (Jean-Jacques' setup):
# Add to ~/.config/fish/config.fish
source ~/.asdf/asdf.fish
# Install completions
mkdir -p ~/.config/fish/completions
ln -s ~/.asdf/completions/asdf.fish ~/.config/fish/completions/asdf.fishBash:
# Add to ~/.bashrc or ~/.bash_profile
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"Zsh:
# Add to ~/.zshrc
. "$HOME/.asdf/asdf.sh"After configuration, restart shell or source the config file.
asdf plugin list all # Browse all available plugins
asdf plugin list all | grep terra # Search for specific plugins
asdf plugin add nodejs # Add plugin by shortname (from registry)
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git # Add by URL
asdf plugin list # List installed plugins
asdf plugin update nodejs # Update a plugin
asdf plugin update --all # Update all plugins
asdf plugin remove nodejs # Remove plugin + all its installsasdf list all nodejs # List all installable versions
asdf list all nodejs 20 # List versions matching prefix
asdf install nodejs latest # Install latest version
asdf install nodejs 20.11.0 # Install specific version
asdf install # Install all versions in .tool-versions
asdf list nodejs # List installed versions
asdf uninstall nodejs 18.0.0 # Remove a versionasdf set nodejs 20.11.0 # Set version in ./.tool-versions (project)
asdf set -u nodejs 20.11.0 # Set version in ~/.tool-versions (global/user default)
asdf set -p nodejs 20.11.0 # Set in nearest parent .tool-versions
asdf set nodejs latest # Resolve and write latest version
asdf current # Show active version for all tools in cwd
asdf current nodejs # Show active version for one tool
asdf where nodejs # Show install path for active version
asdf which node # Show shim path for a commandNote:asdf setreplaced the olderasdf local/asdf globalcommands in asdf v0.15+. Both still work butasdf setis the modern API.
# Temporarily override without editing .tool-versions
ASDF_NODEJS_VERSION=18.0.0 node --versionnodejs 20.11.0
python 3.12.2
terraform 1.7.4
kubectl 1.29.2
golang 1.22.1<name> <version>python 3.12.2 2.7.18system (use OS-installed version), path:~/my/custom/buildLocated at ~/.asdfrc:
# Support .nvmrc, .ruby-version, etc. (per-plugin support required)
legacy_version_file = yes
# Keep downloaded archives (useful for slow connections)
always_keep_download = no
# Concurrency for parallel installs
concurrency = auto
# Plugin repository refresh interval in minutes
plugin_repository_last_check_duration = 60| Tool | Plugin add command |
|---|---|
| Node.js | asdf plugin add nodejs |
| Python | asdf plugin add python |
| Go | asdf plugin add golang |
| Terraform | asdf plugin add terraform |
| kubectl | asdf plugin add kubectl |
| Helm | asdf plugin add helm |
| gcloud CLI | asdf plugin add gcloud |
| Skaffold | asdf plugin add skaffold |
| Java | asdf plugin add java |
| Ruby | asdf plugin add ruby |
| Erlang | asdf plugin add erlang |
| Elixir | asdf plugin add elixir |
Many plugins may require system dependencies — always check the plugin's README before installing.
Enable legacy file support in ~/.asdfrc:
legacy_version_file = yes| Old file | Tool |
|---|---|
.nvmrc | nodejs (via asdf-nodejs) |
.node-version | nodejs |
.ruby-version | ruby (via asdf-ruby) |
.python-version | python (via asdf-python) |
asdf reshim nodejs # Regenerate shims for a plugin
asdf reshim # Regenerate all shims
echo $PATH # Verify ~/.asdf/shims is early in PATH
type -a node # Fish: check which binary is resolvedasdf current # See what version is resolved and from where
# Look for "No version set" warnings
# Check .tool-versions exists in project dir or a parentgnupg for keyring verificationDefault: ~/.asdf/ — override with export ASDF_DATA_DIR=/custom/path in shell config.
# 1. Clone project
git clone <repo> && cd <repo>
# 2. Add plugins for each tool in .tool-versions (if not already added)
asdf plugin add nodejs
asdf plugin add python
# 3. Install all versions specified in .tool-versions
asdf install
# 4. Verify
asdf currentasdf --help or asdf <command> --help~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.