paperclipai/paperclip · error · ToolActionSigningSecretMissingError
PAPERCLIP_TOOL_ACTION_SIGNING_SECRET is not configured; sign
Error message
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).
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.
Source
Thrown at server/src/services/tool-content-guards.ts:60
return PROMPT_INJECTION_PATTERNS
.filter((pattern) => pattern.re.test(text))
.map((pattern) => pattern.code);
}
export class ToolActionSigningSecretMissingError extends Error {
constructor() {
super(
"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).",
);
this.name = "ToolActionSigningSecretMissingError";
}
}
// Creating an approval is a two-step insert/sign operation. Readers must allow
// a short window for the creator to attach the signature before treating a null
// signature as an abandoned, unapprovable request.
export const TOOL_ACTION_REQUEST_SIGNING_GRACE_MS = 2 * 60 * 1000;
export function resolveToolActionSigningSecret(env: ToolActionSigningSecretEnv = process.env as ToolActionSigningSecretEnv) {
const secret = env.PAPERCLIP_TOOL_ACTION_SIGNING_SECRET?.trim();
if (!secret) {
throw new ToolActionSigningSecretMissingError();
}
return secret;
}
function signingSecret(explicitSecret?: string) {
const secret = explicitSecret?.trim();
return secret || resolveToolActionSigningSecret();
}
export function canonicalToolArguments(value: unknown) {
return stableSerialize(value ?? {});
}
View on GitHub (pinned to 01ad858492)
Solutions
- Set PAPERCLIP_TOOL_ACTION_SIGNING_SECRET in the server environment (worktrees inherit from .paperclip/.env) and restart the instance.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/src/services/tool-content-guards.ts:60 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18).
Data as JSON: /api/errors/4c188ae0876c011e.
Report an issue: GitHub.