skills/orcanote-whiteboard/SKILL.md
Guide for creating Excalidraw-based whiteboards in Orca Note. Use when user mentions whiteboard or Excalidraw.
npx skillsauth add sethyuan/orcanote-agent-skills orcanote-whiteboardInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides the syntax, structural rules, and design principles for creating semantically rich and visually appealing whiteboards in Orca Note using the Excalidraw JSON format.
Whiteboards are defined within whiteboard code blocks.
{
"elements": [],
"files": {}
}
| Type | Description | Key Fields |
| :--- | :--- | :--- |
| rectangle | Standard rectangle | x, y, width, height, strokeColor, backgroundColor, roundness, boundElements |
| ellipse | Circle or oval | x, y, width, height, strokeColor, backgroundColor, boundElements |
| arrow | Line or connector | points (relative to x,y), startArrowhead, endArrowhead, startBinding, endBinding, elbowed (true for elbow arrows) |
| line | Simple line | points |
| text | Text label | text, fontSize, fontFamily (5: Hand-drawn, 6: Sans, 8: Monospace), containerId (ID of the shape this text belongs to), x, y, width, height, strokeColor, backgroundColor, textAlign, verticalAlign |
| embeddable | Embedded Orca Note block | customData: { "blockId": "ID" }, x, y, width, height, strokeColor, backgroundColor, roundness |
To place text inside a shape (like a rectangle or ellipse):
id.containerId to the shape's id.x and y to the container's x and y.width and height to fit within the shape's dimensions.textAlign and verticalAlign to center the text.boundElements array: { "type": "text", "id": "text_id" }.elbowed field.elbowed: true. This creates a right-angled connector.startArrowhead / endArrowhead)null: No arrowhead."arrow", "bar", "dot", "triangle".To link two shapes (e.g., A and B) via an arrow:
startBinding: { "elementId": "A", "fixedPoint": [1, 0.5] } and endBinding: { "elementId": "B", "fixedPoint": [0, 0.5] }.{ "id": "arrow_id", "type": "arrow" } to the boundElements array of both Shape A and Shape B.fixedPoint is a tuple of [x, y] where x and y are between 0 and 1, representing the relative position on the shape's boundary (0,0 is top-left, 1,1 is bottom-right). For example:
fixedPoint: [1, 0.5] means the arrow starts at the middle of the right edge of Shape A.fixedPoint: [0, 0.5] means the arrow ends at the middle of the left edge of Shape B.Example Connection with Text labels:
{
"elements": [
{
"id": "shape-a",
"type": "rectangle",
"x": 100, "y": 100, "width": 100, "height": 50,
"boundElements": [
{ "id": "text-a", "type": "text" },
{ "id": "link-1", "type": "arrow" }
]
},
{
"id": "text-a",
"type": "text",
"x": 100, "y": 100, "width": 50, "height": 20,
"fontFamily": 6,
"fontSize": 16,
"text": "Start",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "shape-a"
},
{
"id": "shape-b",
"type": "ellipse",
"x": 400, "y": 100, "width": 100, "height": 50,
"boundElements": [
{ "id": "text-b", "type": "text" },
{ "id": "link-1", "type": "arrow" }
]
},
{
"id": "text-b",
"type": "text",
"x": 400, "y": 100, "width": 50, "height": 20,
"fontFamily": 6,
"fontSize": 16,
"text": "End",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "shape-b"
},
{
"id": "link-1",
"type": "arrow",
"x": 200, "y": 125,
"points": [[0, 0], [200, 0]],
"startBinding": { "elementId": "shape-a", "fixedPoint": [1, 0.5] },
"endBinding": { "elementId": "shape-b", "fixedPoint": [0, 0.5] },
"endArrowhead": "triangle",
"elbowed": true
}
]
}
To reference and display an existing Orca Note block inside a whiteboard, use the embeddable type. Note that embedded blocks have no associated text element for labeling.
embeddableblockId mapping to the target block's ID (number).{
"id": "block-1",
"type": "embeddable",
"x": 100,
"y": 100,
"width": 300,
"height": 200,
"customData": {
"blockId": 88234
},
"validated": true,
"link": "go to"
}
Good layout uses Proximity to imply relationship and White Space to denote separation.
fontSize: 28) for the root and smaller (e.g., fontSize: 16) for leaf nodes.backgroundColor: "#1d3557", text: "Goal", strokeColor: "#ffffff").strokeStyle: "solid" for direct evidence and "dashed" for speculative links.strokeWidth: 4 or a distinct backgroundColor.Color and style should be used semantically to reduce cognitive load.
Choose ONLY from the following 4 font sizes:
fontSize: 16 (Small)fontSize: 20 (Medium)fontSize: 28 (Large)fontSize: 36 (Extra Large)roughness: 0, fontFamily: 6, roundness: null (sharp corners) or type: 2.roughness: 1.5, fontFamily: 5, roundness: { type: 3 }.Assign colors based on the role of the element:
| Role | Professional Palette | Hand-drawn Palette | | :--- | :--- | :--- | | Core Concept | Deep Blue (#003049) | Vibrant Red (#e63946) | | Support Info | Light Gray (#e0e0e0) | Pale Blue (#a8dadc) | | Positive/Success | Forest Green (#2a9d8f) | Mint Green (#f1faee) | | Warning/Risk | Amber (#ffb703) | Orange (#f4a261) | | Action Items | Indigo (#4cc9f0) | Purple (#7209b7) |
After generating the whiteboard code block, you MUST perform a self-validation check to ensure the JSON is syntactically correct and semantically valid.
whiteboard code block.elements array has a unique id.text element with a containerId, verify that:
containerId matches the id of an existing shape.boundElements array includes the text element's ID.arrow element with startBinding or endBinding:
elementId in the binding exists in the elements array.fixedPoint is an array of two numbers between 0 and 1 (e.g., [0.5, 0.5]).boundElements includes the arrow element's ID.embeddable element has:
customData.blockId (a number).validated: true.link: "go to".fontSize (16, 20, 28, 36) and fontFamily (5, 6, 8) are used.If any check fails, correct the JSON before providing the final response.
{
"elements": [
{
"id": "m1", "type": "rectangle", "x": 500, "y": 300, "width": 150, "height": 60,
"backgroundColor": "#e63946", "roughness": 1.5, "roundness": { "type": 3 },
"boundElements": [{ "id": "t1", "type": "text" }, { "id": "a1", "type": "arrow" }]
},
{ "id": "t1", "type": "text", "x": 500, "y": 300, "width": 150, "height": 60, "text": "Project Goal", "fontFamily": 5, "fontSize": 20, "textAlign": "center", "verticalAlign": "middle", "containerId": "m1", "strokeColor": "#ffffff" },
{
"id": "c1", "type": "rectangle", "x": 750, "y": 200, "width": 120, "height": 50,
"backgroundColor": "#a8dadc", "roughness": 1.5, "roundness": { "type": 3 },
"boundElements": [{ "id": "t2", "type": "text" }, { "id": "a1", "type": "arrow" }]
},
{ "id": "t2", "type": "text", "x": 750, "y": 200, "width": 120, "height": 50, "text": "Task A", "fontFamily": 5, "fontSize": 16, "textAlign": "center", "verticalAlign": "middle", "containerId": "c1" },
{
"id": "a1", "type": "arrow", "x": 650, "y": 330, "points": [[0, 0], [100, -105]],
"startBinding": { "elementId": "m1", "fixedPoint": [1, 0.5] },
"endBinding": { "elementId": "c1", "fixedPoint": [0, 0.5] },
"elbowed": true, "roughness": 1.5
}
]
}
{
"elements": [
{ "id": "clue-1", "type": "embeddable", "x": 100, "y": 100, "width": 250, "height": 180, "customData": { "blockId": 5501 }, "strokeColor": "#003049", "strokeWidth": 2, "validated": true, "link": "go to" },
{ "id": "clue-2", "type": "embeddable", "x": 100, "y": 350, "width": 250, "height": 180, "customData": { "blockId": 5502 }, "strokeColor": "#003049", "validated": true, "link": "go to" },
{ "id": "label-cat1", "type": "text", "x": 100, "y": 50, "text": "CATEGORY: SOURCES", "fontFamily": 6, "fontSize": 20, "strokeColor": "#003049" },
{ "id": "clue-3", "type": "embeddable", "x": 600, "y": 100, "width": 250, "height": 180, "customData": { "blockId": 7701 }, "strokeColor": "#2a9d8f", "validated": true, "link": "go to" },
{ "id": "label-cat2", "type": "text", "x": 600, "y": 50, "text": "CATEGORY: FINDINGS", "fontFamily": 6, "fontSize": 20, "strokeColor": "#2a9d8f" },
{ "id": "link-1", "type": "arrow", "x": 350, "y": 190, "points": [[0,0], [250, 0]], "strokeStyle": "dashed", "strokeColor": "#ffb703" }
]
}
documentation
Guide for creating reusable templates in Orca Note with optional dynamic date and time variables.
documentation
Guide for creating and managing reminders in Orca Note. Use this skill when the user wants to set a reminder or schedule a task.
documentation
Guide for querying/searching data (blocks) in Orca Note.
development
Comprehensive guide for creating software diagrams using Mermaid syntax. Use when users need to create, visualize, or document software through diagrams including class diagrams (domain modeling, object-oriented design), sequence diagrams (application flows, API interactions, code execution), flowcharts (processes, algorithms, user journeys), entity relationship diagrams (database schemas), C4 architecture diagrams (system context, containers, components), state diagrams, git graphs, pie charts, gantt charts, or any other diagram type. Triggers include requests to "diagram", "visualize", "model", "map out", "show the flow", or when explaining system architecture, database design, code structure, or user/application flows.