Proactive Intelligence
Autonomous background services that act without being asked.
Overview
Proactive intelligence is a suite of background services that run on their own schedules. Unlike the heartbeat system (which reacts to incoming messages), proactive services initiate actions based on time, patterns, and context. All services are disabled by default and can be enabled from the Proactive panel in Settings.
Morning Briefing
A daily summary delivered at a configurable time (default 8:00 AM). The briefing collects:
- Today's calendar events (via Apple Calendar MCP)
- Active open loops (unresolved items)
- Recent heartbeat activity
The raw data is summarized by the background LLM into 3-5 bullet points and delivered via push notification, iMessage, or in-app chat (configurable).
Meeting Prep
Polls Apple Calendar every 2 minutes. When a meeting is approaching within the configured advance window (default 30 minutes), Edward:
- Extracts attendee names from the calendar event
- Detects known entities in the meeting title and attendees
- Loads entity-linked memories for context
- Generates a prep brief via the background LLM
- Delivers via push notification
Each event is only prepped once (dedup by event ID + title). Requires the Apple Services skill to be enabled.
Open Loop Nudges
A daily check for stale open loops — unresolved items that Edward detected in conversations. When an open loop has been active for longer than the configured threshold (default 7 days) and hasn't been nudged recently, Edward generates a gentle reminder and delivers it via push notification.
Open loops can be resolved or snoozed from the Proactive panel in Settings. Snoozed loops are automatically reactivated when their snooze period expires.
Pattern Detection
A weekly analysis that examines the last 7 days of activity:
- Conversation titles and search tags
- Memory type distribution (facts vs. context vs. preferences)
- Top entities by recent mention count
The background LLM identifies recurring themes, frequency changes, and unresolved threads. Results are stored as a document (tagged "pattern, weekly, system_generated") and optionally delivered via push notification.
Entity Tracking
The entity service extracts people, projects, places, organizations, and topics from conversations using the background LLM. Entities are:
- Resolved by name and alias (case-insensitive)
- Linked to memories via entity mentions
- Tracked with mention counts and last-seen timestamps
- Detected at retrieval time via fast substring matching (no LLM call)
Entity-linked memories are automatically merged into the conversation context when an entity is mentioned.
Session Briefing
When a new conversation starts, Edward generates a continuity summary of what happened since the last session. This is injected into the system prompt on the first turn and includes:
- New and updated memories
- Scheduled events that fired
- Completed orchestrator tasks
- Heartbeat triage activity
- Memory consolidation results
This is a pure database query — no LLM call needed for structured data.
State Documents
Documents tagged with "state" are treated as living reference docs that Edward should always be aware of. They're automatically injected into the system prompt with a content preview. Use these for current goals, weekly plans, project status, or anything Edward should proactively reference.
Configuration
All proactive services are configured from the Proactive panel in the Settings page. The API endpoints are:
| Endpoint | Description |
|---|---|
GET /api/proactive/config | Get current configuration |
PATCH /api/proactive/config | Update configuration (enables/disables services) |
GET /api/proactive/status | Service status, entity count, open loop count |
GET /api/proactive/open-loops | List open loops (filterable by status) |
PATCH /api/proactive/open-loops/:id | Resolve or snooze an open loop |
GET /api/proactive/entities | List tracked entities (filterable by type) |
Environment Variables
The proactive system uses the TIMEZONE environment variable (default: UTC) for scheduling. Set this to your local timezone (e.g., America/New_York) so morning briefings fire at the right time.
See the Memory System docs for how entity-linked memories and implications integrate with retrieval.