CLI reference

Every command and every flag, generated from the parser jul runs (jul <command> --help prints the same). For what the commands are for, with examples and file formats, read Command line first.

Command What it does
jul setup install the backend, download the model, check a first answer
jul ask one typed question, answered now
jul run answer a question file over a JSONL input
jul context create, list, show or delete a saved context
jul autotune train a per-task head from labeled examples
jul pack pack questions (and a context's heads) into a bundle to deploy; trains nothing
jul synth write a synthetic labeled dataset (for a later autotune)
jul models list the presets, or fit one for a new model (add)
jul serve serve the Jev HTTP protocol (POST /v1/systemone) locally
jul bench which model for your questions: accuracy, latency, autotune, on your data
jul lab research commands

jul setup

install the backend, download the model, check a first answer.

jul setup [-h] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--no-install] [--no-check]
Argument Values Default What it does
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--no-install do not pip install a missing backend
--no-check skip the final test decision

jul ask

one typed question, answered now.

jul ask [-h] [-o OPTION] --state STATE [--model MODEL] [--backend {mlx,torch,onnx,api}] [--context CONTEXT] [--method {vector,letters,cross}] {choice,noul,score} instructions
Argument Values Default What it does
kind choice, noul, score
instructions
-o, --option OPTION choice: key[:description]; noul: true:meaning / false:meaning; score: a level description, lowest first
--state STATE the text to judge (repeatable) required
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--context CONTEXT name of a saved context
--method METHOD vector, letters, cross

jul run

answer a question file over a JSONL input.

jul run [-h] --input INPUT [--output OUTPUT] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--context CONTEXT] [--method {vector,letters,cross}] questions
Argument Values Default What it does
questions
--input INPUT required
--output OUTPUT
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--context CONTEXT
--method METHOD vector, letters, cross

jul context

create, list, show or delete a saved context.

jul context [-h] [--description DESCRIPTION] [--examples EXAMPLES] [--use-description] [--lazy] [--model MODEL] [--backend {mlx,torch,onnx,api}] {create,list,show,delete} [name]
Argument Values Default What it does
action create, list, show, delete
name
--description DESCRIPTION
--examples EXAMPLES .txt (one per line) or .jsonl with a text field
--use-description also put the description in the prompts; measured harmful on average, so it is off unless you ask and measure on your own data
--lazy do not compute the centers now
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch

jul autotune

train a per-task head from labeled examples.

jul autotune [-h] --questions QUESTIONS --labeled LABELED [--features {vector,lexical,hybrid}] [--model MODEL] [--backend {mlx,torch,onnx,api}] context
Argument Values Default What it does
context name of the context the head is stored in
--questions QUESTIONS required
--labeled LABELED JSONL: {state, answers: {question: answer}} required
--features FEATURES vector, lexical, hybrid vector what the head reads: the model's vectors (default), TF-IDF of the text, or both
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch

jul pack

pack questions (and a context's heads) into a bundle to deploy; trains nothing.

jul pack [-h] --questions QUESTIONS [--context CONTEXT] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--reading {auto,vector}] out
Argument Values Default What it does
out directory to write
--questions QUESTIONS required
--context CONTEXT context whose heads and calibration the bundle carries
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--reading READING auto, vector auto auto: the preset's cross model answers the types it declares (default); vector: every question as vectors, so the bundle needs the vector model only

jul synth

write a synthetic labeled dataset (for a later autotune).

jul synth [-h] [--seeds SEEDS] --output OUTPUT [--per-option PER_OPTION] --writer WRITER [--batch BATCH] [--temperature TEMPERATURE] [--seed SEED] questions
Argument Values Default What it does
questions
--seeds SEEDS JSONL of real examples: {state|text, answers?}; answers optional
--output OUTPUT JSONL in the format of autotune --labeled required
--per-option PER_OPTION 30 texts per option (default 30)
--writer WRITER a generative mlx-lm repo, e.g. an instruct model of 7B or more required
--batch BATCH 8 texts asked per call (default 8)
--temperature TEMPERATURE 0.9
--seed SEED

jul models

list the presets, or fit one for a new model (add).

