Task classification: Jev decisions vs. LLM classifiers

Generated 2026-09-18 01:27:04 PDT from benchmarkings/task_classifier/results.json.

What was measured

Before KISS Sorcar starts a task it classifies the prompt twice over: is this simple (neither software development nor Internet search, so the lite system prompt suffices) and is this development (it will create or edit files, so the run gets its own git worktree). Until now one non-agentic call on the run's own LLM produced that verdict. This benchmark compares it with a classifier that asks OpenRouter's ~typesafe/jev-latest decisions model a single typed choice question — which of five kinds of task is this: development, git-only, internet, simple, or an ambiguous follow-up — and maps the answer to the same two booleans. A chosen kind with probability below 0.6 is treated as ambiguous (the conservative verdict: full prompt, worktree kept).

The prompts are 415 tasks: 361 real, de-duplicated user prompts taken from a KISS Sorcar history database (paths and personal data removed) and 54 synthetic prompts covering edge cases the real sample is thin on (git-only chores, weather and price look-ups, bare fragments such as fix it). Each was labelled by hand against the classifier's own definitions; 344 labels are clear-cut and 71 are marked uncertain because a careful reader could defend either verdict (for example "authenticate gmail", or a follow-up question whose context is missing). Category counts: development 186, simple 128, git_only 40, internet 44, ambiguous 17.

Read the numbers with this in mind. The labels and the Jev question wording were written by the same hand, from the same definitions, so the comparison favours Jev in the way any benchmark favours the system whose criteria it was written against. The LLM prompt is the production prompt, unchanged. Two mitigations: the Jev wording and the probability floor were chosen on one half of the prompts (201 tasks, split = dev) and checked on the other; recomputed from the raw answers in results.json, Jev's accuracy without the floor is 87.6% on the tuning half and 89.7% on the held-out half, and with the floor 85.1% and 91.1%: the held-out half scores at least as well as the tuning half either way, so the choices did not fit the tuning half in particular. The accuracy on the clear-cut labels is also reported separately.

Results

classifieraccuracyaccuracy, clear-cut labelsis_simple is_developmentlite-prompt errorsno-worktree errorsno verdict cost / tasktotal costmedian latencyp90 latency
jev-decisions88.2%94.2%89.6%90.8%1154$0.000025$0.01020.22 s0.61 s
claude-fable-5-180.0%89.2%80.7%89.9%417$0.004953$2.05573.46 s4.77 s
claude-haiku-4-559.8%67.7%65.8%90.6%8270$0.000412$0.17100.58 s0.70 s
gpt-5.6-sol69.4%76.7%70.8%92.3%760$0.002035$0.84462.33 s4.46 s
gemini-3.5-flash77.6%86.3%79.3%90.4%670$0.003178$1.31873.67 s5.52 s

Lite-prompt errors: tasks that are not simple but were judged simple, so they would run on the lite prompt. No-worktree errors: development tasks judged non-development, so they would run without worktree isolation. These are the two mistakes that can hurt a run; the opposite mistakes only cost a full prompt or an unneeded worktree. No verdict means the classifier failed and the run kept its defaults. Recorded causes:

