jev-feels
Ruby gem making semantic checks ordinary methods: feels?, decide and score on model fields, with Rails validations.
Overview
jev-feels turns Jev questions into ordinary Ruby. An app defines its vocabulary with Jev.define: a symbol with a description is a yes/no check (for example :urgent), a definition with choices becomes a decide question with up to 255 options, and a scale with 2 to 10 levels becomes a score. Models then call email.feels?(:urgent), email.decide(:support_team) or score(:severity) on a field.
In Rails, validates_feeling adds semantic validations with the usual options (allow_nil, allow_blank, if, unless, on, message and at_least), and skipped checks make no HTTP call. Plain Ruby objects can include Jev::Model and bind fields, and string methods are available through an opt-in refinement or a global patch. Configuration takes a JEV_API_KEY.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this field feel urgent (requires immediate attention)? | — |
| Choice | Which support team should handle this? | billing · technical · sales · other |
| Score | How severe is this? | — |
How it works
- Define vocabulary with Jev.define
- Bind fields on models with feels, decide or validates_feeling
- Call methods or run validations
- Branch or fail validation on the result
Strengths
- Semantic checks read like ordinary Ruby
- Rails validation integration
- No HTTP call when validation is skipped
Caveats
- Community gem; maturity not stated
- Each check is a network call
Getting started
Add `gem "jev-feels"`, configure `Jev.configure { |c| c.api_key = ENV.fetch("JEV_API_KEY") }`, and define vocabulary with Jev.define.At a glance
- Type
- Library
- Status
- beta
- Language
- Ruby
- Runtime
- Rails / plain Ruby
- Has code
- yes
Use cases and integrations
How curated lists describe it
Semantic decisions as ordinary Ruby #feels?, #decide, #score, Rails validations…
wh000wh000/awesome-jev-liveSemantic decisions as ordinary Ruby — feels?, decide, score, Rails validations and pattern matching powered by Jev.
hellogumbo/awesome-jevRuby and Rails: `email.feels?(:urgent)` as a named question on a field, with `decide` and `score` beside it and validations that use them.
MrJev/awesome-jev
Frequently asked questions
What does feels? do?
Asks Jev a yes/no question defined in your vocabulary about a field.
Can I validate Rails models?
Yes, with validates_feeling and standard validation options.
Does it patch String?
Only if you opt in with a refinement or require the string extension.
Related projects
Small Go agent-loop library with an optional goodall/typesafe package that uses Jev as a tool or hook beside chat models.
LibrarybetaGoAx, a DSPy-style multi-language LLM framework, listed with a native TypeSafe provider for Boolean, Choice, Score and raw Jev questions.
PluginproductionTypeScriptEffect TypeScript library whose @effect/ai-typesafe package maps classify, probability and rating operations to Jev questions.
ProjectproductionTypeScriptPHP monorepo whose Polyglot module adds a TypeSafe driver for typed Noul, Choice and Score decisions alongside LLM inference.
ProjectproductionPHPElixir library for unified LLM calls across providers, with an evaluate interface that calls Jev via TypeSafe or OpenRouter.
ProjectproductionElixirSelf-hosted multi-tenant AI agent platform listed as including optional TypeSafe client tools for classification, scoring and yes/no.
LibraryproductionPython