jul models [-h] [--repo REPO] [--backend {mlx,torch,onnx,api}] [--data DATA] [--n-dev N_DEV] [--n-generic N_GENERIC] [--no-routing] [--route-above ROUTE_ABOVE] [--cross CROSS] [--no-cross] [--train-heads ROWS] [--questions QUESTIONS] [--epochs EPOCHS] [{list,add}] [name]
Argument Values Default What it does
action list, add list
name add: the preset name
--repo REPO add: Hugging Face repo (default: the known repo for this name), or a local directory; one holding a decision.json is added as a decision model
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--data DATA add: calibration data dir (default: fetched into ~/.jul/calibration-data)
--n-dev N_DEV 50 add: examples per dev set (default 50)
--n-generic N_GENERIC 200 add: generic texts (default 200)
--no-routing add, decision model: skip fitting the vector reading long questions fall back to
--route-above ROUTE_ABOVE add, decision model: option count above which it falls back to vectors; 0 disables the routing. Default: measured (or its decision.json, if it says)
--cross CROSS add: a cross model (directory or repo with a cross.json) that answers the question types it declares; without --repo, attached to the fitted preset. A repo carrying one in cross/ gets it without this flag
--no-cross add: ignore the cross model the repo carries
--train-heads ROWS add: train contrastive heads on the --repo backbone (kept frozen) from labeled rows, JSONL {state, type, question, options, answer} or parquet; with --questions, autotune's format {state, answers}. Needs torch for the training
--questions QUESTIONS add --train-heads: the question file the rows answer
--epochs EPOCHS 40 add --train-heads: maximum epochs (default 40)

jul serve

serve the Jev HTTP protocol (POST /v1/systemone) locally.

jul serve [-h] [--model MODEL] [--backend {mlx,torch,onnx,api}] [--host HOST] [--port PORT] [--api-key API_KEY] [--no-warmup] [--escalate-to TARGET] [--escalate-model ESCALATE_MODEL] [--escalate-key-env VAR] [--min-confidence MIN_CONFIDENCE]
Argument Values Default What it does
--model MODEL preset: wemm-4b-4bit, minicpm5-2b, jul-decision-wemm-4b, jul-decision-minicpm5-2b (aliases: fast, accurate)
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--host HOST 127.0.0.1 bind address (default 127.0.0.1, local only)
--port PORT 8577 port (default 8577)
--api-key API_KEY require this key, as Authorization: Bearer or x-api-key (else $JUL_API_KEY). Recommended when binding beyond 127.0.0.1.
--no-warmup do not load the model before serving
--escalate-to TARGET send answers below --min-confidence elsewhere: typesafe (key in TYPESAFE_API_KEY), ollama[:model], cloudflare[:clef|clef-flash] (CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN), or the URL of any /v1/systemone server. The state leaves the machine
--escalate-model ESCALATE_MODEL model asked there (default: the provider's)
--escalate-key-env VAR the environment variable holding that server's key, for a URL target
--min-confidence MIN_CONFIDENCE 0.8 the bar below which an answer escalates (default 0.8; a Noul counts max(p, 1-p))

jul bench

which model for your questions: accuracy, latency, autotune, on your data.

jul bench [-h] [--train TRAIN] [--models MODELS] [--remote-key-env VAR] [--escalate-to TARGET] [--min-confidence MIN_CONFIDENCE] [--backend {mlx,torch,onnx,api}] [--method M[,M]|auto] [--features F[,F]|auto] [--output OUTPUT] [--json] [--near NEAR] [--drop-overlap] [--allow-overlap] [--quiet] [--on-long {cut,error}] test
Argument Values Default What it does
test JSONL or CSV, one row per answer: question, state, options, answer (type optional)
--train TRAIN same format: rows to autotune on; without it, zero-shot only
--models MODELS presets or aliases, comma-separated, each optionally @backend (e.g. jul-decision-e5-small@onnx,minicpm5-2b@torch); default: the default model. Also remote System One servers: typesafe (Jev), ollama[:model], cloudflare:clef|clef-flash, or URL#model (Kev, a hosted Laya...): the test rows are sent there
--remote-key-env VAR the environment variable holding the key of the URL targets in --models (providers use their own: TYPESAFE_API_KEY, CLOUDFLARE_API_TOKEN)
--escalate-to TARGET also measure each local model as a cascade: itself first, then this remote server (same targets as --models) for the answers below --min-confidence; reports the accuracy and the share of rows sent there
--min-confidence MIN_CONFIDENCE 0.8 the cascade's bar (default 0.8, as jul serve; a Noul counts max(p, 1-p))
--backend BACKEND mlx, torch, onnx, api default: $JUL_BACKEND, else mlx on Apple Silicon, else torch
--method M[,M]|auto zero-shot readings to compare: vector, letters, cross, or auto for every one the model takes (default: the model's own reading)
--features F[,F]|auto with --train: what the autotune heads read, vector, lexical, hybrid, or auto (default: vector)
--output, -O OUTPUT also write the full results as JSON to this file
--json print the JSON results instead of the tables
--near NEAR 0.8 similarity (character 5-grams) from which a test row counts as a near duplicate of a train row (default 0.8)
--drop-overlap drop test rows found in train (exact or near)
--allow-overlap run even with exact duplicates train/test
--quiet, -q no progress on stderr
--on-long ON_LONG cut, error a state over a reading's limit: cut (default, answer on its beginning) or error (refuse)

jul lab

research commands.

jul lab [-h] ...
Argument Values Default What it does
rest passed through: extract, evaluate, bench, summary, ask, decide

Edit this page · JuL, Just use Less · Apache-2.0 · Not affiliated with TypeSafe AI or Jev.