How we reviewed this: we ran it in Docker with the vendor domains pointed at 127.0.0.1 and verified they were unreachable, against local stand-ins. The macOS GUI was not run. We made no Jev calls.
What it does
A macOS workspace around OpenAI Codex: conversations and agents, a CodeGraph code explorer, Git, Ghostty terminals, Apple Notes. The Jev part is conversation memory — history_search finds past sessions and surfaces the original exchange, so you can recover a decision and its reasoning rather than a summary of it.
The idea is good and the retrieval architecture is sound. Several things around it are done properly: the key is encrypted at rest and read at the moment of use rather than held; updates are downloaded only from a github.com allow-list and verified with codesign -dv --verbose=4 and --verify --deep --strict before installation; and LICENSES/ plus THIRD_PARTY_NOTICES.md account for twenty-odd vendored tree-sitter grammars individually.
The settings page describes half of what the key does
There is one sentence explaining what your TypeSafe key is for, at desktop/frontend/src/features/settings/SettingsView.tsx:86:
<p>Connect your TypeSafe account to use Jev in Autopilot.</p>
and the supporting text below it (:112):
Your key is encrypted on this computer. A saved key takes priority over an environment key.
Autopilot usage and connection checks are billed to your TypeSafe account.
Research also uses your existing Codex login.
Every line is about Autopilot or billing. None mentions conversation history.
The same key object went to two places. desktop/workspace-runtime.mts passed getKey: options.getTypeSafeKey into createWorkspaceChatHistory, which handed it to createHistoryRecallEvaluator. So saving a key to try Autopilot also switched on history recall, and from then on Codex could call history_search, which sends candidate conversation text — up to 24 passages per page, drawn from across the workspace rather than the current session — to api.typesafe.ai. Nothing in the settings controlled it, and the MCP server registered regardless.
That is fixed, in 0.0.8-preview build 9, and the fix is better than the toggle we asked for. historyRecallEnabled is now its own stored preference; settings-service.mts initialises it to false and only a value that reads back as exactly true enables it, so a saved key, a key check or the old Autopilot preference cannot turn it on. The MCP server takes an access object and asks it on every call, with catch { return false } around the read — malformed preferences fail closed — and when recall is switched off it cancels the sessions already connected rather than only refusing the next one. When disabled it hands Codex a deliberately dead loopback transport, so Codex’s own transport validation cannot force the tool back on.
We re-ran the project’s tests for that path at 6c3c0e0: 9 passed, 2 skipped (the skips need an installed Codex binary), including
(pass) absent, false and malformed consent disable registration without injecting credentials
(pass) revoking consent blocks searches and source reads from already connected clients
(pass) revocation cancels every workspace request and suppresses late results after re-enabling
(pass) switching recall off aborts jev and never starts another provider
(pass) switching recall off aborts luna and never starts another provider
The maintainer’s own note on the limit is the right one to repeat: turning it off “cannot undo text already transmitted.”
What the user sees afterwards is a collapsed card reading “Jev history search · estimated $0.000x USD · N requests”. That is accurate, it arrives after the data has gone, and it is denominated in money rather than in what was sent.
What remains is the shape of recall itself. In our run, a query about one topic still shipped text from six unrelated conversations, and chat-history-recall.mts:105 still places zero-scoring passages after the scoring ones while keeping them in the same 24-item page. Consent is now explicit; breadth is unchanged, so what you are consenting to is candidate text from across the workspace, not just the thread you are in.
The one honest description is aimed at the model
desktop/lib/codex-chat-history-tools.mts:7:
{ name: 'history_search', description: 'Recover past decisions and reasons omitted from the current context. '
+ 'Search original saved dialogue using TypeSafe (candidate text is sent to TypeSafe). '
“candidate text is sent to TypeSafe” is exactly the sentence a user needs. It is an MCP tool description, so it goes into Codex’s prompt and nowhere a person will read it.
Meanwhile README.md mentions none of this. We counted: grep -ci 'jev\|typesafe\|autopilot\|recall' README.md returns 0, while the GitHub repository description opens with “Jev-powered conversation memory: find past sessions and revisit decisions with original sources.” The headline feature is absent from the document people read first, and the seven help pages under .docs/help/en/ do not mention it either.
To be fair about the scope of the criticism: Cheshi never promises that conversations stay local. README.md:82 says AI conversations “use the configured provider and its authentication” and that local indexing “does not mean AI requests run offline”. That is honest — it is just written about Codex, and there is a second provider it does not mention.
Moving the tool description’s own sentence into the settings panel, and adding a toggle, would fix this. The text already exists.
Verdict
MIT, 97 commits, a week old, one contributor. Seven preview releases, macOS arm64 only, distributed as a zip and a Homebrew cask. There is no release-build CI — signing is gated behind an environment variable and packages are built on the maintainer’s machine.
The engineering is decent and some of it is better than decent. The consent boundary we reported — one input labelled for one feature quietly enabling a second that sends conversation history somewhere the settings page never named — was closed within a day, and closed properly: a separate default-off switch, a gate that fails closed on malformed input, cancellation of work already in flight, and documentation in both languages. We asked for a checkbox and a copy change; what shipped is stricter than that.
Take build 9 or later. On anything earlier, a key saved for Autopilot is also a key that has been sending chat text.
For conversation memory that keeps the judging local, see invalidate.
See how it compares with other tools in Best Jev tools, tested hands-on.
Review updated Sep 21, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.