'the sun doesn't disappear because it's cloudy. it's you who can't see it.'
⚔️
Jared Logan
jaredlogan@happytavern.co
npub19yw8...322j
catholic. american. husband and father. here for the revolution. avid note taker. eternal optimist. photographer, videographer, and ux designer. self-taught fisherman and banjo player.
We can all become something more.
⚔️
A lot of people heard 'Don't trust, verify', and trusted without verifying.
💔
Building out a nostr-native AI expanding on Dork from @npub10qdp...arpj
https://10vy5d0umw8izp3bcmh0btzl6k2szvsu8zestncxpsstb6l8e6opendork.nsite.lol/
---
FEATURES
Identity & auth
- NIP-07 browser extension
- nsec (with paste guard outside the login field)
- NIP-46 bunker URI
- nostrconnect (QR / remote signer)
- NIP-98 signed requests to Shakespeare AI
AI
- Streaming chat with stop generation
- Model picker with search, grouped by provider
- Shakespeare AI built-in (credits via Nostr; balance chip when selected)
- Custom providers — OpenAI-compatible /v1 APIs + optional CORS proxy
- Provider presets — OpenAI, OpenRouter, Groq, Together, Ollama, OpenCode Go
- Retry / regenerate last assistant turn
- Attachments — paste or drop images (vision) and text/code files
- Nostr context — composer packs: my profile, my recent notes, people, paste note/nevent/naddr/thread
- @mentions — Ditto-style typeahead from follows + NIP-05; auto-fetches profile + recent notes
- Edit message — rewrite a user turn and regenerate from that point
- Fork chat — branch a conversation from any message
- Continue / rewrite presets on assistant turns
- Code blocks — syntax highlight + per-block copy
- Context meter — estimated tokens vs model window under the composer
- Nostr fetch — auto-resolve note / nevent / npub / nprofile / naddr refs into the prompt
- Chat search — ⌘/Ctrl+K full-text search across titles and messages
Workspace
- Recents — freestanding chats outside any project (Claude-style default)
- OpenDork session — app-owned system block (product rules + optional logged-in identity; never nsec)
- Global instructions — Settings → Instructions; injected into every chat
- Projects — optional hub with project instructions, memory, context pack, and chats
- Project hub — Claude-style project page: composer + chat list + right rail (Instructions · Memory · Context)
- Memory — short durable facts injected into every chat in the project (private, sealed with vault)
- Chats — freestanding or under a project; auto-title from first message; move between buckets
- Prompt assembly — session → global → project instructions → memory → budgeted context → thread → Nostr packs/mentions → messages
(freestanding chats use session + global; empty global falls back to a built-in default persona)
History modes
- Local only (default) — IndexedDB on this browser
- Ephemeral — no new writes to disk
- Sync (encrypted) — opt-in publish/pull of a NIP-44 sealed snapshot
Privacy & portability
- Vault encryption — AES-GCM at rest for project names, chat titles, messages, global/project instructions, memory, and context
- Unlock via NIP-44 encrypt-to-self (preferred) or passphrase
- encryptLocal policy honored on every seal write
- Sealed API keys — not stored in plain app-config JSON when vault is active; UI warns if vault is off
- Export / import — plain JSON (with confirm) or passphrase-encrypted bundles (API keys never included)
- Relay sync — addressable kind 39987 (d = opendork-workspace-v1, client/app = opendork), NIP-44 content; requires unlocked vault
---
Repo:
View article →

NostrHub — Build Nostr Together
NostrHub is where the developer community collaborates on building the Nostr protocol — discover, draft, and discuss NIPs together.
You know it's focused work when you hear this playing.
Is it just me or does Buzz seem like a huge security and privacy concern?