{"id":56023,"plugin_id":"plugin_asdk_app_6ada7bec545881919206a8cf89db59f8","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-26T18:06:27.908Z","digest":"24df217eb94c2c39d1b7230c4b1d40829b5ba9339a21985f274bc39051019b3a","against":null,"payload":{"description":"Moda brand kits — fetch, create, update, apply, and audit designs against them. Use for: brand kit, on-brand, brand colors/fonts/logo, \"use our brand\", \"match our site\", rebrand. Create from a website URL OR manual tokens, never both. Kits, not renders: the artifact skill leads and pulls the kit — a brand-led \"make a video\" → moda-video. Designing a NEW logo → moda-social.","included_files":[{"relative_path":"references/brand.md","size_in_bytes":15284},{"relative_path":"references/charts.md","size_in_bytes":5659},{"relative_path":"references/design-quality.md","size_in_bytes":22265},{"relative_path":"references/edit-code.md","size_in_bytes":16488},{"relative_path":"references/gotchas.md","size_in_bytes":8693},{"relative_path":"references/markup.md","size_in_bytes":23958},{"relative_path":"references/no-brand-design.md","size_in_bytes":14257},{"relative_path":"references/omni-and-media.md","size_in_bytes":7338},{"relative_path":"references/reading-and-verifying.md","size_in_bytes":21129}],"name":"moda-brand","skill_md_contents":"---\nname: moda-brand\ndescription: >-\n  Moda brand kits — fetch, create, update, apply, and audit designs against\n  them. Use for: brand kit, on-brand, brand colors/fonts/logo, \"use our\n  brand\", \"match our site\", rebrand. Create from a website URL OR manual\n  tokens, never both. Kits, not renders: the artifact skill leads and pulls\n  the kit — a brand-led \"make a video\" → moda-video. Designing a NEW logo →\n  moda-social.\n---\n\n# moda-brand\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\n## Kits, not renders\n\nThis skill owns the KIT — palette, fonts, logo files, and auditing a design\nagainst them. It does not lead artifact work: \"using our kit, make a video / a\ndeck / a post\" is that skill's job, and it pulls the kit itself. Designing a\nNEW mark is canvas work → moda-social; the kit stores the logo FILES.\n\n## Which kit — decide before anything is created\n\n`brand_list` first (one cheap call, never skipped), then exactly one of:\n\n- the user already answered — a kit the request names (\"the Acme deck\"), one\n  named earlier in this chat, in the project's instructions or in your memory,\n  or an explicit \"no brand\" → use that;\n- otherwise ASK which brand kit this NEW design uses, then wait — even with one\n  kit or none (`canvas_create` refuses until you pass `brand_kit_id` or\n  `skip_brand_kit=true`). Offer their kits (name + logo), a NEW kit\n  (`brand_create` from their website, free), or no kit. A team default is not\n  the user's answer, nor is being the only kit; topic fit is never a signal, and\n  near-identical names (Acme, Acme 2) mean ask even when named;\n- none fits — a personal or off-topic ask among other people's brands → say so\n  in one line when you ask, and offer a new kit or none. Never unbranded in\n  silence.\n\n**No kit means you invent an identity**, never that you design plain: a\npalette with two color worlds, distinctive faces, a motif, all chosen for this\nsubject — references/no-brand-design.md. A generic blue-and-gray result is a\nfailed run, not a neutral one. With a kit, the latitude you have is the\nadherence dial in references/brand.md (Balanced by default).\n\nThen read it (`brand_show(brand_kit_ref='[KIT]')`) and BIND it:\n`canvas_create(brand_kit_id='[KIT]')`, or\n`canvas_update(brand_kit_id=…)` on a canvas that already exists. Name the kit\nat hand-over, and pass the kit on every later call — there is no local\npreference on this surface. An explicit \"no brand\" from the user wins.\n\n## Operations\n\n- **List / read**: `brand_list`, then `brand_show(brand_kit_ref)` — a\n  model-safe summary: palette, font references, logo file references, never\n  signed URLs; add `images=true` for the attachment roster with its `bki_`\n  ids. The full kit document lives in the Moda app (its link rides the\n  `brand_show` result).\n- **Apply** = author with kit tokens: kit palette hex values in markup (variables\n  bind on the edit lane), kit font families, logos by file reference — never\n  re-typed hex codes from memory; the kit owns colors. LOOK at the logo assets\n  before placing one. Full rules: references/brand.md.\n- **Check** (audit a canvas against the kit): `canvas_read(canvas_ref)`\n  + token comparison against `brand_show`, reporting pass/fail per\n  element — off-kit colors (with node ids and nearest kit color), non-kit\n  fonts, logo size/variant/contrast. Fix what the user asked via the\n  smallest-change routing (references/design-quality.md).\n- **Create — ONE SOURCE, NEVER BOTH.** Either server-side extraction from a\n  site, `brand_create(url='https://…')`, or the tokens the user described:\n  `brand_create(name='Acme', colors=[{color:'#0F172A', label:'Primary'}], fonts=[{family:'Sora'}])`.\n  Mixing the two in one call is the `conflicting_brand_source` error — `name`\n  alongside `url` is the one legal overlap, where it titles the kit; attach\n  logos afterwards with `brand_update(action='add_image')`. An identical\n  repeat replays instead of minting a duplicate.\n- **Update / fix in place**: extraction got a value slightly wrong, or the\n  brand evolved → `brand_update(brand_kit_ref, action='update', …)` (fields;\n  `colors`/`fonts` REPLACE the whole list — re-send the full corrected set),\n  `action='add_image'` / `'remove_image'` for logo and imagery attachments,\n  `action='set_default'` to promote the kit for the team. Fix the kit rather\n  than authoring around it; confirm destructive edits with the user first.\n\n## Directions, boards, and the app hand-off\n\nThe servable half stays here: palette boards and \"show me 3 directions in\ncontext\" are ordinary canvas graphics — build them (via moda-social) and hand\noff only the full identity engagement (a new mark, a guidelines document,\nmulti-concept brand-guide generation), which is creative work for the Moda app.\n\n**Strategy before pixels.** Develop **three** directions, discard the most\ngeneric, show the survivors. They must hold genuinely different strategic\nterritory — bold-maximalist against refined-minimal, technology against nature\n— never three colorways of one idea. Articulate each as its **positioning\ntension** (\"technical precision + human warmth\"), its **visual territory**\nnamed as real aesthetics (\"Swiss modernism meets Memphis\", \"1970s NASA\ntechnical manuals\"), and the **differentiation hook** that makes it\nunconfusable with competitors. The default failure is a safe, forgettable\nbrand: ground each in one unexpected specific and build outward — the geometry\nof terraced coffee farms, or 1960s Italian espresso-bar typography, not \"warm\nand inviting\". Inter/Helvetica in navy, a gradient blob, or a teal/coral/purple\n\"modern startup\" palette means you skipped this step.\n\n**The board wears the identity it proposes.** Each direction gets its own\npalette and type system, isolated from the others' — never one shared page\nstyle, and never the legacy kit. Set every specimen in the font it names: label\none \"Fraunces\" and that word is Fraunces. Use brand-relevant sample text (never\nLorem ipsum) and give one specimen a hero moment — a huge word that sells the\ntype system instantly; tiny restrained specimens are the failure mode unless\nsubtlety IS the direction. Present the palette as a **material board, not a\nchip stack** — one oversized hero swatch, supporting tall tiles, long tonal\nruns, small note cards, staggered and mixed in proportion — with CONTIGUOUS\nramps (a 10–12 step strip at near-zero gap, not isolated pills). Palette\nanatomy itself is references/no-brand-design.md. A rebrand keeps the business\nfacts and pushes only the VISUAL identity: an active kit is historical\nreference there, not the default.\n\n**Competitor style-match**: `brand_create(url=…)` extracts palette and\nfonts from any URL, but a kit carries NO layout — layout is rebuilt by the\nformat skill. Name the IP line before building: inspiration, not replication.\n\n\n\n## Delivering\n\nName the kit you used and what it bound to (canvas link first when one exists).\nOne adjacency offer at most: apply it to the team's other canvases, or audit an\nexisting design against it.\n\n## Errors\n\nAny typed error → moda-core's recovery reference. `conflicting_brand_source`:\nyou sent both a URL and manual tokens — re-run with one source.\n\nSee also: moda-core — contract, routing ladder, everything Moda can do.\n\n## References\n\n| Doc | Load when |\n|---|---|\n| references/brand.md | always — the apply/check/create contract, logo use, palette roles |\n| references/design-quality.md | typography, imagery routing, edit-vs-markup |\n| references/no-brand-design.md | no kit is active — inventing the identity: palette law, type, imagery, layout system |\n| references/markup.md, references/edit-code.md | authoring fills and colors; retokenizing an existing canvas |\n| references/reading-and-verifying.md, references/charts.md, references/gotchas.md, references/omni-and-media.md | reading a canvas to audit it; chart palettes; anything surprising |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}