fabianboth/jevpipe

Pipe anything into Jev, get typed decisions out. A Unix filter that lets agents offload bulk judgments to a System One model.

Python

1

17 commits

updated Sep 28, 2026

See the code

See what people are saying

SourceMessageScoreDate

Show HN: Jevpipe – a fast System 1 for AI agents, as a Unix pipe

I built jevpipe as a wrapper for TypeSafe's Jev System 1 model. Jev answers yes/no, picks from a few choices or gives a score, with probabilities, and it's fast and cheap. See https://docs.typesafe.ai/introduction for more details on Jev. It performs on par with small LLMs while being faster and…

0

Sep 28, 2026

Show HN: Jevpipe – a fast System 1 for AI agents, as a Unix pipe

2

Sep 28, 2026

README

jevpipe

Give your agent a System 1.

Fast, cheap judgments over thousands of files, lines or records in one shell command,
so your agent decides at scale instead of reading everything itself.

CI PyPI License: Apache-2.0

Quick start · Example · Use cases · Measured · Cost

Quick start

uv tool install jevpipe                             # the CLI
jevpipe auth set-key                                # your OpenRouter key, kept in the system keychain
npx skills add fabianboth/jevpipe --skill jevpipe   # teaches your agent when and how to use it

You need an OpenRouter API key. Where there is no keychain, as in containers, CI or headless Linux, set OPENROUTER_API_KEY instead; it also takes precedence. No uv yet? Install it or use pipx.

Without uv, or with the GitHub CLI
pipx install jevpipe                                # instead of uv
gh skill install fabianboth/jevpipe jevpipe         # the skill, with the GitHub CLI

Example

Which of the 19 commits in ripgrep 15.1 are new features? Ask each commit message:

# in a clone of https://github.com/BurntSushi/ripgrep
git log --format=%s 15.0.0..15.1.0 | jevpipe filter "Is this a new feature?"
# the commit messages that match the question
ignore/types: add `ssa` type
printer: add Cursor hyperlink alias

# the summary, on standard error
jevpipe: 19 records, 2 kept, 0 skipped, 0 failed, $0.000225, 1.1s
Typed answers with map: sort every commit into feature, fix, docs or internal
# in a clone of https://github.com/BurntSushi/ripgrep
git log --format=%s 15.0.0..15.1.0 | jevpipe map -q '{
  "kind": {
    "type": "choice",
    "instructions": "What kind of change is this, for the release notes?",
    "criteria": {
      "feature": "a new capability for users",
      "fix": "a bug fix users would notice",
      "docs": "documentation only",
      "internal": "refactoring, tests, CI, dependencies or release chores"
    }
  }
}'

Every commit becomes one JSON line. One of the 19:

{
  "record": "printer: add Cursor hyperlink alias",
  "answers": {
    "kind": {
      "type": "choice",
      "choice": "feature",
      "probabilities": {"docs": 0.05, "feature": 0.87, "fix": 0.03, "internal": 0.05},
      "confidence": 0.82
    }
  }
}

All 19 took 1.1 seconds and cost $0.0003. Pick from them with jq, for example the fixes: jq -r 'select(.answers.kind.choice == "fix") | .record'. A low confidence marks an answer worth a second look.

Use cases

Each item is judged on its own, so ask what the item itself can answer:

JobQuestion for every itemAnswer
Search code by meaningDoes this file retry failed requests?yes/no
Triage CI failuresTimeout, network error, failed assertion or crash?choice
Review a large diffDoes this change touch authentication or permissions?yes/no
Label an issue backlogBug report, feature request or question?choice
Route a support inboxWhich team? How urgent?choice, score
Moderate a comment queueFine, spam or abusive?choice
Screen papersHow relevant is this abstract to my question?score 1 to 5

Measured

Classification. Jev against general LLMs on intent routing and prompt-injection detection, from an independent study:

Mean over three labelled tasks: Jev 1.13 reached 83.2% accuracy at $0.023 per 1,000 decisions and 0.33 s, GPT-5.4 nano 83.1% at $0.12, Claude Haiku 4.5 81.3% at $0.65, Gemini 3.5 Flash-Lite 80.9% at $0.16, and GPT-5.6 Terra 86.7% at $1.08.

