Skip to content
On this page

AgenTree Events API

This page documents the AgenTree event system, designed for monitoring, extending, and finely integrating agent behavior.


Event System Architecture

AgenTree uses a strongly typed event system to notify the evolution of the lifecycle of agents, LLM calls, tools, context, and child agents. Each event carries a structured payload, facilitating supervision, monitoring, extension, or integration with other systems.

Events are typed via the AgentEvents interface, which maps each event name to the signature of its callback.


Event Types

1. Agent Lifecycle

  • agentCreated: Agent creation Payload: [AgentEventData]
  • agentStarted: Agent startup Payload: [AgentEventData]
  • agentCompleted: Agent completion Payload: [AgentResultEventData]
  • agentError: Error during execution Payload: [AgentErrorEventData]

2. Execution and Context

  • contextLoaded: Context loading Payload: [ContextLoadEventData]
  • llmCall: LLM call Payload: [LLMCallEventData]
  • toolCalls: Tool calls (batch) Payload: [ToolCallEventData]
  • toolCallStarted: Tool call start Payload: [ToolCallStartedEventData]
  • toolCallCompleted: Tool call completion Payload: [ToolCallCompletedEventData]
  • streamChunk: Stream chunk reception Payload: [StreamChunkEventData]

3. Child Agents

  • childCreated: Child agent creation Payload: [ChildAgentEventData]

Payload Structure

Each event has a structured payload, generally inheriting from [AgentEventData]:

typescript
interface AgentEventData {
  id: string;
  name: string;
  task: string;
  depth: number;
  parentId?: string;
  timestamp: string;
}

Specialized events add fields:

  • Result: result, executionTime, success
  • Error: error, stack
  • LLM: messageCount, availableTools, model
  • Tools: toolCalls, toolDetails, toolName, toolInput, toolOutput, toolError, duration, toolCallId
  • Stream: chunk, accumulatedContent
  • Context: context (files, URLs, texts)
  • Child Agents: parentId, parentName, childId, childName, childTask

Usage: Listening to and Emitting Events

Listening to Events

To react to an event, subscribe via the agent's event system:

typescript
agent.on('agentCompleted', (data) => {
  console.log('Agent completed:', data);
});

Emitting Events

Events are generally emitted automatically by the AgenTree core. To emit a custom event:

typescript
agent.emit('agentError', {
  id: '...',
  name: '...',
  task: '...',
  depth: 0,
  timestamp: new Date().toISOString(),
  error: 'Error message'
});

Extension: New Events

To extend the system, add a new key to the AgentEvents interface and define the associated payload. Example:

typescript
interface AgentEvents {
  ...
  'customEvent': (data: CustomEventData) => void;
}

Concrete Examples

Lifecycle Tracking

typescript
agent.on('agentStarted', (data) => {
  // Log or metric initialization
});
agent.on('agentCompleted', (data) => {
  // Final result processing
});

Tool Monitoring

typescript
agent.on('toolCallStarted', (data) => {
  console.log(`Tool ${data.toolName} called`);
});
agent.on('toolCallCompleted', (data) => {
  if (data.toolError) {
    console.error('Tool error:', data.toolError);
  }
});

Payload Generation

Use the EventDataBuilder class to generate consistent payloads:

typescript
const eventData = EventDataBuilder.createResultEventData(agent, result, 123);
agent.emit('agentCompleted', eventData);