Pre-release
This release is a pre-release and may not be stable for production use.
@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
Metadata
Release files for elizaos-plugin-scheduling 2.0.0a5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| elizaos_plugin_scheduling-2.0.0a5.tar.gz | 31.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 62.1 kB
Release files / elizaos_plugin_scheduling-2.0.0a5.tar.gz
| Download URL | elizaos_plugin_scheduling-2.0.0a5.tar.gz |
|---|---|
| Size | 31.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37f2b542eb1dd7e9ecc65ce44ebf5951bb80fa33a2b01780fdef97d2231833b7
|
|
BLAKE2b-256 checksum How to use checksums |
f57f1580f89ceb40ad0392045e3160b1200fe1653f0887d1433daef185378cd6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.2
|
Release files / elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl
| Download URL | elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl |
|---|---|
| Size | 30.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5ad32e63bc6d6d0ae19164f5dbbdfafdd803a5ddf8516d9472ea585db1e22deb
|
|
BLAKE2b-256 checksum How to use checksums |
d0e7a82230ea76fffd6c455e89b939823687e86b4baf0b3414af6634569f671a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.2
|