jdx/mise · error · eyre::Report

{bin_name} is a mise bin however it is not currently active.

Error message

{bin_name} is a mise bin however it is not currently active. Use `mise use` to activate it in this directory.

What it means

`mise which <bin>` found no active toolset entry, but a shim for that bin exists in the shims directory (has_shim). Meaning: some config on the machine uses this tool, but the toolset resolved from the current directory's config chain does not include it — the bin is 'known but not active here'. The fix suggested in the message is `mise use`.

Source

Thrown at src/cli/which.rs:66

            Some((p, tv)) => {
                if self.version {
                    miseprintln!("{}", tv.version);
                } else if self.plugin {
                    miseprintln!("{p}");
                } else {
                    let path = p.which(&config, &tv, &bin_name).await?;
                    miseprintln!("{}", path.unwrap().display());
                }
                Ok(())
            }
            None => {
                if let Some(msg) =
                    crate::shims::unavailable_configured_tool_message(&config, &ts, &bin_name)
                {
                    bail!(msg);
                }
                if self.has_shim(&bin_name) {
                    bail!(
                        "{bin_name} is a mise bin however it is not currently active. Use `mise use` to activate it in this directory."
                    )
                } else {
                    bail!("{bin_name} is not a mise bin. Perhaps you need to install it first.",)
                }
            }
        }
    }
    async fn complete(&self, config: &Arc<Config>) -> Result<()> {
        let ts = self.get_toolset(config).await?;
        let bins = ts
            .list_paths(config)
            .await
            .into_iter()
            .flat_map(|p| file::ls(&p).unwrap_or_default())
            .map(|p| p.file_name().unwrap().to_string_lossy().to_string())
            .unique()
            .sorted()

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Activate the tool where you need it: `mise use <tool>` (project) or `mise use -g <tool>` (global)
  2. If it should come from the global config, verify `mise ls -g` still lists it and the project isn't overriding
  3. Clean stale shims with `mise prune` if the tool is intentionally inactive everywhere

Example fix

# before
$ mise which rg
# error: rg is a mise bin however it is not currently active. Use `mise use` to activate it in this directory.

# after
$ mise use ripgrep
$ mise which rg
Defensive patterns

Strategy: validation

Validate before calling

bin="rg"
mise which "$bin" >/dev/null 2>&1 || mise use ripgrep   # activate where you need it
mise which "$bin"

Try / catch

mise which "$bin" || { mise use "$owner_tool" && mise which "$bin"; } || { echo "$bin not active in this dir — add its tool to mise.toml" >&2; exit 1; }

Prevention

When it happens

Trigger: `mise which node` in a project whose mise.toml doesn't list node, while another project (or the global config) does and created the shim; shim left over from a previous `mise use` in that directory; tool used via `mise x` elsewhere.

Common situations: cd-ing between projects where only some activate the tool; global config cleaned up but shims remain; expecting global tools to resolve inside a project with its own mise.toml that omits them.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/d17f75799fd6e27f. Report an issue: GitHub.