elizaOS plugin for scheduling and calendar coordination
Project description
@elizaos/plugin-scheduling
Scheduling and calendar coordination plugin for elizaOS agents.
Features
- Multi-party Availability Coordination: Find meeting times that work for all participants
- Time Zone Aware: Handles availability across different time zones
- Calendar Invites: Generate ICS files for calendar integration
- Automated Reminders: Schedule SMS/email reminders before meetings
- Meeting Lifecycle: Track meetings from proposal to completion
- Rescheduling Support: Handle cancellations and reschedules gracefully
Installation
npm install @elizaos/plugin-scheduling
Usage
import { schedulingPlugin } from '@elizaos/plugin-scheduling';
import { createCharacter } from '@elizaos/core';
const character = createCharacter({
name: 'Scheduler',
plugins: [schedulingPlugin],
});
API
SchedulingService
The core service for managing scheduling operations.
Save Availability
const schedulingService = runtime.getService<SchedulingService>('SCHEDULING');
await schedulingService.saveAvailability(entityId, {
timeZone: 'America/New_York',
weekly: [
{ day: 'mon', startMinutes: 540, endMinutes: 1020 }, // 9am-5pm
{ day: 'tue', startMinutes: 540, endMinutes: 1020 },
{ day: 'wed', startMinutes: 540, endMinutes: 1020 },
{ day: 'thu', startMinutes: 540, endMinutes: 1020 },
{ day: 'fri', startMinutes: 540, endMinutes: 1020 },
],
exceptions: [
{ date: '2024-01-20', unavailable: true, reason: 'Holiday' },
],
});
Create Scheduling Request
const request = await schedulingService.createSchedulingRequest(
roomId,
'Coffee Chat',
[
{ entityId: user1Id, name: 'Alice', availability: aliceAvailability },
{ entityId: user2Id, name: 'Bob', availability: bobAvailability },
],
{
minDurationMinutes: 30,
preferredDurationMinutes: 60,
maxDaysOut: 7,
preferredTimes: ['afternoon'],
locationType: 'in_person',
}
);
Find Available Slots
const result = await schedulingService.findAvailableSlots(request);
if (result.success) {
// result.proposedSlots contains ranked time slots
const bestSlot = result.proposedSlots[0];
console.log(`Best slot: ${bestSlot.slot.start} - Score: ${bestSlot.score}`);
}
Create Meeting
const meeting = await schedulingService.createMeeting(request, slot, {
type: 'in_person',
name: 'Blue Bottle Coffee',
address: '123 Main St',
city: 'San Francisco',
});
Confirm Attendance
await schedulingService.confirmParticipant(meetingId, entityId);
Actions
The plugin provides conversational actions:
SCHEDULE_MEETING: Start scheduling a meetingCONFIRM_MEETING: Confirm or decline attendanceSET_AVAILABILITY: Update availability preferences
Provider
The SCHEDULING_CONTEXT provider gives agents context about:
- Upcoming meetings
- Pending confirmations
- User's availability settings
Types
Availability
interface Availability {
timeZone: string; // IANA time zone
weekly: AvailabilityWindow[]; // Recurring windows
exceptions: AvailabilityException[]; // One-off changes
}
interface AvailabilityWindow {
day: DayOfWeek; // 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun'
startMinutes: number; // Minutes from midnight (0-1439)
endMinutes: number; // Minutes from midnight (0-1439)
}
Meeting
interface Meeting {
id: string;
title: string;
slot: TimeSlot;
location: MeetingLocation;
participants: MeetingParticipant[];
status: MeetingStatus;
rescheduleCount: number;
}
type MeetingStatus =
| 'proposed'
| 'confirmed'
| 'scheduled'
| 'in_progress'
| 'completed'
| 'cancelled'
| 'rescheduling'
| 'no_show';
Configuration
const config: SchedulingServiceConfig = {
defaultReminderMinutes: [1440, 120], // 24h and 2h before
maxProposals: 3,
defaultMaxDaysOut: 7,
minMeetingDuration: 30,
defaultMeetingDuration: 60,
autoSendCalendarInvites: true,
autoScheduleReminders: true,
};
Calendar Integration
Generate ICS files for calendar apps:
import { generateIcs } from '@elizaos/plugin-scheduling';
const ics = generateIcs({
uid: meeting.id,
title: meeting.title,
start: meeting.slot.start,
end: meeting.slot.end,
timeZone: meeting.slot.timeZone,
location: meeting.location.address,
organizer: { name: 'Ori', email: 'ori@soulmates.app' },
attendees: meeting.participants.map(p => ({
name: p.name,
email: p.email,
role: p.role,
})),
reminderMinutes: [1440, 120],
});
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file elizaos_plugin_scheduling-2.0.0a5.tar.gz.
File metadata
- Download URL: elizaos_plugin_scheduling-2.0.0a5.tar.gz
- Upload date:
- Size: 31.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37f2b542eb1dd7e9ecc65ce44ebf5951bb80fa33a2b01780fdef97d2231833b7
|
|
| MD5 |
7d319fd89e2fc3b5c8fac038401e7d91
|
|
| BLAKE2b-256 |
f57f1580f89ceb40ad0392045e3160b1200fe1653f0887d1433daef185378cd6
|
File details
Details for the file elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl.
File metadata
- Download URL: elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl
- Upload date:
- Size: 30.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ad32e63bc6d6d0ae19164f5dbbdfafdd803a5ddf8516d9472ea585db1e22deb
|
|
| MD5 |
e460b78651bc0d70c6cf3412e630ff99
|
|
| BLAKE2b-256 |
d0e7a82230ea76fffd6c455e89b939823687e86b4baf0b3414af6634569f671a
|