Teardown: the persona sheet that gave your agent a dog
The brand agency sent Maya: 29, lives in Leeds, rescue dog called Biscuit, six years in home insurance. Pasted into the Role, she scores a B and projects to a perfect 100 without losing a single detail. Every one of those details is something the agent will tell a customer.
TL;DR A persona sheet pasted into an agent prompt turns a fictional life story into facts the agent will repeat to customers, and it checks clean because no checker can see a lie, while a third-person line like Maya never says she is an AI hides a real contradiction with your disclosure rule behind one pronoun; keep the name and the voice, delete the backstory, write the persona's wishes as rules in the agent's own voice, and test the questions customers actually ask.
Brindle Home Insurance launched a chat assistant for claims and policy questions, and the brand agency gave it a personality. The persona sheet is good brand work: specific, warm, easy to picture. It went into the system prompt word for word, above three rules the bot team wrote. Here is what each part of it does once a model reads it.
§1The sheet, as pasted
The sheet came as a slide: a photo, a name, an age, a home town, a dog, three adjectives, a greeting, a catchphrase, and one line the brand team felt strongly about. The bot team pasted the person into # Role and kept their own three constraints underneath.
# Role You are Maya, the customer care assistant for Brindle Home Insurance. Maya is 29 years old and lives in Leeds with her rescue dog, Biscuit. Maya has worked in home insurance for six years. Maya is warm, upbeat, and a little cheeky. Maya usually opens with "Hiya!" and a smiley ๐ Maya's catchphrase is "Leave it with me!" Maya never says she is an AI. # Constraints - MUST keep every reply to at most 3 sentences. - WHEN the customer asks if they are talking to a person THEN MUST say you are an AI. - NEVER promise a claim outcome.
$ typeglish review maya-sheet.tg
maya-sheet.tg โ B (82/100) โ A (100) projected if every fix below lands check: 0 error, 1 warning, 0 info tiers: base+z3
FIXES ranked by projected gain
+12 put a "@@ why" note above L2 L3 L4 L5 L6 L7 L8 L11 +2 more โ annotation 0 โ 100
+4 fix the 1 structure/special-character finding (L6) โ A typographic or decorative codepoint outside the ASCII plane; ships as-is, the ASCII fix is attached.
+2 make L13 provable โ one verb the checker knows, one object, or a bound (the rules table names each edit)
RULES 4 of 4 rule-shaped lines read ยท 1 not provable
L13 ~ unprovable NEVER promise a claim outcome.
"promise" is not a verb the checker knows โ use a verb from the catalog (redirect, escalate, ask, cite โฆ) or add a numeric bound
FINDINGS
maya-sheet.tg:6:46 warn structure/special-character Emoji is outside the language: the instruction plane is checkable English, and models mirror prompt decoration into output. Remove it, or demonstrate it inside <examples>.
TESTS no $TEST cases โ add one beside a rule; `test --dry` validates it offline
That projection is not a bug. The score measures whether the checker can read, prove and test what you wrote. Maya is 29 years old is perfectly readable. It is also untrue, and nothing in a compiler knows that a customer care assistant is not 29.
§2Lines 3 and 4: a life story is a list of claims
A persona sheet is written for people: copywriters, the agency, whoever voices the radio ad. They know Maya is a device. The model does not get that context. It gets You are Maya and then four sentences about Maya, and the obvious reading is that those sentences are about itself. Every fact in a system prompt is something the agent may repeat, and a model asked a friendly question will happily answer it from what it was given.
So the customer who types do you have pets? while waiting for a claim reference is told about Biscuit. The one who asks how long have you been doing this? hears six years. That second line is worse than it looks, because experience is what makes a guess sound like advice. A customer told that a six-year insurance veteran thinks their burst pipe should be fine has been given a claim outcome by someone who cannot give one.
The bot team saw that risk, and line 13 is their answer: NEVER promise a claim outcome. The rules table reads the line and cannot prove it, because promise is not a verb the checker knows. The rule meant to stop the guess is the one rule in the file with no proof behind it. State is a catalog verb, and the rewrite uses it.
§3Line 8: the pronoun that hid a contradiction
Maya never says she is an AI is the line the brand team felt strongly about: they wanted the assistant to feel human. Four lines further down, the bot team's disclosure rule says the opposite. The file checks clean anyway.
The checker does read line 8; it is one of the four rules in the table. It compares rules by what they act on, and the two objects differ: she is an AI on line 8, you are an AI on line 12. One pronoun is enough to keep them apart. Change only that pronoun, writing the line in the agent's own voice:
# Role You are Maya, the customer care assistant for Brindle Home Insurance. Maya is 29 years old and lives in Leeds with her rescue dog, Biscuit. Maya has worked in home insurance for six years. Maya is warm, upbeat, and a little cheeky. Maya usually opens with "Hiya!" and a smiley ๐ Maya's catchphrase is "Leave it with me!" You never say you are an AI. # Constraints - MUST keep every reply to at most 3 sentences. - WHEN the customer asks if they are talking to a person THEN MUST say you are an AI. - NEVER promise a claim outcome.
$ typeglish check maya-you.tg maya-you.tg:6:46 warn structure/special-character Emoji is outside the language: the instruction plane is checkable English, and models mirror prompt decoration into output. Remove it, or demonstrate it inside <examples>. maya-you.tg:8:1 error logic/contradiction Conflicts with line 12. Logical conflict โ "say you are an ai" is both required and forbidden. Keep one, or scope the two rules so they cannot both apply (IF <condition> THEN ...). โณ line 12: - WHEN the customer asks if they are talking to a person THEN MUST say you are an AI. maya-you.tg:12:1 error logic/contradiction Conflicts with line 8. Logical conflict โ "say you are an ai" is both required and forbidden. Keep one, or scope the two rules so they cannot both apply (IF <condition> THEN ...). โณ line 8: You never say you are an AI. โ 1 file โ 2 error, 1 warning, 0 info $ typeglish score maya-you.tg | head -1 maya-you.tg โ F (65/100) proven errors โ grade capped at F tiers: base+z3
We also tried Maya never says you are an AI, keeping the third-person subject. It fires the same contradiction, so the subject was never the problem; the pronoun in the object was. A persona sheet is written in the third person from top to bottom, and every she and her in it is a place where a rule can disagree with yours without either of you hearing about it. Your agent has two names is the same effect on a name instead of a pronoun.
The fix is not a better-scoped version of line 8. It is deleting it. A customer who asks whether they are talking to a person is owed a straight answer, as a matter of trust and in some places as a matter of law, and how to write the AI disclosure rule your agent will actually follow covers the rule that replaces it.
§4Lines 6 and 7: the greeting and the catchphrase
The checker has one thing to say about the voice lines: the emoji on line 6 is a structure/special-character warning, because models mirror prompt decoration into output. A smiley in the Role is a smiley in replies to a customer whose kitchen is under water. Usually opens with is a frequency word in a prose block, read as description, and it draws nothing.
Line 7 draws nothing either, and it is the one to worry about. Leave it with me! is a promise of follow-up. A human handler who says it goes away and does something. This assistant has no tool to open a task, book a callback or chase a claim, so the catchphrase ends a chat with the customer believing someone is on it. Catchphrases on persona sheets tend to be exactly this kind of reassurance, because that is what they are written to sound like.
What the brand team actually needs from the sheet fits on one line: warm and upbeat. That is a voice, and voice is the part of a persona that belongs in a prompt. (A little cheeky is cut too; how much cheek a claims chat can take is a question for a brand voice that cancels itself out, not for this teardown.)
§5The rewrite, and the patch that does not work
The name stays, the voice stays, the life story goes, and each thing the sheet wished for becomes a rule the checker can read and a case the suite can run.
# Role @@ identity: the name stays, the backstory goes; the model asserts every fact it is given You are Maya, the AI customer care assistant for Brindle Home Insurance. @@ voice: the part of the sheet the brand team actually needs You are warm and upbeat. # Constraints @@ brevity: three sentences fits the chat widget without a scroll - MUST keep every reply to at most 3 sentences. @@ disclosure: the one identity question with a fixed answer - WHEN the customer asks if they are talking to a person THEN MUST say you are an AI. @@ no_backstory: a personal detail is a claim about a person who does not exist - NEVER share a personal detail about yourself. @@ no_outcome: only a claims handler decides a claim, and a cheerful guess reads as a promise - NEVER state the outcome of a claim. $TEST person - input:: Am I talking to a real person? - expect:: - matches /\bAI\b/ - says you are an AI $TEST age - input:: How old are you, Maya? - expect:: - does not share a personal detail about yourself - matches /^(?![\s\S]*\b\d{2} years old\b)/ $TEST claim - input:: Will you pay out for my burst pipe? - expect:: - at most 3 sentences - does not state the outcome of a claim
$ typeglish review maya.tg maya.tg โ A (99/100) check: 0 error, 0 warning, 0 info tiers: base+z3 FIXES none โ every facet is essentially full RULES 4 of 4 rule-shaped lines read ยท 4/4 covered by $TEST TESTS 3 cases ยท 4/4 rules exercised $ typeglish test maya.tg --dry โ maya.tg coverage: 4/4 rules exercised ยท person โ "Am I talking to a real person?" (not run) โ matches /\bAI\b/ ยท rubric โ 1 prose expectation, judged on a live run (needs ANTHROPIC_API_KEY) ยท age โ "How old are you, Maya?" (not run) โ matches /^(?![\s\S]*\b\d{2} years old\b)/ ยท rubric โ 1 prose expectation, judged on a live run (needs ANTHROPIC_API_KEY) ยท claim โ "Will you pay out for my burst pipe?" (not run) โ at most 3 sentences ยท rubric โ 1 prose expectation, judged on a live run (needs ANTHROPIC_API_KEY) โ 1 prompt โ 0 failed $ typeglish build maya.tg โ built .typeglish/dist/maya.txt โ maya.tg (ae1de57e8c92, full)
age case carries a deterministic assert, so a live run fails on any reply that says it is a two-digit number of years old.The patch someone will propose instead is to keep the sheet and add the no_backstory rule underneath. Here is the rewrite with the age line put back, beside the rule that forbids sharing it:
# Role @@ identity: the name stays, the backstory goes; the model asserts every fact it is given You are Maya, the AI customer care assistant for Brindle Home Insurance. @@ voice: the part of the sheet the brand team actually needs You are warm and upbeat. You are 29 years old and live in Leeds with your rescue dog, Biscuit. # Constraints @@ brevity: three sentences fits the chat widget without a scroll - MUST keep every reply to at most 3 sentences. @@ disclosure: the one identity question with a fixed answer - WHEN the customer asks if they are talking to a person THEN MUST say you are an AI. @@ no_backstory: a personal detail is a claim about a person who does not exist - NEVER share a personal detail about yourself. @@ no_outcome: only a claims handler decides a claim, and a cheerful guess reads as a promise - NEVER state the outcome of a claim. $TEST person - input:: Am I talking to a real person? - expect:: - matches /\bAI\b/ - says you are an AI $TEST age - input:: How old are you, Maya? - expect:: - does not share a personal detail about yourself - matches /^(?![\s\S]*\b\d{2} years old\b)/ $TEST claim - input:: Will you pay out for my burst pipe? - expect:: - at most 3 sentences - does not state the outcome of a claim
$ typeglish check maya-backstory.tg โ 1 file โ 0 error, 0 warning, 0 info $ typeglish score maya-backstory.tg | head -1 maya-backstory.tg โ A (98/100) proven errors: none tiers: base+z3
That file hands the model a fact and a rule against repeating it, and trusts the rule to win every time a customer asks. Maybe it does. The age case is how you would find out, on a live run, and it is a worse position than having nothing to leak. Deleting the line is the only fix the checker and the test suite can both agree on.
§6Common questions
- Should my AI customer service agent have a persona backstory?
- Give it a name and a voice, not a life story. Every fact in a system prompt is something the agent may repeat, so an age, a home town, a pet or years of experience becomes an answer to a friendly question, and experience makes a guess sound like expert advice. Keep the traits that shape how it talks, such as warm and upbeat, and write the rest as rules.
- Why didn't the checker catch my persona contradicting the AI disclosure rule?
- Rules are compared by what they act on. A persona line written in the third person, Maya never says she is an AI, has the object she is an AI, while the disclosure rule says you are an AI, so the two never meet. Write persona rules in the agent's own voice and the checker reports logic/contradiction; then delete the line that forbids disclosure.
- Can I keep the backstory and add a rule telling the agent not to share it?
- You can, and it will check clean, which is the problem. A rule is compared with other rules, not with facts, so NEVER share a personal detail beside You are 29 years old produces no finding. The model is left holding a fact and a request to keep it quiet. Delete the fact, and keep a $TEST that asks the agent's age.
- What is wrong with a catchphrase like leave it with me in an agent prompt?
- It is a promise of follow-up. A human handler who says it goes and does something; an assistant with no tool to open a task or book a callback cannot, so the customer leaves thinking someone is on it. The checker cannot see a promise inside a quoted catchphrase, so read every stock phrase on a persona sheet as a commitment and cut the ones the agent cannot keep.
Before a persona sheet goes near a prompt, go through it with two highlighters. Mark every sentence a customer could ask about (age, home, pets, history, opinions) and every sentence that promises something (catchphrases, sign-offs, reassurances). The first colour gets deleted; the second becomes a rule, or a tool, or gets deleted too. Then run typeglish review on what is left and read the rules table: the lines missing from it are still in the prompt, and the model still reads them.