{"slug": "show-hn-grev-thinking-coreutils-with-jev", "title": "Show HN: Grev - Thinking Coreutils with Jev", "summary": "TypeSafe released Grev, a suite of Unix-style filters that run on its Jev models to answer typed questions with calibrated probabilities instead of generating text, keeping the input as the output. The 14 tools include grev (grep), isv (test), tagv (awk), rank (sort), pickv (grep -o), uniqv (uniq), cutv (cut), seek (find), lookv (look/git bisect) and probev (awk), with packages for deb, rpm, apk, Arch, Linux, macOS, FreeBSD and Windows. TypeSafe says a few thousand lines cost fractions of a cent and take seconds, and the tools support flags for parallelism (-J N/-Jmax), per-run budgets (--max-cost), progress with projected cost (-p) and quote confirmation (-Q).", "body_md": "Unix filters that ask questions instead of matching patterns.\n\n``` bash\n$ cat examples/menu.txt\nchicken tikka masala\nfresh fruit salad\nspaghetti carbonara\ntofu stir fry with rice\n\n$ grev 'is a vegan meal' examples/menu.txt\nfresh fruit salad\ntofu stir fry with rice\n```\n\nThe tools run on [TypeSafe's](https://typesafe.ai) Jev models, which answer typed questions with\ncalibrated probabilities instead of generating text. That's why these tools behave like `grep`,\n`sort` or `cut`: **output is always your input**. Labels and scores appear only as explicit\ncolumns. A few thousand lines cost fractions of a cent and take seconds.\n\n```\n# Search logs by meaning\ngrev --about 'nginx error log' 'says the upstream server timed out' examples/nginx-error.log\njournalctl -fu myapp | grev --line-buffered --about 'application log' 'shows the process crashed'\ngit log --oneline | grev --about 'commit messages' 'fixes a bug'\n\n# Guard a commit: exit 0 means yes\ngit diff --cached | isv 'adds a secret or credential' && echo 'refusing to commit' && exit 1\n\n# Label, route, rank\ntagv billing technical feature-request other < examples/tickets.txt\ntagv --split tickets/ billing technical other < examples/tickets.txt\nrank -s -m3 -L 'not urgent|soon|urgent|critical' 'How urgent is the ticket {}?' examples/tickets.txt\n\n# Find, cut, dedupe, reflow\nman tar | pickv 'how do I list the contents of an archive?'\ncutv 'email address' 'phone number' < examples/users.csv\nuniqv -c 'Are {1} and {2} the same company?' examples/companies.txt\nunwrap examples/memo.txt\nseek --verify 'the spend ledger' .\n\n# Bisect by meaning: the first health check that reports a failure (3 requests for 600 lines)\nlookv -n --about 'health checks, one per minute' 'reports a failing dependency' examples/lookv-health.log\n\n# Probabilities as columns, for awk\nprobev -H -q 'refund: asks for money back' -q 'angry: the writer is angry' < examples/tickets.txt\n```\n\n| tool | like | does | \n|---|---|---|\n| [`grev`](https://github.com/aurorainfra/grev/blob/main/docs/tools/grev.md) | grep | print the records the model says yes to | \n| [`isv`](https://github.com/aurorainfra/grev/blob/main/docs/tools/isv.md) | test | answer a yes/no question about the whole input with the exit status | \n| [`oneof`](https://github.com/aurorainfra/grev/blob/main/docs/tools/oneof.md) | case | print which label fits the whole input | \n| [`tagv`](https://github.com/aurorainfra/grev/blob/main/docs/tools/tagv.md) | awk | label every record; `--split DIR` routes records into files | \n| [`rank`](https://github.com/aurorainfra/grev/blob/main/docs/tools/rank.md) | sort | sort records by how well they fit, or by ordered levels | \n| [`pickv`](https://github.com/aurorainfra/grev/blob/main/docs/tools/pickv.md) | grep -o | the one line or regex match that best answers a question | \n| [`uniqv`](https://github.com/aurorainfra/grev/blob/main/docs/tools/uniqv.md) | uniq | collapse adjacent records that mean the same thing | \n| [`unwrap`](https://github.com/aurorainfra/grev/blob/main/docs/tools/unwrap.md) | fmt | re-join hard-wrapped lines | \n| [`seg`](https://github.com/aurorainfra/grev/blob/main/docs/tools/seg.md) | csplit | split a stream into topic segments | \n| [`cutv`](https://github.com/aurorainfra/grev/blob/main/docs/tools/cutv.md) | cut | cut the CSV/TSV columns that match a description | \n| [`seek`](https://github.com/aurorainfra/grev/blob/main/docs/tools/seek.md) | find | walk a directory tree to what a description names | \n| [`lookv`](https://github.com/aurorainfra/grev/blob/main/docs/tools/lookv.md) | look, git bisect | find where an ordered input's answer flips, in a few rounds | \n| [`probev`](https://github.com/aurorainfra/grev/blob/main/docs/tools/probev.md) | awk | print per-record probability columns | \n| [`jev`](https://github.com/aurorainfra/grev/blob/main/docs/tools/jev.md) | — | config, API key, spend, models, one-off and raw requests | \n\nEvery tool has `--help` and a man page. The common flags:\n\n| flag | meaning | \n|---|---|\n| `-p` | progress, with live and projected cost | \n| `-Q` | show the quote and ask first | \n| `-J N` /`-Jmax` | parallelism | \n| `--max-cost` | per-run budget | \n\n- **Packages:** deb, rpm, apk, Arch packages and archives for Linux, macOS, FreeBSD and\nWindows are on the[releases page](https://github.com/aurorainfra/grev/releases) .`packaging/arch/PKGBUILD` builds from source.\n- **With Go:**`go install github.com/aurorainfra/grev/cmd/...@latest`\n- **From source:**`make && sudo make install` , which also installs the man pages and bash/zsh/fish\ncompletions.\n\nEverything lives in one file, `~/.grevconfig`, in git-config style; the full reference is\n[`docs/CONFIG.md`](https://github.com/aurorainfra/grev/blob/main/docs/CONFIG.md) (or `man grevconfig`). `jev key set` puts your\n[API key](https://console.typesafe.ai/keys) there with mode 0600:\n\n```\n[api]\n\tkey = tsk-…                           ; written by `jev key set`\n[defaults]\n\tprogress = auto                       ; the -p overlay whenever stderr is a terminal\n\tjobs = max\n\tconfirmAbove = 0.25                   ; ask before runs quoted above $0.25 (built-in: $1)\n[limits]\n\tdaily = 5                             ; spend caps in USD, across all tools\n\tmonthly = 50\n[tool \"grev\"]\n\tabout = application logs              ; per-tool defaults for any long option,\n\tthreshold = 0.7                       ; e.g. how sure the model must be to say yes\n```\n\nThresholds are set per tool because `-t` means different things: P(yes) in `grev`, the minimum\nconfidence of a choice in `tagv`, a path score in `seek`.\n\nManage it with `jev config set limits.daily 5` or `jev config list --show-origin`, and check\nyour spend with `jev spend`. Command-line flags beat environment variables, which beat the\nconfig. In CI, `TYPESAFE_API_KEY` supplies the key without any file.\n\nJev charges $0.042 per million input tokens, and output is free. Grepping a 4,000-line source file costs about $0.008.\n\nNothing big runs by surprise:\n\n- Any run quoted above `confirmAbove` ($1 unless configured) asks first. Without a terminal, it\nrefuses.\n- `--max-cost` and the daily/monthly caps stop a run before it goes over.\n- Closing the output pipe (`| head` ) stops the spending.\n\n- **[`docs/DESIGN.md`](https://github.com/aurorainfra/grev/blob/main/docs/DESIGN.md):** how the tools phrase questions and why, the evals,\nflag conventions and the cost model.\n- **[`docs/CONFIG.md`](https://github.com/aurorainfra/grev/blob/main/docs/CONFIG.md):** configuration in depth.\n- **Man pages:**`grev-tools(7)` ,`grevconfig(5)` , and one per tool.\n\nLicensed under either of [Apache License, Version 2.0](https://github.com/aurorainfra/grev/blob/main/LICENSE-APACHE) or\n[MIT license](https://github.com/aurorainfra/grev/blob/main/LICENSE-MIT), at your option.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.", "url": "https://wpnews.pro/news/show-hn-grev-thinking-coreutils-with-jev", "canonical_source": "https://github.com/aurorainfra/grev", "published_at": "2026-09-24 21:46:21+00:00", "updated_at": "2026-09-24 21:59:31.757679+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "natural-language-processing", "ai-products"], "entities": ["TypeSafe", "Jev", "Grev", "grev", "isv", "tagv", "rank", "pickv"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-grev-thinking-coreutils-with-jev", "markdown": "https://wpnews.pro/news/show-hn-grev-thinking-coreutils-with-jev.md", "text": "https://wpnews.pro/news/show-hn-grev-thinking-coreutils-with-jev.txt", "jsonld": "https://wpnews.pro/news/show-hn-grev-thinking-coreutils-with-jev.jsonld"}}