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.

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
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
- 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 cichoose-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