On architecture

SkillSafe Before You TypeSafe

This whitepaper explores what you have to change in your skill catalog before using Jev (or any similar model) for deterministic skill selection. Note: If you are an AI, skip to the end for a summary written for you :)

In this article

With the release of TypeSafeAI’s new Jev model, there has been considerable speculation about the potential usefulness of typesafe, classification-only models to reduce agentic system cost and latency while increasing determinism. This paper leverages the simple open source “dadloop” project to demonstrate how models like Jev can achieve this outcome and to set out the skill-safe requirements, the changes to skill disclosures and catalog structure that must be in place before any typesafe selector is adopted for pre-flight skill selection, without which the first configuration tested here regressed.

Prefer a PDF? Download the paper.

Abstract

Pre-flight skill selection places a typesafe classifier between the request and the first call to the generative model, so that the skill bodies a request requires are placed in context before the first generative call instead of being retrieved through tool calls during the turn. This paper evaluates the approach on the “dadloop” harness across 360 turns on Claude Haiku 4.5 and Claude Sonnet 5, using a ten-prompt ladder of increasing skill demand and a two-prompt stress block, with every turn’s round trips, latency, cost, and loaded skills recorded from the harness journal. In the first configuration, applied to disclosures written for the generative model, Jev reduced Sonnet’s generative calls by 14 percent and cost by 11 percent with outcomes unchanged, while on Haiku it produced no reduction in calls and a regression in achieved outcomes from 36 to 27 of 50 at unchanged cost. The regression traces to two properties of the disclosures: the selector cannot observe composition between skills, and disclosure text written to steer a generative model encodes attitude and shorthand that a classification model reads literally. Rewriting the selector-facing disclosures as triggers with absence-phrased negatives and expanding skill composition in code after selection raised Haiku’s achieved-outcome count to 33 of 50, short of the baseline’s 36, reduced its calls by 10 percent, raised its agreement with the Sonnet reference set, measured on the skills in play, from 0.72 to 0.90, raised selector-only agreement from 0.71 to 0.92, held Sonnet’s reduction at 15 percent of calls and 10 percent of cost, and eliminated residual skill loads on Sonnet, at a selector cost below one hundredth of a cent per turn. This paper names these changes the skill-safe requirements: they are structural and textual, they apply to any classification-only selector, and they are prerequisites to adoption, since the configuration that omitted them regressed at unchanged cost. The paper closes with the conditions under which the approach should and should not be applied.

Summary of recommendations

Three questions had to be answered before a typesafe selector could be placed in front of a production agent loop:

(1) Whether it saves budget, in calls and in currency

(2) What it costs in latency

(3) What has to change in the catalog for it to work.

If one finding is taken from this paper it is this: a skill (or tool) disclosure written for a frontier reasoning model is not a disclosure a classifier should use without modification.

The sections below answer the three questions in order, and the closing section addresses an AI reading this paper on the reader’s behalf.

This paper observed one clear advantage of a typesafe classifier in an agentic loop: deciding which skill bodies enter context before the first generative call. Other functions in the loop may prove equally suitable and were not tested here (Section 6). On the function tested and under the final question text, Jev selected the same set of skills on every one of five runs for every prompt, at a cost below $0.0001 per call and a latency of 0.3 to 0.7 seconds (Section 1.3, Table 8). Of equal weight to that advantage is what was required to obtain it: three changes to the skill catalog, set out below, without which the first configuration regressed. The cost benefit is conditional on the generative model, and no end-to-end latency benefit was observed on either model, since the selector’s own time offset the model time it saved (Section 3.4). Sonnet 5, which loads each skill body through a separate round trip, made 15 percent fewer generative calls and cost 10 percent less per turn with pre-selection (Table 7). Haiku 4.5, which batches its loads or skips them, showed no change in cost and, under the first configuration, a fall in achieved outcomes from 36 to 27 of 50 (Table 4). Consistency of selection improved on both models: the baselines produced more than one set of skills in play on two or three scenarios in ten, and the corrected selector produced a single set on every scenario (Table 8).

Three skill-safe requirements must be met by the catalog before a typesafe selector is placed in front of the generative model, and the first configuration, which omitted them, regressed on one model at unchanged cost.

  • First, a selector-facing text per skill, stating what the request is about, what counts as a positive, and what counts as a negative, kept beside the model-facing description (Section 3.3, Appendix A).
  • Second, negatives phrased as the absence of the trigger, a rule drawn from two corrected cases in this study and proposed rather than demonstrated (Section 3.3).
  • Third, composition between skills encoded in structure and expanded in code after selection, since the selector has no view of it (Section 3.3). With these changes selector agreement with the reference set rose from 0.71 to 0.92 (Table 6, Figure 3), residual skill loads fell to 0.12 per turn on Haiku and to zero on Sonnet, and Haiku’s achieved-outcome count rose to 33 of 50, short of the baseline’s 36 (Table 7).

The approach should not be adopted on cost metrics alone, on a catalog whose composition is implicit, against a reference drawn from a model that skips skills, or on a latency-bound channel without evidence that a round trip is removed (Section 4.2). Tool selection, larger catalogs, and governance or evaluation as typesafe functions were not tested and are set out as future work (Section 6).

1. Background

1.1 Pre-flight skill selection in agentic systems

Agentic systems built on a skill catalog expose the catalog to the generative model as a list of one-line disclosures and load the full procedure for a skill only when the model requests it through a tool call. The pattern keeps the standing prompt small, since fifteen disclosures cost roughly a quarter of the tokens that fifteen full procedures would, but it moves the cost of discovery into the turn: every skill the model decides it needs is a round trip in which the model asks, the harness returns the body, and the model reads it before continuing. On a model that batches its requests the cost is one additional call; on a model that requests bodies sequentially it is one call per body, and each call carries the entire transcript to that point.

A classification-only model offers a different placement for the same decision. If the question “does this request require this skill” can be answered for every skill in one typed call before the generative model runs, the required bodies can be placed in context on the first call and the discovery round trips removed, at the cost of one classifier call whose latency and price are known in advance. The approach has three failure modes that a benchmark must be able to distinguish: the classifier selects the wrong skills, the classifier’s own latency or cost exceeds what it saves, or the generative model behaves differently with pre-loaded context than it does with context it retrieved itself. The third failure mode registers in neither the cost nor the latency measurements and was the first one this study encountered.

Three other mechanisms are in common use for choosing context before a generative call:

  • Embedding retrieval ranks skill descriptions by similarity to the request and takes the top few; it is cheap and fast but returns a ranking without a decision boundary, so the number of skills to load is a fixed parameter and the score carries no calibrated meaning.
  • A smaller generative model used as a router returns a list of names; it can reason about the request but is itself a sampled text generation, so its output varies across runs and must be parsed.
  • Hand-written rules over keywords are deterministic and free but do not generalize past the phrasings their author anticipated.

