brainstorming
Structured design dialogue that validates ideas before implementation begins.
calendar-scheduling
Calendar event formatting, conflict detection, meeting optimization, and smart scheduling. Use when creating calendar events, finding meeting times, or managing schedules.
Full skill instructions
Tools for calendar event management, conflict detection, and intelligent scheduling.
Format calendar event:
python scripts/format_event.py --title "Team Meeting" --start "2026-01-20 14:00" --duration "1h" --output event.json
Detect conflicts:
python scripts/detect_conflicts.py --events existing_events.json --new-event new_event.json
Find free time:
python scripts/find_free_time.py --calendars user1.json user2.json --duration "1h" --business-hours
Google Calendar format:
{
"summary": "Team Meeting",
"description": "Weekly team sync",
"start": {
"dateTime": "2026-01-20T14:00:00-08:00",
"timeZone": "America/Los_Angeles"
},
"end": {
"dateTime": "2026-01-20T15:00:00-08:00",
"timeZone": "America/Los_Angeles"
},
"attendees": [
{"email": "[email protected]"},
{"email": "[email protected]"}
],
"location": "Conference Room A",
"reminders": {
"useDefault": false,
"overrides": [
{"method": "popup", "minutes": 15}
]
}
}
{
"summary": "Product Review Meeting",
"duration": "1h",
"attendees": ["[email protected]"],
"location": "Zoom",
"reminders": [15]
}
{
"summary": "Company Holiday",
"start": {"date": "2026-01-20"},
"end": {"date": "2026-01-21"}
}
{
"summary": "Weekly Standup",
"recurrence": ["RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR"],
"start": "2026-01-20T09:00:00",
"duration": "15m"
}
{
"summary": "Focus: Deep Work",
"transparency": "opaque",
"visibility": "private",
"duration": "2h"
}
def detect_conflicts(existing_events: list, new_event: dict) -> list:
"""
Detect scheduling conflicts.
Returns list of conflicting events.
"""
conflicts = []
new_start = parse_datetime(new_event['start'])
new_end = parse_datetime(new_event['end'])
for event in existing_events:
event_start = parse_datetime(event['start'])
event_end = parse_datetime(event['end'])
# Check for overlap
if (new_start < event_end and new_end > event_start):
conflicts.append(event)
return conflicts
Hard Conflicts:
Soft Conflicts:
Add buffer between meetings:
BUFFER_MINUTES = 15
def has_buffer(event1, event2, buffer_minutes=15):
"""Check if events have sufficient buffer."""
gap = event2_start - event1_end
return gap.total_seconds() >= (buffer_minutes * 60)
Algorithm to find available time slots:
def find_free_time(
calendars: list,
duration_minutes: int,
start_date: datetime,
end_date: datetime,
business_hours_only: bool = True
) -> list:
"""
Find available time slots across multiple calendars.
Returns list of (start, end) tuples.
"""
# 1. Collect all busy times
busy_times = []
for calendar in calendars:
busy_times.extend(get_busy_times(calendar))
# 2. Sort busy times
busy_times.sort(key=lambda x: x[0])
# 3. Find gaps
free_slots = []
current_time = start_date
for busy_start, busy_end in busy_times:
# Check gap before this busy time
if (busy_start - current_time).total_seconds() >= duration_minutes * 60:
# Filter by business hours
if business_hours_only:
slot = filter_business_hours(current_time, busy_start)
if slot:
free_slots.append(slot)
else:
free_slots.append((current_time, busy_start))
current_time = max(current_time, busy_end)
return free_slots
Default business hours:
BUSINESS_HOURS = {
'monday': {'start': '09:00', 'end': '17:00'},
'tuesday': {'start': '09:00', 'end': '17:00'},
'wednesday': {'start': '09:00', 'end': '17:00'},
'thursday': {'start': '09:00', 'end': '17:00'},
'friday': {'start': '09:00', 'end': '17:00'},
'saturday': None, # Not a business day
'sunday': None # Not a business day
}
Optimal meeting times:
Meeting length guidelines:
Time-based:
Context-based:
def calculate_reminder_time(event: dict) -> int:
"""
Calculate optimal reminder time based on event type.
Returns minutes before event.
"""
event_type = event.get('type', 'meeting')
duration = event.get('duration_minutes', 30)
if event_type == 'interview':
return 60 # 1 hour before
elif event_type == 'presentation':
return 120 # 2 hours before (prep time)
elif event_type == 'external_meeting':
return 30 # 30 minutes before
elif duration >= 60:
return 30 # Long meetings: 30 min before
else:
return 15 # Short meetings: 15 min before
Format a calendar event.
Usage:
python scripts/format_event.py \
--title "Team Meeting" \
--start "2026-01-20 14:00" \
--duration "1h" \
--attendees "[email protected],[email protected]" \
--location "Conference Room A" \
--reminder 15 \
--output event.json
Arguments:
--title: Event title (required)--start: Start date/time (YYYY-MM-DD HH:MM)--duration: Duration (e.g., "1h", "30m")--attendees: Comma-separated email addresses--location: Meeting location or video link--reminder: Reminder minutes before event--output: Output JSON fileDetect scheduling conflicts.
Usage:
python scripts/detect_conflicts.py \
--events existing_events.json \
--new-event new_event.json \
--buffer 15
Arguments:
--events: JSON file with existing events--new-event: JSON file with new event to check--buffer: Required buffer minutes between eventsOutput:
{
"has_conflicts": true,
"hard_conflicts": [
{
"event": "Existing Meeting",
"start": "2026-01-20T14:00:00",
"end": "2026-01-20T15:00:00",
"reason": "Overlapping time slot"
}
],
"soft_conflicts": [
{
"event": "Previous Meeting",
"reason": "No buffer time (back-to-back)"
}
]
}
Find available time slots.
Usage:
python scripts/find_free_time.py \
--calendars user1.json user2.json \
--duration "1h" \
--start "2026-01-20" \
--end "2026-01-27" \
--business-hours \
--timezone "America/Los_Angeles"
Arguments:
--calendars: JSON files with calendar events--duration: Required duration (e.g., "1h", "30m")--start: Start date to search from--end: End date to search until--business-hours: Only suggest business hours--timezone: Timezone for resultsOutput:
{
"suggested_times": [
{
"start": "2026-01-20T10:00:00-08:00",
"end": "2026-01-20T11:00:00-08:00",
"score": 95,
"reason": "Optimal time (mid-morning)"
},
{
"start": "2026-01-20T14:00:00-08:00",
"end": "2026-01-20T15:00:00-08:00",
"score": 85,
"reason": "Good time (early afternoon)"
}
]
}
See rules/scheduling_rules.md for detailed scheduling guidelines:
1. Meeting Length
2. Meeting Frequency
3. Meeting Timing
4. Attendees
Block focus time:
Protection:
COMMON_TIMEZONES = {
'PT': 'America/Los_Angeles',
'ET': 'America/New_York',
'UTC': 'UTC',
'GMT': 'Europe/London',
'CET': 'Europe/Paris',
'IST': 'Asia/Kolkata',
'JST': 'Asia/Tokyo'
}
def find_overlap_hours(timezone1, timezone2):
"""Find overlapping business hours between timezones."""
from calendar_scheduling import find_free_time, format_event
# Find available time
free_slots = find_free_time(
calendars=[user1_calendar, user2_calendar],
duration_minutes=60,
business_hours_only=True
)
# Format event
event = format_event(
title="Team Sync",
start=free_slots[0]['start'],
duration="1h",
attendees=['[email protected]', '[email protected]']
)
# Create in Google Calendar
calendar_client.create_event(event)
from calendar_scheduling import detect_conflicts
# Check for conflicts before accepting invite
conflicts = detect_conflicts(existing_events, new_invite)
if conflicts['has_conflicts']:
# Send message suggesting alternative time
message = f"I have a conflict at that time. Alternative times: {suggest_alternatives()}"
slack_client.send_message(message)
examples/weekly_sync_event.json - Weekly team meetingexamples/one_on_one_event.json - 1:1 meeting formatexamples/all_hands_event.json - Company all-handsStructured design dialogue that validates ideas before implementation begins.
Comprehensive design intelligence for web and mobile UI/UX across 10 technology stacks.
Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.
Introduction to the obra skills system with mandatory skill invocation rules and best practices.
Execute a written implementation plan with critical review and task checkpoints.
Delegate independent tasks to specialized agents working concurrently with isolated context.
Isolated git worktrees with smart directory selection and safety verification.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Plan searchable and shareable content that drives traffic, builds authority, and generates leads.
README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.
Brainstorm and prioritize marketing strategies tailored to your SaaS stage, budget, and goals.
Plan and optimize your website's page hierarchy, navigation, URL structure, and internal linking.
The world's fastest calendar for remote work
Capture, organize, and utilize your knowledge effortlessly.
Instant Summaries of Audio & Video Interviews with AnySummary
Transform PDFs into engaging mind maps.
Chat with any PDF instantly
Create an optimal daily plan using your voice
A productivity platform to centralize organizational knowledge and workflows with contextual AI assistance.
AskYourPDF Pricing Plans: Tailored to Your Needs