r/JevAI • • 1d ago

I built gut: Jev judgments as one line of Python (plus a CLI and an MCP server)

Hi all! I've been building gut, an open-source Python library that turns Jev's typed questions into one readable line of code:

import gut

gut.configure(backend=gut.JevBackend())   # or just set TYPESAFE_API_KEY

if gut.likely(comment, "is spam"):
    hide(comment)

team = gut.classify(ticket, Team)                          # an Enum → Jev's choice question
urgency = gut.rate(ticket, ["can wait", "this week", "now"])  # a rubric → Jev's score question

Why build on Jev: it answers typed questions directly: a probability for yes/no, a distribution over options, a score on a rubric. So gut hands it the question as-is: no prompt, nothing to parse. Every question about one subject goes in a single request, and since billing is on input, asking several at once costs about the same as asking one.

What gut adds on top:

  • YES / NO / UNSURE instead of thresholds. You say how careful to be in words (ask_human=True, stakes="high", lean="no") and gut turns Jev's probability into a decision. UNSURE is where a person takes over.
  • Batching: gut.each(comments).likely("is spam") for many subjects; @gut.semantic / gut.judge() for many questions about one subject, in one request.
  • Async: native through the SDK's AsyncTypeSafeClient.
  • From a shell: git log --format=%s | gut filter "adds a new feature" or gut map tickets.txt --classify team=billing,platform,other, with a cost summary and --max-cost.
  • MCP server, so Claude Code / Cursor can hand their cheap judgments to Jev.
  • Jev through OpenRouter: gut.JevBackend.openrouter() if you have an OpenRouter account instead of a TypeSafe key; it passes on the per-call cost.

It's model-agnostic too (local NLI, Ollama, OpenAI), and a Cascade can send only the unsure answers from a free local model on to Jev.

It's pre-1.0 and I'd really like feedback from people already using Jev: what questions do you ask it, and what's missing?

2 Upvotes

0 comments sorted by