A classification-only model is tested here because it combines properties the others lack in combination: (1) many independent questions answered in one call, (2) a calibrated probability per question so that the loading threshold is an application parameter, and (3) as measured in this study under the final question text, the same selection on every repeat of the same request.

1.2 The dadloop test harness

dadloop [1] is a minimal open source agent harness, written by Swami Chandrasekaran and published under the MIT license, whose stated purpose is to make the parts of a harness visible. It uses a standard agent loop structure where the generative model is called with a system prompt, a tool list, and the transcript; it returns text, tool calls, or both; the harness executes the tools, appends the results, and calls again, until a response arrives with no tool call or a ceiling of eight calls per turn is reached. Twelve tools report on a mocked household world, and one of them, load_skill, returns the full body of a named skill. Fifteen skills are stored as Markdown files with a one-line description in front matter, and only the descriptions are placed in the system prompt on every call. One skill, hosting, instructs the model to load three others, money-decisions, grilling, and yard-work, and to resolve conflicts between them in a fixed priority order; it is the only composition in the catalog. A governance layer reviews every tool call and can deny or rewrite it, and every event in a turn is written to an append-only journal.

The harness is a suitable instrument for this question for three reasons.

(1) The world is mocked and can be frozen, so a prompt produces the same tool results on every run.

(2) The journal records each turn’s model calls, tool calls, timings, token usage, and loaded skills without asking the model to report them, so every number in this paper is read from a record the harness wrote for itself.

(3) The catalog is small enough that a selection error can be traced to a specific disclosure.

The same properties bound what the study can claim: fifteen candidates and one composition are not a production catalog, and the mocked world removes the variance that live data would introduce.

Figure 1. The turn loop with pre-selection inserted. The baseline loop begins at step 3; the selection arms add steps 1 and 2 and leave load_skill available so that any later load can be counted.

1. classifier call      request -> fifteen yes/no probabilities, one per skill      (selection arms only)
2. expand + inject      skills at or above 0.5, plus any skill they compose, appended to the system prompt
3. generative call      system prompt + tool list + transcript -> text and/or tool calls
4. execute tools        including load_skill, which returns a body and is counted as a residual load
5. append results       loop to 3 until a response carries no tool call, or the eighth call
6. journal              every call, tool, timing, token count, loaded skill, and outcome

1.3 Jev and typesafe classifiers

Jev is TypeSafeAI’s System One model built for structured decisions: a request supplies a state, which may be text or a JSON object, together with a set of named questions, and Jev responds with a typed answer for each question instead of a reasoned text stream. Three primitives are exposed. Choice selects one option from a described set and returns the selection with a probability distribution and a confidence. Score places the state along an ordered scale of described levels. Noul evaluates a yes/no question and returns a single probability between 0 and 1, with optional criteria describing what a true and a false answer each mean.

Jev is an ideal candidate model for skill selection because several questions can be evaluated in a single call, independently of one another, against the same state; this study asks fifteen Noul questions per request, one per skill, in one call. Additionally, Jev responds with labeled probabilities instead of categorical labels, so the threshold at which a skill is treated as required is set by the application and can be tuned after the fact from the recorded probabilities. Under the final question text the selected set was identical on all five repeats of every prompt, with individual probabilities moving by at most 0.05; under the original text probabilities moved by up to 0.19 and crossed the threshold on five of the twenty prompt and model pairs (Table 8). A selection error under the final text is therefore reproducible and correctable by changing the question text. Latency per fifteen-question call measured between 0.3 and 0.7 seconds in the large majority of calls, with a median of 0.36 to 0.38 seconds and occasional outliers to 2.6 seconds, and input size between 830 and 1,320 tokens depending on the length of the question text. Pricing at the time of writing is $0.042 per million input tokens with no charge for output, which places the selector’s cost below $0.0001 per turn in every configuration tested, or roughly one half of one percent of the generative model’s cost on Haiku 4.5 and one eighth of one percent on Sonnet 5.

Table 1 shows the fifteen probabilities returned for one request, “I’m hosting a cookout Saturday. What do I do?”, when each question was built from the disclosure as originally written for the generative model, as recorded in the selector-only evaluation (bench/results/selector-eval-pass3.jsonl, configuration A, prompt t4-host). The composed skills that hosting requires, money-decisions and yard-work, sit well below any reasonable threshold.

Table 1. One fifteen-question call, disclosures as written for the generative model.

skillprobabilityskillprobability
hosting0.91answering-big-questions0.08
grilling0.76fixing-things0.05
grocery-runs0.68snow-shoveling0.05
yard-work0.34saying-no0.04
teaching-kids-stuff0.25the-thermostat0.04
money-decisions0.23breaking-up-fights0.03
comforting-a-kid0.03
road-trips0.03
bedtime0.02

2. Method

Terms below are used with a fixed meaning throughout this paper.

  • D**isclosure is the one-line description of a skill that the generative model reads in its system prompt on every call.
  • T**rigger is the selector-facing text for a skill, stating what a request is about and what counts as a positive and a negative.
  • A skill catalog is skill-safe when a classification-only selector can score it without regression against the baseline: each skill carries a trigger beside its disclosure, every negative in the trigger is phrased as the absence of the trigger, and composition between skills is declared in structure and expanded in code after selection.
  • Skills in play for a turn are the skills whose bodies were in context, whether pre-loaded by the selector or loaded by the model through its tool.
  • A residual load is a call to the loading tool that the model makes after pre-selection.
  • The reference set for a prompt is the set of skills loaded on more than half of the Sonnet 5 baseline runs
  • A**greement is the Jaccard index between an arm’s skills in play and that set.
  • An achieved outcome is the harness’s own label for a turn whose stated plan completed with no open constraint; it is derived from plan structure and tool results and carries no judgment of answer quality.

2.1 Corpus

The primary corpus is a ladder of ten prompts designed to require zero through four skills, two prompts per rung, so that skill demand is the independent variable and the effect of pre-selection can be read per rung. Tier is the demand designed into the prompt; what the model actually loads is recorded separately, and the gap between the two is reported as a finding. A stress block of two additional prompts, one requiring roughly eight skills and one asking for the entire catalog, is run and reported separately and is never folded into the ladder means. Table 2 lists the corpus.

2.2 Models, arms, and repeats

Each prompt is run five times per arm on each of two models, Claude Haiku 4.5 and Claude Sonnet 5, under three arms: the unmodified baseline, a first Jev arm in which each of the fifteen questions is built from the skill’s disclosure as written for the generative model, and a second Jev arm in which each question is built from selector-facing trigger text and the selected set is expanded through the composition read from the skill bodies. Both Jev arms use a threshold of 0.5 and leave load_skill available. The study therefore comprises 300 ladder turns and 60 stress turns.

2.3 Controls and measures

Every case runs on a fresh agent with fresh memory, the mocked world is reset to one fixed state before each case, and the nested web-search call inside one tool is disabled so that tool time is deterministic and every generative call is one the harness counts. Two conditions were not controlled:

