jdx/mise · error

remote host ' ' cannot combine install_mise with…

Error message

remote host '{}' cannot combine install_mise with remote_mise or bootstrap_command, which already provide mise on the host

What it means

install_mise asks the tool to install mise on the remote host itself, but remote_mise and bootstrap_command already place mise on the host by other means. Combining them is redundant and ambiguous, so validate_with_source rejects the combination with a host-specific message.

Solutions

  1. Remove install_mise if the host already gets mise via remote_mise or bootstrap_command.
  2. Remove remote_mise/bootstrap_command and keep only install_mise to have mise installed automatically.
  3. Use install_mise's path/version options instead of a hand-rolled bootstrap_command.

Example fix

// before
[[remote_host]]
name = "builder"
install_mise = true
bootstrap_command = "curl https://mise.run | sh"
// after
[[remote_host]]
name = "builder"
install_mise = true
Defensive patterns

Strategy: validation

Validate before calling

function assertInstallMiseExclusive(host) {
  if (host.install_mise != null && (host.remote_mise != null || host.bootstrap_command != null)) {
    throw new Error(`remote host '${host.name}': drop install_mise or the bootstrap/remote_mise path`);
  }
}

Prevention

When it happens

Trigger: A remote host entry sets `install_mise` together with either `remote_mise` or `bootstrap_command`; validate() or apply_overrides() bail from this check.

Common situations: Config evolved from a bootstrap_command setup and someone added install_mise to 'upgrade' the install path; merging two host templates that each solved provisioning differently.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/14b94d1b087449f3. Report an issue: GitHub.

Appendix: source

Thrown at src/system/remote.rs:376

            );
        }
        let provisioning_strategies = [
            self.mise_bin.is_some(),
            self.remote_mise.is_some(),
            self.bootstrap_command.is_some(),
        ]
        .into_iter()
        .filter(|configured| *configured)
        .count();
        if provisioning_strategies > 1 {
            bail!(
                "remote host '{}' must set at most one of mise_bin, remote_mise, or bootstrap_command",
                self.name
            );
        }
        if let Some(install_mise) = &self.install_mise {
            if self.remote_mise.is_some() || self.bootstrap_command.is_some() {
                bail!(
                    "remote host '{}' cannot combine install_mise with remote_mise or bootstrap_command, which already provide mise on the host",
                    self.name
                );
            }
            validate_install_mise_path(install_mise).wrap_err_with(|| {
                format!("remote host '{}' has an invalid install_mise", self.name)
            })?;
        }
        for option in &self.ssh_options {
            validate_value("SSH option", option)?;
        }
        for exclude in &self.exclude {
            validate_value("archive exclude", exclude)?;
        }
        for env in &self.mise_env {
            validate_value("mise environment", env)?;
            if env.contains(',') {
                bail!("remote mise environment cannot contain a comma: {env}");

View on GitHub (pinned to 533346cc37)