Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add framix-team/skill-email-html-mjml --skill email-html-mjmlgit clone --depth 1 https://github.com/framix-team/skill-email-html-mjmlWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/framix-team/skill-email-html-mjml/email-html-mjml)<a href="https://agentmods.dev/skills/framix-team/skill-email-html-mjml/email-html-mjml"><img src="https://agentmods.dev/badge/skills/framix-team/skill-email-html-mjml/email-html-mjml/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/framix-team/skill-email-html-mjml/email-html-mjml"><img src="https://agentmods.dev/badge/skills/framix-team/skill-email-html-mjml/email-html-mjml.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Socket pass
- Snyk pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00090 | $0.02719 |
| Opus 5 | $0.00045 | $0.01359 |
| Sonnet 5 | $0.00018 | $0.00544 |
| Haiku 4.5 | $0.00009 | $0.00272 |
Grade C, and why
email-html-mjml scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Hidden instructionshighPrompt injection
Directives inside HTML comments, invisible characters or bidirectional overrides are read by the model and not by the person reviewing the file.
9. **Templating Support** — Plain interpolations (`{{firstName}}`) need no wrapping — they pass through text, attributes, `mj-title` and `mj-preview` untouched. Only block tags containing `<` or `>` (`{% if x < 5 %}`, `{ How it starts
The opening of the file, as written. The whole thing — 180 lines — stays where its author put it; the contents beside it link to each section on GitHub.
email-html-mjml — Responsive Email Developer
Generate valid, cross-client MJML 5.x templates and compile them to production-ready HTML. The primary goal is compatibility: Outlook (2013–365), Gmail (web/app), Apple Mail, and major mobile clients. Every output must be compilable with --config.validationLevel=strict and survive Gmail's 102KB clip limit.
Workflow
- Gather requirements — Infer email type, brand colors, and content from the user's message and conversation context. Ask only for what is genuinely missing and blocking progress (e.g., no colors provided and the layout has branded sections). Never front-load a questionnaire.
- Plan layout — Decide and announce the structure before writing code (single-column, 2-col grid, hero + content, etc.)
- Load component references — Read the relevant file(s) from the Component Index below before writing any MJML
- Generate MJML — Write complete, valid MJML starting from
<mjml>with a full<mj-head> - Compile — Follow
compilation.md. Runnpx mjmlwith--config.minify=true - Deliver both files — Always output
.mjmlsource AND compiled.html
9 Engineering Rules
- Structural Integrity — All visual content MUST be in
<mj-column>inside<mj-section>. Sections cannot be nested. - Responsive Defaults — Assume 600px width. Use
<mj-group>to prevent mobile stacking for side-by-side elements (social bars, logo rows). Use<mj-section gutter="...">for equal spacing between columns instead of padding tricks. - Outlook Compatibility — Use
<mj-font>for web fonts (prevents Times New Roman fallback). Always provide a fallback stack (Arial, sans-serif). For<mj-section>background images, always set bothbackground-sizeand a fallbackbackground-color. - Gmail Optimization — Use
inline="inline"on<mj-style>for custom CSS. Prefer component attributes (color,font-size) over CSS classes for critical styles. - Dark Mode — Include dark mode support when explicitly requested or when the email has a light background that would cause harsh forced-inversion. See the Dark Mode Pattern below.
- Accessibility — Every
<mj-image>MUST havealt. Always set<mj-title>(populatesaria-label). Maintain WCAG 2.1 AA 4.5:1 contrast. For heading roles, usemj-html-attributes— directrole/aria-levelattributes onmj-textare illegal under strict validation (see Accessibility Checklist below). - Styling Efficiency — Use
<mj-attributes>with<mj-all>, component defaults, and<mj-class>to eliminate repetitive inline styles. - Hero Sections — Use
<mj-hero>for full-bleed hero banners; it falls back to a regular section in unsupported clients. Avoid<mj-accordion>and<mj-carousel>— client support is too poor to be useful. - Templating Support — Plain interpolations (
{{firstName}}) need no wrapping — they pass through text, attributes,mj-titleandmj-previewuntouched. Only block tags containing<or>({% if x < 5 %},{{#if a<b}}) need<!-- htmlmin:ignore -->protection, or minify silently corrupts them. An<mj-raw>between content components inside a column emits its content between</tr>and<tr>— invalid markup; putmj-rawbetween sections, and keep templating tags out of<mj-style>(seecompilation.md).
What ships with it
13 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- assets/examples/basic-layout.mjml 3.7 KB
- assets/examples/newsletter.mjml 5.0 KB
- assets/examples/order-confirmation.mjml 4.1 KB
- assets/examples/partials/footer.mjml 742 B
- assets/examples/promo-sale.mjml 5.6 KB
- compilation.md 5.2 KB
- components/advanced.md 6.0 KB
- components/content.md 5.1 KB
- components/head.md 3.2 KB
- components/interactive.md 8.0 KB
- components/layout.md 4.8 KB
- LICENSE 1.0 KB
- mjml-reference.md 8.5 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 10d ago First seen · 180 lines · 90 tokens per session scan C 75243d18963a
email-html-mjml is a skill published in the GitHub repository framix-team/skill-email-html-mjml (69 stars, last pushed 1mo ago), licensed MIT. It adds 90 tokens to every session and 2,719 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it C with 1 finding (hidden instructions). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
page-flow-cleanup-audit
A review process for cleaning up a user-facing page or feature flow by tracing where its data and states come from. It checks loading, empty, error, permission, and lifecycle behavior before removing unnecessary code.
wp-ux-design
WordPress UX and design enforcement — Core Web Vitals, mobile-first layout, typography, color systems, navigation, page builder patterns, image optimization, form UX, loading and error states, admin UX, and performance checklists with concrete CSS/HTML/PHP examples.
interaction-skill
Layer A interaction-mechanics reference anchored to the beui.dev catalog. Stacks on any style skill whenever work adds or changes motion or interaction — micro-interactions, animated components, transitions, gestures, hover/press/state feedback, loading/success/error morphs, 'make it feel alive'. Mandates reading the…
layout-skill
Layer A layout-mechanics reference. Stacks on any style skill when the screen is an app shell, dashboard, settings, list-detail, mail/inbox, or any layout with fixed regions plus a scrolling body — or when a layout breaks under long, empty, or unbroken content. Owns spatial structure and scroll ownership; owns zero…
web-ui-best-practices
Signs of taste in web UI. Use when building or reviewing web interfaces, dashboards, SaaS apps, or internal tools.
shiny-bslib-theming
Advanced theming for Shiny apps using bslib and Bootstrap 5. Use when customizing app appearance with bstheme(), Bootswatch themes, custom colors, typography, brand.yml integration, Bootstrap Sass variables, custom Sass/CSS rules, dark mode and color modes, dynamic theme switching, real-time theming, theme inspection…