Skip to content
MrJev

jevbox

Permission-aware document library: browse document trees and parsed output, search the hierarchy with Jev, and ask source-grounded questions.

View on GitHub →

Hands-on review

A self-hosted document library where Jev walks the folder tree and scores passages. Permission checks held under our probe; busy errors are now retried.

Good for

  • Teams that want search and cited answers over shared documents where each person only reaches what they may read
  • Folder trees too deep for summaries: Jev chooses the branch at each level instead of an embedding guessing
  • Reading how permission checks are threaded through every outbound model call

Watch out for

  • Search and document questions need a decision-model key (TypeSafe or Cloudflare), and PDFs and Office files need an Extend key
  • It sends `jev-latest`, unpinned, to a fixed TypeSafe address

Tested Oct 7, 2026 at aaa9381bcdca · Node 24 and pnpm 12.9 in Docker, against the repository's own PostgreSQL 17 and SpiceDB 1.48 containers; its 279 tests and our own probe on its test harness, with a fake provider in place of TypeSafe

How we reviewed this: we installed the repository at aaa9381, started its own PostgreSQL and SpiceDB containers, and ran its 279 tests. We then wrote two tests of our own on top of its test harness, which drives the real HTTP routes, database and SpiceDB with a fake fetch in place of every provider, and counted what went to TypeSafe. We made no Jev calls, so nothing here measures search quality.

What it is

From Extend, a document-parsing company: a full-stack document library with a Finder-style browser, viewers for PDF, Office, code, tables and media, organisations with members and roles, per-document sharing, chat with citations, a REST API and an MCP server. Permissions live in SpiceDB, and every route checks them.

Jev — or Cloudflare’s Clef, the other supported decision model — does three jobs:

  • search, as a beam search down the folder tree: at each level, a choice question picks the branches worth opening, through categories, documents and sections;
  • usefulness scoring of each source passage before it may reach a chat model;
  • automatic filing of uploads into existing folders, keeping uncertain documents higher up.

Search and document questions do not work without a decision-model key. Plain text, Markdown, code, JSON, HTML and CSV are indexed locally; PDFs, Office files and images need an Extend API key for parsing.

Does Jev only see what you may see?

For a library with sharing, this is the question that matters. The repository’s own suite asks it many ways — “search and outbound routing exclude unauthorized source material”, “JEV rechecks membership before every outbound batch”, “context scoring rechecks permissions and excludes revoked results” — and 274 of 279 tests passed. The five failures were thumbnail and PDF rendering tests that need the Playwright Chromium the Dockerfile installs and our container did not have.

Its suite checks document text. We also checked the metadata around it. In an organisation with an owner and a member, the owner created a private folder and a private document inside it, each with a marker in the folder name, file name, heading and body. The member then uploaded a document of their own and searched for words in the owner’s secret.

who searched owner’s folder name file name heading body results
member not sent not sent not sent not sent three passages, all from the member’s own file
owner (control) not sent sent sent sent three passages

The owner’s own private content does go to TypeSafe when the owner searches, as it must. Nothing of it reached Jev on the member’s behalf. That is the design working: permission filtering happens before the decision request is built, not after.

When TypeSafe is busy

At aaa9381 each decision request was made once. We had the fake provider answer the first TypeSafe call of a member’s search with 529 Overloaded:

502 {"error":"Provider request failed (529). Check your key and account limits."}

The same search a moment later returned its results. A beam search makes several decision requests in a row, so one transient error loses the whole search, and the message sends you to your settings for a problem that is not your key. TypeSafe documents 529 as transient and its official SDKs retry it. We reported it, with two smaller notes: it sends the unpinned jev-latest, so the usefulness thresholds can shift when TypeSafe moves the alias, and the TypeSafe address is fixed, so it cannot point at a compatible self-hosted server.

Fixed on 7 October (2c6bc58). A 429 or 529 from TypeSafe is now retried up to twice, honouring retry-after, and the message names the cause (“temporarily overloaded (529). Please try again shortly”) instead of your key. On 13 October we called its request function at 672668f with a fake provider. One 529 followed by an answer succeeded after about half a second. One 429 with retry-after: 1 succeeded after a second. Three 529s in a row still fail, as they should. The model is still jev-latest and the address is still fixed.

What it takes to run

Node 24.6+, pnpm 12.9, and Docker for PostgreSQL, SpiceDB and a local mail catcher. pnpm setup:local writes the configuration and an encryption key, and keys for the model providers are stored encrypted and never sent back to the browser. Render, Docker, Helm and AWS deployments are documented. The licence file is MIT, from CrowdView Inc. (Extend), though GitHub’s detector does not label it; third-party notices sit in licenses/.

Verdict

The most careful permission design we have seen in a Jev project. SpiceDB checks are woven through search, scoring, chat context and revocation, and the test suite tries to break them in the ways that matter. Our own probe, aimed at the folder names and file names its suite does not check, found nothing leaking. 672 stars, 288 of them in the last three days.

Fix one thing before relying on it under load: a single overloaded response from TypeSafe ends the search. And remember what you are configuring. The member’s own passages do go to TypeSafe, and then to whichever chat model you choose. Permissions decide whose documents leave the server, not whether any do. For another project that walks a document tree with Jev, see jev-doc-search.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Oct 13, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Apps & Browser Extensions

Jev Chat Assistant

★ 8.2k▲ 105

jev-chat/jev-chat-jarvis

Android chat assistant that reads the conversation on screen through the accessibility service, has Jev judge the other person's intent and the risk, and fills in a drafted reply that you send yourself. Chinese and English editions.

Kotlin

OpenMuse

★ 6.1k▲ 479

CopilotKit/openmuse

CopilotKit's self-hosted personal agent with its own browser, terminal and files; Jev decides whether a reply becomes a clarification panel, a comparison of options or plain prose, and overrides the agent only when confident. Alpha.

TypeScriptReviewed

Shapeshift

★ 1.1k▲ 16

anishfn/shapeshift

One text box that turns what you type into the right small interface, an event card or a checklist or a bill split, with Jev choosing which; falls back to rules when no key is set.

TypeScriptReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.