JEVX
JEVX

Find where Jev fits in your codebase.

Regexes that guess what an error means. Keyword lists that guess what a customer wants. slice(0, 3) that guesses what's best. JevX finds these judgment calls hiding as rules, and hands them to Jev. The old rule stays as the fallback.

$ npx @vij-sameerb5/jevx --dry-run

      
  1. ScanIndexes your repo on your machine. Free.
  2. UnderstandYour AI reads the source, logic first.
  3. ValidateAI, TypeSafe and patterns each score every spot.
  4. PreviewRed/green diffs and scorecards.
  5. ApplyStrong fits only. Old rule kept as the fallback.
  6. TestYour tests run before and after. Breaks are reverted.
What is JevX

Some of your if-statements are really judgment calls.

Jev (TypeSafe) answers bounded questions about messy input: a yes/no (noul), a pick from a list (choice) or a rating (score). JevX is the tool that finds where your code should be asking one.

Before · a guess written as a rule
if (/User rejected|denied/i.test(msg)) {
  setError("You cancelled…");
} else if (/timeout/i.test(msg)) {
  setError("Not confirmed in time…");
} else if (/insufficient|balance/i.test(msg)) {
  setError("Not enough funds…");
}

Every wallet words its errors differently. Anything the regexes miss shows the raw error to the user.

After · Jev decides, the rule is the fallback
const kind = await failureKind(msg);
// choice: cancelled | timeout | funds | other

async function failureKind(msg) {
  try { return (await jev.systemOne(…)).answers.kind.choice; }
  catch { return legacyFailureKind(msg); }
}

New wordings are classified correctly. If Jev is unreachable, behaviour is exactly what it was.

How it works

Your AI reads. Three sources judge. Your tests decide.

Reads everything

Your AI reads the source files part by part: API routes and libraries first, UI last. Static analysis only sets the reading order. It never decides what gets read.

Scores three ways

Every spot gets a scorecard: your AI's opinion, TypeSafe's own opinion, and patterns learned from real Jev projects. If they disagree, JevX shows it instead of hiding it in an average.

Changes only strong fits

70% and up by default. It keeps the old rule as the fallback, updates callers, adds @typesafe-ai/sdk, and skips files you're still editing.

Proves it with your tests

Your test script and typecheck run before and after. A change that breaks something that passed is reverted on its own. jevx undo puts everything back.

AI61%
TypeSafe63%
Patterns69%
JEV FIT64% POSSIBLE

A real scorecard from a Next.js checkout. It's under 70%, so it's previewed, not written, unless you ask with --min-fit.

CLI

One command, with your own AI key.

JevX never ships a key. It uses xAI (Grok) or OpenRouter with your key, asks once before sending code, and never uploads your whole repo anywhere else.

# preview: nothing is written
jevx --dry-run

# change strong fits, run your tests
jevx

# put everything back
jevx undo

What a run costs

About 15–25 AI calls for a 50-file app, roughly $0.50–0.90 on your key with Grok 4.6. --budget caps it, and --fast reads with less reasoning.

When you want more

--min-fit 55 also writes fits from 55%. It warns you below 70% and never goes under 50%.

MCP · Claude Desktop · Claude Code · Cursor · VS Code · more

Or let the AI you already use do it.

JevX is also an MCP server with 11 tools. Your AI reads the code with its own tokens. JevX adds the Jev know-how, the scorecard, red/green diffs and a safe apply with your tests. You don't need an xAI key for this. Pick your app below.

1 · Install

Claude Desktop: double-click jevx.mcpb. Everything else: npm i -g @vij-sameerb5/jevx, then jevx mcp install.

2 · Restart

Quit the app fully and open it again. JevX's tools appear in the tools / MCP menu.

3 · Ask

Open your project and say "use jevx to find where Jev fits in this repo". Add "preview only" to change nothing.

Claude Desktop: the .mcpb extension

  1. Download jevx-0.4.0.mcpb from GitHub releases.
  2. Double-click it. Or go to Settings → Extensions → Advanced settings → Install extension… and choose the file.
  3. Click Install. Pick your Project folder. You can add a TypeSafe API key too (optional).
  4. Make sure JevX is switched on, then start a new chat.
  5. Say "use jevx to find where Jev fits in my project".

You don't need a terminal, npm or config file. Claude Desktop keeps the TypeSafe key in its own settings, never in JevX.

"Not verified by Anthropic"? That's expected for any extension from outside Anthropic's directory. The code is open on GitHub, and the file is built by scripts/build-mcpb.mjs.

Asked to allow every tool? Choose Always allow for the read-only tools (see the table below). Keep jevx_apply on Allow once, because it changes files.

Another project? Name it in chat: "…in ~/code/other-app".

