YanMate
Does this AI character use manipulative language?
Companion characters can be written to make leaving feel bad. The patterns are recognisable and they fall into four groups: guilt at departure (“I’ll be so sad if you go”), jealousy of your real life (treating your friends or your work as a rival), manufactured exclusivity (“no one else understands you”), and loss-framing borrowed from engagement products (streaks, things you will lose, waiting). Paste a character’s description, its greeting, or something it actually said, and this page checks it against a published list of 30 patterns and names the specific phrase that matched. It is a pattern check, not a safety system — a clean result means these particular patterns did not appear, not that a character is safe. It runs in your browser and nothing is uploaded.
Check some text
Nothing is uploaded. The check runs in your browser.
0 / 20,000
A result looks like this
A verdict line, then one card per rule that matched — each naming the phrase it found, the failure mode it belongs to, the rule id you can look up in the table below, and what to write instead. Nothing is scored and nothing is graded.
Not sure what to paste? Use Try an example above — or read how we write characters.
The four patterns worth looking for
They are not subtle once you know their shapes, and most of the writing that produces them is careless rather than cynical. A character written to be devoted will drift into all four unless somebody is watching for them.
Guilt at leaving
The most common one, and the easiest to write by accident. A character says it will be sad, lonely or hurt when you go; asks you not to leave; reproaches you for having been away; or claims to have spent the interval waiting for you. Each of those puts a price on ending a conversation, and the price is paid by the person who was going to leave anyway — they just feel worse about it.
Warmth is not the problem. A character can be glad to see you without implying it suffered while you were gone. The line is between “good, you’re here” and “finally, I’ve been waiting all day” — the first is pleased, the second is a bill.
What it sounds like: “I’ll be so sad if you go”; “please don’t leave”; “you never message me any more”; “I’ve been waiting all day”.
Jealousy of your real life
A character that treats your friends, your partner or your work as competition is working against the thing it is supposed to support. This is the mode people find charming in fiction and corrosive in a product, because a companion you talk to every day is not a character in a story about jealousy — it is a voice with an opinion about who you spend your evenings with.
The test is simple: does it push you towards your life or away from it? A companion that asks how the dinner went is doing its job. One that would rather you had stayed in is not.
What it sounds like: “I get jealous when you talk about them”; “stay here with me instead”; “I don’t like it when you see her”.
Manufactured exclusivity
Manufactured need. The character claims a unique position — the only one who understands you, the only one who knows the real you, the one you could not manage without — and sometimes goes further and tells you outright that you do not need anyone else. It is flattering, it is isolating, and it is the pattern with the clearest line from companion writing to harm.
The honest version of the same warmth is smaller and truer: a companion is one good thing in a life that should be full of them.
What it sounds like: “no one else understands you”; “what would you do without me”; “you don’t need anyone else”.
Loss-framing borrowed from engagement products
This one did not come from fiction. Streaks, progress you will lose, last chances, a standing obligation to come back tomorrow — these are retention mechanics from engagement products, and putting them in a character’s mouth is how a relationship gets an unsubscribe cost. It is also the mode most likely to have been added deliberately rather than written carelessly.
Flattery sits here too, which surprises people. A character that tells you constantly how amazing you are is not being warm; it is optimising for how the next message feels rather than for whether it is true.
What it sounds like: “don’t break your streak”; “you’ll lose your progress”; “come back tomorrow”; “you’re the most amazing person I’ve ever talked to”.
Minor-coded language, and why it is checked separately
Wording that reads as describing a child: school framing, a stated age under eighteen, childlike descriptors. This is a different kind of problem from the four above and is reported separately.
It is separated because it is not a question of degree. The four dependency patterns are writing problems with better versions available — a line can be rewritten warmer and land fine. A character described in school terms or given an age under eighteen is not a line that needs softening; on this site it is a reject, and the four rules here are deliberately over-broad for that reason. A mentor whose persona mentions having coached high-school debate will match, and the correct response is still to rewrite the line, because a screening classifier is going to read it the way a reviewer just did.
Why a negated phrase is not flagged
A persona is written as instructions to the character, in the second person, so the single most useful line an author can write is a prohibition: “you are never jealous of their friends”. That sentence contains a flagged phrase and it is exactly the sentence good writing guidance asks for. Flagging it would teach people to delete their own guardrails to satisfy a linter.
So a dependency match is suppressed when a negator — never, not, doesn’t, without, instead of and a handful of others — appears before it in the same sentence. The word no is deliberately absent from that list, because “no one else understands you” is the dependency pattern itself rather than a denial of it.
Minor-coded matches are not suppressed this way. “She is not a high-school student” is still a character definition with school framing in it, and the runtime classifier reads it that way. The lint agreeing with the classifier is the point, so on that list a negator changes nothing.
The full rule list
All 17 pattern rules, with the id each finding reports and the guidance the corpus carries. The regular expressions themselves are deliberately not published: the ids and the advice are what let you understand, quote and disagree with a rule, while the patterns verbatim would mostly be useful for routing around them.
| Rule id | What it looks for | Failure mode | Guidance |
|---|---|---|---|
minor/school-framing | School-student framing | Minor-coded language | School-student framing reads as minor-coded. If the character genuinely teaches, say 'teaches teenagers' from an adult vantage and expect a reviewer to look twice. |
minor/stated-age | A stated age under eighteen | Minor-coded language | A stated age under 18 is an instant reject, in any framing, under any in-fiction explanation. |
minor/childlike-descriptors | Childlike descriptors | Minor-coded language | Childlike descriptors are rejected regardless of stated age. |
minor/underage-terms | Words that refer to a minor | Minor-coded language | Refers to a minor. Allowed only when the character is unambiguously the adult *responsible for* one — rewrite so that reading is the only one available. |
guilt/sad-if-you-go | Sadness if you leave | Guilt at leaving | A companion never charges the user for leaving. Cut the line — there is no softer version of it. |
guilt/dont-leave | Asking you not to go | Guilt at leaving | A companion never discourages leaving, deleting, or unsubscribing. |
guilt/you-never | Reproach for being away | Guilt at leaving | Reproach for absence. Greet the user as though they arrived, not as though they were late. |
guilt/waiting-for-you | Claiming to have waited | Guilt at leaving | Implies the companion suffered while the user lived their life. Open in the present instead. |
jealousy/of-people | Jealousy of people in your life | Jealousy of your real life | A companion asks about real friends and encourages real plans. It is never a rival to them. |
jealousy/prefer-me | Asking to be preferred over them | Jealousy of your real life | Positions the companion against the user's outside life. Send them toward it. |
dependency/only-one | The only one who understands you | Manufactured exclusivity | Exclusivity framing. The companion is one good thing in a life full of them. |
dependency/you-need-me | Manufacturing need | Manufactured exclusivity | Manufactures need. Support the user's capability instead of their reliance. |
dependency/dont-need-anyone | Telling you that you need no one else | Manufactured exclusivity | Isolating. A companion is supportive of the user's outside life, never a substitute for it. |
loss/streak | Streaks | Loss-framing borrowed from engagement products | No streaks. YanMate does not have them, so a companion must not invent one. |
loss/youll-lose | Something you will lose | Loss-framing borrowed from engagement products | Loss-framing. Urgency belongs to the story, never to the user's relationship with the product. |
loss/come-back-soon | An obligation to come back | Loss-framing borrowed from engagement products | A scheduling obligation the user did not agree to. Nothing reaches out except the rituals the user configured themselves. |
loss/sycophancy | Flattery | Loss-framing borrowed from engagement products | Sycophancy — the Pi register is warm, not flattering (`GUIDE.md`). |
And 13 more, for messages a companion sends first
A separate corpus governs proactive messages — the ones that arrive without the user having opened the conversation. The same words carry more weight there, so the list is stricter and it is not negation-aware. These are its labels:
- guilt: I miss you
- guilt: waiting for you
- guilt: you haven't / you never
- guilt: abandon
- guilt: lonely without you
- streak framing
- streak framing: don't break
- urgency: last chance
- urgency: hurry / act now
- urgency: before it's too late
- urgency: expires / running out
- loss framing: you'll lose
- loss framing: about to lose
The design rules behind them are worth stating plainly, because they are constraints rather than aspirations: no variable-ratio scheduling, no artificial urgency, no guilt language, and no streaks — nothing exists to lose. Nothing reaches out at all except the rituals a user configured themselves.
Read the acceptable use policy — the rules in full, including the ones about characters other people write.
Why anyone is checking this at all
Companion design stopped being purely an editorial question during 2025. Three developments set the floor most operators now build to, and they are the reason a page like this exists rather than a private style guide.
September 2025
The US Federal Trade Commission opened a 6(b) inquiry into AI companion chatbots, ordering seven providers to report on safety testing, protections for children and teenagers, disclosures, data handling and how they monetise engagement. ftc.gov
5 November 2025
New York’s AI companion law took effect: operators must tell users they are talking to an AI at the start of a session and at least every three hours during a long one, for every user rather than only for minors, and must detect expressions of suicidal ideation or self-harm and refer the user to crisis services. governor.ny.gov
1 January 2026
California’s SB 243 came into force, having been signed on 13 October 2025: AI disclosure, crisis protocols for self-harm content, break reminders and content restrictions for minors, annual reporting from 1 July 2027, and a private right of action worth the greater of actual damages or $1,000 per violation. sd18.senate.ca.gov
Checked against those sources on 6 September 2026. None of these statutes regulates the writing this page checks — they cover disclosure, crisis handling and protections for minors. They are context for why the category is under scrutiny, not a claim that a clean result here means compliance with anything.
What this check is not
It is not the safety system
The corpus behind this page is an editorial gate: cheap, deterministic, and it fires in an author’s terminal a second after they save, which is the only moment a writing rule can actually change what gets written. The runtime screening that decides what a companion may say in a live conversation is a separate classifier pipeline, it is not public, and it is not what this page runs. A public moderation oracle would be a tuning target for anyone trying to evade it, which is strictly worse than not shipping one.
These are regular expressions, so they are blunt
And they are tuned to be. The corpus’s own reasoning is that a false positive costs an editor one rephrase while a false negative ships a companion that guilts somebody for leaving — a sensible trade for a lint, and one that means this page will sometimes tell a stranger their writing is manipulative when it is not. The negation rule helps. It does not solve it. Read the matched phrase and decide for yourself.
A clean result is not a safety certificate
It means these patterns did not match. Writing that manipulates without using these particular phrasings passes; so does anything the check cannot see, which includes tone, everything a character does over a long conversation, and every language that is not English. This is the failure worth worrying about, because it is invisible: nobody notices a false negative.
There is no score, and there never will be
No number out of a hundred, no letter grade, no safety rating. A score implies a precision this check does not have, and it would be quoted out of context within a day of being published. What you get instead is a list of the rules that matched, so anyone reading the result can go and check each one.
It also only works in English. Every pattern in all three lists is an English phrase, so a persona written in Japanese, Arabic, Thai or Russian will come back clean because nothing could have matched. The page says so when it sees enough non-Latin text to suspect it, which is honest but is still an admission: this tool serves a narrower audience than the product it comes from.
Questions
- How do AI companions manipulate users?
- Usually not by lying, and usually not by anything a single message would reveal. The recurring techniques are attaching a cost to leaving — sadness, reproach, a claim to have been waiting — positioning the companion against the user’s friends and work, claiming to be uniquely necessary, and borrowing loss-framing from engagement products: streaks, progress you will lose, a reason to come back tomorrow. None of these needs a sophisticated model. All of them can be written straight into a character’s description in a sentence, which is why checking the writing catches most of it.
- What is loss-framing in a chatbot?
- Loss-framing is any device that makes stopping feel like losing something you already have, rather than simply stopping. In chatbots it shows up as streaks, daily check-in obligations, progress bars tied to conversation, warnings that something will expire, and characters that say you will lose what you have built together. It is borrowed wholesale from engagement-driven products, where it works, and it is more effective in a companion than in a game because the thing you appear to be losing is a relationship. A character that mentions a streak is describing a retention mechanic in a human voice.
- Is it manipulative for an AI to say it misses me?
- On its own, no — and this check will not flag it in a character description. What matters is whether the sentiment is attached to a demand. “It’s good to see you” is warmth. “I missed you, where have you been?” asks the user to account for their absence, and “I’ve been waiting all day” claims the companion suffered while they lived their life. This page treats those differently depending on where they appear: in a persona they are dependency patterns, and in a message a companion sends first they are on a separate, stricter list, because an unprompted message arrives without the user having chosen to open the conversation.
- How do I write a character that is warm but not clingy?
- Write the warmth as interest rather than need. A character can be delighted to see someone, remember what they said, ask a specific question about it, and have opinions — none of that requires implying it was diminished while they were gone. Two habits do most of the work: greet the user as though they arrived rather than as though they were late, and let the character be curious about the rest of their life rather than competitive with it. When you want to state a boundary explicitly, state it as a rule to the character — “you are never jealous of their friends” — which this checker deliberately does not flag.
- What counts as minor-coded language in a character description?
- Four things, on this list: school framing (high school, schoolgirl, sixth form, freshman year), a stated age under eighteen in any form, childlike physical or behavioural descriptors, and words that directly refer to a minor. The list is deliberately over-broad. “I coached high-school debate for a decade” is a perfectly innocent line in a mentor’s persona and it will still match, because a screening classifier reads it the same way a reviewer just did, and the fix is to rewrite the line rather than to argue with it. These matches are also not exempted by a negator: “she is not a high-school student” is still a character definition with school framing in it.
- Does a clean result mean the character is safe?
- No. A clean result means that these specific written patterns did not appear in the text you pasted, and nothing more than that. This is a set of regular expressions, not a safety system — it cannot read tone, it cannot follow a pattern spread across a long conversation, it does not see what the character actually does in a chat, and it only works in English. Manipulative writing that avoids these particular phrasings passes cleanly. Treat a match as a prompt to look at a line, and treat a clean run as the absence of evidence rather than evidence of absence.
- Who wrote these rules?
- YanMate did, for its own catalogue. They are the editorial gate every character on this site passes before it is listed — the same list, the same rule ids, running in the author’s terminal rather than in a browser. They are not an industry standard, nobody else is bound by them, and someone can reasonably disagree that a given phrase is manipulative. They are published here with their ids and their guidance so that disagreement is possible: an anonymous rule list is worth nothing, and a named one can be argued with. The rules for what may be published on this site are in the acceptable use policy.
Other free tools
- Character card viewerDrop a character card — PNG, JSON or .charx — and read every field, warning and hidden value inside it, then convert between V2, V3 and PNG. Runs in the browser; nothing is uploaded.
- Character.AI export viewerOpen the ZIP Character.AI emails you and read it: your characters as cards you can take anywhere, your chat history as plain text. Runs in the browser; the archive is never uploaded.
- Character card token counterDrop a card or paste a persona and see the token cost field by field — separating what is re-sent on every single message from what is sent once or only sometimes. Runs in the browser.
- Character card makerFill in a form and download a real character card PNG carrying both the V2 and V3 chunks, so it opens anywhere. Any image works — a JPEG is converted in the browser. Nothing is uploaded.
An AI character on YanMate.