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
- Activate the tool where you need it: `mise use <tool>` (project) or `mise use -g <tool>` (global)
- If it should come from the global config, verify `mise ls -g` still lists it and the project isn't overriding
- 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
- Declare every tool your project scripts call in the project's own mise.toml, not a sibling's
- Use `mise use -g` for tools you expect everywhere; verify with `mise ls -g`
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
- No executable found for configured tool: {bin_name}
- Tool '{}' not found
- {bin_name} is not a mise bin. Perhaps you need to install it
- config file not found: {}
- No mise.toml file found
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/d17f75799fd6e27f.
Report an issue: GitHub.