When no config selects a shim's tool, the shim now fails with a one-line error, and a new opt-in setting can run the latest installed version instead. mise tasks info --json and mise tasks ls --json now include each task's run history, and vfox plugins that download nothing can install in locked mode. This release also fixes problems in bootstrap packages, dotfiles, tasks, mise exec and config rewrites.
Added
-
Shorter shim errors and
shims.fallback_to_installed. When no config selects a shim's tool, the error is now one line that names the latest installed version and two ways to use it. Add--verboseto list every installed version. #15525 (@jdx)mise ERROR No version is set for shim: rg. Run `mise use -g ripgrep@14.1.1` to set a default, or `mise x ripgrep@14.1.1 -- rg` to run it once.The new
shims.fallback_to_installedsetting (MISE_SHIMS_FALLBACK_TO_INSTALLED, defaultfalse) makes the shim run that latest installed version instead of failing. It only applies to tools that no config mentions. If a configured version is missing, the shim still fails instead of running a different version. Windows.exeshims keep the error.mise settings shims.fallback_to_installed=true
-
Task run history in JSON output.
mise tasks info <task> --jsonand each entry ofmise tasks ls --jsonnow include ahistoryfield. It has the same summary asmise tasks history --summary --json: number of runs and failures, median duration, and the last run's duration, status and start time. The field isnullfor a task with no recorded runs. Text output hasn't changed. #15522 (@jdx) -
Locked installs for vfox plugins that download nothing. Some tool plugins download nothing, such as mise-xcode, which selects an Xcode already on the system. These plugins can now set
downloads = falseinmetadata.lua.mise install --lockedthen installs them without a lockfile URL, andmise lockrecords only the version. If such a plugin'sPreInstallreturns aurlanyway, the install fails with an error. #15586 (@jdx, @michalpopek)PLUGIN = { name = "xcode", version = "0.1.0", downloads = false, }
Changed
- Less noise for coding agents. When mise detects a coding agent (for example
CLAUDECODE=1orAI_AGENT), it no longer prints the new-version notice, themise self-updateinstructions, orhintmessages.mise version --jsonand the warnings inmise doctorstill report a newer version. SetAI_AGENT=0to see the notices again. #15523 (@jdx)
Fixed
Config and upgrades
mise upgrade --bumpandmise useno longer write a registry entry's default options intomise.toml. For example,jactionlint = "2.4.0"no longer turns into{ version = "2.5.0", workflow = "release.yaml" }. Options already written in the file are kept. #15519 (@jdx, @jylenhof)- When mise rewrites a tool entry, boolean and numeric options stay unquoted, so
uvx = trueno longer becomesuvx = "true". #15517 (@jdx) - If a
packageManagerfield pins pnpm with a checksum, mise now runs pnpm's install script. pnpm 12 can then use its native binary instead of warning that it is running through Node.js. The checksum is still verified. #15563 (@jdx) mise doctornow warns when apackage.jsonthat mise reads as a version file can't be parsed, for example because of a trailing comma. Before, mise ignored the versions in that file without saying why. #15567 (@jdx, @crntnvdl)
Install, lock and exec
- A plain
mise installormise locknow installs missing[plugins]entries first. Idiomatic version files declared by those plugins, such as.xcode-version, are then read on the first run. Before, mise reported "all tools are installed" and a second run was needed. #15585 (@jdx, @michalpopek) - A non-root
mise installno longer fails with "failed to rebuild runtime symlinks" when the user's global config picks a different version than the administrator's system config. mise now leaves thegloballink in a read-only shared install directory as it is. #15526 (@jdx, @marcodb-servescale) mise locknow sends the forge token when it downloads a release asset to compute its checksum. This fixes401 Unauthorizederrors for private or self-managed GitLab, GitHub, GitHub Enterprise and Forgejo releases that publish no digest. #15556 (@jdx)- With
mise x -- <cmd>, directories fromenv._.pathnow come before tool bin directories even when the caller's PATH already contains them. A project's pinnednpmis no longer skipped in favor of Node's bundled one. #15564 (@jdx) - On Windows,
mise xand shims no longer keep the caller's stdout pipe open while a detached child process runs. Before, PowerShell captures waited until that process exited, which affected tools like the Nx daemon. #15583 (@jdx)
Tasks and daemons
- A task can now use a task template defined in its own project's
mise.tomlwhen you run it from a sibling project in a monorepo, for example withmise run //foo:foo_taskfrombar/. #15568 (@jdx) mise run <task> -hnow asks the task's usage spec whether-hmeans help. Tasks that setdisable_help, declare their own-hflag, or accept-has a flag value now receive it as an argument. Other tasks still show help. #15573 (@jdx)- File tasks in a subdirectory of the task directory, such as
mise-tasks/sub/nested, now resolve{{config_root}}and relative_.filepaths in theirenvagainst the project root, not the subdirectory. #15557 (@jdx) mise run --quietand--silentnow hide the startup log lines of daemons that a task starts. #15588 (@jdx, @artemklevtsov)- If a named daemon port (
ports.<name>) collides with a daemon in another checkout, the error now names that daemon and checkout. Before, it named whichever process held the port. mise also warns when a worktree's slot moves one automatic port onto a port the primary checkout uses for another. #15561 (@jdx, @ponko2)
Bootstrap packages
- mise now runs
snap listwith English messages, somise bootstrapno longer tries to reinstall snaps that are already installed when the system language isn't English. #15518 (@jdx, @nahoj) - Casks that generate completions through a wrapper command, such as
ngrok, now install. mise expands$HOMEBREW_PREFIXin the wrapper's arguments. #15562 (@jdx) - Casks whose installer creates its own Caskroom directory, such as
miniconda, no longer fail with "multiple Caskroom versions". mise now counts only directories that Homebrew has a metadata record for. Before, this error stopped bootstrap for every package. #15560 (@jdx) - Third-party tap formulae that use
require_relative, such asbrew:gromgit/fuse/sshfs-mac, can now be evaluated and built from source. mise loads them from a checkout of the tap at its pinned commit. Only GitHub taps are supported. #15572 (@jdx)
Dotfiles and skills
- Without a terminal and without
--yes,mise dot applynow refuses to overwritecopytargets that were edited locally and aren't saved in history. Before, it replaced them without asking, andmise dot undocouldn't restore them. The error points tomise dot diffand--yes. #15565 (@jdx, @nahoj) - When you apply a directory copy, files that already match their source are no longer rewritten. Their modification times stay the same, and only the
[history.reload]commands for files that changed run. #15558 (@jdx) - Dotfiles history no longer gets stuck after a very large
mise dot apply. A long commit message used to exceed the OS argument limit. Machines that are already stuck finish the pending operation on their nextsave. #15575 (@jdx) - A leading
~inskills.dirorMISE_SKILLS_DIRnow expands to the home directory. Before, mise created a directory literally named~. #15559 (@jdx)
Documentation
- A new "Coding agents" docs page explains how to put a project's tools and
[env]on an agent's PATH. It includes a one-line Claude CodeSessionStarthook that runsmise hook-envand notes on Codex and git worktrees. #15521 (@jdx)
Full Changelog: v2026.11.6...v2026.11.7
💚 Sponsor mise
mise is built and maintained by @jdx, an open source developer at entire.io, the title sponsor of his open source work.
If mise saves you or your team time, please consider becoming an individual or company sponsor. Your support funds ongoing development and helps keep mise fast, free, and independent.