jevgrep (allebee)
grep by meaning: pipe text in, ask a yes/no question in plain English, and Jev returns matching lines, even behind tail -f.
Overview
jevgrep (allebee) filters logs and other text streams by meaning. You pipe in text and ask a yes/no question in plain English, such as this line reports a real error, not routine noise; Jev answers one Noul per line in batches, code applies a threshold, and matching lines are printed grep-style. It behaves like grep, supporting -v, -n, JSON output, pipes and grep's exit codes, handles Ctrl+C and head cleanly, and works behind tail -f, kubectl logs -f or journalctl -f, with matches appearing about 0.7 seconds after a line is written. An optional explain flag asks Claude for a short summary of matches and likely root cause.
On its hand-labelled benchmark of 195 log lines and three questions, run through OpenRouter with identical states, batching and a 0.5 threshold, Jev with default batching reached a mean F1 of 0.904 for $0.0024, versus 0.873 for Claude Haiku 4.5 at $0.11 and 0.952 for Claude Sonnet 5 at $0.41. The README says it keeps meaningful lines without the word error (a 503, a traceback, OOMKilled) and drops misleading ones (error_rate=0.00), estimates about $0.004 per 1,000 lines, documents where Jev loses, and advises using grep when a regex suffices. It is on PyPI with CI and an MIT licence.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this line satisfy the user's plain-English question (e.g. reports a real error, not routine noise)? | — |
How it works
- Pipe text or a live stream into jevgrep
- Batch lines with one Noul each to Jev
- Print lines at or above the threshold
- Optionally summarise matches with --explain
Strengths
- Meaning-based filtering beyond keywords
- About $0.004 per 1,000 lines per the README
- Fast enough for live tailing
- Benchmark against Claude models with honest limits
Caveats
- Small hand-labelled benchmark
- Sonnet 5 scored higher F1
- Uses a remote API for every line
Getting started
uv tool install jevgrep-cli && export OPENROUTER_API_KEY=..., then `tail -f server.log | jevgrep "This line reports a real error, not routine noise"`.At a glance
- Type
- Benchmark
- Status
- beta
- Language
- Python
- Runtime
- CLI
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Log triage: filters logs and other text streams, including live `tail -f` output, by asking Jev one Noul per line against a plain-English question and printing lines at or above a probability threshold, with a hand-labelled benchmark against Claude in the repository.
yibie/awesome-jevStreaming grep by meaning for logs: asks Jev one Noul per line against a plain-English question and prints the lines at or above a threshold, including from `tail -f`
AnotiaWang/awesome-decision-modelsOn the bundled sample (\`examples/sample.log\`, 200 lines):
logicrw/awesome-jev-projectsJev decides, one Noul per line, whether each line of a log or other text stream satisfies a plain-English question; code applies the threshold and prints the matches grep-style, including from `tail -f`.
cobanov/awesome-jevGrep by meaning: pipe in any text, ask a yes/no question in plain English, get only the matching lines. Works behind tail -f, about $0.004 per 1,000 lines, powered by TypeSafe's Jev.
hellogumbo/awesome-jev
Frequently asked questions
How does it compare with Claude?
Mean F1 0.904 versus 0.873 for Haiku 4.5 and 0.952 for Sonnet 5, at a small fraction of the cost, on the README's benchmark.
Can it follow live logs?
Yes, matches appear about 0.7 s after a line is written.
When should I use plain grep?
Whenever a regex can express what you are looking for.
Related projects
On-call tooling where Jev judges alerts and incident hypotheses and plain code decides: alert routing plus a no-LLM root-cause benchmark.
ProjectbetaPythonSREGym blog post on Kubernetes incident diagnosis with no LLM agent: Jev picks a root cause from collected evidence.
ArticleresearchExperiment testing whether a local Qwen read via label log-probabilities can replace Jev on synthetic AIOps alert decisions.
ProjectresearchPythonWeb app that sends identical ticket-routing and alert-triage questions to OpenAI Decisions and Jev side by side.
BenchmarkprototypePythonSelf-hosted Stacks blockchain data service whose Slack gate and fault-triage paths reportedly run on Jev decisions.
ServiceproductionTypeScriptHome Assistant integration that runs weekly checks with Jev judgments and turns confident findings into Repairs cards for you to confirm.
ProjectbetaPython