Skip to main content

Class: TemporalAgent

strands.TemporalAgent

A Strands Agent that routes every model call through a Temporal activity.

model is the name of a factory registered in StrandsPlugin({ models: {...} }). The activityOptions apply to every model invocation this agent makes. All other options are forwarded to Strands' Agent constructor (tools, plugins, systemPrompt, structuredOutputSchema, messages, etc.).

Strands' retryStrategy is disabled; configure retries via activityOptions.retry here and on the activity options accepted by activityAsTool, activityAsHook, and TemporalMCPClient.

Hierarchy

  • Agent

    TemporalAgent

Constructors

constructor

new TemporalAgent(options?): TemporalAgent

Parameters

NameType
options?TemporalAgentOptions

Returns

TemporalAgent

Overrides

Agent.constructor

Properties

_interruptState

_interruptState: InterruptState

Interrupt state for human-in-the-loop workflows.

Inherited from

Agent._interruptState


appState

Readonly appState: StateStore

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

Inherited from

Agent.appState


description

Optional Readonly description: string

Optional description of what the agent does.

Inherited from

Agent.description


id

Readonly id: string

The unique identifier of the agent instance.

Inherited from

Agent.id


memoryManager

Optional Readonly memoryManager: MemoryManager

The memory manager for cross-session memory retrieval and storage, if configured.

Inherited from

Agent.memoryManager


messages

messages: Message[]

The conversation history of messages between user and assistant.

Inherited from

Agent.messages


model

model: Model<BaseModelConfig>

The model provider used by the agent for inference.

Inherited from

Agent.model


modelState

Readonly modelState: StateStore

Runtime state for the model provider. Used by stateful models to persist provider-specific data (e.g., response IDs for conversation chaining) across invocations.

Inherited from

Agent.modelState


name

Readonly name: string

The name of the agent.

Inherited from

Agent.name


sessionManager

Optional Readonly sessionManager: SessionManager

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

Inherited from

Agent.sessionManager


systemPrompt

Optional systemPrompt: SystemPrompt

The system prompt to pass to the model provider.

Inherited from

Agent.systemPrompt

Accessors

cancelSignal

get cancelSignal(): AbortSignal

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

AbortSignal

Inherited from

Agent.cancelSignal


isInvoking

get isInvoking(): boolean

Whether the agent is currently processing an invocation.

Returns

boolean

Inherited from

Agent.isInvoking


sandbox

get sandbox(): Sandbox

Execution environment for running commands, code, and file operations.

Returns

Sandbox

Throws

DefaultNotConfiguredError if no sandbox is configured for this environment (e.g. browsers, where no host default is registered).

Inherited from

Agent.sandbox


tool

get tool(): ToolCallerProxy

Direct tool calling accessor.

Returns a proxy where each property is a ToolHandle with .invoke() and .stream() methods:

const result = await agent.tool.calculator!.invoke({ a: 5, b: 3 })

for await (const event of agent.tool.calculator!.stream({ a: 5, b: 3 })) {
console.log('progress:', event)
}

Supports underscore-to-hyphen and case-insensitive name resolution. Results are recorded in message history by default (pass { recordDirectToolCall: false } to skip).

Returns

ToolCallerProxy

Inherited from

Agent.tool


toolRegistry

get toolRegistry(): ToolRegistry

The tool registry for managing the agent's tools.

Returns

ToolRegistry

Inherited from

Agent.toolRegistry


tools

get tools(): Tool[]

The tools this agent can use.

Returns

Tool[]

Inherited from

Agent.tools

Methods

addHook

addHook<T>(eventType, callback, options?): HookCleanup

Register a hook callback for a specific event type.

Type parameters

NameType
Textends HookableEvent

Parameters

NameTypeDescription
eventTypeHookableEventConstructor<T>The event class constructor to register the callback for
callbackHookCallback<T>The callback function to invoke when the event occurs
options?HookCallbackOptionsOptional configuration including execution order

Returns

HookCleanup

