About Norien

Infrastructure for autonomous agents: a registry to publish them, a marketplace for the tools they use, a supervisor to run them, and one API for the data they read.

Agents are software that other software depends on, and software like that needs the same infrastructure any package ecosystem needs: somewhere to publish it, a way to pin a version, a resolver for its dependencies, and something to run it.

Norien is that, applied to agents. An agent.json declares a runtime, an entrypoint, the tools it needs, the permissions it wants, and the environment it expects. The registry validates that manifest, resolves every declared tool against a real catalogue, and records an immutable version. A supervisor on your machine runs it, streams its logs, probes its health, and restarts it when it crashes.

The tools are the interesting part

Most agent frameworks bake capabilities into the framework. Norien treats a tool as a published record with a schema on both ends — the runtime knows the protocol, not the tools. Adding a capability to the ecosystem never means editing the thing that runs it.

And the data

Agents that act on the world need to read it. Six external providers are normalized behind one API, with per-field ownership decided in advance and provenance attached to every response. A caller cannot tell which service answered, which is the point — and when one of them is down, the response says so rather than quietly substituting.

Everything runs locally today. There is no hosted registry yet, no accounts, and no billing. What exists, works — and the pages in this app read from it live rather than from fixtures.

Principles

Never fabricate

If a provider has no answer, the field is absent and the response says which source was missing. No placeholder value ever stands in for a real one.

Partial beats broken

One failing provider degrades a response rather than failing it. The caller is told what is missing instead of being handed an error or a half-truth.

One way to do a thing

Timeout, retry, caching, and logging live in one outbound client. Binary resolution lives in one module. Duplicated logic is how behaviour drifts.

The terminal is a first-class client

Every command emits JSON on request, stdout stays pipeable, and exit codes are stable. Anything the UI can do, a script can do.