Why one text is so hard to read
A text arrives with the voice taken out. In person, "haha ok" comes with a face: a real laugh, a shrug, or a flat stare, and you'd know which in half a second. On a screen you get six letters and a lot of empty space. Most of us fill that space with whatever we were already worried about.
Timing adds a second layer. The same words read one way after two minutes and another way after six hours, even if the person was just driving, at work or asleep. Texting styles differ too. Some people write full sentences with commas, and some have never typed a capital letter. A short message from a short texter means a lot less than a short message from someone who usually sends paragraphs.
So before you decide what his text means, or hers, or your friend's, ask two plain questions. Is this normal for them? And what happened in the chat right before it? Those two answers do more work than any single word.
Texts people get stuck on, and what each one might mean
These are examples of messages that come up again and again. None of them has one fixed meaning. Each has a few likely readings, and there is usually a clue that tells them apart.
First up, "haha ok". It can be easy agreement: they found it mildly funny and have nothing to add. It can be a polite exit from a topic they're done with. Or it can be a quiet "fine, whatever". Look at what came before. After a plan or a joke, it's agreement. After you pushed on something or sent a long message, a bare "haha ok" often means they're closing the subject. Whether they pick the chat back up later tells you the most.
Next, "we should hang out sometime". It can be real interest with no plan yet, or a warm way to end a chat without committing to anything. The tell is specifics. Answer with a day ("yes! free thursday?") and watch. Real interest replies with a time or a counter offer. Politeness replies with "ah this week is bad, soon though" and then goes quiet.
With "I'm just busy", they might be truly swamped: exams, a new job, a family thing. It might be a gentle brush off. Or they might be overwhelmed and not want to explain. The clue is whether busy comes with a when. "busy this week, next weekend?" is someone juggling a calendar. "just busy" repeated for weeks with no offer is someone keeping distance. Seeing them post online isn't proof either way, since people often have energy for scrolling and none for plans.
A lone "k" is next. For some people a single letter is just efficient. From someone who usually writes "okay!!" or "sounds good 😊", it can mean irritation, or that they've stopped engaging. Compare it to how they normally confirm things. The change from their own baseline matters more than the letter.
A "lol" most of the time isn't laughter. It's a softener that keeps the tone light. After a joke, it's a laugh. Taped onto something with a point, like "i mean i did ask you first lol", it turns a complaint into something easy to say. If a lol is attached to a point, read the point.
"sorry, crazy week" can be an honest apology with honest reasons, or a stock line to cover a gap. Watch what follows it. A real one picks the thread back up, asks about you, maybe suggests something. A stock one is the whole message. If "crazy week" shows up again two weeks later, you're looking at a habit, not a week.
"you're funny" could be warm, a little flirty, or a way to sidestep a question you asked. Check whether it answered a joke or replaced an answer. If you asked something real and got "you're funny" back, they may not want to go there yet.
And "we'll see". Sometimes it's an honest maybe from someone who doesn't know their schedule. Sometimes it's a no that didn't want to be said. The test is history: has a "we'll see" from this person ever turned into a yes?
Why the whole conversation beats one message
One text is a single frame. The conversation is the film. When you scroll back a few weeks, you start to see the rhythm: how fast replies usually come, when they slow down, and whether that slowdown lines up with something you said or with a busy stretch in their life.
Effort shows up too. Who asks questions, who only answers them. Who starts the conversations, and who lets them die. Whether messages got shorter over time or stayed about the same. A run of short, late, question free replies says much more than any one "k" ever could.
This is also where your own part becomes visible, which is the hard bit. Sometimes the pattern is that you send three messages for each of theirs, or that you go quiet whenever things get close. Reading the full thread is fairer to both of you than judging a single line.
How Decode reads a chat
Decode is Calypso's text message decoder for whole conversations. You bring in a chat, and it reads tone, reply timing, effort on each side and attachment patterns, such as one person chasing while the other pulls back. What you get back is a plain verdict, a short list of red flags and green flags, a next move, and a reply it drafted for you. Treat that reply as a draft: send it, edit it, or ignore it.
Here's an invented example of the kind of verdict you might get: "They seem interested but stretched thin. Replies slowed down over the last two weeks, but nearly every message still asks you something back, and they've suggested plans twice. Green flag: they come back after going quiet. Watch for: plans that stay vague. Next step: offer one specific time and see if they take it."
It works for partners, dates, friends, family and coworkers, not only romance. To use it you'll need a free account; a free account comes with one decode per seven days, and Pro raises that. If you want to talk the result through, Pro also lets you take it to Markus, who gives you the guy's view, or to Rhea if you'd like it blunt.
How to bring a chat in
You've got three options. Screenshots work (as many as 20 per decode). So does pasting the messages into the box, as long as it stays under 50,000 characters. Or you can upload an export. Decode takes images plus .txt, .csv and .zip files, each one 4 MB or smaller, and at most 5 text files per decode.
With WhatsApp on an iPhone: go into the chat and tap their name at the top of the screen, then scroll down and tap Export Chat. Pick Without Media. Save it to Files or send it to your own email. What you end up with is usually a .zip, which you can upload without unzipping.
With WhatsApp on Android: go into the chat, tap the ⋮ menu, choose More and then Export chat, and pick Without media. You'll get a .txt to save or share to yourself. Menu labels move around between versions, so if yours look different, check WhatsApp's help article on exporting your chat history. Exports from either phone are read the same way.
For iMessage on a Mac, Apple has no export button, but the free, open source imessage-exporter tool can make one. Install it (its README lists Homebrew and Cargo), give your terminal app Full Disk Access in System Settings, then run imessage-exporter -f txt. The -f txt part asks for plain text files. Adding -t with a name or number limits it to the people you want. By default the files land in a folder called imessage_export in your home folder. Upload the .txt for the conversation you mean.
A few limits worth knowing. One .zip may contain 50 files at most; any text file in it can be up to 2 MB, and all the text together up to 10 MB. Decode only reads the .txt and .csv files inside a zip and skips photos, videos and voice notes, so leaving media out costs you nothing. A group chat of three or more people gets trimmed to two voices, yours and whoever posts the most, and the verdict comes back more cautious, since a group thread says less about any one connection.
Questions
Do I need an account to decode a chat?
What happens to my screenshots?
Can it read friends and family chats too?
How accurate is it?
Calypso provides emotional support and is not a substitute for professional medical or mental-health care. If you are in crisis, see our Safety page →

Stuck on one message? Show it the whole thread.
Upload screenshots or an export and get a plain read on what's going on, plus a reply you can use or ignore.
