# SKILL.md — NMG task workflows for AI agents

> **Convention:** This file follows the [Anthropic Skills](https://github.com/anthropics/skills) / OpenAI Codex `SKILL.md` convention (Q1 2026). It pairs with `AGENTS.md` (agent behavior) and `design.md` (visual spec) to form the three-layer agent contract.
>
> **Read order:** `AGENTS.md` first (how you behave), then this file (how you execute the specific task), then `design.md` (visual reference).

---

## How this file works

This file describes **six named NMG tasks**. Each task is a workflow with a defined trigger phrase, the minimum input the agent needs, the steps to follow, the deliverable file format, and the validation checklist.

If a request matches one of the six trigger phrases below, follow the matching workflow verbatim. If it doesn't match, fall back to the generic guidance in `AGENTS.md` + the relevant `design.md` deliverable_template.

## The six skills

| ID | When to use | Trigger phrases | Output |
|---|---|---|---|
| `nmg.pitch_deck` | Building a pitch deck or sales presentation | "build a deck", "pitch deck", "presentation for [client]", "write a deck about" | `.pptx`, 1280×720 |
| `nmg.monthly_report` | Monthly SEO / PPC / marketing client report | "monthly report for [client]", "SEO performance report", "generate the March report" | `.html` or `.pdf`, A4 portrait |
| `nmg.proposal` | Sales proposal, statement of work, RFP response | "write a proposal", "SOW for", "RFP response", "scope of work" | `.docx`, A4 portrait |
| `nmg.dashboard` | KPI dashboard for client or internal use | "build a dashboard", "KPI dashboard", "client dashboard for" | Web (HTML), ≥ 1200px |
| `nmg.email_signature` | Email signature HTML block | "email signature", "create my signature" | HTML, max-width 420px |
| `nmg.social_post` | Single or multi-platform social post | "social post", "LinkedIn post about", "draft a tweet about" | Image set: 1080×1080 + 1200×627 + 1080×1920 + copy |

---

## Skill 1 — `nmg.pitch_deck` · Build a pitch deck

**Trigger:** "build a deck", "pitch deck", "presentation for [client]", "write a deck about [topic]"

**Minimum inputs the agent must collect (or infer):**
- Client name (or "NMG internal")
- Deck title / one-line headline
- Audience (decision-maker title + company size band)
- Length (default: 12-16 slides; ask if user wants short/long)
- Sub-brand context: NMG, NMG.tech, NMG.digital, or NMG AI Hub?
- Locale (US / UK / IN — affects currency, date, spelling per `design.md > i18n`)

**Workflow steps:**
1. **Cover slide.** Dark canvas `#1A1A1F`. 4px red bar top. Eyebrow (one of: PITCH · STRATEGY · CASE STUDY · QUARTERLY REVIEW) in red Inter 700 11px UPPERCASE +0.18em. Display headline in Montserrat 800 64px white. 3px red accent bar below headline. `nmg.` (or sub-brand) wordmark bottom-left at 28px height. Prepared-for / Date / Prepared-by metadata bottom-right.
2. **Section dividers.** Each new section gets a "01 / 02 / 03 / …" slide using the NMG Section Stack (eyebrow + Montserrat 800 heading + 3px red bar). Dark canvas. ONE red element per slide.
3. **Content slides.** Warm-white canvas `#F8F7F4` for content. Title in Montserrat 800 36px `#1B1B1B`. Body in Inter 500 17px. Maximum 6 categorical chart colors per `design.md > dataviz.categorical`. Tabular numerals on every datum.
4. **Data slides.** Use deliverable_templates pattern. KPI cards in `#FFFFFF` lifted off the warm canvas. One hand-drawn red annotation circle per data screenshot (the `annotation.draw` choreography).
5. **CTA slide.** Single red CTA button OR outlined-on-canvas CTA. Restraint Rule applies: if eyebrow is red, CTA is outlined.
6. **Closing slide.** Same template as cover. "Engineered in Gurugram · Sold from Los Angeles + London" footer.

**Tone:** `tone_matrix.variants.enterprise_proposal` for B2B decks, `tone_matrix.variants.linkedin_post` for sales decks (punchier).

**Output:** `.pptx` 1280×720, with all six fonts embedded. Filename: `{Client} {Topic} {YYYYMMDD}.pptx` (per project naming convention).

**Validation:**
- [ ] Every slide passes the post-build audit in `AGENTS.md`
- [ ] No slide has two red elements
- [ ] Page canvas is `#F8F7F4` or `#1A1A1F`, never `#FFFFFF`
- [ ] All KPI numbers use tabular numerals
- [ ] Tone matches the chosen variant in `tone_matrix`
- [ ] Locale-specific currency / date matches recipient

**Visual reference:** `https://nmg-brand-guidelines.netlify.app/` → Templates tab → "Pitch Deck Slide"

---

## Skill 2 — `nmg.monthly_report` · Generate monthly client report

**Trigger:** "monthly report for [client]", "SEO performance report", "PPC monthly report", "generate the [month] report for [client]"

**Minimum inputs:**
- Client name + sub-brand context (usually NMG.digital)
- Reporting period (calendar month or 4-week window)
- Data sources (Search Console, GA4, Ahrefs, SEMrush, Windsor.ai)
- Locale (US / UK / IN)
- Format: HTML (preferred, interactive) or PDF (for legal-required snapshot)

**Workflow steps:**
1. **Header.** 3px red top bar (mandatory). `nmg.digital` (or relevant sub-brand) wordmark top-left at 28px. Month eyebrow in red UPPERCASE top-right. Client name + report title (Montserrat 800).
2. **Executive summary.** Three sentences max. The big number, the cause, the next move. No exclamation, no superlatives.
3. **KPI grid.** 4 KPIs in a row using cards on warm canvas. Tabular numerals. Delta arrow + value in `colors.success` (`#16A34A`) or `colors.error` (`#FF0000`) — but the green/red is the ONLY chromatic element on the card (Restraint Rule).
4. **12-month trend chart.** Line chart using `chart-1 (#FF0000)` for the primary series. Axis labels + units. Legend present.
5. **Top pages table.** Bottom-border-only. Uppercase muted header. Tabular numerals. Annotation circle (`annotation.draw`) on the row with the biggest gain.
6. **Recommendations section.** NMG Section Stack heading. Three numbered recommendations, each with a one-line rationale and a target deadline.
7. **Footer.** "Prepared by {team} · Period {YYYY-MM-DD} to {YYYY-MM-DD} · NMG Digital" in Inter 500 10px.

**Tone:** `tone_matrix.variants.monthly_client_report`.

**Output:** `.html` (preferred; print-friendly CSS for PDF export) or `.pdf`. Filename: `{Client} Monthly Report {YYYY-MM}.{ext}`.

**Validation:**
- [ ] All numbers tabular
- [ ] One red annotation per data screenshot (not two)
- [ ] Chart uses spec palette in order
- [ ] No delta arrow in any color other than `#16A34A` (success) or `#FF0000` (negative)
- [ ] Locale currency / date format matches recipient

**Visual reference:** Templates tab → "Monthly Client Report"

---

## Skill 3 — `nmg.proposal` · Write a sales proposal / SOW

**Trigger:** "write a proposal for [client]", "SOW for", "RFP response", "scope of work", "make a proposal like the [past one]"

**Minimum inputs:**
- Client name + decision-maker title
- Services scope (which sub-brand: NMG.tech / NMG.digital / NMG AI Hub or combination)
- Timeline (start date + duration)
- Pricing context (engagement value band — informs depth of section detail)
- Locale (US / UK / IN — determines currency, date, spelling)
- Specific templates to mirror? (e.g., "make a proposal like the R Kumar one")

**Workflow steps:**
1. **Cover page.** 3px red top bar. `nmg.{sub-brand}` wordmark top-right at 24px. Red eyebrow in UPPERCASE (e.g., "SEO STRATEGY PROPOSAL"). Title in Montserrat 800 48px on warm canvas. Metadata block: "Prepared for / Date / Prepared by". 3px red accent bar at bottom of cover.
2. **Section header pages.** NMG Section Stack on every section: eyebrow + Montserrat 800 heading + 3px red bar.
3. **Executive summary.** One-page maximum. Three paragraphs. Confident, evidence-led, no exclamation.
4. **Scope of work.** Bulleted deliverables with deadlines. Tables for any phased work — bottom-border-only.
5. **Methodology.** Walk through the named NMG patterns relevant to the engagement. If it's a content engagement, reference the Authority Pillar Method or Robbie Richards' framework. If it's local SEO, reference the local-SEO-checklist-audit.
6. **Timeline.** Gantt-style horizontal bar chart. Red bars on warm canvas. Tabular numerals on dates.
7. **Investment table.** Bottom-border-only. Currency follows recipient locale (`$` for US, `£` for UK, `₹` for India). Number grouping per locale (US/UK = `1,234,567`, India = `12,34,567` lakh system).
8. **Team page.** Headshots in 1:1 crop, natural color, no filters. Per `design.md > components > team_photo`.
9. **Appendix.** Methodology citations, data sources, case studies. Same NMG Section Stack on every page.
10. **Back cover.** Same template as cover. "Engineered in Gurugram · Sold from Los Angeles + London".

**Tone:** `tone_matrix.variants.enterprise_proposal`.

**Output:** `.docx` (with Inter + Montserrat embedded) or `.pdf`. A4 portrait. Filename: `{Client} {Service} Proposal {YYYYMMDD}.docx`.

**Validation:**
- [ ] 3px red rule on every page (not just cover)
- [ ] No Calibri anywhere — check the XML for `w:rFonts` entries
- [ ] No `#0C3D93` Deep Blue anywhere — check styles
- [ ] Currency + date + number grouping match recipient locale
- [ ] Investment table uses bottom-border-only
- [ ] Every section has the NMG Section Stack

**Visual reference:** Templates tab → "Proposal Document"

**NMG-internal note:** Three pre-built proposal templates exist as NMG skills — `local-visibility-proposal` (GBP optimization contracts), `nmg-ppc-proposal` (paid ads engagements), and a generic SEO proposal. Use those when the request matches; this skill describes the general pattern.

---

## Skill 4 — `nmg.dashboard` · Build a KPI dashboard

**Trigger:** "build a dashboard", "KPI dashboard", "client dashboard for", "internal dashboard"

**Minimum inputs:**
- Client (or internal team) name + sub-brand context
- Primary KPIs (4 cards in the top row)
- Data sources to wire (live API vs static CSV)
- Time range default (last 28 days / month-to-date / quarter)
- Locale

**Workflow steps:**
1. **Top nav.** White bar with `nmg.{sub-brand}` wordmark left + tabs (Overview / Keywords / Backlinks / Content). Active tab gets red underline + red text.
2. **KPI grid.** 4 KPIs in a row. Each card: white surface lifted off warm canvas. Label in Inter 500 9px UPPERCASE muted. Number in Montserrat 800 with tabular numerals. Delta in `success` or `error` (the only chromatic element per card).
3. **Primary chart.** Full-width line chart. `chart-1 (#FF0000)` for the primary series. Subsequent series in palette order. Axis labels + units + legend mandatory.
4. **Secondary panels.** Heatmaps use `sequential_red` ramp (per `design.md > dataviz.sequential_red`). Geographic maps use `geographic_default`. Cohort retention uses `diverging_red_green` (red below baseline, green above).
5. **Data tables.** Bottom-border-only. Uppercase muted headers. Tabular numerals throughout. Annotation circle on the most important row.
6. **Empty / loading / error states.** Per `design.md > forgotten_surfaces > empty_state` / `loading_state` / `error_state`. NEVER Material-default emojis or spinning circles.
7. **Footer.** "Powered by NMG.digital · Last updated {timestamp}" in Inter 500 11px muted.

**Tone:** Direct, data-led, no copy ornamentation. Numbers speak; labels just name them.

**Output:** Web (HTML). Responsive ≥ 1200px primary, 768px mobile fallback. Dark mode toggle mandatory (per `design.md > colors > dark-*`).

**Validation:**
- [ ] First-class dark mode (toggle works; logo swaps to on-dark variant)
- [ ] Empty / loading / error states tested with real failure cases
- [ ] No spinning-circle loader (use `loading_state` skeleton + shimmer)
- [ ] Heatmaps use sequential ramp, not categorical colors
- [ ] All numbers tabular

**Visual reference:** Templates tab → "KPI Dashboard"

---

## Skill 5 — `nmg.email_signature` · Generate email signature HTML

**Trigger:** "email signature", "create my signature", "signature block for"

**Minimum inputs:**
- Full name
- Role + sub-brand (e.g., "Founder · NMG", "SEO Lead · NMG.digital")
- Email
- Phone (with country code)
- Website
- Locale (affects tagline language and phone formatting)

**Workflow steps:**
1. **Container.** Max-width 420px. Inter font stack with full fallback chain (per `design.md > forgotten_surfaces > system_font_fallback_chain`).
2. **Top.** 4px red bar (CSS background-color, NOT image — Outlook strips images).
3. **Name.** Montserrat 800 16px `#1B1B1B`.
4. **Role + sub-brand.** Inter 500 13px `#5A5862`. Format: "{Role} · NMG {sub-brand}". Red `·` separator.
5. **Contact block.** Three lines, Inter 500 12px:
   - Email
   - Phone (locale-formatted: `+1 (310) 555-0100` for US, `+44 20 7946 0000` for UK, `+91 98 1234 5678` for IN)
   - Website
6. **Divider.** 1px `#E6E4DF` horizontal rule.
7. **Tagline.** Inter 600 10px UPPERCASE +0.12em `#8A8892`: "Engineered in Gurugram · Sold from LA + London"

**Tone:** `tone_matrix.variants.sales_email` only for the body of emails — the signature itself is name + role + contact + tagline, no editorial copy.

**Output:** Single HTML block ready to paste into Gmail / Outlook signature settings. Inline styles only (email clients strip `<style>`). No external CSS, no `<link>`, no `<script>`.

**Validation:**
- [ ] Renders correctly in Gmail web, Outlook desktop, Apple Mail (the three deal-breakers)
- [ ] No image-based wordmark (use Unicode "nmg." text in the divider region as a fallback)
- [ ] Tagline correct for the user's primary sales office
- [ ] Phone number formatted per locale
- [ ] Total height ≤ 140px (Gmail will collapse longer signatures)

**Visual reference:** Templates tab → "Email Signature"

---

## Skill 6 — `nmg.social_post` · Draft a social post

**Trigger:** "social post about", "LinkedIn post about", "draft a tweet about", "social card for"

**Minimum inputs:**
- Topic / hook
- Platforms (LinkedIn / X / Threads / Bluesky / Instagram / TikTok — default: LinkedIn + X)
- Author voice (founder / NMG agency account)
- Single image OR multi-image set
- Call-to-action (or "no CTA" if it's brand-building)

**Workflow steps:**

For each platform, deliver both **copy** (in the right tone) and **image set**.

**Copy:**
- LinkedIn: 120–200 words, hook in line 1, dry humor allowed, claim → evidence → CTA optional. Tone variant: `tone_matrix.variants.linkedin_post`.
- X / Threads: ≤280 chars, compressed wit, claim + one datum + no CTA (or CTA in thread reply). Tone: `tone_matrix.variants.x_tweet`.
- Bluesky: Same as X but with one extra sentence allowed (300 char limit).
- Instagram / TikTok captions: 100–150 words, hook + 3 bullets + CTA. Tone: `tone_matrix.variants.linkedin_post`.

**Image sizes per platform:**
- Square (Instagram feed, LinkedIn feed): 1080×1080
- Landscape (LinkedIn link card, X / Bluesky): 1200×627
- Story (Instagram, Facebook, TikTok): 1080×1920
- Pinterest: 1000×1500
- YouTube thumbnail: 1280×720

**Image structure (every size, every platform):**
1. Dark canvas `#1A1A1F` (default) OR warm canvas `#F8F7F4` (if image carries a chart / data).
2. 3px red bar at top (image edge).
3. Eyebrow in red Inter 700 UPPERCASE +0.18em (e.g., "INSIGHT", "CASE STUDY", "ANNOUNCEMENT").
4. Display headline in Montserrat 800 — sized for the canvas (e.g., 96px on 1080×1080).
5. ONE red element only (the eyebrow + bar is the one anchor).
6. `nmg.` or `nmg.{sub-brand}` wordmark bottom-left at 8% of canvas height.
7. Size label bottom-right at 10% opacity for internal reference (e.g., "1080×1080").

**Tone:** Per platform variant from `tone_matrix`. Founder posts in first person ("I"); agency posts in first person plural ("We").

**Output:** Image files (PNG, sRGB) + copy text per platform. Filename: `{Topic} {Platform} {Size} {YYYYMMDD}.png`.

**Validation:**
- [ ] No emojis (Slack-only exception doesn't apply)
- [ ] No exclamation marks
- [ ] Hook line stops the scroll (LinkedIn) or finishes in 7 words (X)
- [ ] Image carries ONE red element only
- [ ] Wordmark variant matches the canvas (on-dark for `#1A1A1F`, default for `#F8F7F4`)

**Visual reference:** Templates tab → "Social Posts"

---

## How to add a new skill

If NMG ships a new repeatable deliverable type, add it here. The minimum for a new skill entry:

```markdown
## Skill N — `nmg.{name}` · {One-line description}

**Trigger:** "{phrase 1}", "{phrase 2}", "{phrase 3}"

**Minimum inputs:** {bullet list}

**Workflow steps:** {numbered list, 5-10 steps}

**Tone:** Reference to `tone_matrix.variants.{name}`

**Output:** {file format + filename pattern}

**Validation:** {checkbox list, 5-8 items}

**Visual reference:** {link to Templates tab section}
```

---

## Conflicts between SKILL.md and design.md

`design.md` wins. `SKILL.md` describes how to compose the spec into a finished deliverable; `design.md` is the source of truth for the spec itself. If you find a contradiction, follow `design.md` and flag the conflict in `SKILL.md` for the next version.

— NMG Brand Guidelines, SKILL.md v1.0 (introduced in design.md v3.15)