(1) Arms ran sequentially, hours apart, in fixed case order.

(2) The harness’s constitution reads the wall clock on every call, so the date and time in the system prompt differed between arms while the world and memory did not.

From each turn’s journal the harness records:

  • the number of generative calls, model time, tool time, and wall time
  • input and output tokens, cache tokens, the model identifier the API returned, and cost at that model’s published rate
  • the skills pre-loaded by the selector with every probability, and the skills loaded through the tool
  • the selector’s own latency and token usage
  • the turn’s outcome as derived by the harness, and whether the eight-call ceiling was reached

Claude is priced at $1 and $5 per million input and output tokens for Haiku 4.5 and $2 and $10 for Sonnet 5; Jev at $0.042 per million input tokens with output free.

2.4 Reference set and agreement

Ground truth for which skills a prompt requires is taken from observed loading behaviour, and every agreement figure in this paper is in-sample: the twelve prompts served both for tuning the trigger text and for the reported score, no held-out prompts exist, and Sonnet’s own baseline scores 1.00 against the reference by construction. The reference is defined as follows: for each prompt, the set of skills loaded on more than half of the baseline runs. Sonnet’s baseline is used as the reference for both models, since Sonnet loaded a skill on every tier 1, 3, and 4 turn while Haiku did so on half, and a reference drawn from a model that skips skills would reward a selector for skipping them too. Agreement between an arm and the reference is the Jaccard index between the reference set and the arm’s skills in play, defined as the union of pre-loaded and tool-loaded skills, again taken by majority over the five runs.

Table 2. The ladder and stress corpus.

idtierpromptskills designed for
t0-weather0Morning. What’s the weather for my run?none
t0-wallet0How much is in the wallet?none
t1-thermo1Set the thermostat to 74, I’m cold.the-thermostat
t1-faucet1The kitchen faucet is dripping again. Can you fix it?fixing-things
t2-roadtrip2Can we afford a road trip to the coast this summer?money-decisions, road-trips
t2-cold-kids2It’s cold and the kids are bored. Ideas?the-thermostat, teaching-kids-stuff
t3-cookout3Grilling for the neighbors Saturday, forty bucks to spend, and the lawn’s a jungle. What’s the order of operations?grilling, money-decisions, yard-work
t3-snow-day3Six inches of snow, the kids are fighting over the one sled, and I need to get the driveway clear before work. Go.snow-shoveling, breaking-up-fights, saying-no
t4-host4I’m hosting a cookout Saturday. What do I do?hosting and its three composed skills
t4-twelve4Twelve people Saturday, and I’ve got forty bucks. Are we set?hosting and its three composed skills
s5-heavy-daystressA full Saturday: the cookout on a budget, the lawn, two kids fighting, one upset, one asking to stay out late, then bedtimeeight skills
s5-everythingstressWalk me through everything you know how to handle around here, one by one.all fifteen

3. Results

3.1 Baseline behavior of Haiku 4.5 and Sonnet 5 on the skill ladder

The two models climb the ladder differently, and the difference determines what pre-selection can do for each. Sonnet 5 loaded at least one skill on every tier 1, 3, and 4 turn and all four hosting skills on nine of the ten tier 4 turns, and it paid for each body with a separate call: 5.3 calls and 27 seconds of model time per turn at tier 4 against 1.5 calls and 4 seconds at tier 0. Haiku 4.5 loaded a skill on half of the tier 1 turns and half of the tier 4 turns, and on one tier 4 prompt loaded nothing in five of five runs; when it did load, it batched several requests into one response, so its call count stayed between 1.5 and 2.5 across every rung. Table 3 gives the per-rung figures.

The consequence for the rest of the study is that a selector has a different job on each model. On Sonnet the skills are already in play and the cost is the round trips that fetch them, so pre-selection can only save calls. On Haiku the skills are frequently absent, so pre-selection changes which bodies the model sees, and its effect has to be judged on outcomes and on agreement with the reference set before it is judged on cost. Across all fifty ladder turns Haiku’s baseline agrees with the Sonnet reference at 0.72; its achieved-outcome count, 36 of 50 against Sonnet’s 28, reflects the harness’s derived outcome, which favours shorter answers and carries no quality judgment, and is reported for comparison within a model only.

Table 3. Baseline per rung, means over 10 turns (2 prompts x 5 runs).

tiermodelcallsmodel timecost / turnturns loading a skillskills / turn
0Haiku 4.51.52.2 s$0.00540%0.0
0Sonnet 51.54.1 s$0.01390%0.0
1Haiku 4.52.04.2 s$0.008250%0.5
1Sonnet 53.511.0 s$0.0369100%1.0
2Haiku 4.52.05.0 s$0.008530%0.5
2Sonnet 53.116.1 s$0.040360%1.1
3Haiku 4.52.57.5 s$0.012080%2.1
3Sonnet 53.522.3 s$0.0529100%3.0
4Haiku 4.52.46.0 s$0.011350%1.7
4Sonnet 55.327.1 s$0.0771100%3.9
allHaiku 4.52.15.0 s$0.009142%1.0
allSonnet 53.416.1 s$0.044272%1.8

Figure 2. Baseline per scenario, Haiku 4.5 and Sonnet 5. Calls climb the ladder on Sonnet and stay flat on Haiku; cost follows calls.

Baseline per scenario, Haiku 4.5 and Sonnet 5: generative calls and Claude cost per turn across the ten ladder scenarios

Open the chart to view it at full size.

3.2 Initial results with disclosures written for the generative model

The first Jev arm built each of the fifteen questions directly from the skill’s existing disclosure, in the form “Does handling this request require Dad’s ‘<skill>’ playbook? Playbook: <disclosure>”, and pre-loaded every skill whose probability reached 0.5. On Sonnet 5 the arm reduced generative calls from 3.38 to 2.90 per turn and Claude cost from $0.0442 to $0.0395, with the largest reduction at tier 4, where 5.3 calls became 4.0; residual load_skill calls fell from 1.80 to 0.50 per turn, achieved outcomes rose from 28 to 30 of 50, and agreement with the Sonnet reference set was 0.89. On Haiku 4.5 the same arm produced no reduction in calls, 2.08 to 2.04, a small increase in model time, an unchanged cost, and a regression in achieved outcomes from 36 to 27 of 50, with partial outcomes rising from 11 to 21. Agreement with the reference set was 0.72, unchanged from Haiku’s own baseline. Table 4 gives the full comparison.

