# Jev Chat Jarvis: an Android accessibility assistant that drafts replies without sending them

> Jev Chat Jarvis reads the chat currently on your screen through Android's accessibility service, asks a model you configure for intent and danger level, and fills candidate replies into the input box. It never presses send.

**jev-chat/jev-chat-jarvis** — 装在手机上的对话副驾：在 QQ / X / 飞书里读懂对方、给出候选回复、一键填入输入框，发不发由你。非侵入，只读屏幕，不 hook 不改包。

- Repository: https://github.com/jev-chat/jev-chat-jarvis
- Stars: 7,181 · Forks: 1,214
- Language: Kotlin
- License: MIT
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/jev-chat-jev-chat-jarvis

## The gap Jev Chat Jarvis fills between reading a chat and answering it

Most chat assistants jump straight to writing. You paste a conversation, the model produces a paragraph, and you decide whether it sounds like you. Jev Chat Jarvis inverts the order. According to the README, the judgment model first returns the other person's real intent, a danger level on a scale of 1 to 9, what they want, whether you should reply immediately, and the best next action, in roughly one second and with a confidence figure. Only then does a generation model draft three colloquial candidates, which the judgment model ranks and annotates with proportions.

The target user is someone who reads Chinese-language chat all day and wants a second opinion before typing. The README positions the app around QQ, X direct messages and Feishu, with an overlay panel that floats above the conversation. Sending stays manual: the program fills text into the input box and never taps send, and the README states it does not touch transfers, red packets or payment collection. That boundary is the product, not a footnote.

## How the accessibility adapter turns a window into a message list

The architecture is one adapter per app. A service dispatches on the foreground package name, and the matching adapter converts the current window into a title plus a message list. For QQ on Android the README says nodes are read directly from the accessibility tree, tested on version 9.3.50 in group chats, with one-to-one chats inferred from the same structure. For X direct messages the adapter parses the content-desc of Compose nodes, tested on version 12.25 with a Chinese interface; the English interface is described as unverified.

Feishu is the interesting case. Its message bodies are drawn rather than exposed in the accessibility tree, so the adapter reads bubble rectangles and runs ML Kit's offline Chinese OCR model over each one, deciding who spoke from read status. For apps with no adapter at all, a manual "recognize one screenshot" entry in the overlay menu OCRs the whole screen, treating everything as the other party and labeling it that way in the panel. Screenshots are rate-limited with failure backoff, and the app avoids capturing its own overlay.

That design has a cost the README does not hide: OCR on every bubble is slower and more error-prone than reading nodes, and the manual path loses the speaker split entirely. If your chat app draws its own text and is not on the supported list, you get the degraded mode, not the full pipeline.

## Installing the APK and getting one real analysis out of it

The README points at a signed release APK inside the repository, for Android 11 and above, ARM64 only. If you have adb and a connected device, the documented install command is a plain reinstall:

```bash
adb install -r apk/jev-assistant-v1.4-release.apk
```

If you previously installed a debug build, uninstall it first: the README notes the signatures differ, and uninstalling wipes keys and settings. After launch, open Settings and the three interface cards. The simplest working setup fills only the judgment interface with an OpenRouter API key; the reply and vision cards inherit it when left empty. The README gives the default reply model as `deepseek/deepseek-chat-v3.1` and notes that Gemini and OpenAI are region-restricted from mainland China.

Then enable three permissions from the home wizard: accessibility (to read supported chat screens), overlay (to draw the analysis panel), and autostart plus unrestricted battery. The README singles out Xiaomi and HyperOS as needing the battery exemption, otherwise the background process is frozen and stops seeing messages. It also notes that upgrading to 1.3 or later requires toggling accessibility off and on again for screenshot capability to take effect. Each interface card has a one-tap connectivity test, which is the fastest way to confirm your key works before blaming the adapter.

## Where Jev Chat Jarvis breaks, and who should not install it

The first limitation is platform coverage. There is no iOS build and no web version; the README lists a web client as planned. macOS and Windows exist only as separate repositories. WeChat on Android is explicitly out of scope: the README states the Android version has been delisted and the project no longer collects or processes WeChat content. If WeChat is your main surface, this tool is not for you.

The second is the accessibility dependency itself. Because everything flows through the accessibility service, any vendor battery manager that freezes the app silently disables it, and the README treats autostart and unrestricted battery as required rather than optional on Xiaomi and HyperOS. Reinstalling also resets overlay permission on those devices, so the wizard has to be run again. OCR paths add their own failure mode: recognition quality depends on the offline model, and the manual whole-screen mode cannot distinguish your messages from theirs.

The third is data flow. When analysis triggers, the README says the current chat text plus any enabled contact notes, knowledge-base hits and history are sent to the model endpoint you configured. The author operates no relay server, and screenshots are OCRed locally and not uploaded, but the endpoint you point at sees your conversation. Chat history recording is off by default and stored in the app's private directory when enabled. Choosing a provider is therefore a privacy decision, not just a billing one.

## Knowledge base and contacts as the difference from a plain LLM wrapper

The feature that separates this from pasting text into a chat window is local context injection. Notes carry a title, content, tags and a persistent flag. Persistent notes are included every time; other notes are included only when a tag or title appears in the conversation title or the last six messages, capped at five. Import works by pasting multi-line text, with blank lines separating entries and the first line of each entry becoming the title.

