{"record":{"id":"8489f07314ae9987","repo":"nikivdev/code","slug":"ssh-agent-failed","errorCode":null,"errorMessage":"ssh-agent failed: {}","messagePattern":"ssh-agent failed: (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/ssh.rs","lineNumber":216,"sourceCode":"    if sock.exists() {\n        if probe_agent(&sock) {\n            return Ok(sock);\n        }\n        let _ = fs::remove_file(&sock);\n    }\n    let state_path = flow_agent_state_path();\n    if let Some(parent) = state_path.parent() {\n        fs::create_dir_all(parent)?;\n    }\n\n    let output = Command::new(\"ssh-agent\")\n        .args([\"-a\", sock.to_string_lossy().as_ref(), \"-s\"])\n        .output()\n        .context(\"failed to start ssh-agent\")?;\n\n    if !output.status.success() {\n        let stderr = String::from_utf8_lossy(&output.stderr);\n        bail!(\"ssh-agent failed: {}\", stderr.trim());\n    }\n\n    let stdout = String::from_utf8_lossy(&output.stdout);\n    let pid = parse_agent_output(&stdout, \"SSH_AGENT_PID\")\n        .and_then(|val| val.parse::<u32>().ok())\n        .context(\"failed to parse ssh-agent pid\")?;\n    let sock_path = parse_agent_output(&stdout, \"SSH_AUTH_SOCK\")\n        .map(PathBuf::from)\n        .unwrap_or_else(|| sock.clone());\n\n    let state = FlowAgentState {\n        pid,\n        sock: sock_path.clone(),\n    };\n    let content = serde_json::to_string_pretty(&state)?;\n    fs::write(&state_path, content)?;\n\n    Ok(sock_path)","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/nikivdev/code/blob/a747e741ae92c09071d0ae946ab48488adcff1ce/src/ssh.rs#L198-L234","documentation":"ensure_flow_agent spawns `ssh-agent -a <sock> -s` and checks its exit status; if the process exits nonzero the captured stderr is wrapped in this message and returned. It means the local ssh-agent could not be started, so no agent socket is available for SSH operations.","triggerScenarios":"ssh-agent binary missing or failing to bind the requested socket path; socket path too long (>108 chars on Unix domain sockets); stale socket file already exists at the path; permission denied on the socket directory.","commonSituations":"Long TMPDIR paths exceeding Unix socket path limits; leftover socket from a crashed previous run; read-only or noexec temp directory; minimal container images without openssh-client installed.","solutions":["Remove any stale socket file at the target path and retry","Shorten the socket path (shorter temp dir) if it exceeds ~104-108 characters","Ensure openssh-client (ssh-agent) is installed and on PATH","Check permissions on the directory holding the socket"],"exampleFix":"// before: stale socket causes agent bind failure\n.output()\n.context(\"failed to start ssh-agent\")?;\n// after: clear stale socket first\nif sock.exists() { let _ = std::fs::remove_file(&sock); }\nlet output = Command::new(\"ssh-agent\")\n    .args([\"-a\", sock.to_string_lossy().as_ref(), \"-s\"])\n    .output()\n    .context(\"failed to start ssh-agent\")?;","handlingStrategy":"fallback","validationCode":"let sock = agent_socket_path();\nif sock.as_os_str().len() >= 108 {\n    bail!(\"socket path too long for unix sockets: {}\", sock.display());\n}\nif sock.exists() {\n    let _ = std::fs::remove_file(&sock); // clear stale socket\n}\nif which::which(\"ssh-agent\").is_err() {\n    bail!(\"ssh-agent not installed; install openssh-client\");\n}","typeGuard":null,"tryCatchPattern":"match ensure_flow_agent() {\n    Ok(agent) => use_agent(agent),\n    Err(e) if e.to_string().contains(\"ssh-agent failed\") => {\n        eprintln!(\"agent start failed: {e:#}; falling back to existing SSH_AUTH_SOCK\");\n        std::env::var(\"SSH_AUTH_SOCK\").map(Agent::Existing)?\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Keep socket paths under ~104 characters","Remove stale sockets from crashed runs before starting a new agent","Install openssh-client in containers/minimal images","Fall back to a pre-existing SSH_AUTH_SOCK when spawning fails"],"tags":["ssh","ssh-agent","process","environment"],"backgroundTag":"ssh-agent-start-failed","analyzedSha":"a747e741ae92c09071d0ae946ab48488adcff1ce","analyzedAt":"2026-09-01T22:43:55.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}