paperclipai/paperclip · error
runnerd exited before provider turn startup
Error message
runnerd exited before provider turn startup
What it means
Startup guard in the turn-start wait loop of the runnerd Codex transport: while polling for the provider's turnStart response (bounded by turnStartTimeoutMs or 30s), the runnerd child process exited before the provider confirmed turn startup. The failure is in the runner daemon process, not the turn request itself.
Source
Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:5383
// the new response fence. ACPX echoes the requested identity, while
// Codex and OpenCode return their provider-assigned identity.
const deadline =
this.options.turnStartTimeoutMs === undefined
? Date.now() + 30_000
: commandDeadline;
const providerTurnStarted = () =>
turnStartResponseReady({
responseEpoch,
observedEpoch: this.#observedTurnStartEpoch,
expectedProviderTurnId,
boundTurnId: this.#turnId,
});
while (!providerTurnStarted() && Date.now() < deadline) {
this.#throwIfFailed();
this.#pumpEvents();
if (providerTurnStarted()) break;
if (await this.#runnerHasExited())
throw new Error("runnerd exited before provider turn startup");
await new Promise((resolveWait) => setTimeout(resolveWait, 10));
}
if (!providerTurnStarted())
throw new Error("runnerd did not report the provider turn identity");
responseReady = true;
return { turn: { id: this.#turnId, status: "inProgress" } };
} finally {
if (!responseReady) {
resolveAdmission(false);
if (this.#turnStartResponseEpoch === responseEpoch) {
this.#turnStartResponsePending = false;
this.#expectedProviderTurnId = null;
}
} else {
// Resolving this async method schedules the strict driver's response
// continuation as a microtask. Keep terminal frames held until the
// following task so the driver can bind and emit turn.accepted first.
// The epoch prevents a late release from clearing a newer turn fence.View on GitHub (pinned to 01ad858492)
Solutions
- Check runnerd stderr/diagnostics for the crash reason during turn startup
- Restart the runner transport; a crashed runnerd is not recoverable in place
- Verify runnerd binary compatibility (arch/platform) if it exits immediately on every turn
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:5383 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/8ad3d9f899c488e3.
Report an issue: GitHub.