Skip to main content

AgentEvent

Enum AgentEvent 

Source
#[non_exhaustive]
pub enum AgentEvent {
Show 25 variants AgentStart, AgentEnd { messages: Arc<Vec<AgentMessage>>, }, TurnStart, TurnEnd { assistant_message: AssistantMessage, tool_results: Vec<ToolResultMessage>, reason: TurnEndReason, snapshot: TurnSnapshot, }, BeforeLlmCall { system_prompt: String, messages: Vec<LlmMessage>, model: ModelSpec, }, MessageStart, MessageUpdate { delta: AssistantMessageDelta, }, MessageEnd { message: AssistantMessage, }, ToolExecutionStart { id: String, name: String, arguments: Value, }, ToolExecutionUpdate { id: String, name: String, partial: AgentToolResult, }, ToolApprovalRequested { id: String, name: String, arguments: Value, }, ToolApprovalResolved { id: String, name: String, approved: bool, }, ToolExecutionEnd { id: String, name: String, result: AgentToolResult, is_error: bool, }, ContextCompacted { report: CompactionReport, }, ModelFallback { from_model: ModelSpec, to_model: ModelSpec, }, ModelCycled { old: ModelSpec, new: ModelSpec, reason: String, }, StateChanged { delta: StateDelta, }, CacheAction { hint: CacheHint, prefix_tokens: usize, }, McpServerConnected { server_name: String, }, McpServerDisconnected { server_name: String, reason: String, }, McpToolsDiscovered { server_name: String, tool_count: usize, }, McpToolCallStarted { server_name: String, tool_name: String, }, McpToolCallCompleted { server_name: String, tool_name: String, is_error: bool, }, TransferInitiated { signal: TransferSignal, }, Custom(Emission),
}
Expand description

Fine-grained lifecycle event emitted by the agent loop.

Consumers subscribe to these events for observability, UI updates, and logging. The harness never calls back into application logic for display concerns.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

AgentStart

Emitted once when the loop begins.

§

AgentEnd

Emitted once when the loop exits, carrying the final message context.

Fields

§messages: Arc<Vec<AgentMessage>>
§

TurnStart

Emitted at the beginning of each assistant turn.

§

TurnEnd

Emitted at the end of each turn with the assistant message and tool results.

Fields

§assistant_message: AssistantMessage
§tool_results: Vec<ToolResultMessage>
§snapshot: TurnSnapshot

Full context snapshot at the turn boundary for replay/auditing.

§

BeforeLlmCall

Emitted after context transform, before the LLM streaming call. Allows plugins to observe/log the final prompt.

Fields

§system_prompt: String
§messages: Vec<LlmMessage>
§

MessageStart

Emitted when a message begins streaming.

§

MessageUpdate

Emitted for each incremental delta during assistant streaming.

§

MessageEnd

Emitted when a message is complete.

Fields

§

ToolExecutionStart

Emitted when a tool call begins execution.

Fields

§name: String
§arguments: Value
§

ToolExecutionUpdate

Emitted for intermediate partial results from a streaming tool.

Fields

§id: String

The tool call ID so observers can attribute concurrent updates.

§name: String

The tool name (matches ToolExecutionStart.name, including any plugin namespace prefix) so observers can attribute concurrent updates without inspecting tool output content.

§partial: AgentToolResult

The partial tool result payload.

§

ToolApprovalRequested

Emitted when a tool call is pending approval.

Fields

§name: String
§arguments: Value
§

ToolApprovalResolved

Emitted when a tool call approval decision is made.

Fields

§name: String
§approved: bool
§

ToolExecutionEnd

Emitted when a tool call completes.

Fields

§name: String

The tool name (matches ToolExecutionStart.name, including any plugin namespace prefix) so observers can correlate end events with the tool that produced them.

§is_error: bool
§

ContextCompacted

Emitted when context compaction drops messages.

Fields

§

ModelFallback

Emitted when the agent falls back to a different model after exhausting retries on the current one.

Fields

§from_model: ModelSpec
§to_model: ModelSpec
§

ModelCycled

Emitted when the agent switches to a different model during a retry cycle.

Fields

§reason: String
§

StateChanged

Emitted when session state delta is flushed (non-empty only). Fired immediately before TurnEnd.

Fields

§

CacheAction

Emitted when context caching acts on a turn (write or read).

Fields

§prefix_tokens: usize
§

McpServerConnected

Emitted when an MCP server connects successfully.

Fields

§server_name: String
§

McpServerDisconnected

Emitted when an MCP server disconnects.

Fields

§server_name: String
§reason: String
§

McpToolsDiscovered

Emitted when tools are discovered from an MCP server.

Fields

§server_name: String
§tool_count: usize
§

McpToolCallStarted

Emitted when an MCP tool call begins execution.

Fields

§server_name: String
§tool_name: String
§

McpToolCallCompleted

Emitted when an MCP tool call completes.

Fields

§server_name: String
§tool_name: String
§is_error: bool
§

TransferInitiated

Emitted when a tool signals a transfer to another agent.

Contains the enriched TransferSignal with conversation history. Emitted immediately before the TurnEnd event with TurnEndReason::Transfer.

Fields

§

Custom(Emission)

A custom event emitted via Agent::emit.

Trait Implementations§

Source§

impl Clone for AgentEvent

Source§

fn clone(&self) -> AgentEvent

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AgentEvent

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for AgentEvent

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for AgentEvent

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,