Docs/Developers/AI Format Reference

AI Format Reference

Complete reference for the x_elysium extension fields in .ot files.

This is the same reference file auto-generated by Elysium in your OpenTime folder when BYOAI is enabled. It documents all standard OpenTime v0.2 fields and Elysium-specific extensions. Audience: plugin developers and AI tools reading or writing Elysium schedules.

Overview

.ot files are YAML documents. Each file contains a header and a list of schedule items.

opentime_version: "0.2"
default_timezone: "America/New_York"
generated_by: "Elysium 1.0"
created_at: "2026-01-01T00:00:00Z"
items:
  - type: task
    id: "abc-123"
    title: "Write report"
    status: todo

Document root fields

FieldRequiredDescription
opentime_versionYesAlways "0.2"
itemsYesList of schedule items
default_timezoneNoIANA timezone (e.g. "America/New_York") — used for items without explicit timezone
generated_byNoApp name and version
created_atNoISO8601 UTC timestamp

Data types

TypeFormatExample
dateYYYY-MM-DD"2026-03-15"
datetimeISO8601 with timezone offset"2026-03-15T09:00:00-05:00"
timeHH:MM 24-hour"09:00", "14:30"
progressnumber 0.0–1.00.5

Item types

Elysium supports 7 item types. Each item requires type and id.

TypeDescriptionRequired fields
goalSingle-step intention/outcometype, id, title, kind
taskAtomic actiontype, id, title, status
habitRecurring behaviortype, id, title
reminderLightweight notificationtype, id, title, time
eventBlock of timetype, id, title, start, end
appointmentEvent with attendeestype, id, title, start, end, attendees
projectContainer for other items (Elysium: Odyssey)type, id, title, kind

x_elysium extensions

Elysium stores additional data under an x_elysium key on each item. External tools should preserve these fields unchanged. You may add or modify them to control Elysium-specific behavior.

x_elysium on goal / project

FieldTypeDescription
prioritystring"low" | "medium" | "high" | "urgent"
difficultystring"easy" | "medium" | "hard"
start_datedateWhen to start working on this goal
next_due_daydateNext calculated due date
target_duration_valuenumberEstimated duration amount
target_duration_unitstring"minutes" | "hours" | "days"
target_duration_perstringRecurrence period for the duration
repeats_enabledboolWhether goal repeats
repeats_countintHow many times per period
repeats_perstring"day" | "week" | "month" | "year"
repeats_modestringRepeat mode
repeats_weekdaysstringComma-separated weekday abbreviations
repeats_end_typestring"never" | "date" | "occurrences"
repeats_end_datedateEnd date for repeating goal
repeats_end_occurrencesintMax occurrences
series_idstringUUID linking occurrences of a repeating goal
occurrence_indexintWhich occurrence this is (0-based)
category_namestringDisplay name of the category
time_of_day_typestring"anytime" | "morning" | "afternoon" | "evening" | "custom"
custom_start_timetime"HH:MM" — custom time block start
custom_end_timetime"HH:MM" — custom time block end
is_all_dayboolWhether shown as all-day
is_auto_scheduledboolWhether Elysium auto-scheduled this item
auto_reschedule_enabledboolAllow auto-rescheduling on miss
started_atdatetimeWhen work began
completed_atdatetimeWhen marked complete
stepsarraySub-steps (see Steps schema)
notificationsarrayNotification schedule (see Notifications schema)
shortcut_namestringName of the linked Apple Shortcut to run
shortcut_enabledboolWhether the shortcut runs automatically on start
appsarrayApps to open when this item starts (see Apps schema)

x_elysium on task

Same fields as goal except no steps array. Includes difficulty; priority is a number (1–10) here rather than a string. All scheduling, repeat, notification, shortcut, and apps fields apply.

x_elysium on habit

FieldTypeDescription
habit_typestring"boolean" | "count" | "duration" | "numeric"
target_valuenumberTarget amount for count/numeric/duration habits
target_unitstringUnit for target (e.g. "minutes", "reps")
sessions_per_dayintHow many sessions per day
total_completionsintLifetime completion count
total_slipsintLifetime miss count
increment_enabledboolProgressive overload enabled
increment_valuenumberAmount to increment per period
visibility_typestring"always" | "scheduled"
notificationsarrayNotification schedule
shortcut_namestringName of the linked Apple Shortcut
shortcut_enabledboolWhether the shortcut runs automatically
appsarrayApps to open when this habit starts

x_elysium on reminder

FieldTypeDescription
locationstringLocation for location-based reminder
prioritystring"low" | "medium" | "high"
is_all_dayboolAll-day reminder
custom_start_timetime"HH:MM"
custom_end_timetime"HH:MM"
notificationsarrayNotification schedule

x_elysium on event

FieldTypeDescription
location_notesstringAdditional location details
transportation_detailsstringHow to get there
travel_time_beforeintMinutes of travel time before event
travel_time_afterintMinutes of travel time after event
cancelledboolWhether event is cancelled
cancellation_reasonstringWhy it was cancelled
event_typestringCategory of event
needs_prepboolWhether prep tasks should be created
event_statusstring"scheduled" | "completed" | "cancelled"
notificationsarrayNotification schedule
shortcut_namestringName of the linked Apple Shortcut
shortcut_enabledboolWhether the shortcut runs automatically
appsarrayApps to open when this event starts

x_elysium on appointment

FieldTypeDescription
notes_from_providerstringNotes from the service provider
cancellation_notesstringNotes about cancellation
appointment_statusstring"scheduled" | "completed" | "cancelled"
booking_referencestringConfirmation/booking number
appointment_typestringCategory of appointment
notificationsarrayNotification schedule
shortcut_namestringName of the linked Apple Shortcut
shortcut_enabledboolWhether the shortcut runs automatically
appsarrayApps to open when this appointment starts

