One contract for decisions.
A route you can explain.

Sys1 gives an agent or application one typed request for yes/no, choice, and score decisions. Start local, enable hosted Jev explicitly, embed the router in Bun, or connect a compatible HTTP service.

Sys1 0.9.0Node client · Bun router · loopback HTTPRead the evidence

Getting started

Pick the route that matches where your decision should run. Local Qwen is experimental; hosted Jev is opt-in and stays hosted-only when enabled.

Local, with Qwen

Install and select the experimental Qwen3 1.7B quality tier. The choice is persisted and is never silently replaced by a smaller installed model.

sys1 setup --tier quality
sys1 up
sys1 status

Hosted, with Jev

Set the credential in your environment, then enable Jev. Sys1 stores the activation flag, not the key, and a provider failure does not fall back to local inference.

export TYPESAFE_API_KEY=…
sys1 jev enable
sys1 up

Install the pinned release

Use the immutable GitHub Release artifact when you want the CLI without building from source. The native runtime is granted only for the named optional dependency.

npm install --global --allow-scripts=node-llama-cpp \
  https://github.com/hraness/sys1/releases/download/v0.9.0/hraness-sys1-0.9.0.tgz
sys1 doctor

Use sys1 setup --dry-run --json to inspect the local recommendation before downloading weights. Use sys1 doctor to inspect runtime, model store, routing, and daemon state.

Integration modes

The request and response contract stays the same while the lifecycle belongs to the mode you choose.

Portable client

Use the dependency-light @hraness/sys1/client entry from Node 24 or Bun. It validates requests, bounds response bodies, propagates cancellation, and makes one explicit HTTP attempt.

npm install --omit=optional \
  https://github.com/hraness/sys1/releases/download/v0.9.0/hraness-sys1-0.9.0.tgz
Client guide

Embedded Bun router

Use createRouter when your Bun application owns routing and local model lifecycle. It opens no port and exposes evaluate, fetch, and dispose.

Embedded guide

Loopback HTTP

Run sys1 up for a local daemon. The endpoint is POST /v1/systemone; discovery is GET /v1/models; liveness is GET /healthz.

HTTP reference
One typed requestSystem One
{
  "state": "The build failed after a dependency update.",
  "questions": {
    "action": {
      "type": "choice",
      "criteria": { "repair": "Fix it", "continue": "Keep going" }
    }
  }
}

Backends & models

Wire compatibility is a boundary, not a quality claim. Keep the model identity and routing policy visible in your application.

Hosted Jev 1.13.0
Provider-backed route for a hosted pilot. Enabling Jev selects hosted-only; the credential remains environment-only. Network-inclusive timing and provider capacity are outside local measurements.
Local Qwen3 1.7B
Selected by the quality setup tier and run through the pinned llama.cpp adapter. Local probability readout is experimental and must be evaluated on your own representative cases.
Local Qwen3 0.6B
Explicit compact diagnostic tier. It is not a memory-driven fallback and cannot silently replace the configured local model.
Compatible HTTP service
Register a service that implements POST /v1/systemone and GET /v1/models. Select it explicitly; adding a backend does not alter default routing.

Sys1 adapters return validated Jev-compatible answer shapes. They do not make generic local weights interchangeable with Jev, OpenJev, or another provider's calibration.

Evidence & research

Evaluations are dated studies under this evergreen guide. They preserve raw reports, workloads, runtime boundaries, and caveats so a new release does not turn one result into a promise.

The evaluation pages are evidence, not a default-selection guide. Read the current release behavior above, then inspect the fixture and raw report before making a quality or cost decision.

Start with one typed decision, then measure the route your application can own.

Get Sys1