Claude-skill-registry calendar
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/calendar-dvdsgl-claude-canvas" ~/.claude/skills/majiayu000-claude-skill-registry-calendar && rm -rf "$T"
manifest:
skills/data/calendar-dvdsgl-claude-canvas/SKILL.mdsource content
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)
displayView-only calendar display. User can navigate weeks but cannot select times.
bun run src/cli.ts show calendar --scenario display --config '{ "title": "My Week", "events": [ {"id": "1", "title": "Meeting", "startTime": "2025-01-06T09:00:00", "endTime": "2025-01-06T10:00:00"} ] }'
meeting-picker
meeting-pickerInteractive 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)
bun run src/cli.ts spawn calendar --scenario meeting-picker --config '{ "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:
or←/→
: Navigate between daysh/l
orn
: Next weekPageDown
orp
: Previous weekPageUp
: Jump to todayt
orq
: QuitEsc
Meeting picker scenario:
- Mouse click: Select a free time slot
: Navigate weeks←/→
: Jump to todayt
orq
: Cancel selectionEsc
Selection Result
interface MeetingSelection { startTime: string; // ISO datetime endTime: string; // ISO datetime duration: number; // Minutes }
API Usage
import { pickMeetingTime } from "${CLAUDE_PLUGIN_ROOT}/src/api"; const result = await pickMeetingTime({ calendars: [ { name: "Alice", color: "blue", events: [...] }, { name: "Bob", color: "green", events: [...] }, ], slotGranularity: 30, }); if (result.success && result.data) { console.log(`Selected: ${result.data.startTime} - ${result.data.endTime}`); }