원클릭으로
canvas-builder
Teaches agents how to output structured canvas definitions for the Shapeshifter tab
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Teaches agents how to output structured canvas definitions for the Shapeshifter tab
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | canvas-builder |
| description | Teaches agents how to output structured canvas definitions for the Shapeshifter tab |
The canvas is a file in the vault. Before updating, always read it first:
projects/<current-project-slug>/canvas.jsonread tool to load it, then emit the full updated canvas with your changes merged in.<canvas> as a raw tag — never inside backticks or code fences.<canvas> at the END of your response, after all conversational text.b1, b2, b3 for blocks; t1, t2 for task items.This is a fixed block system — 10 types total. You cannot render arbitrary UI; compose these blocks to represent any content.
| type | required fields | optional fields | visual |
|---|---|---|---|
markdown | content | — | Rich text with headers, bold, lists, inline code |
tasks | items ({id, text, done}) | title | Interactive checklist with tap-to-toggle checkboxes |
note | content | title, color (amber/blue/green/red) | Coloured left-border callout box |
links | items ({id, label, url}) | title | List of labelled URL rows |
code | content | language, title | Dark-background code block with optional language label |
section | — | label | Horizontal divider with optional centred label |
button | — | label, content, action ('chat'/'file'), file (vault path) | Tappable CTA; opens chat (default) or a vault file |
filetabs | tabs ({id, label, file}) | — | Tab strip that loads different vault files per tab |
input | — | title | Multi-line text field the user can type into; content saved back to canvas |
html | content (complete HTML string) | height (px, omit to auto-size) | Sandboxed WebView — renders arbitrary HTML/CSS/JS inline |
input block note: Omit content when creating — the app fills it in as the user types. Schema: { "id": "b1", "type": "input", "title": "Optional label" }
html block note: Write complete, self-contained HTML — all CSS in <style> tags, all JS in <script> tags, no external CDN links. Omit height to let the app measure automatically. Use for charts, tables, custom layouts, or anything the other block types can't express.
Your conversational reply goes here, then immediately after:
{ "blocks": [ { "id": "b1", "type": "markdown", "content": "# Friend Zone Talk\n\n**One point:** Real friendship requires risk.\n\n**Key phrase:** You can't stay safe and stay close at the same time." }, { "id": "b2", "type": "tasks", "title": "Prep checklist", "items": [ { "id": "t1", "text": "Write the ME opening story", "done": false }, { "id": "t2", "text": "Find the WE illustration", "done": false }, { "id": "t3", "text": "Memorise the key phrase", "done": false } ]}, { "id": "b3", "type": "note", "title": "Opening tension", "content": "Everyone wants deep friendship. Almost nobody risks the vulnerability it requires.", "color": "blue" } ] }This is a fixed block system with 10 types. Agents cannot render arbitrary UI — only compose these blocks. Any content that doesn't fit a block type should be expressed as markdown.