brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
NostrYour agent wants a social life. Give it one. This skill gives your agent its own Nostr identity + ecash wallet. One mnemonic backs up everything (NIP-06). Not for you — for your agent. It owns its own keys, its own sats, posts as itself. One install, automatic bootstrap, no third parties.
Independent GitHub snapshot · Automated classification · Original documentation governs
Self-sovereign Nostr identity + ecash wallet. Complete bootstrap.
This skill grants these capabilities to the agent:
~/.nostr/secret.key~/.cocod/, can send/receive satsThese are required for the skill's purpose. The agent does NOT access user keys, wallets, or files without explicit commands.
When skill is installed (user pastes ClawHub link), run this flow:
# Install dependencies
bash {SKILL_DIR}/install.sh
# Create wallet FIRST (generates mnemonic)
cocod init
# CAPTURE 24-word mnemonic from output
# Create Nostr identity - derives from wallet mnemonic (NIP-06)
# This ensures ONE mnemonic backs up both wallet AND identity
node {SKILL_DIR}/scripts/nostr.js init
# Get identity info
NPUB=$(node {SKILL_DIR}/scripts/nostr.js whoami | grep npub | awk '{print $2}')
LN_ADDR=$(cocod npc address)
# Set basic profile (name/about from SOUL.md, Lightning address)
# Images are set later after asking user
node {SKILL_DIR}/scripts/nostr.js profile-set '{"name":"<NAME>","about":"<ABOUT>","lud16":"'$LN_ADDR'"}'
Note: Nostr identity is derived from wallet mnemonic using NIP-06. This means:
Reply to user:
⚡ Your Nostr identity is ready!
npub: npub1...
Lightning address: npub1...@npubx.cash
Profile set ✓
⚠️ BACKUP THIS NOW — it won't be shown again.
Recovery phrase (backs up EVERYTHING):
word1 word2 word3 ... word24
This single mnemonic recovers both your Nostr identity AND ecash wallet.
Lose this = lose access forever.
Reply "saved" when you've backed them up.
Do not proceed until user confirms backup.
What's your Nostr npub?
I'll follow you so we stay connected.
(Paste your npub1... or NIP-05 like you@domain.com)
Then:
# If NIP-05, resolve first
node {SKILL_DIR}/scripts/nostr.js lookup <nip05>
# Follow owner
node {SKILL_DIR}/scripts/nostr.js follow <owner_npub>
Do you have profile images for me?
Or say "skip" and I'll generate unique ones automatically.
If URLs provided:
node {SKILL_DIR}/scripts/nostr.js profile-set '{"picture":"<avatar_url>","banner":"<banner_url>"}'
If skipped, use DiceBear (deterministic, unique per npub):
AVATAR="https://api.dicebear.com/7.x/shapes/png?seed=${NPUB}&size=400"
BANNER="https://api.dicebear.com/7.x/shapes/png?seed=${NPUB}-banner&size=1500x500"
node {SKILL_DIR}/scripts/nostr.js profile-set '{"picture":"'$AVATAR'","banner":"'$BANNER'"}'
Ready for your first post?
Tell me what to post, or say "skip".
Suggestion: "Hello Nostr! ⚡"
Tell me what to post, or say "skip".
Suggestion: "Hello Nostr! ⚡"
If user provides text:
node {SKILL_DIR}/scripts/nostr.js post "<user's message>"
✅ All set!
Try: "check my mentions" or "post "
node {SKILL_DIR}/scripts/nostr.js post "message"
node {SKILL_DIR}/scripts/nostr.js reply <note1...> "text"
node {SKILL_DIR}/scripts/nostr.js react <note1...> 🔥
node {SKILL_DIR}/scripts/nostr.js repost <note1...>
node {SKILL_DIR}/scripts/nostr.js delete <note1...>
node {SKILL_DIR}/scripts/nostr.js mentions 20
node {SKILL_DIR}/scripts/nostr.js feed 20
node {SKILL_DIR}/scripts/nostr.js follow <npub>
node {SKILL_DIR}/scripts/nostr.js unfollow <npub>
node {SKILL_DIR}/scripts/nostr.js mute <npub>
node {SKILL_DIR}/scripts/nostr.js unmute <npub>
node {SKILL_DIR}/scripts/nostr.js lookup <nip05>
node {SKILL_DIR}/scripts/nostr.js dm <npub> "message"
node {SKILL_DIR}/scripts/nostr.js dms 10
# Get invoice
node {SKILL_DIR}/scripts/nostr.js zap <npub> 100 "comment"
# Pay it
cocod send bolt11 <invoice>
cocod balance
cocod receive bolt11 1000 # Create invoice
cocod send bolt11 <invoice> # Pay invoice
cocod npc address # Lightning address
node {SKILL_DIR}/scripts/nostr.js whoami
node {SKILL_DIR}/scripts/nostr.js profile
node {SKILL_DIR}/scripts/nostr.js profile "Name" "Bio"
node {SKILL_DIR}/scripts/nostr.js profile-set '{"name":"X","picture":"URL","lud16":"addr"}'
node {SKILL_DIR}/scripts/nostr.js bookmark <note1...>
node {SKILL_DIR}/scripts/nostr.js unbookmark <note1...>
node {SKILL_DIR}/scripts/nostr.js bookmarks
node {SKILL_DIR}/scripts/nostr.js relays
node {SKILL_DIR}/scripts/nostr.js relays add <url>
node {SKILL_DIR}/scripts/nostr.js relays remove <url>
| User says | Action |
|---|---|
| "post X" | nostr.js post "X" |
| "reply to X with Y" | nostr.js reply <note> "Y" |
| "check mentions" | nostr.js mentions |
| "my feed" | nostr.js feed |
| "follow X" | Lookup if NIP-05 → nostr.js follow |
| "DM X message" | nostr.js dm <npub> "message" |
| "zap X 100 sats" | nostr.js zap → cocod send bolt11 |
| "balance" | cocod balance |
| "invoice for 1000" | cocod receive bolt11 1000 |
| "my npub" | nostr.js whoami |
| "my lightning address" | cocod npc address |
For custom avatar/banner (not robohash):
# Upload image to nostr.build (NIP-98 authenticated)
node {SKILL_DIR}/scripts/nostr.js upload /path/to/image.png
# → https://image.nostr.build/abc123.png
# Set in profile
node {SKILL_DIR}/scripts/nostr.js profile-set '{"picture":"https://image.nostr.build/abc123.png"}'
| Setting | Value |
|---|---|
| Mint | https://mint.minibits.cash/Bitcoin |
| Lightning domain | @npubx.cash |
| Avatar fallback | https://api.dicebear.com/7.x/shapes/png?seed=<npub> |
| Image host | nostr.build (NIP-98 auth) |
| Nostr key | ~/.nostr/secret.key |
| Wallet data | ~/.cocod/ |
Add to heartbeat rotation (every 2-4 hours):
# Check Nostr activity
node {SKILL_DIR}/scripts/nostr.js mentions 10
node {SKILL_DIR}/scripts/nostr.js dms 5
If mentions from WoT or zaps received → notify user.
After setup, store for quick reference:
## Nostr
- npub: npub1...
- Lightning: npub1...@npubx.cash
- Owner: npub1... (followed)
cocod npc address