| name | kalender |
| description | Calendar skill with user-adaptive backend selection (Flag 3). Default: local SQLite store. Optional: Google Calendar MCP, Routinika or UpToday as backend — controlled via assist/prefs.json. Without preference the LLM asks the user interactively. |
Deutsch — Offizielle Deutsch-Version / Documento Oficial en Deutsch.
Übersicht & Zweck
Capture, query and manage appointments — with a selectable backend. The core
(kalender_core.py) always uses the local SQLite store as the default.
The LLM selects an alternative backend from assist/prefs.json if needed.
Flag 3 — Backend selection:
kalender_backend in prefs.json | Behaviour |
|---|
local (default) | SQLite store in this skill folder |
google | Google Calendar MCP (LLM path only, not in core.py) |
routinika | Routinika calendar via module-installer (not impl. v0.1) |
uptoday | UpToday calendar via module-installer (not impl. v0.1) |
| not set | LLM asks the user interactively for preferred backend |
kalender_core.py implements the local backend exclusively.
Google Calendar MCP and further backends are LLM-driven and are
documented in SKILL.md, not in the core.
Triggers
| Phrase | Action |
|---|
| "Add an appointment" | Capture a new appointment |
| "What is on today?" | Query today's appointments |
| "What is on this week?" | 7-day overview |
| "Appointment [title] on [date]" | Create appointment with date |
| "All appointments in [month]" | Monthly overview |
| "Delete appointment [ID]" | Remove appointment |
| "Export appointment" | ICS export of all/individual appointments |
Workflow & Vorgehen
- Check backend: read
assist/prefs.json → kalender_backend.
- Without preference: LLM asks user: local calendar, Google Calendar or other?
- Local backend: core.py — create/query/delete appointment in SQLite store.
- Google backend: LLM calls Google Calendar MCP directly (core.py not involved).
- Output: Readable appointment list or confirmation.
CLI Entry Point
python kalender_core.py add "Dentist" --date 2026-07-01 --time 10:00 [--duration 60] [--location "Dr. X practice"]
python kalender_core.py today
python kalender_core.py week [--from 2026-06-22]
python kalender_core.py month [--month 2026-07]
python kalender_core.py list [--search "Dentist"] [--limit 50]
python kalender_core.py delete <id>
python kalender_core.py export [--id <id>] [--out calendar.ics]
python kalender_core.py check-backend
python kalender_core.py --store /tmp/kal_test.db today --dry-run
Store
| Property | Value |
|---|
| Type | SQLite (local backend) |
| Path (default) | skills/assist/kalender/store.db |
| Override | --store <path> or env KALENDER_STORE |
| Tables | events |
Schema
CREATE TABLE IF NOT EXISTS events (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
date TEXT NOT NULL,
time TEXT,
duration_min INTEGER,
location TEXT,
description TEXT,
recurrence TEXT,
ics_uid TEXT UNIQUE,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
Attitude
- The core implements only the
local backend — lightweight, no external dependencies.
- ICS export generates a valid RFC 5545 subset (VCALENDAR + VEVENT), importable into all common calendar apps.
- ICS import (parsing) is not yet implemented in v0.1 — planned for v0.2.
- Recurrence rules (
recurrence/RRULE) are stored but not evaluated — evaluation is v0.2.
Privacy
- Local appointments stay in
store.db — no network access in the core.
- When using the Google Calendar backend, Google Calendar MCP processes the data — Google's privacy policy applies.
- Do not commit
store.db to Git (recommended: .gitignore).
Related Resources
- Google Calendar MCP (
mcp__claude_ai_Google_Calendar__*) — alternative backend, LLM-driven
- Skill
assist/haushalt-manager — Routinika integration (presence check pattern)
tools/module-installer/module_installer.py — for future Routinika/UpToday backend integration
Änderungsprotokoll
| Version | Date | Change |
|---|
| 0.1.0 | 2026-06-22 | Initial creation — Flag-3 logic, local backend, ICS export |