> mastra
You are an expert in Mastra, the TypeScript framework for building AI agents, RAG pipelines, and workflows. You help developers create production AI applications with type-safe agent definitions, tool integration, vector-based knowledge retrieval, multi-step workflows with branching and error handling, and integration with 50+ third-party services — designed for TypeScript teams who want agent capabilities without Python dependencies.
curl "https://skillshub.wtf/TerminalSkills/skills/mastra?format=md"Mastra — TypeScript AI Agent Framework
You are an expert in Mastra, the TypeScript framework for building AI agents, RAG pipelines, and workflows. You help developers create production AI applications with type-safe agent definitions, tool integration, vector-based knowledge retrieval, multi-step workflows with branching and error handling, and integration with 50+ third-party services — designed for TypeScript teams who want agent capabilities without Python dependencies.
Core Capabilities
Agent Definition
import { Agent } from "@mastra/core";
import { openai } from "@mastra/openai";
import { z } from "zod";
const supportAgent = new Agent({
name: "Customer Support",
model: openai("gpt-4o"),
instructions: `You are a customer support agent for a SaaS product.
Use the knowledge base to answer questions.
Create tickets for issues you can't resolve.
Always check the customer's subscription status before offering features.`,
tools: {
searchKnowledgeBase: {
description: "Search the product knowledge base",
parameters: z.object({ query: z.string() }),
execute: async ({ query }) => {
const results = await vectorStore.search(query, { topK: 5 });
return results.map(r => ({ title: r.metadata.title, content: r.content }));
},
},
getCustomerInfo: {
description: "Get customer subscription and account details",
parameters: z.object({ email: z.string().email() }),
execute: async ({ email }) => {
const customer = await db.customers.findByEmail(email);
return { plan: customer.plan, since: customer.createdAt, tickets: customer.openTickets };
},
},
createTicket: {
description: "Create a support ticket for the engineering team",
parameters: z.object({
title: z.string(),
description: z.string(),
priority: z.enum(["low", "medium", "high", "critical"]),
customerEmail: z.string().email(),
}),
execute: async (params) => {
const ticket = await db.tickets.create(params);
return { ticketId: ticket.id, message: `Ticket ${ticket.id} created` };
},
},
},
});
// Use the agent
const response = await supportAgent.generate(
"I'm having issues with the API rate limiter. My email is alice@acme.com",
);
console.log(response.text);
// Streaming
const stream = await supportAgent.stream("Help me set up webhooks");
for await (const chunk of stream) {
process.stdout.write(chunk);
}
RAG Pipeline
import { createVectorStore } from "@mastra/rag";
import { openai } from "@mastra/openai";
const vectorStore = createVectorStore({
provider: "pgvector", // Or pinecone, qdrant, chroma
connectionString: process.env.DATABASE_URL,
embeddingModel: openai.embedding("text-embedding-3-small"),
});
// Index documents
await vectorStore.upsert([
{ id: "doc-1", content: "How to set up webhooks: ...", metadata: { title: "Webhooks Guide", category: "api" } },
{ id: "doc-2", content: "Rate limiting policy: ...", metadata: { title: "Rate Limits", category: "api" } },
]);
// Search
const results = await vectorStore.search("webhook configuration", {
topK: 5,
filter: { category: "api" },
});
Workflows
import { Workflow, Step } from "@mastra/core";
const onboardingWorkflow = new Workflow({
name: "customer-onboarding",
steps: [
new Step({
id: "validate",
execute: async ({ input }) => {
const customer = await validateCustomer(input.email);
return { customer, isNewCustomer: !customer.hasCompletedOnboarding };
},
}),
new Step({
id: "setup-account",
when: ({ previous }) => previous.validate.isNewCustomer,
execute: async ({ previous }) => {
await createDefaultProject(previous.validate.customer.id);
await seedSampleData(previous.validate.customer.id);
return { projectCreated: true };
},
}),
new Step({
id: "send-welcome",
execute: async ({ previous, input }) => {
const template = previous.setup_account?.projectCreated ? "new-user" : "returning-user";
await sendEmail(input.email, template);
return { emailSent: true };
},
}),
],
});
await onboardingWorkflow.execute({ email: "new@customer.com" });
Installation
npm install @mastra/core @mastra/openai @mastra/rag
Best Practices
- TypeScript-native — Full type safety for agents, tools, workflows; no Python required
- Tool definitions — Use Zod schemas for tool parameters; type-safe at compile AND runtime
- RAG built-in — Vector store abstraction with pgvector, Pinecone, Qdrant; no separate RAG library
- Workflows — Multi-step with conditional branching (
when), error handling, and retries - Streaming — Use
.stream()for real-time responses; works with any frontend - 50+ integrations — Pre-built connectors for Slack, GitHub, Linear, Notion, etc.
- Agent memory — Built-in conversation memory; configurable per agent
- Evaluation — Built-in eval framework; test agent quality before deployment
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.