Skip to main content

Yandex Calendar plugin for Hermes Agent (list/create/delete events over CalDAV).

Project description

hermes-yandex-calendar

CI coverage License: MIT

Give Hermes Agent read/write access to your Yandex Calendar — list, create, update, respond to, move, and delete events over CalDAV, across multiple calendars, with attendee and busy/free management.

Tested against Hermes 0.19.x, Python 3.11–3.13.

What it does

Registers seven standalone tools:

Tool Purpose
yandex_calendar_list_calendars List the calendars the plugin can use (name + href).
yandex_calendar_list_events List events in a time range from a calendar (returns summary, start/end, location, description, attendees, busy status, and an href).
yandex_calendar_create_event Create an event (summary, start, optional end/location/description/all-day, attendees, busy status, target calendar).
yandex_calendar_update_event Edit an existing event by href: change fields, add/remove attendees, toggle busy/free. Recurrence rules and alarms are preserved.
yandex_calendar_respond_event Respond to a meeting invitation — accept, decline, or tentatively accept.
yandex_calendar_move_event Move an event to another calendar (details, attendees, recurrence, and alarms are kept).
yandex_calendar_delete_event Delete an event by the href returned from a list.

Yandex Calendar has no public REST API, so this plugin speaks CalDAV (https://caldav.yandex.ru) directly — the same protocol Yandex's own docs point third-party clients at.

Multiple calendars

Every tool that reads or writes events takes an optional calendar argument — a calendar name (as returned by yandex_calendar_list_calendars) or its href. Omit it to use the default (first) calendar. update and delete identify the event by its href, which already encodes the calendar it lives in.

You can restrict which calendars the plugin touches with YANDEX_CALENDAR_CALENDARS (see below); the first one in that list becomes the default.

Quick start

  1. Create a Yandex app password (a normal account password will not work for CalDAV): https://id.yandex.ru/security/app-passwords → add a password scoped to "Calendar (CalDAV)".

  2. Install the plugin into Hermes:

    hermes plugins install akinfold/hermes-yandex-calendar --enable
    
  3. Provide credentials — either answer the install prompts, or add them to ~/.hermes/.env:

    YANDEX_CALENDAR_LOGIN=you@yandex.ru
    YANDEX_CALENDAR_APP_PASSWORD=xxxxxxxxxxxxxxxx
    
  4. Enable it in ~/.hermes/config.yaml (third-party plugins are off by default):

    plugins:
      enabled: [yandex_calendar]
    

That's it — ask the agent things like "what's on my calendar next week?" or "add a 30-minute call tomorrow at 3pm".

Configuration

Env var Required Default Meaning
YANDEX_CALENDAR_LOGIN yes Yandex login / email.
YANDEX_CALENDAR_APP_PASSWORD yes App password for CalDAV (see step 1).
YANDEX_CALENDAR_BASE_URL no https://caldav.yandex.ru Override for self-hosted / testing.
YANDEX_CALENDAR_CALENDARS no (all) Comma-separated allow-list of calendar names the plugin may use, e.g. Work,Personal. The first is the default calendar.

Credentials are read from the environment first, then from ~/.hermes/.env, so they work in gateway and subprocess runs. Secret values are never logged.

Dates and times are ISO 8601 (2026-07-25 or 2026-07-25T14:00:00+03:00); a datetime without an offset is treated as UTC.

Install alternatives

  • pip (discovered via the hermes_agent.plugins entry point):
    pip install hermes-yandex-calendar
    
    then add yandex_calendar to plugins.enabled.
  • Drop-in: unzip the release archive into ~/.hermes/plugins/ so you get ~/.hermes/plugins/yandex_calendar/plugin.yaml, then enable it.

Development

python -m venv .venv && source .venv/bin/activate
pip install -e '.[dev]'
ruff check . && ruff format --check .
pytest                       # unit tests (no network)

Live end-to-end tests hit a real account and are deselected by default. They create then delete a throwaway event far in the future, so a successful run leaves no residue:

YANDEX_CALENDAR_LOGIN=you@yandex.ru \
YANDEX_CALENDAR_APP_PASSWORD=xxxx \
pytest -m e2e

License

MIT — see LICENSE.

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

hermes_yandex_calendar-0.1.0.tar.gz (30.8 kB view details)

Uploaded Source

Built Distribution

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

hermes_yandex_calendar-0.1.0-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file hermes_yandex_calendar-0.1.0.tar.gz.

File metadata

  • Download URL: hermes_yandex_calendar-0.1.0.tar.gz
  • Upload date:
  • Size: 30.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for hermes_yandex_calendar-0.1.0.tar.gz
Algorithm Hash digest
SHA256 862a75df9a7f25508251cd6479d11d83d9443923c46ffa32d0415a097bea9309
MD5 890842c6e1c65bdac7083235cdd24951
BLAKE2b-256 6311a4849ff35229bb7bce7451502447ffaaf7fe01dd571fae7ece170daf7024

See more details on using hashes here.

Provenance

The following attestation bundles were made for hermes_yandex_calendar-0.1.0.tar.gz:

Publisher: release-publish.yml on akinfold/hermes-yandex-calendar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hermes_yandex_calendar-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for hermes_yandex_calendar-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc684afb8da5692b1cd1bddef2d03240e9f2de108c67c66cff8eaeb58cd92eb9
MD5 431a5f588d8983e774a0cb074bbc508a
BLAKE2b-256 1cca9b642b478c509b6ed6592cf6b12a5144a4c20b60973ab5cb79d858a063ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for hermes_yandex_calendar-0.1.0-py3-none-any.whl:

Publisher: release-publish.yml on akinfold/hermes-yandex-calendar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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