# Agent Class The `Agent` class is the foundation for creating AI agents in Mastra. It provides methods for generating responses, streaming interactions, and handling voice capabilities. ## Usage examples ### Basic string instructions ```typescript import { Agent } from "@mastra/core/agent"; // String instructions export const agent = new Agent({ id: "test-agent", name: "Test Agent", instructions: "You are a helpful assistant that provides concise answers.", model: "openai/gpt-5.1", }); // System message object export const agent2 = new Agent({ id: "test-agent-2", name: "Test Agent 2", instructions: { role: "system", content: "You are an expert programmer", }, model: "openai/gpt-5.1", }); // Array of system messages export const agent3 = new Agent({ id: "test-agent-3", name: "Test Agent 3", instructions: [ { role: "system", content: "You are a helpful assistant" }, { role: "system", content: "You have expertise in TypeScript" }, ], model: "openai/gpt-5.1", }); ``` ### Single CoreSystemMessage Use CoreSystemMessage format to access additional properties like `providerOptions` for provider-specific configurations: ```typescript import { Agent } from "@mastra/core/agent"; export const agent = new Agent({ id: "core-message-agent", name: "Core Message Agent", instructions: { role: "system", content: "You are a helpful assistant specialized in technical documentation.", providerOptions: { openai: { reasoningEffort: "low", }, }, }, model: "openai/gpt-5.1", }); ``` ### Multiple CoreSystemMessages ```typescript import { Agent } from "@mastra/core/agent"; // This could be customizable based on the user const preferredTone = { role: "system", content: "Always maintain a professional and empathetic tone.", }; export const agent = new Agent({ id: "multi-message-agent", name: "Multi Message Agent", instructions: [ { role: "system", content: "You are a customer service representative." }, preferredTone, { role: "system", content: "Escalate complex issues to human agents when needed.", providerOptions: { anthropic: { cacheControl: { type: "ephemeral" } }, }, }, ], model: "anthropic/claude-sonnet-4-20250514", }); ``` ## Constructor parameters **id?:** (`string`): Unique identifier for the agent. Defaults to \`name\` if not provided. **name:** (`string`): Display name for the agent. Used as the identifier if \`id\` is not provided. **description?:** (`string`): Optional description of the agent's purpose and capabilities. **instructions:** (`SystemMessage | ({ requestContext: RequestContext }) => SystemMessage | Promise`): Instructions that guide the agent's behavior. Can be a string, array of strings, system message object, array of system messages, or a function that returns any of these types dynamically. SystemMessage types: string | string\[] | CoreSystemMessage | CoreSystemMessage\[] | SystemModelMessage | SystemModelMessage\[] **model:** (`MastraLanguageModel | ({ requestContext: RequestContext }) => MastraLanguageModel | Promise`): The language model used by the agent. Can be provided statically or resolved at runtime. **agents?:** (`Record | ({ requestContext: RequestContext }) => Record | Promise>`): Sub-Agents that the agent can access. Can be provided statically or resolved dynamically. **tools?:** (`ToolsInput | ({ requestContext: RequestContext }) => ToolsInput | Promise`): Tools that the agent can access. Can be provided statically or resolved dynamically. **workflows?:** (`Record | ({ requestContext: RequestContext }) => Record | Promise>`): Workflows that the agent can execute. Can be static or dynamically resolved. **defaultOptions?:** (`AgentExecutionOptions | ({ requestContext: RequestContext }) => AgentExecutionOptions | Promise`): Default options used when calling \`stream()\` and \`generate()\`. **defaultGenerateOptionsLegacy?:** (`AgentGenerateOptions | ({ requestContext: RequestContext }) => AgentGenerateOptions | Promise`): Default options used when calling \`generateLegacy()\`. **defaultStreamOptionsLegacy?:** (`AgentStreamOptions | ({ requestContext: RequestContext }) => AgentStreamOptions | Promise`): Default options used when calling \`streamLegacy()\`. **mastra?:** (`Mastra`): Reference to the Mastra runtime instance (injected automatically). **scorers?:** (`MastraScorers | ({ requestContext: RequestContext }) => MastraScorers | Promise`): Scoring configuration for runtime evaluation and telemetry. Can be static or dynamically provided. **memory?:** (`MastraMemory | ({ requestContext: RequestContext }) => MastraMemory | Promise`): Memory module used for storing and retrieving stateful context. **voice?:** (`CompositeVoice`): Voice settings for speech input and output. **inputProcessors?:** (`(Processor | ProcessorWorkflow)[] | ({ requestContext: RequestContext }) => (Processor | ProcessorWorkflow)[] | Promise<(Processor | ProcessorWorkflow)[]>`): Input processors that can modify or validate messages before they are processed by the agent. Can be individual Processor objects or workflows created with \`createWorkflow()\` using ProcessorStepSchema. **outputProcessors?:** (`(Processor | ProcessorWorkflow)[] | ({ requestContext: RequestContext }) => (Processor | ProcessorWorkflow)[] | Promise<(Processor | ProcessorWorkflow)[]>`): Output processors that can modify or validate messages from the agent before they are sent to the client. Can be individual Processor objects or workflows. **maxProcessorRetries?:** (`number`): Maximum number of times a processor can request retrying the LLM step. **requestContextSchema?:** (`z.ZodType`): Zod schema for validating request context values. When provided, the context is validated at the start of generate() or stream(), throwing a MastraError if validation fails. ## Returns **agent:** (`Agent`): A new Agent instance with the specified configuration. ## Related - [Agents overview](https://mastra.ai/docs/agents/overview)