Build an AI Content Agent in Your Brand Voice
Adjectives do not transfer. What works is a voice spec made of hard rules, a banned list, and three annotated examples explaining why each line lands.
Your agent writes competent posts that could have come from anyone. You told it to be friendly and professional, it did exactly that, and the output reads like a company with no opinions.
Adjectives do not transfer. So here is the artefact instead: an AI content agent brand voice spec for your system prompt, three annotated examples, a channel modifier table, and a drift test. For the wider picture, AI agents explained covers what these agents do. This is the file that makes them sound like you.
Why “friendly and professional” produces nothing
The same brief twice. First with adjectives:
Brief A. Write a LinkedIn post announcing our new reporting feature. Tone: friendly, professional, approachable, human. Keep it on brand.
You know what comes back. A rhetorical question, an emoji doing a verb’s work, a closing invitation to share your thoughts. It is the median of everything ever posted, which is what you asked for: “friendly” names an effect on a reader, not an act a writer performs.
Now as rules:
Brief B. Write a LinkedIn post announcing our new reporting feature. First sentence states a number or a cost, never a question. Median sentence 14 words, none over 28. Second person, contractions on, no participial phrase before the subject. Never “excited to announce”. Close on one instruction. Structure: the common advice, why it fails, what to do instead.
And what Brief B gets back:
Three weeks: the usual lag between a monthly report and the decision it informs.
Teams report monthly because the calendar says so, not because anyone acts on it.
Reporting now runs on your schedule and lands the morning after a campaign ends.
Set yours for the day after your next launch.
Every line of that is checkable: count the words in the longest sentence, search for the banned string, see whether the last line instructs. Which gives you the only test a voice document needs. Can you fail a draft against this line? If two careful people would disagree about whether an output complies, it is a mood, not an instruction. A voice spec is the smallest piece of automating social media end to end you cannot buy from a vendor, because it is about you.
The voice spec, in full
Lift this block. Replace the angle-bracket slots and the example values with yours, keep the section order, and keep the last two sections above all.
# VOICE SPEC v1 - <BRAND>
# If a rule and an example disagree, the rule wins.
SPEAKER
One practitioner who has run <THING> for <N> years, telling a peer what
actually happened. Not a brand account.
HARD RULES (if you cannot fail a draft against it, it is not a rule)
R1 Second person. "We" only when reporting something we did.
R2 Median sentence 14 words. None over 28.
R3 First sentence states a number, a cost or a specific outcome. Never a
question, never a generality.
R4 Contractions on.
R5 One idea per paragraph, three sentences maximum.
R6 Any result claim carries a number, or the word "roughly".
R7 No modifier that does not change a decision. "Properly", "effectively",
"high-quality": name the thing instead.
R8 Active voice. If the actor is missing, name them.
R9 Spelling <US|UK>. Serial comma <on|off>. Numerals from 10 up.
R10 Close on one instruction the reader can carry out today.
BUDGETS (per post, not per month)
Em dash 0
Exclamation mark 0
Emoji 0, except <THE TWO YOU ALLOW>
Questions 1 max, never in the first line
Hashtags per the channel table (paste it below this spec)
BANNED - words
empower, journey, synergy, hustle, best-in-class, thrilled,
humbled, insane, literally, simply, pro tip
BANNED - constructions
Rhetorical question as an opener. ("Ever wondered why...?")
Three-word staccato. ("Fast. Simple. Done.")
Any participial phrase before the subject. ("Having run all three, we...")
List framing on a post that is not a list.
Closing on engagement bait. ("What do you think?")
GO-TO STRUCTURES (one per post; never blend two)
S1 Receipt number, what we did, what it cost, what you do
S2 Correction common advice, why it fails, what instead
S3 Walkthrough the task, three steps, the step people skip
S4 Postmortem what broke, the signal missed, the rule we added
S5 Teardown a real artefact, three annotations, the takeaway
HOOK PATTERNS (first line. Fill the slots, do not paraphrase.)
H1 "<NUMBER> <UNIT> of <THING>, and <BLUNT RESULT>."
H2 "<COMMON ADVICE> is wrong if <SPECIFIC CASE>."
H3 "We <DID THING>. Here is what it cost."
H4 "<THING> breaks when <CONDITION>. Ours broke on <DAY>."
H5 "Nobody tells you <CONCRETE OMISSION>."
NEVER CLAIMS
- A number we cannot name a source for.
- "Best", "#1", or a comparison to a named rival.
- A result for the reader. We report ours, and what varied.
- Guarantees, revenue outcomes, timelines.
- A client name or endorsement we were not given.
BREAKING A RULE
Once per post, on purpose, flagged: [breaks R7].
Measure R2, do not guess it. Run twenty of your own posts through a counter and read off your real median. Most people set it four words low, then fight clipped output.
Your banned list will not look like mine, and should not. The only wrong banned list is a short one. Mine grew out of real drafts: every time an output made me wince, the word went in that evening. The editorial config behind this site works the same way: a banned-phrase list plus a cap on em dashes per 500 words. An instruction to write plainly never catches what a named string catches.
The never-claims section earns its keep fastest. Style failures embarrass you; claim failures cost you, and a model asked to be persuasive invents a statistic the way it invents a transition. The spec stays constant under your per-post briefs, which live in our prompt library.
Annotated examples beat example dumps
Hand an agent five good posts with no commentary and it copies the surface: the line breaks, the lowercase opener, the colon in the second line. It takes the shape, misses the reason. Three below, each ending with what the agent must not copy, which stops it generalising from an accident.
Example 1 (LinkedIn, structure S2, hook H2)
“Post daily” is wrong if one person runs the account.
We ran five posts a week for a quarter, then two. Reach per post roughly doubled on the lighter cadence. Total reach was flat.
What changed was review time. At five a week nothing got a second pass. At two, everything did.
Pick the cadence your editing capacity supports, not the one the dashboard rewards.
- Line 1 names the advice and the exact case where it fails. No “controversial take” framing, just the condition. H2 with the slots filled.
- Line 2 carries the unflattering number too, which is why anyone believes line 4. R6 working.
- Line 3 is the mechanism, the part that transfers to another cadence, and line 4 instructs rather than summarises (R10).
- Do not copy the word “roughly”. That number was measured sloppily; on a precise figure it reads as hedging.
Example 2 (X, S4, H4)
Our queue published nothing for nine days and nobody noticed.
A token expired on the Sunday. The scheduler kept accepting posts and failing quietly.
New rule: alert when today’s published count is still zero at 16:00.
- Line 1 is the cost, not the cause. “Token expiry is a common failure mode” buries the part anyone cares about, and breaks R3.
- “Nobody noticed” makes this a postmortem rather than a brag, which is why S4 names the admission as a beat.
- Do not copy nine days. It works only because it was true.
Example 3 (Instagram, S3, H1)
Three settings I change on every new account before the first post.
1. Time zone on the account, not the device.
2. A default link, so a missed field cannot publish a blank.
3. Failed-publish alerts routed to one person by name.The third is the one people skip, and it costs a week.
- Counting in the hook is fine here because the body is a list. Saying so stops the agent over-applying the ban.
- Every item names a setting. “Set up your notifications properly” names nothing and cannot be acted on. R7’s job.
- Do not copy the number three. Use the number of real items you have, even when it is two.
Three is enough, if each shows a different structure. Twenty of one shape teach one lesson.
Per-channel tone without a second spec
Do not keep a voice document per network. You will update one, forget three, and six weeks later your LinkedIn and Threads voices are different brands. One spec, one modifier table.
| Channel | Target length | Formality shift | Hook | Hashtags | Link |
|---|---|---|---|---|---|
| 120–200 words | +1 (name the business consequence) | H2, H3 | 0–2 | Body or first comment | |
| X | Under 40 words | −1 (blunter, fragments allowed) | H1, H4 | 0 | Body |
| 60–120 words | 0 | H1, H5 | 3–5 | Profile only | |
| Threads | Under 500 characters (hard cap) | −1 | H4, H5 | 0–1 | Keep to one |
| Bluesky | Under 300 graphemes (hard cap) | −1 | H1, H4 | 0 | Body |
| Short video | Under 20 words | 0 | H5 | 2–4 | Profile only |
Two of those ceilings are real limits, not preferences: Threads documents a 500-character maximum for text posts, and a Bluesky post record is capped at 300 graphemes. The rest are editorial, the hashtag column especially, since no network publishes an optimal hashtag count first-party. Treat every number you have read as convention and set yours from your own reach.
The rule that keeps this to one document: a modifier may change length, formality, hook choice, hashtag policy and link placement, and nothing else. It never touches the speaker, the banned lists or the never-claims. A channel needing a different speaker is a second brand.
Testing for drift
Voice degrades while you approve things quickly, and you find out when a client asks why the account sounds like a different company. Measure it.
The drift test. Keep ten fixed briefs, never edited, two per go-to structure. Run all ten, then make one binary call each: would I publish this unedited? Not “is it close”, not “could I fix it in a minute”. Unedited, or it fails. Passes out of ten is your pass rate.
Tag every failure with one cause: off-voice, wrong structure, banned string, claim we do not make, missing hook pattern. The count tells you whether to worry; the tags tell you what to change. Those two are the rubric; a five-point scale only moves the argument. Log six columns: date, model and version, spec version, pass count, failure tags, who judged. In my runs a new spec scores three or four. Six or seven means a working agent, nine a stale test set. Your numbers will differ; what matters is that the number moves.
Feed the failures back, but only the repeats. A failure that happens twice in the same ten is a missing rule: write it as a checkable line, add it, bump the version. A failure that happens once is noise, and a spec absorbing forty one-offs contradicts itself in a dozen places. The model then picks which rules to honour, and your score falls for reasons you cannot see.
What a falling score usually means
- The model moved under you. Vendors update defaults, so a drop with nothing else changed is almost always this, hence the version beside the score.
- The example set rotted. Somebody added a recent post that performed but is off-voice, so pull it. Examples decay faster than rules.
- The spec outgrew what the model holds. Forty rules, several in conflict, and adherence collapses at the bottom of the list, so prune to the repeats.
- You are reading sampling noise. A score swinging from three to eight with nothing changed means temperature is too high for production.
Hold the judge constant and re-baseline when it changes. Check the brief before the spec, then run the test monthly and after any spec, model or example change. A rising pass rate changes what reviewers do, so it pairs with approval workflow design. At three out of ten every post needs a writer; at seven you spot-check and reject three.
Ten generations a run is not free when your tool meters AI usage. SchedPilot meters its caption and hook generation as GPT-5 credits per plan: 300 on Gold, none listed on Silver. Check your allowance before testing on a vendor’s generator.
Wiring the spec into an AI content agent
Three places it can live, same trade-off every time: adherence against maintainability.
In the system prompt. Highest adherence: it is in context on every call and cannot be skipped. You pay for those tokens every time, it competes with the brief, and anyone editing the voice edits your agent. Best under 600 words, the size of the block above.
In a file the agent reads with a tool. One source of truth, editable by whoever owns the voice, long enough to hold a growing example library. The catch: an agent that can read a file will sometimes not bother. Make the read a required step, not an option it weighs. Keep a ten-line summary in the prompt so a skipped read still leaves the rules in context.
In a vendor’s own brand voice feature. No plumbing, and the good ones learn from posts you paste in. You give up the half of the spec that does the work. Jasper’s Brand Voice documents tone settings and off-brand flagging, and documents no banned-word list, no per-post budgets and no never-claims section. On the pages checked, no version history either, so you cannot see what changed. Switching tools leaves the voice behind.
I have run all three. Rules, budgets, banned lists and never-claims go in the system prompt, because they are short and absolute. The example library goes in a file with a mandatory read, because it grows. The vendor feature stays off: two sources of voice truth are worse than either alone. For the other half of the build, assistant setup, step by step, and best AI tools for social media captions for choosing the writer.
Now the ceiling. A good spec does not reproduce your voice. It reliably produces something inside your acceptable range, a narrower and far more useful promise. Structure, banned strings, hook shape and claim discipline are mechanical, and those four are most of what makes AI output feel off. Judgement does not transfer: what is worth saying this week, which anecdote happened, when breaking your own rule is right.
So expect your best posts to stay yours, seven in ten of the rest to go out unedited, and the other three to be the job you kept. Start with the half that pays off today: ten hard rules, your banned list, the never-claims section. Paste it in, run ten briefs, write the number down. That baseline is what makes next month’s number mean anything.
Questions people actually ask
How do you train AI on your brand voice?
Write a voice spec, not a tone description. It needs hard rules you can fail a draft against, such as a maximum sentence length, a banned word list, named post structures and hook patterns with slots to fill. Add three examples annotated line by line, including what not to copy. Paste the whole thing into the system prompt and test it.
Why does AI writing sound generic?
Because adjectives are the only instruction most people give it. "Friendly and professional" describes an effect on a reader, not an action a writer takes, so the model returns the statistical middle of everything ever posted. Replace each adjective with a checkable rule and the output stops being median. Rules about sentence length, openers and banned strings do most of the work.
How many examples does AI need to learn a voice?
Three is usually enough, provided each one demonstrates a different post structure and is annotated. Twenty examples of the same shape teach one shape. Annotation matters more than volume: bare examples get imitated at the surface, so the agent copies the line breaks and misses that the first line always carries a number. Add a fourth as a near-miss.
Should you have a different voice for each platform?
No. Keep one spec and add a per-channel modifier table. A modifier may change five things only: target length, formality, which hook pattern to use, hashtag policy and link placement. It must never change the speaker, the banned lists or what you refuse to claim. If a channel needs a different speaker, that is a second brand.
How do you tell if AI output has drifted off-voice?
Run a drift test. Keep ten fixed briefs, generate ten outputs, then make a binary call on each: would you publish it with no edit at all? Count the passes and log the date, the model version, the spec version and a single failure tag per miss. Six or seven out of ten is a working agent.
Is a brand voice feature better than a prompt?
Usually not. Jasper's Brand Voice documents tone settings and off-brand flagging, and documents no banned-word list, no per-post budgets, no never-claims section and no version history; FeedHive says it learns your voice while documenting no voice-definition surface at all. A spec in your system prompt is shorter, auditable and portable. Use a vendor feature when it is the only writer in your stack.
Read next
Social Media Prompt Templates
Prompts with a voice block, variables and an output contract, organised by job. Not another list of 200 one-liners.
AI Agents for Social Media: What They Actually Do
Most things sold as an AI social media agent are a scheduler with a caption button. Here is the real distinction, and…
Human-in-the-Loop Approval Workflows That Hold
Approving everything is the same as approving nothing. Route by risk, put the checkpoint in the right place, and give the reviewer…


