Access local system resources including Calendar on macOS and Windows. Use this skill when you need to manage user's schedule directly on their device.
Use the local-tools skill when you need to:
Examples of when to use:
┌──────────┐ Bash/PowerShell ┌─────────────────────────────────────────────────────────────┐
│ Claude │──────────────────────▶│ calendar.sh / calendar.ps1 │
│ │ │ ├─ macOS: osascript -l JavaScript (JXA) ──▶ Calendar.app │
│ │ │ └─ Windows: PowerShell ──▶ Outlook COM API │
└──────────┘ └─────────────────────────────────────────────────────────────┘
Architecture:
CLI Scripts - Platform-specific scripts, no HTTP server needed
calendar.sh - Bash script for macOScalendar.ps1 - PowerShell script for WindowsLocal Calendar Access - Direct access to system calendar
JSON Output - Structured data format for easy parsing
| Platform | Implementation | Calendar App | Status |
|---|---|---|---|
| macOS 10.10+ | JXA + Calendar.app | Calendar.app | ✅ Fully Supported |
| Windows 7+ | PowerShell + COM | Microsoft Outlook | ✅ Fully Supported |
| Linux | - | - | ❌ Not Supported |
IMPORTANT: How to Locate the Script
When you read this SKILL.md file using the Read tool, you receive its absolute path (e.g., /Users/username/.../SKILLs/local-tools/SKILL.md).
To construct the script path:
/scripts/calendar.sh (macOS) or /scripts/calendar.ps1 (Windows)Example:
# If SKILL.md is at: /Users/username/path/to/SKILLs/local-tools/SKILL.md
# Then the script is: /Users/username/path/to/SKILLs/local-tools/scripts/calendar.sh
bash "/Users/username/path/to/SKILLs/local-tools/scripts/calendar.sh" <operation> [options]
In all examples below, <skill-dir>/scripts/calendar.sh is a placeholder. Replace it with the actual absolute path.
DO:
search command for searching birthdays/anniversariesDON'T:
Example - Searching for birthdays:
# Correct approach: Search directly, don't trial-and-error
bash "<skill-dir>/scripts/calendar.sh" search --query "birthday"
# If permission error returned, directly tell user:
# "Calendar access permission is required. Please open System Settings > Privacy & Security > Calendar, and authorize Terminal or LobsterAI"
# List events for next 7 days (default)
bash "<skill-dir>/scripts/calendar.sh" list
# List events for specific date range
bash "<skill-dir>/scripts/calendar.sh" list \
--start "2026-02-12T00:00:00" \
--end "2026-02-19T23:59:59"
# List events from specific calendar (macOS)
bash "<skill-dir>/scripts/calendar.sh" list \
--calendar "Work"
# Create a simple event
bash "<skill-dir>/scripts/calendar.sh" create \
--title "Team Meeting" \
--start "2026-02-13T14:00:00" \
--end "2026-02-13T15:00:00"
# Create event with location and notes
bash "<skill-dir>/scripts/calendar.sh" create \
--title "Client Call" \
--start "2026-02-14T10:00:00" \
--end "2026-02-14T11:00:00" \
--calendar "Work" \
--location "Conference Room A" \
--notes "Discuss Q1 roadmap"
# Update event title
bash "<skill-dir>/scripts/calendar.sh" update \
--id "EVENT-ID" \
--title "Updated Meeting Title"
# Update event time
bash "<skill-dir>/scripts/calendar.sh" update \
--id "EVENT-ID" \
--start "2026-02-13T15:00:00" \
--end "2026-02-13T16:00:00"
bash "<skill-dir>/scripts/calendar.sh" delete \
--id "EVENT-ID"
# Search for events containing keyword (searches ALL calendars)
bash "<skill-dir>/scripts/calendar.sh" search \
--query "meeting"
# Search in specific calendar only
bash "<skill-dir>/scripts/calendar.sh" search \
--query "project" \
--calendar "Work"
Note: When --calendar is not specified, the search operation will look through all available calendars on both macOS and Windows.
All commands return JSON with the following structure:
{
"success": true,
"data": {
"events": [
{
"eventId": "E621F8C4-...",
"title": "Team Meeting",
"startTime": "2026-02-13T14:00:00.000Z",
"endTime": "2026-02-13T15:00:00.000Z",
"location": "Conference Room",
"notes": "Weekly sync",
"calendar": "Work",
"allDay": false
}
],
"count": 1
}
}
{
"success": false,
"error": {
"code": "CALENDAR_ACCESS_ERROR",
"message": "Calendar access permission is required...",
"recoverable": true,
"permissionRequired": true
}
}
| Code | Meaning | Recoverable |
|---|---|---|
CALENDAR_ACCESS_ERROR | Permission denied or calendar not accessible | Yes |
INVALID_INPUT | Missing required parameters | No |
EVENT_NOT_FOUND | Event ID not found | No |
OUTLOOK_NOT_AVAILABLE | Microsoft Outlook not installed (Windows) | Yes |
When using the list command with time ranges:
YYYY-MM-DDTHH:mm:ss$(date ...)2026-02-13T00:00:002026-02-13T23:59:592026-02-14T09:00:002026-02-16T00:00:00Why: The script expects local time strings that match your system timezone. Shell substitutions may not execute correctly in all environments.
# User asks: "What meetings do I have today?"
# Claude's approach: Calculate today's date and query full day from 00:00 to 23:59
# IMPORTANT: Claude should replace 2026-02-13 with the actual current date
bash "<skill-dir>/scripts/calendar.sh" list \
--start "2026-02-13T00:00:00" \
--end "2026-02-13T23:59:59"
# User asks: "What's on my schedule tomorrow?"
# Claude should calculate tomorrow's date (e.g., if today is 2026-02-13, tomorrow is 2026-02-14)
bash "<skill-dir>/scripts/calendar.sh" list \
--start "2026-02-14T00:00:00" \
--end "2026-02-14T23:59:59"
# User asks: "Schedule a meeting for tomorrow at 3 PM"
# Claude's approach:
bash "<skill-dir>/scripts/calendar.sh" create \
--title "Meeting" \
--start "2026-02-13T15:00:00" \
--end "2026-02-13T16:00:00" \
--calendar "Work"
# User asks: "Find all meetings about the project"
# Claude's approach:
bash "<skill-dir>/scripts/calendar.sh" search \
--query "project" \
--calendar "Work"
# User asks: "Am I free tomorrow afternoon?"
# Claude's approach:
# 1. List tomorrow's events
# 2. Analyze time slots
# 3. Report availability
bash "<skill-dir>/scripts/calendar.sh" list \
--start "2026-02-14T00:00:00" \
--end "2026-02-14T23:59:59"
The list command uses interval overlap detection:
Examples:
Before creating an event, list existing events to avoid conflicts:
# First check existing events
bash "<skill-dir>/scripts/calendar.sh" list
# Then create if no conflict
bash "<skill-dir>/scripts/calendar.sh" create ...
Specify the calendar to keep events organized:
bash "<skill-dir>/scripts/calendar.sh" create \
--title "Team Meeting" \
--calendar "Work" \
...
Always search first to get the correct event ID:
# Search to find event ID
bash "<skill-dir>/scripts/calendar.sh" search --query "meeting"
# Then update or delete
bash "<skill-dir>/scripts/calendar.sh" update --id "FOUND-ID" ...
Parse the response and handle errors:
result=$(bash "<skill-dir>/scripts/calendar.sh" list)
if echo "$result" | grep -q '"success":true'; then
# Process events
events=$(echo "$result" | jq '.data.events')
else
# Handle error
error=$(echo "$result" | jq '.error.message')
echo "Failed: $error"
fi
YYYY-MM-DDTHH:mm:ss)Permission Denied:
Error: Calendar access permission is required
Solution: Open System Settings > Privacy & Security > Calendar, authorize Terminal or LobsterAI
Script Not Found: