{"record":{"id":"34c0a7f4727fcd8c","repo":"jdx/mise","slug":"no-remote-targets-configured-pass-host-user-h","errorCode":null,"errorMessage":"no remote targets configured; pass --host [user@]host or add [bootstrap.remote.hosts]","messagePattern":"no remote targets configured; pass --host \\[user@\\]host or add \\[bootstrap\\.remote\\.hosts\\]","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/bootstrap.rs","lineNumber":3052,"sourceCode":"        }\n        if self.connect_timeout == 0 {\n            bail!(\"--connect-timeout must be greater than zero\");\n        }\n        let config = Config::get().await?;\n        let config_excludes = system::remote::excludes_from_config(&config);\n        let inventory = system::remote::hosts_from_config(&config, &config_excludes)?;\n        let mut selected = select_remote_inventory(&inventory, &self.targets, self.all, &self.tag)?;\n        let ad_hoc_source = self.source.clone().unwrap_or(std::env::current_dir()?);\n        for destination in &self.host {\n            let host =\n                system::remote::ad_hoc_host(destination, ad_hoc_source.clone(), &config_excludes)?;\n            if selected.insert(host.name.clone(), host).is_some() {\n                bail!(\"remote target '{destination}' was selected more than once\");\n            }\n        }\n        if selected.is_empty() {\n            if inventory.is_empty() {\n                bail!(\n                    \"no remote targets configured; pass --host [user@]host or add [bootstrap.remote.hosts]\"\n                );\n            }\n            bail!(\n                \"select a remote target by name, --tag, or --all (configured: {})\",\n                inventory.keys().cloned().collect::<Vec<_>>().join(\", \")\n            );\n        }\n\n        let overrides = system::remote::RemoteOverrides {\n            from_git: self.adopt.is_some(),\n            source: self.source,\n            mise_env: self.remote_env,\n            copy_links: self.copy_links,\n            copy_link: self.copy_link,\n            port: self.port,\n            identity_file: self.identity_file,\n            exclude: self.exclude,","sourceCodeStart":3034,"sourceCodeEnd":3070,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/bootstrap.rs#L3034-L3070","documentation":"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.","triggerScenarios":"Running `mise bootstrap remote` with no --host, no --tag, no --all, and no hosts defined under [bootstrap.remote.hosts] in config.","commonSituations":"Fresh setup where bootstrap.remote.hosts was never added to mise.toml; running on a machine whose config excludes define no 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)"],"exampleFix":"# before: no config\n# after (mise.toml)\n[bootstrap.remote.hosts]\nweb1 = \"deploy@web1.example.com\"","handlingStrategy":"validation","validationCode":"if (!hasHostsConfig && !flags.host && !flags.tag && !flags.all) { throw new Error('no remote targets selected') }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["cli","bootstrap","config","ssh"],"backgroundTag":"missing-required-config-field","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}