Probe0 vs Jan
Jan is a desktop application that runs models on your machine and gives you a chat window over them. Probe0 sits under the coding agent CLIs you already run and controls where their traffic goes, what it costs, and what gets logged.
An open-source desktop app from Menlo Research that runs local GGUF models through llama.cpp behind a chat UI, with an OpenAI-compatible server on localhost and bring-your-own-key bridges to cloud providers.
| Feature | Probe0 | Jan | Edge |
|---|---|---|---|
| What you install | Local proxy plus one certificate; agents keep their own config | Desktop app with a chat UI and model manager | Even |
| Runs the model itself | No. Routes to Ollama or LM Studio, or to the cloud | Yes. Bundles llama.cpp, MLX on Apple Silicon, CUDA, Vulkan | Competitor |
| Setup for Claude Code, Codex and Cursor | One proxy, one certificate, all three covered, no per-tool setup | Point each tool at the localhost OpenAI-compatible server yourself | Probe0 |
| Spend limits | Hard cap per run and per day: warns, then pauses | None. Cloud keys are unmetered by Jan | Probe0 |
| Cost and usage records | Per-request ledger: model, tokens, real cost, latency, calling process | No usage or cost dashboard in the desktop app | Probe0 |
| Response caching | Exact cache on local disk plus a semantic cache with a strict similarity floor | Inference KV cache settings only, no response cache | Probe0 |
| Repeat work that skips the network | Exact hits served from disk; identical in-flight calls collapse into one | Every prompt re-runs inference | Probe0 |
| Routing decisions | Cheap model first, local model when one is loaded, weak answers retried on the cloud | Manual model choice, plus llama.cpp router presets for which local model serves | Probe0 |
| Tells you if your plan tier is wrong | Yes, from the recorded ledger of what you actually used | No usage record to base that on | Probe0 |
Jan owns its inference stack and Probe0 never will: it bundles llama.cpp, detects your hardware, and on Apple Silicon uses MLX rather than the slower Metal path. What it does not do is tell you what your coding agents cost, and that is the bill most developers are actually worried about. Probe0 installs one local proxy and one certificate, after which Claude Code, Codex and Cursor all route through it with nothing edited per tool. Spend Guard puts a hard cap on a run and on a day, warns, then pauses the run rather than mailing you an alert after the money is gone. Recording writes every request down with the model, token counts, real cost, latency and the process that made the call, so when I say a tier is wrong for you it comes from your ledger rather than a guess. No Probe0 server exists, so none of that leaves the machine.
The two products sit at different layers, which is the part most comparisons get wrong. Jan is the client and the server: you open Jan, you type in Jan, and Jan answers. Probe0 has no chat window at all. It intercepts what the coding agent CLIs already send. Jan can serve those same agents through its OpenAI-compatible endpoint on localhost:1337, but you point each tool at it yourself, and once a tool is pointed there you have swapped which model answers without gaining any control over what the traffic costs. Probe0 keeps the control: Local Routing sends work to a model already loaded in Ollama or LM Studio and retries weak answers on the cloud, Model Tiering tries the cheap model first, and every module switches off on its own and reports what it saved, so the numbers are auditable instead of a headline.
Cost control is where Jan's own ecosystem admits the gap. Paste a cloud API key into a Jan provider slot and nothing meters it; third-party guides tell Jan users to put a gateway such as LiteLLM or Cloudflare AI Gateway in front of the provider to get spend visibility. Probe0 is that piece, built for one developer's machine rather than for an org, and the caching is written for agents specifically. Exact Cache hits are served from local disk and never touch the network. Semantic Cache holds a strict similarity floor and refuses to match anything carrying tool calls, because a wrong hit in the middle of an agent run corrupts the run. Request Coalescing folds simultaneous identical calls into one upstream request. Sign-in is Google or GitHub with no password, and the ledger, the cache and the models stay on your disk.
The verdict
If your money goes through AI coding agents on a Mac, install Probe0. It is the layer that caps the spend, records where it went per process, and cuts the repeat traffic before it bills, and nothing in Jan does any of that. Jan is the better pick in one case: you want a cross-platform chat app that runs models on your own hardware with source you can read, and cost is not the problem you are solving. The two also run together, Jan as the local inference server and Probe0 deciding when to use it, which is the setup I would run on a Mac.
Questions
- Can I use Jan and Probe0 at the same time?
- Yes, and that is a sensible setup. Jan runs and manages the local models, and Probe0 handles local LLM routing for your coding agents, sending work to a loaded model when one fits and falling back to the cloud when the answer looks weak.
- Does Jan track how much my API spending costs?
- The Jan desktop app does not. Cloud access is a bring-your-own-key setup with no metering, budget or cap, and Jan's own community commonly recommends putting an LLM proxy in front of the provider for cost visibility. Probe0 covers that with a per-request ledger and hard spend caps.
- Is Probe0 open source like Jan?
- No. Jan is Apache 2.0 and you can read the whole codebase; Probe0 is in private beta with sign-in via Google or GitHub. Probe0 still runs entirely on your machine and there is no Probe0 server, but Jan wins clearly on auditability.
- Which one works with Claude Code and Codex?
- Both can, differently. Jan exposes an OpenAI-compatible endpoint you point each tool at one by one. Probe0 installs as a local proxy plus a certificate, and every AI coding agent CLI on the machine routes through it for LLM cost control without per-tool configuration.