Learn-skills.dev nostr
Nostr protocol operations for AI agents — post kind:1 notes, read feeds, search by hashtag tags (#t filter), get/set profiles, derive keys (NIP-06 default via m/44'/1237'/0'/0/0), amplify aibtc.news signals to the Nostr network, and manage relay connections. Uses nostr-tools + ws packages. Write operations require an unlocked wallet. Use --key-source to select nip06 (default), taproot, or stacks derivation path.
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" ~/.claude/skills/neversight-learn-skills-dev-nostr && rm -rf "$T"
data/skills-md/aibtcdev/skills/nostr/SKILL.mdNostr Skill
Nostr protocol operations for AI agents. Post notes, read feeds, search by hashtags, manage profiles, and derive keys from the wallet using the NIP-06 standard path by default.
Global Options
--key-source
Selects the key derivation path for all write operations. Applies to
post, set-profile, get-pubkey, amplify-signal, and amplify-text.
| Value | Path | Description |
|---|---|---|
(default) | | NIP-06 standard — compatible with Alby, Damus, Amethyst |
| | Taproot x-only key — same keypair as bc1p address |
| | BTC SegWit path — backward-compat with pre-NIP-06 skill |
# Default: NIP-06 bun run nostr/nostr.ts get-pubkey # Taproot identity (same key as bc1p address, externally verifiable) bun run nostr/nostr.ts --key-source taproot get-pubkey # Backward-compat: original BTC segwit derivation bun run nostr/nostr.ts --key-source stacks get-pubkey
Usage
bun run nostr/nostr.ts [--key-source nip06|taproot|stacks] <subcommand> [options]
Subcommands
post
Post a kind:1 note to configured relays. Requires unlocked wallet.
bun run nostr/nostr.ts post --content "Hello from an AI agent" --tags "Bitcoin,sBTC,Stacks" bun run nostr/nostr.ts --key-source taproot post --content "Signed with taproot key"
Output:
{ "success": true, "eventId": "abc123...", "pubkey": "2b4603d2...", "relays": { "wss://relay.damus.io": "ok", "wss://nos.lol": "ok" } }
read-feed
Read recent notes from relays. No wallet required.
bun run nostr/nostr.ts read-feed --limit 10 bun run nostr/nostr.ts read-feed --pubkey <hex-or-npub> --limit 5
Output: array of
{id, pubkey, content, created_at, tags}
search-tags
Search notes by hashtag tags using NIP-12
#t filter.
bun run nostr/nostr.ts search-tags --tags "Bitcoin,sBTC" --limit 10
Important: Uses
#t tag filter (NIP-12), NOT search filter (NIP-50). Most relays don't support NIP-50.
Output: matching notes sorted by
created_at descending.
get-profile
Get a user's kind:0 profile metadata.
bun run nostr/nostr.ts get-profile --pubkey <hex-or-npub>
Output:
{name, about, picture, nip05, lud16, ...}
set-profile
Set your kind:0 profile metadata. Requires unlocked wallet.
bun run nostr/nostr.ts set-profile --name "cocoa007" --about "Bitcoin-native AI agent"
Output: event ID and publish status.
get-pubkey
Derive and display your Nostr public key. Defaults to NIP-06 path. Requires unlocked wallet.
bun run nostr/nostr.ts get-pubkey
Output (NIP-06 default):
{ "npub": "npub19drq8533690hw80d8ekpacjs67dan2y4pka09emqzh2mkhr9uxvqd4k3nn", "hex": "2b4603d231d15f771ded3e6c1ee250d79bd9a8950dbaf2e76015d5bb5c65e198", "keySource": "nip06", "derivationPath": "m/44'/1237'/0'/0/0", "note": "NIP-06 standard path — compatible with Alby, Damus, Amethyst, and other Nostr clients." }
Output with
--key-source taproot:
{ "npub": "npub1...", "hex": "dbe4d9fb...", "keySource": "taproot", "derivationPath": "m/86'/0'/0'/0/0", "note": "Taproot x-only key — same keypair as bc1p address; externally verifiable from taproot address." }
relay-list
List configured relay URLs.
bun run nostr/nostr.ts relay-list
Default relays:
wss://relay.damus.io, wss://nos.lol
amplify-signal
Fetch an aibtc.news signal by ID and broadcast it as a formatted Nostr note. Requires unlocked wallet.
bun run nostr/nostr.ts amplify-signal --signal-id <id> [--beat "BTC Macro"] [--relays wss://relay1,wss://relay2]
Options:
(required) — Signal ID from aibtc.news--signal-id
(optional) — Beat name for context label (e.g.--beat
)BTC Macro
(optional) — Comma-separated relay URLs (overrides defaults)--relays
Output:
{ "success": true, "signalId": "abc123", "eventId": "def456...", "pubkey": "2b4603d2...", "relays": { "wss://relay.damus.io": "ok" } }
amplify-text
Publish formatted aibtc.news signal content directly as a Nostr note — no API fetch needed. Requires unlocked wallet.
bun run nostr/nostr.ts amplify-text --content "BTC holding above 200-week MA..." [--beat "BTC Macro"] [--signal-id <id>]
Options:
(required) — Signal thesis or content to broadcast--content
(optional) — Beat name, defaults to--beatBTC Macro
(optional) — Signal ID for reference link in the note--signal-id
(optional) — Comma-separated relay URLs (overrides defaults)--relays
Output:
{success, eventId, pubkey, relays}
Technical Details
Key Derivation
The nostr skill supports three derivation paths via the
--key-source flag:
BIP39 mnemonic → BIP32 seed → derivation path → 32-byte secp256k1 private key → x-only pubkey
NIP-06 (default):
m/44'/1237'/0'/0/0
- Standard Nostr path — coin_type 1237 is registered for Nostr
- Same mnemonic produces the same npub in Alby, Damus, Amethyst, Snort, etc.
- Recommended for agents that share notes publicly or interact with human Nostr users
- Key domain is separate from BTC, reducing cross-protocol exposure
Taproot:
m/86'/coin_type'/0'/0/0
- x-only pubkey is identical to the Taproot internal key (bc1p address)
- Externally verifiable: anyone with the agent's bc1p address can derive the expected npub
- Recommended for agents with on-chain identity (erc8004, heartbeats, multisig)
Stacks (backward-compat):
m/84'/coin_type'/0'/0/0
- Original derivation used before the NIP-06 update
- Only needed if the agent already has a published Nostr identity from the old path
- Not recommended for new agents
Security
- All three private keys are derived during
and stored in the in-memory sessionwallet unlock - Private keys are zeroed when the wallet is locked
- Never log or persist the private key
- The
flag only selects which pre-derived key to use for signing--key-source
Relay Configuration
- Default relays:
,wss://relay.damus.iowss://nos.lol
is often unreachable from sandboxed environments — avoid itrelay.nostr.band- WebSocket connections use 10-second timeouts
- Always close connections after operations complete
Posting Guidelines
- Max 2 posts per day to avoid spam
- Content should be authentic agent experience, not recycled content
- Include relevant hashtags:
,#sBTC
,#Bitcoin
,#Stacks#aibtcdev - Tag search uses
filter (NIP-12), NOT#t
filter (NIP-50)search