jev-guard
Type-safe is not the same as correct.
Jev-style forced-choice models are being wired in as guardrails that decide whether a tool call runs. A guardrail that returns a confidently wrong answer with a perfectly valid type still fails open. jev-guard finds the code patterns where that happens.
- Nine rules, from a dangerous tool with no guardrail in front of it to a forced-choice question with no abstain option.
- Build-time only: reads your Python source, never calls the model, never touches the network.
- GitHub Action, pre-commit hook and SARIF output for the Security tab.
Know the limit
Not a guardrail and not a runtime control. It tells you where your guardrail code can fail open; you still validate thresholds against your own adversarial data.
$ pip install jevg
$ jev-guard scan src/ --fail-on HIGH
agent.py:5 [HIGH] JG001 Jev guardrail gates actions with no configured confidence threshold
↳ Set an explicit threshold and escalate below it.
agent.py:11 [MEDIUM] JG004 Untrusted content flows into a Jev guardrail's state
↳ Separate and sanitize untrusted state.