nc://caldav

v0.1.0Pinned
ThomSharktools/nodecode-caldav: Lists and reads events from your own CalDAV calendar, read-only, as two model tools. - a rewrite of TakeshiTGAL/hermes-plugin-event-read (MIT), credited to TakeshiTGAL9559859· 9 Nov1 commit
test2 filescaldav.lisp15.9 KBcell.lisp5.3 KBics.lisp6.7 KBxml.lisp5.7 KB

nodecode-caldav

CalDAV Calendar: list and read the events of one calendar collection you run, read-only, as two model tools. A Nodecode rewrite of TakeshiTGAL/hermes-plugin-event-read by TakeshiTGAL.

Get it

Tell the agent "add the caldav cell", or run nodecode add nc://caldav.

Set it up

The cell reads one CalDAV collection — the calendar your own server already holds, such as Nextcloud, Radicale or Baikal. Three settings, and the server running is the fourth thing:

{ "caldav": {
    "url": "http://127.0.0.1:5232/user/calendar/",
    "user": "your-account",
    "password": "your-password",
    "days": 7,
    "max_events": 50,
    "timeout_seconds": 20
} }
Member Default Notes
url — the collection's own URL, http or https, with a host and a non-empty path; no user name, query or fragment
user — the account name, sent as HTTP Basic on every request
password — the password; left empty, the variable password_env names is read
password_env CALDAV_PASSWORD the variable holding the password
days 7 the window a list_events call with no arguments reads
max_events 50 how many rows one answer shows before it says the list is cut
timeout_seconds 20 seconds one request may take

A section naming no collection, no user or no password refuses the start and says which one is missing, so neither tool is offered on a calendar the cell cannot read; set it in /settings and (restart-cells "nodecode-caldav"). Over plain http the password travels unencrypted — use https, or a server on this machine. A server that answers 404, 401, or HTML instead of a multistatus says so in the message: the status is named.

Use it

Ask what is on the calendar and the model calls list_events, which sends one calendar-query REPORT with Depth: 1 and answers one block an event: the summary, the start and end as the calendar writes them, a tzid when the value carries one, whether it repeats, and the uid. read_event takes a uid and answers that one event; a CalDAV text match is a substring match, so the exact uid is picked out of the answer and a uid that merely contains it is not returned.

From eval, the same calls:

(caldav:list-events)                                    ; the section's days
(caldav:list-events "20261108T000000Z" "20261115T000000Z")
(caldav:read-event "uid-from-a-list")                   ; one event by uid

/caldav reads the section's days; /caldav 3 three days; /caldav today, /caldav tomorrow and /caldav week the days they name. (help :caldav) is the same guidance the model reads, and *primer* is that text, so a layer can reword it.

Nothing is converted and nothing is expanded: a DATE stays a date, a value ending in Z has no tzid, a missing DTEND is an end that is not stated, and a recurring event is one row whose start is the master's with repeats on it. An empty window is No events in ..., not an error.

What it changes, and what it does not

It is read-only: no event is created, edited or deleted, no scheduling reply is sent, and no file is written. The single network request is the REPORT to the url you set — redirects are not followed by the image's HTTP call and no other host is named — and the credential goes nowhere but that collection.

Add nc://caldav

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at 9559859.

    $ nodecode add nc://caldav

    Or tell the agent add the caldav cell.