Overview
ABP supports bidirectional communication:- Elicitation: Apps request information from agents/users
- Progress: Apps report progress for long-running operations
Elicitation
Apps can request input from agents/users during capability execution.Elicitation Flow
Example: Request Page Size
Standard Elicitation Methods
| Method | Description | Use Case |
|---|---|---|
elicitation/input | Request required input | ”Enter API key” |
elicitation/preference | Request optional preference | ”Preferred format?” |
elicitation/confirm | Request yes/no confirmation | ”Delete this?” |
elicitation/select | Request selection from options | ”Choose page size” |
elicitation/resource | Request a file/resource | ”Select image file” |
sampling/create | Request AI assistance | ”Summarize this text” |
Example: Confirmation
Example: Select from Options
Progress Reporting
Apps report progress for long-running operations.Progress Flow
Example: PDF Generation with Progress
Progress Info Format
Best Practices
For Apps:- Report progress at reasonable intervals (not every iteration)
- Include meaningful status messages
- Provide estimated time remaining if possible
- Don’t block on progress reporting (fire-and-forget)
- Display progress to users
- Don’t block on progress updates
- Handle missing progress gracefully
Standard Notification Events
ABP defines a set of standard notification events that apps can send to agents. These events cover common scenarios like capability changes, state updates, and operation lifecycle.| Event | Description | Data |
|---|---|---|
notifications/capabilities/list_changed | Capability set changed | { added: string[], removed: string[], changed: string[] } |
notifications/state/changed | App state changed | { field: string, oldValue: unknown, newValue: unknown } |
notifications/operation/started | Long operation began | { operationId: string, capability: string } |
notifications/operation/completed | Long operation finished | { operationId: string, success: boolean } |
notifications/error | Error outside capability call | { code: string, message: string } |