{"record":{"id":"14b94d1b087449f3","repo":"jdx/mise","slug":"remote-host-cannot-combine-install-mise-with","errorCode":null,"errorMessage":"remote host '{}' cannot combine install_mise with remote_mise or bootstrap_command, which already provide mise on the host","messagePattern":"remote host '(.+?)' cannot combine install_mise with remote_mise or bootstrap_command, which already provide mise on the host","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/remote.rs","lineNumber":376,"sourceCode":"            );\n        }\n        let provisioning_strategies = [\n            self.mise_bin.is_some(),\n            self.remote_mise.is_some(),\n            self.bootstrap_command.is_some(),\n        ]\n        .into_iter()\n        .filter(|configured| *configured)\n        .count();\n        if provisioning_strategies > 1 {\n            bail!(\n                \"remote host '{}' must set at most one of mise_bin, remote_mise, or bootstrap_command\",\n                self.name\n            );\n        }\n        if let Some(install_mise) = &self.install_mise {\n            if self.remote_mise.is_some() || self.bootstrap_command.is_some() {\n                bail!(\n                    \"remote host '{}' cannot combine install_mise with remote_mise or bootstrap_command, which already provide mise on the host\",\n                    self.name\n                );\n            }\n            validate_install_mise_path(install_mise).wrap_err_with(|| {\n                format!(\"remote host '{}' has an invalid install_mise\", self.name)\n            })?;\n        }\n        for option in &self.ssh_options {\n            validate_value(\"SSH option\", option)?;\n        }\n        for exclude in &self.exclude {\n            validate_value(\"archive exclude\", exclude)?;\n        }\n        for env in &self.mise_env {\n            validate_value(\"mise environment\", env)?;\n            if env.contains(',') {\n                bail!(\"remote mise environment cannot contain a comma: {env}\");","sourceCodeStart":358,"sourceCodeEnd":394,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/remote.rs#L358-L394","documentation":"Thrown by `RemoteHostConfig::validate_with_source` when a host entry sets `install_mise` together with `remote_mise` or `bootstrap_command`. Both `remote_mise` and `bootstrap_command` already make mise available on the host, so combining them with `install_mise` is contradictory and rejected.","triggerScenarios":"Configuring `install_mise = true` (or a path) on a host that also sets `remote_mise` or `bootstrap_command`, then running a remote operation that validates the host config.","commonSituations":"Copying `install_mise` from one host entry into another that already bootstraps mise; enabling install_mise globally while some hosts define bootstrap_command.","solutions":["Remove `install_mise` from hosts that define `remote_mise` or `bootstrap_command`","Or remove `remote_mise`/`bootstrap_command` and keep only `install_mise` for hosts that need mise installed"],"exampleFix":"// before\ninstall_mise = true\nbootstrap_command = \"curl https://mise.run | sh\"\n// after\nbootstrap_command = \"curl https://mise.run | sh\"","handlingStrategy":"validation","validationCode":"if host.install_mise.is_some() && (host.remote_mise.is_some() || host.bootstrap_command.is_some()) {\n    panic!(\"install_mise cannot be combined with remote_mise or bootstrap_command\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat install_mise as exclusive with remote_mise/bootstrap_command","Document which hosts bootstrap mise vs expect it pre-installed","Audit host entries after global config changes"],"tags":["remote","config-validation","mutually-exclusive","provisioning"],"backgroundTag":"mutually-exclusive-options","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}