You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The NANDA Index is the authoritative switchboard between catalogs for AI agents. It stores one IndexRecord per organization, pointing to where that org's agents live. Think of it as the ICANN of AI agents — it does not host agents itself, it tells you where to find them.
How it fits in the resolution flow
Caller → NANDA Index GET /api/v1/resolve?locator=urn:ai:nasiko.com:ankit
← { registry_url } "agents for nasiko.com live at https://registry.nasiko.com"
Caller → Registry Server GET https://registry.nasiko.com/agents/ankit
← { url } "ankit's facts document is at https://nasiko.com/agents/ankit.json"
Caller → Facts URL GET https://nasiko.com/agents/ankit.json
← Agent capability document (A2A card or equivalent)
The NANDA Index handles hop 1 only. It never proxies agent traffic.
Quick start
cp .env.example .env
# Edit .env — set JWT_SECRET to a strong random value
docker compose up --build
Accounts created via OAuth (Google/GitHub) or email/password.
Column
Type
Notes
id
UUID
Primary key
email
VARCHAR(255)
Unique
display_name
VARCHAR(255)
Optional
avatar_url
VARCHAR(512)
OAuth only
provider
VARCHAR(20)
google, github, or email
provider_id
VARCHAR(255)
OAuth provider's user ID
password_hash
VARCHAR(255)
Email/password accounts only
created_at
TIMESTAMPTZ
updated_at
TIMESTAMPTZ
organizations
One row per registered org — the core IndexRecord.
Column
Type
Notes
id
UUID
Primary key
org_id
VARCHAR(64)
Unique slug, e.g. nasiko. Lowercase, hyphens. Permanent.
display_name
VARCHAR(255)
Human-readable name
domain
VARCHAR(255)
Unique. Agents are addressable under this domain.
contact_email
VARCHAR(255)
Used for email verification
registry_url
VARCHAR(512)
URL of the org's Registry Server
email_verified
BOOLEAN
true once verification link is clicked
verify_token
VARCHAR(64)
One-time token emailed on registration
verify_token_expires_at
TIMESTAMPTZ
Token expiry — 24h after registration
ttl_seconds
INTEGER
Cache hint for resolvers. Default 86400 (24h)
status
VARCHAR(20)
pending, active, or suspended
created_at
TIMESTAMPTZ
updated_at
TIMESTAMPTZ
org_memberships
Which users can manage which organizations.
Column
Type
Notes
id
UUID
Primary key
user_id
UUID
FK → users.id
org_id
VARCHAR(64)
FK → organizations.org_id
role
VARCHAR(20)
admin or member
created_at
TIMESTAMPTZ
Local development (without Docker)
# 1. Start Postgres
docker compose up db -d
# 2. Install dependenciescd server && npm install
# 3. Create .env in server/
cp ../.env.example .env
# Set DATABASE_URL=postgresql://nanda:nanda-local@localhost:5433/nanda_index# 4. Run migrations + start
npm run migrate
npm run dev
# Web (separate terminal)cd web && npm install && npm run dev