بنقرة واحدة
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.