Skip to main content

Overview

The Notifier interface is the primary interface between the orchestrator and the human. Humans walk away after spawning agents; notifications bring them back when their judgment is needed. Core principle: Push, not pull. The human never polls. Plugin Slot: notifier
Default Plugin: desktop

Interface Definition

Methods

string
required
Plugin name identifier (e.g. "desktop", "slack", "webhook").
(event: OrchestratorEvent) => Promise<void>
required
Push a notification to the human.Parameters:
  • event - Orchestrator event with type, priority, session ID, message, data
(event: OrchestratorEvent, actions: NotifyAction[]) => Promise<void>
Optional: Push a notification with actionable buttons/links.Parameters:
  • event - Orchestrator event
  • actions - Array of actions with labels and URLs/callbacks
(message: string, context?: NotifyContext) => Promise<string | null>
Optional: Post a message to a channel (for team-visible notifiers like Slack).Parameters:
  • message - Message text
  • context - Optional context (session ID, project ID, PR URL, channel)
Returns: Message ID/URL if posted, null otherwise

OrchestratorEvent

string
required
Unique event identifier
EventType
required
Event type (e.g. "session.needs_input", "ci.failing", "merge.ready")
EventPriority
required
Priority level: "urgent", "action", "warning", or "info"
SessionId
required
Session that generated this event
string
required
Project identifier
Date
required
When event occurred
string
required
Human-readable message
Record<string, unknown>
required
Event-specific data (PR URL, error details, etc.)

EventType

EventPriority

  • urgent - Immediate attention required (session stuck, CI failing repeatedly)
  • action - Human decision needed (merge ready, changes requested)
  • warning - Something to be aware of (session exited, CI fix sent)
  • info - FYI only (session spawned, PR created)

NotifyAction

string
required
Button/link label (e.g. "View PR", "Approve", "Kill Session")
string
URL to open (for simple links)
string
API endpoint to call when action is clicked (for interactive buttons)

NotifyContext

SessionId
Session ID for context
string
Project ID for context
string
PR URL to include in message
string
Channel/thread to post to (Slack, Discord)

Usage Examples

Implementing a Notifier Plugin

Slack Notifier Example

Using Notifiers in Lifecycle Manager

Implementation Notes

Notification Routing

Notifications are routed by priority in agent-orchestrator.yaml:

Rate Limiting

Notifiers should implement rate limiting to avoid spam:
  • Group similar events (multiple CI failures)
  • Debounce rapid events (agent activity)
  • Respect platform limits (Slack API rate limits)

Error Handling

Notifiers should fail gracefully:
  • Log errors but don’t throw (notification failure shouldn’t crash orchestrator)
  • Retry with backoff for transient failures
  • Fall back to simpler notifiers (desktop if Slack fails)

Built-in Plugins

  • desktop - macOS/Linux desktop notifications (default)
  • slack - Slack webhook/API integration
  • composio - Composio notification API
  • webhook - Generic webhook POST
Future plugins could support Discord, Email, SMS, PagerDuty, etc.

See Also