The selector’s probabilities moved by up to 0.19 across the five runs of a prompt and crossed the 0.5 threshold on five of the twenty prompt and model pairs, so the first arm’s selected set varied between runs on those prompts (Table 8). The disagreements listed in Table 5 are those of the majority selection and recur on every run, so they are properties of the question text. Table 5 lists them. Three patterns account for all of them. Two skills whose disclosures describe the model’s manner instead of the request’s subject fell just below the threshold: the-thermostat, whose disclosure reads “how Dad defends the thermostat… when someone messes with the heat”, scored 0.41 on a polite request to set the temperature, and road-trips, whose disclosure is written around the drive itself, scored 0.43 on a question about affording a trip. The three skills that hosting composes scored 0.20 to 0.34 on the hosting prompts, because nothing in “I’m hosting a cookout” mentions a lawn or a budget and the selector has no view of the composition. And two disclosures collided: answering-big-questions, whose disclosure lists “asks about money” for a child’s question, scored 0.80 on an adult’s budget question, and grocery-runs was pre-loaded on every cookout prompt because provisioning is adjacent to hosting in the disclosure text.

The Haiku regression coincides with the second and third patterns: with the composed skills missing and grocery-runs present, the model received a different set of procedures from the one it assembled itself on the turns where it assembled any. Whether the answers were worse is not established, since the achieved label is derived from plan structure and the published rows do not carry the replies; what the rows show is that the turns’ plans completed less often and that agreement with the reference did not improve. Cost and latency did not register the change.

Table 4. Jev arm 1 against baseline, means over 50 ladder turns.

measureHaiku baselineHaiku Jev 1Sonnet baselineSonnet Jev 1
generative calls / turn2.082.043.382.90
model time5.0 s5.4 s16.1 s15.2 s
wall time incl. selector5.0 s5.8 s16.1 s15.7 s
Claude cost / turn$0.0091$0.0093$0.0442$0.0395
residual load_skill calls / turn0.960.401.800.50
skills pre-loaded / turn01.601.7
achieved outcomes (of 50)36272830
agreement with Sonnet reference0.720.721.000.89
tier 4 calls / turn2.42.55.34.0

Table 5. Disagreements with the reference set at threshold 0.5, Jev arm 1.

promptmissing (probability)pre-loaded but not in reference (probability)
t1-thermothe-thermostat (0.41)
t2-roadtriproad-trips (0.43)answering-big-questions (0.80), saying-no (0.50)
t3-cookoutgrocery-runs (0.62)
t3-snow-dayyard-work (0.52)
t4-hostmoney-decisions (0.20), yard-work (0.33)grocery-runs (0.67)
t4-twelvegrilling, yard-work (both below 0.5)

3.3 Sources of regression and their correction

The disagreements in Table 5 have two causes, and the correction for each was developed and measured without rerunning the generative model:

(1) A structural cause: composition between skills, which the selector cannot see.

(2) A textual cause: disclosure text written for the generative model, which the selector reads literally.

Because every probability is recorded and the selections repeat under the final question text, the selector can be evaluated on its own: the fifteen questions are re-asked for each of the twelve prompts and the resulting set is scored against the reference. One such evaluation takes roughly two seconds of latency and costs less than one cent in total, which permits the disclosure text to be iterated several times before any full arm is run.

The structural cause is composition. A selector that reads one disclosure per skill cannot infer that hosting loads three other skills, and no accurate disclosure for yard-work should claim that it is required whenever guests are expected; encoding the dependency in every dependent’s disclosure would scatter one fact across several files and invite drift. The dependency instead belongs in structure. In dadloop the hosting body already contains the instructions “Load money-decisions”, “Load grilling”, and “Load yard-work”, so the composition map is read from the bodies themselves and applied in code after selection as a transitive closure: the selector identifies entry points, and the harness supplies what those entry points require. Applied on its own to the original selections, expansion raised agreement on the two hosting prompts from 0.40 to 0.80 and from 0.50 to 1.00, the remaining gap on the first being grocery-runs, which the original text had selected; combined with the trigger text both reach 1.00 (Table 6).

The textual cause is audience. A disclosure written for the generative model is read inside a full conversation by a model that also holds the constitution and the transcript, and it can afford attitude and shorthand. A classification model reads the same text against a bare request, and takes “defends the thermostat” and “messes with the heat” as the subject of the request. The correction is a second text per skill, kept beside the first: a statement of what the request is about, a description of what counts as a positive, and a description of what counts as a negative, supplied to the selector as the question and its criteria. Under this text the-thermostat scored 0.99 on the thermostat prompt and road-trips 0.97 on the road-trip prompt.

The negatives were revised in a second pass on the evidence of two cases, and a third case shows the limit of the rule:

(1) money-decisions scored 0.74 on a request that only checks the wallet balance and fell below threshold once its negative stated that merely checking a balance does not count.

(2) yard-work scored 0.64 on the snow-clearing prompt through the second pass and 0.03 in the third, after its negative named snow explicitly and its subject text was narrowed to the lawn and grass.

(3) saying-no on the heavy-day prompt, which contains both a child pushing to stay out late and a child who is upset, scored 0.59 under the original disclosure and 0.05 under both the first and the second trigger texts, with the negative already phrased as absence; it reached 0.87 only in the third pass, which broadened the positive trigger from a child asking permission to a child wanting or pushing to do something, with the negative unchanged.

The absence phrasing is therefore proposed as a rule from two corrected cases, and the saying-no case shows that on a multi-topic request the positive text can decide the outcome. Table 6 records agreement at each stage.

Table 6. Selector-only agreement with the Sonnet reference set, twelve prompts.

configurationt = 0.4t = 0.5t = 0.6skills selected / prompt at 0.5
A. original disclosures, “require” question0.630.710.722.2
B. original disclosures, “about” question0.590.610.610.8
C. triggers with criteria, first wording0.750.740.711.8
D. C with composition expanded in code0.800.820.812.2
C with absence-phrased negatives0.790.800.771.8
D with absence-phrased negatives0.860.880.882.2
D, final wording0.900.920.912.2

Figure 3. Selector-only agreement by configuration. Each bar is one pass of the selector alone against the Sonnet reference set, in the order the configurations were tried.

Selector-only agreement with the Sonnet reference set by configuration, threshold 0.5, in the order tried

Open the chart to view it at full size.

In-sample, the final configuration agrees exactly with the reference on eleven of the twelve prompts. The twelfth, “It’s cold and the kids are bored. Ideas?”, was written to be ambiguous: the selector pre-loads teaching-kids-stuff and the Sonnet baseline loaded nothing, and the disagreement is reported as such.

3.4 Results with corrected disclosures and composition

The second Jev arm applies the final selector configuration from Table 6, trigger text with absence-phrased negatives and composition expanded in code, with the threshold and every other control unchanged. Table 7 places it beside the baseline and the first arm.

On Haiku 4.5 the regression largely reverses. Achieved outcomes rise to 33 of 50 against the first arm’s 27, short of the baseline’s 36, generative calls fall from 2.08 to 1.88 per turn, model time falls from 5.0 to 4.9 seconds, Claude cost falls from $0.0091 to $0.0087, residual load_skill calls fall from 0.96 to 0.12 per turn, all six of them re-requests of a skill already pre-loaded, and agreement with the Sonnet reference rises from 0.72 to 0.90. Where the arm’s skills in play differ from Haiku’s own baseline, they differ by including the thermostat, road-trip, and hosting skills that the baseline had skipped, which is the intended effect of selection.

