Agent skill

Tldraw Offline

by Luciole-Studio in Luciole-Studio/Misaka-Agent

Drive and script tldraw offline canvases with an agent. An agent skill from Luciole-Studio/Misaka-Agent.

MITAuto-check passed

Install Tldraw Offline

skills CLI
$ npx skills add Luciole-Studio/Misaka-Agent --skill tldraw-offline -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Luciole-Studio/Misaka-Agent tldraw-offline --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Luciole-Studio/Misaka-Agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/misaka/core/skills/assets/optional/creative/tldraw-offline .claude/skills/tldraw-offline && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tldraw-offline
GitHub stars
171
Used in
1 other repo
Token cost
~3.7k tokens
SKILL.md length
1,496 words
Files
4 (incl. scripts)
Skills in repo
77
Repo updated
First seen
Licence
MIT

At a glance

Drive and script tldraw offline canvases with an agent. An agent skill from Luciole-Studio/Misaka-Agent.

  • Works in 6 steps: Read the current token/port from… → For layout/generation, use /exec. For… → Make scripts idempotent: create durable… → …
  • SKILL.md covers When to Use, Prerequisites, How to Run and Quick Reference, plus 5 more sections
  • Runs JavaScript scripts from its folder; calls curl, python and jq

What it does

Tldraw Offline is an agent skill from Luciole-Studio/Misaka-Agent. Drive and script tldraw offline canvases with an agent.

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts (for example `scripts/counter.js` and `scripts/main.js`).

The repository describes itself as: A multi-agent research system for the humanities and social sciences. The licence is MIT.

Example prompts

  • “/tldraw-offline”

Requirements

  • Python 3
  • Node.js

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Read the current token/port from server.json. Find the target doc with
  2. For layout/generation, use /exec. For durable behavior, edit
  3. Make scripts idempotent: create durable shapes with helpers.createShapeIfMissing
  4. Keep script-owned writes out of the user's undo stack
  5. For reactivity, editor.store.listen(cb) and tear it down on signal abort.
  6. For a single moving anchor + attached internals, prefer

What it can do on your machine

Read from SKILL.md and the folder at commit 3bcf7a3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 3 files in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • curl
    • python
    • jq
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tldraw Offline loads about 3.7k tokens when it runs. Until then it costs about 18 tokens; SKILL.md has 1,496 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~18
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from Luciole-Studio/Misaka-Agent at commit 3bcf7a3, republished under its MIT licence (© Luciole-Studio). 1,496 words, ~3,731 tokens.

Download SKILL.mdSave it as .claude/skills/tldraw-offline/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
tldraw-offline
description
Drive and script tldraw offline canvases with an agent.
version
1.0.0
author
Teknium + Hermes Agent
license
MIT
platforms
linux, macos, windows

tldraw offline Skill

Work with the tldraw offline desktop app (offline.tldraw.com): read the open canvas, make edits, and write document scripts — JavaScript embedded in a .tldraw file that runs on load and gives the file durable behavior. The app runs a local HTTP API (default localhost:7236) that a coding agent drives with plain curl from its terminal — this is exactly how the app's own homepage demo (Codex editing a canvas live) works. The agent does NOT use computer-use / GUI clicking, and does NOT hand-edit the .tldraw file directly. Keep tldraw offline open while you work.

When to Use

  • The user has tldraw offline open and asks you to build or modify a canvas (diagrams, wireframes, layouts).
  • You want to add durable behavior to a drawing (reactive shapes, interactive buttons, animation, connection logic) via an embedded document script.

Do NOT hand-place shapes to imitate a drawing — write the code that generates them. Agents are far better at scripting the canvas than at drawing on it.

Prerequisites

  • tldraw offline installed and running, with a document open. Releases: https://github.com/tldraw/tldraw-offline/releases/latest (macOS DMG, Windows x64/Arm64, Linux x86_64/arm64 AppImage or amd64/arm64 .deb).
  • Agent skills installed in the app: Develop → Install Agent Skills. The app writes its own tldraw skill into ~/.codex/skills/, ~/.claude/skills/, ~/.cursor/skills/, and ~/.gemini/skills/ — teaching that agent the curl recipes below. (This Hermes skill mirrors that guidance for Hermes.)
  • The local control API. On launch the app writes server.json to its config dir (Linux ~/.config/tldraw/, macOS ~/Library/Application Support/tldraw/, Windows %APPDATA%\tldraw\) with port (default 7236), a bearer token, pid, and startedAt. Every request except GET / needs Authorization: Bearer <token>. A clean quit removes server.json; if it's present but the port doesn't answer, the app quit uncleanly — treat as not running.
  • Re-read port + token on EVERY shell call. Each terminal call is a fresh shell, so an exported token does not persist — "export once and reuse" sends an empty token and 401s. Read both inline at the top of each call: PORT=$(jq -r .port <server.json>); TOKEN=$(jq -r .token <server.json>).
  • No account or network needed for local editing.

