threadlens

Who actually started it?

Export the argument. Drop it in. Threadlens counts what both of you did — questions asked, claims made, sources given, goalposts moved — and applies the exact same ruler to each of you. Then you can stop arguing about who was worse and go read the evidence.

threadlens — local analysis
Drop the chat export here .zip, .txt or .docx · up to 25 MB · or paste it 21/09/2026, 01:02 - Ravi: Ok since you love “facts” so much…

Five lenses, five questions

Same chat, same numbers. Each lens just asks a different thing of them.

Overview — who talked, and when?

Share of messages, words per message, who starts conversations after a six-hour gap, median reply time, and what hours you both keep. The baseline everything else sits on.

Debate — how was the argument conducted?

Questions versus assertions, absolutist words (always, never, everyone), evidence words, group labels, status put-downs, and a 0–1 heat trend. Plus moral vocabulary — whether one of you argues from fairness and the other from loyalty, which is usually why you are talking past each other.

Rigor — who actually argued well?

A score out of 100 for each person built from sourcing, answering the other's questions, staying on topic, conduct, hedging, and owning a mistake. It comes with a ledger of every factual claim and whether it cited anything. It says nothing about who is right, and it is built so that it cannot.

Personal — who is carrying this?

Who reaches out first, who replies faster, affection and apology words, and how the tone moved over time. Useful when the honest question is whether one of you has quietly stopped trying.

Work — is this thread functioning?

Responsiveness, action words, urgency words, politeness, and after-hours load. Handy evidence when someone insists they are “always available”.

How it works

  1. Export

    WhatsApp → the chat → More → Export chat → Without media.

  2. Drop it in

    Android or iPhone, 12- or 24-hour, .txt, .zip or a Word copy. It is read in this tab.

  3. Pick a lens

    Then open any number to see exactly how it was counted.

What is the scoring actually doing?

Counting, carefully, and telling you so. Word lists, phrase patterns and a few small formulas — no black box and no model deciding what you meant. The full method, every weight and every threshold is written up in docs/SCORING.md, and the word lists are a single readable JSON file you can send a pull request against.

Can it tell me if my relationship is in trouble?

No, and be suspicious of anything that says it can. It can show you that one of you starts 80% of the conversations, or that the warmth fell off a cliff in March, or that neither of you has asked the other a question in six weeks. Those are worth a conversation. They are not a diagnosis, and a chat log is a thin slice of a relationship.

What will it get wrong?

Sarcasm, every time. Quoting someone else's insult counts against you. Romanised Hindi and other mixed languages are only partly covered, so tone and heat undercount them. Comparisons switch off below 150 words per person, because short chats say nothing. Read the messages, not just the bars.

Is there a command-line version?

Yes, and an optional self-hosted API, both offline. pip install threadlens, then threadlens analyse chat.zip --lens rigor --ledger claims.json exports the claim ledger for you — or an LLM — to fact-check. Local ML models (toxicity, fallacy classification, self-contradiction detection) live behind the [deep] extra.

Where your chat goes

Nowhere. That is the whole design, and it is enforced rather than promised.

How can I be sure?

This page ships a Content-Security-Policy of connect-src 'none', so the browser refuses to let it open a network connection at all — even if the code tried. Open your network tab and watch nothing happen. Or save the page and run it with the Wi-Fi off; it behaves identically. There is no server, no account, no cookie and no analytics, and a test in the repo fails the build if anyone adds one.

Should I be analysing someone else's messages?

A chat you are in is also theirs. Use “Hide names” before you screenshot anything, keep reports to yourself, and do not publish another person's messages because a chart made them look bad. Depending on where you live, publishing them may also be their decision to make, not yours.

Any limits?

25 MB, 250,000 messages, and 8 analyses per 10 minutes — the last one purely so a huge export cannot lock up your own browser. No server means nothing else needs limiting.