Approval Card

A request from an agent that waits for a human before anything leaves the company.

Rafael requests approval2 min ago

Proposal for Acme Bistro: 4 shoot days a month.

PlanMonthly
Recurring (6 mo)$2,560
Annual$2,240

Installation

Once per app, set up Aedis UI. The CLI verifies the signed release before writing anything and pins every dependency:

npx @aedis/cli@0.1.0 init

Import the theme once in your global CSS, after Tailwind:

app/globals.css
@import "tailwindcss";@import "./styles/aedis-theme.css";

Then add the component:

npx @aedis/cli@0.1.0 add approval-card# pnpm dlx @aedis/cli@0.1.0 add approval-card · yarn dlx @aedis/cli@0.1.0 add approval-card · bunx @aedis/cli@0.1.0 add approval-card

Props

PropTypeDefaultDescription
requesterstring—Who asks, usually the agent's name.
contentstring—What is being approved, as untrusted markdown.
requestedAtstring—Already formatted time.
onApprove() => Promise<string | null>—Resolve with an error message to show it, or null.
onRequestChanges(reason) => Promise<string | null>—Called with the required reason.
labelsPartial<ApprovalCardLabels>—Override single strings; the rest comes from the Locale provider (English by default).

Security

  • Approving always goes through an Alert Dialog that starts on Cancel; the app can relabel it, not skip it.
  • Requesting changes requires a non-empty reason.
  • Content renders through Markdown (no raw HTML, safe links).