Mastra Skills
Core principle: Build composable, observable, and testable AI agents.
When to Use This Skill
Always use when:
- •Creating new Mastra agents
- •Implementing agent tools
- •Setting up workflows
- •Debugging agent behavior
- •Integrating external APIs with agents
Don't use for:
- •Non-agent-related code
- •Pure frontend components without agent interaction
Documentation Quick Links
- •reference.md - Official API documentation links
- •examples.md - Official examples and how to use them
- •Official Mastra Docs - https://mastra.ai/docs/
Development Checklist
When creating a new agent, use TodoWrite to track:
- • Define clear agent purpose and capabilities
- • Identify required tools and integrations
- • Plan observability and logging strategy
- • Design agent memory and state management
- • Consider error handling and fallbacks
- • Write tests for key scenarios
Essential Requirements
Every Agent Must Have
- •Clear purpose and instructions - Specific, not generic
- •Descriptive name - Not 'agent1' or 'myAgent'
- •Appropriate model selection - Choose based on task complexity
- •Explicit tool registration - No implicit assumptions
Every Tool Must Have
- •Descriptive ID - Clear what it does
- •Clear description - For the LLM to understand
- •Zod schema validation - Type-safe inputs
- •Error handling - Never let tools crash agents
- •Logging - For debugging and observability
Every Workflow Must Have
- •Clear trigger schema - Validated inputs
- •Proper step sequencing - Sequential vs parallel
- •Error handling - In each step
- •Observability hooks - beforeAll/afterAll for logging
Core Patterns
Basic Agent
typescript
import { Agent } from '@mastra/core';
const agent = new Agent({
name: 'descriptive-name',
instructions: 'Clear, specific instructions',
model: {
provider: 'ANTHROPIC',
name: 'claude-sonnet-4-5',
},
tools: { /* ... */ },
});
📚 More details: reference.md | https://mastra.ai/docs/agents/
Basic Tool
typescript
import { z } from 'zod';
const tool = {
id: 'descriptive-id',
description: 'What this tool does',
inputSchema: z.object({
param: z.string().describe('Parameter description'),
}),
execute: async ({ context }) => {
try {
const result = await operation();
return { success: true, data: result };
} catch (error) {
logger.error('Operation failed', { error, context });
return { success: false, error: error.message };
}
},
};
📚 More examples: examples.md | https://mastra.ai/docs/tools/
Basic Workflow
typescript
import { Workflow } from '@mastra/core';
const workflow = new Workflow({
name: 'workflow-name',
triggerSchema: z.object({ input: z.string() }),
});
workflow
.step({ id: 'step1', execute: async () => { /* ... */ } })
.then({ id: 'step2', execute: async () => { /* ... */ } })
.commit();
📚 More examples: examples.md | https://mastra.ai/docs/workflows/
Red Flags - Stop If You See
- •Agent without clear purpose
- •Tools without input validation
- •No error handling in tools
- •Missing observability/logging
- •Hardcoded credentials
- •No rate limiting for external APIs
- •Unbounded memory growth
Common Rationalizations
| Excuse | Reality |
|---|---|
| "Agent instructions don't need to be specific" | Vague instructions → unpredictable behavior |
| "Error handling adds complexity" | Unhandled errors → crashed agents |
| "We can add observability later" | Can't debug what you can't observe |
| "Tool schemas are optional" | Invalid inputs → runtime failures |
Integration Checklist
When integrating external services, use TodoWrite to track:
- • Create typed tool interface
- • Add input validation with Zod
- • Implement error handling
- • Add logging for debugging
- • Consider rate limiting
- • Handle authentication securely
- • Test with edge cases
- • Document tool usage
Testing Requirements
typescript
// Unit test for tools
describe('myTool', () => {
it('should handle valid input', async () => {
const result = await myTool.execute({
context: { param: 'test' },
mastra: mockMastra,
});
expect(result.success).toBe(true);
});
});
// Integration test for agents
describe('myAgent', () => {
it('should respond to queries', async () => {
const response = await myAgent.generate([
{ role: 'user', content: 'test query' }
]);
expect(response.role).toBe('assistant');
});
});
📚 More examples: examples.md
Quick Workflow
- •Need API details? → Check reference.md
- •Need examples? → Check examples.md
- •Building something? → Follow checklists above, use TodoWrite
- •Stuck? → Check official docs at https://mastra.ai/docs/
Final Rule
code
Every agent must have: 1. Clear purpose and instructions 2. Type-safe tools with validation 3. Error handling and observability 4. Tests covering key scenarios
Follow these principles for reliable, maintainable Mastra agents.