| Nothing happens at all |
send() was never called — setters only accumulate |
Unknown permission mode: … |
A name outside the closed set was passed to setPermissions() |
| An attachment was not sent with the second turn |
Attachments are cleared by send(), by design |
| A model change had no effect |
Set while a process was already live; it applies at the next spawn |
| JSON parse failures on CLI output |
ANSI escapes — the CLI thinks it has a capable terminal |
mcp.list() returns [] |
No MCP configured, or the command failed — the two are indistinguishable |
No conversation found with session ID |
Resuming an id the CLI has never seen |
ENOENT on spawn |
The CLI is not on the inherited PATH — or the cwd does not exist |
UNC paths are not supported |
A WSL UNC path was passed as a spawn cwd |
| The session starts but no events arrive |
The listener was registered after the CLI spoke, or the output is not NDJSON |
| The CLI hangs after the first answer |
The stream flags are missing, so stdin never stayed open |
| Permission requests never arrive |
--permission-prompt-tool stdio is missing |
Processes survive stop() |
The CLI was not spawned detached, or Windows descendants detached from the tree |
| Node processes accumulate over days |
Orphans from hosts that were hard-killed |
| An argument is silently altered on Windows |
%VAR% expansion by cmd.exe |
| The resolved path is not the binary that runs |
PATHEXT: where listed the extension-less wrapper first |
| Contradictory answers in one conversation |
Two CLIs are driving the same session id |