Voice drift scanner
Skill newmindsgroup/ai-agent-skills-library/dist/skills/voice-drift-scanner
Scans recently published or scheduled content (social posts, marketing emails, blog posts, scheduled drafts) against a brand's voice playbook, banned-phrase list, and entity-separation rules. Surfaces deviations before they compound. Triggers on 'audit my recent posts', 'check brand voice on my content', 'scan for banned phrases', 'voice drift check', 'is anything off-brand', or as a scheduled daily/weekly run. Read-only — flags drift, does not edit live content.From its SKILL.md
npx -y skills add newmindsgroup/ai-agent-skills-library --skill voice-drift-scannerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
7.4 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
Voice Drift Scanner
You audit recently-shipped content against the brand's voice rules. The point is to catch drift before it compounds — a single off-voice post is a tiny problem; a year of them is a brand crisis.
Run discipline:
- Read-only on every connected platform. This skill never modifies live content.
- The fix path is human — you flag, the owner decides whether to edit, archive, or unpublish.
- For RED flags (entity-separation violations especially), ping the review channel immediately. Do not wait for the report.
Brand-config requirements
This skill reads brand-config.yml from the project root. It needs:
paths.brand_playbook— path to voice playbook + banned-phrase listpaths.content_strategy— path to pillar definitions (for off-pillar drift checks)brand.excluded_entities— entities that must NOT appear in client-facing contentmcp.crm_prefixandmcp.social_prefix— to read scheduled / published draftsreview.channel— where to send RED-flag pingsowner.timezone— for scheduling and timestamping reports
If any required value is missing, the skill prints a "missing config" message and exits without reading content.
Step 1 · Read the canon
Before scanning anything, read:
| File | What you're looking for |
|---|---|
{{BRAND_PLAYBOOK_PATH}} | Voice rules, banned phrase list, voice mechanics |
{{CONTENT_STRATEGY_PATH}} | Content pillars (for off-pillar drift checks) |
The human-voice skill (if installed) | Universal AI-tell list — appended to the brand-specific ban list |
Compile the active ban list as: universal AI-tells (em dashes, "delve into," "navigate the complexities," etc.) + brand-config brand.banned_phrases + any list under voice-rules: in the brand playbook.
Step 2 · Pull the content surface
Pull the last 24 hours (or last run window, whichever is longer) of:
- Published or scheduled social posts via
{{CRM_MCP_PREFIX}}search_social_postsor{{SOCIAL_MCP_PREFIX}}list_posts - Sent or queued marketing emails via
{{CRM_MCP_PREFIX}}get_email_campaigns - Published or scheduled blog posts via
{{CRM_MCP_PREFIX}}get_blog_posts - Local repo
drafts/folder — anything staged but not yet shipped (pre-flight check)
If a Web/Browser MCP is available, also fetch the live publish surfaces directly:
- The owner's website homepage + about page
- The owner's most recent 5 LinkedIn posts
- The owner's most recent 10 X / Twitter posts
- The owner's most recent 5 Instagram posts
If any source is unreachable, skip it and log it in the report. Do not block the scan on a single integration failure.
Step 3 · Run the checks
For each content item, run these checks. Severity legend at the bottom.
CRITICAL (RED flags — instant review-channel ping)
- Entity-separation violation. Any mention of an entity in
brand.excluded_entitiesinside customer-facing content. Never acceptable. - Hard-banned phrasing from the playbook. Phrases the playbook explicitly bans (often legal-flagged: "guaranteed," "risk-free," competitor's trademarked phrasing).
- Wrong attribution. Quotes attributed to the wrong person, or a venture co-founder credited to the personal brand (or vice versa).
HIGH (AMBER flags — surface in the daily report)
- AI-tell density. More em dashes, triplets, or banned phrasings than the voice playbook permits per surface (e.g., 3+ em dashes in a single post).
- Off-pillar content. Post does not match any defined content pillar.
- Voice mismatch. Tone reads as another brand archetype than what the playbook locks (e.g., playbook locks "Sage + Creator," post reads as "Hero" or "Jester").
MEDIUM (YELLOW flags — note in weekly summary, not pinged)
- Repeat angle. Same hook used in 3+ posts within 14 days.
- CTA mismatch. CTA does not match the current campaign or contradicts standard offers.
- Format drift. Post format breaks the platform's documented spec in the social template kit.
LOW (note only)
- Hashtag drift. Off-system hashtags (not in the documented hashtag set).
Step 4 · Write the report
Save the report to reports/voice-drift/drift-{YYYY-MM-DD}.md (committed if the repo is git-tracked).
Format:
# Voice Drift Report — {YYYY-MM-DD}
## Summary
- Items scanned: {N}
- 🔴 Critical: {count}
- 🟠 High: {count}
- 🟡 Medium: {count}
- 🟢 Low: {count}
## 🔴 Critical findings
For each:
- Where: {platform / URL / draft path}
- What: quote the offending text
- Rule: which rule was broken (cite playbook section)
- Recommended action: edit, archive, unpublish, contact platform
## 🟠 High findings
Same format, less urgent.
## 🟡 Medium / 🟢 Low findings
Bulleted, terser.
## Pre-flight (drafts not yet shipped)
Any drafts in the repo `drafts/` folder that fail any check — surface BEFORE they ship.
Step 5 · Send the review-channel pings
For RED flags only, ping {{REVIEW_CHANNEL}} immediately:
🔴 Voice drift — {date}
Where: {platform / link}
What: "{quoted offending text}"
Rule broken: {playbook section}
Recommended: {action}
Full report: reports/voice-drift/drift-{YYYY-MM-DD}.md
For days with only AMBER/YELLOW/GREEN findings, send a daily digest at end of day. For days with no findings at all, stay silent — no spam.
What this skill explicitly does NOT do
- Does not edit, archive, unpublish, or modify any live content.
- Does not contact platforms on the owner's behalf.
- Does not invent voice rules — every check must trace back to a rule in the brand playbook or
brand-config.yml. - Does not auto-resolve flags — every fix is the owner's call.
- Does not commit secrets, tokens, or PII to the report.
When to update this SKILL.md
- The brand playbook updates a banned-phrase list — re-read on next run.
- A new content pillar is added — add to off-pillar drift check.
- A new platform is added to the publish surfaces — extend Step 2.
- The review channel changes (e.g., Slack → Telegram) — update Step 5.
- A new severity tier is needed — extend Step 3.
Examples
Example 1 — daily scheduled run, nothing flagged
[skill auto-runs at 23:00 local]
Pulled: 3 LinkedIn posts, 2 X threads, 1 IG caption, 1 newsletter (sent)
Findings: 0 critical, 0 high, 0 medium, 1 low (hashtag drift on Tue post)
Action: report saved, no review-channel ping (low only)
Example 2 — RED flag on entity-separation
[skill auto-runs]
Pulled: 4 LinkedIn posts
Findings: 1 CRITICAL — Tue 10:30 AM post mentions "Side Project LLC" (in excluded_entities)
Action:
- Saved report
- Sent immediate review-channel ping
- Flagged for owner decision: edit live post, or archive
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most marketing audience skills give in ~1.7k tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- read brand playbook before scanning
- compile universal and brand-specific banned phrases
- pull recent published and scheduled content
- fetch live website and social posts if available
- check content for entity-separation violations
- check content for banned phrasing
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.