jdx/mise · error
the setup from is paused; nothing was bootstrapped. `mise…
Error message
the setup from {url} is paused; nothing was bootstrapped. `mise dot status` lists the paths that need attention. Existing files that differ are kept until you decide: `mise dot pull --take-remote-all` chooses the repository's version for every conflict, or `mise dot pull --take-remote <path>` and `mise dot pull --keep-local <path>` decide one at a time. A path held for another reason, such as a directory where the repository has a file, says so in `mise dot status` and needs that fix instead. Then run `mise bootstrap` What it means
After pulling the configured setup from the remote, at least one path was held for a decision (setup_held). Because bootstrapping from a partially-held configuration would run the wrong tasks/installations, mise aborts with guidance to resolve conflicts via `mise dot status` / `mise dot pull` flags.
Solutions
- Run `mise dot status` to list held paths and their reasons.
- Resolve file conflicts: `mise dot pull --take-remote-all`, or per-path `--take-remote <path>` / `--keep-local <path>`.
- Fix structural holds (e.g. remove the local directory where the repo has a file), then re-run `mise bootstrap`.
Example fix
// before mise bootstrap --from https://github.com/me/dotfiles # paused: conflicts // after mise dot status mise dot pull --take-remote-all mise bootstrap --from https://github.com/me/dotfiles
Defensive patterns
Strategy: validation
Validate before calling
mise dot status | grep -i held && echo "resolve holds before bootstrap"
Try / catch
mise bootstrap --from "$URL" || { mise dot status; mise dot pull --take-remote-all; mise bootstrap --from "$URL"; } Prevention
- Run `mise dot status` after pulling config changes.
- Decide conflicts promptly with --take-remote/--keep-local flags.
- Keep local dotfiles in sync to reduce conflicts.
When it happens
Trigger: Running `mise bootstrap --from <url>` where the dotfile sync outcome flagged setup_held — local files differ from the repo and no take-remote/keep-local decision has been recorded.
Common situations: First bootstrap onto a machine with existing dotfiles that conflict; a directory exists where the repo has a file, or vice versa.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- changed after the operation; left untouched
- changed while preparing enrollment; concurrent declaration…
- choose only one resolution for
- conflicting bootstrap secret declarations for
- conflicting bootstrap service declarations for
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/6f68521d4971526d.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/bootstrap.rs:1879
url,
self.yes,
self.dry_run,
self.replace_history,
)
.await?
{
if self.dry_run {
if let Some(preview) = outcome.preview_config.as_ref() {
self.run_child_bootstrap(preview.path().to_path_buf())
.await?;
}
return Ok(());
}
// the configuration that arrived is what to bootstrap from; one
// held for a decision leaves the existing one, whose tasks and
// installations are not what was asked for
if outcome.setup_held {
bail!(
"the setup from {url} is paused; nothing was bootstrapped. `mise dot status` lists the paths that need attention. Existing files that differ are kept until you decide: `mise dot pull --take-remote-all` chooses the repository's version for every conflict, or `mise dot pull --take-remote <path>` and `mise dot pull --keep-local <path>` decide one at a time. A path held for another reason, such as a directory where the repository has a file, says so in `mise dot status` and needs that fix instead. Then run `mise bootstrap`"
);
}
let config_dir = system::history::tracked::global_config_dir();
self.run_child_bootstrap(config_dir).await?;
if !outcome.durable_access {
warn!("ongoing synchronization still needs credentials on this host (see above)");
}
return Ok(());
}
let (url, checkout) = if let Some(url) = expanded.as_deref() {
let checkout = crate::env::MISE_GLOBAL_CONFIG_FILE
.as_deref()
.map(|path| {
path.parent()
.filter(|parent| !parent.as_os_str().is_empty())
.unwrap_or_else(|| Path::new("."))
})View on GitHub (pinned to 533346cc37)