mise tasks can now add, change and remove tasks in a chosen config file without an editor, and mise watch --once waits for one change, runs the tasks and exits. Both suit scripts and coding agents. The release also adds opt-in env caching for configs with redacted values, and fixes concurrent installs, lockfiles in symlinked config dirs, slow reshims and signed macOS app bundles.
Added
-
mise tasks setandmise tasks rm, plus more options formise tasks add. #15213 (@jdx)add,setandrmtake the same--env,--globaland--pathflags asmise use, so you can pick the file they write to.addandsettake new task fields:--env-var,--tools,--usageand--confirm.setchanges only the fields you pass and keeps the rest of the file, comments included.--unset FIELDremoves a field. It fails if the task doesn't exist.rm(aliasremove) deletes a TOML task's table or a file task's script. It asks for confirmation unless you pass--yes, and it refuses tasks inferred frompackage.jsonor defined in included files.- All three commands accept
--jsonand--dry-run. If more than one loaded file defines a task,setandrmstop and list the files so you can choose one. - When
addorsettrusts the config root it writes to, it now says so on stderr.
mise tasks add --env local deploy --env-var STAGE=prod --tools node@24 \ --confirm "Deploy now?" -- ./deploy.sh mise tasks set build --description "Build for release" -- cargo build --release mise tasks rm --env local --yes scratch
-
mise watch --once. mise waits for a change in the watched sources, runs the tasks once withmise run, and exits with their status. It uses the same filters as a normal watch and runs nothing at start, so--postponeis implied. Flags that only control how watchexec reruns the command, such as--restartand--clear, are refused with--once. Ctrl-C exits with 130. SIGTERM while waiting exits without running anything. A signal during the run stops the whole task process tree.mise watchalso now passes--exit-on-errorto watchexec, which stops at the first failed run and exits with its status.--exit-on-errorrequires watchexec 2.5.0 or later. #15212 (@jdx)mise watch test --once && echo "tests pass after the change"
-
env_cache_redactedsetting. Withenv_cache = true, mise never caches an environment that contains aredact = truedirective, so a slow_.sourcescript ran again on every prompt. The new opt-inenv_cache_redactedsetting (MISE_ENV_CACHE_REDACTED=1, defaultfalse) lets these environments be cached. Values stay masked in output when they are read from the cache. The tradeoff: the secret values are stored on disk, encrypted with a key that every process started from the activated shell inherits.ageand sops values, plugin results withcacheable = false, redacted[vars], and redacteddefault/requireddirectives are still never cached. WithMISE_DEBUG=1, mise now logs when an environment wasn't cached and which directive prevented it. #15200 (@jdx, @Achder)[settings] env_cache = true env_cache_redacted = true
-
managed_byin bootstrap package status JSON. Installedbrew-caskpackages now reportmanaged_by("mise","homebrew"or"unknown") inmise bootstrap packages status --jsonandmise bootstrap status --json. Scripts can use it to tell which casks mise will upgrade and which it leaves to Homebrew. #15198 (@jdx, @drewbitt) -
Registry: added
jouet, which installs from its signed packslip #15201 (@jdx)
Changed
mise tasks addnow accepts--force. Re-adding an identical task does nothing. Replacing a task that has a different definition without--forcestill works for now. mise will warn about it starting in 2027.5.0 and refuse it starting in 2028.5.0. Scripts that only run on current mise versions can add--forcenow. #15213 (@jdx)
Fixed
- Running several
mise installprocesses at once could fail with errors like "Python graph installs require an installed interpreter", because one process saw a tool another process was still installing and treated it as complete. Installs and forced reinstalls now mark a version as incomplete before touching its directory. #15196 (@jdx, @theredspoon) - When
~/.config/miseis a symlink into a dotfiles checkout that has aconfig.override.toml, runningmise installinside the checkout no longer makesmise.lockalternate between full and empty. #15197 (@jdx, @ponko2) mise reshim, including the reshim at the end ofmise install, no longer slows down quadratically with the number of tracked configs. On machines with thousands of tracked projects it could take minutes. #15203 (@jdx, @Birzool)- On macOS, signed
.appbundles extracted from tarballs made with bsdtar are no longer killed on launch. mise now applies the._*AppleDouble files to the files they belong to and then deletes them, as macOStardoes. #15211 (@jdx, @jpeeler) - A
[bootstrap.repos]entry whoserefis an annotated tag now reportscurrentonce that tag is checked out. Before, it always reporteddiffers, and everyapplychecked the tag out again. #15199 (@jdx) - Dotfiles: replacing several tracked paths with the directory that contains them no longer leaves the directory stuck as "not applied here" with autosave stopped. #15187 (@jdx, @drewbitt)
- Dotfiles:
mise dot untrackwith several paths now checks all of them before changing anything. Before, if a later path wasn't tracked, the command failed but had already stopped tracking the earlier paths. #15208 (@jdx, @drewbitt)
Full Changelog: v2026.10.24...v2026.10.25
💚 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.