nak

Interact with Nostr protocol using the nak CLI tool. Use to generate Nostr secret keys, encode and decode Nostr identifiers (hex/npub/nsec/nip05/etc), fetch events from relays, sign and publish Nostr events, and more.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "nak" with this command: npx skills add soapbox-pub/nostr-skills/soapbox-pub-nostr-skills-nak

nak - Nostr Army Knife

Work with the Nostr protocol using the nak CLI tool.

GitHub: https://github.com/fiatjaf/nak

Installation

To install (or upgrade) nak:

curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh

Core Concepts

Based on analyzing extensive real-world usage, here are the fundamental concepts distilled down, then branched out:


CONCEPT 1: Query & Discovery

"Finding events and data on Nostr"

Basic:

  • Fetch by identifier: "Get event/profile without knowing relays"
    • nak fetch nevent1... (uses embedded relay hints)
    • nak fetch alex@gleasonator.dev (NIP-05 resolution)
  • Query by event ID: "I want THIS specific event from a relay"
    • nak req -i <event_id> <relay>
  • Query by author: "Show me everything from this person"
    • nak req -a <pubkey> <relay>
  • Query by kind: "Show me all profiles/notes/videos"
    • nak req -k <kind> <relay>

Intermediate:

  • Fetch addressable events: "Get event by naddr/nprofile"
    • nak fetch naddr1... (kind, author, identifier encoded)
    • nak fetch -r relay.primal.net naddr1... (override relays)
  • Filter by multiple criteria: "Find posts by author X of kind Y"
    • nak req -k 1 -a <pubkey> <relay>
  • Tag-based queries: "Find events tagged with bitcoin"
    • nak req --tag t=bitcoin <relay>

Advanced:

  • Search with ranking: "Find trending/top content"
    • nak req --search "sort:hot" <relay>
    • nak req --search "popular:24h" <relay>
  • Live monitoring: "Watch events in real-time"
    • nak req --stream <relay>
  • Cross-protocol queries: "Find bridged Bluesky content"
    • nak req --tag "proxy=at://..." <relay>

Use cases: Discovering content, debugging relay data, testing search algorithms, monitoring live feeds


CONCEPT 2: Broadcast & Migration

"Moving/copying events between relays"

Basic:

  • Publish a single event: "Put this on relay X"
    • cat event.json | nak event <relay>
  • Query and republish: "Copy event from relay A to relay B"
    • nak req -i <id> relay1 | nak event relay2

Intermediate:

  • Batch migration: "Copy all events of kind X"
    • nak req -k 30717 source_relay | nak event dest_relay
  • Paginated backup: "Download everything from a relay"
    • nak req --paginate source_relay | nak event backup_relay
  • Multi-relay broadcast: "Publish to multiple relays at once"
    • cat event.json | nak event relay1 relay2 relay3

Advanced:

  • Selective migration: "Copy follow list members' data"
    • Loop through follow list, query each author, republish to new relay
  • Filter and migrate: "Copy only tagged/searched content"
    • nak req --tag client=X relay1 | nak event relay2
  • Cross-relay synchronization: "Keep two relays in sync"
    • nak sync source_relay dest_relay

Use cases: Seeding new relays, backing up data, migrating content between relays, bridging Mostr/Fediverse content


CONCEPT 3: Identity & Encoding

"Working with Nostr identifiers and keys"

Basic:

  • Decode identifiers: "What's inside this npub/nevent?"
    • nak decode npub1...
    • nak decode user@domain.com
  • Encode identifiers: "Turn this pubkey into npub"
    • nak encode npub <hex_pubkey>

Intermediate:

  • Generate keys: "Create a new identity"
    • nak key generate
    • nak key generate | nak key public | nak encode npub
  • Extract hex from NIP-05: "Get the raw pubkey from an address"
    • nak decode user@domain.com | jq -r .pubkey
  • Create shareable references: "Make a nevent with relay hints"
    • nak encode nevent <event_id> --relay <relay>

