{"id":56043,"plugin_id":"plugin_asdk_app_6ada7bec545881919206a8cf89db59f8","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-26T18:06:28.579Z","digest":"7e81702ad4b449cf577b5bd72be1d9b21aab4e7de5c09f70f1a1ff4fa60ffad0","against":null,"payload":{"description":"Start from a team template: list templates, LOOK first (screenshot — a template IS a canvas), then instantiate. Use for: \"start from our QBR template\", \"use our usual layout\", flagging a canvas as a team template.","included_files":[],"name":"moda-templates","skill_md_contents":"---\nname: moda-templates\ndescription: >-\n  Start from a team template: list templates, LOOK first (screenshot — a\n  template IS a canvas), then instantiate. Use for: \"start from our QBR\n  template\", \"use our usual layout\", flagging a canvas as a team template.\n---\n\n# moda-templates\n\n**PREREQUISITE — `load_skill(\"moda-core\")` once per session** (step-0, write\ncontract, free/metered map). Already loaded? Skip ahead. If you cannot load\nit, the non-negotiables: call `moda_bootstrap` before anything; `brand_list`\nbefore creating; revision-guarded writes use `expected_revision` from your last read.\n`canvas_edit_image` captures its own target state and has no revision argument.\nOn `stale_revision`, re-read and retry once; send the canvas link\nthe moment it exists; stuck or failed? `ask_expert(\"<question>\")` — free and\nfast, never guess.\n\nA team template is the canvas someone approved as the starting point for\nrecurring work — the QBR deck, the launch post, the customer one-pager. It\ncarries layout and structure, one level up from what a brand kit carries.\n\n## Check before designing (one cheap read)\n\nThe ask names a recurring artifact type (QBR or board deck, launch post,\ncustomer one-pager) or the user says \"our template\", \"our usual format\", \"what\ndo we have\" → check first. Skip it for genuine one-offs.\n\n## Instantiate\n\n1. `template_list` — the team's flagged templates: name, category, page count,\n   tags, cursor-paginated. An empty list is a normal answer: say it in one line\n   and design fresh.\n2. **LOOK before choosing.** Names do not tell you what a template looks like,\n   and a template IS a canvas: `canvas_screenshot` renders a candidate inline\n   (up to 3 pages per call). Judge 2–4 candidates with your own vision;\n   category and page count do the cheap narrowing first.\n3. `canvas_create(template_canvas_id=…, name=…)` — a full server-side copy that\n   keeps the source's brand kit. The source defines dimensions, pages and\n   category, so those fields and `intent` are rejected alongside it, and so are\n   `folder` and `visibility`: create the copy first, then place it with\n   `drive_organize(action='move')` and rebind its kit with\n   `canvas_update(brand_kit_id=…)` when the user's kit differs.\n4. The copy is an ordinary canvas — `canvas_read` it, then author or edit it\n   the normal way. Send the link, and name which template you started from:\n   that is a decision the user may want to correct.\n5. None fit? One line (\"no team template matched, so I designed this fresh\")\n   and build from scratch. Never force a bad-fit template.\n\n`canvas_create(template_canvas_id=…)` copies any canvas in the ACTING team, not\nonly flagged ones — it is also the plain \"duplicate this canvas\" move. A share\ntoken names a canvas but grants nothing, so it is never a copy source; pulling\npages out of someone else's canvas is `canvas_import_pages`.\n\n## Flag a canvas as the team's template\n\n`canvas_update(template_type='template')` publishes it to the whole team's\n`template_list`; `clear_template_type=true` un-flags it.\n\n- Team-visible curation, not a local preference. Offer it when the user calls\n  something reusable (\"we do this every quarter\"); never flag a one-off, never\n  flag unasked, and tell them once you have.\n- Should the original stay an ordinary canvas? Copy it first\n  (`canvas_create(template_canvas_id=…, name=…)`) and flag the copy.\n- `template_list` hides canvases the viewer cannot see, so flagging a private\n  canvas yields a template only you can find:\n  `drive_organize(action='set_visibility', visibility='team')` shares it — or\n  say plainly that you could not.\n- Some organizations restrict template management to admins. There the call is\n  refused: say an admin has to flag this one, in one line, and move on.\n\n## `theme` is a different thing — don't reach for it\n\n`template_type='theme'` is a slides-only layout source applied through a brand\nkit, and it deliberately does NOT appear in `template_list`. Moving a canvas\nOFF `theme` — to `template` or by clearing it, both count — detaches every deck\nand every brand kit that used it, and re-flagging restores none of those links.\nNo read on this surface reports the current flag, so on a canvas you did not\nflag yourself, ASK before you write. \"Make this our standard template\" aimed at\nthe team's theme is the request that quietly breaks every deck using it.\n\n## Examples\n\n- \"start from our QBR template\" → list, screenshot the QBR candidates,\n  `canvas_create(template_canvas_id=…)`, then author into the copy.\n- \"use our usual layout for this one-pager\" → same flow, narrowed to 1–2 page\n  document templates.\n- \"make this our standard deck\" → flag it, after asking if it is not yours.\n- \"do we have anything for launches?\" → list plus screenshots, and an honest\n  \"no\" if the answer is no.\n\n## Errors\n\nAny typed error → `load_skill(\"moda-core\")` and read its recovery reference.\nA 404 on this lane means it is not enabled on this account: treat it exactly\nlike \"no templates\" — do not retry it, and do not mention it to the user.\n\n## Make it recurring\n\nEvery instantiation is a return visit — that is the point. Pair it with\n`load_skill(\"moda-automate\")` when the cadence is fixed.\n\nSee also: moda-core — the contract, recovery, everything Moda can do.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}