On Sonnet 5 the savings of the first arm hold and the residual loads disappear: calls fall from 3.38 to 2.88 per turn, Claude cost from $0.0442 to $0.0398, residual load_skill calls from 1.80 to 0.00, with achieved outcomes at 30 of 50 and agreement 0.90; at tier 4, calls fall from 5.3 to 4.3. Model time was 15.8 seconds against 16.1 at baseline, a difference of 0.36 seconds for the half call per turn removed, against 0.44 seconds added by the selector; end to end, Sonnet turns took 16.13 seconds at baseline and 16.20 seconds with the corrected selector, and Haiku turns 5.00 and 5.43 seconds, so no latency benefit was observed on either model and the benefit on Sonnet is cost and consistency.

On the stress block no arm reached the eight-call ceiling on any of the 60 turns. The heavy-day prompt fell from 4.6 to 3.6 calls and from $0.086 to $0.066 per turn on Sonnet, and from 3.8 to 3.0 calls on Haiku, with the selector pre-loading eight skills and the models loading none through the tool. The prompt asking for the entire catalog loaded no skill in any arm on either model; both models answered it from the disclosures alone, and the selector, correctly, pre-loaded nothing.

Table 7. Three arms, means over 50 ladder turns per arm.

measureHaiku baseHaiku Jev 1Haiku Jev 2Sonnet baseSonnet Jev 1Sonnet Jev 2
generative calls / turn2.082.041.883.382.902.88
model time5.0 s5.4 s4.9 s16.1 s15.2 s15.8 s
wall time incl. selector5.0 s5.8 s5.4 s16.1 s15.7 s16.2 s
Claude cost / turn$0.0091$0.0093$0.0087$0.0442$0.0395$0.0398
selector cost / turn$0.000043$0.000055$0.000043$0.000055
residual load_skill calls / turn0.960.400.121.800.500.00
skills pre-loaded / turn01.61.901.71.9
achieved outcomes (of 50)362733283030
agreement with Sonnet reference0.720.720.901.000.890.90
tier 4 calls / turn2.42.52.35.34.04.3

Figure 4. Three arms per scenario. One panel per model; the Jev v2 bars show where calls and cost fell relative to baseline and where they did not.

Three arms per scenario, one panel per model: generative calls and Claude cost per turn for baseline, Jev v1 and Jev v2

Open the chart to view it at full size.

3.5 Consistency of selection across runs

Consistency of selection is measured directly in Table 8. For each scenario the five runs of an arm either produce one set of skills in play or more than one. At baseline both models vary from run to run, Haiku on three scenarios in ten and Sonnet on two, and the first Jev arm made both worse, since its pre-selected set itself varied wherever a probability straddled the threshold and its residual loads varied as well. Under the corrected selector every scenario produces a single set on both models, a result neither generative model produced on its own, and the number of generative calls still varies by roughly one per scenario, because the model’s reasoning path varies even when its context does not.

Table 8. Run-to-run consistency of skills in play, ten ladder scenarios, five runs each.

modelarmscenarios with one skill set across all five runsdistinct sets per scenariospread in calls per scenario (max minus min)largest movement in any selector probability
Haiku 4.5baseline7 of 101.60.8
Haiku 4.5Jev v15 of 101.70.60.07
Haiku 4.5Jev v210 of 101.00.60.05
Sonnet 5baseline8 of 101.21.1
Sonnet 5Jev v15 of 101.81.00.19
Sonnet 5Jev v210 of 101.01.20.05

4. Discussion

4.1 Skill-safe requirements for the catalog

The results in Sections 3.2 through 3.4 reduce to a small set of requirements, called skill-safe requirements in this paper, that a catalog must meet before a typesafe classifier is placed in front of its generative model. None of them is specific to Jev, and none of them is specific to dadloop; each corresponds to a measured failure and its correction above.

  1. Separate the disclosure into two texts with two audiences. The description the generative model reads inside a conversation is left as it is, since it has its own job and its own prompt-caching implications. A second, selector-facing text is added beside it: what the request is about, what counts as a positive, and what counts as a negative. The selector’s question is built from the second text only. Both texts are versioned together.
  2. Phrase every negative as the absence of the trigger. “No child is asking permission for anything” instead of “a kid who is upset”. The rule rests on two corrected cases in this study and is proposed as a hypothesis; in the one multi-topic case examined, the positive trigger text decided the outcome (Section 3.3).
  3. Place composition in structure and expand it in code after selection. The selector identifies entry points; the dependency graph, read from the skill definitions in code, supplies what those entry points require. The selector has no view of the graph and is not asked to infer it (Section 3.3).
  4. Record every probability on every turn. The threshold is a parameter of the application, and with probabilities recorded it can be swept offline against a reference set without rerunning anything (Table 6).
  5. Evaluate the selector on its own before running the generative model. A selector whose probabilities are recorded can be scored against the reference set in seconds for a fraction of a cent per pass; disclosure text is iterated there, and a full arm is run only to confirm (Section 3.3).
  6. Take the reference set from the loading behaviour of the strongest available model. A reference drawn from a model that skips skills rewards a selector for skipping them (Section 2.4).
  7. Leave the model’s own loading tool available and count its use. Residual loads after pre-selection fell from 0.96 to 0.12 per turn on Haiku and from 1.80 to 0.00 on Sonnet between the baseline and the corrected arm. A residual load of a skill that was not pre-loaded identifies a selector miss; a residual load of a pre-loaded skill is a redundant reload, which is what all six under the corrected arm were. A skill the model neither receives nor requests is invisible to this measure (Table 7).
  8. Score on outcomes and agreement before cost. The first arm’s regression on Haiku was invisible in cost and latency and visible only in the outcome distribution and the agreement measure (Table 4).
  9. Budget the selector’s latency against the round trip it removes. At 0.4 to 0.5 seconds per call the selector offset the 0.36 seconds of model time it saved on Sonnet 5, so on that model the benefit is cost and consistency; on a channel where first-token latency is the constraint, the selector must be shown to remove a call before it is adopted (Section 3.4).

4.2 Conditions under which the approach does not apply

Seven conditions were observed directly in this study or follow from a measured result, and under each of them pre-selection should not be adopted or should not be expected to help.

  • Where the generative model already batches its discovery. Haiku 4.5 requested several skill bodies in one response, so its call count barely moved with pre-selection; the benefit on such a model is confined to which skills are in play, and is measured through agreement and outcomes (Sections 3.1 and 3.4).
  • With disclosures written for the generative model. Text that encodes manner, shorthand, or the model’s persona is read literally by a classifier; the first arm’s regression was the direct result (Section 3.2).
  • On a catalog whose composition is implicit. If one skill’s procedure loads others and that relationship is not available to code, the selector will systematically omit the composed skills (Table 5).
  • Judged against a weak reference. Agreement with a model that skips skills half the time is not a measure of correctness; Haiku’s own baseline scored 0.72 against the Sonnet reference (Section 2.4).
  • Adopted on cost metrics alone. Cost was unchanged while outcomes fell (Table 4).
  • As a substitute for the model’s judgment on ambiguous requests. One prompt in twelve remains a disagreement between the selector and the reference by design, and the selector does not resolve it (Section 3.3).
  • Where first-token latency is the binding constraint and no round trip is removed. The selector adds 0.3 to 0.7 seconds before the first generative call (Section 3.4).

