jdx/mise · error
no remote targets configured; pass --host [user@]host or…
Error message
no remote targets configured; pass --host [user@]host or add [bootstrap.remote.hosts]
What it means
Remote bootstrap needs at least one target. If the selection map is empty and the configured inventory from [bootstrap.remote.hosts] is empty, there is nothing to bootstrap — mise explains how to supply hosts.
Solutions
- Add hosts to config: [bootstrap.remote.hosts] in mise.toml
- Or pass --host [user@]host on the command line
- Verify you're in the right project/config scope (config excludes may hide hosts)
Example fix
# before: no config # after (mise.toml) [bootstrap.remote.hosts] web1 = "deploy@web1.example.com"
Defensive patterns
Strategy: validation
Validate before calling
if (!hasHostsConfig && !flags.host && !flags.tag && !flags.all) { throw new Error('no remote targets selected') } Prevention
- Define [bootstrap.remote.hosts] in mise.toml before automating bootstrap
- Default to --all in CI pipelines
- Run `mise bootstrap remote --help` to confirm selection flags
When it happens
Trigger: Running `mise bootstrap remote` with no --host, no --tag, no --all, and no hosts defined under [bootstrap.remote.hosts] in config.
Common situations: Fresh setup where bootstrap.remote.hosts was never added to mise.toml; running on a machine whose config excludes define no hosts.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- remote bootstrap configuration is invalid for
- remote target ' ' was selected more than once
- select a remote target by name, --tag, or --all
- a repository preview directory requires a dry run
- [bootstrap].config_roots did not match any config roots
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/34c0a7f4727fcd8c.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/bootstrap.rs:3052
}
if self.connect_timeout == 0 {
bail!("--connect-timeout must be greater than zero");
}
let config = Config::get().await?;
let config_excludes = system::remote::excludes_from_config(&config);
let inventory = system::remote::hosts_from_config(&config, &config_excludes)?;
let mut selected = select_remote_inventory(&inventory, &self.targets, self.all, &self.tag)?;
let ad_hoc_source = self.source.clone().unwrap_or(std::env::current_dir()?);
for destination in &self.host {
let host =
system::remote::ad_hoc_host(destination, ad_hoc_source.clone(), &config_excludes)?;
if selected.insert(host.name.clone(), host).is_some() {
bail!("remote target '{destination}' was selected more than once");
}
}
if selected.is_empty() {
if inventory.is_empty() {
bail!(
"no remote targets configured; pass --host [user@]host or add [bootstrap.remote.hosts]"
);
}
bail!(
"select a remote target by name, --tag, or --all (configured: {})",
inventory.keys().cloned().collect::<Vec<_>>().join(", ")
);
}
let overrides = system::remote::RemoteOverrides {
from_git: self.adopt.is_some(),
source: self.source,
mise_env: self.remote_env,
copy_links: self.copy_links,
copy_link: self.copy_link,
port: self.port,
identity_file: self.identity_file,
exclude: self.exclude,View on GitHub (pinned to 533346cc37)