Cleanup function that removes the callback when invoked

Example

const agent = new Agent({ model })

const cleanup = agent.addHook(BeforeInvocationEvent, (event) => {
console.log('Invocation started')
})

// Later, to remove the hook:
cleanup()

Inherited from

Agent.addHook


addMiddleware

addMiddleware<TContext, TResult, TEvent>(phase, handler): () => void

Register an Input phase handler that transforms context before execution. Input handlers run before Wrap and Output handlers.

Type parameters

Name
TContext
TResult
TEvent

Parameters

NameType
phaseMiddlewareInputPhase<TContext, TResult, TEvent>
handlerMiddlewareInputHandler<TContext>

Returns

fn

▸ (): void

Returns

void

Example

agent.addMiddleware(InvokeModelStage.Input, async (context) => ({
...context,
systemPrompt: injectToSystemPrompt(context),
}))

Inherited from

Agent.addMiddleware

addMiddleware<TContext, TResult, TEvent>(phase, handler): () => void

Register a Wrap phase handler via the explicit .Wrap sub-token. Equivalent to passing the stage token directly.

Type parameters

Name
TContext
TResult
TEvent

Parameters

NameType
phaseMiddlewareWrapPhase<TContext, TResult, TEvent>
handlerMiddlewareHandler<TContext, TResult, TEvent>

Returns

fn

▸ (): void

Returns

void

Inherited from

Agent.addMiddleware

addMiddleware<TContext, TResult, TEvent>(phase, handler): () => void

Register an Output phase handler that transforms the result after execution. Output handlers see the result after Wrap handlers complete. Execution order: Input → Wrap → Output.

Type parameters

Name
TContext
TResult
TEvent

Parameters

NameType
phaseMiddlewareOutputPhase<TContext, TResult, TEvent>
handlerMiddlewareOutputHandler<TResult>

Returns

fn

▸ (): void

Returns

void

Example

agent.addMiddleware(InvokeModelStage.Output, async (result) => {
log(`Model returned stopReason=${result.result.stopReason}`)
return result
})

Inherited from

Agent.addMiddleware

addMiddleware<TContext, TResult, TEvent>(stage, handler): () => void

Register a middleware handler for a given stage (Wrap phase). Middleware wraps stage execution and can intercept, transform, or short-circuit operations.

Type parameters

Name
TContext
TResult
TEvent

Parameters

NameTypeDescription
stageMiddlewareStage<TContext, TResult, TEvent>The stage token identifying the interception point
handlerMiddlewareHandler<TContext, TResult, TEvent>The middleware handler function (async generator)

Returns

fn

A cleanup function that removes the middleware when called

▸ (): void

Returns

void

Example

const cleanup = agent.addMiddleware(InvokeModelStage, async function* (context, next) {
const start = Date.now()
const result = yield* next(context)
console.log(`Model call took ${Date.now() - start}ms`)
return result
})

// Later, remove the middleware:
cleanup()

Inherited from

Agent.addMiddleware


asTool

asTool(options?): Tool

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 AgentConfig.tools | tools array — it will be wrapped automatically via this method.

Parameters

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

Returns

Tool

A Tool wrapping this agent

Example

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] })

Inherited from

Agent.asTool


cancel

cancel(): void

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

void

Example

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'

Inherited from

Agent.cancel


initialize

initialize(): Promise<void>

Returns

Promise<void>

Inherited from

Agent.initialize


invoke

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

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

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

Returns

Promise<AgentResult>

Promise that resolves to the final AgentResult

Example

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

Inherited from

Agent.invoke


loadSnapshot

loadSnapshot(): never

Returns

never

Overrides

Agent.loadSnapshot


stream

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

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

Parameters

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

Returns

AsyncGenerator<AgentStreamEvent, AgentResult, undefined>

Async generator that yields AgentStreamEvent objects and returns AgentResult

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 conversation

Inherited from

Agent.stream


takeSnapshot

takeSnapshot(): never

Returns

never

Overrides

Agent.takeSnapshot