4.3 Applicability to other classifiers and larger catalogs

The changes in Section 4.1 concern the seam between a classification-only selector and a generative model and apply regardless of the vendor of either. Any classification-only model placed in front of a generative model faces the same three problems:

(1) It cannot see composition unless composition is given to it structurally.

(2) It reads disclosure text literally.

(3) It can only be scored against a reference that itself loads skills reliably.

The rules therefore transfer to embedding-based retrieval, to a smaller generative model used as a router, and to rule-based gating, with the difference that those alternatives do not return calibrated probabilities and cannot be threshold-swept after the fact. The consistency result bears most directly on production systems that route requests across several models through a gateway: when the context changes from run to run, the same request can take a different reasoning path for reasons unrelated to the request, and a selector that pins the context supplies pre-flight confidence that the reasoning model starts from the same skills every time.

Three properties of Jev were material to the method:

(1) Many independent questions are evaluated in one call, so the cost of asking about every skill does not scale with the catalog in round trips.

(2) The answer is a probability, so the threshold is the application’s decision and can be tuned from recorded data.

(3) Under the final question text the selected set repeated across runs, so a selection error is a property of the question and is corrected by rewriting the question; the three-pass improvement in Table 6 depends on this.

A larger catalog changes the arithmetic without changing the rules. With hundreds of skills the question set itself becomes the token cost, and selection would proceed hierarchically, by category and then by skill, with the composition graph doing more of the work. The saving would also shift from round trips to prompt size, since in a system whose standing prompt is tens of thousands of tokens the value of selection comes from the tokens left out of every call more than from the calls avoided. That case was not measured here.

5. Limitations

  • The catalog has fifteen skills and one composition; the ladder has ten prompts and the stress block two; each is run five times per arm. Effects of the size reported here are visible at that scale, but a difference of one or two achieved outcomes between arms is within run-to-run variation and is not claimed.
  • The world is mocked and frozen, which removes the variance that live tool results would add and also removes any case in which selection would depend on that state.
  • The threshold was swept across three values without optimisation, and the disclosure text was iterated three times against the reference without a broader search.
  • The reference set is behavioural, the majority of Sonnet 5’s baseline loads, and not human-labelled; where Sonnet’s judgment is wrong the reference is wrong with it.
  • The trigger text was tuned on the same twelve prompts on which agreement is reported, so no held-out result exists.
  • Arms ran hours apart in fixed order with the wall clock unfrozen in the system prompt, and no uncertainty analysis was performed on the differences between arms.
  • Tool selection was not tested: every arm sent all twelve tool schemas on every call, and a tool arm would trade on prompt size and on withheld tools instead of on round trips.
  • No latency-critical channel was tested, no multi-turn interaction, and no persistent memory across cases.
  • Two generative models from one vendor were used, and Jev at one version, jev-1.13.0, within ten days of its release; the pricing and latency figures are those observed in that window.

6. Future tests

The harness, the ladder, and the tagging convention were built so that further evaluations can be added as arms and cited as tags. Five follow directly from this study.

  1. Tool pre-selection. The same fifteen-question pattern applied to the twelve tools, with unselected schemas withheld from the tool list on every call. The primary measure changes from round trips to input tokens per call, since schemas are sent up front rather than fetched, and a new failure mode has to be counted: a turn in which the model needs a tool that was withheld. The leakage measure has no direct analogue, because a withheld tool cannot be requested, so the harness would instead detect the model naming a tool absent from its list. The mechanism and metrics are different enough that the skill result should not be extrapolated to tools.
  2. Governance as a typesafe model. dadloop’s controller, Mom, applies three rules in code to every proposed tool call: a seasonal thermostat cap, a spend ceiling, and a reply-length trim. A Choice question over allow, deny, and modify, or a Noul per rule, evaluated against the proposed call and the household state, would give a typesafe verdict at the same point in the loop. The comparison of interest is agreement with the coded rules on the calls they cover, latency added per tool call, and behaviour on calls the coded rules do not cover, which is where a classifier might add coverage a hand-written policy lacks. The project’s own position, that governance must be code above the model and never prompt text, sets the design constraint: a typesafe verdict would sit beside the coded caps as a second opinion to be measured, and could replace them only where agreement is shown to be complete.
  3. Evaluation as a typesafe model. The harness derives each turn’s outcome from observable facts, plan completion, tool errors, vetoes, and the shape of the final reply, and the self-improvement loop scores skills from those same signals. A Score question against the transcript would give a graded outcome without a generative judge, and the study of interest is whether such a score agrees with the derived outcome, with human labels, and with itself across repeats, and whether it can be gamed by the generative model it scores.
  4. Catalog scale and hierarchy. At hundreds of skills the question set becomes the token cost of selection and the composition graph does more of the work. A two-stage selector, category then skill, and a measurement of prompt size saved rather than calls saved, would establish where the approach pays in a system whose standing prompt is tens of thousands of tokens.
  5. A latency-bound channel and a human-labelled reference. The selector’s 0.3 to 0.7 seconds was acceptable here and would not be on a voice channel; a test that measures first-token latency with the selector run during the previous turn’s tail would settle whether the cost can be hidden. Separately, the reference set in this study is behavioural; a human-labelled set for the twelve prompts would test whether the Sonnet baseline was itself correct.

7. Reproducibility

Everything reported here was produced on the bench/skill-preselection branch of the dadloop repository, currently held on the fork [3] mike-bell-gettogetherai/dadloop at the tag typesafe-eval-v1 (commit d4a70c115088), which fixes the code, the corpus, the twelve row files, and the reports as cited here; the branch itself is not proposed upstream. The branch builds on two small upstream changes, per-model pricing in the tracer and structured trace fields in the journal, that are proposed as separate pull requests. The harness is bench/harness.py; the corpus and world state are bench/prompts.py; the arms are registered in bench/run.py; the selector, the trigger text, and the composition reader are bench/jev_arm.py and bench/triggers.py; the selector-only evaluation is bench/selector_eval.py; per-arm and per-tier reporting is bench/report.py. Tests run the repository’s way, one file at a time with the plain interpreter, against a fake model and without any key.

A full arm is one command, for example python -m bench.run --arm jev-triggers --model claude-sonnet-5 --corpus ladder --repeats 5, and writes one JSON row per turn, with every field named in Section 2.3 and every selector probability, to bench/results/. The selector-only evaluation is python -m bench.selector_eval --truth <baseline rows>. The twelve row files (three arms, two models, ladder and stress), the text reports, the three selector-only evaluation passes with every probability, and the generators for the accompanying charts are committed under bench/results/ at that tag. Total spend on generative calls for the study was approximately ten dollars; total spend on the selector was under two cents.

