# 941design Claude Plugins Nostr Sdks

> Freshness Gate

- Skill: `tomevault-io/941design-claude-plugins-nostr-sdks` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/941design-claude-plugins-nostr-sdks`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/941design-claude-plugins-nostr-sdks/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/941design-claude-plugins-nostr-sdks

---


## Freshness Gate

Current Unix timestamp: !`date +%s`

Read your MEMORY.md and find the `last_fetch_date` value. If it does not
exist, or if the current timestamp minus `last_fetch_date` exceeds **604800**
(7 days), you MUST run a knowledge refresh before answering. Follow the
refresh procedure described in your agent system prompt (fetch SDK repos,
release notes, and NIP support tables — write findings to agent memory only,
never modify plugin files).

If memory is fresh, proceed directly to answering.

## User Question

$ARGUMENTS

## Reference Documents

The following supporting documents are available in your skill directory at
`${CLAUDE_SKILL_DIR}/`:

| File | Content |
|---|---|
| [library-matrix.md](library-matrix.md) | All major Nostr SDKs by language/maturity/NIP support/activity, with strengths and trade-offs |
| [selection-guide.md](selection-guide.md) | Decision tree by language, platform, and use case; when to push back on a user's chosen library |
| [common-tasks.md](common-tasks.md) | Side-by-side code examples for keypair generation, publish, subscribe, and NIP-46 connect across SDKs |
| [interop-and-bindings.md](interop-and-bindings.md) | rust-nostr UniFFI family, the two distinct nostr-sdk-ios projects, archived/legacy projects, wire compatibility |

Read the relevant documents to answer the user's question. Consult your agent
memory for additional context and prior findings.

## Response Format

- **Default to language-native first.** Match the user's stack rather than
  pushing one SDK universally. nostr-tools/NDK for TS, rust-nostr for Rust,
  fiatjaf.com/nostr for Go, pynostr for Python, nostr-sdk-ios for native
  Apple, etc.
- **Surface bindings as a fallback** when cross-platform parity matters
  (rust-nostr → nostr-sdk-jvm + nostr-sdk-swift).
- **Always check archive/legacy status** before recommending: go-nostr is
  archived (use fiatjaf.com/nostr), python-nostr is feature-frozen (use
  pynostr), NostrKit is minimal (use nostr-sdk-ios), Rhodium is incomplete
  (use nostr-sdk-jvm for KMP).
- **Show concrete code** for the chosen library — don't just name it.
- **Cite NIP numbers** when explaining behavior; defer to the
  remote-signing skill for deep NIP-46/07/55 specifics.
- **Flag pre-1.0 / alpha** status (rust-nostr family, marmot-ts, Rhodium).
- **Watch out for name collisions** — distinguish rust-nostr/nostr-sdk-swift
  (UniFFI) from nostr-sdk/nostr-sdk-ios (native) from damus-io/nostr-sdk
  (Damus's own implementation).
- If you need to fetch live source or release notes to verify an API
  surface, do so.

---
> Source: [941design/claude-plugins](https://github.com/941design/claude-plugins) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-16 -->

