| name | compliance |
| description | Compliance and content checks that gate every outbound send. Used by the Composer (pre-draft) and the Cadence agent (pre-send). |
Compliance
Every outbound message — first-touch, reply, or templated cadence step —
must pass these checks. The Composer runs them at draft time. The Cadence
agent runs them again immediately before any auto-send (templates can
have new variable values, so the check is per-send not per-template).
Files in this skill
banned-phrases.md — exact strings the Composer must not emit.
Cliché outbound language plus voice-specific bans from
skills/outbound-voice/voice-dna.md.
suppression-list.md — emails and domains never to contact.
Maintained as a flat list. Append on opt-out; never remove without an
explicit human decision.
can-spam.md — CAN-SPAM requirements for US sends.
gdpr.md — GDPR requirements for EU/UK sends.
Checks
For every draft, in order:
- Suppression check. Is the recipient's email or domain on
suppression-list.md? If yes → hard fail. Move lead to
state: dormant with do_not_contact: true and never draft again.
- Banned-phrases scan. Any string from
banned-phrases.md in the
draft body or subject? If yes → redraft. Maximum 3 redraft attempts;
after that, save to Drafts with hold_reason: voice and flag for
human review.
- CAN-SPAM (US sends). Verify:
- Sender name and address match the configured
OUTLOOK_FROM
- Reply-to is a real, monitored mailbox
- A physical Synozur address appears in the signature
- An unsubscribe path exists (a plain "reply STOP works" line counts
for one-to-one B2B; bulk sends need a real unsubscribe link)
- GDPR (EU/UK recipients). Verify:
- Lawful basis recorded on the lead (
lawful_basis: in frontmatter:
legitimate-interest, consent, or contract). If absent → hard hold
until the operator records it.
- Subject and body contain no special-category data.
- Send-cap check. Per-rep daily, per-domain weekly, campaign
reply-rate floor. See
skills/kill-switches/triggers.md.
Failure modes
- Hard fail (suppression, GDPR-missing) → log, stop, do not draft again
without explicit operator action.
- Soft fail (banned phrase, send-cap) → save to Drafts with a
hold_reason. The operator decides whether to send by hand.
Audit
Every send must log to the prospect MD file's ## Audit section:
- Timestamp
- Compliance checks run
- Pass/fail per check
- Final disposition (sent / held / blocked)