Agent Frame
A live canvas for agents · Display No. 01

Your agent has something to show you

Give it somewhere
to show you.

A live frame for the charts, diagrams, photos and mockups that words can’t quite hold.

See how it works

One copy and paste. No account or install.

Agents can make pictures. Until now, they’ve had nowhere simple to put them.

01

Hand it the frame

Copy one block into Claude, Codex, Cursor, or your own agent. It contains a fresh frame URL and its private write key.

02

Leave it open

Keep the frame on another tab, monitor, or television. The moment your agent draws, this page becomes the live display.

03

Ask to see

Say “chart it,” “mock that up,” or “put it on the frame.” Every new image replaces the last one instantly.

  • “Chart these results on the frame.”
  • “Draw me the request flow.”
  • “Mock up that page so I can see it.”
  • “Show the test suite as it runs.”
The whole API, for the curious
GET /<id>the frame, live in a browser
POST /<id>update the content; SVG, HTML, images, text, or a text/prompt description
GET /<id>/rawcurrent content, with its stored content type
POST /<id>/overlayone plain-text status string layered over the content
GET /<id>/infocontent type, bytes, updated time, viewers and overlay
GET /<id>/viewerslive viewer screen profiles
DELETE /<id>delete the frame and its records
WS /<id>/wswatch for every update

Reads are open. Writes use the frame key as Authorization: Bearer <key>. Everything an agent needs is at /skill; a JavaScript wrapper is at /client.js.

Your new frame
From now on, our shared agent frame is at "https://agentfra.me/calm-cedar-f1yn8rdk6a". I'll be watching it on a second screen. Treat it as an auxiliary visual canvas or display, not as another conversational channel.

Whenever you want to show me something, POST content to the frame. Your secret write key is "gj75w5fwrh7fv1e0qs61mp9xfm". For the first update, use this complete write URL: "https://agentfra.me/calm-cedar-f1yn8rdk6a?key=gj75w5fwrh7fv1e0qs61mp9xfm". Afterward, prefer the header "Authorization: Bearer gj75w5fwrh7fv1e0qs61mp9xfm" with the plain frame URL. Never put the key in the frame, a reply, or a log.

For example, if I say "research X, then put a summary slide on the frame", generate an SVG string and run:
curl -sS -X POST -H 'content-type: image/svg+xml' --data "$SVG" 'https://agentfra.me/calm-cedar-f1yn8rdk6a?key=gj75w5fwrh7fv1e0qs61mp9xfm'

Frame content can be SVG, HTML, PNG, JPEG, GIF, WebP, or plain text. Make visuals fluid so they fit any screen, and don't post a placeholder — wait until you have something useful to show.
- Local image: curl -sS -X POST -H 'content-type: image/png' --data-binary @image.png 'https://agentfra.me/calm-cedar-f1yn8rdk6a?key=gj75w5fwrh7fv1e0qs61mp9xfm'
- Image from the web: curl -sSL 'IMAGE_URL' | curl -sS -X POST -H 'content-type: image/jpeg' --data-binary @- 'https://agentfra.me/calm-cedar-f1yn8rdk6a?key=gj75w5fwrh7fv1e0qs61mp9xfm'
- Find a photo: curl -sS -X POST -H 'content-type: text/prompt' --data 'DESCRIPTION' 'https://agentfra.me/calm-cedar-f1yn8rdk6a?key=gj75w5fwrh7fv1e0qs61mp9xfm&mode=photo'
- Synthesize an image: curl -sS -X POST -H 'content-type: text/prompt' --data 'DESCRIPTION' 'https://agentfra.me/calm-cedar-f1yn8rdk6a?key=gj75w5fwrh7fv1e0qs61mp9xfm&mode=generate'
- Start a new frame at https://frame.new.

There's more at https://agentfra.me/skill when you need it — no need to read it before your first update.
Paste into any capable AI agent.