Skip to main content

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 meeting
  • CONFIRM_MEETING: Confirm or decline attendance
  • SET_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

elizaos_plugin_scheduling-2.0.0a5.tar.gz (31.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl (30.4 kB view details)

Uploaded Python 3

File details

Details for the file elizaos_plugin_scheduling-2.0.0a5.tar.gz.

File metadata

File hashes

Hashes for elizaos_plugin_scheduling-2.0.0a5.tar.gz
Algorithm Hash digest
SHA256 37f2b542eb1dd7e9ecc65ce44ebf5951bb80fa33a2b01780fdef97d2231833b7
MD5 7d319fd89e2fc3b5c8fac038401e7d91
BLAKE2b-256 f57f1580f89ceb40ad0392045e3160b1200fe1653f0887d1433daef185378cd6

See more details on using hashes here.

File details

Details for the file elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl.

File metadata

File hashes

Hashes for elizaos_plugin_scheduling-2.0.0a5-py3-none-any.whl
Algorithm Hash digest
SHA256 5ad32e63bc6d6d0ae19164f5dbbdfafdd803a5ddf8516d9472ea585db1e22deb
MD5 e460b78651bc0d70c6cf3412e630ff99
BLAKE2b-256 d0e7a82230ea76fffd6c455e89b939823687e86b4baf0b3414af6634569f671a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page