Repository navigation
First release of jevgrep: grep by meaning. Pipe in any text, ask a yes/no question, and get back only the lines where TypeSafe's Jev answers yes.
uv tool install jevgrep-cli # or: pipx install jevgrep-cli
uv tool install 'jevgrep-cli[explain]' # adds --explain (Claude via OpenRouter)
tail -f server.log | jevgrep "This line reports a real error, not routine noise"Features
- Streams: micro-batches of 20 lines, sent after 300 ms without input (1 s at most), several requests in flight, output in input order. It works behind
tail -f, where matches appear about 0.7 s after the line is written. - grep-style flags and exit codes:
-v,-n,--score,--json,--threshold, and 0 / 1 / 2 / 130. - Runs through OpenRouter or directly on TypeSafe, chosen by whichever key is set;
--model jev-1.13pins a version. --statsshows lines, requests, tokens, the provider-reported cost and p50 latency.--explaingives a 3–5 sentence root-cause summary of the matches.- Identical lines are judged once. Log text stays in the request's data and never in instructions.
Benchmark (195 hand-labelled log lines, 3 questions): Jev scored a mean F1 of 0.904 for $0.0024 in 12 s. Claude Haiku 4.5 scored 0.873 for $0.11, and Claude Sonnet 5 scored 0.952 for $0.41. Jev loses on the fuzziest question ("a real error, not routine noise") and on a log line that argues for its own label. Details: bench/results.md.
The PyPI package is named jevgrep-cli because jevgrep is too close to the existing jev-grep. The command is jevgrep.