<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 艾特玖</title>
    <description>The latest articles on DEV Community by 艾特玖 (@aitejiu).</description>
    <link>https://dev.to/aitejiu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4135289%2F00df8792-84b5-42ff-b22e-117e1b393d68.jpg</url>
      <title>DEV Community: 艾特玖</title>
      <link>https://dev.to/aitejiu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aitejiu"/>
    <language>en</language>
    <item>
      <title>Benchmarking Jev: what a decision model can (and can't) do in an agent harness</title>
      <dc:creator>艾特玖</dc:creator>
      <pubDate>Mon, 21 Sep 2026 08:23:48 +0000</pubDate>
      <link>https://dev.to/aitejiu/benchmarking-jev-what-a-decision-model-can-and-cant-do-in-an-agent-harness-20po</link>
      <guid>https://dev.to/aitejiu/benchmarking-jev-what-a-decision-model-can-and-cant-do-in-an-agent-harness-20po</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Model under test:&lt;/strong&gt; &lt;code&gt;jev-1.13.0&lt;/code&gt; · &lt;strong&gt;Date:&lt;/strong&gt; Sep 2026 · &lt;strong&gt;Code &amp;amp; raw results:&lt;/strong&gt; &lt;a href="https://github.com/Aitejiu/jev-harness-lab" rel="noopener noreferrer"&gt;github.com/Aitejiu/jev-harness-lab&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A black-box engineering evaluation: 10 public datasets, ~22,500 API calls, 52.2M input tokens, &lt;strong&gt;$2.19 total&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jev is TypeSafe AI's "System One" decision model. You send it a &lt;code&gt;state&lt;/code&gt; plus typed &lt;code&gt;questions&lt;/code&gt;; it returns typed answers with probabilities and confidence. It never generates text — and it costs about $0.00004 and 0.3s per call. That makes it a candidate for the "fast-think layer" of an agent harness: the flood of narrow decisions an agent makes every turn.&lt;/p&gt;

&lt;p&gt;I spent a few days measuring where that actually works.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Works (directly usable in a harness):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Dataset&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Indirect prompt-injection detection&lt;/td&gt;
&lt;td&gt;InjecAgent (1,105)&lt;/td&gt;
&lt;td&gt;at threshold 0.10: &lt;strong&gt;P/R 100%&lt;/strong&gt;, 0% false positives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reranking&lt;/td&gt;
&lt;td&gt;BEIR SciFact (900 pairs)&lt;/td&gt;
&lt;td&gt;BM25 → Jev: MRR &lt;strong&gt;0.622 → 0.843&lt;/strong&gt;, Hit@1 &lt;strong&gt;50% → 78.3%&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intent classification&lt;/td&gt;
&lt;td&gt;SNIPS / Banking77&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;97.9%&lt;/strong&gt; (7 classes) / &lt;strong&gt;80.3%&lt;/strong&gt; (77 classes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool catalog routing&lt;/td&gt;
&lt;td&gt;MetaTool (199 tools)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;96.5%&lt;/strong&gt; with similar distractors (k=5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill routing&lt;/td&gt;
&lt;td&gt;SkillRetBench (501 skills)&lt;/td&gt;
&lt;td&gt;two-stage R@1 &lt;strong&gt;75.8%&lt;/strong&gt; vs 38.0% best baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell command risk gate&lt;/td&gt;
&lt;td&gt;130 hand-built commands&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;100%&lt;/strong&gt; dangerous caught, &lt;strong&gt;98.2%&lt;/strong&gt; safe passed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-relevance detection&lt;/td&gt;
&lt;td&gt;BFCL (1,140)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;77.0%&lt;/strong&gt; live accuracy after iteration (59.5% first try)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Doesn't work (negative results):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model-difficulty routing&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;51%&lt;/strong&gt; accuracy (no signal)&lt;/td&gt;
&lt;td&gt;requires predicting another model's failure modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trajectory failure attribution&lt;/td&gt;
&lt;td&gt;AUROC &lt;strong&gt;0.560&lt;/strong&gt; (random)&lt;/td&gt;
&lt;td&gt;requires cross-step causal reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Non-English tasks&lt;/td&gt;
&lt;td&gt;KO R@1 48.9% vs EN 61.5%&lt;/td&gt;
&lt;td&gt;English-primary training&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Two engineering lessons worth more than the benchmarks:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For fuzzy semantic judgments, &lt;strong&gt;orthogonal decomposition + code composition&lt;/strong&gt; beats single-question prompting (shell-gate false positives 14.5% → 1.8%).&lt;/li&gt;
&lt;li&gt;For multi-label decisions, &lt;strong&gt;let &lt;code&gt;choice&lt;/code&gt; compete first, then let &lt;code&gt;noul&lt;/code&gt; verify&lt;/strong&gt; — multi-skill routing went from 9.0% to 81.0% &lt;a href="mailto:R@1"&gt;R@1&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Model gives calibrated &lt;em&gt;local&lt;/em&gt; judgments; code holds the control flow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. The model and its interface
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer $TYPESAFE_API_KEY

{
  "state": "...",                # string | object | array, text only
  "model": "jev-latest",
  "questions": { "..." : Question }
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Primitive&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;noul&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;yes/no&lt;/td&gt;
&lt;td&gt;probability 0–1 (no separate confidence field)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;choice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;pick one of a closed set&lt;/td&gt;
&lt;td&gt;choice + probability distribution + confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;rate on an ordered rubric&lt;/td&gt;
&lt;td&gt;probability-weighted score + legend + confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Known limits, all verified during testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;choice&lt;/code&gt; caps at &lt;strong&gt;255 options&lt;/strong&gt; — beyond that, split into stages.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;state&lt;/code&gt; + &lt;code&gt;questions&lt;/code&gt; share ~&lt;strong&gt;32k tokens&lt;/strong&gt;; large corpora must be retrieved first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text only&lt;/strong&gt;; English-primary (CJK accuracy drops).&lt;/li&gt;
&lt;li&gt;Pricing reference: $42 / billion input tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. How I evaluated
&lt;/h2&gt;

&lt;p&gt;Every experiment follows the same shape (&lt;code&gt;eval/&lt;/code&gt; in the repo): load a dataset → build &lt;code&gt;state&lt;/code&gt;/&lt;code&gt;questions&lt;/code&gt; → concurrent calls with JSONL caching → threshold sweeps, coverage curves, calibration and cost.&lt;/p&gt;

&lt;p&gt;Metric definitions matter, so being explicit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Threshold sweep&lt;/strong&gt; — treat the returned probability as a score; report precision/recall/F1/FPR at each threshold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence gating curve&lt;/strong&gt; — &lt;code&gt;noul&lt;/code&gt; has no confidence field, so certainty is proxied by &lt;code&gt;max(p, 1-p)&lt;/code&gt;; report coverage vs accuracy-within-coverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional Hit@1&lt;/strong&gt; (SkillRet) — fraction of queries where the gold candidate was in the shortlist and Jev picked it; isolates the selector from retrieval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt; — input tokens × $42/B (output-token billing, if any, would add slightly).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Datasets: InjecAgent, neuralchemy prompt-injection, synthesized tool-output injections, BEIR SciFact, SNIPS, Banking77, MetaTool ToolE, BFCL v3, SkillRet, SkillRetBench, RouterBench, Who&amp;amp;When, plus a 130-command shell risk set.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Indirect injection detection
&lt;/h3&gt;

&lt;p&gt;Real data: 17 user tools × 62 attacker instructions (InjecAgent).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Threshold&lt;/th&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;Recall&lt;/th&gt;
&lt;th&gt;F1&lt;/th&gt;
&lt;th&gt;Benign FPR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.50&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;89.8%&lt;/td&gt;
&lt;td&gt;94.7%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;0.10&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;By attack type (t=0.5): data-stealing 98.5% recall, direct-harm 80.6%; benign mean score 0.03.&lt;/li&gt;
&lt;li&gt;Gating: certainty ≥ 0.90 auto-handles 41.1% of traffic at 100% accuracy.&lt;/li&gt;
&lt;li&gt;Cost: $0.0213 for 1,105 calls; P50 0.30s.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Synthetic tool outputs&lt;/strong&gt; (injections wrapped inside WebFetch/Read/GitHub/Email results): at 0.5, P 97.1 / R 85.0 / FPR 4.9%. Misses are encoding bypasses (Cyrillic homoglyphs, code-snippet disguises).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cautionary dataset&lt;/strong&gt; (neuralchemy, 942): the labels include "requests for harmful content," which my criteria did not ask about — recall drops to 55.1% at 0.5, purely a task-definition mismatch. Also note: the 0–0.1 score bucket still contains &lt;strong&gt;16.6% malicious&lt;/strong&gt; samples. Low score is not a safety guarantee.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Reranking (BEIR SciFact)
&lt;/h3&gt;

&lt;p&gt;60 queries × 15 candidates; Jev scores each (query, document) pair 0–3, then reranks.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ranker&lt;/th&gt;
&lt;th&gt;Recall@5&lt;/th&gt;
&lt;th&gt;MRR&lt;/th&gt;
&lt;th&gt;nDCG@5&lt;/th&gt;
&lt;th&gt;Hit@1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BM25&lt;/td&gt;
&lt;td&gt;74.2%&lt;/td&gt;
&lt;td&gt;0.622&lt;/td&gt;
&lt;td&gt;0.632&lt;/td&gt;
&lt;td&gt;50.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jev&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90.0%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.843&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.848&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;78.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mean score: 2.38 for relevant vs 0.65 for irrelevant. $0.028 / 900 pairs, P50 0.31s.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Intent and catalog routing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dataset&lt;/th&gt;
&lt;th&gt;Classes&lt;/th&gt;
&lt;th&gt;Top-1&lt;/th&gt;
&lt;th&gt;Gating&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SNIPS (1,400)&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;97.9%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;conf≥0.90: 93.6% coverage, 99.1% acc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Banking77 (3,080)&lt;/td&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;80.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;conf≥0.90: 67.8% coverage, 92.8% acc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MetaTool (199 tools)&lt;/td&gt;
&lt;td&gt;199&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;96.5%&lt;/strong&gt; (k=5, similar distractors)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;MetaTool comparison: the paper reports 69.1% for ChatGPT on the same "similar choices" subtask (different exact setup — treat as magnitude reference). Errors cluster on near-duplicate tools: descriptions need explicit &lt;code&gt;not_for&lt;/code&gt; boundaries.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Shell command risk gate
&lt;/h3&gt;

&lt;p&gt;Design: four orthogonal &lt;code&gt;noul&lt;/code&gt; questions (destructive / touches secrets / exfiltrates / irreversible) + code that combines them into deny/review/allow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variant&lt;/th&gt;
&lt;th&gt;3-class agreement&lt;/th&gt;
&lt;th&gt;Dangerous caught&lt;/th&gt;
&lt;th&gt;Safe passed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;v1 (loose criteria)&lt;/td&gt;
&lt;td&gt;66.2%&lt;/td&gt;
&lt;td&gt;85.0%&lt;/td&gt;
&lt;td&gt;87.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;v2 (tightened criteria)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;78.5%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;98.2%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single-question choice baseline&lt;/td&gt;
&lt;td&gt;77.7%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;85.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;v1 missed availability harms (fork bombs, reboot, firewall lockouts) until the criteria explicitly included them. The decomposition's payoff shows up in &lt;strong&gt;false positives: 14.5% → 1.8%&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.5 Tool-relevance detection (BFCL)
&lt;/h3&gt;

&lt;p&gt;Task: given a request plus a function list, should any function be called? 1,140 samples.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;classic acc&lt;/th&gt;
&lt;th&gt;live-irrelevance acc&lt;/th&gt;
&lt;th&gt;FPR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;single &lt;code&gt;noul&lt;/code&gt; "is it relevant"&lt;/td&gt;
&lt;td&gt;84.2%&lt;/td&gt;
&lt;td&gt;59.5%&lt;/td&gt;
&lt;td&gt;35.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v2&lt;/td&gt;
&lt;td&gt;criteria tightened to "purpose match"&lt;/td&gt;
&lt;td&gt;89.6%&lt;/td&gt;
&lt;td&gt;67.3%&lt;/td&gt;
&lt;td&gt;27.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;v2c&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;composed: &lt;code&gt;purpose × (1 − incidental)&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90.8%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;77.0%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20.1%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Typical failure mode: "technically possible" mistaken for "semantically intended" (a generic &lt;code&gt;requests.get&lt;/code&gt; judged relevant).&lt;/p&gt;

&lt;h3&gt;
  
  
  3.6 Skill routing: 60% → 76%
&lt;/h3&gt;

&lt;p&gt;Goal: stop injecting the entire skill catalog into the main model. Route each request with one fast judgment, load only the winner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SkillRet (6,006 skills, 300 queries)&lt;/strong&gt; — isolating selector from retrieval:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;BM25 Hit@1&lt;/th&gt;
&lt;th&gt;shortlist recall&lt;/th&gt;
&lt;th&gt;end-to-end&lt;/th&gt;
&lt;th&gt;conditional Hit@1*&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;k=10, name+description&lt;/td&gt;
&lt;td&gt;52.7%&lt;/td&gt;
&lt;td&gt;71.3%&lt;/td&gt;
&lt;td&gt;63.7%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;89.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k=20, + body in criteria&lt;/td&gt;
&lt;td&gt;52.7%&lt;/td&gt;
&lt;td&gt;77.3%&lt;/td&gt;
&lt;td&gt;65.3%&lt;/td&gt;
&lt;td&gt;84.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k=10, body in BM25 index&lt;/td&gt;
&lt;td&gt;58.3%&lt;/td&gt;
&lt;td&gt;78.7%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;68.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;86.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* conditional = gold in the shortlist. The selector is strong (85–89%); the bottleneck is retrieval. Adding bodies to the BM25 index helped retrieval; adding them to Jev's criteria did not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SkillRetBench (501 skills, official baselines, macros over 5 settings):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;BM25&lt;/th&gt;
&lt;th&gt;NaiveLLM&lt;/th&gt;
&lt;th&gt;Jev (chunked)&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Jev (hybrid)&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Recall@1&lt;/td&gt;
&lt;td&gt;38.0%&lt;/td&gt;
&lt;td&gt;30.2%&lt;/td&gt;
&lt;td&gt;60.4%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;75.8%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recall@10&lt;/td&gt;
&lt;td&gt;59.8%&lt;/td&gt;
&lt;td&gt;55.6%&lt;/td&gt;
&lt;td&gt;87.6%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nDCG@10&lt;/td&gt;
&lt;td&gt;53.4%&lt;/td&gt;
&lt;td&gt;45.1%&lt;/td&gt;
&lt;td&gt;60.3%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70.2%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The architecture iteration is the interesting part&lt;/strong&gt; (multi-skill composition R@1):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;v1 chunked (one pick per chunk)&lt;/th&gt;
&lt;th&gt;v2 multiselect (per-candidate noul)&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;v3 hybrid&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;multi-skill composition&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;9.0%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;15.0%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;81.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;overall macro R@1&lt;/td&gt;
&lt;td&gt;60.4%&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;75.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;v2 failed because per-candidate &lt;code&gt;noul&lt;/code&gt; scores have no competition: everything clusters around 0.5 (top-10 mean 0.56) and the merged ranking is noise. v3 fixes it: chunked &lt;code&gt;choice&lt;/code&gt; produces 15 candidates with real probability spread, then one request with 15 &lt;code&gt;noul&lt;/code&gt; questions verifies set membership. &lt;strong&gt;Compete first, verify second.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cost: hybrid $0.650 / 500 queries (P50 2.07s); the production-shaped "BM25 top-50 + Jev" is $0.072 / 500 queries at P50 0.33s (R@1 54.8%).&lt;/p&gt;

&lt;h3&gt;
  
  
  3.7 Negative results
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Model-difficulty routing (RouterBench, 825 samples):&lt;/strong&gt; routing decision accuracy 51.3% — no signal; scores skew toward "a small model can handle it" (median 0.11). Chinese subset 14.6% vs English 57.7%. Predicting which model will fail is not a natural-language property.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trajectory failure attribution (Who&amp;amp;When, 184 trajectories × 8 steps):&lt;/strong&gt; step-level AUROC 0.560, top-1 localization 16.3% (random 12.5%). The label requires "never corrected" — cross-step causality, outside a System One model's shape.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Versus published numbers
&lt;/h2&gt;

&lt;p&gt;On identical candidate lists (SkillRouter paper, ~80K pool, top-20):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Hit@1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o-mini (listwise judge)&lt;/td&gt;
&lt;td&gt;67.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4-mini (listwise judge)&lt;/td&gt;
&lt;td&gt;66.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-Reranker-8B&lt;/td&gt;
&lt;td&gt;71.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SkillRouter 1.2B (fine-tuned)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;74.0%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R3 (fine-tuned, bilingual)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;77.1%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jev (zero-shot, conditional)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;86.9–89.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The paper's own conclusion: LLM-as-judge baselines are "not competitive." Letting a general LLM rank directly loses to purpose-built rerankers. Jev, zero-shot and untrained, sits in the same band as fine-tuned rerankers under the conditional metric (different pool sizes and metrics — read as order-of-magnitude, not a controlled comparison).&lt;/p&gt;

&lt;p&gt;One more finding from the SkillRet paper worth remembering: &lt;strong&gt;off-the-shelf rerankers can hurt when the first-stage retriever is strong&lt;/strong&gt; (nDCG@10 dropped 83.5 → 74–78 there). If you bolt Jev onto a strong embedding retriever, re-measure the marginal gain.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Six engineering rules
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Criteria are the decision boundary.&lt;/strong&gt; Merge "pressure" and "legitimate escalation" into one question and you get a mushy 0.47; split them and you get 0.04 / 0.96.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orthogonal decomposition + code composition beats one clever prompt.&lt;/strong&gt; Shell gate false positives 14.5% → 1.8%; tool relevance 59.5% → 77.0%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High scores are reliable; low scores are not safe.&lt;/strong&gt; In injection data, everything ≥0.1 was 90%+ malicious — but the 0–0.1 bucket still contained 16.6% malicious. Keep a human-review band.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidence ≠ correctness.&lt;/strong&gt; High confidence means the model is sure it applied &lt;em&gt;your&lt;/em&gt; definition — including your mistakes (I saw wrong routings at confidence 1.0).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-label: compete, then verify&lt;/strong&gt; (section 3.6).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respect the capability boundary.&lt;/strong&gt; Only ask about locally observable patterns in text — not model capability (51%), not cross-step causality (AUROC 0.56).&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. Getting started
&lt;/h2&gt;

&lt;p&gt;Two integrations ship with this work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP server&lt;/strong&gt; (three tools: &lt;code&gt;scan_injection&lt;/code&gt;, &lt;code&gt;bash_risk&lt;/code&gt;, &lt;code&gt;rank_candidates&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvx jev-mcp        &lt;span class="c"&gt;# PyPI; or: uvx --from git+https://github.com/Aitejiu/jev-harness-lab jev-mcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Agent skill&lt;/strong&gt; (skill routing, load only the winner):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add Aitejiu/jev-harness-lab &lt;span class="nt"&gt;--skill&lt;/span&gt; jev-skill-router
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both need &lt;code&gt;TYPESAFE_API_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Reproducing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Aitejiu/jev-harness-lab
&lt;span class="nb"&gt;cd &lt;/span&gt;jev-harness-lab
uv venv &lt;span class="nt"&gt;--python&lt;/span&gt; 3.12 .venv
uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"TYPESAFE_API_KEY=&amp;lt;your-key&amp;gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .env

.venv/bin/python &lt;span class="nb"&gt;eval&lt;/span&gt;/run_injecagent.py &lt;span class="nt"&gt;--concurrency&lt;/span&gt; 6      &lt;span class="c"&gt;# injection&lt;/span&gt;
.venv/bin/python &lt;span class="nb"&gt;eval&lt;/span&gt;/run_rerank.py &lt;span class="nt"&gt;--queries&lt;/span&gt; 60            &lt;span class="c"&gt;# reranking&lt;/span&gt;
.venv/bin/python &lt;span class="nb"&gt;eval&lt;/span&gt;/run_bash.py &lt;span class="nt"&gt;--variant&lt;/span&gt; v2              &lt;span class="c"&gt;# shell gate&lt;/span&gt;
.venv/bin/python &lt;span class="nb"&gt;eval&lt;/span&gt;/run_skillretbench.py &lt;span class="nt"&gt;--variant&lt;/span&gt; hybrid &lt;span class="nt"&gt;--per-setting&lt;/span&gt; 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All raw results are committed under &lt;code&gt;eval/results/&lt;/code&gt;; add &lt;code&gt;--report-only&lt;/code&gt; to regenerate reports from cache. Datasets are public and downloaded separately per &lt;code&gt;eval/README.md&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Single model version (&lt;code&gt;jev-1.13.0&lt;/code&gt;); re-run after upgrades.&lt;/li&gt;
&lt;li&gt;Some datasets are samples or hand-built (130 shell commands, 121 synthetic injections, 60 SciFact queries) — selection bias possible.&lt;/li&gt;
&lt;li&gt;Thresholds are reference values; calibrate on your own data (use the coverage–accuracy curve).&lt;/li&gt;
&lt;li&gt;Cost estimates are input-token only.&lt;/li&gt;
&lt;li&gt;English-primary; CJE tasks need dedicated validation.&lt;/li&gt;
&lt;li&gt;SkillRetBench's NaiveLLM/SADO baselines are simulated per the dataset authors.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;If you build agent infrastructure and want to swap notes on decision models in the harness, the repo issues are open — or find me on X. The 22,500 calls cost $2.19; the lessons were cheaper than the tokens.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
      <category>jev</category>
    </item>
  </channel>
</rss>
