querius
v0.1.3
Published
Web search → extract → answer (DuckDuckGo + Readability + OpenRouter/OpenAI-compatible).
Downloads
383
Maintainers
Readme
querius
querius is a Node.js CLI + library that:
- searches DuckDuckGo (HTML endpoint)
- extracts readable text from top results (Readability + JSDOM)
- optionally calls an OpenAI-compatible chat model (OpenAI or OpenRouter)
Install
npm i queriusOr run without installing:
npx querius "your question"Quickstart (CLI)
1) No LLM (just search + extract)
Useful for debugging sources/context.
npx querius "what is the capital of france?" --no-llm2) With OpenAI
export OPENAI_API_KEY="YOUR_OPENAI_KEY"
npx querius "what is the capital of france?" --provider openai --model gpt-4o-mini3) With OpenRouter
You must use a real OpenRouter key (often looks like sk-or-v1-...).
export OPENROUTER_API_KEY="YOUR_OPENROUTER_KEY"
npx querius "what is the capital of france?" --provider openrouter --model openai/gpt-4o-miniCLI options
querius "your question" [options]--provider <openrouter|openai>: which API to use--model <name>: model name (provider-specific)--api-key <key>: API key override (recommended: use env vars instead)--max-results <n>: how many search results to use (default3)--concurrency <n>: parallel fetch/extraction (default3)--use-playwright: enable JS-render fallback (slower; helps for JS-heavy sites)--no-llm: skip model call; print context preview only--json: print JSON output (answer + sources + extracted context)-h, --help: help
Example: JSON output
OPENAI_API_KEY="..." npx querius "capital of france" --provider openai --jsonEnvironment variables
OpenRouter
OPENROUTER_API_KEY(required for OpenRouter)OPENROUTER_MODEL(optional default model)OPENROUTER_BASE_URL(optional; defaulthttps://openrouter.ai/api/v1)OPENROUTER_HTTP_REFERER(optional)OPENROUTER_X_TITLE(optional; defaultquerius)
OpenAI
OPENAI_API_KEY(required for OpenAI)OPENAI_MODEL(optional default model)OPENAI_BASE_URL(optional; defaulthttps://api.openai.com/v1)
Generic (optional)
MODEL(fallback model name)PROVIDER/QUERIUS_PROVIDER(fallback provider)
Notes
- The CLI loads
.envautomatically (usesdotenv). - The library does not load
.env(pass keys viaprocess.envor parameters).
Library usage (in your code)
ESM (recommended) — .mjs or "type": "module"
import { runQuerIus } from "querius";
const out = await runQuerIus({
query: "What is the capital of France?",
provider: "openai", // or "openrouter"
model: "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
});
console.log(out.error || out.answer);CommonJS project (require) — use dynamic import
If your project is CommonJS, don’t use top-level await + require() together.
(async () => {
const { runQuerIus } = await import("querius");
const out = await runQuerIus({
query: "What is the capital of France?",
provider: "openai",
model: "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
});
console.log(out.error || out.answer);
})();What runQuerIus() returns
{
query: string,
results: Array<{ title: string, url: string, content: string }>,
context: string,
answer: string | null,
error: string | null
}Tips / troubleshooting
“Missing Authentication header”
This almost always means:
- you chose
provider: "openrouter"but did not provide a realOPENROUTER_API_KEY, or - you used an OpenAI key in
OPENROUTER_API_KEY(OpenRouter requires its own key)
Fix: set the correct key for the provider you’re using.
Node warning: MODULE_TYPELESS_PACKAGE_JSON
Your file uses ESM syntax (import, top-level await) but your project doesn’t specify module type. Fix:
- add
"type": "module"in your project’spackage.json, or - rename your script to
.mjs
Could not parse CSS stylesheet
This is noisy output from jsdom on some pages. It usually doesn’t break extraction; safe to ignore.
Security best practices
- Never hardcode API keys in code.
- Use environment variables (
OPENAI_API_KEY,OPENROUTER_API_KEY) or.envlocally. - If you ever pasted a key into logs/chat, rotate/revoke it.
