Overview
TheNotifier 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: notifierDefault 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 eventactions- 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 textcontext- Optional context (session ID, project ID, PR URL, channel)
Related Types
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 inagent-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
