paperclipai/paperclip · error
runnerd did not report its provider identity
Error message
runnerd did not report its provider identity
What it means
Fallback error of the provider-identity wait loop: thrown when the loop exhausts its deadline without runnerd either reporting the expected provider identity or exiting. It is the timeout counterpart to "runnerd exited before provider startup" — the process is alive but never publishes the identity evidence the transport requires.
Source
Thrown at packages/paperclip-runner/src/live/runnerd-codex-transport.ts:5532
): Promise<void> {
const deadline = Date.now() + 30_000;
while (Date.now() < deadline) {
this.#throwIfFailed();
this.#pumpEvents();
if (
this.#threadId.length > 0 &&
(this.#checkpointProviderIdentityExpectation !== null ||
this.#evidence.providerExecutionKind === "remote_service" ||
this.#evidence.providerPid !== null) &&
(expectedEventType === undefined ||
this.#providerIdentityEventType === expectedEventType)
)
return;
if (await this.#runnerHasExited())
throw new Error("runnerd exited before provider startup");
await new Promise((resolveWait) => setTimeout(resolveWait, 10));
}
throw new Error("runnerd did not report its provider identity");
}
async #waitCommand(
type: string,
commandId?: string,
deadline = Date.now() + 30_000,
): Promise<void> {
while (Date.now() < deadline) {
this.#throwIfFailed();
const command =
commandId === undefined
? this.#core?.store.state.commands.find(
(candidate) => candidate.type === type,
)
: this.#core?.getCommand(commandId);
if (command?.status === "completed") return;
if (command !== undefined && command.status !== "pending") {
throw new Error(View on GitHub (pinned to 01ad858492)
Solutions
- Confirm the runnerd version emits the provider identity event type the transport expects (version-match runnerd and paperclip-runner).
- Increase the wait deadline if the host is legitimately slow, or speed up runnerd startup.
- Capture runnerd logs to determine whether startup is hung; restart runnerd.
- If the expected event type changed in a recent upgrade, update the transport's expected event constant.
Example fix
// before
throw new Error("runnerd did not report its provider identity");
// after
throw new Error(
`runnerd did not report its provider identity within ${deadlineMs}ms (expected event: ${expectedEventType ?? "any"})`,
); Defensive patterns
Strategy: retry
Validate before calling
if (!identityEventSeenWithin(startupDeadlineMs)) logger.warn("runnerd provider identity not seen; startup may be hung"); Try / catch
try {
await transport.waitForProviderStartup(expectedEventType);
} catch (err) {
if (err.message.includes("did not report its provider identity")) {
await restartRunnerdAndRetry(expectedEventType);
} else throw err;
} Prevention
- Version-match runnerd with the transport so identity event names agree.
- Set wait deadlines above p99 observed startup time on your hosts.
- Alert on runnerd startup duration regressions after upgrades.
When it happens
Trigger: Polling for provider identity (with optional `expectedEventType`) until the loop's iteration budget/deadline expires while `#runnerHasExited()` stays false and the identity evidence (providerPid + expected event type) never arrives.
Common situations: runnerd hung during startup; a runnerd version that emits a different identity event name than `expectedEventType`; extremely slow host where startup exceeds the wait window; identity event consumed/hidden by a protocol mismatch.
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
Related errors
- runnerd did not report the provider turn identity
- runnerd exited before provider startup
- Failed to stop Daytona sandbox during lease release: ${forma
- provider turn ended with status ${turn.status}
- [opencode-local] Remote model availability probe for "${mode
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10).
Data as JSON: /api/errors/b31f2b8b5a7d9dd5.
Report an issue: GitHub.