Skip to main content
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 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

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.

Release history Release notifications | RSS feed

This release

2.0.0a5 This release

2 files

Supported by

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