who/jevq

A Jev-based filter sidecar for jq

Python

0

19 commits

updated Sep 26, 2026

See the code

See what people are saying

SourceMessageScoreDate

Jevq, A Jev filter sidecar for jq

1

Sep 26, 2026

README

jevq

CI

jq | jevq | jq. jq handles structure; jevq reads one JSON value per line from stdin, asks Jev (a TypeSafe System One model) a yes/no question about each, and passes through the yeses. QUESTION is a yes/no claim about the current value, not a search query.

Install

uv tool install --editable .
export TYPESAFE_API_KEY=...

scripts/reinstall-cli.sh forces a rebuild (--dry-run, --no-editable, --skip-smoke).

Options

jevq [options] QUESTION reads JSONL on stdin. QUESTION is required unless --pass.

FlagDefaultDescription
QUESTIONnoneYes/no claim about each value
-t N, --threshold N0.5 ($JEV_THRESHOLD)Keep values scoring at least N
-f a,b, --fields a,bwhole valueSend only these keys; output stays the full value
--scoreoffEmit every value as {"score":<noul>,"value":<original>}
--passoffEmit every value unchanged; no API call, no key
--model NAMEjev-1.13.0 ($JEV_MODEL)Model to ask
-v, --verboseoffPrint counts and the answering model to stderr
-h, --helpShow help and exit

--score and --pass are mutually exclusive. A flag beats its env var.

Environment

VariableDefaultDescription
TYPESAFE_API_KEYnoneAPI key; required except with --pass
JEV_MODELjev-1.13.0Default model
JEV_BASE_URLhttps://api.typesafe.ai/v1/systemoneAPI base URL
JEV_THRESHOLD0.5Default threshold

Use cases

jq -c '.[] | select(.status == "open")' samples/tickets.json |
  jevq "the customer is asking for a refund" |
  jq -c '{id, subject}'

Open tickets asking for money back, printed as {id, subject}.

jq -c 'select(.level == "error")' samples/app.ndjson |
  jevq "this error is caused by a network timeout, not a bug in our code"

Error log lines that look like a timeout rather than a code bug.

gh api 'repos/itchyny/gojq/issues?state=open&per_page=100' |
  jq -c '.[] | select(.pull_request | not) | {number, title, body}' |
  jevq --score "reports a crash or wrong output, not a feature request" |
  jq -rs 'sort_by(-.score) | .[:5][] | .value | "\(.number)\t\(.title)"'

The five most bug-like open issues, as number<TAB>title.

More examples: docs/examples.md

Full contract (output rules, exit codes, HTTP, retries): docs/jevq.md

Testing

uv run pytest -q
bash tests/samples/run.sh

JEVQ_LIVE=1 TYPESAFE_API_KEY=... bash tests/samples/run.sh runs the sample pipes live.

Not supported in v1: --path, a jev() builtin, concurrency, caching.

Contributors

who

19 commits

who/jevq

A Jev-based filter sidecar for jq

Python

0

19 commits

updated Sep 26, 2026

See the code

See what people are saying

SourceMessageScoreDate

Jevq, A Jev filter sidecar for jq

1

Sep 26, 2026

README

jevq

CI

jq | jevq | jq. jq handles structure; jevq reads one JSON value per line from stdin, asks Jev (a TypeSafe System One model) a yes/no question about each, and passes through the yeses. QUESTION is a yes/no claim about the current value, not a search query.

Install

uv tool install --editable .
export TYPESAFE_API_KEY=...

scripts/reinstall-cli.sh forces a rebuild (--dry-run, --no-editable, --skip-smoke).

Options

jevq [options] QUESTION reads JSONL on stdin. QUESTION is required unless --pass.

FlagDefaultDescription
QUESTIONnoneYes/no claim about each value
-t N, --threshold N0.5 ($JEV_THRESHOLD)Keep values scoring at least N
-f a,b, --fields a,bwhole valueSend only these keys; output stays the full value
--scoreoffEmit every value as {"score":<noul>,"value":<original>}
--passoffEmit every value unchanged; no API call, no key
--model NAMEjev-1.13.0 ($JEV_MODEL)Model to ask
-v, --verboseoffPrint counts and the answering model to stderr
-h, --helpShow help and exit

--score and --pass are mutually exclusive. A flag beats its env var.

Environment

VariableDefaultDescription
TYPESAFE_API_KEYnoneAPI key; required except with --pass
JEV_MODELjev-1.13.0Default model
JEV_BASE_URLhttps://api.typesafe.ai/v1/systemoneAPI base URL
JEV_THRESHOLD0.5Default threshold

Use cases

jq -c '.[] | select(.status == "open")' samples/tickets.json |
  jevq "the customer is asking for a refund" |
  jq -c '{id, subject}'

Open tickets asking for money back, printed as {id, subject}.

jq -c 'select(.level == "error")' samples/app.ndjson |
  jevq "this error is caused by a network timeout, not a bug in our code"

Error log lines that look like a timeout rather than a code bug.

gh api 'repos/itchyny/gojq/issues?state=open&per_page=100' |
  jq -c '.[] | select(.pull_request | not) | {number, title, body}' |
  jevq --score "reports a crash or wrong output, not a feature request" |
  jq -rs 'sort_by(-.score) | .[:5][] | .value | "\(.number)\t\(.title)"'

The five most bug-like open issues, as number<TAB>title.

More examples: docs/examples.md

Full contract (output rules, exit codes, HTTP, retries): docs/jevq.md

Testing

uv run pytest -q
bash tests/samples/run.sh

JEVQ_LIVE=1 TYPESAFE_API_KEY=... bash tests/samples/run.sh runs the sample pipes live.

Not supported in v1: --path, a jev() builtin, concurrency, caching.

Contributors

who

19 commits

Languages

Python

69.5%

Shell

30.5%