How to Run

Two distinct workflows. Pick by whether the change must survive a reload.

A. One-off canvas edits (/exec) — layout, generating shapes, cleanup. This is a live edit, not saved script:

bash
BASE=http://localhost:7236
TOKEN=$(python -c "import json;print(json.load(open('$HOME/.config/tldraw/server.json'))['token'])")
# find the focused document id
DOC=$(curl -s "$BASE/api/search" -X POST -H 'content-type: application/json' \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"code":"return (await api.getFocusedDoc()).id"}' | python -c "import sys,json;print(json.load(sys.stdin)['result'])")
# run code with the live `editor` + `helpers` in scope
curl -s "$BASE/api/doc/$DOC/exec" -X POST -H 'content-type: application/json' \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"code":"const {createShapeId,toRichText}=await import(\"tldraw\"); editor.createShape({id:createShapeId(),type:\"geo\",x:0,y:0,props:{geo:\"rectangle\",w:200,h:100,color:\"blue\",fill:\"solid\",richText:toRichText(\"hello\")}}); return editor.getCurrentPageShapes().length"}'

B. Durable behavior (script/main.js) — reactive/interactive logic that must survive reload. Edit the file on disk; the app's watcher applies it:

bash
# get the live script file path for the doc
curl -s "$BASE/api/doc/$DOC/script-workspace" -X POST \
  -H "Authorization: Bearer $TOKEN"          # -> result.mainJsPath, result.isDefaultScript
# edit result.mainJsPath with read_file / patch / write_file (see scripts/main.js)
# then confirm the watcher applied it:
curl -s "$BASE/api/doc/$DOC/script-status" -H "Authorization: Bearer $TOKEN"

The ready-to-adapt document script is scripts/main.js.

Quick Reference