Code search. jevpipe in an agent's hands: 470 searches from the extended CodeSearchNet Challenge in five languages, each over every function of its language.

Over 470 code searches in five languages, jevpipe found 1,272 relevant functions with 767 false hits, grep with an agent-written pattern 1,027 with 1,155, and DeepSeek V4.1 Flash 1,173 with 712.

Read the full benchmark: every language, speed and cost, and the searches where jevpipe loses.

Commands

AsksPrints
jevpipe filter "question"one yes/no questionthe lines answered yes, like grep
jevpipe map -q '{...}'several typed questions: yes/no, one choice, a scoreone JSON line per record

Both read their input like grep: lines through a pipe or from the files you name. With --read-files, each line is a path, and the file it names is judged instead:

git log --format=%s | jevpipe filter "Is this a new feature?"                       # each commit message
jevpipe filter "Is this an error worth a closer look?" app.log                      # each line of app.log
git ls-files | jevpipe filter "Does this file retry failed requests?" --read-files  # each file

jevpipe <command> --help has the rest.

Cost and speed

Every record is one request billed to your OpenRouter credit, and the cost follows the size of each record: about a cent per 1,000 commit messages, 4 to 18 cents per 1,000 source files. Asking several questions at once barely changes it. Up to 100 records run at the same time, so hundreds take seconds.

--max-cost 0.50 stops sending requests once the run has spent $0.50; it then exits with status 3 and names the line to resume from. To cap every run by default, run jevpipe config set max-cost 0.50 once; jevpipe config --help lists the other defaults you can set.

License

Apache-2.0. jevpipe is an independent project, not affiliated with or endorsed by TypeSafe AI; the answers come from Jev, TypeSafe AI's calibrated decision model, through OpenRouter. Building from source needs Rust (rustup picks the pinned toolchain) and PowerShell 7 for ./check.ps1.

fabianboth/jevpipe

Pipe anything into Jev, get typed decisions out. A Unix filter that lets agents offload bulk judgments to a System One model.

Python

1

17 commits

updated Sep 28, 2026

See the code

See what people are saying

SourceMessageScoreDate

Show HN: Jevpipe – a fast System 1 for AI agents, as a Unix pipe

I built jevpipe as a wrapper for TypeSafe's Jev System 1 model. Jev answers yes/no, picks from a few choices or gives a score, with probabilities, and it's fast and cheap. See https://docs.typesafe.ai/introduction for more details on Jev. It performs on par with small LLMs while being faster and…

0

Sep 28, 2026

Show HN: Jevpipe – a fast System 1 for AI agents, as a Unix pipe

2

Sep 28, 2026

README

jevpipe

Give your agent a System 1.

Fast, cheap judgments over thousands of files, lines or records in one shell command,
so your agent decides at scale instead of reading everything itself.

CI PyPI License: Apache-2.0

Quick start · Example · Use cases · Measured · Cost

Quick start

uv tool install jevpipe                             # the CLI
jevpipe auth set-key                                # your OpenRouter key, kept in the system keychain
npx skills add fabianboth/jevpipe --skill jevpipe   # teaches your agent when and how to use it

You need an OpenRouter API key. Where there is no keychain, as in containers, CI or headless Linux, set OPENROUTER_API_KEY instead; it also takes precedence. No uv yet? Install it or use pipx.

Without uv, or with the GitHub CLI
pipx install jevpipe                                # instead of uv
gh skill install fabianboth/jevpipe jevpipe         # the skill, with the GitHub CLI

Example

Which of the 19 commits in ripgrep 15.1 are new features? Ask each commit message:

# in a clone of https://github.com/BurntSushi/ripgrep
git log --format=%s 15.0.0..15.1.0 | jevpipe filter "Is this a new feature?"
# the commit messages that match the question
ignore/types: add `ssa` type
printer: add Cursor hyperlink alias

