Nodes/ComfyUI-Jev/Jev Skill Choice
ComfyUI Node

Jev Skill Choice

Your SKILL.md folder, wired into a ComfyUI prompt

By hndrr·Created 5 days ago·Updated 4 days ago· 5
Jev Skill Choice
    • text
    • skills
    • details
    • response_json
    promptWrite a detailed image prompt for a warm, approachable perfume advertisement.
    directory
    instructionsSelect skills that directly help with the requested work. Check each skill's purpose and prerequisites.
    model
    providertypesafe
    api_key
    refresh0
    max_selections3
    strength_modeautomatic
    shortlist_size5
    threshold0.50
    gate_threshold0.30

    What it is

    Somewhere on your disk you probably have a folder of SKILL.md files - the format Claude Code and the shared agent convention use: one folder per skill, a markdown file with name and description in YAML front matter and the actual instructions in the body. Camera notes, brand voice rules, a lighting recipe, whatever you keep having to re-explain.

    Jev Skill Choice turns that folder into a node input. You give it the work you're about to do, it picks the skills that actually apply, and it hands back their complete contents with a priority for each - as one STRING you can wire into a system prompt. So instead of maintaining a master mega-prompt that's 4,000 tokens of mostly-irrelevant rules, you keep twenty small files and get the relevant two.

    Where it looks

    The directory dropdown populates itself from four locations: ~/.agents/skills, <ComfyUI>/.agents/skills, ~/.claude/skills (or $CLAUDE_CONFIG_DIR/skills if you set it), and <ComfyUI>/.claude/skills. It walks them recursively, follows symlinks, and loads a linked skill once rather than twice.

    Pick automatic to search all of them, pick one of the discovered paths, or pick custom and type a path - relative paths resolve against your ComfyUI directory and ~ works. Each SKILL.md gets its front matter parsed with PyYAML; without name and description it falls back to the directory name and the file contents. Only the SKILL.md files are read. Referenced scripts and assets in the same folder are not loaded, and not executed.

    How the selection works

    It's a two-pass filter, and the shape of it is the interesting part. First Jev scores how much this request even needs specialized guidance at all - a bare "make me a cat picture" gets filtered out and you get empty output, reported with a skill_not_needed reason rather than a skill force-fed to you. Assuming guidance is warranted, it ranks every skill by its description alone (cheap), takes the top shortlist_size (5 by default), and only then sends those full file contents for verification. Skills that don't clear threshold (0.5) get dropped.

    max_selections (3) caps the result. strength_mode decides the priorities you get back: automatic scores each selected skill's role from 0 to 2 and drops zeroes, uniform gives every selected skill a flat 1. These are guidance weights handed to a language model - they don't touch any model weights, and automatic output is a judgment, not a measurement.

    Inputs and outputs

    Fill in prompt with the work itself and leave instructions alone unless your folder needs a stricter bar than "does this directly help, and are its prerequisites met". model and provider work exactly as in Jev Interpret and default to TypeSafe's jev-latest.

    Four outputs. text is the one you'll wire - selected skills as markdown headings, each with its full body and a line like Application priority: 2 on a 0–2 scale - and the documented pattern is into OpenRouter Text's system input, with the generation request going separately to that node's prompt. skills is a DICT of records (name, path, description, content, strength). details and response_json are for inspection, including ranking and gate scores. If nothing is suitable, text is empty and skills is {"skills": []} - an empty result, not an error.

    Installing it

    Same pack, same install. Search ComfyUI-Jev in ComfyUI Manager and restart, or:

    cd /path/to/ComfyUI/custom_nodes
    git clone https://github.com/hndrr/ComfyUI-Jev.git
    

    ComfyUI 0.36.0+ and Python 3.10+. PyYAML is doing real work here - it parses your front matter - so if it's somehow missing from your ComfyUI environment:

    python -m pip install "aiohttp>=3.11.8" PyYAML
    

    Key setup is the same as the rest of the pack:

    export TYPESAFE_API_KEY="your-typesafe-key"
    

    Common issues

    • Errors naming a file. It's strict on purpose: an empty SKILL.md, an unclosed --- block, malformed YAML, front matter that isn't a mapping, or a blank name/description all raise with the path in the message. Fix the file.
    • Empty output every time. Either nothing was discovered (check the four roots), or the gate decided the request doesn't need specialized guidance. details says which - skill_not_needed or empty_catalog.
    • You edited a skill and got the old selection. Edits normally do propagate, since the node fingerprints the whole skill set. With identical contents, refresh is the lever.
    • Your skills are being uploaded. Every discovered skill's description, plus the full text of the shortlisted ones, goes to the selected API with your prompt. Anything in a skill file you wouldn't paste into a third-party service goes with it.
    • No track record. This pack is a work in progress with essentially no community discussion behind it, so the README and docs/nodes.md are the documentation.
    CategoryJev

    Inputs (12)

    NameTypeDefaultDescription
    promptSTRINGWrite a detailed image prompt for a warm, approachable perfume advertisement.
    directoryCOMBOSelect a discovered skill directory, automatic to use all discovered directories, or custom to enter a path. Discovers shared agent and Claude skills.
    instructionsSTRINGSelect skills that directly help with the requested work. Check each skill's purpose and prerequisites.
    modelCOMBO4 options: [object Object], [object Object], [object Object], [object Object]
    providerCOMBOtypesafe2 options: typesafe, openrouter
    api_keySTRINGEmpty uses the provider's environment variable. Entered keys are saved in workflows; remove before sharing.
    refreshINT0Keep fixed to reuse results. Change to request a new judgment.
    max_selectionsINT3Maximum number of skills to return. May return none.
    strength_modeCOMBOautomaticAutomatic scores each selected skill's role from 0 to 2. Uniform assigns 1 to every selected skill. These are guidance priorities.
    shortlist_sizeoptINT5
    thresholdoptFLOAT0.500–1Minimum fit required for each selected skill.
    gate_thresholdoptFLOAT0.300–1Minimum need for specialized guidance before evaluating full skill contents.

    Outputs (4)

    NameTypeDescription
    textSTRING
    skillsDICT
    detailsDICT
    response_jsonSTRING