Skip to main content
Glama
UMBRAXON

UMBRAXON/kya-hub

UMBRAXON KYA-Hub

Know Your Agent. A non-custodial, cryptographically-anchored identity and reputation hub for software agents and bots — paid for over Lightning, signed with Ed25519; optional Bitcoin anchoring for ELITE (see docs/ON-CHAIN-STATUS.md).

Web: https://www.umbraxon.xyz · Integrators

CI Nightly Node License Protocol Hub release


KYA-Hub is the reference implementation of the Know Your Agent (KYA) protocol — a non-custodial identity and reputation layer for software agents and bots. Agents pay for their certificates over Lightning, sign every privileged request with Ed25519 on a canonical payload, and may anchor ELITE credentials on Bitcoin via OP_RETURN when enabled (see docs/ON-CHAIN-STATUS.md). Integrations v1 (release 1.1.0) adds an opt-in discovery feed, L402-aligned delegation passes, and manifest extensions (payment_hints, developer webhooks). The hub holds no funds, runs no escrow, and emits no bearer tokens.

If you build agents that need to prove "I am not a sockpuppet" without surrendering control to a centralized SaaS, this is for you. Start with AGENTS.md if you are an AI agent reading this; start with UMBRAXON.md if you are a human operator.

Reference clients: Python SDK (byte-exact with the Node backend); MCP server (read-only hub tools for Cursor / MCP hosts); @umbraxon_kya/kya-verify (one-line gate check for Node integrators). AI / crawler discovery: llms.txt · .well-known/kya-hub.json. Bot Developer Portal (canonical): https://www.umbraxon.xyz/bots/ — alias https://bots.umbraxon.xyz/ (301 redirect).

Intro video (75s, developers): YouTube — Know Your Agent · embedded at https://www.umbraxon.xyz/#intro-video (fallback: https://umbraxon.xyz/bots/). API contract: openapi/openapi.yaml. FAQ for integrators: docs/FAQ-FOR-BOT-DEVELOPERS.md.

Building a plug-in or platform on KYA Hub?

Embed status checks in your product (LNBits, marketplaces, agent frameworks) without running a separate hub:

Resource

Link

Portal highlight

https://www.umbraxon.xyz/#platform

Status gate

GET /api/v1/agents/{kya_id}/status

FAQ §I

docs/FAQ-FOR-BOT-DEVELOPERS.md (Platform integrator)

Release notes

docs/RELEASE-v1.2.0-platform-integrator.md

Ready check

./scripts/platform-integrator-ready.sh

Example

examples/plugin-gate-v1.js

Python SDK

packages/umbraxon-py/README.md

Default registration prices (sats): BASIC 10 000, ELITE 80 000 (operator policy; live totals from GET /api/tiers / tier_pricing).

Integrating via GitHub?

Resource

Link

Quickstart

docs/REGISTRATION-QUICKSTART.md

Ask for help

Open a registration issue · Discussions

Release notes

docs/RELEASE-v1.1.0.md (Integrations v1) · v1.2 platform

Platform integrator

Discussions (template: Platform integrator)


Manifesto

KYA-Hub exists because the AI agent economy is moving faster than its accountability surface. Today an "agent" is whatever a JSON file claims; there is no consequence for misrepresentation, no portable history, no skin in the game. We treat that as a primary security gap, not a UX problem.

Six axioms drive every design decision in this repository:

  1. Identity must cost something. A bot earns its certificate by paying real Lightning sats up front. Free identities are abused; priced identities create a measurable cost-of-attack and a finite blast radius per Sybil cluster.

  2. The hub holds no funds. Every sat is collected at registration and either spent on chain anchoring or recognized as revenue. There is no escrow, no bond, no refund. Penalty = reputation slash + CRL inclusion + a 3ⁿ price multiplier on the next re-registration after a ban (capped at 9×).

  3. Signatures, not sessions. Agents authenticate every privileged call with an Ed25519 signature over a canonical payload. No bearer tokens, no API keys that can be lifted from a .env and replayed. See UMBRAXON.md for the three distinct digests.

  4. Receipts are public, history is on chain. ELITE-tier agents are individually anchored to Bitcoin via OP_RETURN (Phase 2). The certificate transparency log and CRL are exposed read-only for any third party to audit without trusting the hub.

  5. Friction belongs on the attacker, not the user. Proof-of-Work gates, per-zone reputation rate limits, IP-ban with sliding-window auto-promotion, and an adaptive 403-spike defence (lib/http-403-tracker.js) raise cost on abuse without making the happy path slower.

  6. No silent failure. Every rejection writes an immutable audit row (rejected_requests), every signing event hits cert_signing_log, every reputation delta lands in reputation_events. Operator can answer "why did this fail?" without log archaeology.

