calendar
Calendar canvas for displaying events and picking meeting times.Use when showing calendar views or when users need to select available time slots.
When & Why to Use This Skill
This Claude skill provides an interactive calendar canvas designed to streamline meeting scheduling and event management. It enables users to visualize complex schedules, overlay multiple calendars to identify overlapping availability, and intuitively select time slots through a graphical interface, significantly enhancing coordination and time management efficiency.
Use Cases
- Team Coordination: Overlay multiple team members' calendars to quickly find and select a mutually available time for group syncs or planning sessions.
- Interactive Meeting Selection: Enable users to browse available slots and click to pick specific meeting times, with support for configurable durations and time granularity.
- Personal Schedule Management: Visualize weekly agendas and block out dedicated time for deep work or specific tasks using intuitive navigation controls.
- Availability Assessment: Quickly scan a team's free/busy status for a specific day or week to determine the best windows for urgent ad-hoc discussions.
| name | calendar |
|---|---|
| description | | |
Calendar Canvas
Display calendar views and enable interactive meeting time selection.
Example Prompts
Try asking Claude:
- "Schedule a 30-minute meeting with Alice and Bob sometime next week"
- "Find a time when the engineering team is all free on Tuesday"
- "Show me my calendar for this week"
- "When is everyone available for a 1-hour planning session?"
- "Block off 2-4pm on Friday for focused work"
Scenarios
display (default)
View-only calendar display. User can navigate weeks but cannot select times.
canvas_spawn({
kind: "calendar",
scenario: "display",
config: JSON.stringify({
title: "My Week",
events: [
{id: "1", title: "Meeting", startTime: "2025-01-06T09:00:00", endTime: "2025-01-06T10:00:00"}
]
})
})
meeting-picker
Interactive scenario for selecting a free time slot when viewing multiple people's calendars.
- Shows multiple calendars overlaid with different colors
- User can click on free slots to select a meeting time
- Selection is sent back via IPC
- Supports configurable time slot granularity (15/30/60 min)
canvas_spawn({
kind: "calendar",
scenario: "meeting-picker",
config: JSON.stringify({
calendars: [
{
name: "Alice",
color: "blue",
events: [
{id: "1", title: "Standup", startTime: "2025-01-06T09:00:00", endTime: "2025-01-06T09:30:00"}
]
},
{
name: "Bob",
color: "green",
events: [
{id: "2", title: "Call", startTime: "2025-01-06T14:00:00", endTime: "2025-01-06T15:00:00"}
]
}
],
slotGranularity: 30,
minDuration: 30,
maxDuration: 120
})
})
Configuration
Display Config
interface CalendarConfig {
title?: string;
events: CalendarEvent[];
}
interface CalendarEvent {
id: string;
title: string;
startTime: string; // ISO datetime
endTime: string; // ISO datetime
color?: string; // blue, green, red, yellow, magenta, cyan
}
Meeting Picker Config
interface MeetingPickerConfig {
calendars: Calendar[];
slotGranularity?: number; // 15, 30, or 60 minutes (default: 30)
minDuration?: number; // Minimum meeting duration in minutes
maxDuration?: number; // Maximum meeting duration in minutes
}
interface Calendar {
name: string; // Person's name
color: string; // Calendar color
events: CalendarEvent[]; // Their busy times
}
Controls
Display scenario:
<-/->orh/l: Navigate between daysnorPageDown: Next weekporPageUp: Previous weekt: Jump to todayqorEsc: Quit
Meeting picker scenario:
- Mouse click: Select a free time slot
<-/->: Navigate weekst: Jump to todayqorEsc: Cancel selection
Selection Result
interface MeetingSelection {
startTime: string; // ISO datetime
endTime: string; // ISO datetime
duration: number; // Minutes
}
API Usage
// Spawn meeting picker
const result = canvas_spawn({
kind: "calendar",
scenario: "meeting-picker",
config: JSON.stringify({
calendars: [
{ name: "Alice", color: "blue", events: [...] },
{ name: "Bob", color: "green", events: [...] },
],
slotGranularity: 30,
})
});
// Wait for user interaction, then close
// The canvas will send selection via IPC when user clicks