In a web request, a decision model has seconds and retries. In an editor it has a keystroke, a popup, and a user who will notice. Desktop integrations look like small tools: rank these completions, route this prompt, badge this post, suggest this folder. The judgment is narrow and the failure path is usually to do nothing.
Neovim: completion as ranking
jev-complete.nvim uses Jev as a ranking oracle rather than a generator. Buffer words appear instantly as fuzzy matches; then Jev re-ranks up to 30 candidates against the surrounding code and rebuilds the menu after about a second. It only ranks words already in the buffer, so it cannot invent an identifier. Without a key it stays fuzzy-only with one warning.
It reorders only above a 0.7 confidence threshold, uses a 3-second timeout, and supports noul, choice, or score formats, with noul the cheapest. Three guards protect the update: the popup must be visible, the cursor must not have moved, and the typed prefix must be unchanged. debug_guards names the guard that rejected an update.
It needs Neovim 0.12+, curl, and a key. Jev latency is 0.5–1.5 seconds, and auto-trigger increases calls; the trade is a better order for a menu that already appeared.
Neovim: routing and review
jev-router.nvim classifies a prompt with one Choice question named intent and dispatches to open a file, edit code, run a command, or answer a question. Edits apply as changed hunks behind a vimdiff preview, and commands appear in vim.ui.input before running.
Below 0.6 confidence the on_uncertain callback fires; for read_file the plugin falls back to a vim.ui.select picker rather than guessing, and the same fallback covers an unavailable API. The timeout defaults to 30,000 ms, and injected context is capped at 200 files and 20,000 characters.
It costs two calls: Jev routes, and a separate chat model writes or answers. Defaults are typesafe/jev-1.13 for routing and openai/gpt-4o-mini for chat. "Jev in the editor" usually means Jev decides which work to do, not that it does the work.
jev-lens.nvim is a viewer, not a judge. It reads the verdict file the separate jev-lens Claude Code plugin writes under ~/.claude/jev-lens/repos/<key>/verdict.json, keyed by a hash of the repo root. It makes no API calls, needs no key, and sends nothing out. The popup says whether to open a diff, which files matter, and why.
The strip action is the one thing that edits your buffer: it removes flagged debris after a confirm showing the count, refuses on unsaved changes, and re-checks every line first. Those checks catch a drifted file, not a wrong judgment. With jev-gates 0.4 or later, behavior-changing edits with no run, test, or check open the popup on their own. It needs Neovim 0.10+.
Obsidian: decisions over a vault
Jev Graph Search shortlists notes locally, then sends selected titles, bounded aliases, and excerpts to Jev for reranking. It returns the exact passage, not a summary. On one 8,851-node tax-code graph, top-five source recall rose from 63.9% to 81.8%; top-one rose from 33.2% to 73.2%. That is a single graph, and the README reports no other benchmark.
Search, place, audit, and traverse are the commands; place proposes changes without writing to the graph. Setup stores the key in a private per-user file outside the graph, and --offline uses local lexical ranking so the example runs without a key. Obsidian vaults are read recursively; Logseq Markdown works, but the Logseq database and Org-mode do not.
Jevault is a folder and tag suggester. It ranks existing folders and suggests tags with match probabilities. It never moves notes: pick a suggestion by click or 1–9 and confirm; Esc leaves the note in place. It requires Obsidian Desktop 1.11.4+ and a key stored as an Obsidian secret; there is no offline mode, and each request consumes credits.
Graph Search is retrieval with evidence; Jevault is a filing assistant that refuses to act without confirmation.
Chrome: feed filters
jev-lens badges X and LinkedIn posts READ, MAYBE, or SKIP as they scroll into view, judged against a plain-English interest profile. READ posts get a green border, SKIP posts fade out, and ads are skipped without a call. The README reports about 300 ms per judgment and roughly 3 cents per 1,000 posts at $0.042 per million input tokens with output free.
It is not on the Chrome Web Store: clone the repo, enable Developer mode, and load extension/ unpacked. The popup is the configuration screen: who you are, posts to read, posts to skip, thresholds, and the key. Until a key is saved, posts show a "no API key" badge instead of a verdict.
X Feed Pilot is a macOS app plus Chrome extension that browses, reads, and interacts with X's For You feed. Posts without images go to Jev; posts with their own images go to OpenAI's gpt-6-luna Decisions API. Sessions run up to 10 minutes or 80 posts, with 8 likes and 4 bookmarks. Decisions use a 15-second timeout, no retry, and no model switching; three consecutive failures stop the session. Reading history stays local; automating interactions may violate X's rules.
macOS and iOS: clipboard, chat, camera
jev-paste is a menu-bar app that decomposes copied text into semantic fields and offers an inline Tab hint when you focus a matching input. It keeps clipboard history with a 6-hour half-life and 24-hour default retention, and stays silent in search bars, URL bars, passwords, and generic inputs. Label matching fills a field whose label matches a Key: value line, in Chinese or English. Native paste is untouched. The catalog excerpt does not show credential setup; check the repository first.
jev-chat-jarvis reads visible WeChat messages through OCR or the system text interface, classifies intent and risk from 0 to 9, and drafts reply candidates without injecting anything into WeChat. It reports eight intents at 86.4% zero-shot on a 22-message Chinese regression set; that is a small set, not a benchmark. On an M1 Pro it estimates about 1.5 seconds for intent and 1.5–2 seconds for candidates. It can use TypeSafe Jev or a local decider-2b of about 7 GB, and is read-only. Prebuilt releases are not notarized.
PocketJev is the on-device contrast: an iOS prototype that runs Qwen3-VL-2B-4bit through MLX, reads the next-token logits for A/B/C, and scores 2–26 supplied options without generating text. It is 1.78 GB, downloaded on first use; inference stays on the phone. The README says the displayed percentages are relative scores among the supplied choices, not calibrated probabilities of correctness.
What the surfaces have in common
| Surface | Where judgment runs | Budget | Failure mode |
|---|---|---|---|
| Neovim completion | Hosted Jev | ~1s reorder | Keep fuzzy order |
| Neovim router | OpenRouter | 30s timeout | Picker or callback |
| Obsidian | Hosted Jev | Interactive | No write without confirm |
| Chrome feed | Hosted Jev | ~300ms | Skip ads, show no verdict |
| macOS / iOS | Hosted or local | 1.5–2s | Stay silent or manual |
Three rules apply. Keep the decision narrow enough to finish inside the interaction budget, and measure the tail with latency percentiles. Decide the fail-open behavior before shipping: a completion menu keeps its fuzzy order, a folder mover refuses, and a feed filter shows nothing rather than guesses. Put the write behind a confirm when the consequence is irreversible.
Local is real but not free. A local decision server removes the hop and keeps state on the machine, at the cost of hardware and calibration. Browser and Computer Use covers the agent side, Jev in Coding Agents covers the editor loop, and Multimodal Decision Models covers the image path behind Box and PocketJev. The desktop must feel instant; the work is making uncertainty deliberate.