jev-shell-history
jev-shell-history (github.
Overview
jev-shell-history (github.com/mrnugget/jev-shell-history) is mrnugget's zsh plugin. On each buffer change it asynchronously runs a small Node CLI that reads up to one hundred distinct history entries, then asks TypeSafe Jev which entry you are completing. Prefix mode filters literals before the model; fuzzy mode leans on calibrated Choice and Noul gates. Accept with arrow right, Ctrl+E, or End. Latency is roughly seven tenths to nine tenths of a second per request per README, mostly API time.
Problem: Plain prefix history search suggests the most recent literal match, not the command you meant when typing fuzzy intent.
Built for: zsh users who want Fish-style grey autosuggestions ranked by Jev instead of dumb substring order.
First indexed on Jev Directory: 2026-09-18
Creator and team
- Name
- mrnugget
- Handle
- @mrnugget
How Jev is used
- Role in the product flow
- Per-keystroke history completion Choice with Noul gate for fuzzy mode
- Primitives
- ChoiceNoul
- State in
- typed_so_far plus ID-tagged candidate commands from zsh history (prefix-filtered or full set).
- Decision out
- Top Choice candidate with probability score; fuzzy mode only surfaces when Noul and score thresholds pass.
- line-pre-redraw hook starts cli.ts without blocking the prompt
- Load recent distinct history; prefix mode if any entry starts with typed text
- Single TypeSafe request: Choice over candidate IDs plus Noul whether any completes input
- Apply JEV_THRESHOLD, JEV_MIN_SCORE, JEV_STRONG_SCORE gates; discard stale responses if buffer changed
The plugin keeps deterministic shell rules in zsh and delegates judgment to Jev. Choice picks which history ID best continues what you typed; Noul catches cases where nothing in the set actually completes the buffer, which matters in fuzzy mode when the model might otherwise spread probability across noise. README explains why both signals exist: Noul under-fires on tiny histories where Choice is decisive, while nonsense inputs spread Choice mass but leave Noul near zero. Privacy is straightforward: candidate commands and your partial line are sent to TypeSafe on each ranked request (skip the network when a single prefix match is obvious). Configure limits and thresholds with JEV_HISTORY_LIMIT, JEV_MIN_CHARS, JEV_THRESHOLD, and friends before sourcing the plugin.
Sourced performance claims
- Roughly 0.7 to 0.9 seconds per suggestion request, mostly API latency (README).Source: github.com/mrnugget/jev-shell-history README
- Public GitHub repo mrnugget/jev-shell-history had about one hundred one stars when this listing was drafted.Source: GitHub star count September 2026
Features and stack
Features
- Fish-style grey suggestions in zsh 5.9+
- Prefix fast path without API when one literal match exists
- Choice plus Noul in one request per keystroke batch
- Documented env vars for thresholds and history window
Stack
- TypeScript
- zsh
- Node 22+
- TypeSafe System One
Pricing: Plugin is open source; each ranked keystroke uses TypeSafe API credits. Tune JEV_MIN_CHARS and history limit to control spend.
Links
FAQ
- Does my shell history leave my machine?
- When Jev ranks candidates, typed text and up to JEV_HISTORY_LIMIT recent commands are sent to TypeSafe. Single obvious prefix matches can skip the API. Read README before enabling on shared machines.
- Which primitives run per request?
- One request with Choice over history IDs and a Noul asking whether any candidate completes the typed buffer.
- Why are suggestions sometimes empty?
- Fuzzy mode requires top score and Noul or strong score thresholds. Nonsense input should yield no suggestion instead of a random history line.
Related learn guides
Original Jev guidance that pairs with this product pattern.
- Jev use cases
The patterns builders actually search for: moderation, routing, triage, RAG verify, and agent gates.
- Jev & TypeSafe
A primer for builders who need to know what Jev is, who it is for, and when TypeSafe docs should take over from this directory.
Related products
Hand-picked neighbors with rich profiles or overlapping tags.