@lucasschirm/devinp
v0.1.5
Published
Pretty pricing table for Devin models, powered by `devin models list`
Maintainers
Readme
devinp
Pretty pricing table for Devin models — reads live prices
from devin models list, joins BenchLM coding scores, and renders a
sorted table in your terminal or a web page.
Thinking-effort variants that share a price (low, medium, high, xhigh,
max, …) are collapsed into one row, so you see one row per price tier — e.g.
Claude Opus 5 and Claude Opus 5 Fast instead of ten near-identical rows.
Install
npm i -g @lucasschirm/devinpThe package ships as a self-contained bundle — no dependencies are installed.
Requirements
- Node.js ≥ 18
- The
devinCLI installed and signed in — prices come from your account viadevin models list --format json. Ifdevinis missing or not authenticated,devinpexits with an error (use--sourcefor a saved snapshot).
When devin fails or truncates
- Prices are captured through a temp file in
os.tmpdir()—devin's interactive CLI can truncate a pipe stream mid-write, sodevinppointsdevin's stdout at a real file instead. The temp file is always removed after the run. - If
devin's output is cut off mid-stream,devinprepairs the document, prints a warning, and renders the partial table. - If the output cannot be recovered,
devinpreports a diagnostic with the size and tail of whatdevinwrote, and suggests re-running or saving the output manually:devin models list --format json > models.json, thendevinp --source models.json.
Usage
devinp # table sorted by best value (Bench % ÷ output price)
devinp -o=input # cheapest input price first
devinp -o=cached # cheapest cached-input price first
devinp -o=output # cheapest output price first
devinp -o=bench # highest BenchLM coding score first
devinp -o=value # default: best Bench score per output dollar
devinp -g=family # section the table by model family
devinp -g=price # section by identical price tier
devinp -g=size # section by context window size
devinp --web # serve an interactive page on http://127.0.0.1:4321
devinp --web --port 8080 # pick a port
devinp --source models.json # read a saved `devin models list --format json`
devinp --json # emit normalized rows as JSONReading the table
│ # │ Model │ Ctx │ Input │ Cached │ Output │ Bench % │ Value │ Sidekick i/c/o │
│ 1 │ Gemini 3.8 Flash│ 1.05M │ $0.75 │ $0.08 │ $3.75 │ 64.1% │ 17.10 │ — │- Prices are USD per 1M tokens; columns are heat-colored green → red.
- Value =
Bench % ÷ output $/1M— the score you buy per output dollar. Free models always show∞and sort first under-o=bench/-o=value, even without a Bench score. Paid models without a score show—and sort last. - Markers:
β= beta,●= new, magenta name = free.Sidekickshows the partner-model pricing for Fusion rows. - Colors disable automatically when piping;
NO_COLOR/FORCE_COLORare respected.
BenchLM scores
Scores live in data/benchlm-scores.json and ship with the package. To refresh
them (maintainers, manual — not automated):
npm run update-benchlmThis fetches the BenchLM leaderboard API
(api/data/leaderboard?category=coding&limit=200 — the limit is raised from
the default 50 so the long tail of the board is included) and writes
data/benchlm-scores.json. Model names are
matched to Devin family slugs order-insensitively; names that still don't map
are reported under unmatched — add entries to MANUAL_MAP in
scripts/update-benchlm.js to fix them.
Development
npm install # installs dev deps (esbuild, oclif, fastify, ansis)
npm run build # bundle src/ → bin/run.js + bin/command.js (self-contained)
npm run dev # build + run
npm test # node --test against sample/models.jsonbin/ is generated and gitignored; prepare/prepack build it automatically
so npm publish, git-URL installs, and npm link always ship a fresh bundle.
Publishing
.github/workflows/publish.yml bumps the patch version and publishes with
npm trusted publishing (OIDC —
no NPM_TOKEN). Requires the trusted publisher to be configured on npmjs.com:
repository lucasschirm/devinp, workflow publish.yml.
License
MIT
