paperclipai/paperclip · error · ToolGatewayHttpError
signing_secret_unconfigured
signing_secret_unconfigured
Error message
${error.message} What it means
Error "PAPERCLIP_TOOL_ACTION_SIGNING_SECRET is not configured; signed tool action approvals cannot be issued. Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in this instance's environment (worktrees inherit it from .paperclip/.env)." thrown in paperclipai/paperclip.
Solutions
- Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in the server environment (worktrees inherit from .paperclip/.env) and restart the instance.
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at server/src/services/tool-gateway.ts:1594 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@3f1d897a7c (2026-09-18).
Data as JSON: /api/errors/75ea4ee2f74cd71d.
Report an issue: GitHub.
Appendix: source
Thrown at server/src/services/tool-gateway.ts:2279
})
.where(
and(
eq(toolActionRequests.id, actionRequest.id),
eq(toolActionRequests.status, "pending"),
),
);
if (error instanceof ToolActionSigningSecretMissingError) {
await db
.update(toolInvocations)
.set({
status: "failed",
errorCode: "signing_secret_unconfigured",
errorMessage: error.message,
completedAt: new Date(),
updatedAt: new Date(),
})
.where(eq(toolInvocations.id, input.invocation.id));
throw new ToolGatewayHttpError(
500,
error.message,
"signing_secret_unconfigured",
{
invocationId: input.invocation.id,
tool: input.tool.name,
},
);
}
throw error;
}
// Board-only technical detail for the formal-approval interaction (target=custom).
const detailsMarkdown = [
`Tool: \`${input.tool.name}\``,
`Risk: \`${input.tool.risk}\``,
"",
"Arguments reviewed for execution:",
"",View on GitHub (pinned to 3f1d897a7c)