Learn-skills.dev nostr-wot

Nostr Web of Trust — trust scoring and sybil detection for Nostr pubkeys. Free tier (wot.klabo.world, 50 req/day) with paid fallback (maximumsats.com, 100 sats via L402). Covers 52K+ pubkeys and 2.4M+ zap-weighted trust edges.

install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/aibtcdev/skills/nostr-wot" ~/.claude/skills/neversight-learn-skills-dev-nostr-wot && rm -rf "$T"
manifest: data/skills-md/aibtcdev/skills/nostr-wot/SKILL.md
source content

Nostr Web of Trust Skill

Pre-transaction counterparty risk assessment using Nostr Web of Trust scores. Accepts hex pubkeys or

npub1...
bech32 addresses.

  • 52K+ pubkeys indexed with 2.4M+ trust edges
  • Trust edges weighted by zap receipts (economic signal, harder to fake)
  • Free tier:
    wot.klabo.world
    (50 req/day per IP), no key required
  • Paid fallback:
    maximumsats.com/api/wot-report
    (100 sats via L402) when free tier exhausted
  • 1-hour local cache to avoid redundant API calls

Usage

bun run nostr-wot/nostr-wot.ts <subcommand> [options]

Subcommands

trust-score

Look up WoT trust score, rank, and percentile. Checks against configurable thresholds.

bun run nostr-wot/nostr-wot.ts trust-score --pubkey 2b4603d2...
bun run nostr-wot/nostr-wot.ts trust-score --npub npub1abc...

Output:

{
  "success": true,
  "cached": false,
  "api": "free",
  "pubkey": "2b4603d2...",
  "trusted": true,
  "normalized_score": 87,
  "rank": 142,
  "percentile": 99.7
}

sybil-check

Classify a pubkey as

normal
,
suspicious
, or
likely_sybil
using follower quality, mutual trust ratio, and community integration signals.

bun run nostr-wot/nostr-wot.ts sybil-check --pubkey 2b4603d2...
bun run nostr-wot/nostr-wot.ts sybil-check --npub npub1abc...

Output:

{
  "success": true,
  "pubkey": "2b4603d2...",
  "classification": "normal",
  "is_sybil": false,
  "is_suspicious": false
}

neighbors

Discover trust graph neighbors — connected pubkeys with combined trust scores.

bun run nostr-wot/nostr-wot.ts neighbors --pubkey 2b4603d2...

network-health

Graph-wide stats: total nodes, edges, Gini coefficient, power law alpha. No pubkey required.

bun run nostr-wot/nostr-wot.ts network-health

config

View or update trust thresholds. Stored at

~/.aibtc/nostr-wot/config.json
.

bun run nostr-wot/nostr-wot.ts config                    # view current thresholds
bun run nostr-wot/nostr-wot.ts config --min-rank 5000
bun run nostr-wot/nostr-wot.ts config --require-top100
bun run nostr-wot/nostr-wot.ts config --no-require-top100

Threshold fields:

  • minRank
    — Maximum acceptable rank. Default:
    10000
  • requireTop100
    — Reject if not in top 100. Default:
    false

cache-status

Show cache statistics. Cache stored at

~/.aibtc/nostr-wot/cache.json
with 1-hour TTL.

bun run nostr-wot/nostr-wot.ts cache-status

Trust Thresholds

RankMeaning
1–100Elite (top 100 Nostr users by WoT)
101–1000Well-connected, high economic activity
1001–10000Active community member
>10000Low trust, new account, or no Nostr activity

API Details

Two endpoints, tried in order:

BaseAuthCostRate
https://wot.klabo.world
NoneFree50 req/day/IP
https://maximumsats.com/api/wot-report
L402100 satsUnlimited

Free tier returns HTTP 402 when exhausted; skill auto-falls back to paid endpoint. L402 payment requires a Lightning client — without one, paid calls return an error with the BOLT11 invoice.