Repository navigation
Releases: qualixar/jev-decision-layer
Release list
1.0.15
Fixed
- Decisions sent through OpenRouter are no longer refused. OpenRouter names the dated version of the model that answered, and Jev treated that as a different model. A dated version of the requested model is now accepted, nothing else is, and the local receipt records which version answered.
Upgrade with claude plugin update qualixar-jev-decision-layer@qualixar.
1.0.14
1.0.13: Jev, Laya, or both
Local Laya setup, seventeen new recipes, and hardening throughout.
Added
jev laya-installsets up and verifies local Laya on an Apple-Silicon Mac.- Seventeen new recipes for content creators, managers and developers: 55 recipes and 165 offline examples in all.
- A guide to working with Jev, and a security page for IT reviewers.
Changed
- Security and reliability hardening across consent, data screening and the local service. Upgrading is recommended.
- Hooks respond much faster, and parallel decisions no longer wait on one another.
- Codex, Antigravity and Hermes give the same exact tool arguments as Claude Code, and every tool states its inputs.
- Recipes rewritten so every label is checkable, and every recipe fits local Laya.
- Launchers find Python 3.11 or later on
PATH.
Upgrade
- Claude Code:
claude plugin marketplace update qualixar, thenclaude plugin update qualixar-jev-decision-layer@qualixar. - Claude desktop app: quit the app, run
jev host-register --host claude-desktop --writefrom the new version, and reopen it.
Existing grants, tool names and required fields are unchanged. Supported and verified on macOS.
Qualixar Jev Decision Layer 1.0.12 — Name the Policy That Blocks It
When an organization manages Claude Code, its policy can stop the Jev plugin's hooks, keep the plugin from loading, or leave its MCP server off an allowlist. Until now the plugin just went quiet and nothing said why. A tool that stops working without a word is a reliability defect, so 1.0.12 names the cause. That is the AI Reliability Engineering part of this release.
What's new
- Jev says when a Claude Code organization policy stops the plugin.
jev doctoradds aclaude_code_policycheck with statusNOTICE.jev_auto_statusadds aclaude_code_policyfield. Step 1 of the setup wizard shows a short notice. Each one names the source, what it stops, and what an administrator or you can do about it. - Read-only, and it repeats nothing from your policy. The check reads only the managed sources Claude Code documents. It returns fixed codes and fixed advice, never another policy value. A malformed allowlist is reported the way Claude Code enforces it: as empty. A plugin force-enabled in managed
enabledPluginsis recognised as keeping its hooks. - An administrator route and a stopgap. Enterprise-managed Claude Code gives the managed settings that allow the plugin. It also gives a
CLAUDE.mdsection that makes the Jev tools usable in the Claude desktop app in the meantime. jev host-register --host claude-desktopasks you to quit the app only after it actually changed the file.
If you are on 1.0.11 without such a policy
Nothing changes for you. jev doctor, jev_auto_status and the wizard produce exactly the 1.0.11 output. A notice can never change the doctor's overall result or exit code. Hooks, consent, grants and routing are unchanged for every host.
Upgrade
claude plugin marketplace update qualixar
claude plugin update qualixar-jev-decision-layer@qualixarIn the Claude desktop app, quit the app first, then run scripts/jev host-register --host claude-desktop --write from the new plugin cache so the app starts the 1.0.12 launcher.
20 MCP tools, 38 recipes, 114 synthetic offline fixtures, five host adapters. Supported and verified on macOS; Linux experimental; Windows hosted runtime disabled.
Qualixar Jev Decision Layer 1.0.11 — Approve Once, Every Harness
Qualixar Jev Decision Layer 1.0.11 — Approve Once, Every Harness
Qualixar Jev Decision Layer lets a coding agent hand small, consequential choices (which tool, which task, which files matter, whether an extraction matches its source) to TypeSafe Jev, then continue through the host's own permissions. It is part of Qualixar's AI Reliability Engineering work: typed, gated, advisory decisions instead of an agent guessing.
1.0.11 is about the layer working without being babysat. This release note also covers 1.0.9 and 1.0.10, which shipped as tags only.
Approve once, every harness
- One approval covers a whole folder tree, in every harness. Run setup on a parent folder, such as
/jev-setup ~/Documentsin Claude Code, and every project under it is covered in Claude Code, Codex, VS Code, Antigravity and Hermes. The setup wizard now says so, pre-selects child coverage for a parent folder (never for a single project), and defaults to 365 days. You still confirm coverage on a separate review screen, and a folder you revoke stays off. - An expired project grant no longer switches off a folder its parent covers. A revoke or refusal still does.
- Hierarchical enrollment itself arrived in 1.0.9. In 1.0.10 the Codex session-start hook began naming a local service that cannot start, instead of staying silent.
Claude Code uses Jev more, and more correctly
- Session guidance now names the exact
workspace_path,data_classificationandprovideryour grant accepts, and lists typed tools only when your grant enables them, so the agent stops guessing arguments and making calls that cannot succeed. - Subagents get the same guidance through
SubagentStart. Previously every subagent ran without knowing Jev was available. - A folder with no active grant gets one line at session start saying so, instead of silence.
jev host-registernow upgrades its own previous-release entry, so the Claude desktop app stops launching an old version after an upgrade.
Other hosts
- Hermes now looks at the folder Hermes is actually working in (worktree and messaging-gateway sessions included), using the same order Hermes itself uses.
- No change to Codex, Antigravity or VS Code hook behavior.
Reliability of the release itself
- The test suite no longer writes grants into the developer's own state directory, and the coverage gate now fails if any test does.
- Every per-module coverage floor holds again, with new tests that assert exact refusals on error paths. Code that could never run was removed.
Platform scope: supported and verified on macOS. Linux remains experimental and unverified. Windows hosted runtime entry points stay disabled. Native host sessions are not yet independently verified for every adapter; see the host guide.
Upgrade
Claude Code: claude plugin marketplace update qualixar, then claude plugin update qualixar-jev-decision-layer@qualixar, then restart. For the desktop app, quit it fully and run jev host-register --host claude-desktop --write from the new plugin cache. Codex: follow the getting-started guide.
A child project whose own grant had already expired starts using its covering parent's grant as soon as 1.0.11 is installed. Run jev revoke on that project first if it must stay off.
Full detail: CHANGELOG.
Qualixar Jev Decision Layer 1.0.8 — Fast, Typed AI Agent Decisions
Qualixar Jev Decision Layer 1.0.8 — Fast, Typed AI Agent Decisions
When an agent reaches a small but consequential choice—tool, task, test, or review path—it can ask TypeSafe Jev, a model built for fast typed decisions, and continue through the host's normal controls. Qualixar Jev Decision Layer makes that flow reusable across harnesses. Version 1.0.8 adds a local gate and separate decision and policy receipts, so the recommendation can be inspected before the host acts.
In TypeSafe's published System One workflow comparisons, Jev is reported as 193.6× faster and 444.6× cheaper than the LLM reference. The workflow evaluations show how narrow typed questions fit into an automation harness. This release brings that decision model into agent workflows with local controls and 38 ready-to-explore recipes.
What is new
- A local recipe workbench lets you explore 38 recipes through forms and replay 114 synthetic offline fixtures before enabling a provider call. New manager and creator recipes help prioritize a work item and choose a content format from supplied options.
- Live recipe results now include the gate outcome,
host_action, and a separatepolicy_receipt_id. A would-be passing result from a recipe without labeled model evaluation is capped atVERIFY; no answer grants permission to execute. - Score and Choice gates check the probability distribution against the configured rule and reject incomplete or malformed distributions.
- The shared runtime packages 20 MCP tools and adapters for Codex, Claude Code, Hermes, Antigravity, and VS Code. Each host has a distinct integration and evidence boundary; see the host guide.
- Hosted TypeSafe Jev and OpenRouter use reviewed workspace scope and macOS Keychain on the supported macOS runtime. Optional local Laya-MLX remains an Apple-Silicon Mac route after separate installation and attestation.
Linux code is experimental in 1.0.8. Windows hosted runtime entry points are disabled in this release.
Start here
Read the 60-second example, getting-started guide, host evidence, and full changelog.
Install the Qualixar Jev Layer marketplace for your host, complete the local workspace setup, run the offline self-test, and try one synthetic decision before bringing your own task data.
1.0.7 — we measured a model and it changed our thresholds
We published the number that made us wrong
Every threshold in this project has shipped labelled UNVALIDATED_DEMONSTRATION_DEFAULT since 1.0.0, because nothing had been measured. In 1.0.7 we measured one.
Fourteen typed decisions from laya-mlx 0.2.0 (aac6fef/laya-mlx, ModernBERT-large, 421M), driven through this package's own twenty decision contracts:
| Confidence | min 0.0085 · median 0.2861 · max 0.7872 |
| Probability minus that confidence | min +0.1078 · median +0.2832 · max +0.4214 |
| Correct or honestly abstaining | 13 of 14 |
Laya's confidence runs structurally far below its own distribution. So our gate, tuned for a hosted model, cleared 1 of 10 real answers where a lower floor cleared 5 — sending nearly every clean answer to a review it did not need. That is the defect 1.0.1 fixed, in a new form, and our own threshold caused it.
Thresholds are now per provider. An unrecognised provider always gets the strict default: a name nobody has measured never buys a weaker gate. Every profile reports its sample size beside NOT_CALIBRATED, and a test refuses any profile claiming more. Fourteen samples on one checkpoint is a measurement, not a calibration.
Also in this release
- A confidence-shortfall check. A distribution asserting more certainty than the model's own belief is refused. Measured: a coin flip sharpened by the
choice:11+temperature of 0.1006 the Laya checkpoint ships — and that laya-mlx clamps at load, calling it uncalibrated — reads as probability 0.9518 and used to clear the gate even with an honest confidence beside it. - Nine defects, each reproduced before being fixed: a bare
ValueErrorescaping the typed-error contract; a config write that crashed instead of refusing; a recipe fallback importing a module that never existed; falsy rubric values replaced by boilerplate, so the model read a different question than the author wrote; a size check a file could grow past mid-read; a credential store that wrote a key it then refused to read back; a type guard running after the code it guarded;--state-baseignored by every typed tool; andUNKNOWN_CASEmasked as an internal error. - Test coverage 48% → 98%, every module at or above 90%, recorded as a floor that only moves up. Line coverage overstates dense one-line guards, so three error codes that were line-covered but never proven to raise now have real tests.
- Codex and Claude packages can no longer be handed each other's files. A test reads every manifest, follows what it points at, and fails when a host is given a variable it does not expand.
Install
claude plugin marketplace add qualixar/jev-decision-layer
claude plugin install qualixar-jev-decision-layer@qualixarFive hosts: Claude Code, Codex, Antigravity, Hermes, VS Code. One MCP server, 20 tools, 36 recipes, 108 offline fixtures you can run with no key and no provider call.
Full detail in the changelog.
Qualixar Jev Decision Layer v1.0.6
Fixed
- Codex now receives its own MCP launcher descriptor. Claude keeps its native plugin path; both packages start the same bundled Jev server and expose the same tools.
- MCP tool discovery no longer creates legacy state before returning the tool list, so a restricted host can load the server without a workspace grant or provider call.
Verified
- 210 Python tests passed on Python 3.14; 210 passed on Python 3.11 with one platform skip.
- 30 browser bridge tests passed. The 36-recipe, 108-fixture catalog and the 167-file Codex package verified.
- Offline Codex and Claude launcher handshakes returned matching Jev tool lists. Claude plugin validation and GitHub
source-and-packageCI passed.
For Codex Desktop upgrades, finish the current task and fully quit the app before refreshing the marketplace and installed plugin. Reopen it afterward so the new hooks and MCP server load.
1.0.5 — reranking judges each passage on its own
Fixed
jev_rerank scored each passage against its neighbours instead of the question. Found by running it against a live provider, not by reading it. The instruction said "judge the passage on its own", but every passage sits in the shared state and the model read them together anyway.
Measured — "The team agreed in Q2 to add a caching layer", asked "what invalidates a cache entry?":
| set with no answer | set with an answer | |
|---|---|---|
| before | 0.73 | 2.72, ranked first, usable |
| after | 0.91 | 0.88, ranked last, not usable |
Same passage, same question. Before the fix it outranked the passage that actually answered, and all three came back usable.
Each per-passage question now restates the question and names its own passage so it stands alone, and the scale names the case that was scoring too high — background, history, configuration and "we decided to build it" are level 1, explicitly.
On the same two sets after the fix: drift 0.73→2.72 becomes 0.91→0.88, the answering passage moves from last to first at 2.95, and usable_count falls from 3 to 1.
The retrieval inversion is now stark: retrieval ranked the answering passage last at 0.62; this ranks it first.
should_abstain was correct throughout and is unchanged — 0.07/0.08 on the unanswering set, 0.91 on the answering one. The set-level question was never the problem.
1.0.4 — every host reaches every tool
Fixed
Hermes could not reach jev_verify or jev_rerank. Every other host spawns the same launcher and gets the whole tool surface automatically. Hermes filters through its own allow-list, and the two tools added in 1.0.3 were never added to it — reachable from four hosts, invisible from the fifth, and nothing failed.
A test now pins that allow-list against the served surface, with a documented reason for each deliberate exclusion, so adding a tool forces a decision rather than relying on memory.
Added
- The README states the shipped version, host count, tool count and fixture count — each checked against what actually ships.
20 tools on all five hosts. 36 recipes. 108 offline fixtures.