{"record":{"id":"625fd8f331b1ac4e","repo":"atuinsh/atuin","slug":"stderr-was-piped","errorCode":null,"errorMessage":"stderr was piped","messagePattern":"stderr was piped","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/atuin-ai/src/tools/mod.rs","lineNumber":854,"sourceCode":"    let start = std::time::Instant::now();\n\n    // TODO: check if this is proper for all shells we support\n    let mut cmd = tokio::process::Command::new(&shell_call.shell);\n    cmd.arg(\"-c\").arg(&shell_call.command);\n    cmd.stdout(std::process::Stdio::piped());\n    cmd.stderr(std::process::Stdio::piped());\n\n    if let Some(ref dir) = shell_call.dir {\n        cmd.current_dir(dir);\n    }\n\n    let mut child = match cmd.spawn() {\n        Ok(child) => child,\n        Err(e) => return ToolOutcome::Error(format!(\"Failed to spawn command: {e}\")),\n    };\n\n    let stdout = child.stdout.take().expect(\"stdout was piped\");\n    let stderr = child.stderr.take().expect(\"stderr was piped\");\n\n    // VT100 emulator for the live preview (viewport-sized)\n    let mut parser = vt100::Parser::new_safe(PREVIEW_HEIGHT, PREVIEW_WIDTH, 0);\n\n    let mut stdout_reader = tokio::io::BufReader::new(stdout);\n    let mut stderr_reader = tokio::io::BufReader::new(stderr);\n\n    let mut stdout_buf = [0u8; 4096];\n    let mut stderr_buf = [0u8; 4096];\n    let mut stdout_done = false;\n    let mut stderr_done = false;\n\n    // Full output buffers (for the LLM, not the preview)\n    let mut full_stdout = Vec::<u8>::new();\n    let mut full_stderr = Vec::<u8>::new();\n\n    let mut interval = tokio::time::interval(Duration::from_millis(50));\n","sourceCodeStart":836,"sourceCodeEnd":872,"githubUrl":"https://github.com/atuinsh/atuin/blob/15fe1318f1df51de604262eb50734c9883d48e7b/crates/atuin-ai/src/tools/mod.rs#L836-L872","documentation":"Error \"stderr was piped\" thrown in atuinsh/atuin.","triggerScenarios":"Fires in AI tooling when an invariant that stderr must be a terminal is violated because stderr is piped.","commonSituations":"See trigger scenarios.","solutions":["Run the tool with stderr attached to a terminal, not a pipe."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"15fe1318f1df51de604262eb50734c9883d48e7b","analyzedAt":"2026-08-19T08:56:57.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}