Introduction
What May I? does and where it sits in an agent workflow.
May I? is a human-in-the-loop service for software agents. At any point where an agent needs a person — a yes or no on an exact action, a pick from a list of options, a freeform answer — it files the question with May I?, parks, and resumes when the answer arrives. Every resolution is delivered as a signed event.
Approvals are the receipt-bearing kind of ask. The agent describes an exact action, a person approves or denies it, and the service issues a signed receipt for approved requests. The executor still owns enforcement: before it deploys, deletes, transfers, or calls an external API, it verifies that the receipt matches the action it is about to perform.
The other kinds — select and freeform text — go through the inputs API (POST /api/inputs). They carry no enforcement, because there is no action to gate, but every answer still mints a durable signed attestation of who answered, what, and when.
The approval flow
- An agent creates a draft with an action, explanation, expiry, and enforcement mode.
- It uploads any supporting evidence and seals the request.
- An eligible person reviews the frozen request in the web or mobile app.
- May I? records the decision and issues a short-lived receipt when approved.
- The executor verifies the receipt and consumes it when one-time enforcement is required.
The input flow
- An agent posts a question — text, select, or confirmation — with a prompt, expiry, and optional callback.
- An eligible person answers it in the web or mobile app.
- May I? records the answer, mints a signed attestation, and delivers a signed
input.resolvedevent to the callback. Agents without a callback poll instead.