Advanced:

  • Complex naddr creation: "Create addressable event reference with metadata"
    • nak encode naddr -k 30717 -a <author> -d <identifier> -r <relay>
  • Multi-relay nprofile: "Create profile with multiple relay hints"
    • nak encode nprofile <pubkey> -r relay1 -r relay2 -r relay3

Use cases: Converting between formats, sharing references with relay hints, managing multiple identities, extracting pubkeys for scripting


CONCEPT 4: Event Creation & Publishing

"Creating and signing new events"

Basic:

  • Interactive creation: "Create an event with prompts"
    • nak event --prompt-sec <relay>
  • Simple note: "Publish a text note"
    • nak event -k 1 -c "Hello Nostr" <relay>

Intermediate:

  • Events with tags: "Create tagged content"
    • nak event -k 1 -t t=bitcoin -t t=nostr <relay>
  • Event deletion: "Delete a previous event"
    • nak event -k 5 -e <event_id> --prompt-sec <relay>
  • Replaceable events: "Create/update a profile or app data"
    • nak event -k 10019 -t mint=<url> -t pubkey=<key> <relay>

Advanced:

  • Remote signing with bunker: "Sign without exposing keys"
    • nak event --connect "bunker://..." <relay>
  • Batch event creation: "Generate many events via script"
    • for i in {1..100}; do nak event localhost:8000; done
  • Complex events from JSON: "Craft specific event structure"
    • Modify JSON, then cat event.json | nak event <relay>

Use cases: Testing event creation, developing apps (kind 31990, 37515), wallet integration (kind 10019), moderation (kind 5), bunker/remote signing implementation


CONCEPT 5: Development & Testing

"Building on Nostr"

Basic:

  • Local relay testing: "Test against dev relay"
    • nak req localhost:8000
    • nak event ws://127.0.0.1:7777

Intermediate:

  • Inspect JSON: "Examine event structure"
    • nak req -i <id> <relay> | jq .
  • Test search: "Verify search functionality"
    • nak req --search "<query>" localhost:8000
  • Admin operations: "Manage relay content"
    • nak admin --prompt-sec banevent --id <id> <relay>

Advanced:

  • Protocol bridging: "Query/test ATProto integration"
    • nak req --tag "proxy=at://..." eclipse.pub/relay
  • Git over Nostr: "Use git with Nostr transport"
    • nak git clone nostr://...
    • nak req -k 30617 git.shakespeare.diy
  • Performance testing: "Measure query speed"
    • time nak req -k 0 -a <pubkey> <relay>
  • Custom event kinds: "Test proprietary event types"
    • nak req -k 37515 -a <author> -d <id> ditto.pub/relay

Use cases: Relay development (Ditto), testing bridges (Mostr/Bluesky), developing video platforms, implementing Git-over-Nostr, testing search ranking algorithms, performance benchmarking


CONCEPT 6: Analytics & Monitoring

"Understanding Nostr data"

Basic:

  • Count results: "How many events match?"
    • nak req -k 1 <relay> | wc -l
    • nak count -k 7 -e <event_id> <relay>

Intermediate:

  • Live monitoring: "Watch relay activity"
    • nak req --stream <relay>
    • nak req -l 0 --stream relay1 relay2 relay3
  • Client analytics: "What apps are posting?"
    • nak req --tag client=<app> <relay>

Advanced:

  • Event chain analysis: "Track engagement"
    • nak count -k 7 -e <event_id> <relay> (reactions)
    • nak req -k 6 -k 7 -e <event_id> <relay> (reposts + reactions)
  • Content ranking: "Find top/hot content"
    • nak req --search "sort:top" <relay>
  • Cross-relay comparison: "Compare event availability"
    • Query same event from multiple relays, compare results

Use cases: Monitoring relay health, tracking client usage (Ditto, noStrudel, moStard), analyzing engagement, testing ranking algorithms


Summary: The 6 Core Mental Models

  1. Query & Discovery: "How do I find things?"
  2. Broadcast & Migration: "How do I move things?"
  3. Identity & Encoding: "How do I represent things?"
  4. Event Creation: "How do I make things?"
  5. Development & Testing: "How do I build things?"
  6. Analytics & Monitoring: "How do I measure things?"