Steps schema

Available on goal items via x_elysium.steps.

steps:
  - id: "step-uuid"
    title: "Step title"
    completed: false
    order: 0
    priority: "medium"
    due_date: "2026-03-15"       # optional
    estimate_minutes: 30          # optional

Notifications schema

Available on most item types via x_elysium.notifications.

notifications:
  - enabled: true
    timing: "on_time"             # "on_time" | "minutes_before" | "hours_before" | "days_before" | "custom"
    has_alarm: true
    custom_minutes: 15            # only when timing is "minutes_before"

Apps schema

Apps to automatically open (and optionally position) when an item starts. Available via x_elysium.apps.

FieldTypeRequiredDescription
app_namestringYesDisplay name (e.g. "Xcode")
app_pathstringYesFull .app bundle path (e.g. "/Applications/Xcode.app")
bundle_identifierstringNomacOS bundle ID (e.g. "com.apple.dt.Xcode")
window_layoutstringNoHow to position the window — see layout values below
target_monitor_indexintNoMonitor index: 0 = primary, 1 = second. Omit for primary
custom_xnumberNoLeft edge as fraction of screen width (0.0–1.0); only for custom layout
custom_ynumberNoTop edge as fraction of screen height (0.0–1.0)
custom_widthnumberNoWidth as fraction of screen width (0.0–1.0)
custom_heightnumberNoHeight as fraction of screen height (0.0–1.0)

window_layout values:

previous · fullScreen · leftHalf · rightHalf · topHalf · bottomHalf · leftThird · centerThird · rightThird · leftTwoThirds · rightTwoThirds · topThird · middleThird · bottomThird · topTwoThirds · bottomTwoThirds · leftQuarter · rightQuarter · leftThreeQuarters · rightThreeQuarters · topLeftQuarter · topRightQuarter · bottomLeftQuarter · bottomRightQuarter · custom

apps:
  - app_name: "Xcode"
    app_path: "/Applications/Xcode.app"
    bundle_identifier: "com.apple.dt.Xcode"
    window_layout: "leftHalf"
    target_monitor_index: 0
  - app_name: "Simulator"
    app_path: "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app"
    window_layout: "rightHalf"

Complete YAML example

opentime_version: "0.2"
default_timezone: "America/Chicago"
generated_by: "Elysium 1.0"

items:
  - type: project
    id: "proj-launch-2026"
    title: "Q1 Product Launch"
    kind: project
    progress: 0.3
    target_date: "2026-03-31"
    tags: [work, priority]
    x_elysium:
      priority: high
      start_date: "2026-01-01"

  - type: goal
    id: "goal-mvp"
    title: "Complete MVP"
    kind: goal
    target_date: "2026-02-28"
    progress: 0.5
    project_id: "proj-launch-2026"
    x_elysium:
      priority: high
      time_of_day_type: morning
      custom_start_time: "09:00"
      custom_end_time: "12:00"
      steps:
        - id: "step-1"
          title: "Write API docs"
          completed: false
          order: 0

  - type: task
    id: "task-api-docs"
    title: "Write API documentation"
    status: in_progress
    due: "2026-01-20"
    estimate_minutes: 90
    goal_id: "goal-mvp"
    project_id: "proj-launch-2026"
    x_elysium:
      priority: "8"
      time_of_day_type: morning
      is_auto_scheduled: true

  - type: habit
    id: "habit-review"
    title: "Daily planning review"
    pattern:
      freq: daily
    window:
      start_time: "08:00"
      end_time: "08:30"
    streak:
      current: 5
      longest: 21
    x_elysium:
      habit_type: boolean
      visibility_type: always

  - type: event
    id: "event-standup"
    title: "Team standup"
    start: "2026-01-10T09:00:00-06:00"
    end: "2026-01-10T09:30:00-06:00"
    recurrence: "FREQ=WEEKLY;BYDAY=MO,WE,FR"
    location: "Conference Room A"
    x_elysium:
      event_type: work
      travel_time_before: 5

  - type: appointment
    id: "appt-dentist"
    title: "Dentist checkup"
    start: "2026-01-20T14:00:00-06:00"
    end: "2026-01-20T15:00:00-06:00"
    attendees: ["Dr. Smith"]
    provider: dentist
    location: "123 Medical Plaza"
    x_elysium:
      appointment_type: medical
      booking_reference: "REF-12345"

  - type: reminder
    id: "rem-review"
    title: "Review weekly goals"
    time: "2026-01-10T17:00:00-06:00"
    repeat: "FREQ=WEEKLY;BYDAY=FR"
    x_elysium:
      priority: medium

Rules for AI tools

  1. 1.
    Always include type and idThese are required on every item.
  2. 2.
    IDs must be stableUse UUIDs or descriptive strings. Never reuse an ID for a different item.
  3. 3.
    Datetimes must include a timezone offsete.g. -05:00 or Z. Never write a naive datetime.
  4. 4.
    To complete an itemSet status: done (tasks) or add completed_at under x_elysium. Do not delete the item.
  5. 5.
    To delete an itemSet a deleted_at field under x_elysium with the current datetime. Elysium will soft-delete it on next import.
  6. 6.
    Preserve unknown x_* fieldsIf you see x_elysium or any other x_ key you don't recognize, copy it unchanged.
  7. 7.
    New items get importedOn the next auto-import cycle. Existing items (matched by id) are updated only if updateExisting mode is active.
  8. 8.
    Per-item modeIf the folder contains multiple elysium-*.ot files (one per item type), write each item to the correct file. If single-file mode, everything goes in one file.