diff --git a/cli/src/agent/backends/acp/AcpStdioTransport.ts b/cli/src/agent/backends/acp/AcpStdioTransport.ts index 9f93b876..e74f7681 100644 --- a/cli/src/agent/backends/acp/AcpStdioTransport.ts +++ b/cli/src/agent/backends/acp/AcpStdioTransport.ts @@ -65,7 +65,11 @@ export class AcpStdioTransport { this.process.on('error', (error) => { logger.debug('[ACP] Process error', error); - this.rejectAllPending(error instanceof Error ? error : new Error(String(error))); + const message = error instanceof Error ? error.message : String(error); + this.rejectAllPending(new Error( + `Failed to spawn ${options.command}: ${message}. Is it installed and on PATH?`, + { cause: error } + )); }); } diff --git a/cli/src/codex/codexLocal.ts b/cli/src/codex/codexLocal.ts index 24a51039..33fe8aa7 100644 --- a/cli/src/codex/codexLocal.ts +++ b/cli/src/codex/codexLocal.ts @@ -95,7 +95,8 @@ export async function codexLocal(opts: { child.on('error', (error) => { cleanupAbortHandler(); - reject(error); + const message = error instanceof Error ? error.message : String(error); + reject(new Error(`Failed to spawn codex: ${message}. Is Codex CLI installed and on PATH?`, { cause: error })); }); child.on('exit', (code, signal) => {