diff --git a/docs/next/CHANGELOG.md b/docs/next/CHANGELOG.md
index 22e80931..7db02764 100644
--- a/docs/next/CHANGELOG.md
+++ b/docs/next/CHANGELOG.md
@@ -8,6 +8,7 @@
### Fixed
- Native Windows servers now detach from the terminal console that launched them, so closing WezTerm, Windows Terminal, or another host terminal no longer stops persistent pane processes. (#1329)
+- Windows API clients now remain connected while waiting for initial named-pipe request bytes, so `status server`, `api snapshot`, and other socket commands no longer intermittently fail with BrokenPipe. (#1279)
- `herdr --remote` now installs remote helper binaries without routing the binary stream through a multiline `/bin/sh -c` command, fixing installs for non-POSIX login shells such as xonsh. (#1203, thanks @nhumrich)
## [0.7.3] - 2026-07-08
diff --git a/src/api/server.rs b/src/api/server.rs
index 67093c72..692e9388 100644
--- a/src/api/server.rs
+++ b/src/api/server.rs
@@ -1,4 +1,4 @@
-use std::io::{self, Read, Write};
+use std::io::{self, Write};
use std::path::{Path, PathBuf};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
@@ -18,7 +18,8 @@ use crate::api::wait::{wait_for_event, wait_for_output};
use crate::api::{request_changes_ui, socket_path, ApiRequestMessage, ApiRequestSender, EventHub};
use crate::ipc::{
bind_local_listener, is_connection_closed_error, local_stream_peer_closed,
- remove_socket_file_if_owned, socket_file_identity, LocalStream, SocketFileIdentity,
+ poll_local_stream_read, remove_socket_file_if_owned, set_local_stream_polling,
+ socket_file_identity, LocalStream, LocalStreamRead, SocketFileIdentity,
};
const SOCKET_PERMISSION_MODE: u32 = 0o600;
@@ -405,48 +406,189 @@ fn api_response_outcome(response: &str) -> &'static str {
}
fn read_initial_request_line(stream: &mut LocalStream) -> std::io::Result