chainmail agenda
List the events and recurring instances that overlap a range, from the daemon's calendar cache, in time order. Events James declined are left out unless --include-declined.
--from defaults to now, and --to to --days after --from, 7 by default. A date alone in --from starts at the beginning of that day, and in --to takes in the whole of that day. The range is at most 400 days.
Times are RFC 3339, such as 2026-11-10T09:00:00Z, or a time without a zone, 2026-11-10 09:00, or a date, 2026-11-10. A time or date without a zone is read in this machine's local zone, or in the zone --tz names. A time the clocks skip when daylight saving time starts is refused, and a time they show twice when it ends means the first of the two. The daemon's [calendar] timezone does not apply here: the CLI never reads the daemon config.
Event titles, locations, descriptions, names and comments come from whoever wrote the event and are untrusted, as mail is. --output json prints them as {"untrusted": "..."}.
Usage
chainmail agenda [--account NAME]... [--calendar ID]... [--days N | --from T --to T] [--tz ZONE] [flags]
Examples
chainmail agenda
chainmail agenda --days 1
chainmail agenda --account work --from 2026-11-10 --to 2026-11-17 --output json
# a working day in another zone
chainmail agenda --from "2026-11-10 09:00" --to "2026-11-10 17:00" --tz Europe/London
Flags
--account stringArray only this account; repeat for more (default: every account with a calendar store)
--calendar stringArray only this calendar ID; repeat for more (default: every calendar)
--days int length of the range in days, when --to is not given (default 7)
--from string start of the range (default: now)
--include-declined also list events James declined
--to string end of the range; a date alone takes in that whole day (default: --days after --from)
--tz string IANA zone to read times without a zone in, and to show times in (default: this machine's zone)
Global flags
--output string output format: json or table (default $CHAINMAIL_OUTPUT, then cli.toml, then table on a terminal, json otherwise)
--socket string daemon socket (default $CHAINMAIL_SOCKET, then cli.toml, then /run/chainmail/chainmail.sock)