github jdx/mise v2026.11.7
v2026.11.7: Shorter shim errors, task run history in JSON, and dotfiles safety fixes

one hour ago

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 --verbose to 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_installed setting (MISE_SHIMS_FALLBACK_TO_INSTALLED, default false) 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 .exe shims keep the error.

    mise settings shims.fallback_to_installed=true
  • Task run history in JSON output. mise tasks info <task> --json and each entry of mise tasks ls --json now include a history field. It has the same summary as mise tasks history --summary --json: number of runs and failures, median duration, and the last run's duration, status and start time. The field is null for 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 = false in metadata.lua. mise install --locked then installs them without a lockfile URL, and mise lock records only the version. If such a plugin's PreInstall returns a url anyway, 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=1 or AI_AGENT), it no longer prints the new-version notice, the mise self-update instructions, or hint messages. mise version --json and the warnings in mise doctor still report a newer version. Set AI_AGENT=0 to see the notices again. #15523 (@jdx)

Fixed

Config and upgrades

  • mise upgrade --bump and mise use no longer write a registry entry's default options into mise.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 = true no longer becomes uvx = "true". #15517 (@jdx)
  • If a packageManager field 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 doctor now warns when a package.json that 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 install or mise lock now 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 install no 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 the global link in a read-only shared install directory as it is. #15526 (@jdx, @marcodb-servescale)
  • mise lock now sends the forge token when it downloads a release asset to compute its checksum. This fixes 401 Unauthorized errors for private or self-managed GitLab, GitHub, GitHub Enterprise and Forgejo releases that publish no digest. #15556 (@jdx)
  • With mise x -- <cmd>, directories from env._.path now come before tool bin directories even when the caller's PATH already contains them. A project's pinned npm is no longer skipped in favor of Node's bundled one. #15564 (@jdx)
  • On Windows, mise x and 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.toml when you run it from a sibling project in a monorepo, for example with mise run //foo:foo_task from bar/. #15568 (@jdx)
  • mise run <task> -h now asks the task's usage spec whether -h means help. Tasks that set disable_help, declare their own -h flag, or accept -h as 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 _.file paths in their env against the project root, not the subdirectory. #15557 (@jdx)
  • mise run --quiet and --silent now 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 list with English messages, so mise bootstrap no 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_PREFIX in 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 as brew: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 apply now refuses to overwrite copy targets that were edited locally and aren't saved in history. Before, it replaced them without asking, and mise dot undo couldn't restore them. The error points to mise dot diff and --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 next save. #15575 (@jdx)
  • A leading ~ in skills.dir or MISE_SKILLS_DIR now 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 Code SessionStart hook that runs mise hook-env and 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.

Don't miss a new mise release

NewReleases is sending notifications on new releases.