The document-script contract (verified against the app's bundled script-context.d.ts):

js
import { createShapeId, toRichText } from 'tldraw'   // primitives: import, not globals

export default function ({ editor, helpers, signal }) {
  editor.run(() => {                                 // batch = one undo step
    helpers.createShapeIfMissing({                   // idempotent furniture
      id: createShapeId('node-1'), type: 'geo', x: 0, y: 0,
      props: { geo: 'rectangle', w: 200, h: 100, richText: toRichText('hi') },
    })
  })

  const stop = editor.store.listen(() => { /* react */ })  // fires the tick AFTER a commit
  signal.addEventListener('abort', () => stop())           // REQUIRED cleanup on rerun/close
}
  • ctx.editor — the live Editor (createShape, updateShape, deleteShapes, getCurrentPageShapes, getShape, getBindingsFromShape, zoomToFit, on('tick'|'event', fn), run(fn, { history: 'ignore' })).
  • ctx.helpers — createShapeIfMissing, createShapesIfMissing, createArrowBetweenShapes(from, to, { arrowheadEnd }), translateShapes, onShapeTranslate(id, fn, { signal }), richTextToPlainText, boxShapes, getLints.
  • ctx.signal — AbortSignal; attach every listener/interval teardown to it.
  • config.js (separate file) registers custom shape/tool/component utils and runs before mount; main.js runs against the mounted editor and reruns on save.

Interactive UI (clickable buttons that drive state)

Drawn shapes can behave like a real app — the thing a static whiteboard can't do. Full example: scripts/counter.js (a number display + MINUS/RESET/PLUS buttons).

Verification boundary — read this before claiming interaction works or doesn't. The app's OWN agent playbook says to verify a clickable-UI script with "one simulated click and one state read" via /exec (editor.dispatch a pointer event, await a tick, read the shape's state) — NOT by driving a real mouse. By that standard the counter is verified: dispatched clicks stepped it 0 → 1 → 2 → 1 → 0. Two caveats worth writing down:

  • The script only runs once the app's file-watcher applies it. On Linux that watcher uses inotify; a host with an exhausted fs.inotify.max_user_instances logs inotify_add_watch ... No space left on device, script-status shows state: "not-watching" / hasEntry: false, and the script never executes. This is a host limit, not a script bug — a normal desktop is unaffected.
  • Driving the canvas with computer-use needs FOREGROUND delivery, not background. cua-driver's default background delivery returns background_unavailable against Electron's occluded renderer — but that is the first rung, not a wall. cua-driver returns an escalation: "foreground" hint; set delivery_mode: "foreground" (pair with bring_to_front) and its X11 XTest path (x11_xtest_fg) clicks land — this dismisses the "Run Script" consent dialog and clicks the canvas. Verified by the Cua team on this exact v1.11.0 AppImage (Linux/X11). Do NOT conclude "Electron rejects synthetic clicks" and give up in background mode — climb to foreground. (The real product path is still /exec, not clicks; this note is for computer-use-driven testing.)

The pattern:

js
export default function ({ editor, helpers, signal }) {
  // 1. Build buttons idempotently; tag each with meta so the handler finds them.
  //    Give buttons a visible label AND a meta.action.
  // 2. Hit-test pointer_down in PAGE coordinates against the button bounds:
  const inside = (b, p) => p.x >= b.x && p.x <= b.x + b.w && p.y >= b.y && p.y <= b.y + b.h
  function onEvent(info) {
    if (!info || info.name !== 'pointer_down') return
    let p = null
    try { if (info.point && editor.screenToPage) p = editor.screenToPage(info.point) } catch {}
    p = p ?? editor.inputs?.currentPagePoint
    if (!p) return
    const hit = editor.getCurrentPageShapes().find(
      (s) => s.meta?.ui === 'button' &&
        inside({ x: s.x, y: s.y, w: s.props.w, h: s.props.h }, p)
    )
    if (hit) runAction(hit.meta.action)   // mutate state; store it in a shape's meta
  }
  editor.on('event', onEvent)
  signal.addEventListener('abort', () => editor.off('event', onEvent))  // REQUIRED
}
  • Find buttons by meta (or visible label via helpers.richTextToPlainText), not by hard-coded coordinates.
  • One script owns both build and read. If the shapes are created by one code path (with meta.action: 'inc') and the handler reads another convention (meta.action === 'PLUS'), clicks silently do nothing. Ship the buttons built by the same script that handles them, or ship an empty canvas so the script builds them fresh — never pre-bake mismatched shapes into the file's db.
  • Keep app state in a shape's meta (e.g. meta.count) and render it as that shape's richText label, so it survives save and is readable for verification.
  • Detach the listener on signal abort. Skipping this is not cosmetic: on the next save the old onEvent stays attached alongside the new one, so every click fires twice and a counter jumps by 2 instead of 1.
  • For continuous motion use editor.on('tick', fn); for a moving anchor with attached pieces use helpers.onShapeTranslate(id, fn, { signal }).
Show full SKILL.md (617 more words)Show less
Shipping a self-running scripted .tldraw

A .tldraw is a zip of metadata.json + session.json + db.sqlite + assets/

  • script/ (only those entries are packable). For the script to auto-run without the "This document contains a script → Run Script" consent dialog:
  • metadata.json must carry a script manifest: { "sha256": "<digest>" }, where the digest is sha256 over each sorted script/ path as `${path}\0${sha256hex(bytes)}\n`. A mismatch is rejected as tampered.
  • Pre-trust the digest by adding it to ~/.tldraw/script-trust.json ({ "trusted": ["<digest>"] }, or $TLDRAW_SCRIPT_TRUST). The app skips consent when isScriptTrusted(digest) is true.

Procedure

  1. Read the current token/port from server.json. Find the target doc with api.getFocusedDoc() (or api.getDocs()); name it explicitly if several are open.
  2. For layout/generation, use /exec. For durable behavior, edit script/main.js via /script-workspace.
  3. Make scripts idempotent: create durable shapes with helpers.createShapeIfMissing and stable createShapeId('name') ids. Scripts rerun on every load.
  4. Keep script-owned writes out of the user's undo stack: editor.run(fn, { history: 'ignore' }) (or helpers.translateShapes, which already does).
  5. For reactivity, editor.store.listen(cb) and tear it down on signal abort. For interaction, editor.on('event', h) (hit-test pointer_down in page coords); for animation, editor.on('tick', h).
  6. For a single moving anchor + attached internals, prefer helpers.onShapeTranslate(anchorId, fn, { signal }) over a broad store listener — a broad listener can turn your own writes into feedback loops.

Shape props (validated against tldraw SDK v5 schema)

editor.createShape / createShapeIfMissing accept partial props (shape utils fill defaults). When building raw records for a file snapshot, every prop below is required (run scripts/validate_shapes.mjs):

ShapeRequired props
noterichText, color, labelColor, size, font, align, verticalAlign, growY, fontSizeAdjustment, url, scale, textLastEditedBy
textrichText, color, size, font, textAlign, w, scale, autoSize
framew, h, name, color
geogeo, w, h, color, fill, richText (+ dash/size/etc. defaulted)

richText must be toRichText('...') — a bare string is rejected. color enum: black grey light-violet violet blue light-blue yellow orange green light-green light-red red white. font enum: draw sans serif mono.

Pitfalls

  • store.listen fires on the tick AFTER a commit, not synchronously. If you write a shape and immediately read state expecting the listener to have run, it hasn't. Verified live: an in-turn read shows 0 fires; after one setTimeout tick it shows 1. Same reason the app notes editor.dispatch is async — await a tick before verifying.
  • ctx, not globals. The entry is export default function ({ editor, helpers, signal }). There is no bare editor global in a document script. createShapeId / toRichText / Vec come from import ... from 'tldraw'.
  • richText, not text. Text/note/geo labels use richText: toRichText(s).
  • Raw records need every prop; createShape does not. In-app pass only the props you care about; a hand-built .tldraw snapshot needs the full set (table).
  • Scripts rerun on every load — be idempotent. Use createShapeIfMissing with stable ids or you duplicate content and clobber user edits.
  • Clean up on signal. signal.addEventListener('abort', () => stop()) for every store.listen / editor.on / setInterval; the signal fires before rerun and on close.
  • Keep script writes out of undo: editor.run(fn, { history: 'ignore' }).
  • editor.on('tick') pauses when the window is hidden (it is a RAF loop); setInterval keeps firing but Electron throttles it to ~1/s in the background.
  • The API needs the bearer token from server.json; the port can be non-default (server.listen(0) picks one) — always read the file, don't hardcode 7236.
  • Only tldraw / react / react-dom import — not a Node project.

Verification

  • Shape schema (offline, no app): node scripts/validate_shapes.mjs — builds the real tldraw schema and validates note/text/frame. Passing prints 3/3.
  • Live canvas edits: after /exec, read back with /api/search → api.getShapes(docId) (returns { page, viewport, shapes }) and api.getBindings(docId) (array). Confirm expected shapes/bindings exist. Grab api.getScreenshot(docId) (returns { filePath, ... }) and inspect the PNG/JPEG with vision_analyze.
  • Durable script applied: GET /api/doc/:id/script-status. Success is state: "applied" (currentDiskDigest === lastAppliedDigest === manifestSha256, pendingApply === false, lastApplyError === null). If it stays "pending" after a short retry, report that instead of claiming success; "error" means the apply failed — read errorLogPath.

© Luciole-Studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (scripts) in misaka/core/skills/assets/optional/creative/tldraw-offline of Luciole-Studio/Misaka-Agent.

  • SKILL.md
  • scripts/counter.js
  • scripts/main.js
  • scripts/validate_shapes.mjs

Open the folder on GitHubat commit 3bcf7a3

Used in 1 other repository

We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in Luciole-Studio/Misaka-Agent, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Tldraw Offline next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tldraw Offline compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tldraw Offline this skillLuciole-Studio/Misaka-Agent1711 repos~3.7kAutomated safety check: PassMIT
Feishu Driveopenclaw/openclaw392k—~375Automated safety check: PassMIT
Composing Grid CanvasesPostHog/posthog40k—~2.1kAutomated safety check: PassCustom licence
Pua Offlinetanweai/pua20k—~143Automated safety check: PassMIT
Electron Drive Skillsickn33/agentic-awesome-skills47k1 repos~2.5kAutomated safety check: PassMIT
Offline Fallbackthedaviddias/Front-End-Checklist74k—~488Automated safety check: PassMIT

Similar skills

  • Feishu Drive

    openclaw/openclaw

    Feishu cloud-storage and comment workflows. An agent skill from openclaw/openclaw.

    392k GitHub stars~375 tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Official

    Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases.

    40k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Pua Offline

    tanweai/pua

    PUA offline alias for Codex. An agent skill from tanweai/pua.

    20k GitHub stars~143 tokensUpdated 1 mo ago
    Auto-check passed
  • Electron Drive Skill

    sickn33/agentic-awesome-skills

    Launch the project's Electron app on a scratch profile and drive it: click, type, screenshot, run renderer or main-process code, read logs.

    47k GitHub starsUsed in 1 repo~2.5k tokens
    Testing & QAAuto-check passed
  • Offline Fallback

    thedaviddias/Front-End-Checklist

    A skill your agent uses when adding PWA capabilities, implementing a service worker, or improving the experience for users on unreliable network connections.

    74k GitHub stars~488 tokensUpdated 4 days ago
    Auto-check passed
  • Official

    Inspect and compare offline AI evaluation experiments, diagnose case-level regressions, and follow scorer history across application, model, or prompt changes.

    40k GitHub stars~1.6k tokensUpdated today
    Auto-check passed

More from Luciole-Studio/Misaka-Agent

All 77 skills in this repo
  • Kanban Video Orchestrator

    Luciole-Studio/Misaka-Agent

    Plan and run multi-agent video production pipelines. An agent skill from Luciole-Studio/Misaka-Agent.

    171 GitHub starsUsed in 2 repos~2.4k tokens
    Auto-check: notes
  • Ast Grep

    Luciole-Studio/Misaka-Agent

    AST-aware structural code search and rewrite via ast-grep. An agent skill from Luciole-Studio/Misaka-Agent.

    171 GitHub starsUsed in 1 repo~3.2k tokens
    Auto-check passed
  • Drug Discovery

    Luciole-Studio/Misaka-Agent

    Drug discovery: ChEMBL search, drug-likeness, interactions. An agent skill from Luciole-Studio/Misaka-Agent.

    171 GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check passed
  • Fitness Nutrition

    Luciole-Studio/Misaka-Agent

    Workout planning, macros, and body metrics via wger/USDA. An agent skill from Luciole-Studio/Misaka-Agent.

    171 GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check passed
  • Hyperframes

    Luciole-Studio/Misaka-Agent

    Render MP4/WebM videos from HTML compositions. An agent skill from Luciole-Studio/Misaka-Agent.

    171 GitHub starsUsed in 1 repo~3.9k tokens
    Auto-check passed
  • Osint Investigation

    Luciole-Studio/Misaka-Agent

    Follow the money via public records and sanctions data. An agent skill from Luciole-Studio/Misaka-Agent.

    171 GitHub starsUsed in 1 repo~2.9k tokens
    Auto-check passed

Questions about Tldraw Offline

What does Tldraw Offline do?

Drive and script tldraw offline canvases with an agent. An agent skill from Luciole-Studio/Misaka-Agent. Tldraw Offline is an agent skill from Luciole-Studio/Misaka-Agent. Drive and script tldraw offline canvases with an agent.

How do I install Tldraw Offline in Claude Code?

Run `npx skills add Luciole-Studio/Misaka-Agent --skill tldraw-offline -a claude-code`. Or copy the skill folder (misaka/core/skills/assets/optional/creative/tldraw-offline in Luciole-Studio/Misaka-Agent) into .claude/skills/tldraw-offline in your project. Claude Code loads it when a task matches its description.

How do I install Tldraw Offline in Codex?

Run `npx skills add Luciole-Studio/Misaka-Agent --skill tldraw-offline -a codex`. Or copy the skill folder (misaka/core/skills/assets/optional/creative/tldraw-offline in Luciole-Studio/Misaka-Agent) into .agents/skills/tldraw-offline in your project. Codex loads it when a task matches its description.

Can I use Tldraw Offline in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Luciole-Studio/Misaka-Agent --skill tldraw-offline -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tldraw-offline, .gemini/skills/tldraw-offline, .github/skills/tldraw-offline and .opencode/skills/tldraw-offline in your project.

What does Tldraw Offline need to run?

Going by SKILL.md and its folder, Tldraw Offline needs JavaScript for the scripts in its folder and the command-line tools its instructions call (curl, python, jq and node). Our summary lists: Python 3; Node.js.

Does Tldraw Offline access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Tldraw Offline safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Tldraw Offline use?

Tldraw Offline is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tldraw Offline use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Tldraw Offline?

Skills that share tags, products or a category with Tldraw Offline: Feishu Drive (openclaw/openclaw, 392k stars), Composing Grid Canvases (PostHog/posthog, 40k stars), Pua Offline (tanweai/pua, 20k stars) and Electron Drive Skill (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tldraw Offline?

Luciole-Studio (a GitHub organization) maintains it in Luciole-Studio/Misaka-Agent, which has 171 GitHub stars. The repository holds 77 skills in this directory. The repository was last updated on October 8, 2026.

Source: Luciole-Studio/Misaka-Agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.