Skip to content

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.

HookbetaMIT

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

TypeQuestionAnswers
Yes / noKeep this skill for the current message?—
ChoiceWhich skills are most relevant (soft scores)?(inferred)—

How it works

  1. Load SKILL.md files from configured roots into a catalog
  2. Score each skill locally or with Jev keep/Choice questions
  3. Keep skills above the threshold (default 0.45, up to max_keep)
  4. 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

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.

    PluginbetaTypeScript
  • Toolkit where Jev condenses large MCP responses for Claude Code and maps Codex requests to reviewed, fixed repository operations.

    ProjectbetaTypeScript
  • Agent skill that has Jev pick the few relevant lines from big logs before your coding agent reads them, with a reversible reduce and ledger.

    ProjectbetaPython
  • Gives an agent one tool that uses Jev to search a nested capability tree and return only the documented commands a task needs.

    ProjectprototypeTypeScript
  • MCP server with record and recall tools: facts are logged during a session and Jev keeps only those relevant to the next task.

    MCP serverbetaTypeScript
  • Claude Code plugin where Jev asks one yes/no per standing rule and delivers only the rules relevant to each prompt, once per session.

    ProjectbetaJavaScript