# Jev Skill Select

Use when unsure which of many installed skills applies to a request, if any, or when...

- Repository: https://github.com/kerpopule/hermes-jev-skills (1275 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-29
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add kerpopule/hermes-jev-skills --skill jev-skill-select -g -a claude-code -y`
Codex: `npx skills add kerpopule/hermes-jev-skills --skill jev-skill-select -g -a codex -y`
Cursor: `npx skills add kerpopule/hermes-jev-skills --skill jev-skill-select -g -a cursor -y`
Gemini CLI: `npx skills add kerpopule/hermes-jev-skills --skill jev-skill-select -g -a gemini-cli -y`

## Description

Use when unsure which of many installed skills applies to a request, if any, or when asked to make skill loading cheaper or more accurate. Jev ranks the whole catalog and may say no skill is needed.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Skill selection with Jev

Two round trips, about 0.5 s on a warm connection (this was ~1.2 s before the connections were pooled, every call used to open a new TLS session). The first round trip ranks every skill against the turn: the catalog is cut into batches of 120 that are asked **side by side**, so a 377-skill catalog is four requests sent at once and a 960-skill one is eight, all landing in the time of the slowest. The second round trip is one request: it reads the top five properly, judges each on its own, and may reject them all. Wall clock and billed requests are not the same number, and it is the requests you pay for: reckon on `ceil(skills / 120) + 1` per turn that reaches Jev. A turn that nothing in the catalog comes close to ends after the first request. Small talk and ordinary turns come back with no skill. Reading the skill folders is extra: about 0.15 s for 460 skills.

**When the plugin also runs model routing, the two share one request.** Jev charges per *request*, not per question, so the plugin asks routing's three questions and this stage-1 question or questions in the same call (`jevkit/turn.py`), then hands the answers to each feature's own thresholds. Both halves are also pooled at the connection level (`client.py` keeps keep-alive sockets; a fresh TLS session per call cost ~275 ms of the ~520 ms a decision used to take). Measured against the live API on 2026-09-21/22 with a 379-skill catalog in this fleet: one question ~180-250 ms on a warm connection, and a full Hermes turn (routing + skill selection, merged, pooled) **1784 ms → 672 ms**, 3 requests down to 2. The decisions do not change, the same answers, the same floors, and eight live turns before shipping gave the same tier and the same skill on all eight. `/jev merge_requests off` puts them back in separate requests. A private profile, a turn that looks sensitive, or routing configured for features-only state never merges, so no text moves that was not moving before.

The rest: https://github.com/kerpopule/hermes-jev-skills/blob/HEAD/skills/jev-skill-select/SKILL.md
