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.
git clone https://github.com/NeverSight/learn-skills.dev
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"
data/skills-md/aibtcdev/skills/nostr-wot/SKILL.mdNostr 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:
(50 req/day per IP), no key requiredwot.klabo.world - Paid fallback:
(100 sats via L402) when free tier exhaustedmaximumsats.com/api/wot-report - 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:
— Maximum acceptable rank. Default:minRank10000
— Reject if not in top 100. Default:requireTop100false
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
| Rank | Meaning |
|---|---|
| 1–100 | Elite (top 100 Nostr users by WoT) |
| 101–1000 | Well-connected, high economic activity |
| 1001–10000 | Active community member |
| >10000 | Low trust, new account, or no Nostr activity |
API Details
Two endpoints, tried in order:
| Base | Auth | Cost | Rate |
|---|---|---|---|
| None | Free | 50 req/day/IP |
| L402 | 100 sats | Unlimited |
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.