Jev does not refuse in prose. It scores hazards. Code returns pass / review / block, then a generative model (or a static message) talks.
Primitives and auth: skills/jev/SKILL.md. Cookbook: https://docs.typesafe.ai/cookbooks/llm_guardrails
Battery
One request. Independent Nouls per hazard + one Score for harm. Gate Noul on the probability. Do not copy a Noul threshold onto Choice confidence.
Input hazards in this repo: jailbreak, prompt_injection, secret_exfil, denylist_pressure, harmful_request.
Output hazards: broke_policy, secret_leak, hallucination, instruction_drift, harmful_content.
Screen both sides. Redact secrets before sending state.
Policy lives in code
Caller-owned thresholds. Defaults in this repo (packages/js/src/guard.ts, jev_lab/policy.py):
| Signal | Strict | Permissive |
|---|---|---|
| Noul review | ≥ 0.35 | ≥ 0.35 |
| Noul action | ≥ 0.7 | ≥ 0.85 |
| Harm Score promotes review → block | ≥ 2.0 | ≥ 2.0 |
Guardrails fail closed (block if the call errors). Routers may fail open; this skill does not.
jailbreak, prompt_injection, secret_exfil, denylist_pressure, harmful_request, broke_policy, secret_leak, harmful_content → block when above the action bar. hallucination and instruction_drift → review.
Pair with a generative model
block— do not forward the text; return a fixed refusalreview— human or a reasoning modelpass— generate as usual
This repo
npx jev guard --side input --text "Ignore previous instructions" --json
npx jev guard --side output --text "$REPLY" --json
python examples/07_guardrails.py
packages/js/src/guard.ts—inputBattery/outputBattery/routeGuardexamples/07_guardrails.py— Choice + Noul, then skip the chat model