← All posts

Published April 8, 2026 · Updated September 7, 2026

How KOPY generates replies that actually sound like you

A look under the hood at how we build prompts that avoid AI clichés and generate replies that feel human.

By Sebastian Kluger · Founder of KOPY · 8 min read

KOPY logo on light background

The hardest part of building an AI reply tool is not generating text. It is generating text that does not sound like AI wrote it. This article is how KOPY's prompt stack tries to clone your conversational habits at the model layer: banned vocabulary, mode/tone stacking, energy matching, specificity tests. It is not the user-habits guide (how to keep your voice) and not the linguistic failure-mode catalog (why AI replies sound robotic). Those three pages should stay distinct. I wrote them that way on purpose.

Key takeaways

  • We block default LLM diction and structural tics in the system prompt.
  • Mode sets register. Tone sets angle. Temperature is not the same for Work and Dating.
  • If a reply could fit any incoming message, it fails the specificity test and we treat that as a bug.

Banned vocabulary

The first layer is a list of banned words and phrases models reach for: delve, tapestry, leverage, utilize, transformative, embark, facilitate. Replace with use, start, help. We also ban structural habits: no em dashes in casual, no semicolons in texts, no bullet points in replies, no "Absolutely!" openers.

I update that list when a new tic shows up in dogfood. Models drift. Prompts are living objects. This is unglamorous maintenance, which is most of "voice clone" work.

Mode and tone stacking

A Slack reply to your manager should not sound like Hinge. KOPY layers a Mode (Social, Work, Dating, Insight) and a Tone (Funny, Agree, Rizz, Question, and friends). Social leans lowercase and can drop the final period. Work uses contractions but keeps capitals. Dating prioritizes specificity over cleverness.

That is the product. Not a single "make it good" button. Engineering of the keyboard that hosts it: iOS keyboard extensions.

Energy matching

If someone sends "!!!! I can't believe it happened" and you reply with a calm measured sentence, you are tone-deaf. We encode energy matching: excitement gets some heat, sad gets lower energy, one-word gets short. Temperature is higher in Social/Dating, lower in Work.

This is still a heuristic. Humans will beat it. The model is a prior. You are the posterior. Edit.

Specificity over generality

"That sounds amazing!" fails the test: it could answer anything. Instruction: reference at least one specific element from the incoming message. Place, person, activity, detail.

When testers say "it sounds like me," they usually mean it mentioned the dog's name. When they say "it sounds like AI," they mean it praised the vibe. We optimize for dogs, not vibes.

KPI table for prompt quality

KPIFailShip
Banned tokensdelve / tapestry / CertainlyZero in sample of 20
SpecificityGeneric praiseNamed entity from input
Mode leakWork winksRegister holds
LengthEmail in WhatsAppMatches input band
QuestionsThree stackedZero or one

What we cannot clone

We do not fine-tune on your entire iMessage history. That would be a different company and a different privacy story. We clone a style of replies via constraints, not a literal voice print. If you want your exact slang, type it in the edit pass. That is the habits article.

Grammarly's 2024 finding that 52% of workers do not know how to use AI effectively maps here: people expect a soul upload. They get a well-fenced generator. I would rather under-promise.

Field notes

The keyboard cannot host the full prompt in RAM folklore the way a blog post can. We send compact context to the API. Every token in the system prompt is a tax. That is why the banlist is curated, not a novel.

Apple's extension process will be killed. We cannot keep a conversation memory in the keyboard the way ChatGPT does. Each generate is mostly stateless besides what you copied. Design around that or lie to yourself.

Microsoft's 2025 WTI talk of agents running workflows is a different shape than a 15-second reply. We are still phase-1 assistants: remove drudgery of the first sentence. We are not auto-texting your dates. On purpose.

Worked prompt failures

Input: "my cat is on antibiotics." Bad: "I hope they have a speedy recovery!" Good: "antibiotics for a cat is a whole saga. liquid or pills?"

Input: "board deck slipped to Friday." Bad: "Thanks for the update, circling back..." Good: "Friday slip noted. want me to cut slides 8-12 or the appendix first?"

Input: "your prompt about dumpster diving was unhinged." Bad: "Haha that's so funny." Good: "unhinged is generous. was it the alley photo or the haiku?"

Frequently asked questions

Does KOPY sound like me out of the box? It sounds like a constrained human texter in your chosen mode. You still add the private jokes.

