Non-interactive CLI for managing local iCalendar (.ics) files
Project description
kcal
Non-interactive CLI for managing local iCalendar (.ics) files. Designed for scripting and AI agent integration — no GUI, no server, just direct .ics file manipulation.
Install
pip install kcal-cli
Or with uv:
uv tool install kcal-cli
Usage
All commands require -f <path> pointing to your .ics file.
List events
kcal -f ~/calendar.ics list
kcal -f ~/calendar.ics list --date 2026-06-25
Recurring events show their frequency in brackets: [weekly], [monthly], etc.
Add a timed event
kcal -f ~/calendar.ics add "Meeting" -s "2026-06-26 09:00" -e "2026-06-26 10:00"
Add an all-day event
kcal -f ~/calendar.ics add "Holiday" -s "2026-07-04" --allday
For multi-day events, set --end to the day after the last day (iCal convention):
kcal -f ~/calendar.ics add "Conference" -s "2026-08-01" -e "2026-08-04" --allday
Add a recurring event
kcal -f ~/calendar.ics add "Standup" -s "2026-06-26 09:00" -e "2026-06-26 09:15" --repeat weekly --byday MO,WE,FR
kcal -f ~/calendar.ics add "Review" -s "2026-07-01 14:00" -e "2026-07-01 15:00" --repeat monthly --count 6
kcal -f ~/calendar.ics add "Sync" -s "2026-07-01 10:00" -e "2026-07-01 11:00" --repeat weekly --interval 2 --until "2026-12-31"
Edit an event
kcal -f ~/calendar.ics edit 1cc4704e --summary "New title"
kcal -f ~/calendar.ics edit 1cc4704e --start "2026-06-26 10:00" --end "2026-06-26 11:00"
kcal -f ~/calendar.ics edit 1cc4704e --start "2026-06-26" --allday
kcal -f ~/calendar.ics edit 1cc4704e --repeat weekly --byday MO,FR
kcal -f ~/calendar.ics edit 1cc4704e --no-repeat
Delete an event
kcal -f ~/calendar.ics delete 1cc4704e
UID prefix matching — only the first few characters of the event UID are needed.
Options
| Flag | Description |
|---|---|
-f, --file |
Path to .ics file (required) |
-s, --start |
Start date/time (YYYY-MM-DD HH:MM or YYYY-MM-DD) |
-e, --end |
End date/time (optional for all-day events) |
--allday |
Create/convert to all-day event (uses VALUE=DATE) |
--repeat |
Recurrence: daily, weekly, monthly, yearly |
--interval |
Repeat every N periods (default: 1) |
--count |
Total number of occurrences |
--until |
Recurrence end date (YYYY-MM-DD) |
--byday |
Days for weekly recurrence (e.g. MO,WE,FR) |
--no-repeat |
Remove recurrence rule (edit only) |
-d, --description |
Event description |
-l, --location |
Event location |
Notes
- Creates the
.icsfile if it doesn't exist - All-day events use proper
VALUE=DATEentries (not midnight-to-midnight) - Works with KOrganizer, GNOME Calendar, Thunderbird, or any iCal-compatible app
- If your calendar app is open, you may need to refresh to see changes
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kcal_cli-0.2.0.tar.gz.
File metadata
- Download URL: kcal_cli-0.2.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2aa73b17766991b5d69a31c5eafb177d5254ae0fa8e0160822eda834b9fde3b3
|
|
| MD5 |
2dbec138d9466aa206f3831ec1698b1c
|
|
| BLAKE2b-256 |
3b7b24ac1cce182f1485dfbe5c4f6b200c223a137678d4eac1cd1a465bb0e03a
|
File details
Details for the file kcal_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: kcal_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c80fbebc67749fb6d006e6799696db63d9b84e3426c738c411662da43c53fc3b
|
|
| MD5 |
101175aa4497dca0907af82ecd670f3a
|
|
| BLAKE2b-256 |
301662b403688e62e6af6ceb1d8f9a762f12dfdf4101015b518e0e2deaaebb74
|