{"record":{"id":"503129da97be8666","repo":"zed-industries/zed","slug":"no-remote-client","errorCode":null,"errorMessage":"no remote client","messagePattern":"no remote client","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/repl/src/kernels/ssh_kernel.rs","lineNumber":114,"sourceCode":"            let remote_stdin_port = connection_info[\"stdin_port\"]\n                .as_u64()\n                .context(\"missing stdin_port\")? as u16;\n            let remote_control_port = connection_info[\"control_port\"]\n                .as_u64()\n                .context(\"missing control_port\")? as u16;\n            let remote_hb_port = connection_info[\"hb_port\"]\n                .as_u64()\n                .context(\"missing hb_port\")? as u16;\n\n            let forwards = vec![\n                (local_ports[0], \"127.0.0.1\".to_string(), remote_shell_port),\n                (local_ports[1], \"127.0.0.1\".to_string(), remote_iopub_port),\n                (local_ports[2], \"127.0.0.1\".to_string(), remote_stdin_port),\n                (local_ports[3], \"127.0.0.1\".to_string(), remote_control_port),\n                (local_ports[4], \"127.0.0.1\".to_string(), remote_hb_port),\n            ];\n\n            let remote_client = remote_client.ok_or_else(|| anyhow::anyhow!(\"no remote client\"))?;\n            let command_template = cx.update(|_window, cx| {\n                remote_client.read(cx).build_forward_ports_command(forwards)\n            })??;\n\n            let mut command = util::command::new_command(&command_template.program);\n            command.args(&command_template.args);\n            command.envs(&command_template.env);\n\n            let mut ssh_tunnel_process = command.spawn().context(\"failed to spawn ssh tunnel\")?;\n\n            let stderr = ssh_tunnel_process.stderr.take();\n            cx.spawn(async move |_cx| {\n                if let Some(stderr) = stderr {\n                    let reader = BufReader::new(stderr);\n                    let mut lines = reader.lines();\n                    while let Some(Ok(line)) = lines.next().await {\n                        log::warn!(\"ssh tunnel stderr: {}\", line);\n                    }","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/zed-industries/zed/blob/f4178619acd0d47ea1f76a2025c42962c6d6638c/crates/repl/src/kernels/ssh_kernel.rs#L96-L132","documentation":"Generic sentinel guard in SshRunningKernel::new(): the SSH remote client handle was unavailable when setting up the kernel's connection info and port forwards, so the SSH kernel cannot be started. It signals missing infrastructure rather than bad user input.","triggerScenarios":"Thrown at crates/repl/src/kernels/ssh_kernel.rs:114 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Open the notebook over an SSH remote project","Reconnect the SSH project before starting the kernel"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f4178619acd0d47ea1f76a2025c42962c6d6638c","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}