paperclipai/paperclip · error · ToolGatewayHttpError

signed_arguments_mismatch

signed_arguments_mismatch

Error message

Approved tool action arguments do not match reviewed hash

What it means

Post-approval arguments integrity check: the canonical hash of the stored parameters does not match actionRequest.canonicalArgumentsHash, or the signature over the canonical arguments fails verification. The 409 blocks execution because the arguments drifted from what was actually reviewed and signed.

Solutions

  1. Arguments differ from the reviewed hash. Execute with exactly the approved arguments or request a new approval.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/services/tool-gateway.ts:5706 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/cb02a49e200b5303. Report an issue: GitHub.

Appendix: source

Thrown at server/src/services/tool-gateway.ts:10066

          sensitiveMode: "redact",
          promptInjectionMode: "ignore",
        });
        const storedCanonical = canonicalToolArguments(storedParameters);
        if (
          actionRequest.canonicalArgumentsHash !==
            summarizeToolValue(storedParameters).sha256 ||
          !verifyToolArgumentsSignature({
            signedArguments: actionRequest.signedArguments,
            invocationId: storedInvocation.id,
            toolName: storedInvocation.toolName,
            canonicalArguments: storedCanonical,
            approvalSnapshot: signedPayload.approvalSnapshot,
            executionOnApprove: signedPayload.executionOnApprove,
            identityContextId: signedPayload.identityContextId,
            signingSecret: options.toolActionSigningSecret,
          })
        ) {
          throw new ToolGatewayHttpError(
            409,
            "Approved tool action arguments do not match reviewed hash",
            "signed_arguments_mismatch",
          );
        }
        if (
          !(await approvedManagedArgumentsRemainCurrent(
            session,
            tool,
            storedParameters,
          ))
        ) {
          throw await expireApprovedActionForManagedArgumentDrift({
            actionRequestId: actionRequest.id,
            invocationId: storedInvocation.id,
            toolName: storedInvocation.toolName,
          });
        }

View on GitHub (pinned to 3f1d897a7c)