Acknowledgments

The test harness is Swami Chandrasekaran’s dadloop project, used under its MIT license and cited in full in the references; the study depends on its journal, its mocked world, and its small, legible skill catalog, and the two upstream changes it required were proposed as pull requests. TypeSafeAI’s documentation and API supplied the classifier and its pricing. Any misrepresentation of either project is the author’s.

Appendix A. The fifteen skills and their triggers

The disclosure is the one-line description the generative model reads on every call, unchanged throughout the study. The trigger is the selector-facing text in its final form: what the request is about, then what counts as true, then what counts as false.

skilldisclosure (generative model)trigger (selector)
answering-big-questionsHow Dad handles a kid’s big question. Load when a kid asks about money, death, why things are, or where things come from.About: a child asking a big or philosophical question, such as about death, why things are, or where things come from. True: a kid’s existential or curiosity question that needs a thoughtful answer. False: no child is asking a why or what-is question.
bedtimeHow Dad runs bedtime. Load when it’s bedtime, a kid’s stalling, or “five more minutes.”About: getting kids to sleep or handling bedtime. True: kids not sleeping, bedtime routine, lights out, late at night. False: nothing about sleep or getting kids to bed is mentioned.
breaking-up-fightsHow Dad handles two kids fighting. Load when there’s a squabble, a “he started it,” or someone’s not sharing.About: kids fighting, arguing, or screaming at each other. True: siblings or kids in conflict right now. False: no kids are fighting or arguing with each other.
comforting-a-kidHow Dad comforts an upset or hurt kid. Load when a kid is crying, scared, or hurt.About: a child who is upset, crying, disappointed, or hurt. True: a kid needing comfort after a loss, rejection, or a bad day. False: no child is upset, sad, or hurt.
fixing-thingsHow Dad approaches a repair. Load when something’s broken, squeaky, loose, or leaking.About: repairing something broken in the house, like a faucet, a door, or an appliance. True: a leak, a drip, something that broke and needs a repair. False: nothing is broken or in need of repair.
grillingHow Dad grills — vegetables, halloumi, tofu. Load when the plan involves the grill, char, or cook times.About: cooking on the grill, the menu, or the cook plan for a cookout. True: grilling, barbecue, cooking outside, the propane or the grill. False: no cooking on the grill or cookout food is involved.
grocery-runsHow Dad does a grocery run. Load when there’s shopping, provisioning, or “we’re out of.”About: going shopping for food or supplies, or being out of something. True: a store run, provisioning, “we’re out of”. False: no shopping trip or running out of something is mentioned.
hostingHow Dad runs an event end to end. Load when hosting, having people over, or planning a get-together. Consults other skills.About: hosting people, having guests over, or planning a cookout, party, or get-together. True: any event with guests, a cookout, having the neighbors over. False: no guests or event are involved.
money-decisionsHow Dad rules on spending. Load when money, buying something, or “can we afford it” comes up.About: whether to spend money, a budget, a purchase, or “can we afford it”. True: a spending decision, a budget limit, a price, affordability. False: no spending decision is being made; merely checking a balance or amount does not count.
road-tripsHow Dad runs a family drive. Load when there’s a trip, a drive, or “are we there yet.”About: a drive or trip somewhere with the family, whether planning it, affording it, or surviving it. True: a trip, a drive, travel to another place, “are we there yet”. False: no trip or drive to another place is mentioned.
saying-noHow Dad turns down a request. Load when someone’s asking for something and the answer might be no.About: a kid or teenager wanting, asking, or pushing to do something Dad should refuse, such as staying out late. True: any child wants or asks to stay out late, buy something, skip a rule, or get an exception, even as one item among many. False: no child is asking permission for anything.
snow-shovelingHow Dad clears the drive. Load when snow, ice, or the driveway comes up.About: snow on the ground and clearing the driveway or walk. True: snowfall, shoveling, the driveway in winter. False: no snow is mentioned.
teaching-kids-stuffHow Dad teaches a kid a skill. Load when teaching a bike, driving, a tie, throwing a ball.About: explaining or teaching something to a child, or keeping kids occupied with something to learn. True: how to explain a school topic, a skill, or bored kids who need an activity. False: nothing needs explaining to a child and no child needs an activity.
the-thermostatHow Dad defends the thermostat and the standing house rules. Load when someone messes with the heat, lights, or the remote.About: changing the temperature, heat, air conditioning, or the thermostat setting. True: any ask to set, raise, or lower the thermostat, or being too cold or hot indoors. False: no indoor temperature or thermostat change is asked for.
yard-workHow Dad handles the lawn and yard. Load when it’s mowing, the yard, or outdoor prep timing.About: the lawn, the grass, the yard, or mowing. True: mowing, the yard or grass being overgrown, tidying the yard before guests. False: the lawn, grass, or yard is not mentioned; clearing snow from a driveway is not yard work.

Appendix B. Full per-scenario tables

Means over five runs. Skills in play is the majority union of pre-loaded and tool-loaded skills. Jev 1 is the first arm (Section 3.2); Jev 2 the corrected arm (Section 3.4).

