From message
Creates and edits Markdown fragments for rich text drafts in Gmail, Outlook, and WhatsApp, assembling platform-specific HTML previews via Python build script with live server.
How this skill is triggered — by the user, by Claude, or both
Slash command
/message:messageThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create rich text messages that paste perfectly into Gmail, Outlook, or convert to WhatsApp-formatted text. Fragments are written in Markdown - the build script converts to platform-specific HTML automatically.
Create rich text messages that paste perfectly into Gmail, Outlook, or convert to WhatsApp-formatted text. Fragments are written in Markdown - the build script converts to platform-specific HTML automatically.
Claude writes Build script assembles Output (separate file)
name.fragment.md ---> Markdown -> HTML name.html
(10-30 lines) Gmail transform (tags) (self-contained preview
Outlook transform (styles) with three body versions)
Inject into shell.html
The fragment is the source of truth. The assembled HTML is a derived output. Never edit the .html output directly.
.fragment.md file to data/writing/email_drafts/--serve to produce the preview HTML and launch the serveruv run .claude/skills/message/scripts/assemble.py /path/to/name.fragment.md --serve
Run with run_in_background: true. The server picks a random free port and prints the URL. The preview auto-refreshes when the HTML file changes - no manual browser refresh needed.
When editing an existing email (argument provided, or user asks to change something):
.fragment.md file--serve to rebuild the previewuv run .claude/skills/message/scripts/assemble.py /path/to/name.fragment.md
The preview server is still running in the background from the create step. The assembler overwrites the HTML file atomically, and the browser auto-refreshes within 2 seconds. Do not re-launch the server on edits - the user keeps the same URL.
Fragments are Markdown files with YAML frontmatter:
---
to: [email protected]
cc: [email protected]
subject: Email Subject
---
Hi **Stuart**,
Here's the ~~old approach~~ new approach.
## Key Points
- First item
- Second item
> Quoted text from previous email
| Feature | Status |
|---------|--------|
| Auth | Done |
Inline `code` and [a link](https://example.com).
Cheers,
Henrik
| Field | Required | Notes |
|---|---|---|
to | Yes | Comma-separated recipients |
subject | Yes | Email subject line |
cc | No | Hidden in preview if empty |
bcc | No | Hidden in preview if empty |
Standard Markdown maps to platform-specific HTML automatically:
| What you want | Write in Markdown |
|---|---|
| Bold | **bold** |
| Italic | *italic* |
| Strikethrough | ~~strikethrough~~ |
| Heading | ## Heading |
| Bullet list | - item |
| Numbered list | 1. item |
| Blockquote | > quoted text |
| Inline code | `code` |
| Code block | triple backticks |
| Link | [text](url) |
| Table | ` |
For features not in standard Markdown, embed HTML directly (it passes through unchanged):
| What you want | Embed as HTML |
|---|---|
| Custom colour | <span style="color: #c0392b;">red text</span> |
| Large text | <font size="4">larger text</font> |
| Underline | <u>underlined</u> |
| Indent | <blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">indented</blockquote> |
User: "Write an email to Stuart. Strikethrough '$5000' and make his name red."
Claude writes .fragment.md:
---
to: [email protected]
subject: Pricing Update
---
Hi <span style="color: #c0392b;">Stuart</span>,
The old pricing was ~~$5000~~ but the new rate is $3000.
Cheers,
Henrik
data/writing/email_drafts/YYYY-MM-DD_recipient_subject.fragment.md <- source
data/writing/email_drafts/YYYY-MM-DD_recipient_subject.html <- assembled output
Examples:
2026-02-12_veronika_audit-proposal.fragment.md2026-02-12_danielle_project-update.fragment.mdThe build script produces three HTML versions from a single Markdown source:
Gmail (tag transform): Converts semantic HTML to Gmail-native elements. <p> becomes <div>, <strong> becomes <b>, <em> becomes <i>, headings become <font size> with <b>. Container gets Arial 13px. No custom colours added - only platform defaults.
Outlook (style injection): Adds inline styles to every element for Word's rendering engine. Aptos/Calibri 11pt, explicit color: #000000 on every text element, mso-line-height-rule for spacing control. No custom colours added - only platform defaults.
WhatsApp (text conversion): Strips HTML and converts to WhatsApp markdown - *bold*, _italic_, ~strikethrough~. Tables become pipe-separated text.
User-specified inline styles (colours, font sizes) are preserved through all transforms.
The assembled HTML has a Gmail/Outlook/WhatsApp mode toggle:
Instruct user:
Legacy .fragment.html files still work. The assembler detects the extension and uses the appropriate parser. For HTML fragments, the same body is used for all three platform views (matching previous behaviour).
Follow this order in every email:
The recipient should know what the email is about within the first two lines. Warmth is the exit feeling, not the entrance.
Use these when composing emails on Henrik's behalf:
| Purpose | |
|---|---|
| Primary / From address | [email protected] |
| Google platform access requests (GA4, GTM, Google Ads, Search Console, etc.) | [email protected] |
Sign-off block:
Henrik Soederlund
Independent Digital Consultant
[email protected]
references/outlook-formatting.md - Outlook element styles and colour palette referencereferences/formatting-rules.md - Gmail native HTML element referenceOnce the user has the preview URL, ask whether they'd like to run the humaniser skill on the message to remove any AI writing patterns before sending. Example prompt: "Would you like me to run the humaniser skill on this draft to make it sound more natural?"
After saving a draft, prompt Henrik: "Log this to the client comms log?" If yes, write the entry to data/consulting/clients/[slug]/comms/_comms-log.json via inline Python or the Edit tool (manage_comms.py is read-only - no --add flag).
npx claudepluginhub henkisdabro/wookstar-claude-plugins --plugin messageComposes high-converting emails using copy frameworks (PAS, AIDA, BAB, FAB, 4Ps). Generates scored subject lines, responsive HTML templates with dark mode, plain-text fallback, preheaders for cold outreach, newsletters, launches.
Drafts professional emails using What-Why-How framework for software developers. Use for status updates, requests, escalations to colleagues, stakeholders, or leadership.
Drafts newsletters, onboarding emails, and broadcasts in your voice, using a personal copy corpus and anti-slop pass. Renders to your email template and optionally ships to Resend.