Packaged compare brief · Deep Dive · replytone · boundary-check · message-next-step · GitHub · npm · All tools · Contact
call-not-text answers one narrow question:
Is this conversation still workable over text, or is text now the wrong channel?
Best fit search intent:
- should this be a phone call
- should i call instead of text
- take this off text
- take this off email
- when to stop texting and call
- when email is not enough
It scores one message or a short thread for:
- heat
- complexity
- looping
- bandwidth shift
- cooldown risk
- baseline clarity
Then it gives one deterministic call:
stay on textsend one short clarifiermove to a callpause before responding
The point is not romance theatre or armchair psychology. The point is to stop people from forcing messy threads through the worst possible channel.
The paid product is tells, which reads what people leave unsaid across messages, people, and profiles.
But many users hit a narrower problem first:
- "This is getting messy. Do I keep texting?"
- "Are we arguing because of the issue, or because text is compressing everything?"
- "Do I need a clarifier, a call, or a pause?"
- "Is this too heated to answer right now?"
call-not-text is the deterministic first pass for that moment.
It also shows up outside dating:
- recruiter or interview threads that are getting tense or overlong
- client escalation loops that clearly need a call instead of another paragraph
- workplace or cofounder conflict where nuance is being crushed by text
- negotiation or support exchanges where speed is starting to beat clarity
- account-management or vendor loops where the thread keeps expanding but nobody is resolving the issue
- family arguments where text is turning one concrete issue into five overlapping ones
npm install -g @v0idd0/call-not-textThis package is part of the tells acquisition path even before its dedicated browser route is live:
- packaged first pass:
call-not-text - still unsure and want a working browser-first checkpoint:
replytone,boundary-check, ormessage-next-step - one thread is clearly not enough:
Deep Dive - recurring thread reads:
Starter - practitioner workflows:
Practitioner
If you want the packaged npm/GitHub collateral that ships with the tarball, use:
compare-chatgpt-gemini.md
If the user wants one working browser-first check before buying deeper analysis:
replytonefor the actual clarifier, pause message, or post-call follow-up draft:https://tells.voiddo.com/replytone/?ref=call-not-text-readmeboundary-checkwhen the real issue is not channel choice but a limit that still needs to land clearly:https://tells.voiddo.com/boundary-check/?ref=call-not-text-readmemessage-next-stepwhen the real decision is still the direct action on one incoming message before you change channels:https://tells.voiddo.com/message-next-step/?ref=call-not-text-readmesoft-yes-or-nofor warm replies that still may not justify a call yet:https://tells.voiddo.com/soft-yes-or-no/?ref=call-not-text-readme
call-not-text "Call me right now. We keep going in circles and this is getting ridiculous."cat thread.txt | call-not-textcall-not-text --json "There are multiple things mixed together here and text is making this worse."call-not-text --file thread.txtposture: overheated
heat: 7.2/10
complexity: 5.8/10
looping: 5.6/10
bandwidth shift: 7.1/10
cooldown: 6.4/10
clarity: 5.1/10
decision: move to a call
why: The exchange is carrying enough heat, nuance, or repetition that another text will probably compress the issue further.
- Text is now a weak channel for the amount of friction or nuance present.
- The exchange shows signs of repetition rather than progress.
suggested lines:
1. This feels easier to sort out on a quick call than in fragments here.
2. There is too much context for text alone. Can we talk for ten minutes?
next:
Use tells when the real issue is no longer one message, but the pattern, the person, or the full thread.
- quick next paid step: https://tells.voiddo.com/deep-dive/?ref=call-not-text-cli
- recurring reads: https://tells.voiddo.com/?ref=call-not-text-cli
heat— whether blame, intensity, or tone markers are starting to dominate the contentcomplexity— whether there is more context than a short text can carry cleanlylooping— whether the exchange sounds repetitive instead of progressivebandwidth shift— whether the wording itself suggests text is the wrong medium nowcooldown— whether an immediate reply is likely to escalate the exchangeclarity— whether text still names a usable next step
- tense client or recruiter threads
- family or relationship arguments getting too compressed
- workplace misunderstandings with too much context
- support or negotiation threads that are escalating because text is narrowing the issue
- account-management or vendor escalations where the exchange keeps looping without closing anything
- any exchange where the real question is "keep texting, pause, or move this to a call?"
- therapy, legal, or crisis guidance
- deception detection
- deciding what someone feels in general
- replacing a full thread read when the stakes are real
If the real issue is the wider pattern, use tells.
Because the first question here is operational.
For a channel-choice call, deterministic heuristics have real advantages:
- same input gives the same output
- no API key
- no prompt fiddling
- no reward for melodrama
Then, once the issue becomes "what does this whole pattern mean?", the right upgrade is tells.
If you are reading this on npm or GitHub and want the package-side version of that positioning, use:
./compare-chatgpt-gemini.md
When the quick channel-choice check is not enough:
Deep Dive—$19 oncefor one loaded thread or one recurring personStarter—$14.99/mofor repeated message readingPractitioner—$99.99/mofor coaches, recruiters, mediators, trainers, support leads, or account teams using this with clients
Start here:
https://tells.voiddo.com/deep-dive/?ref=call-not-text-readme
If you still need one more free checkpoint first:
replytonefor the exact draft you are about to sendboundary-checkfor a firmer limit instead of a channel shiftmessage-next-stepfor the immediate move on one incoming message
If the thread-level channel call is not the right layer, use the sibling checker that matches the next decision:
replytonefor judging whether the clarifier, pause message, or post-call follow-up sounds warmer or pushier than intended:https://tells.voiddo.com/replytone/?ref=call-not-text-related-readmemessage-next-stepfor choosing the next move on one incoming message before you escalate the medium:https://tells.voiddo.com/message-next-step/?ref=call-not-text-related-readmeboundary-checkfor checking whether the real problem is not channel choice but a message that still needs firmer limits:https://tells.voiddo.com/boundary-check/?ref=call-not-text-related-readmesoft-yes-or-nowhen a warm reply still may not justify pushing the conversation into a call:https://tells.voiddo.com/soft-yes-or-no/?ref=call-not-text-related-readmeambiguity-meterwhen the sticking point is not the channel yet but whether the incoming message is genuinely open or only vague enough to keep you guessing:https://tells.voiddo.com/ambiguity-meter/?ref=call-not-text-related-readme
import { analyzeCallNotText, formatReport } from "@v0idd0/call-not-text";
const result = analyzeCallNotText(
"Call me right now. We keep going in circles and this is getting ridiculous."
);
console.log(result.decision.action);
console.log(formatReport(result));npm test
node bin/call-not-text.js "There are multiple things mixed together here and text is making this worse."See from-the-studio.md for the wider vøiddo catalogue.
MIT.
Built by vøiddo — a small studio shipping AI-flavoured products, free dev tools, Chrome extensions and weird browser games.