Brand Voice Validation
Grade content against the brand's voice guideline: what matched, what crossed a boundary, what terminology slipped — with a number and actionable fixes, not a vibe.
When to use
Any time content needs a brand check before it goes out: a drafted post, an email, a proposal paragraph, ad copy, a caption — or to spot-check content an agent produced.
Tools this skill uses
| Tool | Why |
|---|---|
get-voice-context |
Load Bolta's compiled voice when no session guideline exists. Returns tone dials, tone_of_voice, dos/donts, persona, custom rules, target audience, business identity, and per-platform adaptations — it does NOT carry exemplar posts, terminology lists, or a We-Are/We-Are-Not table. |
list-voice-profiles |
Confirm which Voice Profile applies if the workspace has several. |
Scoring is done inline using the grading behavior in Step 2.
Prerequisites
- The content to score (pasted or referenced).
workspace_id— resolve once vialist-workspacesand reuse it. Auth is automatic via the Bolta connector's OAuth grant — never ask for an API key. Default new content to Draft; confirm before publish/delete.- A voice source, in this order (stop at first hit):
- A guideline produced this session by
brand-voice-generate. get-voice-contextfor the workspace (uselist-voice-profilesto pick the right profile).- If neither exists → stop, explain, and offer to run
brand-voice-discover→brand-voice-generatefirst. Do not score against an invented voice.
- A guideline produced this session by
Workflow
1. Load the standard
Prefer the session guideline (freshest). Otherwise get-voice-context; if multiple profiles
exist, list-voice-profiles and confirm which one governs this content.
2. Score against each dimension
Score only dimensions the loaded voice source actually carries — never grade against a dimension the standard doesn't define.
Always available (both sources):
- Dos — is each
dohonored? (matched / partial / missing) - Don'ts — any violated? (each violation is a hard deduction)
- Tone — does the register match the stated tone (
tonedials +tone_of_voicedescriptors), pacing, and content size? - Audience & persona — does it speak to the stated
target_audiencein the stated persona / speaker mode, and honor anycustom_rules?
Session-guideline only (skip when grading from get-voice-context alone — the compiled
context does not carry these):
- We Are / We Are Not attributes — each active attribute present? any boundary crossed?
- Terminology — must-use present, avoid/never words absent.
- Tone-by-context matrix — register matches the matrix row for this content type. On the
get-voice-contextpath, use theplatformsadaptations block (if present for this platform) as the context check instead.
Grade against the brand's OWN standard, not generic "good writing" — a blunt, no-emoji brand should score high for being blunt and emoji-free. Quote the line for every violation. Then compose the 0-100 score from the dimensions actually evaluated (weight don't-violations and boundary crossings heaviest), and say which dimensions were skipped and why.
3. Build the deviation report
List, specifically (covering only the dimensions scored in Step 2):
- Dos/attributes matched (with the phrase that earned it).
- Dos/attributes missing or weak.
- Don'ts or boundaries crossed (quote the offending text).
- Terminology issues (found → should be) — session guideline only.
- Tone mismatch (observed register vs. the expected tone or matrix row).
4. Return score + fixes
Give the score, a one-line verdict (on-brand / needs work / off-brand), and a numbered list of
concrete edits that would raise the score — quote the exact text to change and the replacement.
Offer to apply the fixes via brand-voice-enforce.
Failure handling
- No voice source → stop, explain, route to discover/generate. Never score against nothing.
- Guideline has open questions touching this content → score against the recommended default and note the assumption.
- Permission error on
get-voice-context→ report the missing scope; if a session guideline exists, use it instead.
Example
User: "Score this against our voice: 'We're thrilled to announce our game-changing new tool!'"
- Load session guideline → We Are: Direct, Proof-driven; We Are Not: Hype-driven; niche uses "platform" not "tool".
- Score: crosses "not Hype-driven" ("thrilled", "game-changing"); terminology miss ("tool").
- Deviation report: 0 We-Are matched, 1 boundary crossed, 1 never-word, 1 terminology miss.
- Score 34/100 — off-brand. Fixes: drop "thrilled to announce" → lead with the metric; "game-changing" → cut; "tool" → "platform". Offer to rewrite via brand-voice-enforce.