mastra-best-practices

mastra-best-practices

Mastra architectural patterns. Covers agent vs workflow choice, project structure, TypeScript ES2022 requirements, API keys setup, and accessing via mastra.getAgent/getWorkflow.

7звезд
0форков
Обновлено 1/23/2026
SKILL.md
readonlyread-only
name
mastra-best-practices
description

Mastra architectural patterns. Covers agent vs workflow choice, project structure, TypeScript ES2022 requirements, API keys setup, and accessing via mastra.getAgent/getWorkflow.

version
"1.0.0"

Mastra Best Practices

Quick reference for Mastra conventions. See mastra.ai/docs for details.


Agent vs Workflow

Use When
Agent Open-ended tasks (support, research) - reasons, decides tools, retains memory
Workflow Defined sequences (pipelines, approvals) - orchestrates specific steps in order

TypeScript Config (Required)

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022",
    "moduleResolution": "bundler"
  }
}

Critical: CommonJS causes errors. Must use ES2022.


Project Structure

src/mastra/
├── tools/       # Custom tools
├── agents/      # Agent configs
├── workflows/   # Workflows
└── index.ts     # Mastra instance

Environment Variables

OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GOOGLE_GENERATIVE_AI_API_KEY=...

Quick Reference

Basic Agent

new Agent({
  id: 'my-agent',
  name: 'My Agent',
  instructions: 'You are helpful',
  model: 'openai/gpt-4o',
  tools: { myTool }  // optional
})

Basic Workflow

createWorkflow({
  id: 'my-workflow',
  inputSchema: z.object({ input: z.string() }),
  outputSchema: z.object({ output: z.string() })
})
  .then(step1)
  .commit()

Structured Output

const response = await agent.generate('Extract: John, 30', {
  structuredOutput: {
    schema: z.object({
      name: z.string(),
      age: z.number()
    })
  }
})
console.log(response.object) // Access via .object property

Streaming

const stream = await agent.stream('Tell a story')
for await (const chunk of stream.fullStream) {
  console.log(chunk)
}

Key Conventions

  1. Use mastra.getAgent('name') / mastra.getWorkflow('name') not direct imports
  2. Always use env vars for API keys
  3. ES2022 modules required (not CommonJS)
  4. Test with Studio: npm run devhttp://localhost:4111

Resources

You Might Also Like

Related Skills

coding-agent

coding-agent

179Kdev-codegen

Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.

add-uint-support

add-uint-support

97Kdev-codegen

Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.

at-dispatch-v2

at-dispatch-v2

97Kdev-codegen

Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.

skill-writer

skill-writer

97Kdev-codegen

Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.

Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.

Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.