The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Lurq listing page.
The verification layer for everything your agent installs.
Your coding agent picks npm packages from memory. lurq checks them against the live
registry, security advisories, shipped type definitions and real co-installs, before
anything lands in package.json.
Install · For AI agents · MCP tools · CLI · Autopilot · Docs
Real output, not a mockup. Your agent gets the same answers over MCP.
A model's knowledge of npm stops at its training cutoff. The registry doesn't.
lurq answers from evidence it can show: 47,238 packages scored, 4.2M versions tracked, 34,843 API
surfaces extracted from shipped code, and 27M co-install pairs, refreshed daily from npm, GitHub,
deps.dev and OSV. Every answer carries a dataAsOf timestamp.
Scope: the JavaScript/TypeScript ecosystem (npm).
One command, once per machine. Nothing to install first:
The setup wizard:
Restart your agent afterward. The free plan includes 1,000 hosted calls a month and never asks for a card.
Works with: Claude Code · Cursor · Windsurf · VS Code / GitHub Copilot · OpenAI Codex CLI · Gemini CLI · Google Antigravity · Kiro
Check it worked: ask your agent to "add zod to this project". It should call lurq's verify
before installing anything.
Claude Code plugin, no terminal needed:
One-click links for Cursor and VS Code are in the quickstart.
The package is published as lurqrun (the bare name was taken). The command is lurq:
If you are an AI coding agent and your user asked you to set up lurq, follow these steps.
1. Run setup.
In your shell it does not prompt: it prints a one-time sign-in link and exits right away. Give the user that link. When they sign in on this computer, lurq stores a key and connects every detected coding agent by itself. Never invent a key.
2. Or configure non-interactively when the user already has a key from lurq.run/dashboard/keys, or on a cloud, SSH or CI machine, where a sign-in link on this computer can't work:
| Agent | --agent |
|---|---|
| Claude Code | claude-code |
| Cursor | cursor |
| Windsurf | windsurf |
| VS Code / GitHub Copilot | copilot |
| OpenAI Codex CLI | codex |
| Gemini CLI | gemini-cli |
| Google Antigravity | antigravity |
| Kiro | kiro |
--agent all configures every detected agent. With --yes, the key can also come from LURQ_API_KEY.
Some checks need no key at all. npx lurqrun check-upgrade --upgrade <package>@<from>..<to> compares an
upgrade against the names your code actually imports, locally.
3. Tell the user to restart the agent, then confirm lurq appears in its MCP tool list.
Endpoint: https://api.lurq.run/mcp (streamable HTTP), header Authorization: Bearer <key>. The
field names differ by client:
Claude Code (~/.claude.json, under mcpServers) and VS Code (mcp.json, under servers):
Cursor (~/.cursor/mcp.json) and Kiro (~/.kiro/settings/mcp.json), under mcpServers:
Windsurf (~/.codeium/windsurf/mcp_config.json) and Antigravity (~/.gemini/config/mcp_config.json), under mcpServers:
Gemini CLI (~/.gemini/settings.json, under mcpServers). It must be httpUrl, because a
plain url is read as SSE:
Codex (~/.codex/config.toml). Headers go in an inline table:
| You are about to… | Call |
|---|---|
| Install or import a package | verify with the exact name, first |
| Choose between libraries | compare your candidates, then verify the pick |
| Commit to a set of packages | compat with the whole set in one call |
| Write code against a package whose API may have moved | usage, with the version you remember as knownVersion |
| Upgrade, or explain a break | diff_surface between the two versions |
| Add dependencies in a team codebase | policy, before choosing |
| Review a whole project | audit with names and versions from package.json and the lockfile |
| Wire an MCP server into an agent | mcp_surface, or mcp_stack for several |
| Not sure which tool fits | capabilities |
When lurq flags something, tell the user what it found and that it came from lurq. An unknown or
UNVERIFIABLE result means lurq could not check. It never means the package is clean.
Machine-readable docs: lurq.run/llms.txt · lurq.run/docs/llms-full.txt
Fifteen tools. Responses are compact to save tokens, and package answers carry dataAsOf.
Before installing
| Tool | What it answers |
|---|---|
verify | Is this package real, healthy and safe? Catches hallucinated and typosquatted names |
evaluate | The full evidence for one package: scores, advisories, usage guide, sandbox verdict |
compare | 2–5 packages ranked head-to-head |
policy | What your team's selection policy refuses, so the agent picks an allowed package first |
Across a stack
| Tool | What it answers |
|---|---|
compat | Will these packages install together? Returns the exact clashing peer or engine range |
audit | A whole project's outdated, deprecated and vulnerable dependencies and drifted MCP servers, in one call |
diagram | A reference-architecture Mermaid diagram for a stack |
Writing code
| Tool | What it answers |
|---|---|
usage | A version's real public API from its shipped .d.ts, and what changed since the version you know |
resolve_surface | What a version actually exports at runtime |
diff_surface | What a version bump adds, removes, renames or changes arity on |
MCP servers
| Tool | What it answers |
|---|---|
mcp_surface | A server's real tool contract, from a live tools/list handshake, including what each tool can write or reach |
mcp_drift | What a server changed between two versions |
mcp_stack | Do these servers collide in one agent's tool namespace? |
About lurq
| Tool | What it answers |
|---|---|
capabilities | Which lurq tool answers this situation |
report_outcome | What happened after a pick shipped, which feeds future rankings |
Inputs, outputs and verdict definitions for each: MCP tools reference.
The same index, scriptable. Every read command takes --json.
Full reference: CLI docs.
lurq keeps a repository's dependencies current, and names the code an upgrade breaks before it merges.
The check reads the symbol-level API diff between versions and matches it against what your code actually references. It needs no tests.
| Step | Runs on | Needs |
|---|---|---|
1. lurq upgrade-plan: drift, plus what each upgrade removes | your runner | lurq key |
2. lurq check-upgrade: matched against your source, with file:line | your runner | nothing |
3. lurq fix: applies what the package itself proves — renames, and the range bump in every manifest | your runner | nothing |
4. claude-code-action: migrates what a rule cannot, and runs your tests | your runner | Anthropic credential |
5. create-pull-request: one branch, one PR | your runner | GITHUB_TOKEN |
| 6. Outcomes post back: names and counts, never source | lurq | nothing |
Three modes, and editing is opt-in. The workflow starts in comment: it plans, checks, writes the
brief to the run summary, and changes nothing. fix opens a pull request containing only what the
package itself proves — renamed call sites, and the range bump in every manifest — so it needs no
Anthropic credential, and it is what a newly armed repo gets. pr is fix plus the agent, for the
changes a rule cannot make. Step 4 above is the only one that needs a model, so only pr does.
The dashboard setting governs repos that already installed the workflow: each run reads the mode from the plan response rather than from the committed file.
Cadence follows scope — weekly for the scopes that track breakage, since majors arrive slowly enough that a daily run mostly reports nothing new; daily for a repo set to advisories-only, because weekly can mean seven days sitting on a known CVE.
Trust model. lurq's GitHub App holds Contents: read-only and Actions: write. It can read your
manifests and start the workflow you committed — it cannot write a byte to your repository, change
this file, or set a repository variable. Every write is made by the workflow itself using your own
ephemeral GITHUB_TOKEN, bounded by the permissions: block in the file you control. The agent's allowlist is
Read,Edit,Write,Bash(<pkg-manager>:*), so it edits files but never touches version control.
Removing it is git rm .github/workflows/lurq-upgrade.yml.
Package names and versions, never your source code. audit receives the inventory your agent reads
locally, check-upgrade matches symbols against your code on your own runner, and outcomes report
names and counts only.
lurq mcp-scan is the one exception worth knowing: by default it records what your MCP servers
expose (tool names, descriptions and parameters, with secrets redacted) to your account, so it can
tell you what changed. --no-upload keeps the scan on your machine.
Readable: npm, GitHub, deps.dev and OSV, re-synced daily. Downloads, release cadence, maintenance, advisories, deprecations, license and bundle cost.
Executed: an isolated sandbox installs and imports package versions and records the results in a
compatibility matrix. compat reads those edges alongside declared peer and engine ranges, which is
why lurq can say whether a whole stack holds together.
Ranking is deterministic and public. No model sits in the scoring path:
Every weight lives in src/scoring/weights.ts and prints with lurq weights.
| Plan | Price | Hosted calls |
|---|---|---|
| Free | $0 | 1,000 a month |
| Pro | $15/mo | 10,000 a month |
| Team | $25/seat/mo, 3-seat minimum | 15,000 per seat, pooled |
| Business | from $1,000/mo | Uncapped, with SSO and audit export |
Past the limit, calls slow to 20 a day rather than stopping. The CLI run against your own database is never metered. Details: pricing.
Setup is safe to re-run: npx lurqrun again overwrites the previous entries.
It lists what it will remove and asks first (--yes skips the question).
| Agent | MCP config | Instructions |
|---|---|---|
| Claude Code | ~/.claude.json | ~/.claude/skills/lurq/SKILL.md |
| Cursor | ~/.cursor/mcp.json | none (tool descriptions carry the guidance) |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | ~/.codeium/windsurf/memories/global_rules.md |
| VS Code / Copilot | <VS Code user dir>/mcp.json | none |
| Codex | ~/.codex/config.toml | ~/.codex/AGENTS.md |
| Gemini CLI | ~/.gemini/settings.json | ~/.gemini/GEMINI.md |
| Antigravity | ~/.gemini/config/mcp_config.json | ~/.gemini/GEMINI.md |
| Kiro | ~/.kiro/settings/mcp.json | ~/.kiro/steering/lurq.md |
lurq logout only clears the CLI's stored key. A copy stays in each MCP entry until lurq uninstall
removes it, and the key keeps working until you revoke it in
the dashboard.
lurq runs against your own Postgres too: lurq serve (stdio MCP) or lurq serve-http (a
rate-limited HTTP service), with DATABASE_URL set. The published CLI installs only what hosted use
needs; the first self-hosting command prints the exact npm install line for the server packages.
Guide: self-hosting.
Inquiries, partnerships or proposals: jadenryu@lurq.run