# the summary, on standard error
jevpipe: 19 records, 2 kept, 0 skipped, 0 failed, $0.000225, 1.1s
Typed answers with map: sort every commit into feature, fix, docs or internal
# in a clone of https://github.com/BurntSushi/ripgrep
git log --format=%s 15.0.0..15.1.0 | jevpipe map -q '{
  "kind": {
    "type": "choice",
    "instructions": "What kind of change is this, for the release notes?",
    "criteria": {
      "feature": "a new capability for users",
      "fix": "a bug fix users would notice",
      "docs": "documentation only",
      "internal": "refactoring, tests, CI, dependencies or release chores"
    }
  }
}'

Every commit becomes one JSON line. One of the 19:

{
  "record": "printer: add Cursor hyperlink alias",
  "answers": {
    "kind": {
      "type": "choice",
      "choice": "feature",
      "probabilities": {"docs": 0.05, "feature": 0.87, "fix": 0.03, "internal": 0.05},
      "confidence": 0.82
    }
  }
}

All 19 took 1.1 seconds and cost $0.0003. Pick from them with jq, for example the fixes: jq -r 'select(.answers.kind.choice == "fix") | .record'. A low confidence marks an answer worth a second look.

Use cases

Each item is judged on its own, so ask what the item itself can answer:

JobQuestion for every itemAnswer
Search code by meaningDoes this file retry failed requests?yes/no
Triage CI failuresTimeout, network error, failed assertion or crash?choice
Review a large diffDoes this change touch authentication or permissions?yes/no
Label an issue backlogBug report, feature request or question?choice
Route a support inboxWhich team? How urgent?choice, score
Moderate a comment queueFine, spam or abusive?choice
Screen papersHow relevant is this abstract to my question?score 1 to 5

Measured

Classification. Jev against general LLMs on intent routing and prompt-injection detection, from an independent study:

Mean over three labelled tasks: Jev 1.13 reached 83.2% accuracy at $0.023 per 1,000 decisions and 0.33 s, GPT-5.4 nano 83.1% at $0.12, Claude Haiku 4.5 81.3% at $0.65, Gemini 3.5 Flash-Lite 80.9% at $0.16, and GPT-5.6 Terra 86.7% at $1.08.

Code search. jevpipe in an agent's hands: 470 searches from the extended CodeSearchNet Challenge in five languages, each over every function of its language.

Over 470 code searches in five languages, jevpipe found 1,272 relevant functions with 767 false hits, grep with an agent-written pattern 1,027 with 1,155, and DeepSeek V4.1 Flash 1,173 with 712.

Read the full benchmark: every language, speed and cost, and the searches where jevpipe loses.

Commands

AsksPrints
jevpipe filter "question"one yes/no questionthe lines answered yes, like grep
jevpipe map -q '{...}'several typed questions: yes/no, one choice, a scoreone JSON line per record

Both read their input like grep: lines through a pipe or from the files you name. With --read-files, each line is a path, and the file it names is judged instead:

git log --format=%s | jevpipe filter "Is this a new feature?"                       # each commit message
jevpipe filter "Is this an error worth a closer look?" app.log                      # each line of app.log
git ls-files | jevpipe filter "Does this file retry failed requests?" --read-files  # each file

jevpipe <command> --help has the rest.

Cost and speed

Every record is one request billed to your OpenRouter credit, and the cost follows the size of each record: about a cent per 1,000 commit messages, 4 to 18 cents per 1,000 source files. Asking several questions at once barely changes it. Up to 100 records run at the same time, so hundreds take seconds.

--max-cost 0.50 stops sending requests once the run has spent $0.50; it then exits with status 3 and names the line to resume from. To cap every run by default, run jevpipe config set max-cost 0.50 once; jevpipe config --help lists the other defaults you can set.

License

Apache-2.0. jevpipe is an independent project, not affiliated with or endorsed by TypeSafe AI; the answers come from Jev, TypeSafe AI's calibrated decision model, through OpenRouter. Building from source needs Rust (rustup picks the pinned toolchain) and PowerShell 7 for ./check.ps1.

Languages

Python

37.5%

Rust

32.1%

Shell

15.8%

PowerShell

14.5%