agentleFS
TrustPagerTrustPager/Business_Operating_System/skills/lint-nurture-sequence/SKILL.md

Lint Nurture Sequence

Skill8 starsChanged 5 months agoMITView on GitHub

Check a nurture sequence against the house style before it ships, or catch drift in a live auto queue — every email needs a clickable text CTA above the image, a consistent sign-off, a positively framed subject, a greeting, and HTML structure. Flags per-email problems AND set-wide inconsistency (the thing that makes a drip feel half-built).

The file

Files
SKILL.md

Lint Nurture Sequence

A nurture sequence underperforms when its emails drift apart — one has a bold clickable link above the image, the next only has the image (so anyone who blocks images has nothing to click); one signs off warmly, another just stops. This skill runs a deterministic check over the whole set and tells the operator exactly what's off, per email and across the set.

It's the quality gate between design-nurture-sequence (draft) and wire-nurture-sequence (ship) — and it works on a live queue too, to catch drift in something already running.

Step 1 — Pick the source

Two ways in:

  • A live auto queue — lint what's actually deployed:
    python ~/.claude/bos-run.py tool lint-sequence --queue <auto_queue_id> --json
    (Get the queue id from /nurture-health or python ~/.claude/bos-run.py tool dump-crm-bundle --resources auto_queues.)
  • Local drafts — lint before shipping, e.g. the drafts from design-nurture-sequence:
    python ~/.claude/bos-run.py tool lint-sequence --drafts drafts.json --json
    Drafts file: [{"label": "Day 0", "subject": "...", "body": "<p>...</p>"}, ...].

Useful flags: --signoff "Warmest regards, Sam" to match the operator's locked closer; --allow-em-dash if the operator is fine with em dashes (default flags them, because the house style avoids them).

Step 2 — What each check means

Per email:

CheckFails whenWhy it matters
subjectmissing / very longno subject = no open; long = the hook gets truncated
greetingno "Hi {{contact.first_name}}" up topa cold open reads like a blast, not a note
htmlbody isn't <p> HTMLplain text renders badly in Gmail
linkno link at allnothing to click — the email does no work
cta_above_imagethere's an image but no text link above itimage-blocked clients see no CTA — the exact gap that silently kills clicks
signoffthe sign-off block is missinginconsistent closers make the set feel unfinished
positive_subjectsubject leads with negationpositive, forward-looking subjects outperform
no_em_dashcontains —house style (relax with --allow-em-dash)

Across the set:

  • MIXED cta_above_image is a FAIL on purpose — some emails following the pattern and others not is the single biggest "half-built" tell.
  • Inconsistent sign-offs or P.S. presence are WARNs — align them unless the variation is deliberate.

Step 3 — Present and route the fixes

Lead with the verdict and the fails, then the warnings, then "the rest are clean". Translate each flag into the concrete fix.

Sequence lint — 7 emails: 2 fail, 3 warn

✗ Day 7  — Want AI to build your CRM for you?
     ✗ cta_above_image: image has no text link above it — add a bold "Connect Claude here:" link before the image
✗ Day 14 — Watch Claude wire up your pipeline
     ✗ cta_above_image: same issue
⚠ Day 21 — An automation that runs forever
     ⚠ signoff: 'Warmest regards' not found

Across the set:
  ✗ MIXED: Days 0/49 have a text CTA above the image, Days 7/14/21/28/38 don't — make it consistent.

Fix path: hand the failing emails to /design-nurture-sequence to rewrite, then
/wire-nurture-sequence to push the corrected copy. Re-run this lint to confirm green.

For live-queue fails, the fix is to rewrite the copy (design-nurture-sequence) and re-wire it (wire-nurture-sequence) — this skill never edits the queue itself. It only reports.

What to never do

  • ❌ Don't edit emails or the queue from this skill — diagnose and route only.
  • ❌ Don't soften a MIXED cta_above_image to a warning — inconsistency across the set is the failure that matters most.
  • ❌ Don't treat --allow-em-dash as the default — only pass it if the operator has said em dashes are fine in their voice.

Output shape

Open with the one-line verdict (N emails, X fail, Y warn). List failing emails with the concrete fix, then warnings, then the set-wide consistency findings. Close with the fix path (rewrite → re-wire → re-lint) and offer to kick it off.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.