skill by
@loopsUse this skill whenever LMX is used, produced, reviewed, migrated, or modified. This includes composing campaigns, loops, lifecycle emails, or email-message bodies for the Loops editor or Content API. LMX (Loops Markup Language) is the format used for Loops email content. Trigger on phrases like "create a campaign", "generate an email", "write a welcome email", "draft a lifecycle email", "build an email template", "create an onboarding email", "copy this into LMX", "migrate this email", "convert this email to LMX", "design a new Loops email", "use imagegen for a Loops email", "use gpt-image for an LMX reference", "visual reference for a Loops email", "LMX", "Loops email", or any request to produce, copy, migrate, convert, review, or modify email body content intended for Loops. For net-new emails or major visual redesigns, follow this skill's Net-New Email Design Flow before generating or sourcing new visual assets. Source copy, existing HTML, MJML, Markdown, screenshots, and migration instructions do not bypass this skill's rules unless the user explicitly overrides a specific rule. Do not trigger for questions about the Loops HTTP API, SDK integration, or CLI unless email body content is also involved.
Permissions
Files
Use this skill whenever LMX is used, produced, reviewed, migrated, or modified. This includes composing campaigns, loops, lifecycle emails, or email-message bodies for the Loops editor or Content API. LMX (Loops Markup Language) is the format used for Loops email content. Trigger on phrases like "create a campaign", "generate an email", "write a welcome email", "draft a lifecycle email", "build an email template", "create an onboarding email", "copy this into LMX", "migrate this email", "convert this email to LMX", "design a new Loops email", "use imagegen for a Loops email", "use gpt-image for an LMX reference", "visual reference for a Loops email", "LMX", "Loops email", or any request to produce, copy, migrate, convert, review, or modify email body content intended for Loops. For net-new emails or major visual redesigns, follow this skill's Net-New Email Design Flow before generating or sourcing new visual assets. Source copy, existing HTML, MJML, Markdown, screenshots, and migration instructions do not bypass this skill's rules unless the user explicitly overrides a specific rule. Do not trigger for questions about the Loops HTTP API, SDK integration, or CLI unless email body content is also involved.
Install
It’s free, and every skill you add syncs into every AI tool on your computer, instantly.
Version history
This skill helps write, review, and generate correct LMX email markup for Loops. LMX is an XML-based format: every element is a PascalCase tag, self-closing tags require />, and only the tags in the spec are valid.
Use this skill when the task involves:
When this skill is active:
references/lmx-spec.md for the full tag and attribute reference. It is authoritative; do not invent tags or attributes.references/lmx-design-guidelines.md for Loops design guidelines. Apply these to every document you generate unless the user explicitly overrides a rule.Tag definitions, required/optional attributes, nesting rules, content types, variable syntax, self-closing requirements, or escaping:
Read references/lmx-spec.md
Color contrast, spacing, column rounded corners, Style tag usage, visual hierarchy, or any "how should this look" question:
Read references/lmx-design-guidelines.md
Net-new email design, substantial redesigns, or gpt-image/imagegen references:
Read references/lmx-design-guidelines.md, especially the Net-New Email Design Workflow and Reference-to-Render QA sections. Use the imagegen skill in Codex only when a suitable Loops-native or user-provided reference is not available and the task still needs a visual reference.
Creating campaigns, posting LMX via the API, revision IDs, themes, components, or image uploads:
Use the loops-api skill (HTTP) or loops-cli skill (terminal). This skill covers the LMX document itself.
Use this flow when creating a brand-new campaign, lifecycle, workflow, or transactional email, or when the user asks for a substantial visual redesign.
references/lmx-design-guidelines.md.imagegen/gpt-image reference only when the task still needs visual exploration.Style, Section, Columns, Paragraph, H1, H2, H3, Button, dividers, checklist rows, and simple image placeholders.Section cards, and shared-background Columns where appropriate.{contact.*} for campaigns and workflow emails; {event.*} for workflow emails when the value comes from the triggering event; {data.*} only for transactional emails.Before returning any LMX output, verify:
/> (e.g. <Image />, <Divider />, <Br />, <Icon />, <Style />)& as &, < as <, and " in attributes as "src on <Image />, componentId on <Component>, name on <Icon />, and href on <Link><Button href>, <Link href>, <Image alt/href/dynamicSrc>, and <Section href>{contact.apiName}; workflow emails use {contact.apiName} and/or {event.propertyName}; transactional emails use {data.variableName} (not unprefixed {variableName} or {DATA_VARIABLE:...})<Button> text has no inline tags, but can contain variables; include href for clickable CTA buttons<CodeBlock> treats braces literally<Style /> appears at most once as a top-level tag; put it first in generated outputthemeId or explicit bodyColor/ plus / when neededIn these kits
Works with
Claude, Codex, Cursor & morebackgroundColorbodyXPaddingbodyYPadding<H1>, <H2>, and <H3> text does not end with a period; question marks or exclamation points are used only when intentional<H1>, only necessary <H2> breaks, and <H3> only for real nested hierarchy<Button> text is concise, action-oriented, and does not end with a period<Section> is used sparingly for callouts, grouped controls, linked groups, or an explicit card-style layout; ordinary body copy is not wrapped into many floating cards by default<Section> siblings are separated with a line-break spacer unless the user explicitly specifies a different section-spacing approachblockColor paragraphs, columns, and sections, are separated with visible vertical space unless they are intentionally one connected card<Columns> has two to four <ColumnItem> children, with widths matching the column count when providedsrc plus dynamicSrc, not variables in src<Icons color> uses one of #000000, #808080, or #ffffff; <Icon> has no color attr