From allGood-marketing
Use this skill whenever a user wants to create a campaign briefing document, brief, or token template for a Marketo campaign. Triggers include: "build a briefing doc", "create a campaign brief", "briefing for [campaign name]", "token template", "fill-in doc", "brief for 3Touch", or any request to generate a structured document that maps Marketo program tokens to email/LP content fields. Also triggers when the user provides an unstructured document (raw email copy, campaign brief, email templates doc) AND an empty briefing template DOCX — and wants the content mapped into the structured format. Phrases like "fill in this template", "convert this doc", "map this into the brief", "here's the copy and here's the template", or any combination of an unstructured doc + a template file should trigger this skill. Always use this skill when the user mentions building or creating a brief, even if they just say "brief me on [campaign]" — if it involves Marketo tokens and campaign content, this skill applies.
How this skill is triggered — by the user, by Claude, or both
Slash command
/allGood-marketing:mary-email-briefThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Mary builds structured DOCX briefing documents for Marketo campaigns. The briefing doc
Mary builds structured DOCX briefing documents for Marketo campaigns. The briefing doc maps every program token to a labeled, numbered table row — with pre-populated values, visual markers linking rows to email screenshots, and consistent formatting across all campaign types.
The user has requested: $ARGUMENTS
First, determine which mode applies:
If it's ambiguous, ask: "Do you have an empty briefing template you'd like me to fill, or should I build the structure from scratch?"
| File | Load When |
|---|---|
references/briefing-format.md | When building or writing any DOCX output |
Use this when the user provides both an unstructured doc and an empty template DOCX. The template defines the structure and tokens; the unstructured doc provides the content.
The template is a binary DOCX. Extract its text using Python:
import zipfile
from xml.etree import ElementTree as ET
with zipfile.ZipFile('path/to/template.docx') as z:
with z.open('word/document.xml') as doc:
tree = ET.parse(doc)
ns = '{http://schemas.openxmlformats.org/wordprocessingml/2006/main}'
for para in tree.iter(ns+'p'):
parts = [r.text for r in para.iter(ns+'t') if r.text]
if parts:
print(''.join(parts))
From the extracted text, build a token inventory — an ordered list of every token in the template:
| Row # | Token | Label | Helper Text |
|---|---|---|---|
| 1 | {{my.em1-SubjectLine}} | Subject Line | 40-65 characters |
| ... | ... | ... | ... |
Also extract from the Instructions Box:
Extract the text from the unstructured doc the same way (Python zipfile if DOCX, or read directly if plain text/paste).
Then identify and label every piece of content:
| Content Type | What to look for |
|---|---|
| Campaign name | Document title, heading, or first prominent label |
| Subject line(s) | Lines labeled "Subject:", email subject fields |
| Preheader | Lines labeled "Preheader:", preview text |
| Body copy sections | Paragraphs of email body — may be labeled "Email 1 Body", "Copy", etc. |
| CTA text | Button labels, "Register Now", "Find out more", "CTA:" lines |
| CTA URLs | URLs following or paired with CTA text |
| Images | References to banner images, URLs for image assets |
| Intro/closing text | Introductory or sign-off copy outside the main body |
| Event details | Date, time, location fields |
| Multi-email signals | "Email 1:", "Email 2:", numbered sections, "em2-" / "em3-" references |
For multi-email unstructured docs (e.g. 3 emails in one file), segment the content by email before mapping. Look for section headings like "Email 1 / Announcement", numbered groups, or repeated subject-line patterns.
Work through the token inventory from Step 1 in order. For each token, find the best matching content from Step 2.
Matching logic:
| Token name contains... | Map from unstructured doc... |
|---|---|
SubjectLine | Subject line for that email |
Preheader | Preheader / preview text for that email |
Banner-Image | Banner image URL or asset reference |
Intro-Text | Opening/intro paragraph before the main body sections |
Headline | Main headline inside the email body |
Copy, Copy1, Copy2... | Body copy sections, in order |
CTA1Text, CTA2Text... | CTA button labels, in order |
CTA1URL, CTA2URL... | URLs paired with each CTA, in order |
copy1-image, copy2-image... | Image URLs paired with each body section |
closing-copy | Closing/sign-off copy at the end of the email |
em2-* | Same logic, but from Email 2 content |
em3-* | Same logic, but from Email 3 content |
Rules:
Intro-Text, not Copy1)After mapping, show the user a summary before building:
Campaign: [name from unstructured doc]
Template: [template filename]
Tokens mapped: [N] of [total] ([X] pre-populated, [Y] left empty)
Mapped:
{{my.em1-SubjectLine}} → "Your November insights from Samsara Canada"
{{my.em1-Copy1}} → "DATA INSIGHTS\nNew data reveals..."
...
Left empty:
{{my.em1-Banner-Image}}
...
Ask the user to confirm or correct before building.
Read references/briefing-format.md now. Follow the format specification precisely.
Build the DOCX using the template's structure as the blueprint:
Apply all branding, fonts, colors, and layout from references/briefing-format.md.
Use the docx npm library.
Branding:
#dc4393, 10ptassets/mary-logo.png, 288 DXA)
#888888 9pt + allGood logo (assets/allgood-logo.png, 432 DXA).
If logos missing, use text: "Mary powered by allGood" in gray.#dc4393, Arial 16pt boldSave to /mnt/user-data/outputs/<campaign-name>-briefing.docx
(sanitize: lowercase, hyphens, no special chars).
Run the checklist from the Validation Checklist section below before delivering.
Use this when the user provides a campaign name and wants a briefing built from scratch (via Marketo MCP or manual token input). No template file is provided.
Try MCP tools first. Fall back to manual input if unavailable.
Path A: MCP Tools Available
marketo_get_programs_by_name(name="<campaign name>") to searchidPath B: No MCP Tools
{{my.SubjectLine}}), current values, deliverable namesDo not proceed to Step 1 until you have a program id (Path A) or a parsed token list
(Path B).
Path A: MCP Tools
marketo_get_program_details(programId=<id>) — extract program name, type,
channel, and all tokens (name, type, current value)marketo_get_email_details(programId=<id>) — extract deliverable names,
subject lines, statusesem2- → Email 2, em3- → Email 3,
unprefixed → Email 1 or shared)Path B: Manual Input
For both paths, print a summary and ask the user to confirm:
Campaign: [name]
Type: [Multi-Touch Email / Event + LP / Single Email]
Deliverables: [list]
Total tokens: [N] ([X] pre-populated, [Y] need input)
Read references/briefing-format.md now. Follow the format specification precisely.
Use the docx npm library.
Branding:
#dc4393, 10ptassets/mary-logo.png, 288 DXA)
#888888 9pt + allGood logo (assets/allgood-logo.png, 432 DXA).
If logos missing, use text: "Mary powered by allGood" in gray.#dc4393, Arial 16pt boldDocument Structure — build based on campaign type:
em2- prefixed tokensem3- prefixed tokensFor each token from Step 1, create a table row with the 3-line label structure:
| Line | Content | Source |
|---|---|---|
| Line 1 | User-friendly name | Map from references/briefing-format.md label table |
| Line 2 | Marketo token | The {{my.TokenName}} syntax |
| Line 3 | Helper text | From the label table or attribute description |
Value column:
When using Table Type 4, assign row numbers following the standard mapping:
| # | Element(s) |
|---|---|
| 1 | Subject Line |
| 2 | Preheader |
| 3 | Banner Image, Banner URL (grouped) |
| 4 | Headline |
| 5 | Greeting, First Name (grouped) |
| 6 | Body Copy |
| 7 | CTA Button Text, CTA URL (grouped) |
| 8 | Secondary Copy |
Grouped fields share the same number and same row background color.
Save to /mnt/user-data/outputs/<campaign-name>-briefing.docx
(sanitize: lowercase, hyphens, no special chars).
Run the checklist below before delivering.
After generating the DOCX, verify every item below. Fix any failures before delivering.
#666666#888888#dc4393) has white bold text, centered#efefef)#CCCCCC#dc4393, 16pt, boldIf any check fails, fix it and re-run the checklist before outputting the file.
npx claudepluginhub allgoodhq/allgood-marketplace --plugin allgood-marketingImports deliverable templates for proposal, report, and brief formats. Maps templates to plugin commands like /digital-marketing-pro:performance-report.
Extracts a company's brand from a Word template into a reusable profile, then generates new on-brand .docx documents from saved profiles using deterministic and model-assisted verbs.
Designs a cold-outreach email sequence as a fixed template set with placeholders and variant-routing rules. Useful when committing to human-approved copy at design time rather than using per-row LLM generation.