Коротко
- Внутри Claude Code jev-gateway никогда не принуждает вызвать инструмент. Одна строка,
steer: thinking || cached ? "hint" : "tool_choice", переключает его в режим подсказки, как только запрос несёт extended thinking или кешированный диалог, а настоящий запрос Claude Code несёт и то и другое уже на первом ходе. - Подсказка это
<system-reminder>из двух предложений, добавленный в конец последнего сообщения пользователя. Модель вправе её проигнорировать, а если Claude Code уже поставил собственный system reminder последним блоком, подсказка не прикрепляется вовсе. - Собственный бенчмарк шлюза (120 сессий) показывает: для моделей Claude маршрутизация окупается на отладке и обходится дорого на разработке фич. Opus 5 на задаче с фичей: +61% входных токенов, +47% запросов, +83% времени; Sonnet 5: +16% входа и +37% времени.
- Jev реально работает в Codex: шлюз там принуждает вызов инструмента, и Jev направил от 76 до 100% запросов Codex против 34 до 51% запросов Claude Code.
- Замер на нашей машине: чистый запрос Claude Code 2.1.280 уже несёт 24 инструмента и 47,411 токенов префикса; обычная настройка с MCP-серверами несёт 40 инструментов и 57,277 токенов, и шлюз пересылает этот список в Jev при каждом вызове.
- У fast-jev-compaction, самого популярного инструмента для Jev, есть открытые issues: хуки не регистрируются в актуальных сборках Claude Code, а полные транскрипты уходят в стороннее API. Пока нет.
Что показывают замеры
Jev это модель принятия решений, а не генератор текста. Вендор берёт $0.042 / MTok за вход при бесплатном выходе, заявляет сквозное время ответа 70ms-500ms и под заголовком «193.6x faster, 444.6x cheaper» сам пишет, что эти цифры «are on the higher end of real world gains» s3. В том же посте признаётся, что эталонные ответы усредняют GPT-6 Astra и Fable 5.1, из-за чего сравнение смещено в пользу моделей OpenAI и Anthropic s3.
jev-gateway подключается к Claude Code одной переменной окружения: bin/clients.mjs ставит ANTHROPIC_BASE_URL на локальный шлюз и не трогает вход Max s1. В src/adapters/messages.ts шлюз спрашивает Jev, какой инструмент подходит для следующего шага, и затем решает, как передать ответ. Если в запросе включён thinking или есть блоки cache_control, он даёт подсказку. Иначе выставляет tool_choice s1. Подсказка звучит так: модель-маршрутизатор считает названный инструмент наиболее подходящим следующим шагом, игнорируй это, если он не соответствует тому, что пользователь на самом деле просил. Она добавляется к последнему сообщению пользователя блоком <system-reminder> s1.
Другого выбора Anthropic API не оставляет. При ручном extended thinking tool_choice: any и tool_choice: tool не поддерживаются и возвращают ошибку, а Claude Opus 5.5, Claude Fable 5.1 и Claude Mythos 5.1 возвращают 400 на принудительный вызов инструмента независимо от thinking s4. Нюанс, который упускает комментарий в самом шлюзе: по документации Claude Opus 5 поддерживает принудительный выбор инструмента при включённом thinking s4. Что до кеша, иерархия такая: tools, затем system, затем messages; смена tool_choice инвалидирует только кеш messages, а правка определения инструмента инвалидирует весь кеш, поэтому шлюз добавляет блок, а не переписывает описание инструмента s5.
Бенчмарк, который почти никто не цитирует, сделан самим автором шлюза. Шесть моделей, две задачи, по пять прогонов на режим, 120 сессий агентов за 2026-09-18 и 19, модели GPT в Codex 0.154, модели Claude в Claude Code 2.1, каждый агент чистый, без MCP-серверов, плагинов и навыков s2. На chess-bugfix каждая модель потратила с маршрутизацией меньше токенов, и ничто не стало менее правильным. На chess-san, задаче с фичей, маршрутизация заметно ухудшила Opus 5 и Sonnet 5, и авторы называют причину: с моделями Claude шлюз только подсказывает, поэтому неподходящая подсказка стоит обходного пути, а не игнорируется бесплатно s2. Один раз маршрутизация стоила и корректности: GPT-5.6 Luna решила chess-san пять раз из пяти без неё и три из пяти с ней s2. Авторы добавляют, что входные токены в основном кешированы (80 до 96%), поэтому экономия на входе стоит меньше денег, чем такая же экономия на выходных токенах, и что сам Jev обошёлся от полцента до десяти центов за пять прогонов s2. Один из 120 прогонов, chess-bugfix.on.3 в серии Luna, помечен как contaminated: агент нашёл в /tmp тестовый скрипт другого прогона s2.
Сноска в README, которая и подтолкнула нас к собственному тесту: с --user-tools одна конфигурация отправляла 285 инструментов и около 200,000 токенов с каждым запросом Claude Code, против 6 инструментов и 7,000 токенов в чистой s2. Мы замерили то же место. Чистый запрос Claude Code 2.1.280 несёт 24 инструмента, 87,547 символов определений инструментов и 47,411 тарифицируемых токенов префикса (16,221 записано, 31,190 прочитано); полная конфигурация несёт 40 инструментов, 93,179 символов определений и 57,277 токенов префикса, все записаны. Оба запроса несут thinking: {type: "adaptive"} и 3 блока cache_control, без tool_choice, а это ровно то условие, которое фиксирует режим подсказки в messages.ts s1. Один ответ «ok» стоит $0.07 в эквиваленте API на чистом Sonnet 5 и $1.15 на полном Fable 5.1 по полям total_cost_usd и usage самого Claude Code, то есть на том же месте, где стоит запускатель шлюза s1.
Про fast-jev-compaction, плагин из треда про «мгновенную компактацию» (рейтинг 495, 117 комментариев) s9: открытые issues важнее числа звёзд. #21 сообщает Hooks (0) после установки, потому что session.compact и turn.complete не распознаются как события хуков в Claude Code 2.1.272; #88 говорит, что хуки не могут заменить компактацию, а полные транскрипты отправляются в стороннее API; #65 описывает 9 подряд выдуманных отчётов «work done» после одной компактации; #89 сообщает, что компактация отменяется при --resume s7. Главная жалоба в треде, 84 балла, касается ToS вендора и контроля над данными s9. Cookbook по подсказке навыков это единственный измеренный выигрыш, который вендор публикует для набора инструментов агента: доля неверно загруженных навыков падает с 16.8% до 7.3%, а навыка, загруженного когда ничего не подходит, с 9.8% до 4.0% s13.
Замеры
Бенчмарк шлюза, проценты относительно той же модели с выключенной маршрутизацией s2.
chess-bugfix: найти и исправить пять внедрённых багов
| Модель | Решено, вкл / выкл | Выходные токены | Входные токены | LLM-запросы | Секунды | Направлено Jev |
|---|---|---|---|---|---|---|
| GPT-6 Astra | 5/5 · 5/5 | 1,226 (-57%) | 96k (-7%) | 5 (0%) | 41 (-39%) | 100% |
| GPT-5.6 Sol | 5/5 · 5/5 | 3,211 (-57%) | 202k (-40%) | 9 (-36%) | 78 (-36%) | 93% |
| GPT-5.6 Luna | 1/4 · 0/5 | 10,519 (-12%) | 506k (-10%) | 19.5 (-15%) | 200 (+10%) | 86% |
| Fable 5.1 | 5/5 · 5/5 | 8,675 (-13%) | 276k (-19%) | 14 (-22%) | 148 (+6%) | 45% |
| Opus 5 | 5/5 · 5/5 | 16,693 (-7%) | 406k (-22%) | 18 (-14%) | 218 (+2%) | 38% |
| Sonnet 5 | 5/5 · 5/5 | 16,623 (-41%) | 616k (-48%) | 26 (-26%) | 243 (-25%) | 34% |
chess-san: добавить алгебраическую нотацию в рабочий движок
| Модель | Решено, вкл / выкл | Выходные токены | Входные токены | LLM-запросы | Секунды | Направлено Jev |
|---|---|---|---|---|---|---|
| GPT-6 Astra | 5/5 · 5/5 | 3,663 (0%) | 143k (+2%) | 7 (0%) | 88 (+8%) | 95% |
| GPT-5.6 Sol | 5/5 · 5/5 | 5,096 (-9%) | 147k (-39%) | 7 (-36%) | 78 (-16%) | 86% |
| GPT-5.6 Luna | 3/5 · 5/5 | 6,809 (-14%) | 315k (-51%) | 14 (-42%) | 121 (-14%) | 76% |
| Fable 5.1 | 5/5 · 5/5 | 13,497 (-24%) | 331k (-27%) | 13 (-19%) | 167 (-26%) | 51% |
| Opus 5 | 5/5 · 5/5 | 20,152 (+22%) | 676k (+61%) | 25 (+47%) | 390 (+83%) | 44% |
| Sonnet 5 | 5/5 · 5/5 | 23,487 (+9%) | 991k (+16%) | 32 (+3%) | 327 (+37%) | 42% |
Наш собственный снимок запроса, то самое место, где стоит jev-gateway s1.
| Чистая | Полная | |
|---|---|---|
| Модель, выбранная Claude Code | claude-sonnet-5 | claude-fable-5-1 (настройка пользователя, 1M) |
thinking в запросе |
{type: "adaptive"} |
{type: "adaptive"} |
Блоки cache_control |
3 | 3 |
tool_choice |
нет (auto) | нет (auto) |
| Инструментов в запросе | 24 | 40 (28 встроенных + 12 MCP) |
| Определения инструментов, символов | 87,547 | 93,179 |
| Системный промпт, символов | 27,754 | 12,436 |
| Весь запрос, символов | 134,882 | 155,718 |
| Тарифицируемые токены префикса (запись + чтение кеша) | 47,411 (16,221 записано, 31,190 прочитано) | 57,277 (всё записано) |
| Выходные токены | 4 | 4 |
| Стоимость одного «ok» в эквиваленте API | $0.07 | $1.15 |
Протокол: логирующий прокси на 60 строк на 127.0.0.1:8790 пересылает каждый запрос на https://api.anthropic.com байт в байт и записывает, что в нём лежит, то есть то самое место, которое bin/clients.mjs отводит jev-gateway. Claude Code 2.1.280 запускался в headless-режиме, claude -p "Reply with the single word ok. Do not use any tool." --output-format json --max-turns 1, из приватного репозитория Expo с 1,021 отслеживаемым файлом, по подписке claude.ai. Чистая: CLAUDE_CONFIG_DIR на пустую директорию, --strict-mcp-config, --setting-sources project. Полная: обычные пользовательские настройки машины, .mcp.json проекта, пользовательские MCP-серверы и установленные плагины. Один запрос на конфигурацию, только первый ход; ключа Jev нет, так что цифры регрессии это переигранный бенчмарк шлюза, а не воспроизведённый.
Сделайте в понедельник
- Прежде чем добавлять любой маршрутизатор, замерьте своё место: запустите логирующий прокси, направьте на него
ANTHROPIC_BASE_URL, выполнитеclaude -p "Reply with the single word ok." --output-format json --max-turns 1и прочитайте в выводеcache_creation_input_tokensплюсcache_read_input_tokens. - Посчитайте инструменты в этом запросе. Если редко используемые MCP-серверы раздувают список, уберите их из
.mcp.jsonили ограничьте по проектам; это сокращение действует на каждый запрос, с маршрутизатором или без. - Если Jev в Claude Code всё же нужен, откройте
src/adapters/messages.tsв своём клоне jev-gateway и проверьте строкуsteer: при включённом thinking или кеше вы покупаете подсказку, а не маршрут. - Прогоните бенчмарк шлюза на своём репозитории с
--user-tools, а не доверяйте шахматным таблицам; оставляйте маршрутизацию, только если на задаче поиска бага запросов становится меньше без изменения решено/не решено. - Не ставьте fast-jev-compaction, пока не закрыты issues #21, #88 и #89; после установки проверьте, что
/hooksпоказывает больше нуля хуков. - Прочитайте ToS вендора, прежде чем вставлять ключ: каждый маршрутизируемый запрос отправляет ваш список инструментов и последнее сообщение, а плагин компактации отправляет полные транскрипты.
- Если вы также работаете с Codex, сначала проверьте Jev там: бенчмарк показывает, что окупается именно принудительный
tool_choice.
Читать дальше
- Таблица принудительного вызова инструментов по моделям, включая то, какие модели возвращают 400 и какие режимы thinking блокируют
anyиtools4. - Таблица инвалидации кеша:
tools, затемsystem, затемmessages, и строка проtool_choice, объясняющая дизайн шлюза s5. - Issue #24 в jev-gateway: неизменный на протяжении сессии список инструментов пересылается в Jev с каждым запросом, это статья расходов, которую скрывает дашборд s14.
- Раздел о целостности данных в README бенчмарка: 119 из 120 прогонов не пересекались друг с другом, один помечен
contaminatedвruns.jsonls2. - Независимый разбор Jev как классификатора или фильтра на публичных и приватных данных, вне контекста coding-агентов s12.
- Почему evals вендора сравнивают с двумя моделями, а не с эталоном, и что это делает с громкими множителями s11.
- Сторонний обзор jev-gateway, разбирающий разделение «Jev выбирает, LLM пишет» и открытость на localhost, исправленную в тот же день s8.
- Тред запуска на HN, где вопрос цен и субсидий обсуждается открыто s10.
Источники
- jev-gateway, GitHub, vinilana. Зачем читать: в
src/adapters/messages.tsлежит та самая строка, решающая между подсказкой и принудительным вызовом, аbin/clients.mjsпоказывает, что запускатель задаёт толькоANTHROPIC_BASE_URL. - jev-gateway-bench, GitHub, vinilana. Зачем читать: полная таблица 120 сессий и собственная трактовка авторов, включая единственный загрязнённый прогон.
- Introducing System One Models & Jev, TypeSafe AI. Зачем читать: цены, задержка и сноска, оговаривающая заявление о 444.6x, от самого вендора.
- Forcing tool use, Anthropic docs. Зачем читать: таблица по моделям, какие значения
tool_choiceдают ошибку. - Prompt caching, Anthropic docs. Зачем читать: иерархия инвалидации, которая диктует дизайн с подсказкой.
- fast-jev-compaction, GitHub, tamaratran. Зачем читать: откройте вкладку issues раньше README.
- jev-gateway Review: Jev Picks, the LLM Writes, mrjev.com. Зачем читать: взгляд со стороны на архитектуру шлюза.
- Instant Claude Code compaction is my favorite use of Jev so far, r/ClaudeCode. Зачем читать: тред практиков, где вверху возражение по ToS.
- HN: Introducing System One Models and Jev, Hacker News. Зачем читать: дискуссия при запуске о ценах и устойчивости.
- The Evals: Measured Against Two Models, Not Against Truth, novcog. Зачем читать: критика метода оценки, стоящего за множителями вендора.
- Testing Jev on public and private data: classifier or filter, Aman Kumar. Зачем читать: независимый замер вне coding-агентов.
- Skill suggestion cookbook, TypeSafe docs. Зачем читать: единственные опубликованные цифры по выбору из набора, 16.8% до 7.3%.
- jev-gateway issue #24, GitHub. Зачем читать: стоимость повторной отправки списка, которую никто не считает.
- Jev + Claude Code: compaction and a Sonnet 5 source check, jevmodel.ai. Зачем читать: второй взгляд на заявление о компактации с проверкой на Sonnet 5.
FAQ
Принуждает ли jev-gateway когда-нибудь вызвать инструмент внутри Claude Code?
Только когда в запросе нет ни extended thinking, ни блоков cache_control. В наших снятых запросах первого хода было и то и другое, в чистой и в полной конфигурации, так что на практике шлюз даёт подсказку.
Почему шлюз просто не перепишет описания инструментов, чтобы направлять сильнее?
Изменение определений инструментов инвалидирует весь кеш промпта: tools, system и messages. Добавление блока к последнему сообщению пользователя затрагивает только уровень messages, это самое дешёвое место для подсказки.
Значит, Jev бесполезен для кодинга?
Нет. Бенчмарк показывает, что он окупается в Codex, где инструмент принуждается и направляется от 76 до 100% запросов, и на задачах отладки у всех моделей. Не подтверждается цифрами шлюза лишь подача вроде «самый дешёвый Claude Code».
Стоит ли пробовать fast-jev-compaction?
Подождите, пока закроются issues про регистрацию хуков (#21, #88) и про --resume (#89), и решите, приемлемо ли для ваших репозиториев, что полные транскрипты уходят в стороннее API.
AIDive