// jev-swap shadow proxy

Mirror live traffic to Jev. Change nothing.

A local proxy between your app and OpenAI or Anthropic. Every request is forwarded unchanged; decision calls are also sent to Jev in parallel, and a live dashboard shows how the two compare on your real traffic.

Runs on your machine. Your traffic never goes anywhere it doesn't already go, plus Jev.

agreesame label: billing+ latency, costper call, per fieldllm answerbillingjev answerbilling · conf 0.94matchmirrorcomparelatencycostjevllm</>// jev-swap shadow proxy// your app// jev · system one70–500 ms · $0.042 / 1M in// your llme.g. haiku 4.5 · $1 in / $5 out// forwarded unchanged// mirrored in parallel// typed answer + confidence// your response, untouchedyour app · triage.tslive// point your SDK at the shadow proxyconst openai = new OpenAI({ baseURL: "http://localhost:8787/openai/v1"});const t = await openai.chat.completions.parse({ model: "gpt-5.6-terra", response_format: zodResponseFormat(Ticket, "t"),});
llm: billingjev: billing · 0.94agree · faster · cheapermatchmirrorcomparelatencycost</>llmjev// your app// shadow proxy// your llmforwarded unchanged// jev · mirrored70–500 ms$0.042 / 1M inyour app · triage.ts// point your SDK at the proxynew OpenAI({ baseURL: "http://localhost:8787 /openai/v1"});

// how it works

Your app keeps its model. Jev shadows it.

01 · point

Point your client at the proxy

Set the base URL of your OpenAI or Anthropic SDK to the proxy. Your API keys pass straight through.

02 · mirror

Forward, and mirror decisions

Every request goes to your provider unchanged and your app gets its response. Requests that match a scanned decision call are also sent to Jev, in parallel.

03 · decide

Compare, then apply

Once a call has enough mirrored samples and a confidence threshold meets your accuracy target, apply that threshold to the generated Jev module in one click.

// the live dashboard

Measured on your traffic, not a benchmark.

  • Agreement between Jev and your model, per decision call and per field.
  • Latency of both, side by side, on the same requests.
  • Savings so far at the prices you pass in.
  • The confidence curve: how much traffic Jev covers at each threshold, and how accurate it is there.
  • A disagreement inbox of the requests where the two answered differently.
  • Replayable samples: mirrored calls are appended to proxy-samples.jsonl in the format jev-swap shadow reads.

// run it

Two environment variables.

$ npx jev-swap scan ./your-app      # find the decision calls to mirror
$ npx jev-swap convert
$ npx jev-swap proxy --llm-price-in 2 --llm-price-out 10

# point your app at it; API keys pass through untouched
OPENAI_BASE_URL=http://localhost:8787/openai/v1
ANTHROPIC_BASE_URL=http://localhost:8787/anthropic

The proxy runs locally on port 8787 (change it with --port) and serves its dashboard at http://localhost:8787/. Mirroring to Jev needs a TypeSafe API key in TYPESAFE_API_KEY.

Questions

Does the proxy change my responses?

No. Every request is forwarded to your provider unchanged and your app gets the provider's response. Jev only sees a copy of the decision calls, in parallel.

Which requests are mirrored?

Ones that match a call from jev-swap scan, by output schema, enum values or yes/no prompt text. Two calls with identical schemas or prompts both match the first one scanned.

What about streaming?

Streaming requests are forwarded but not mirrored.

What does Jev see?

The last user message as its state, plus the typed questions for that call.

Is the samples file safe to commit?

No. proxy-samples.jsonl contains your users' inputs: keep it out of version control.