> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bor-os.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Cron and notifications

# Cron & Notifications

BOR can do work on a schedule and tell you about it. **Cron** runs jobs at a cadence; **notifications** are an inbox the presence surfaces. Together they let BOR be proactive — "every morning, summarize my calendar and notify me."

## Cron

`server/cron/` runs scheduled tasks. A cron job is a recurring instruction BOR runs on its own, even when you're not chatting.

### Scheduling

The AI schedules and manages jobs with the `cron` tool, and **surfaces** can schedule jobs through the [bridge](the-bridge.md) (`type: 'cron'`). A job carries a schedule (a cadence) and a task (what to do when it fires).

The HTTP surface is `/api/cron` (list / create / run). The scheduler logs `[cron] scheduler started; jobs=N; next=…` on boot.

### Use cases

* *"Every morning at 8am, check the weather and notify me if it'll rain."*
* *"Every six hours, run a dream cycle to consolidate memory."* (BOR's own [dreams](memory.md#dreams-consolidation) run on cron.)
* *"Once a day, fetch my RSS feeds and build a digest widget."*

When a cron job fires, it runs a normal BOR turn — so it can use any tool: fetch the web, build a surface, write a file, send a notification.

## Notifications

`server/notifications.js` is a notification **inbox**. BOR pushes notifications; the presence shows an unread badge on the **Notifications** header button, and you can open the inbox to read and act on them.

### Pushing

The AI pushes a notification with the `push_notification` tool, and surfaces can push through the bridge (`type: 'notification-push'`). The HTTP surface is `/api/notifications` (list / act).

### In the presence

* The Notifications button in the bubble header shows an unread count.
* Opening it lists notifications; each can carry an action (open a surface, run something).
* New notifications can play a sound.

## Putting them together

Cron + notifications are how BOR becomes ambient and proactive rather than purely reactive:

> "Every weekday at 9am, pull my GitHub notifications, summarize the ones that need me, and send me a notification with a shortcut to reply."

BOR schedules a cron job; when it fires it fetches, summarizes, builds/updates a shortcut, and pushes a notification. You see the badge, open the inbox, and act — all without starting the conversation yourself.

## Tools & endpoints

| Tool / endpoint                                   | Purpose                                           |
| ------------------------------------------------- | ------------------------------------------------- |
| `cron` (tool)                                     | Schedule, list, enable/disable, or run cron jobs. |
| `push_notification` (tool)                        | Send a notification to the inbox.                 |
| `/api/cron`                                       | HTTP: list / create / run jobs.                   |
| `/api/notifications`                              | HTTP: list / act on notifications.                |
| Bridge `type:'cron'` / `type:'notification-push'` | Surfaces schedule + notify.                       |

Both are per-presence — each presence has its own cron jobs and inbox.
