Agent Recipes
Five complete tasks, each with the exact call order, what to verify between steps, and the durable handle you should be holding at the end.
Every recipe is shown for both MCP and the CLI where both apply. They follow the safety contract exactly — read before write, approve before spend, no automatic retries.
Which one you want
| Task | Costs credits | Scopes | Ends with |
|---|---|---|---|
| Inspect a canvas read-only | No | canvas:read, asset:read | A summary and a review link |
| Save an image | No | canvas:read, canvas:write, asset:read | A durable node: and asset: handle |
| Run a Recipe | Yes | image:generate and dependencies, plus job:manage | A terminal Run with typed outputs |
| Generate video | Yes | video:generate and dependencies, plus job:manage | A completed job: and a downloaded file |
| Batch edits | No | canvas:read, canvas:write | A new revision and the created handles |
The shape they all share
Identify one exact handle
Never choose between candidates on the agent’s own initiative.
Read the current state
canvas_get, recipe get, action get, or model get — whichever describes what you are about to use.
Plan against what you read
Not against what you expected to find.
Get approval if the next step spends money
In the current turn, naming the one run.
Execute once
With one caller-stable idempotency key.
Verify and report durable handles
Read back, and hand over the handles that outlive the observation record.
Two things to get right every time
Approval is per-turn and per-run. Approval for one image is not approval for a second image, a retry, or a batch. When a run fails, that ends the turn’s authority — report the failure and ask again.
Handles are the deliverable. A run: or job: handle is a temporary observation record and expires. The node: and asset: handles are what stay durable. Hand back the durable ones.