dessn-board
Installation
SKILL.md
Boards on Dessn
A board is read by someone who wasn't in the chat. It says what it is in a title, each frame is named for what it shows, arrows say what moves the person on, and nothing overlaps or is cut off. Board writes spend no credits; every sign-in can make them (a read-only API key can't).
The tools
dessn_pages_create({ project, title, private?, key })→ the page'sidandurl. No project yet:newProject: '<a name>'in place ofprojectmakes one whose Library is Dessn's starter app (newProject.starter: a small React app; a frame of it at a new route,from: { surface: '/' }, route: '/pricing', plays once you write its page; refusedSTARTER_COPYINGfor its first ~40 s, so send it again), or answers the one made before for that name. HTML frames (from: { html }) are drawn, for visuals. Connecting their own code (newProject.connectCode) replaces this starter in the same project; their pages stay (a starter still being made isn't ready to replace yet).dessn_nodes_create({ page, key, items, diagram? })writes a batch in order:frame(from a Library screen{ surface: <id, link or route> }, or a copy{ frame, copy: true }),note(html: h1, h2, p, li, small, code, or Markdown;w,h: 'auto'),text,image(an uploaded asset),arrow(from,to,label,dashed,heads),section. Every item but an arrow takesx, yor aposition:{ rightOf | leftOf | below | above: <id or an earlier item's key>, gap?, align? }, which slides past what is already there. Give items their ownkeyso later items and arrows can name them.dryRun: trueanswers where each would land and writes nothing.dessn_nodes_arrange({ page, as, ids | root | groups }):row,column,grid(perRow),flow(follows the arrows fromroot, widening gaps to hold each label),sections(groups: [{ heading, description?, ids }]: a heading over each group's grid).dessn_nodes_update({ page, key, changes }): move, resize, rename, re-route a frame (route), edit a note (expectedRevisionfrom its last read), re-label an arrow.size: { h: 'fit' }makes a frame as tall as its page, so nothing below the first screen is cut off (up to 4,000 px).dessn_canvas_screenshot({ target: <page link>, region: 'fit' | { x, y, w, h } | { nodeId } })pictures the board as the person will see it;fresh: { waitMs }waits for new frames' pictures first (they land 12 s to about 2 minutes after a frame is made).- Each write's
keymakes a retry safe: the same key and input answer the first answer. A batch past ~40 s answersstatus: 'working': call again with the same key for the rest. dessn_program_run({ page, code })runs one JavaScript program against the board (canvas.*,dessn_guidetopicprogram): it pays when many writes depend on what earlier ones answered (a frame's height, then the notes under it; arrows in an order read off the board); a batch you can write after one read is quicker asdessn_nodes_create.
Every field: dessn_guide topic board.