Skip to content

Agent

Defined in: src/agent/agent.ts:178

Orchestrates the interaction between a model, a set of tools, and MCP clients. The Agent is responsible for managing the lifecycle of tools and clients and invoking the core decision-making loop.

  • InvokableAgent
new Agent(config?): Agent;

Defined in: src/agent/agent.ts:242

Creates an instance of the Agent.

ParameterTypeDescription
config?AgentConfigThe configuration for the agent.

Agent

messages: Message[];

Defined in: src/agent/agent.ts:185

The conversation history of messages between user and assistant.

LocalAgent.messages

readonly appState: StateStore;

Defined in: src/agent/agent.ts:190

App state storage accessible to tools and application logic. State is not passed to the model during inference.

LocalAgent.appState

model: Model;

Defined in: src/agent/agent.ts:196

The model provider used by the agent for inference.


optional systemPrompt?: SystemPrompt;

Defined in: src/agent/agent.ts:201

The system prompt to pass to the model provider.

LocalAgent.systemPrompt

readonly name: string;

Defined in: src/agent/agent.ts:206

The name of the agent.

InvokableAgent.name

readonly id: string;

Defined in: src/agent/agent.ts:211

The unique identifier of the agent instance.

LocalAgent.id

readonly optional description?: string;

Defined in: src/agent/agent.ts:216

Optional description of what the agent does.

InvokableAgent.description

readonly optional sessionManager?: SessionManager;

Defined in: src/agent/agent.ts:221

The session manager for saving and restoring agent sessions, if configured.

get tools(): Tool[];

Defined in: src/agent/agent.ts:369

The tools this agent can use.

Tool[]


get toolRegistry(): ToolRegistry;

Defined in: src/agent/agent.ts:376

The tool registry for managing the agent’s tools.

ToolRegistry

LocalAgent.toolRegistry

get cancelSignal(): AbortSignal;

Defined in: src/agent/agent.ts:386

The cancellation signal for the current invocation.

Tools can pass this to cancellable operations (e.g., fetch(url, { signal: agent.cancelSignal })). Hooks can check event.agent.cancelSignal.aborted to detect cancellation.

AbortSignal

LocalAgent.cancelSignal
addHook<T>(eventType, callback): HookCleanup;

Defined in: src/agent/agent.ts:313

Register a hook callback for a specific event type.

Type Parameter
T extends HookableEvent
ParameterTypeDescription
eventTypeHookableEventConstructor<T>The event class constructor to register the callback for
callbackHookCallback<T>The callback function to invoke when the event occurs

HookCleanup

Cleanup function that removes the callback when invoked

const agent = new Agent({ model })
const cleanup = agent.addHook(BeforeInvocationEvent, (event) => {
console.log('Invocation started')
})
// Later, to remove the hook:
cleanup()
LocalAgent.addHook

initialize(): Promise<void>;

Defined in: src/agent/agent.ts:317

Promise<void>


cancel(): void;

Defined in: src/agent/agent.ts:418

Cancels the current agent invocation cooperatively.

The agent will stop at the next cancellation checkpoint:

  • During model response streaming
  • Before tool execution
  • Between sequential tool executions
  • At the top of each agent loop cycle

If a tool is already executing, it will run to completion unless the tool checks LocalAgent.cancelSignal | cancelSignal internally.

Hook callbacks can check event.agent.cancelSignal.aborted to detect cancellation and adjust their behavior accordingly.

The stream/invoke call will return an AgentResult with stopReason: 'cancelled'. If the agent is not currently invoking, this is a no-op.

void

const agent = new Agent({ model, tools })
// Cancel after 5 seconds
setTimeout(() => agent.cancel(), 5000)
const result = await agent.invoke('Do something')
console.log(result.stopReason) // 'cancelled'

invoke(args, options?): Promise<AgentResult>;

Defined in: src/agent/agent.ts:450

Invokes the agent and returns the final result.

This is a convenience method that consumes the stream() method and returns only the final AgentResult. Use stream() if you need access to intermediate streaming events.

ParameterTypeDescription
argsInvokeArgsArguments for invoking the agent
options?InvokeOptionsOptional per-invocation options

Promise<AgentResult>

Promise that resolves to the final AgentResult

const agent = new Agent({ model, tools })
const result = await agent.invoke('What is 2 + 2?')
console.log(result.lastMessage) // Agent's response
InvokableAgent.invoke

stream(args, options?): AsyncGenerator<AgentStreamEvent, AgentResult, undefined>;

Defined in: src/agent/agent.ts:489

Streams the agent execution, yielding events and returning the final result.

The agent loop manages the conversation flow by:

  1. Streaming model responses and yielding all events
  2. Executing tools when the model requests them
  3. Continuing the loop until the model completes without tool use

Use this method when you need access to intermediate streaming events. For simple request/response without streaming, use invoke() instead.

An explicit goal of this method is to always leave the message array in a way that the agent can be reinvoked with a user prompt after this method completes. To that end assistant messages containing tool uses are only added after tool execution succeeds with valid toolResponses

ParameterTypeDescription
argsInvokeArgsArguments for invoking the agent
options?InvokeOptionsOptional per-invocation options

AsyncGenerator<AgentStreamEvent, AgentResult, undefined>

Async generator that yields AgentStreamEvent objects and returns AgentResult

const agent = new Agent({ model, tools })
for await (const event of agent.stream('Hello')) {
console.log('Event:', event.type)
}
// Messages array is mutated in place and contains the full conversation
InvokableAgent.stream

asTool(options?): Tool;

Defined in: src/agent/agent.ts:569

Returns a Tool that wraps this agent, allowing it to be used as a tool by another agent.

The returned tool accepts a single input string parameter, invokes this agent, and returns the text response as a tool result.

Note: You can also pass an Agent directly in another agent’s tools array — it will be wrapped automatically via this method.

ParameterTypeDescription
options?AgentAsToolOptionsOptional configuration for the tool name, description, and context preservation

Tool

A Tool wrapping this agent

const researcher = new Agent({ name: 'researcher', description: 'Finds info', printer: false })
// Explicit wrapping
const writer = new Agent({ tools: [researcher.asTool()] })
// Automatic wrapping (equivalent)
const writer = new Agent({ tools: [researcher] })