Show HN: Ephemeral runner for JEV-style models Developer zatsepin released jigor, a Rust-based zero-shot classifier runner that executes JEV-style decision models locally via ONNX or remotely through OpenRouter's Decisions API. The tool installs via npm (@zatsepin/jigor), pip (jigor), or cargo (jigor-cli) and supports ephemeral execution through npx or uvx, with local backends von (sevenreasons/von-onnx-fp16, 759M model.onnx) and laya (Mattepiu/laya-onnx, fp32 and int8 variants) plus remote models typesafe/jev-1.13 and jaredpalmer/kev-4b. A sample remote call to typesafe/jev-1.13 returned a noul probability of 0.92 at a billed cost of $0.000012306 for 293 input tokens and 24 output tokens. This is a zero-shot classifier models gateway or runner. Or, if you prefer marketing terms, "System one decision" models. This is written in Rust blazing fast as it should be , one wire protocol across backends: von and laya run locally as ONNX via ort ; jev runs remotely on OpenRouter's Decisions API. - HF sevenreasons/von-onnx-fp16 model.onnx 759M, tokenizer/tokenizer.json 3.5M - HF Mattepiu/laya-onnx laya.onnx fp32 — matches the python reference bit-for-bit; int8/laya int8.onnx via LAYA ONNX FILE - OpenRouter Decisions typesafe/jev-1.13 , jaredpalmer/kev-4b You can install it via npm, pip, or cargo. Is it enough? If not - subscribe https://zatsepin.dev/subscribe npm install --global @zatsepin/jigor pnpm approve-builds may be needed pip install jigor cargo install jigor-cli --locked cargo bininstall jigor-cli You can use ephemeral execution with npx or uvx. npx @zatsepin/jigor ask --model von <<'JSON' { "state": { "error": "Disk volume /var/log at 98% capacity." }, "questions": { "requires intervention": { "type": "noul", "instructions": "Does this disk space condition require operational intervention?" } } } JSON {"answers":{"requires intervention":{"noul":0.7822,"type":"noul"}},"backend":"local","model":"von-1.0.0"} If you have OPENROUTER API KEY in your env, you can easily run this from your terminal and get a quick response. npx @zatsepin/jigor ask --model jev <<'JSON' { "state": { "error": "Disk volume /var/log at 98% capacity." }, "questions": { "requires intervention": { "type": "noul", "instructions": "Does this disk space condition require operational intervention?" } } } JSON {"answers":{"requires intervention":{"noul":0.92,"type":"noul"}},"backend":"openrouter","model":"typesafe/jev-1.13","usage":{"cost":0.000012306,"input tokens":293,"output tokens":24}} Feel free to use it with your agents. This README.md is enough to teach them how to use it. One dependency, one entry per backend — noul / choice / score questions in, typed answers out. Identical on von, laya and any OpenRouter model. dependencies jigor = { path = "../jigor" } local checkout jigor = { git = "https://github.com/Partysun/jigor" } from GitHub jigor = "0.1.5" once published serde json = { version = "1.0" } Value, json use jigor::{Answer, Question, Backend, Result, VonBackend, choice, noul, score}; use serde json::json; fn main - Result< { let mut von = VonBackend::new ?; // VonBackend::new, LayaBackend::new, // OpenRouterBackend::for model ... : // the same answers call on all three let questions = vec noul "churn", "Is the customer likely to churn?" , choice "want", "What does the customer want?", & "refund", "order status", "technical help" , , score "urgency", "How urgent is this?", & "calm", "annoyed", "angry" , ; let asks = von.answers &json "Customer: I was charged twice for order 4471." , &questions, None, ?; match asks.get "churn" .unwrap { Answer::Noul { probability } = println "churn: {:.4}", probability , = {}, } Ok } Only have a model id? jigor::ask resolves aliases and the provider for you: js let asks = jigor::ask "jev", &state, &questions, None ?; // OpenRouter jev let asks = jigor::ask "laya", &state, &questions, None ?; // local laya // Asks { model, backend, answers, usage } // usage: tokens + billed cost USD on remote asks, None for local backends Errors are one type — jigor::Error carried by jigor::Result