OPEN SOURCE · WEBMCP FIRST

Let AI agents actwithout giving upcontrol

Remy adds permissions, approvals, receipts and undo to the actions agents take inside your app.

REMY / MORROW CHECKOUT
Morrow One headphones

SHOPPING BAG

Morrow One£0

Charcoal · Express delivery

AGENT ACTIONSREVERSIBLE ACTIONS

READABLE RECEIPT

Preparing actions

SAFE CHANGES

Run automatically

CONSEQUENTIAL ACTIONS

Wait for approval

EVERY CHANGE

Leaves a receipt

Agent accessReversible actions

Changes Remy can reverse run automatically. Purchases still wait.

Morrow One addedAUTOMATIC
Express delivery selectedAUTOMATIC
·Purchase £123WAITING

Let undoable changes run

If Remy knows how to put it back, the agent can act automatically. Purchases still wait.

EXPLICIT APPROVAL

Place order for £115?

Visa ending 4242 will be charged.

Morrow One
£128
HELLO10
−£13
Total
£115

Pause what matters

Purchases and irreversible actions wait for explicit, specific approval.

READABLE RECEIPT

Express delivery selected

COMPLETED
Before
Standard · Free
After
Express · £8

Show what happened

Every agent action leaves a readable receipt and the correct recovery option.

DEVELOPER QUICKSTART

Add control to one real action

Wrap the function your app already trusts, then expose it through WebMCP.

RUN FROM SOURCE

git clone https://github.com/MustafaK99/Remy.git && cd Remy && npm ci
choose-delivery.ts
const chooseDelivery = remy.defineAction({
  name: "choose_delivery",
  title: "Choose delivery",
  kind: "write",
  risk: "low",
  input: z.strictObject({
    method: z.enum(["standard", "express"]),
  }),
  preview: ({ input, context }) => ({
    summary: `Choose ${input.method} delivery`,
    changes: [{
      label: "Delivery",
      before: context.cart.delivery,
      after: input.method,
    }],
    recovery: { method: context.cart.delivery },
  }),
  execute: ({ input, context }) =>
    context.cart.setDelivery(input.method),
  recovery: {
    kind: "exact",
    execute: ({ receipt, context }) =>
      context.cart.setDelivery(receipt.recovery.method),
  },
})

remy.register(chooseDelivery)
await registerWebMCP(remy)
Node 20+ · npm 10+ · no environment variablesFull quickstart

MIT LICENSED · TYPESCRIPT

Ship agents users aren’t afraid to trust.

Try the live demo