The verb layer
Propose. Approve. Verify.
An agent may only touch the document through published verbs.

A Create session: the agent on the left, the versions on the right.
live today
reviewed and decided
never exposed to a model, in any mode
leave the tab unless you call a model
The natural-language door
A sentence, previewed as a plan.
import { runChatTurn, buildToolContracts } from '@layermetry/media-editor'; const contracts = buildToolContracts(editor.verbs); // contracts → the published list: what an agent may call, and nothing else const { receipt } = await runChatTurn({ editor, message: task }); receipt.verbs; // exactly what ran, in order receipt.skipped; // what the ledger refused, and why

The plan is read before anything runs.
Inference
Your models, or ours.
Your endpoint, your keys.
- Any OpenAI-compatible endpoint, self-hosted included.
- Your keys stay behind your proxy.
- We never see the media in this mode.
export const ai = { aiProviders: { openai: { baseURL: 'https://ai.acme.internal/v1' } }, aiProxyUrl: 'https://ai.acme.internal/proxy', }; // browser → your endpoint. The media never leaves the tab.

Already wired.
- OpenAI, Anthropic and Fal, already wired.
- Billed as credits, at list price.
The boundary
Where the boundary is.
What stops an agent doing something unexpected?
Only verbs change the document, and the verbs are a published, numbered list. An agent proposes verbs from that list; the host or the person approves them; the SDK checks each one before it is applied. Anything not on the list simply cannot happen.
Which verbs can a model never call?
Six of them, in any mode. No prompt reaches those six.
Can we add our own verbs?
Yes. A host registers its own verbs next to ours, so the agent’s vocabulary is yours to extend, not just the model behind it.
Can an outside agent call the verbs over MCP?
Not today. An MCP server that exposes the verbs is on the roadmap.
Give your agent a vocabulary.
Forty-four verbs live today, and your own next to them.