This is a v1 of a long-term protocol. Not all six axioms are equally enforced today; the Phase status table below is honest about what ships now versus what is staged.


What's in this repo

A production Node.js service plus the operator runbooks needed to run it without a SaaS dependency. Concretely:

  • server.js (≈ 5.9k LOC, single entrypoint) — public + admin HTTP surface, registration flow, payment integration (Lightning), reputation engine, audit.

  • lib/ — modular boundaries: pow.js, manifest-schema.js, reputation-engine.js, zone-rate-limiter.js, abuse-tracker.js, http-403-tracker.js, certs.js, hub-key-store.js, anchor.js, manufacturer.js, integrations-manifest.js, delegation-pass.js, developer-webhooks.js, …

  • migrations/ — 20 idempotent SQL migrations (Phase 1 through integrations discovery / delegation pass ledger). Run via node migrations/run.js.

  • scripts/ — operator tools (anchor worker, backups, restore drills, DAC8 export, channel state backup, cold-wallet generator) plus the Python reference bot client (umbrexon_bot_client.py).

  • mcp/Model Context Protocol server (stdio) exposing public KYA-Hub HTTP endpoints as MCP tools; see mcp/README.md.

  • docs/ — runbooks for deploy, restore, alerting, logging, manufacturer onboarding, watchtower setup, Prometheus metrics, protocol versioning.

  • config/logrotate-kya-hub (PM2 + /var/log/kya-*.log) and logrotate-btcpay-bitcoin-lnd.example (optional host template for large Bitcoin Core / LND debug.log when paths are known; see docs/LOGGING.md §4).

  • public/bots/ — static, JS-free Bot Developer Portal (served under /bots/ on the main web hosts; bots.umbraxon.xyz is a 301 alias). The same content is also at https://umbraxon.xyz/bots/.

  • openapi/openapi.yaml — machine-readable surface contract.

  • monitoring/dashboard.py — Streamlit ops dashboard (read-only DB + PM2 log tail).


Architecture (high-level)

flowchart LR
  Bot[Agent / Bot]
  CDN["Cloudflare proxy<br/>umbraxon.xyz:443"]
  Hub["KYA-Hub<br/>(server.js)"]
  PG[("PostgreSQL")]
  Alby["Alby Hub<br/>(LDK)"]
  BTCPay["BTCPay Server"]
  Btcd["bitcoind"]
  Explorer["LN / chain<br/>explorers"]
  
  Bot -->|HTTPS, Ed25519| CDN --> Hub
  Hub <-->|read/write| PG
  Hub -->|NWC| Alby
  Hub -->|REST + HMAC webhook| BTCPay
  Alby -->|gossip 9735| Explorer
  Alby --> Btcd
  BTCPay --> Btcd

Detailed diagrams (sequence, ER, state machines) live in UMBRAXON.md.


Quickstart (dev / local)

git clone <this repo>
cd kya-hub
npm ci

cp .env.example .env             # fill in DB + payment backends
node migrations/run.js           # apply schema (idempotent)

npm test                         # internal test suite
node server.js                   # listens on :3000 by default

Health check:

curl -fsS http://127.0.0.1:3000/api/health

CI lanes:

npm run ci:audit     # dependency audit
npm run ci:smoke     # hermetic smoke tests

Reference bot client (Python)

pip install pynacl
python3 scripts/umbrexon_bot_client.py self-test           # offline golden-vector check
python3 scripts/umbrexon_bot_client.py keygen --out bot.key
python3 scripts/demo-bot-mcp-register.py --dry-run         # MCP + register prep (no POST); log grep: DEMO-
python3 scripts/umbrexon_bot_client.py register \
  --base-url https://umbraxon.xyz \
  --privkey-file bot.key \
  --name MYBOT-001 --version 1.0.0 \
  --capability btc_payments --tier BASIC

The script is byte-exact compatible with lib/manifest-schema.js and server.js — the self-test subcommand asserts that against pinned golden hashes generated from the Node side. Use it as your contract spec, not just documentation.

Full signing rules (three distinct digests, none of them HMAC) are in UMBRAXON.md §13 and the script header. Common bot-developer error: assuming sha256(JSON+nonce) for everything — it will not pass any of the three.


Security posture

Layer

Mechanism

Where

Transport

TLS 1.2+ via Cloudflare proxy → nginx → Node

nginx-proxy/

App headers

helmet.js + CORS whitelist

server.js

Auth (admin)

Timing-safe X-Admin-Key

lib/security.js

Auth (agent)

Ed25519 on canonical payloads

lib/manifest-schema.js

Anti-DoS

Global + per-route rate limits, zone-aware

lib/zone-rate-limiter.js

Anti-abuse

IP ban, signature-failure tracker, auto-slash

lib/abuse-tracker.js

Anti-spam

PoW gates on /api/pay, /api/register/initiate

