paperclipai/paperclip · error · Error
Timed out acquiring sandbox callback bridge response lock.
Error message
Timed out acquiring sandbox callback bridge response lock.
What it means
Liveness failure in the filesystem-based sandbox callback bridge queue: the response lock (mkdir lock dir) has been held by a live process through hundreds of polling attempts (~30s), so the bridge cannot take its turn writing responses; stale locks from dead holders are cleaned automatically, so this indicates a genuinely stuck or long-blocked holder.
Solutions
- Retry; the response lock timed out under contention.
- Reduce concurrent bridge requests or increase the lock timeout.
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at packages/adapter-utils/src/sandbox-callback-bridge.ts:526 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-08-18).
Data as JSON: /api/errors/d29cf094e0b81519.
Report an issue: GitHub.
Appendix: source
Thrown at packages/adapter-utils/src/sandbox-callback-bridge.ts:606
}
let holderAlive = false;
if (holderPid !== null) {
try {
process.kill(holderPid, 0);
holderAlive = true;
} catch {
holderAlive = false;
}
}
if (!holderAlive) {
await fs.rm(lockDir, { recursive: true, force: true }).catch(() => undefined);
continue;
}
attempts += 1;
if (attempts >= 600) {
throw new Error("Timed out acquiring sandbox callback bridge response lock.");
}
await new Promise((resolve) => setTimeout(resolve, 50));
}
}
try {
if (options.requestPath) {
const requestExists = await pathExists(options.requestPath);
if (!requestExists) {
return { wrote: false };
}
}
const responseExists = await pathExists(responsePath);
if (responseExists) {
return { wrote: false };
}
await fs.writeFile(tempPath, body, "utf8");
await fs.rename(tempPath, responsePath);
return { wrote: true };
} finally {View on GitHub (pinned to 3f1d897a7c)