Your Mastra agents can now use five built-in tools for common tasks like: creating a TODO list, or searching the web.
The following tools are included in @mastra/core and can be used with both agents and workflows:
- Keeping a durable task list
- Searching the web
- Fetching a URL
- Asking users questions
- Submitting plans for approval
If you're prototyping an agent, built-in tools can get you up and running faster, and when you’re ready, you can swap them out for provider-specific tools.
All built-in tools integrate with Studio — task lists render as a live panel, ask-user prompts as a chat pause, and plan approvals as an approve/reject card, making it easier to interact and test your agent during development.
Get started
Install @mastra/core:
npm install @mastra/coreTask tracking
Manage a durable, thread-scoped task list — write, update, complete, and check tasks. Available using TaskSignalProvider, which registers four task tools (task_write, task_check, task_update, and task_complete). Memory is required to persist list states.
import { Agent } from "@mastra/core/agent";
import { Memory } from "@mastra/memory";
import { TaskSignalProvider } from "@mastra/core/signals";
export const taskTrackingAgent = new Agent({
id: "task-tracking-agent",
name: "Task Tracking Agent",
instructions: "Track your progress with the task tools.",
model: "anthropic/claude-opus-5",
memory: new Memory(),
signals: [new TaskSignalProvider()]
});Web search
Use the model's native web search capability. Supports OpenAI, Anthropic, Google Gemini, and xAI:
import { Agent } from "@mastra/core/agent";
import { webSearchTool } from "@mastra/core/tools";
export const webSearchAgent = new Agent({
id: "web-search-agent",
name: "Web Search Agent",
instructions: "Use web search when you need current information.",
model: "anthropic/claude-opus-5",
tools: { webSearchTool }
});Web fetch
Fetch a URL over HTTP or HTTPS and return the page's text content. Blocks localhost and private IPs, follows up to 5 redirects, and truncates at 100,000 characters:
import { Agent } from "@mastra/core/agent";
import { webFetchTool } from "@mastra/core/tools";
export const webFetchAgent = new Agent({
id: "web-fetch-agent",
name: "Web Fetch Agent",
instructions: "Fetch the page the user links to before answering.",
model: "anthropic/claude-opus-5",
tools: { webFetchTool }
});Ask user
Suspend the run to ask the user a question, then resume with their answer. Supports free-text, single-select, and multi-select prompts.
import { Agent } from "@mastra/core/agent";
import { askUserTool } from "@mastra/core/tools";
export const askUserAgent = new Agent({
id: "ask-user-agent",
name: "Ask User Agent",
instructions: "Ask the user for clarification when the request is ambiguous.",
model: "anthropic/claude-opus-5",
tools: { askUserTool }
});Submit plan
Suspend the run with a plan file path so the user can approve or reject it. Pair with workspace tools so the agent can write the plan file before submitting.
import { Agent } from "@mastra/core/agent";
import { submitPlanTool } from "@mastra/core/tools";
import { LocalFilesystem, Workspace, mkdirTool, readFileTool, writeFileTool } from "@mastra/core/workspace";
export const submitPlanAgent = new Agent({
id: "submit-plan-agent",
name: "Submit Plan Agent",
instructions: "You draft plans and submit them for review.",
model: "anthropic/claude-opus-5",
workspace: new Workspace({
id: "submit-plan-workspace",
filesystem: new LocalFilesystem({ basePath: process.cwd() })
}),
tools: { submitPlanTool, writeFileTool, readFileTool, mkdirTool }
});For more information and full configuration options, see:
