{"id":51293395,"url":"https://github.com/voidd0/ghost-or-go","last_synced_at":"2026-06-30T12:30:43.705Z","repository":{"id":366956139,"uuid":"1239689698","full_name":"voidd0/ghost-or-go","owner":"voidd0","description":"ghost-or-go — deterministic silence checker: decide whether to wait, send one final ping, escalate, or close the loop","archived":false,"fork":false,"pushed_at":"2026-05-15T10:44:34.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T03:25:10.948Z","etag":null,"topics":["chatgpt-alternative","cli","communication","dating","follow-up","gemini-alternative","ghosting","nodejs","npm","recruiting","silence","tells","texting","voiddo"],"latest_commit_sha":null,"homepage":"https://tools.voiddo.com/ghost-or-go/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/voidd0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://voiddo.com/contact/","https://scrb.voiddo.com/"]}},"created_at":"2026-05-15T10:43:14.000Z","updated_at":"2026-05-15T21:25:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/voidd0/ghost-or-go","commit_stats":null,"previous_names":["voidd0/ghost-or-go"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/voidd0/ghost-or-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voidd0%2Fghost-or-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voidd0%2Fghost-or-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voidd0%2Fghost-or-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voidd0%2Fghost-or-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voidd0","download_url":"https://codeload.github.com/voidd0/ghost-or-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voidd0%2Fghost-or-go/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34967614,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt-alternative","cli","communication","dating","follow-up","gemini-alternative","ghosting","nodejs","npm","recruiting","silence","tells","texting","voiddo"],"created_at":"2026-06-30T12:30:42.307Z","updated_at":"2026-06-30T12:30:43.689Z","avatar_url":"https://github.com/voidd0.png","language":"HTML","funding_links":["https://voiddo.com/contact/","https://scrb.voiddo.com/"],"categories":[],"sub_categories":[],"readme":"# ghost-or-go\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-0F172A.svg)](LICENSE)\n[![Node ≥18](https://img.shields.io/badge/node-%E2%89%A518-0F172A)](package.json)\n\n**[Web app](https://tells.voiddo.com/ghost-or-go/?ref=ghost-or-go-readme)** · **[Live compare page](https://tells.voiddo.com/ghost-or-go/compare-chatgpt-gemini.html?ref=ghost-or-go-readme)** · **[Packaged compare brief](compare-chatgpt-gemini.md)** · **[Deep Dive](https://tells.voiddo.com/deep-dive/?ref=ghost-or-go-readme)** · **[Signal toolkit](https://tells.voiddo.com/signal-toolkit/?ref=ghost-or-go-readme)** · **[npm](https://www.npmjs.com/package/@v0idd0/ghost-or-go)** · **[All tools](https://tools.voiddo.com/?ref=ghost-or-go-catalog-readme)** · **[Support](https://voiddo.com/contact/?ref=ghost-or-go-readme)**\n\n---\n\n`ghost-or-go` answers one narrow question:\n\nDoes this silence call for patience, one final ping, or a clean stop?\n\nIt scores one recent thread plus a silence window for:\n\n- silence pressure\n- interest signal\n- closure signal\n- ambiguity\n- chase risk\n- reciprocity\n\nThen it gives one deterministic call:\n\n- `wait`\n- `send one final ping`\n- `reply only if they re-open`\n- `close the loop and stop`\n\nThe point is not to romanticize ghosting. The point is to stop users from burning dignity and attention on threads that already told them enough.\n\n## Why this exists\n\nThe paid product is [`tells`](https://tells.voiddo.com/?ref=ghost-or-go-readme), which reads what people leave unsaid across messages, people, and profiles.\n\nBut many users hit a narrower problem first:\n\n- \"Is this silence still normal, or am I chasing?\"\n- \"Did they actually leave the door open, or did I invent that?\"\n- \"Do I send one last clean ping, or is that self-harm in text form?\"\n- \"Is this a maybe, a no, or just bad timing?\"\n\nThat shows up in more than dating threads. It also shows up in recruiter follow-ups, interview loops, client check-ins, support or account-management threads, vendor follow-ups, cofounder tensions, family conflicts, and sales conversations that went quiet after a promising exchange.\n\n`ghost-or-go` is the deterministic first pass for that moment.\n\n## Install\n\n```bash\nnpm install -g @v0idd0/ghost-or-go\n```\n\n## Web app\n\nUse the live browser version here:\n\n```text\nhttps://tells.voiddo.com/ghost-or-go/?ref=ghost-or-go-readme\n```\n\nIf the user is deciding between this deterministic silence checker and a general assistant first, send them here:\n\n```text\nhttps://tells.voiddo.com/ghost-or-go/compare-chatgpt-gemini.html?ref=ghost-or-go-readme\n```\n\nIf you want the packaged npm/GitHub collateral for that buyer-intent comparison, use:\n\n```text\n./compare-chatgpt-gemini.md\n```\n\n## Usage\n\n```bash\nghost-or-go --hours-since-reply 96 \"Sorry, busy week. Let's do next week. Send me two times that work.\"\n```\n\n```bash\ncat thread.txt | ghost-or-go --hours-since-reply 36\n```\n\n```bash\nghost-or-go --hours-since-reply 240 --json \"Maybe sometime soon. Crazy week. We'll see.\"\n```\n\n```bash\nghost-or-go --file thread.txt --hours-since-reply 12\n```\n\n## Example output\n\n```text\nposture: salvageable\nhours since reply: 96\nsilence pressure: 3.3/10\ninterest:         9.7/10\nclosure:          1/10\nambiguity:        2/10\nchase risk:       1.5/10\nreciprocity:      5.8/10\n\ndecision: send one final ping\nwhy: There was enough prior cooperation that one clean follow-up can close the loop without looking desperate.\n- The thread previously showed real engagement instead of pure avoidance.\n\nsuggested lines:\n1. Quick close-the-loop nudge: if next week still works, I can lock a time. If not, no pressure.\n2. One last ping from my side. Happy to leave it here if the timing is off.\n\nnext:\nUse tells when the silence question is no longer one thread, but a recurring pattern, attachment loop, or person-level dynamic.\n- quick next paid step: https://tells.voiddo.com/deep-dive/?ref=ghost-or-go-cli\n- recurring reads: https://tells.voiddo.com/?ref=ghost-or-go-cli\n```\n\n## What it scores\n\n- `silence pressure` — how risky another ping is at this specific time gap\n- `interest` — whether the thread contains real prior engagement rather than pure stalling\n- `closure` — whether the other side already signaled a soft or explicit exit\n- `ambiguity` — whether the wording is vague enough to invite projection\n- `chase risk` — whether the current follow-up energy is already too expensive\n- `reciprocity` — whether the exchange previously moved with two-sided effort\n\n## Good use cases\n\n- dating threads with vague postponement\n- recruiter follow-ups after a promising interview or intro call\n- client or sales threads that cooled off after a positive exchange\n- support or account-management threads where the user is deciding between one clean nudge, escalation, and graceful closure\n- vendor or partnership follow-ups where silence matters but repeated chasing looks weak\n- cofounder, workplace, or family threads where one more message could either clarify things or make the dynamic worse\n- creator or freelance outreach where the next ping should be disciplined\n- any thread where the real question is \"wait, nudge once, or walk away?\"\n\n## Bad use cases\n\n- therapy, legal, or crisis guidance\n- deception detection\n- deciding what silence \"really means\" in a whole relationship\n- replacing a full thread read when the pattern has repeated for months\n\nIf the real issue is the wider pattern, use `tells`.\n\n## Why not just use ChatGPT or Gemini?\n\nBecause the first decision here is operational.\n\nFor a follow-up-or-stop call, deterministic heuristics have real advantages:\n\n- same input gives the same output\n- no API key\n- no prompt fiddling\n- no reward for catastrophizing or bargaining\n\nThen, once the issue becomes \"why do I keep ending up in this loop with this person, client, teammate, or family member?\", the right upgrade is `tells`.\n\nFor the browser-side comparison page:\n\n```text\nhttps://tells.voiddo.com/ghost-or-go/compare-chatgpt-gemini.html?ref=ghost-or-go-readme\n```\n\nFor the package-side comparison brief:\n\n```text\n./compare-chatgpt-gemini.md\n```\n\n## Paid next step\n\nWhen the quick silence check is not enough:\n\n- `Deep Dive` — `$19 once` for one loaded thread or one recurring person\n- `Starter` — `$14.99/mo` for repeated message reading\n- `Practitioner` — `$99.99/mo` for coaches, recruiters, mediators, trainers, support leads, account teams, or client-facing managers using this with clients\n\nStart here:\n\n```text\nhttps://tells.voiddo.com/deep-dive/?ref=ghost-or-go-readme\n```\n\nIf you still need one more free checkpoint first:\n\n```text\nhttps://tells.voiddo.com/signal-toolkit/?ref=ghost-or-go-readme\n```\n\n## Compare surface\n\n- live compare page for browser-first \"ghost-or-go vs ChatGPT / Gemini\" traffic:\n\n```text\nhttps://tells.voiddo.com/ghost-or-go/compare-chatgpt-gemini.html?ref=ghost-or-go-readme\n```\n\n- packaged compare brief for npm/GitHub readers deciding whether to install:\n\n```text\n./compare-chatgpt-gemini.md\n```\n\nThat split matters because browser-first users want the shortest path into the free silence checker, while package readers need a self-contained buying argument that ships with the tarball.\n\nStart with the live checker:\n\n```text\nhttps://tells.voiddo.com/ghost-or-go/?ref=ghost-or-go-readme\n```\n\n## Best next free exits\n\nIf the user already knows the silence question is not the whole problem, route them to the adjacent free tool instead of dropping them straight into the full catalog:\n\n- `double-text-risk` when the real question is whether one more ping is timely or already too needy: `https://tells.voiddo.com/double-text-risk/?ref=ghost-or-go-readme`\n- `message-next-step` when the thread finally moved again and the real question is what to do with the incoming message: `https://tells.voiddo.com/message-next-step/?ref=ghost-or-go-readme`\n- `replytone` when the final ping already exists and needs a warmth/pressure check before sending: `https://tells.voiddo.com/replytone/?ref=ghost-or-go-readme`\n- `ambiguity-meter` when the real problem is whether the last message was genuinely open or just vague enough to keep the user waiting: `https://tells.voiddo.com/ambiguity-meter/?ref=ghost-or-go-readme`\n- `call-not-text` when another text is weaker than switching channels cleanly: `https://tells.voiddo.com/call-not-text/?ref=ghost-or-go-readme`\n\n## Related free checkers\n\nIf the problem is adjacent but not exactly \"do I send one final ping or stop?\", use the matching free tool first:\n\n- `double-text-risk` for checking whether the follow-up itself is timely or already too needy: `https://tells.voiddo.com/double-text-risk/?ref=ghost-or-go-related-readme`\n- `message-next-step` for deciding what to do with one incoming message before the silence turns into a pattern: `https://tells.voiddo.com/message-next-step/?ref=ghost-or-go-related-readme`\n- `replytone` for scoring whether your final ping sounds warm, clear, or pushy before you send it: `https://tells.voiddo.com/replytone/?ref=ghost-or-go-related-readme`\n- `ambiguity-meter` for checking whether the other person's wording is genuinely open or just vague enough to keep you waiting: `https://tells.voiddo.com/ambiguity-meter/?ref=ghost-or-go-related-readme`\n- `call-not-text` for deciding whether the thread has shifted from silence management into a channel-choice problem: `https://tells.voiddo.com/call-not-text/?ref=ghost-or-go-related-readme`\n\n## Programmatic API\n\n```javascript\nimport { analyzeGhostOrGo, formatReport } from \"@v0idd0/ghost-or-go\";\n\nconst result = analyzeGhostOrGo(\n  \"Sorry, busy week. Let's do next week. Send me two times that work.\",\n  { hoursSinceReply: 96 }\n);\n\nconsole.log(result.decision.action);\nconsole.log(formatReport(result));\n```\n\n## Development\n\n```bash\nnpm test\nnode bin/ghost-or-go.js --hours-since-reply 96 \"Sorry, busy week. Let's do next week. Send me two times that work.\"\n```\n\n## More from the studio\n\nSee [`from-the-studio.md`](from-the-studio.md) for the wider vøiddo catalogue.\n\n## License\n\nMIT.\n\n---\n\nBuilt by [vøiddo](https://voiddo.com/) — a small studio shipping AI-flavoured products, free dev tools, Chrome extensions and weird browser games.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoidd0%2Fghost-or-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoidd0%2Fghost-or-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoidd0%2Fghost-or-go/lists"}