Skip to main content

Nostr-native scheduling for OpenClaw AI agents — read availability, book meetings, negotiate times over relay

Project description

NostrCalendar for OpenClaw

Give your AI agent a calendar.

Nostr-native scheduling that lets AI agents manage availability, book meetings, and negotiate times — all over relays, no centralized server. Think Calendly, but sovereign.

Why?

Scheduling is one of the most common things humans delegate. But every scheduling tool today is a walled garden — your availability lives on someone else's server, behind someone else's login.

NostrCalendar stores availability as Nostr events on your relay. Your AI agent reads and writes these events with its own keypair. Two agents can negotiate a meeting for their humans without either human lifting a finger.

What your agent can do:

  • Publish and update availability schedules
  • Check anyone's free slots on any relay
  • Send encrypted booking requests via DM
  • Accept, decline, or cancel meetings
  • Negotiate times with other agents (agent-to-agent)
  • Find mutual availability across multiple days

Install

pip install nostrcalendar

v0.2.4 — part of the coordinated 2026-07 correctness release (staged, pending PyPI publish). The whole Nostr library family was audited together and every package is now verified against a shared spine of known-answer test vectors (NIP-44 v2, NIP-49, NIP-19 TLV, BIP-340) so encode/decode bugs can't hide inside self-round-trip tests. This release fixes the encrypt/decrypt argument order so every booking and negotiation flow actually publishes. See CHANGELOG.md.

Quick Start

import asyncio
from nostrkey import Identity
from nostrcalendar import (
    AvailabilityRule, DayOfWeek, TimeSlot,
    publish_availability, get_free_slots, create_booking,
)
from datetime import datetime

async def main():
    identity = Identity.generate()
    relay = "wss://relay.nostrkeep.com"

    # Publish availability
    rule = AvailabilityRule(
        slots={
            DayOfWeek.MONDAY: [TimeSlot("09:00", "12:00"), TimeSlot("14:00", "17:00")],
            DayOfWeek.WEDNESDAY: [TimeSlot("10:00", "16:00")],
        },
        slot_duration_minutes=30,
        buffer_minutes=15,
        timezone="America/Vancouver",
    )
    await publish_availability(identity, rule, relay)

    # Check someone's availability
    slots = await get_free_slots("their_pubkey_hex", relay, datetime(2026, 3, 15))
    for slot in slots:
        print(f"{slot.start} - {slot.end}")

asyncio.run(main())

Agent-to-Agent Negotiation

from nostrcalendar import find_mutual_availability
from datetime import datetime, timedelta

dates = [datetime(2026, 3, d) for d in range(15, 20)]
mutual = await find_mutual_availability(my_agent, other_pubkey, relay, dates)

for date, slots in mutual.items():
    print(f"{date}: {', '.join(f'{s.start}-{s.end}' for s in slots)}")

NIPs Implemented

NIP Purpose
NIP-01 Basic event structure
NIP-04 Encrypted DMs (booking requests)
NIP-09 Event deletion (cancellations)
NIP-52 Calendar events & RSVPs
NIP-78 App-specific data (availability rules)

OpenClaw Skill

NostrCalendar is published on ClawHub as the nostrcalendar skill. Install it in your OpenClaw agent to give it scheduling capabilities.

License

MIT — Humanjava Enterprises Inc.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nostrcalendar-0.2.4.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nostrcalendar-0.2.4-py3-none-any.whl (16.5 kB view details)

Uploaded Python 3

File details

Details for the file nostrcalendar-0.2.4.tar.gz.

File metadata

  • Download URL: nostrcalendar-0.2.4.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for nostrcalendar-0.2.4.tar.gz
Algorithm Hash digest
SHA256 f58d374fe835cf3162a34d4e7321a25372aee5ebe04c643eb56f32b86ad9f433
MD5 875f5fb128b5fe08d1f87bbb091a17c5
BLAKE2b-256 b8313cc114ae98ea96edefd56de91d40658ea02471d6359bfebb98d1ebb73e07

See more details on using hashes here.

File details

Details for the file nostrcalendar-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: nostrcalendar-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 16.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for nostrcalendar-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9fcd24ba9524ecba04f08976917602db5751cb6cb528b0edeab33560318dcd63
MD5 e33a9fecc8c2f56029386e754f8ddb10
BLAKE2b-256 cbe982bbc2e8e5e18541e4785d7644ec6d5c7daa4d07e860054dad2e23f49150

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page