Skip to content

Stamp Approval

motion.dev

Human sign-off for an agent's tool call. The decision lands as a rubber stamp.

Agent request · needs approvalHigh risk

Emails 41 refund rows to finance@example.com.

send_email(
tofinance@example.com
subject
attachrefunds-q3.csv · 41 rows
)

Install

$ npx shadcn@latest add https://spotcheckui.com/r/stamp-approval.json

Also installs motion.

Usage

import { StampApproval } from "@/components/spotcheck/stamp-approval"

<StampApproval
  call={{
    name: "send_email",
    args: { to: "finance@example.com", subject: "Q3 refund summary" },
    resolved: "Emails 41 refund rows to finance@example.com.",
    risk: "high",
  }}
  editable={["subject"]}
  onApprove={(args) => release(args)}
  onDeny={halt}
/>

Show what the call will really do in resolved, not just its arguments, because people rubber-stamp a bare Approve button. Mark an argument editable so someone can fix it without denying the whole call.

Props

  • call * RequiredToolCallDefault —
  • editablestring[]Default []Argument names a person may change before approving.
  • onApprove(args: Args) => voidDefault —Runs with the final arguments, including any edits.
  • onDeny() => voidDefault —
  • classNamestringDefault —

Keyboard

TabMove between arguments and buttons
EnterApprove or deny

Reduced motion

The stamp appears at once, and the card doesn't jolt.