Skip to content
eternego / docs

Calendar

Her schedule as a month grid — what she's done (past) and what she's planning (future). Sidebar label: Schedule. URL: /persona/{id}/calendar.

The screen is built entirely from GET /api/persona/{id}/calendar, which returns a window of her history (past events she's archived) and her destiny (future events she's scheduled). It's a read-only view of her files — there are no controls to add or edit events here.

What it shows

A standard month grid (weeks start Monday). Today is highlighted; the selected day is outlined. Each day cell shows up to three events; more collapse to a "+N more". Below the grid, a popover lists every event for the selected day in full.

Events come from two halves of the calendar response, distinguished visually by origin:

Origin Source in the response Meaning
you added history Past events — conversations, reminders, things from your side.
she set up destiny Future events she's scheduled for herself.

Each event shows a time, a title, and (for recurring ones) the recurrence — e.g. "daily", "weekly".

How titles are derived

The response gives each event a body (the file's markdown), not a clean title, so the screen derives one:

  • Conversations are always titled "Conversation" — their body is the raw chat log, never a usable title.
  • Schedules and reminders take the first heading line of the body (a leading # is stripped); if there isn't a usable one, the kind name is capitalized ("Schedule", "Reminder").

The recurrence shown in the day popover is the recurrence field from a destiny entry. It's informational — Eternego does not project recurring events forward; you only see what's actually on disk for that window. (See the Calendar endpoint.)

Control Action
‹ / › Previous / next month.
Today Jump back to the current month and select today.
Click a day Select it; its events fill the popover below.

Changing the month refetches: the screen requests GET .../calendar?start=<iso>&end=<iso> with that month's bounds — start is the first of the month, end the first of the next (the window is start <= event_time < end). On first open it loads the current month the same way.

Both query params are ISO dates; the endpoint accepts a bare date (2026-06-01) or a full timestamp. Out-of-range or malformed dates return 400 — but the screen always sends well-formed month bounds.

  • Calendar — the endpoint, its query params, and the exact history/destiny response shape.
  • Her files: runtime — where history/ and destiny/ live on disk, and what writes them.
  • Vocabularydestiny, the day-arc the persona lives on.