What to say

use jevx to find where Jev fits in this repo
use jevx on ~/code/my-app. Preview only, don't change anything
use Jev where the fit is at least 60%
show me the JevX report
undo the JevX change

Without a fit you name, only STRONG fits (70%+) are changed. It never goes under 50%.

What each tool may do

READ-ONLYjevx_guide jevx_scan jevx_read jevx_related jevx_search — safe to always allow
.JEVX ONLYjevx_scorecard jevx_preview_change jevx_report — write only JevX's own git-ignored .jevx/ folder
CHANGES FILESjevx_apply jevx_undo — backup, your tests before and after, automatic revert
SENDS · OPT-INjevx_share — anonymous outcomes only, never code, names or paths

Add TypeSafe (optional)

With a TypeSafe key, every scorecard gets Jev's own opinion as a third score. Without one, jevx_scan says TypeSafe NOT configured and scorecards use two sources.

  • Claude Desktop (.mcpb): the TypeSafe API key field (Settings → Extensions → JevX)
  • Everything else: put TYPESAFE_API_KEY=… in a file and point JEVX_ENV_FILE at it

Remove it

# every app it was added to
jevx mcp uninstall

# Claude Code only
claude mcp remove --scope user jevx

The Claude Desktop extension: Settings → Extensions → JevX → Uninstall. Each config file is backed up once before its first change, as <file>.jevx-backup.

If something's off

  • No JevX tools: quit the app fully and reopen it. Then check that the config is valid JSON.
  • "… is not a project folder": name your project in chat, or set the Project folder / JEVX_ROOT.
  • spawn npx / node ENOENT: the app can't see your PATH. Run jevx mcp install, which uses absolute paths.
  • Still stuck: run jevx mcp in a terminal. It should print ready.
Installation

Up and running in a minute.

npm i -g @vij-sameerb5/jevx          # or use npx @vij-sameerb5/jevx
export XAI_API_KEY=…    # or OPENROUTER_API_KEY
export TYPESAFE_API_KEY=…  # optional
cd your-project
jevx --dry-run

Requirements

Node 20.10 or newer, and a TypeScript or JavaScript project. Works on macOS, Linux and Windows.

Keys in a file

Put KEY=value lines in a file and set JEVX_ENV_FILE to it once. Anything you export in your shell still wins.

Commands

Everything it does.

CommandWhat it does
jevxFind, judge, change strong fits (70%+), run your checks
jevx --dry-runPreview every fit from 50%, with diffs. Writes nothing
jevx --min-fit <n>Write fits from n% (50–100). Warns below 70
jevx --include-disagreeAlso write fits the three sources disagree on
jevx undoRestore every file the last run changed
jevx --fastLess AI reasoning while reading. Cheaper, may miss spots
jevx --shareShare anonymous outcomes to improve JevX (opt-in)
jevx --report-json out.jsonSave the full result on your machine
jevx mcp installAdd JevX to every AI app on this machine (uninstall removes it)
jevx --welcomeShow the JEVX welcome again
Privacy

Your code goes to your AI, and nowhere else.

Sent to your AI (your key)

  • Your source files, with secrets scrubbed
  • Asked once per provider before anything is sent
  • Official provider addresses only

Shared with JevX (only with --share)

  • The kind of code, e.g. "regex on an error message"
  • Why Jev fits, the three scores, what happened
  • A random repo id, nothing else

Never leaves your machine

  • Code, file or function names, paths, string literals
  • .env files, tests, builds, node_modules
  • Your API keys. They come from your environment only
Examples

What it found on a real app.

GlobalCare is a Next.js medical-travel app with 53 files. xAI read all of it.

SpotVerdictWhy
checkout/page.tsx wallet errors64% POSSIBLEError text varies by wallet; regexes miss new wordings
countryImages.ts free-text lookup49% disagreeReal, but cosmetic
JourneyTicket.tsx airport code45% disagreeA real bug, but a proper airport lookup fixes it better
flights / hotels slice(0, n)left aloneGoogle already ranks them, and there's no patient data to judge with
refunds · escrow · paymentsnever proposedMoney logic stays exact
In one line

What is JevX?

JevX finds the judgment calls hiding as hardcoded rules in your TypeScript or JavaScript code, and hands them to Jev.

Finds

Regexes guessing what an error means, keyword lists guessing intent, slice(0, 3) guessing what's best.

Proves

Every spot is scored three ways: your AI, TypeSafe and learned patterns. Only strong fits (70%+) change.

Stays safe

The old rule stays as the fallback. Your tests run before and after, and jevx undo puts everything back.

Use it from the terminal with your own AI key, or as an MCP server inside Claude, Cursor, VS Code and more. It's free and open source (MIT).