Web app · Live compare page · Packaged compare brief · Deep Dive · Signal toolkit · replytone · GitHub · npm · All tools · Contact
boundary-check answers one narrow question:
Does this draft set a boundary clearly, or does it apologize, overexplain, negotiate against itself, or escalate harder than it needs to?
Best fit search intent:
- salary boundary checker
- scope creep checker
- client boundary draft
- recruiter boundary message
- say no professionally
- boundary draft checker
It also works as a narrower, faster alternative to ChatGPT or Gemini when the real need is not "write a whole message for me" but "tell me whether this draft actually holds the line."
It scores one outgoing draft for:
- boundary clarity
- appeasement
- overexplaining
- negotiation leaks
- heat
Then it gives one deterministic call:
send the boundarytrim the explanationname the limit plainlystop negotiating the limitcool it down
The point is not to sound cold. The point is to stop users from turning one clean limit into a debate, apology tour, or angry monologue.
If the user wants the direct side-by-side before installing anything, start with the live compare page:
https://tells.voiddo.com/boundary-check/compare-chatgpt-gemini.html?ref=boundary-check-readme
If they are reading inside npm or GitHub and want the packaged version that ships with the CLI, use:
compare-chatgpt-gemini.md
The paid product is tells, which reads what people leave unsaid across messages, people, and profiles.
But many users hit a narrower draft problem first:
- "Am I setting a boundary, or begging for permission?"
- "Is this reply too long because I am scared of their reaction?"
- "Did I just reopen the limit I was trying to set?"
- "Is this client, recruiter, family, support, or dating reply going to sound harsher than I mean?"
That shows up in more than dating threads. It also shows up in recruiter follow-ups, salary or process boundaries, client scope creep, support or account-management drain, family guilt loops, workplace expectation sprawl, cofounder conflicts, and vendor or sales threads where one weakly framed limit invites more pressure.
boundary-check is the deterministic first pass for that moment.
npm install -g @v0idd0/boundary-checkIf you want to use boundary-check in the browser before installing the CLI, use the live route here:
https://tells.voiddo.com/boundary-check/?ref=boundary-check-readme
If the user wants the wider browser-first cluster around it, use the live tells toolkit here:
https://tells.voiddo.com/signal-toolkit/?ref=boundary-check-readme
If the user needs one adjacent browser-first check before buying deeper analysis:
replytonefor warmth, pressure, and urgency in the actual draft:https://tells.voiddo.com/replytone/?ref=boundary-check-readmecall-not-textfor deciding whether the conversation already needs a call instead of more wording tweaks:https://tells.voiddo.com/call-not-text/?ref=boundary-check-readmemessage-next-stepfor deciding what to do with the incoming message before drafting the boundary at all:https://tells.voiddo.com/message-next-step/?ref=boundary-check-readme
boundary-check now has two compare assets for two acquisition moments:
- live compare page for browser-first "boundary-check vs ChatGPT / Gemini" traffic:
https://tells.voiddo.com/boundary-check/compare-chatgpt-gemini.html?ref=boundary-check-readme - packaged compare brief for npm/GitHub readers deciding whether to install:
compare-chatgpt-gemini.md
That split matters because browser users want the shortest path into the free checker, while package readers need a self-contained explanation that ships with the tarball.
If the user already knows the boundary draft is only one symptom, route them to the adjacent free tool instead of dropping them into the full catalog too early:
replytonewhen the real question is whether the draft sounds warm, clear, or too sharp:https://tells.voiddo.com/replytone/?ref=boundary-check-readmemessage-next-stepwhen the real question is what to do with the incoming message before drafting the limit:https://tells.voiddo.com/message-next-step/?ref=boundary-check-readmecall-not-textwhen another carefully worded text is weaker than switching to a call or stopping the thread:https://tells.voiddo.com/call-not-text/?ref=boundary-check-readmeghost-or-gowhen the real question is whether silence after the limit means wait, send one final ping, or close the loop:https://tells.voiddo.com/ghost-or-go/?ref=boundary-check-readme
boundary-check --context client "I can't review a new round tonight. Please send one consolidated version by Monday and I'll look at that."cat draft.txt | boundary-check --context recruiterboundary-check --context family --json "Sorry, I hate to be difficult, but maybe we could do this another way unless you really need me there."boundary-check --file draft.txt --context supportposture: clear-limit
context: client
boundary clarity: 7.2/10
appeasement: 1.5/10
overexplaining: 3.6/10
negotiation: 2/10
heat: 1.5/10
decision: send the boundary
why: The draft already sounds like a usable limit instead of an anxious explanation.
- Client boundaries need scope clarity more than emotional cushioning.
- The actual limit is already visible in the wording.
repair moves:
1. Pair the boundary with one clean next step or channel.
next:
Use tells when the draft boundary is only one symptom and you need the thread, the person, or the recurring pressure pattern.
- quick next paid step: https://tells.voiddo.com/deep-dive/?ref=boundary-check-cli
- recurring reads: https://tells.voiddo.com/?ref=boundary-check-cli
boundary clarity— whether the draft clearly names the actual limitappeasement— whether apology or permission-seeking is doing too much workoverexplaining— whether backstory is overwhelming the operational pointnegotiation— whether the draft reopens the limit through caveats or side offersheat— whether the draft is trying to win compliance through escalation
- client scope, deadline, and revision boundaries
- recruiter replies where you need salary, process, or schedule limits
- support or account-management drafts that need a process boundary without sounding hostile
- workplace or cofounder drafts where the real issue is expectation control
- family messages where you want warmth without self-erasing
- dating drafts where overexplaining the boundary would only invite more bargaining
- vendor, partnership, or sales drafts where you need to say no cleanly
- any thread where your real question is "does this limit sound usable, or am I talking myself out of it?"
- therapy, legal, or crisis guidance
- deciding whether a boundary is morally correct in the whole relationship
- deception detection
- full pattern analysis across months of messages
If the real issue is the pattern over time, use tells.
Because the first problem here is structural, not mystical.
For a draft-boundary check, deterministic heuristics have real advantages:
- same input gives the same output
- no API key
- no prompt fiddling
- no reward for anxious overexplaining
Then, once the issue becomes "why does this person keep pushing past my limits?" or "why do I keep writing like this with them?", the right upgrade is tells.
If you want the side-by-side version of that argument in the browser, use:
https://tells.voiddo.com/boundary-check/compare-chatgpt-gemini.html?ref=boundary-check-readme
If you want the packaged version that travels with the CLI, use:
compare-chatgpt-gemini.md
The short version:
- use
boundary-checkwhen one draft boundary needs a deterministic hold/trim/cool-down call - use ChatGPT or Gemini when you want broad brainstorming or many rewrite variants
- use
tells Deep Divewhen the boundary problem is really a recurring person, pattern, or pressure loop
When the one-draft 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, account teams, or client-facing managers using this with clients
Start here:
https://tells.voiddo.com/deep-dive/?ref=boundary-check-readme
If you still want the wider browser-first free path first:
https://tells.voiddo.com/signal-toolkit/?ref=boundary-check-readme
If the problem is adjacent but not exactly "does this boundary hold?", use the matching free tool first:
replytonefor checking warmth, pressure, and urgency in the whole draft:https://tells.voiddo.com/replytone/?ref=boundary-check-related-readmecall-not-textfor deciding whether more texting is already the wrong bandwidth:https://tells.voiddo.com/call-not-text/?ref=boundary-check-related-readmemessage-next-stepfor deciding what to do with one incoming message before drafting the boundary at all:https://tells.voiddo.com/message-next-step/?ref=boundary-check-related-readmeghost-or-gofor deciding whether silence after the boundary means wait, one final ping, or close the loop:https://tells.voiddo.com/ghost-or-go/?ref=boundary-check-related-readmedouble-text-riskfor deciding whether a follow-up after the boundary adds value or just stacks pressure:https://tells.voiddo.com/double-text-risk/?ref=boundary-check-related-readme
import { analyzeBoundaryCheck, formatReport } from "@v0idd0/boundary-check";
const result = analyzeBoundaryCheck(
"I can't take calls after 6. Please send one written update and I will reply tomorrow.",
{ context: "workplace" }
);
console.log(result.decision.action);
console.log(formatReport(result));npm test
node bin/boundary-check.js --context client "I can't review a new round tonight. Please send one consolidated version by Monday and I'll look at that."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.