Claude-skill-registry install-tool
Use when a tool, CLI, or package is needed but not installed, or when the user asks to install/add a tool. Prefers mise for all installations.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/install-tool" ~/.claude/skills/majiayu000-claude-skill-registry-install-tool && rm -rf "$T"
skills/data/install-tool/SKILL.mdInstall Tool
Arguments
$ARGUMENTS
Instructions
1. Identify the Tool
Parse the arguments for tool names and optional versions. If no version is specified, default to
@latest.
2. Check If Already Installed
mise which <tool> 2>/dev/null || command -v <tool> 2>/dev/null
If the tool is already available, report its location and version. Stop unless the user explicitly wants a different version.
3. Search the Mise Registry
mise search <tool> mise registry <tool>
— fuzzy-searches the registry for matching toolsmise search
— shows the full backend path (e.g.,mise registry <tool>
,core:node
)aqua:jqlang/jq
If no results, check alternate names or ask the user.
4. Choose Scope
CRITICAL: Global installs must happen in dotfiles
Before proceeding, determine if this is a global install:
- Arguments include
or--global-g - User explicitly asks for global install
- Tool is general-purpose (jq, ripgrep, etc.) and no local
existsmise.toml
If global install is requested:
- Check if we're in the chezmoi source directory:
chezmoi_source=$(chezmoi source-path 2>/dev/null) current_dir=$(pwd) # Check if current directory is within chezmoi source directory
-
If NOT in dotfiles (current dir not within
):chezmoi source-path- REFUSE the install
- Tell the user: "Global tool installs must be done from your dotfiles repository to ensure they're tracked and reproducible. Please run
first, then runchezmoi cd
again."/install-tool - Stop execution
-
If in dotfiles:
- Proceed with
mise use --global - This will update
(the chezmoi source file)home/dot_config/mise/config.toml - Remind user to apply changes:
chezmoi apply ~/.config/mise/config.toml
- Proceed with
Decision tree for project-local installs:
- Inside a project directory with
→ project-local (default)mise.toml - No
exists → create one withmise.tomlmise use <tool>@<version>
5. Preview the Install
Always dry-run first:
mise use --dry-run <tool>@<version>
Report what will be installed and where the config will be written.
6. Execute
# Project-local (default) mise use <tool>@<version> # Global (only from within dotfiles) mise use --global <tool>@<version> # Then apply via chezmoi: chezmoi apply ~/.config/mise/config.toml # Pinned exact version (project-local) mise use --pin <tool>@<version>
After global install, remind the user that the tool is now configured in their dotfiles and will be available everywhere after chezmoi apply.
7. Verify
mise which <tool> <tool> --version # or equivalent
Confirm the tool is available and report the installed version.
When Mise Cannot Provide the Tool
If
mise search and mise registry return no results:
- Stop and tell the user — do not fall back to brew/apt/npm/pipx
- Suggest alternatives:
- Check if it's available via a different name
- Use
backend:ubimise use ubi:owner/repo - Use
backend:aquamise use aqua:owner/repo - Use language-specific backend (see reference below)
- If mise truly cannot provide it, ask the user for approval before using any other installer
Mise Discovery Subcommands
| Command | Purpose |
|---|---|
| Fuzzy-search the tool registry |
| Show full backend path for a tool |
| List all tools for a specific backend |
| List available versions for a tool |
| Filter versions by prefix (e.g., ) |
| Show info: backend, installed/active versions, config source |
| List all installed and active tool versions |
| List all available backends |
Mise Backends Reference
| Backend | Prefix | Installs from | Example |
|---|---|---|---|
| core | | Built-in support (node, python, go, etc.) | |
| aqua | | aqua registry — GitHub releases | |
| asdf | | asdf plugin ecosystem | |
| cargo | | Rust crates (crates.io) | |
| go | | Go modules | |
| npm | | npm packages | |
| pipx | | Python packages (isolated envs) | |
| gem | | Ruby gems | |
| ubi | | GitHub releases (universal) | |
| vfox | | vfox plugin ecosystem | |
| conda | | Conda/mamba packages | |
| dotnet | | .NET tools | |
| spm | | Swift packages | |
| http | | Direct URL download | |
Backend Selection Guide
- Check
first — most tools have a default backendmise search - Core for major languages (node, python, ruby, go, java, etc.)
- Aqua for most CLI tools distributed as GitHub releases
- npm/pipx/cargo/go/gem for language-ecosystem packages
- ubi as a fallback for any GitHub release not in aqua
Examples
/install-tool jq → search, preview, install jq /install-tool node@22 → install Node.js 22.x /install-tool --global ripgrep → install ripgrep globally /install-tool terraform jq go → install multiple tools /install-tool cargo:stylua → install via cargo backend /install-tool ubi:BurntSushi/ripgrep → install via ubi backend