System overview
How the pieces fit: a registry that stores, a runtime that executes, an aggregator that normalizes, and thin clients over one API.
The shape of it
Norien is a single REST API with three responsibilities behind it — the registry, the aggregator, and (locally) the runtime. Every client is thin.
CLI TypeScript SDK Python SDK Web app
│ │ │ │
└──────────────┴────────┬────────┴────────────────┘
│ one public REST API
┌─────────▼──────────┐
│ Norien registry │ (Fastify + Postgres)
│ ┌──────────────┐ │
│ │ Registry │ │ agents, tools, versions
│ ├──────────────┤ │
│ │ Aggregator │──┼──► market data · price feed
│ │ (/api/*) │ │ protocol data · explorer
│ └──────────────┘ │ repository data · chain node
└────────────────────┘
▲
│ reads manifests (never executes)
┌─────────┴──────────┐
│ Local runtime │ runs agents on your machine
│ supervisor │ tools · health · restarts
└────────────────────┘Request flow
A client calls the API. Registry endpoints serve Norien's own records straight from Postgres. Data endpoints (/api/*) go through the aggregator, which fans out to the external providers concurrently, caches each response, and merges them into one normalized envelope with sources and degraded attached. A provider outage degrades a response; it never fails the request.
Agent lifecycle
- Publish — an author's manifest is validated and stored as an immutable version in the registry.
- Install — a consumer resolves the agent and its declared tools; code is fetched and written locally.
- Run — the local supervisor launches it, injects tools and secrets, probes health, and restarts crashes.
- Observe — status and health stream back; logs follow with
norien logs -f.
Tool resolution
At install time each tool slug in the manifest is resolved against the registry to a specific version and written alongside the agent. At run time the supervisor wires those tools to the agent over the one stdin/stdout protocol, so adding a tool never changes the runtime.
Deployment
The web is three independently deployed apps sharing one design system — norien.live (marketing), app.norien.live (product), and docs.norien.live (this site) — all reading the same api.norien.live. The registry runs anywhere Node runs; with DATABASE_URL unset it uses an embedded Postgres.