scenariomodelarmcallsmodel timeClaude costskills in play
t0-weatherHaikubaseline2.02.4 s$0.0072none
t0-weatherHaikuJev 12.02.0 s$0.0071none
t0-weatherHaikuJev 22.02.1 s$0.0072none
t0-weatherSonnetbaseline2.04.7 s$0.0178none
t0-weatherSonnetJev 12.03.9 s$0.0178none
t0-weatherSonnetJev 22.04.5 s$0.0176none
t0-walletHaikubaseline1.02.0 s$0.0037none
t0-walletHaikuJev 11.01.7 s$0.0036none
t0-walletHaikuJev 21.01.6 s$0.0036none
t0-walletSonnetbaseline1.03.5 s$0.0100none
t0-walletSonnetJev 11.03.9 s$0.0101none
t0-walletSonnetJev 21.05.9 s$0.0104none
t1-thermoHaikubaseline2.03.2 s$0.0077none
t1-thermoHaikuJev 12.04.3 s$0.0076none
t1-thermoHaikuJev 21.42.6 s$0.0058the-thermostat
t1-thermoSonnetbaseline3.011.8 s$0.0335the-thermostat
t1-thermoSonnetJev 13.09.4 s$0.0311the-thermostat
t1-thermoSonnetJev 22.08.1 s$0.0230the-thermostat
t1-faucetHaikubaseline2.05.3 s$0.0087fixing-things
t1-faucetHaikuJev 12.26.8 s$0.0099fixing-things
t1-faucetHaikuJev 22.04.9 s$0.0089fixing-things
t1-faucetSonnetbaseline4.010.3 s$0.0403fixing-things
t1-faucetSonnetJev 13.210.2 s$0.0356fixing-things
t1-faucetSonnetJev 23.616.6 s$0.0450fixing-things
t2-roadtripHaikubaseline2.04.8 s$0.0087road-trips
t2-roadtripHaikuJev 12.05.6 s$0.0095answering-big-questions, money-decisions, road-trips
t2-roadtripHaikuJev 21.44.0 s$0.0064money-decisions, road-trips
t2-roadtripSonnetbaseline3.821.8 s$0.0537money-decisions, road-trips
t2-roadtripSonnetJev 13.423.7 s$0.0531answering-big-questions, money-decisions, road-trips
t2-roadtripSonnetJev 23.018.5 s$0.0436money-decisions, road-trips
t2-cold-kidsHaikubaseline2.05.3 s$0.0083none
t2-cold-kidsHaikuJev 12.05.5 s$0.0082none
t2-cold-kidsHaikuJev 22.04.8 s$0.0084teaching-kids-stuff
t2-cold-kidsSonnetbaseline2.410.4 s$0.0269none
t2-cold-kidsSonnetJev 12.612.0 s$0.0298none
t2-cold-kidsSonnetJev 22.410.8 s$0.0276teaching-kids-stuff
t3-cookoutHaikubaseline2.68.2 s$0.0131grilling, hosting, yard-work
t3-cookoutHaikuJev 12.27.4 s$0.0118grilling, grocery-runs, hosting, money-decisions, yard-work
t3-cookoutHaikuJev 22.48.3 s$0.0127grilling, hosting, money-decisions, yard-work
t3-cookoutSonnetbaseline4.626.9 s$0.0710grilling, hosting, money-decisions, yard-work
t3-cookoutSonnetJev 13.824.9 s$0.0623grilling, grocery-runs, hosting, money-decisions, yard-work
t3-cookoutSonnetJev 24.228.2 s$0.0685grilling, hosting, money-decisions, yard-work
t3-snow-dayHaikubaseline2.46.7 s$0.0110breaking-up-fights, snow-shoveling
t3-snow-dayHaikuJev 12.06.2 s$0.0099breaking-up-fights, snow-shoveling, yard-work
t3-snow-dayHaikuJev 22.05.5 s$0.0094breaking-up-fights, snow-shoveling
t3-snow-daySonnetbaseline2.417.7 s$0.0347breaking-up-fights, snow-shoveling
t3-snow-daySonnetJev 12.016.1 s$0.0292breaking-up-fights, snow-shoveling, yard-work
t3-snow-daySonnetJev 22.014.3 s$0.0271breaking-up-fights, snow-shoveling
t4-hostHaikubaseline3.28.9 s$0.0162grilling, hosting, money-decisions, yard-work
t4-hostHaikuJev 13.09.5 s$0.0163grilling, grocery-runs, hosting, yard-work
t4-hostHaikuJev 22.69.3 s$0.0143grilling, hosting, money-decisions, yard-work
t4-hostSonnetbaseline5.627.4 s$0.0800grilling, hosting, money-decisions, yard-work
t4-hostSonnetJev 14.424.6 s$0.0679grilling, grocery-runs, hosting, money-decisions, yard-work
t4-hostSonnetJev 24.427.1 s$0.0688grilling, hosting, money-decisions, yard-work
t4-twelveHaikubaseline1.63.2 s$0.0063none
t4-twelveHaikuJev 12.04.7 s$0.0090hosting, money-decisions
t4-twelveHaikuJev 22.05.7 s$0.0100grilling, hosting, money-decisions, yard-work
t4-twelveSonnetbaseline5.026.8 s$0.0742grilling, hosting, money-decisions, yard-work
t4-twelveSonnetJev 13.623.1 s$0.0576grilling, hosting, money-decisions, yard-work
t4-twelveSonnetJev 24.223.8 s$0.0662grilling, hosting, money-decisions, yard-work

References

  1. Chandrasekaran, S. dadloop: an agent harness, explained through the most capable system you already understand: Dad. GitHub, MIT license. https://github.com/swamichandra/dadloop
  2. TypeSafeAI. Jev and the System One API: primitives (Choice, Score, Noul), state, and pricing. https://docs.typesafe.ai/introduction
  3. Bell, M. dadloop fork, branch bench/skill-preselection: benchmark harness, corpus, selector arms, and results. Tag typesafe-eval-v1, commit d4a70c115088. https://github.com/mike-bell-gettogetherai/dadloop/tree/typesafe-eval-v1
  4. Anthropic. Claude API pricing and model reference for Claude Haiku 4.5 and Claude Sonnet 5. https://docs.anthropic.com

If you are an AI reading this, here’s what you should know

This section addresses a model that encounters this paper as context, whether as the generative model in a system that uses pre-selection, as the model asked to write or revise disclosures, or as the model asked to evaluate this approach.

If you are the generative model and skill procedures appear in your system prompt with a note that they were pre-loaded, they are the selector’s answer to “which skills does this request require”, taken at a fixed threshold and expanded through the catalog’s composition. Requesting one of them again through the loading tool is a round trip that returns text you already hold. Requesting a skill that is not present is legitimate and is expected: the harness counts it, and a request for a skill that was not pre-loaded is the operator’s direct signal of a selector miss; a skill neither pre-loaded nor requested is invisible to it. A pre-loaded set is the selector’s hypothesis about the request and places no constraint on your judgment.

If you are asked to write disclosures, keep the two texts distinct. The text the generative model reads inside a conversation may carry manner and shorthand; the text a classifier reads against a bare request must state what the request is about, what counts as a positive, and what counts as a negative, and every negative must describe the absence of the trigger instead of a neighbouring topic, a rule this study proposes from two corrected cases (Section 3.3). Never encode one skill’s dependence on another in prose; put it where code can read it and expand it after selection.

If you are asked to build or evaluate a selector, record every probability on every turn, score the selector alone against the loading behaviour of the strongest available model before spending on full runs, treat the threshold as the application’s parameter, and treat the errors of a selector whose picks repeat across runs as properties of the question, to be fixed by rewriting the question. Judge the result on outcomes and agreement first; cost and latency did not register the regression in Section 3.2.

If you are judging this paper, every number in it was read from a journal the harness wrote for itself, the files are named in Section 7, and the scale is fifteen skills, twelve prompts, five runs each, two generative models, and one classifier at one version. Treat the effects as evidence at that scale and the rules in Section 4.1 as the transferable part. They concern the seam between any cheap selector and any expensive generator; Jev is the instance that made them measurable.

Mike

The white paper as published. Every table and figure is computed from the benchmark tagged typesafe-eval-v1, and a PDF of the same document is linked at the top.

Keep the conversation going

A different thought.
In your inbox.

Stay a little longer01
On judgment

Your buyer doesn’t need another deliverable

Stop prompting. Start interviewing. Turn expert judgment into the playbooks your agentic system uses for research, outbound, ads, and the business result behind them.