herdrdev/herdr · error
failed to inspect path
Error message
failed to inspect {REMOTE_BINARY_ENV_VAR} path {}: {err} What it means
This error is thrown when the code cannot stat the path pointed to by the HERDR_REMOTE_BINARY environment variable (REMOTE_BINARY_ENV_VAR). The fs::metadata call failed and the underlying OS error kind is preserved. It means the configured remote binary path is inaccessible, does not exist, or has permission problems.
Solutions
- Verify the path exists and is readable: ls -l "$HERDR_REMOTE_BINARY"
- Point HERDR_REMOTE_BINARY at an absolute path to the local herdr binary that actually exists
- Check directory traversal permissions on every component of the path
- Unset the variable to let herdr auto-detect or download the remote binary
Example fix
# before export HERDR_REMOTE_BINARY=/opt/herdr/bin/herdr # does not exist # after export HERDR_REMOTE_BINARY=/usr/local/bin/herdr # verify with: ls -l /usr/local/bin/herdr
Defensive patterns
Strategy: validation
Validate before calling
use std::path::Path;
fn remote_binary_ok(p: &str) -> bool {
let path = Path::new(p);
!p.is_empty()
&& std::fs::metadata(path)
.map(|m| m.is_file())
.unwrap_or(false)
} Try / catch
match run_attach() {
Err(e) if e.kind() == std::io::ErrorKind::NotFound => eprintln!("HERDR_REMOTE_BINARY path missing: check the path"),
r => r,
} Prevention
- Set HERDR_REMOTE_BINARY only to verified absolute file paths
- Add a startup check that stats the path before invoking remote attach
When it happens
Trigger: Setting HERDR_REMOTE_BINARY to a path that does not exist on the local machine, a path inside a directory without execute/search permission, a broken symlink, or a path on an unmounted filesystem, then invoking remote attach.
Common situations: Typo in the env var value, pointing at a path that only exists on the remote host rather than locally, stale path after the binary was moved or deleted, or a symlink whose target is missing.
Related errors
- path is not a file
- failed to create private herdr remote download directory
- failed to create private herdr ssh config directory
- failed to create unique scrollback temp file
- failed to managed plugin checkout at ; close any Herdr…
AI-assisted analysis of herdrdev/herdr@f457cff4f2 (2026-08-28).
Data as JSON: /api/errors/218e2e4716a0ebcd.
Report an issue: GitHub.
Appendix: source
Thrown at src/remote/attach.rs:905
fn remote_binary_exists(ssh: &RemoteSsh, remote_herdr: &RemoteHerdr) -> io::Result<bool> {
let command = format!("test -x {}", remote_herdr.shell_path);
Ok(ssh.sh_output(&command)?.status.success())
}
fn remote_binary_override_path() -> io::Result<Option<PathBuf>> {
let Some(value) = std::env::var_os(REMOTE_BINARY_ENV_VAR) else {
return Ok(None);
};
if value.is_empty() {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
format!("{REMOTE_BINARY_ENV_VAR} must not be empty"),
));
}
let path = PathBuf::from(value);
let metadata = fs::metadata(&path).map_err(|err| {
io::Error::new(
err.kind(),
format!(
"failed to inspect {REMOTE_BINARY_ENV_VAR} path {}: {err}",
path.display()
),
)
})?;
if !metadata.is_file() {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
format!(
"{REMOTE_BINARY_ENV_VAR} path is not a file: {}",
path.display()
),
));
}
Ok(Some(path))View on GitHub (pinned to f457cff4f2)