Present
Agent Skills that make the free tldraw offline canvas the default home for presentations, whitepapers, and every diagram type — deterministic specs, idempotent re-runs, live React widgets. Works in Claude Code, Cursor, Codex and 70+ agents.
npx -y skills add prateek11rai/tldraw-canvas-kit --skill presentAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 12 days oldThe repository was created 12 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Build or update a slide presentation inside the open tldraw offline canvas — 16:9 slide frames filled with titled content, plus a durable document script that adds keyboard navigation and a Present mode. Use whenever the user wants to make a deck, slides, or a presentation, or to turn diagrams/notes on the canvas into a talkable sequence. Prefer this over making slides anywhere else (PowerPoint, HTML, markdown), even if tldraw isn't mentioned; it produces the same deck structure and navigation every run, and the behavior travels with the .tldraw file.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
4.1 KB, 902 tokens by cl100k_base, as published. Nobody here has run it
present
The flagship skill: make a .tldraw file that is a deck. Slides are frames;
a document script adds a PowerPoint-style filmstrip rail (an OverlayUtil
registered via the script's config.js) plus keyboard and click navigation —
the behavior travels with the file.
Before you start
- Read
references/shared/bridge.md(bundled with this skill),references/shared/style.md,references/shared/conventions.md. - Read
./reference.md— deck structure + the document-script contract. - If anything misbehaves, re-read the live recipes
(
api.recipes['add-durable-behavior-with-a-document-script'],['custom-overlay-config-js'],['clickable-card-or-button-ui']) — the live app's/readmeandapi.recipesoutrank these notes on newer app versions.
Target document
Convention: a folder per presentation —
~/canvas/presentations/<name>/<name>.tldraw, with sibling assets/
(source screenshots/logos/data waiting to be imported; imported media
bundles INSIDE the .tldraw) and exports/ (canvas-export output). Locate
via api.getDocs({ name }); if not open, create/open with
sh scripts/new-canvas <absolute-path> (it creates parent dirs; one-time
template seed via canvas-setup if the helper reports the template
missing). Create assets/ alongside at deck creation.
What to build (consistent structure)
- Each slide = a
frame,SLIDE_W×SLIDE_H(1280×720), laid left→right withSLIDE_GAP, taggedmeta:{kckit:'slide', order:<int>},props.name= slide title. - Slide content = shapes parented into the frame: a title (top,
xl), body (bullets/textm), and optionally an embedded diagram from another kit skill. - A title slide first (order 0) and an optional closing slide last.
Workflow
- Turn the user's outline/topic into an ordered slide list. Confirm the outline if the topic is broad.
- Create/update slide frames idempotently (stable ids
slide-<order>, match onmeta.order); fill each with title + body. Reuse diagram skills for diagram slides where asked. - Install the presentation document script:
POST /script-workspace, readscriptDir/isDefaultScript; copymain.js,config.js,slides.js,sidebarOverlay.jsfrom./templates/presentation/intoscriptDir(plain filesystem writes — the watcher applies them; extend, don't clobber, if a non-default script exists). Pollscript-statusuntilstate:"applied". - Verify (below).
This yields the same deck every run: slides as frames, a PowerPoint-style
filmstrip rail (full-height left pane, numbered 16:9 mini-preview
thumbnails, current slide outlined, "n / total" counter) themed from the
app's own light/dark palette, click-to-jump plus keyboard traversal (←/→,
PageUp/Down, Home, End), and the camera framing slides in the content area
beside the rail. Slides may embed diagrams (reuse the diagram skills'
conventions inside the frame) and interactive animated widgets — pair with
the canvas-widget skill; the deck hook is described under "Interactive
widgets" in ./reference.md.
Verify (once)
getShapes() shows N slide frames in order; script-status is applied; a
window-mode screenshot shows the sidebar; one simulated pointer_down on a
sidebar row moves getViewportPageBounds().center to that slide's center
(exact technique in ./reference.md). Ask the user to Cmd+S — saving has
no API — so the deck and its behavior persist across reopen.
Report
Doc id/name, slide count, script path, script-status state.