paperclipai/paperclip · error · Error
local_trusted mode only supports private exposure
Error message
local_trusted mode only supports private exposure
What it means
Startup safety check in startServer: deploymentMode is local_trusted but deploymentExposure is not 'private' (e.g. 'public'). local_trusted mode carries no authentication, so it is only permitted with private exposure; any non-private exposure setting is rejected at boot.
Solutions
- Keep exposure set to private when using local_trusted mode, or switch to authenticated mode for broader exposure.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/index.ts:526 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-08-18).
Data as JSON: /api/errors/8ace777e1f5eb2d2.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/index.ts:574
try {
await embeddedPostgres.initialise();
} catch (err) {
logEmbeddedPostgresFailure("initialise", err);
throw formatEmbeddedPostgresError(err, {
fallbackMessage: `Failed to initialize embedded PostgreSQL cluster in ${dataDir} on port ${port}`,
recentLogs: logBuffer.getRecentLogs(),
});
}
} else {
logger.info(`Embedded PostgreSQL cluster already exists (${clusterVersionFile}); skipping init`);
}
if (existsSync(postmasterPidFile)) {
logger.warn("Removing stale embedded PostgreSQL lock file");
rmSync(postmasterPidFile, { force: true });
}
try {
await embeddedPostgres.start();
} catch (err) {
logEmbeddedPostgresFailure("start", err);
throw formatEmbeddedPostgresError(err, {
fallbackMessage: `Failed to start embedded PostgreSQL on port ${port}`,
recentLogs: logBuffer.getRecentLogs(),
});
}
embeddedPostgresStartedByThisProcess = true;
embeddedPostgresSupervisor = createEmbeddedPostgresSupervisor({
initialInstance: embeddedPostgres,
createInstance: createEmbeddedPostgres,
beforeRestart: () => {
const runningPostgresPid = getRunningPid();
if (runningPostgresPid) {
throw new Error(`Refusing embedded PostgreSQL recovery because the data directory reports a live process (pid=${runningPostgresPid})`);
}
if (existsSync(postmasterPidFile)) rmSync(postmasterPidFile, { force: true });
},View on GitHub (pinned to 3f1d897a7c)