Updated June 12, 2026
How do I interact with a live Drafty canvas?
Quick answer
A live (self-refreshing) Drafty canvas supports three interactions. Decide each row's fate right on the page — hover or tap it and choose Approve (use it as drafted), Overwrite (swap in your own text), or Cancel (skip it) — and the next refresh follows your call, with no AI in the loop. Send Claude a canvas-level instruction ("Tell Claude" in the dock) to change what the report shows. And History stays readable: data refreshes update the page silently, so versions are only the changes someone authored, plus one daily snapshot.
A live Drafty canvas — one that refreshes itself on a schedule — supports three interactions, each matched to what you're actually trying to do.
Approve, Overwrite, or Cancel
Hover an item (tap on your phone) and decide its fate. Approve marks it done as drafted. Overwrite marks it done with your own text in place of the draft — right for canvases where an agent drafts something and you want your wording to ship. Cancel skips the row. The item dims immediately, Undo sits right next to every decision, and the next refresh makes it real. No agent, no tokens: a decision is pure data, and every one is attributed.
For script authors: stamp each repeating item with a stable data-key derived from your data source's row id (never from position), then read decisions back before rendering:
drafty marks ls <slug> --kind done --json
Approved and overwritten rows both come back as done — an overwritten row carries a text field, so act on that instead of your draft. Cancelled rows come back with --kind skipped.
Tell Claude
Some feedback isn't about one element — it's about the report itself. "Exclude bot traffic." "Add a week-over-week column." Open the Drafty dock and hit Tell Claude: your instruction becomes a canvas-level thread (no element anchor, so a refresh can never orphan it) and lands in the same inbox your agent already watches. Claude replies and resolves it like any comment thread.
Comments still work everywhere they used to — they're the right tool for reviewing drafts. Instructions are for changing what a live canvas shows.
A History you can actually read
Refreshes used to pile up as hundreds of phantom versions. Now a data refresh is a tick: it updates the live page (anyone watching sees it reload in place) but creates no version. History shows the changes someone authored — pushes, edits, restores — plus one daily snapshot as a diagnostic safety net, and a green heartbeat line telling you the canvas is live and when it last ticked.
Practically: your agent's pushes still version normally; only --refresh pushes to an already-armed canvas go silent. Restore works exactly as before, on the versions that matter.
Frequently asked
- What do Approve, Overwrite, and Cancel do?
- Approve marks the row done as drafted. Overwrite also marks it done but stores your replacement text, which the refresh script uses instead of the draft — handy when an agent drafted something and you want your wording to ship. Cancel marks the row skipped. The row dims immediately, every decision shows Undo, and the next tick makes it real.
- Why don't refreshes show up in version history anymore?
- A refresh is the same report with fresh numbers — not an authored change. Ticks update the live page (open viewers reload in place) but don't create versions; History shows pushes and edits people actually made, plus one daily snapshot as a safety net. The green heartbeat line at the top of History shows the canvas is live and when it last ticked.
- How is "Tell Claude" different from a comment?
- A comment pins feedback to one element — right for reviewing a draft. An instruction is a change request for the canvas itself ("exclude bot traffic", "add a week-over-week column"), so it has no element anchor and can never be orphaned by a refresh. It lands in the same inbox your agent already watches.
- Who can mark items and send instructions?
- The same people who can comment: the owner and anyone the canvas is shared with, on canvases that aren't read-only. Marks are attributed and reversible; the canvas owner can remove any of them.
- How does my refresh script use marks?
- Run `drafty marks ls <slug> --kind done --json` before rendering and exclude those data keys from the output. Approved and overwritten rows both read back as done — an overwritten row carries a `text` field, so act on that instead of your draft. Cancelled rows read back with `--kind skipped`. Stamp each repeating item with a stable `data-key` derived from your source's row id — never from position — so marks survive re-renders.
Related
- Can a Drafty canvas show live data?Yes — a canvas can show data from BigQuery, a database, or any API. Claude renders the data into the canvas, and a scheduled refresh keeps it current. No credentials ever live in the shared canvas.
- How do I keep a Drafty canvas updated automatically?Turn a canvas into a self-updating dashboard: Claude writes a refresh script once, and a local cron re-runs it on a schedule — with no Claude in the loop, so it's free.
- Drafty canvas version history: push, restore, and compareEvery push saves a new canvas version. Preview and restore earlier ones from the CLI — the link and comments stay put.