Contacts store a name, aliases (one per line), relationship and notes. Matching triggers when the conversation title matches the name or any alias, ignoring trailing member counts in group names, surrounding whitespace and case differences. Long-pressing a bubble in the overlay saves the current conversation as a contact. The panel header shows a line like "knowledge base N entries, history M entries" so you can see what was actually attached to a request.

This is a real mechanism with a real ceiling. Five notes and thirty history messages is not a retrieval system, it is a bounded context window. For a long-running relationship with hundreds of notes, most of them will never be attached unless their tags happen to surface in the recent messages.

## Model endpoints, presets and what the judgment interface actually calls

The judgment, reply and vision routes each take their own address, key and model. The README lists built-in presets: OpenRouter, Bocha Jev, TypeSafe direct, Vercel, OpenCode Zen, DeepSeek official and a Tongyi-compatible option. The Bocha Jev preset, added in v1.4, fills the address `https://jev.bocha.cn` and the model `bocha-jev-v1`, described as free for a limited period. The Vercel preset uses `https://ai-gateway.vercel.sh/typesafe` with the model `typesafe-ai/jev`. The OpenCode Zen preset uses `https://opencode.ai/zen` with the model `jev-1.13`, priced at free output and $0.042 per million input tokens, with roughly 1000 input tokens per judgment; the README notes `jev-1.13-free` can be substituted manually but is limited. These presets share the `POST /v1/systemone` protocol.

The upgrade behavior is worth noting. Fresh installs default to OpenRouter, and the README states that existing users who already configured a judgment interface keep their provider and key untouched; the old single key migrates once into the new three-card layout. That is a more careful migration story than most side projects bother with, and it suggests the author expects existing installs to survive version bumps. The trade-off is that the preset list is a moving target tied to sponsor and partner arrangements, so a free tier you rely on today may not be free later.

## Licence, maintenance and the cost of keeping it running

The repository is MIT licensed, with a separate NOTICE file and a PRIVACY.md covering data categories and retention. MIT means you can fork, modify and redistribute, including commercially, provided the copyright notice and licence text travel with the code. It says nothing about the third-party model services you point the app at; their terms and privacy policies govern the text you send them, and the README explicitly defers to them. This is a description of the licence, not legal advice.

The last push to the default branch was on 2026-09-28, and the repository is not archived. Releases v1.2 through v1.4 landed between 2026-09-22 and 2026-09-23, adding X direct messages, interface customization with knowledge base and OCR fallback, and the Bocha Jev judgment preset. That is a fast release cadence over a short window, and the CHANGELOG file is the place to check what changed between versions.

Upgrade cost is mostly operational. Installing a new APK over an old one preserves keys and settings, but the README warns that an accessibility toggle is needed after moving to 1.3 or later for screenshots to work, that debug-to-release switches require a full uninstall, and that Xiaomi and HyperOS reset overlay permission after reinstall. Budget for re-running the wizard after each vendor update, not just after each Jev release.

## Conclusion

Adopt Jev Chat Jarvis if you already have an OpenRouter or compatible key, run Android 11+ on an arm64 device, and want reply drafts inside QQ, X or Feishu without modifying those apps. Skip it if you need an iPhone build, a web client, or automatic sending; none of those exist here, and the README states WeChat on Android is no longer collected or processed. Before installing, confirm your device is arm64-v8a, that you can keep the accessibility service and overlay permission alive through your vendor's battery manager, and which endpoint the analysis text will reach, because that is where your conversation goes.

## FAQ

### Does Jev Chat Jarvis send messages on my behalf?

No. The README states the program only fills the selected reply into the input box, and the send key is always pressed by you. It also says transfers, red packets and payment collection are never touched.

### Does Jev Chat Jarvis need root or Xposed, and can it get my account banned?

The README says no root and no modules are required. It does not modify chat app packages, inject into their processes, or call their APIs or account systems; it only reads interface content exposed by the system accessibility service, the same way a screen reader works.

### Will my chat records be uploaded by Jev Chat Jarvis?

When analysis triggers, the current chat text plus any enabled contact notes, knowledge-base hits and history are sent to the model endpoint you configured. Screenshots are OCRed locally and not uploaded, the author operates no relay server, and history recording is off by default and stored in the app's private directory when enabled.

### Which platforms and devices does Jev Chat Jarvis support?

The Android APK requires Android 11 or later and ARM64 (arm64-v8a). QQ and X direct messages run the full pipeline, Feishu uses OCR fallback, and macOS and Windows are separate repositories. The README lists a web version as planned, and states WeChat on Android is no longer collected or processed.

## Sources

- [Issues](https://github.com/jev-chat/jev-chat-jarvis/issues)
- [jev-chat/jev-chat-jarvis on GitHub](https://github.com/jev-chat/jev-chat-jarvis)
- [License: MIT](https://github.com/jev-chat/jev-chat-jarvis/blob/main/LICENSE)
- [README](https://github.com/jev-chat/jev-chat-jarvis/blob/main/README.md)
- [Releases](https://github.com/jev-chat/jev-chat-jarvis/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/jev-chat-jev-chat-jarvis
