Readonly[A unique symbol to identify ADK agent classes.
Readonly[Brand identifying this object as a BaseNode (see isBaseNode).
Readonly[A unique symbol to identify ADK sequential agent class.
ReadonlyafterCallback or list of callbacks to be invoked after the agent run.
When a list of callbacks is provided, the callbacks will be called in the order they are listed until a callback does not return undefined.
Each callback takes a single Context argument. Returning Content
emits it as the agent's response, appended to the event history; return
undefined to leave the response as the agent produced it.
ReadonlybeforeCallback or list of callbacks to be invoked before the agent run.
When a list of callbacks is provided, the callbacks will be called in the order they are listed until a callback does not return undefined.
Each callback takes a single Context argument. Returning Content
skips this agent's own run — its runAsyncImpl body and its
afterAgentCallback — and emits the returned content as this agent's
response; return undefined to let the run proceed.
That skip is scoped to this agent. It sets endInvocation on the
invocation context the agent created for itself, which is a copy of its
parent's, so callers above are unaffected: a SequentialAgent still runs
the remaining sub-agents.
Protected ReadonlyconfigThe config this agent was constructed from.
Stored so clone can rebuild the agent by re-running the concrete constructor with overrides applied, which re-derives all state correctly instead of copying an already-mutated instance. Shallow-copied so later external mutation of the caller's object does not leak into clones.
ReadonlydescriptionOptional ReadonlyinputOptional ReadonlyisolationReadonlynameThe agent's name. Agent name must be a JS identifier and unique within the agent tree. Agent name cannot be "user", since it's reserved for end-user's input.
Optional ReadonlyoutputOptionalparentThe parent agent of this agent.
Note that an agent can ONLY be added as sub-agent once.
If you want to add one agent twice as sub-agent, consider to create two agent instances with identical config, but with different name and add them to the agent tree.
The parent agent is the agent that created this agent.
Optional ReadonlypreparedThe retry config with its exception filter normalized once, up front (see prepareRetryConfig). Used by the node runner so the retry hot path never re-normalizes or throws on a malformed config mid-retry.
ReadonlyrerunOptional ReadonlyretryOptional ReadonlystateReadonlysubThe sub-agents of this agent.
Optional ReadonlytimeoutReadonlywaitWhether this node must wait for ALL of its predecessors to trigger before
it runs (fan-in barrier). Overridden by JoinNode.
Root agent of this agent. Computed dynamically by traversing up the parent chain.
Creates a copy of this agent with the given config fields overridden.
The clone is a detached root: its parentAgent is always undefined.
Sub-agents are recursively cloned (and re-parented to the clone) unless
subAgents is overridden. Rebuilding via the concrete constructor
re-derives all state, so a cloned LlmAgent gets a fresh
requestProcessors array rather than sharing the original's.
See google/adk-js#534.
Optionaloverrides: Partial<BaseAgentConfig>Config fields to override on the clone. Overriding
parentAgent is rejected: parentage is assigned only when a parent
agent is constructed with its sub-agents.
A new detached agent instance of the same concrete class.
ProtectedcreateCreates an invocation context for this agent.
The invocation context of the parent agent.
The invocation context for this agent.
Finds the agent with the given name in this agent and its descendants.
The name of the agent to find.
The agent with the given name, or undefined if not found.
Finds the agent with the given name in this agent's descendants.
The name of the agent to find.
The agent with the given name, or undefined if not found.
ProtectedhandleRuns the after agent callback if it exists.
The invocation context of the agent.
The event to return to the user, or undefined if no event is generated.
ProtectedhandleRuns the before agent callback if it exists.
The invocation context of the agent.
The event to return to the user, or undefined if no event is generated.
Runs the node, normalizing every yielded item into an Event. This
is what the engine (and ctx.runNode()) consumes. Validates the input
against inputSchema once, up front (skipping genai Content, which nodes
coerce themselves).
Entry method to run an agent via text-based conversation.
The invocation context of the parent agent.
An AsyncGenerator that yields the events generated by the agent.
ProtectedrunCore logic to run this agent via text-based conversation.
The invocation context of the agent.
An AsyncGenerator that yields the events generated by the agent.
ProtectedrunRuns this agent as a workflow node.
The node runner calls this; it delegates to runAsync, so an agent
behaves identically whether it is run directly or as a node. Mirrors
adk-python BaseAgent._run_impl.
The invocation context comes from NodeContext.getInvocationContext rather than the raw field, so the agent runs against whatever view of the session the workflow wants it to see.
Unlike adk-python's _run_impl, nothing is stamped onto the events here.
Python has to fix up the author and the node path because it authors
in-workflow events as the workflow itself; the TypeScript node runner
already owns both (enrichEvent keeps an author the node set, and always
stamps the true node path), so repeating it would be dead code.
nodeInput is intentionally unused: an agent's input is its conversation,
which the workflow supplies through the session. A node that needs to read
its input — an LlmAgent injecting it into the prompt, say — does so in
its own wrapper.
Entry method to run an agent via video/audio-based conversation.
The invocation context of the parent agent.
An AsyncGenerator that yields the events generated by the agent.
ProtectedrunImplementation for live SequentialAgent.
Compared to the non-live case, live agents process a continuous stream of audio or video, so there is no way to tell if it's finished and should pass to the next agent or not. So we introduce a task_completed() function so the model can call this function to signal that it's finished the task and we can move on to the next agent.
The invocation context of the agent.
ProtectedtoNormalizes a single yielded item into an Event (or null to skip).
Subclasses may override for richer coercion (e.g. FunctionNode).
ProtectedvalidateValidates node input against inputSchema (Content passes through). Only
enforced for Zod schemas; a genai Schema is left unvalidated (see
parseWithSchema).
ProtectedvalidateValidates node output against outputSchema (Content passes through). Only
enforced for Zod schemas; a genai Schema is left unvalidated (see
parseWithSchema).
A shell agent that runs its sub-agents in a sequential order.
Deprecated
Use
Workflowinstead, which expresses the same ordering as a graph and adds routing, retries, HITL and resumability. This class will be removed in a future version. Note that aWorkflowcannot yet be anLlmAgentsub-agent.