jev-skill-selection
Pre-message hook that keeps or drops SKILL.md files before the first model call, using local overlap or Jev keep/drop judgments.
Overview
jev-skill-selection is a Python library, CLI and set of host adapters that filters an agent's skill catalog before the first model message. It loads a closed catalog, runs `select_skills` in either `local` mode (keyword and metadata overlap, no key) or `jev` mode (a Noul keep question and Choice soft scores via TypeSafe), and returns kept and dropped lists with the characters saved.
The goal is context size: unrelated skills should never enter the prompt or tool index. Adapters for Claude Code, Codex, Hermes and OpenCode hard-filter dropped skills by default, with a soft-inject mode as fallback. The README shows an offline example cutting five fixture skills to one and saving about 1,000 characters, and notes that thresholds should be calibrated per catalog. It has zero third-party runtime dependencies and ships tests and a live end-to-end script.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Keep this skill for the current message? | — |
| Choice | Which skills are most relevant (soft scores)?(inferred) | — |
How it works
- Load SKILL.md files from configured roots into a catalog
- Score each skill locally or with Jev keep/Choice questions
- Keep skills above the threshold (default 0.45, up to max_keep)
- Host adapter hard-filters dropped skills or soft-injects preferences
Strengths
- Stdlib-only Python with an offline mode that needs no key
- Hard filtering removes unrelated skills from the context entirely
- Adapters for four agent hosts
Caveats
- Thresholds need per-catalog calibration
- Some hosts may need a restart for hard filters to take effect
- Local mode is simple Jaccard overlap and can be blunt
Getting started
python -m pip install -e . then `python -m jev_skill_selection select --root ./tests/fixtures/skills --mode local --threshold 0.1 --message "rebase my branch and open a PR" --json`.At a glance
- Type
- Hook
- Status
- beta
- Language
- Python
- Runtime
- CLI / agent hook
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Pre-message hook: use TypeSafe Jev to keep/drop skills and shrink agent context
logicrw/awesome-jev-projectsPre-message hook: use TypeSafe Jev to keep/drop skills and shrink agent context.
hellogumbo/awesome-jev
Frequently asked questions
Does it pick one skill or several?
Several: it is a multi-skill keep/drop filter aimed at shrinking context, not a single-skill suggester.
Do I need a TypeSafe key?
Only for jev mode; local mode runs offline with no key.
Which model does jev mode use?
The README pins jev-1.13.0 and posts to TypeSafe's systemone endpoint with TYPESAFE_API_KEY.
Related projects
Claude Code and Codex plugin that removes skills from context and lets Jev decide each turn which SKILL.md bodies to inject.
PluginbetaTypeScriptToolkit where Jev condenses large MCP responses for Claude Code and maps Codex requests to reviewed, fixed repository operations.
ProjectbetaTypeScriptAgent skill that has Jev pick the few relevant lines from big logs before your coding agent reads them, with a reversible reduce and ledger.
ProjectbetaPythonGives an agent one tool that uses Jev to search a nested capability tree and return only the documented commands a task needs.
ProjectprototypeTypeScriptMCP server with record and recall tools: facts are logged during a session and Jev keeps only those relevant to the next task.
MCP serverbetaTypeScriptClaude Code plugin where Jev asks one yes/no per standing rule and delivers only the rules relevant to each prompt, once per session.
ProjectbetaJavaScript