Why Use This
This skill provides specialized capabilities for dvdsgl's codebase.
Use Cases
- Developing new features in the dvdsgl repository
- Refactoring existing code to follow dvdsgl standards
- Understanding and working with dvdsgl's codebase structure
Skill Snapshot
Auto scan of skill assets. Informational only.
Valid SKILL.md
Checks against SKILL.md specification
Source & Community
Updated At Jan 8, 2026, 02:19 AM
Skill Stats
SKILL.md 144 Lines
Total Files 1
Total Size 0 B
License NOASSERTION
---
name: calendar
description: |
Calendar canvas for displaying events and picking meeting times.
Use when showing calendar views or when users need to select available time slots.
---
# 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.
```bash
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`
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)
```bash
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
```typescript
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
```typescript
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 `h/l`: Navigate between days
- `n` or `PageDown`: Next week
- `p` or `PageUp`: Previous week
- `t`: Jump to today
- `q` or `Esc`: Quit
**Meeting picker scenario:**
- **Mouse click**: Select a free time slot
- `←/→`: Navigate weeks
- `t`: Jump to today
- `q` or `Esc`: Cancel selection
## Selection Result
```typescript
interface MeetingSelection {
startTime: string; // ISO datetime
endTime: string; // ISO datetime
duration: number; // Minutes
}
```
## API Usage
```typescript
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}`);
}
```