mirror of
https://github.com/purrgrammer/grimoire.git
synced 2026-04-10 15:36:53 +02:00
- Handle AUTH challenges from group relay using onauth callback - Send kind 9021 join request when connecting to group - Use direct Relay connection instead of SimplePool for group relay - Properly close relay connection on shutdown https://claude.ai/code/session_01X4HWkMGrghBv2RfY89L5Lz
Grimoire REQ Assistant Bot
A Nostr bot that listens for mentions in the Grimoire group chat and helps users craft REQ queries for the Nostr protocol.
Features
- Listens for mentions in NIP-29 group chats
- Uses LLM (Claude) to understand user questions
- Provides REQ command suggestions for querying Nostr relays
- Has tools to look up event kinds and NIPs
Setup
Prerequisites
- Node.js 18+
- An Anthropic API key (for Claude)
Installation
cd bot
npm install
Configuration
Set environment variables:
# Required: Anthropic API key
export ANTHROPIC_API_KEY="your-api-key"
# Optional: Override bot settings
export BOT_PRIVATE_KEY="your-hex-private-key"
export RELAY_URL="wss://groups.0xchat.com"
export GROUP_ID="NkeVhXuWHGKKJCpn"
Running
Development mode (with hot reload):
npm run dev
Production:
npm run build
npm start
Usage
In the group chat, mention the bot with a question about REQ queries:
@grimoire-bot how do I find all notes from the last 24 hours?
The bot will respond with:
To find all notes from the last 24 hours:
req -k 1 --since 1d relay.damus.io
This command:
- `-k 1` filters for kind 1 (short text notes)
- `--since 1d` gets events from the last day
- `relay.damus.io` is the relay to query
Available Tools
The bot can look up:
- Event Kinds: What each kind number means
- NIPs: Nostr Implementation Possibilities specifications
- Kinds for NIP: What kinds are defined in a specific NIP
Architecture
bot/
├── src/
│ ├── index.ts # Main bot entry point
│ ├── llm.ts # LLM integration with tools
│ └── data/
│ ├── kinds.ts # Event kind definitions
│ └── nips.ts # NIP definitions
├── package.json
└── tsconfig.json
Bot Identity
Default bot pubkey: 4f2d3e... (derived from the configured private key)
The bot signs messages with its own identity and responds as a member of the group.
Supported REQ Options
The bot can help with all grimoire REQ options:
-k, --kind- Filter by event kind-a, --author- Filter by author pubkey-l, --limit- Limit results-i, --id- Fetch by event ID-e- Filter by referenced events-p- Filter by mentioned pubkey-t- Filter by hashtag--since,--until- Time filters--search- Full-text search (NIP-50)- And more...