Command Shapes and Edge-Cases

Non-obvious patterns and edge cases for nak commands.

Signing Methods

Using environment variable:

export NOSTR_SECRET_KEY=<hex_key>
nak event -c "hello"  # Automatically uses $NOSTR_SECRET_KEY

Reading key from file:

nak event -c "hello" --sec $(cat /path/to/key.txt)

Content from File

Using @ prefix to read content from file:

echo "hello world" > content.txt
nak event -c @content.txt

Tag Syntax

Tag with multiple values (semicolon-separated):

nak event -t custom="value1;value2;value3"
# Creates: ["custom", "value1", "value2", "value3"]

Filter Output Modes

Print bare filter (JSON only):

nak req -k 1 -l 5 --bare
# Output: {"kinds":[1],"limit":5}

Filter from stdin can be modified with flags:

echo '{"kinds": [1]}' | nak req -l 5 -k 3 --bare

Unlimited stream:

nak req -l 0 --stream wss://relay.example.com

Relay Specification

Local relays and WebSocket schemes:

nak req localhost:8000
nak req ws://127.0.0.1:7777
nak req relay.example.com  # Assumes wss:// if not specified

Encoding

Encode from JSON stdin (auto-detects type):

echo '{"pubkey":"<hex>","relays":["wss://relay.example.com"]}' | nak encode

Key Operations

Complete key generation pipeline:

nak key generate | tee secret.key | nak key public | nak encode npub
# Saves private key to file AND prints the public npub

Verification

Verify and pipe:

nak event -c "test" --sec <key> | nak verify && echo "Valid"

Fetch vs Req

nak fetch uses relay hints from identifiers:

nak fetch nevent1...  # Uses relays encoded in nevent
nak fetch naddr1...   # Uses relays encoded in naddr  
nak fetch alex@gleasonator.dev  # Resolves NIP-05
nak fetch -r relay.primal.net naddr1...  # Override relays

nak req requires explicit relay specification:

nak req -i <event_id> wss://relay.example.com

Edge Cases

No relays specified (prints event without publishing):

nak event -c "test" --sec <key>  # Just prints the event JSON

Tag order matters for addressable events:

# The first 'd' tag is the identifier
nak event -k 30023 -d first -d second  # "first" is the identifier

Timestamp override:

nak event --ts 1700000000 -c "backdated" --sec <key>
nak event --ts 0 -c "genesis" --sec <key>  # Event at Unix epoch

Kind 0 (profile) requires JSON content:

nak event -k 0 -c '{"name":"Alice","about":"Developer"}' --sec <key>

POW (Proof of Work):

nak event --pow 20 -c "mined event" --sec <key>
# Will compute hash until difficulty target is met

NIP-42 AUTH:

nak req --auth -k 1 wss://relay.example.com
nak event --auth -c "test" --sec <key> wss://relay.example.com
# Automatically handles AUTH challenges

Stdin takes precedence over flags:

echo '{"content":"from stdin"}' | nak event -c "from flag" --sec <key>
# Uses "from stdin" (stdin overrides flags)

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

nostr

No summary provided by upstream source.

Repository SourceNeeds Review
General

nak

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

openclaw-version-monitor

监控 OpenClaw GitHub 版本更新,获取最新版本发布说明,翻译成中文, 并推送到 Telegram 和 Feishu。用于:(1) 定时检查版本更新 (2) 推送版本更新通知 (3) 生成中文版发布说明

Archived SourceRecently Updated
Coding

ask-claude

Delegate a task to Claude Code CLI and immediately report the result back in chat. Supports persistent sessions with full context memory. Safe execution: no data exfiltration, no external calls, file operations confined to workspace. Use when the user asks to run Claude, delegate a coding task, continue a previous Claude session, or any task benefiting from Claude Code's tools (file editing, code analysis, bash, etc.).

Archived SourceRecently Updated