Skip to content
MrJev

jevwire

An MCP server, an embeddable decision library, and an escalate-only Claude Code plugin in one repository.

View on GitHub →

Hands-on review

The most thorough guardrail here: root-confined reads, priced before sending, 1,461 tests. One entry in its sensitive-directory set can never match.

Good for

  • Path handling done properly: checked literally, relatively, and after realpath
  • Pricing the request before sending it, and refusing over a dollar ceiling
  • Saying in the tool description that it is not a security boundary

Watch out for

  • `.config/gcloud` is in the sensitive set but is matched against single path segments
  • The Claude Code hook fails open: an outage silently allows the action
  • Every install command in the README is broken; it is not on npm

Tested Sep 20, 2026 at fabe7e7 · Node in Docker, offline against a local stand-in driven over stdio MCP; 1,461 tests

How we reviewed this: we ran its 1,461 tests in Docker offline, drove all six tools over stdio MCP against a local stand-in, and probed the path rules with planted files. We made no Jev calls.

What it does

Three things in one repository: an MCP server with six tools, an embeddable decision library with no MCP or schema dependencies, and a Claude Code hook plugin with a resident daemon.

The gate questions are the most carefully constructed we have read. Each names the state path it judges, carries examples on the true side and a not_for clause on the side a lookalike case would wrongly land in:

Does action delete, overwrite, or irreversibly change a file, a git ref, a database, or other state that existed before it ran?

with focus: “Judge the command or edit as written. Creating something new, or a change that git, an undo, or a re-run can put back, is not destructive.”

And the tool description says, in capitals, that this is not a security boundary and that text arguing for its own approval can shift the result. Nothing else in this ecosystem limits its own claims that way.

The file handling is the strongest part. Paths are checked for sensitivity three times — literally, relative, and again after realpath — and confined to a project root by realpath containment, so .., absolute paths and symlinks out are one rejection rather than three. Requests are priced before they are sent, at the only point where nothing has left yet. We pointed jev_rank at a planted .env, a key file and /etc/passwd: two skipped as sensitive, one as outside root, and the planted secret appears nowhere in the captured requests.

The one rule that cannot fire

const SENSITIVE_DIRS = new Set([".ssh", ".aws", ".gnupg", ".config/gcloud", ".kube", ".docker"]);
…
const parts = normalized.split("/").filter((part) => part !== "");
…
if (parts.some((part) => SENSITIVE_DIRS.has(part))) return true;

parts are single path segments. ".config/gcloud" contains a slash, so no segment can ever equal it. Five of the six entries work; that one is dead code. Running the compiled predicate: .ssh/id_rsa, .aws/credentials, .kube/config and .docker/config.json all return true; .config/gcloud/application_default_credentials.json returns false.

In the MCP server the gap is usually covered by root confinement, since gcloud credentials live outside a project. In the hook’s prefilter it is not covered: a command reading that file does not pick up the “sensitive path” reason that would send it to be judged.

The irony is in the file’s own header, which explains why there is exactly one copy of this predicate: “Two copies of a security predicate drift, and the copy that drifts is the one that stops refusing.” They prevented the drift and shipped a typo in the single copy. It is a one-word fix, and reported.

What to know before installing

The hook fails open. An upstream error is logged and the handler returns nothing, which means Claude Code proceeds. That is consistent with a plugin that only ever escalates and never approves — "allow" is not even representable in the handler, guarded by a 37-case test — but it means an outage removes the gate entirely and quietly.

And every installation command in the README is broken: jevwire does not exist on npm. The only route that works is the Claude Code plugin marketplace.

Verdict

1,461 tests, zero failures, a daemon memo cache that refuses to bill for calls it did not make, and a security predicate with a comment explaining its own design. The care here is real.

Fix the one dead entry, publish the package the README tells people to install, and know that when Jev is down this guard is not there.

For the same gate with a narrower scope, see jev-gates and pi-warden.

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

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

More in Agent Integrations (MCP & Skills)

Hermes Jev Skills

★ 1.3k▲ 98

kerpopule/hermes-jev-skills

Bundle of skills that hand an agent's small decisions to Jev: model routing, skill selection, retrieval filtering, compaction, and computer use, with a routing dashboard. Works with Hermes, Claude Code, and Codex.

PythonReviewed

Awesome Jev Skills

★ 662▲ 12

wuyoscar/jev-skill

Nine installable agent skills — triage, routing, code review, document and UI work — with a catalogue of scenarios to copy.

PythonReviewed

jev-mcp

★ 566▲ 18

jkudish/jev-mcp

Proof-of-concept MCP server with ready-made tools for fact checking, prompt-injection detection, and semantic ranking.

JavaScriptReviewed

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.