Seventy-seven tests support the plumbing, not the psychology
Crush Monitor's strongest surprise is ordinary engineering. Our run passed all 77 node:test cases after a successful TypeScript and Vite build. The repository tests transcript parsing and model-facing behavior without spending API credits. Returned categories, counts, and numeric ranges are validated, malformed judgments can be retried, and truncated batches are split once before the app reports what remains incomplete.
None of those 77 tests proves that an affection score matches what another person feels. The README makes that boundary unusually clear. Its score combines 6 dimensions, including engagement, care, openness, and concrete action, while an active refusal caps the result. LLM percentages are normalized relative weights, not calibrated psychological probabilities, and Jev values should not be compared with LLM output as if both used one measurement scale.
Local storage still sends original messages to a provider
Chats and results live in the current browser's local database, and the Express service listens on loopback by default. That is better than uploading a permanent archive to a hosted Crush Monitor account. Analysis still requires sending the relevant original messages to Jev, DeepSeek, Qwen, OpenAI, Claude, or whichever compatible endpoint you select. The project says this plainly: local storage does not mean offline inference.
Privacy therefore depends on 2 systems you control only partly: your machine and the model provider. Clearing the app deletes browser-held records, but it cannot recall requests already sent to an API. A local OpenAI-compatible endpoint can narrow that boundary, provided the model can follow the expected structured format. People pasting intimate conversations should also consider whether the other participant agreed to that processing.
What happened when we ran it
Our fresh unprivileged sandbox installed commit 954f691 in 14 seconds. It used Node 22 with 3 CPUs and 8 GB of RAM, added 189 packages, and occupied 174 MB. The build completed in 10 seconds. Npm audit found 0 known vulnerabilities across critical, high, moderate, and low severities.
The test command finished in 9 seconds with 77 passed and 0 failed. Those results cover repository mechanics in the environment we measured. We did not call a paid model, rank model accuracy, or judge the advice against real relationships. The measured checkout held 57 files and about 7,526 lines of source, with a tests directory but 0 CI workflow files and no Dockerfile.
Two-person text is the parser's firm boundary
The import path understands copied WeChat and QQ text plus 2 common WhatsApp export layouts. Other sources work after you add Name: prefixes. It preserves multiline messages and consecutive messages from the same sender, but it does not infer a missing sender, day/month order, or absent year. The interface also stays Chinese even though the English README is careful and complete.
Only 2-person conversations fit the model. Images, audio, ZIP archives, HTML exports, and messaging databases are outside scope, and the app does not watch another application in the background. Each request stays within 500 messages and 12,000 characters. A paste may reach 250,000 characters, but long individual messages need manual splitting and total retained history depends on browser storage.
The API key sits in one plaintext local file
First launch asks for a provider, key, and model, then offers a connection test capped at 40 seconds. The test uses a small amount of quota but does not read the user's chat. HTTP errors get specific guidance for credentials, credits, permissions, model IDs, and rate limits. Changing models keeps messages, clears old analysis, and recomputes it so results from 2 models are not mixed.
The local server writes the key to .runtime/model.json. On macOS and Linux it restricts the file to the current user, and the settings endpoint does not return the complete secret. It remains plaintext. Backups, malware, another process under the same account, or an accidental upload of .runtime can expose it. The README warns users not to share that directory or commit it.
Version 1.2.0 is active, while accuracy remains unranked
Release v1.2.0 shipped on October 3, 2026 with web-based model configuration and more providers. GitHub showed 279 stars, 1 open issue, and a push on the same date. The project had existed for under 2 weeks. That is healthy early activity, not enough history to show how it handles provider API changes or subtle parser regressions over several releases.
The maintainer reports live checks against native DeepSeek and representative Bailian models, but does not claim every preset works or that any model wins on Chinese relationship chats. That restraint is the right closing note. Crush Monitor is a polished lens for rereading a conversation. Its 77 passing tests earn trust in the app's mechanics; trust in its interpretation still belongs to the user.

