The published binary is llm-abi. Node.js 22+ is required.
npx llm-abi check schema.json
npx llm-abi check user.ts --type User
npx llm-abi compile schema.json --target anthropic
npx llm-abi explain schema.json --target gemini
npx llm-abi analyze schema.json
npx llm-abi request request.json
npx llm-abi doctor
npx llm-abi local doctor
npx llm-abi local check user.ts --type User
npx llm-abi local probe --suite smoke
npx llm-abi local matrix schema.json
npx llm-abi local lock schema.json
npx llm-abi local diff llm-abi.local.lock.json
npx llm-abi local diff llm-abi.local.lock.json schema.json
| Command | Purpose |
|---|---|
check |
Compatibility matrix for every built-in target |
compile |
Emit the provider schema |
explain |
Print diagnostics and loss for one target |
analyze |
Node counts plus conservative size/token hint |
request |
Request compatibility for one provider payload |
doctor |
Version, runtime, and profile revisions |
local doctor |
Loopback GET metadata for loaded models. Never generates |
local probe |
Explicit smoke or --suite full keyword inference. Synthetic fixtures only |
local check |
Static checkDeployment() for one loaded model. No generation |
local matrix |
Static compatibility for every loaded model. --probe is optional |
local lock |
Snapshot fingerprints without secrets or absolute paths |
local diff |
Compare two locks, or a lock against the current loaded deployment |
| Flag | Meaning |
|---|---|
--target |
Profile id or alias (openai, anthropic, gemini, deepseek, xai, qwen = Model Studio, mistral, openrouter, mcp, llamacpp, ollama, vllm, sglang) |
--strict |
Fail when the schema is unsupported |
--type |
Type or interface name when the input is TypeScript. Also used by local check, probe, matrix, lock, and diff |
--json |
Machine-readable output |
--ci |
Exit 1 when any target is unsupported |
--url |
Explicit runtime base URL for local doctor / local probe. Non-loopback is labeled remote |
--runtime |
Hint for local discovery: lmstudio, ollama, llamacpp, vllm, sglang |
--model |
Model id for local probe. May cause the runtime to load that model |
--suite |
local probe suite: smoke (default) or full |
llm-abi request reads a JSON object:
{
"provider": "openai",
"model": "gpt-5.6-terra",
"endpoint": "chat-completions",
"tools": true
}
--ci exits 1 when that request is unsupported.
llm-abi doctor --json is intended for bug reports. Doctor also lists request, runtime, and model profiles. It does not talk to localhost.
llm-abi local doctor --json starts with schemaVersion: 1. Non-loopback --url is labeled remote. Default discovery does not leave 127.0.0.1. local probe without --url uses the same loopback list as local doctor. --model may cause the runtime to load that model; omit it to probe only what is already loaded. local matrix and local lock are loaded-models-only unless --model is set. Probe success does not upgrade static compatibility. Locks omit URLs, secrets, and absolute paths. vLLM and SGLang need --url and usually --runtime vllm or --runtime sglang; they are not scanned on the default loopback ports.
GitHub Action
The repository root contains a reusable JavaScript Action that runs llm-abi check --ci --json for
each selected schema. By default it checks pull request changes matching **/*.schema.json or
**/schema.json.
- uses: actions/checkout@v7
with:
fetch-depth: 0
persist-credentials: false
- uses: jammaru/llm-abi@v0.5.0
with:
schema-files: "schemas/**/*.json"
comment: "true"
Pin the Action to a release tag (current: @v0.5.0). Do not use @latest. Set pull-requests: write on the job
or workflow when comment is enabled. The comment is optional; the Action always writes the
compatibility table to the job summary. Repeated runs update the same bot-authored comment.
Action outputs are conclusion, checked-files, unsupported-count, results-json, and
comment-url. Conclusions are passed, unsupported, skipped, or error.