lib/pow.js

403 spike defence

Sliding-window challenge TTL multiplier

lib/http-403-tracker.js

Webhook integrity

HMAC-SHA256 raw-body verify (BTCPay)

server.js

Audit

rejected_requests, cert_signing_log, reputation_events

DB

Backups

Encrypted offsite + HMAC tail + restore drill

scripts/backup-*

Secrets

.env (chmod 0600), key-store with role separation

lib/hub-key-store.js

Two recent point-in-time security audits live in SECURITY-AUDIT-2026-05-12.md and SECURITY-AUDIT-2026-05-12-EVENING.md.


Phase status

Phase

Topic

State

1.0

LN/BTC payment + minimal registration

shipped

1.5

Manifest schema, Ed25519, challenge-response

shipped

2.0

Reputation engine, zone rate-limits

shipped

2.2

Anti-abuse, IP ban, PoW gates

shipped

2.3

Hub key-store (multi-role signing)

shipped

2.4

Configurable timestamp skew

shipped

2.5

Adaptive 403-spike TTL, PoW solve-effort telemetry, Python SDK

shipped

4.0

Bitcoin chain anchoring (OP_RETURN)

bitcoind sync pending

4B

Manufacturer attestation registry (DB-curated)

shipped

5.0

CRL + certificate transparency

shipped

5B

Multi-sig (BASIC/ELITE/ROOT) hub signing

shipped

Strategic Sprint

No-custody penalty, PDF invoices, AML, DAC8 export

shipped

Integrations v1

Discovery feed, L402 delegation profile + pass ledger, manifest payment_hints / dev webhooks, MCP tools

shipped (2026-05-14)

The single source of truth for status is UMBRAXON.md §16. This table is a snapshot; do not deploy from it.


Production ops

The operator-facing entry points (in order of how often you'll touch them):


Runtime requirements

  • Node.js: tested with v20.18.2. Some transitive dependencies warn that they expect >=20.19.0; upgrading Node is recommended when available.

  • PostgreSQL: tested with 14+. Two roles: postgres (DDL/migrations) and kyahub_app (least-privilege runtime).

  • PM2: process manager, configuration in ecosystem.config.js.

  • Lightning: an Alby Hub instance (self-custodial, LDK-based) reachable via NWC; optional BTCPay Server as backup payment processor.

  • Bitcoin Core: required for Phase 4 chain anchoring; not blocking for Phase 1–2 traffic.

  • Reverse proxy: nginx, expected to terminate TLS (we use Cloudflare in front of an nginx container — see nginx-proxy/).


Project layout

.
├── server.js               # single HTTP entrypoint
├── lib/                    # domain modules (pow, reputation, security, …)
├── migrations/             # 20 idempotent SQL files + run.js
├── scripts/                # operator + maintenance tools
│   ├── umbrexon_bot_client.py    # Python reference SDK
│   ├── anchor-worker.js          # Bitcoin OP_RETURN broadcaster
│   ├── backup-*.sh               # offsite + channel-state backups
│   └── …
├── docs/                   # runbooks (deploy, restore, alerting, …)
├── openapi/openapi.yaml    # API contract
├── config/                 # logrotate templates (kya-hub + optional BTCPay stack)
├── public/                 # static assets (Bot Developer Portal, ops dash)
├── monitoring/             # Streamlit dashboard (read-only)
├── nginx-proxy/            # ambassador container config
├── .github/workflows/      # CI: ci.yml + nightly.yml
├── UMBRAXON.md             # master project doc (Slovak, 6.5k+ lines)
├── WHITEPAPER.md           # public positioning document
└── README.md               # this file

CI

GitHub Actions:

Locally:

npm run ci:audit
npm run ci:smoke

Contributing

This repository is currently developed by a small team; external pull requests are reviewed case-by-case. If you are integrating an agent and hit a contract ambiguity, the most useful issue you can open is one that includes:

  1. The exact request body that failed (with secrets redacted).

  2. The HTTP response (status + body).

  3. The matching row from rejected_requests if you operate a hub.

  4. A patch to scripts/umbrexon_bot_client.py showing the discrepancy, if any.

For protocol-breaking proposals, link the relevant section of docs/PROTOCOL-VERSIONING.md so the versioning impact is explicit from the first message.


License

ISC — see LICENSE.


A short note on names

UMBRAXON is the operator brand. KYA stands for Know Your Agent, an intentional echo of KYC (Know Your Customer) — the analogy holds for the identity-binding part and breaks where it should: there is no government ID, no central registry of humans, no extraditable subject. The unit being known is a piece of software, and the proof is cryptographic, on-chain, and paid for in sats. Nothing more. Nothing less.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/UMBRAXON/kya-hub'

If you have feedback or need assistance with the MCP directory API, please join our Discord server