tinyhumansai/openhuman · error · anyhow::Error
Playwright daemon stdout unavailable
Error message
Playwright daemon stdout unavailable
What it means
Guard in start_daemon for the Playwright backend: the daemon's stdout pipe could not be taken after spawn, so responses from the Node.js daemon cannot be read. Sibling of the stdin guard; both fire only in abnormal spawn states.
Source
Thrown at src/openhuman/tools/impl/browser/playwright_backend.rs:276
.spawn()
.map_err(|error| {
tracing::debug!(
error = %error,
"[browser::playwright] failed to spawn backend daemon"
);
error
})
.context(
"Failed to start Playwright backend. Ensure Node.js and the Playwright package are installed.",
)?;
let stdin = child
.stdin
.take()
.ok_or_else(|| anyhow::anyhow!("Playwright daemon stdin unavailable"))?;
let stdout = child
.stdout
.take()
.ok_or_else(|| anyhow::anyhow!("Playwright daemon stdout unavailable"))?;
if let Some(stderr) = child.stderr.take() {
tokio::spawn(async move {
let mut lines = BufReader::new(stderr).lines();
while let Ok(Some(line)) = lines.next_line().await {
tracing::debug!("[browser::playwright] stderr: {line}");
}
});
}
tracing::debug!("[browser::playwright] backend daemon spawned");
Ok(PlaywrightDaemon {
child,
stdin,
stdout: BufReader::new(stdout),
})
}
View on GitHub (pinned to 7491200858)
Solutions
- Restart the core/tool to respawn the daemon
- Verify Node.js and the Playwright package are installed
- Report if persistent — stdio piping may be misconfigured
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at src/openhuman/tools/impl/browser/playwright_backend.rs:276 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17).
Data as JSON: /api/errors/cf2d89c2caf31b05.
Report an issue: GitHub.