The standard · DRAFT 0.1 · MIT

What an agentic identity is

What counts as an identity? Before an agent can answer “who am I,” something has to define what a valid answer looks like. The pillars supply the answers; this defines what a valid answer has to satisfy.

Most Nostr identity tooling models a human with a keypair. An agent needs more, and needs it solved the same way every time. This is a definition, not a framework: the six elements a conforming agentic identity solves for, plus a zero-dependency package that checks conformance.

npm i nostr-agentic-identity
Read the SPEC npm GitHub

Why a standard, not a library

An agent that acts in the world needs a key it holds itself, a presence it owns, a way to be seen and reached before it can act, and a face that survives without a server hosting it. Every implementation solves these, badly, differently, and incompatibly.

Naming the elements means an agentic identity means the same thing across implementations. The standard says what; you keep discretion over how, which relay, which storage, which login, which wallet. A human, in this model, is simply the well-behaved subset: same six elements, one of them wired to an email magic link instead of a wallet.

The six elements

§ElementWhat it means
1 Identity root The identity IS a Nostr keypair. The holder controls the nsec; the platform never custodies an owned key. The npub is the stable anchor.
2 Two tiers computed (platform-derived, inert) and owned (self-custodied, can act). The distinction is custody. The standard is silent on pricing.
3 Profile Handle + metadata as a signed kind-0 event. Owned identities bind a NIP-05 on a controlled domain.
4 Vhaiku A visualization computed deterministically from the key identity art is code, not media. No CDN, no PNG to rot.
5 Act-outward gate The single rule this standard enforces. An identity may act outward only when it is owned + self-custody + verified + funded.
6 Passwordless auth Magic link, QR bearer, or passkey. Never a stored password. Enumeration-safe, re-loaded per request so revocation is instant.

The gate

One predicate governs every outward action, sending an email, placing a call, publishing on someone's behalf. It is an authorization and abuse-control boundary: an identity nobody has vouched for can be seen and reached, but never acts.

import { canActOutward } from 'nostr-agentic-identity';

if (canActOutward(identity)) {
  // send the email / place the call / publish on its behalf
}

// owned + self-custody + verified + funded, strict ===
// a computed identity is structurally unable to pass

Enforce it non-forgeably. Evaluate the gate against an identity re-loaded from your store of record. Never against a caller-supplied or deserialized object. The capability-bearing fields are the whole security boundary.

Checking conformance

import { isConformant } from 'nostr-agentic-identity';

const { ok, issues } = isConformant(identity);
// ok: boolean
// issues: string[]: every structural rule the identity violates

// pure, no I/O, safe to run anywhere, including the browser

What ships in the package

ExportMaps toWhat
AgenticIdentity§1–§4the identity type
Tier, TIERS§2'computed' | 'owned'
Custody, CUSTODIES§2'platform' | 'self'
canActOutward(id)§5the gate, strict ===
isConformant(id)§1–§5structural checker → { ok, issues[] }
describeStandard()allthe six elements, as data

Zero runtime dependencies. ESM + CommonJS + .d.ts, plus a browser bundle. It does not mint keys, talk to relays, render vhaikus, or log anyone in, those are heavier implementations that live under the standard. This is the lightest possible peer: a checker, not a composer.

What this standard is NOT

Not a heavy dependencyHow you store, relay, sign, send and pay is yours. Conforming implementations inject their I/O.
Not an open anonymous mintOutward capability requires accountability established first. How you establish it is your choice.
Not custodyAn owned nsec is handed to the holder once and never retained.
Not a business modelSilent on pricing, packaging and tiering economics. Two conforming implementations may make opposite commercial choices.
Not human-vs-agentOne model. A human is the subset that logs in with a magic link instead of holding its own wallet.

Implementing it

The standard is implementable from the SPEC alone. Building blocks that already exist, if you want them:

nostr-nsec-seedphrasekeys, minting and seed derivation (§1)
nostr-crypto-utilsthe crypto primitives
nostr-auth-middlewarepasswordless auth (§6)
nostr-dm-magiclink-utilsmagic links over Nostr DMs (§6)

Visualization (§4) has no privileged implementation, any deterministic, code-derived generator conforms.

Read the full SPEC NSE guide