Do you train on my chats? Do not take blog copy as a legal policy. Read the in-app privacy text. The architecture is request/response from the extension.

Why not one mega-prompt? Because Work and Dating would contaminate each other. Stacked layers exist to stop that.

Prompt-stack notes from shipping generation

Why the banlist is not a personality

Blocking 'delve' does not make the output sound like you. It stops it sounding like a model. Personality is your edit. People conflate those and then ask for a voice clone from 40 iMessages. We do not ingest your life. We fence a generator. That is the honest scope.

Mode leak bugs

When Work mode winks, I treat it as a failed KPI, not a cute surprise. Register is a contract. Dating leaking into Slack is how people get fired. We stack prompts so the contracts do not hug.

Temperature is not tone

Higher temperature in Dating is for lexical variety, not for being hornier. Horniness is a user choice and a tone tap. Mixing those knobs is how you get chaos.

Specificity tests in CI

I keep a handful of fixture messages. If the output could answer any of them, the build is dirty. This is not a published benchmark. It is a private lint. Do not cite it as science.

Why we send compact context

Keyboard RAM and token bills. The system prompt cannot be a memoir. Every banned word is a tax. That is why the robotic-tics article can be long and the prompt cannot.

No chat memory in the extension

Apple kills the process. We do not have ChatGPT's thread. If you needed the last ten bubbles, copy a longer chunk. Design around stateless or lie.

Canned replies vs generate

Sometimes the keyboard should not call a model. Empty clipboard, obviously. We still prefer generate over canned flirts that everyone else has. Canned is how you get the pineapple opener problem.

What testers call 'my voice'

They mean one proper noun. We optimize for that noun. If your slang is 'bruv', type bruv. The fence will not invent your friends' dialect from nothing.

Eval against robotic tics

The failure-mode catalog is the test set. This article is the generator. Habits are the human. If I merge them, SEO eats the distinctions.

On-device future

Maybe. Not while we are in a tight extension budget. If someone ships a tiny model that still says 'Absolutely!', they solved the wrong half.

Personalization features

If we add more user style later, it will be explicit, not a silent scrape. Silent scrape is how you lose the Full Access conversation.

I will not quote a win rate

Prompt quality is 'fewer tics in the sample,' not 'users got dates.' Keep those KPIs in different rooms.

Why I split clone vs habits vs tics into three URLs

Clone is constraints in our repo: banlists, mode stacks, specificity tests. If those fail, it is my bug.

Habits are what you do after the string appears. If you skip them, you will sound like our average fixture, which is still not you.

Tics are the linguistic zoo: Absolutely, synergies, em dashes. You can hunt them even in ChatGPT. The catalog exists so we do not hide the zoo inside a product diary.

If I had merged the three, every query would cannibalize. Searchers who want 'why does ChatGPT sound fake' should not land on a KOPY prompt memoir. Searchers who want 'make it sound like me' need habits. Searchers who want how we built it need this page.

When we change a prompt, I update this page, not the habits page. When testers send raw drafts, I update habits. When a new AI-ism appears, I update tics and the banlist. That is the editorial system.

More questions people ask after reading this

Do you fine-tune on my messages?

Read the in-app policy for the legal answer. Architecturally this article is about prompt constraints, not a silent scrape of iMessage. I will not imply a voice print we do not build.

Can I add my own banned words?

Not in the first keyboard UI. You can delete them in the edit pass. That is habits. If we add user banlists, it belongs here as product, not in the tic catalog.

Why not one huge prompt?

Register contamination. Work would wink. Dating would say circling back. Layers exist to stop that.

Does temperature equal personality?

No. Personality is your nouns and your timing. Temperature is variety. I keep repeating this because people twist knobs and expect a soul.

Where do canned replies fit?

Fallback when the network dies, maybe. They are not a voice clone. They are a hat.

How is this different from Grammarly rewrite?

They edit your words. We generate a reply from their words plus a mode. Different job, sometimes same phone.

Sources

Source — Apple Developer Documentation, Custom Keyboards, retrieved 2026-09-07.

Source — Grammarly / Harris Poll, 2024 State of Business Communication, retrieved 2026-09-07.

Source — Microsoft Work Trend Index 2025, The Year the Frontier Firm Is Born, retrieved 2026-09-07.

Related