Agent
Defined in: src/agent/agent.ts:231
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.
Implements
Section titled “Implements”InvokableAgent
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new Agent(config?): Agent;Defined in: src/agent/agent.ts:305
Creates an instance of the Agent.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
config? | AgentConfig | The configuration for the agent. |
Returns
Section titled “Returns”Agent
Properties
Section titled “Properties”messages
Section titled “messages”messages: Message[];Defined in: src/agent/agent.ts:238
The conversation history of messages between user and assistant.
Implementation of
Section titled “Implementation of”LocalAgent.messagesappState
Section titled “appState”readonly appState: StateStore;Defined in: src/agent/agent.ts:243
App state storage accessible to tools and application logic. State is not passed to the model during inference.
Implementation of
Section titled “Implementation of”LocalAgent.appStatemodelState
Section titled “modelState”readonly modelState: StateStore;Defined in: src/agent/agent.ts:249
Runtime state for the model provider. Used by stateful models to persist provider-specific data (e.g., response IDs for conversation chaining) across invocations.
Implementation of
Section titled “Implementation of”LocalAgent.modelStatemodel: Model;Defined in: src/agent/agent.ts:255
The model provider used by the agent for inference.
Implementation of
Section titled “Implementation of”LocalAgent.modelsystemPrompt?
Section titled “systemPrompt?”optional systemPrompt?: SystemPrompt;Defined in: src/agent/agent.ts:260
The system prompt to pass to the model provider.
Implementation of
Section titled “Implementation of”LocalAgent.systemPromptreadonly name: string;Defined in: src/agent/agent.ts:265
The name of the agent.
Implementation of
Section titled “Implementation of”InvokableAgent.namereadonly id: string;Defined in: src/agent/agent.ts:270
The unique identifier of the agent instance.
Implementation of
Section titled “Implementation of”LocalAgent.iddescription?
Section titled “description?”readonly optional description?: string;Defined in: src/agent/agent.ts:275
Optional description of what the agent does.
Implementation of
Section titled “Implementation of”InvokableAgent.descriptionsessionManager?
Section titled “sessionManager?”readonly optional sessionManager?: SessionManager;Defined in: src/agent/agent.ts:280
The session manager for saving and restoring agent sessions, if configured.
_interruptState
Section titled “_interruptState”_interruptState: InterruptState;Defined in: src/agent/agent.ts:297
Interrupt state for human-in-the-loop workflows.
Accessors
Section titled “Accessors”Get Signature
Section titled “Get Signature”get tools(): Tool[];Defined in: src/agent/agent.ts:479
The tools this agent can use.
Returns
Section titled “Returns”Tool[]
toolRegistry
Section titled “toolRegistry”Get Signature
Section titled “Get Signature”get toolRegistry(): ToolRegistry;Defined in: src/agent/agent.ts:486
The tool registry for managing the agent’s tools.
Returns
Section titled “Returns”ToolRegistry
Implementation of
Section titled “Implementation of”LocalAgent.toolRegistrycancelSignal
Section titled “cancelSignal”Get Signature
Section titled “Get Signature”get cancelSignal(): AbortSignal;Defined in: src/agent/agent.ts:496
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.
Returns
Section titled “Returns”AbortSignal
Implementation of
Section titled “Implementation of”LocalAgent.cancelSignalMethods
Section titled “Methods”addHook()
Section titled “addHook()”addHook<T>( eventType, callback, options?): HookCleanup;Defined in: src/agent/agent.ts:415
Register a hook callback for a specific event type.
Type Parameters
Section titled “Type Parameters”| Type Parameter |
|---|
T extends HookableEvent |
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
eventType | HookableEventConstructor<T> | The event class constructor to register the callback for |
callback | HookCallback<T> | The callback function to invoke when the event occurs |
options? | HookCallbackOptions | Optional configuration including execution order |
Returns
Section titled “Returns”HookCleanup
Cleanup function that removes the callback when invoked
Example
Section titled “Example”const agent = new Agent({ model })
const cleanup = agent.addHook(BeforeInvocationEvent, (event) => { console.log('Invocation started')})
// Later, to remove the hook:cleanup()Implementation of
Section titled “Implementation of”LocalAgent.addHookinitialize()
Section titled “initialize()”initialize(): Promise<void>;Defined in: src/agent/agent.ts:423
Returns
Section titled “Returns”Promise<void>
cancel()
Section titled “cancel()”cancel(): void;Defined in: src/agent/agent.ts:528
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.
Returns
Section titled “Returns”void
Example
Section titled “Example”const agent = new Agent({ model, tools })
// Cancel after 5 secondssetTimeout(() => agent.cancel(), 5000)const result = await agent.invoke('Do something')console.log(result.stopReason) // 'cancelled'invoke()
Section titled “invoke()”invoke(args, options?): Promise<AgentResult>;Defined in: src/agent/agent.ts:560
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.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
args | InvokeArgs | Arguments for invoking the agent |
options? | InvokeOptions | Optional per-invocation options |
Returns
Section titled “Returns”Promise<AgentResult>
Promise that resolves to the final AgentResult
Example
Section titled “Example”const agent = new Agent({ model, tools })const result = await agent.invoke('What is 2 + 2?')console.log(result.lastMessage) // Agent's responseImplementation of
Section titled “Implementation of”InvokableAgent.invokestream()
Section titled “stream()”stream(args, options?): AsyncGenerator<AgentStreamEvent, AgentResult, undefined>;Defined in: src/agent/agent.ts:599
Streams the agent execution, yielding events and returning the final result.
The agent loop manages the conversation flow by:
- Streaming model responses and yielding all events
- Executing tools when the model requests them
- 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
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
args | InvokeArgs | Arguments for invoking the agent |
options? | InvokeOptions | Optional per-invocation options |
Returns
Section titled “Returns”AsyncGenerator<AgentStreamEvent, AgentResult, undefined>
Async generator that yields AgentStreamEvent objects and returns AgentResult
Example
Section titled “Example”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 conversationImplementation of
Section titled “Implementation of”InvokableAgent.streamasTool()
Section titled “asTool()”asTool(options?): Tool;Defined in: src/agent/agent.ts:718
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.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
options? | AgentAsToolOptions | Optional configuration for the tool name, description, and context preservation |
Returns
Section titled “Returns”A Tool wrapping this agent
Example
Section titled “Example”const researcher = new Agent({ name: 'researcher', description: 'Finds info', printer: false })
// Explicit wrappingconst writer = new Agent({ tools: [researcher.asTool()] })
// Automatic wrapping (equivalent)const writer = new Agent({ tools: [researcher] })takeSnapshot()
Section titled “takeSnapshot()”takeSnapshot(options): Snapshot;Defined in: src/agent/agent.ts:752
Captures a point-in-time snapshot of the agent’s current state.
Use snapshots to checkpoint agent state for later restoration, enabling use cases like undo/redo, branching conversations, and session persistence.
Fields are selected via a preset/include/exclude model:
- Start with preset fields (e.g.
'session'captures all fields) - Add any
includefields - Remove any
excludefields
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
options | TakeSnapshotOptions | Controls which fields to capture and optional app data to store |
Returns
Section titled “Returns”A Snapshot containing the captured agent state
Throws
Section titled “Throws”Error if no fields would be included after applying options
Example
Section titled “Example”// Capture all session-relevant stateconst snapshot = agent.takeSnapshot({ preset: 'session' })
// Capture only messages and stateconst partial = agent.takeSnapshot({ include: ['messages', 'state'] })
// Capture session state but exclude interruptsconst noInterrupts = agent.takeSnapshot({ preset: 'session', exclude: ['interrupts'] })
// Attach application-owned metadataconst withMeta = agent.takeSnapshot({ preset: 'session', appData: { userId: 'u-123' } })Implementation of
Section titled “Implementation of”LocalAgent.takeSnapshotloadSnapshot()
Section titled “loadSnapshot()”loadSnapshot(snapshot): void;Defined in: src/agent/agent.ts:781
Restores agent state from a previously captured snapshot.
Only fields present in snapshot.data are restored; absent fields are left
unchanged. This allows partial snapshots to update specific aspects of state
without affecting others.
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
snapshot | Snapshot | The snapshot to restore from |
Returns
Section titled “Returns”void
Throws
Section titled “Throws”Error if snapshot.schemaVersion is incompatible or scope is wrong
Example
Section titled “Example”// Save and restore a conversation checkpointconst checkpoint = agent.takeSnapshot({ preset: 'session' })
// ... agent continues processing ...
// Restore to the checkpointagent.loadSnapshot(checkpoint)
// Restore from a JSON-serialized snapshot (e.g. from storage)const stored = JSON.parse(savedSnapshotJson)agent.loadSnapshot(stored)Implementation of
Section titled “Implementation of”LocalAgent.loadSnapshot