Accuracy on all 415 tasks jev-decisions 88.2% claude-fable-5-1 80.0% claude-haiku-4-5 59.8% gpt-5.6-sol 69.4% gemini-3.5-flash 77.6%
Accuracy on the 344 clear-cut labels jev-decisions 94.2% claude-fable-5-1 89.2% claude-haiku-4-5 67.7% gpt-5.6-sol 76.7% gemini-3.5-flash 86.3%
Accuracy by task category 0% 25% 50% 75% 100% jev-decisions on development: 97.8% llm:claude-fable-5-1 on development: 97.8% llm:claude-haiku-4-5 on development: 89.8% llm:gpt-5.6-sol on development: 97.8% llm:gemini-3.5-flash on development: 97.3% development jev-decisions on simple: 78.1% llm:claude-fable-5-1 on simple: 48.4% llm:claude-haiku-4-5 on simple: 25.8% llm:gpt-5.6-sol on simple: 40.6% llm:gemini-3.5-flash on simple: 39.1% simple jev-decisions on git_only: 92.5% llm:claude-fable-5-1 on git_only: 87.5% llm:claude-haiku-4-5 on git_only: 2.5% llm:gpt-5.6-sol on git_only: 5.0% llm:gemini-3.5-flash on git_only: 95.0% git_only jev-decisions on internet: 70.5% llm:claude-fable-5-1 on internet: 84.1% llm:claude-haiku-4-5 on internet: 86.4% llm:gpt-5.6-sol on internet: 84.1% llm:gemini-3.5-flash on internet: 86.4% internet jev-decisions on ambiguous: 94.1% llm:claude-fable-5-1 on ambiguous: 94.1% llm:claude-haiku-4-5 on ambiguous: 52.9% llm:gpt-5.6-sol on ambiguous: 88.2% llm:gemini-3.5-flash on ambiguous: 88.2% ambiguous jev-decisions claude-fable-5-1 claude-haiku-4-5 gpt-5.6-sol gemini-3.5-flash
Hover a bar for the exact value. The LLM classifiers lose most of their accuracy on the simple and git-only categories, which they tend to call development.
Cost per task (USD, linear scale) jev-decisions $0.000025 claude-fable-5-1 $0.004953 claude-haiku-4-5 $0.000412 gpt-5.6-sol $0.002035 gemini-3.5-flash $0.003178
Median latency per task (seconds) jev-decisions 0.22 s claude-fable-5-1 3.46 s claude-haiku-4-5 0.58 s gpt-5.6-sol 2.33 s gemini-3.5-flash 3.67 s

Per task, Jev costs $0.000025 against $0.004953 for claude-fable-5-1, a factor of about 202; its median latency is 0.22 s against 3.46 s, about 15× faster. Because a classification happens before every task, the latency is felt directly as time-to-first-action.

How the classifiers differ

The LLM classifiers are conservative by instruction: the prompt tells them to answer {"is_simple": false, "is_development": true} whenever in doubt, and they take that liberally. claude-haiku-4-5 and gpt-5.6-sol call almost every git-only task development (1/40 correct and 2/40 correct), and every LLM labels fewer than half of the simple tasks as simple. That is safe — a worktree and the full prompt never break a task — but it forfeits most of the speed-up the classifier exists to provide. Jev, asked a contrastive five-way question, separates git-only chores and code-reading questions from development far more reliably, at the price of more of the harmful kind of error: 11 non-simple tasks on the lite prompt and 5 development tasks without a worktree. They split two ways: open research questions that Jev reads as plain questions ("what is the simplest and most powerful memory system for an AI agent?", "how do I complete a drive cycle on a 2017 BMW?"), and behaviour requests or pasted error logs that it reads as chores or git operations ("after run_parallel finishes, you must show the results", "I am getting the following error when I run ./rsorcar. fix it." followed by a git push log).

Agreement between classifiers

pairsame verdict
jev-decisions vs claude-fable-5-181.2%
jev-decisions vs claude-haiku-4-559.0%
jev-decisions vs gpt-5.6-sol69.2%
jev-decisions vs gemini-3.5-flash77.6%
claude-fable-5-1 vs claude-haiku-4-567.0%
claude-fable-5-1 vs gpt-5.6-sol78.6%
claude-fable-5-1 vs gemini-3.5-flash82.4%
claude-haiku-4-5 vs gpt-5.6-sol81.9%
claude-haiku-4-5 vs gemini-3.5-flash70.1%
gpt-5.6-sol vs gemini-3.5-flash77.6%

The LLMs agree with each other about as often as they agree with Jev, which is a reminder that the task is genuinely ambiguous at the margins: no two classifiers here agree on more than 82% of prompts.

Where Jev was right and claude-fable-5-1 was wrong

Where claude-fable-5-1 was right and Jev was wrong

What changed in KISS Sorcar