We already ran the install.
Say what you need. Get the package that works in your environment, with a receipt showing where and when it was verified. An empirical fact, not a plausible guess.
the problem
The environment
is the constraint.
A library never installs in isolation. It lands in an environment (a runtime version, a libc, an architecture) that already has opinions. Three things go wrong, in the order you hit them.
choosing
Which package even does this? You ask around, guess, pick the one with the most stars, and hope it's still the right call this year.
installing
It resolves on your laptop and dies in CI. Wrong wheel, missing headers.
A transitive dep that needs a runtime you don't have.
maintaining
Dependencies don't sit still. What worked last quarter breaks on the next minor version, and you find out in prod.
guess a packagewrong importbreaks on muslsearch the errortry an alternateguess again…
libregistry: one callone verified answerone receipt.
why it's different
A plausible guess,
or an empirical fact.
Claude, GPT and Cursor answer this from training data, frozen in time. pip and npm answer from a static 1:1 table. Neither one ran anything.
$ pip install postgres not the package you meant > "use psycopg2" # no version. no env. no proof.
- ·frozen at training time
- ·one answer, no confidence, no runner-up
- ·doesn't know your environment
- ·no evidence it ever ran
resolve "async postgres" @ py3.12/arm64
asyncpg 0.29.0 verified 42h ago
ranked · env-exact · footguns · receipt- empirically current, re-run on a schedule
- ranked candidates, scored
- resolved for your exact env cell
- carries a receipt: where and when it ran
Everyone hands you an answer. We hand you an answer with proof it was actually run: which environment, and how long ago.
how to use it
One call.
A verified answer.
Send an intent and your environment. The receipt above is this JSON, rendered. Agents call it inline.
$ curl -s libregistry.com/v1/resolve \ -H 'content-type: application/json' \ -d '{"intent":"async postgres", "env":{"python":"3.12","platform":"linux/arm64","libc":"glibc"}}'
{
"resolved": { "package":"asyncpg", "version":"0.29.0",
"import":"import asyncpg" },
"candidates": [ {"package":"asyncpg","match":0.91},
{"package":"psycopg","match":0.62} ],
"footguns": [ "pools don't survive fork; create after workers start" ],
"evidence": { "status":"verified_ok", "cell":"python:3.12-slim",
"age_hours":42, "grade":"harness" }
}Pass a partial env and the response tells you what it assumed.
Pass an impossible one and it returns unresolvable with the constraint that failed, never a plausible-looking guess.
what we already know
The answer doesn't
go stale.
A model answers from a snapshot taken once, at training time.
We re-run the harness on a schedule, so what you get back reflects the packages as they are now, in the environment you asked about. Not scraped. Not inferred. Executed.
- every cell
- not just the popular one
- version history
- we notice when a release breaks something
- failure reasons
- when it won't work, you get the why
Every resolve adds a row. Ask something we have never run and we run it, so the next person asking your question gets a better answer than you did. So do you, the next time.