AI Engineer World's Fair 2025
AI Pipelines and Agents in Pure TypeScript with Mastra.ai
Read the talk
Build a TypeScript Meme Pipeline, Then Give It a Conversational Interface
A workplace-frustration meme generator shows how typed workflows, runtime schemas, inspectable steps, and an agent interface fit together in Mastra.
From a talk by Nick Nisi and Zack Proser
Before you start: Familiarity with TypeScript, asynchronous functions, JSON, and basic Git usage will help you follow the workflow and schema examples.
Turn a workplace frustration into a meme
How do you turn a workplace complaint into a meme someone can share? Nick Nisi and Zack Proser start with that deliberately small application. The exercise is humorous, but its engineering problems—interpreting an input, moving structured data between operations, calling external services, and presenting the result—also appear in practical workplace automation. The workshop proceeds from concepts to collaborative coding, with questions interleaved throughout.
The presenters bring developer-tooling experience from WorkOS, whose enterprise features include SSO, directory sync, audit logs, and fine-grained authorization. Their example is familiar: an application works, a prospective customer asks for enterprise sign-on, and the team needs to add it without building an identity platform. That identity concern extends to agents acting on a user's behalf. Nisi introduces himself through developer experience, the dysfunctional.fm podcast, TypeScript, and Vim; Proser comes from application and infrastructure development, with more recent work in GenAI, MLOps, and retrieval-augmented generation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Put explicit structure around model decisions
Mastra supplies three application-building primitives: workflows, tools, and agents. Around those primitives sit a local playground, persistence, memory, observability, and evaluations. The workshop concentrates on a subset of that system, with Mastra contributors in the room to answer questions about the framework itself.
A workflow begins with a repeatable sequence. Suppose a colleague keeps scraping a site, identifying interesting people, looking up their information, obtaining an image, and writing an email. Those operations have an order and pass data forward. A workflow makes the sequence explicit, including transformations between steps. Because model outputs vary, runtime schemas provide a boundary at which the application can validate data, apply explicitly configured coercions, or handle errors. Nisi compares the chained API to RxJS: start with a value, perform an operation, map its result, and continue. The control flow can be prescribed even when an individual generation remains nondeterministic.
Tools are callable functions: filesystem operations, API requests, database queries, or business logic. They let a model retrieve information outside its training data and take actions. The presenters initially implemented the meme operations as independent tools, then changed the design so the agent would invoke a workflow containing the sequence.
An agent adds a human interface to those capabilities. A busy or nontechnical colleague can describe a task instead of assembling its inputs manually. In this application, the agent combines instructions with permission to invoke a workflow. More generally, an agent may inspect the current state and choose a next action; the important design choice is how much of that decision-making belongs to the model and how much belongs to application code.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Give the model context, then define the exercise
Model Context Protocol, or MCP, provides a shared interface for connecting AI clients to tools and context. Nisi's practical example is the GitHub MCP server in Claude Desktop. Given an issue and an example application, the assistant can retrieve comments, follow linked repositories or examples, and suggest how to reproduce the problem. The useful change is that the conversation can acquire the relevant evidence as it proceeds.
The presenters also introduce an MCP-only shirt-ordering demonstration. During the workshop, the shirt promotion was free and required a supporting MCP client; the address now leads to the WorkOS Shop, so the original offer should be understood as historical. Their account of a packed MCP Night at the Exploratorium adds context for the interest in the protocol, before the workshop returns to its own application.
The meme generator accepts a frustration, selects an existing template, writes new captions, and publishes the resulting image through Imgflip. OpenAI supplies the language understanding. The resulting URL is shareable, but Imgflip documents that images are accessible to anyone with the URL and that low-view images may be deleted; it is neither private storage nor guaranteed permanent hosting. The build starts with one testable workflow step, expands into the complete pipeline, and only then adds an agent.
The companion workshop instructions provide the self-paced path. Checkpoint branches let participants catch up, while main contains the completed application. The recording starts from a step-zero checkpoint and installs dependencies with npm. Its priority is understanding the pieces well enough to experiment, rather than finishing every exercise at the same speed.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Choose who controls the sequence
An audience question makes the tools-versus-workflows distinction concrete. The createTool and createStep APIs can look similar, but they assign orchestration differently.
| Arrangement | Who chooses the sequence? | Useful when |
|---|---|---|
| Independent tools | The model chooses calls at runtime | Several actions are available, and the request determines which are needed |
| Workflow | Application code specifies steps and transforms | A task must follow a known sequence |
| Agent with both | The model chooses a capability; a workflow controls its internals | Conversation needs flexibility around a repeatable task |
Proser's example of giving an agent a hundred tools and asking it to go to Disneyland illustrates the ambiguity created by a large, loosely constrained action space. A workflow reduces the number of orchestration decisions the model must make.
The first setup problems are ordinary development problems. The public workshop repository does not require private access, but work laptops without configured SSH credentials can fail when given an SSH clone command. Use its HTTPS clone option in that case; an SSH address with a colon is not the same thing as a browser URL. While participants resolve that, Nisi recommends Mastra's documentation MCP server, which he installed in Claude Code and Claude Desktop to supply framework-specific context. The brief follow-up about a JSON configuration object does not develop into a complete setup procedure.
The initial success criterion is deliberately modest: open the playground with no agents, tools, or workflows registered. Asked why Mastra, Proser points to TypeScript, the Vercel AI SDK's provider abstraction, built-in evaluations, and local development ergonomics. He recalls improving an existing pipeline by changing its model to GPT-4o. His broader preference is for shared primitives that colleagues can understand and invoke through code or an API, instead of independently rebuilding pipeline infrastructure in bespoke scripts. These are reasons drawn from early use, rather than a framework benchmark.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Finalize a workflow before running it
Another question concerns code that lists steps and then also chains .then(...). A Mastra contributor describes step arrays as a linear definition and fluent syntax as the route to branching, conditionals, and loops, mentioning .then, .if, .branch, and .doWhile. The essential distinction is between defining the graph and executing a run: .commit() finalizes and returns the workflow; it does not itself run the task. The contributor also connects finalization to the cached, synchronized representation used by local visualization. The companion example retains both a steps declaration and explicit chaining, so the discussion should not be read as a blanket instruction to remove either from an arbitrary version of the API.
The first checkpoint contains a Mastra instance and memory scaffolding, but no registered application capabilities. Starting the development server exposes the playground's Agents, Networks, Tools, MCP Servers, Workflows, and runtime-context views. Nisi says localhost:4011 in the recording; the inspected companion instructions use localhost:4111/workflows. Follow the address printed by the development server for the checkout you are using. The server also exposes an API endpoint and Swagger specification. The next assignment is a disposable, single-step workflow that will make those inspection tools useful before the full application exists.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Improve coding context without prescribing an editor
During the build, the discussion turns to AI inside Neovim. Nisi demonstrates Avante's chat interface, while Proser mentions prior use of NeoAI; Goose comes up as something Nisi has not tried. Nisi ultimately prefers Vim in one Tmux pane and Claude Code in another. That keeps his usual editor interactions intact: he can maximize Vim while the assistant works, then restore the split when he needs the conversation.
An audience member pushes back on mandating a single framework or editor. The group distinguishes useful shared defaults from a top-down standard that ignores product needs. Another question uses Mario Kart booster packs as an analogy: can a team give developers a strong starting configuration? Nisi compares evolving Cursor Rules to tests that grow with a codebase. Proser points instead toward documentation delivered through MCP, which can serve multiple compatible clients.
Proser reports zero hallucinations in one coding session after enabling Mastra's documentation MCP server, with requested features generated correctly on the first attempt. He also used TypeScript linting and compilation to check the code. The portable mechanism is access to relevant documentation; that anecdote does not establish a guarantee that a documentation-connected assistant will always produce correct code.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Separate execution engines, schemas, and retries
A question about durable execution brings up 12-Factor Agents and Mastra's then-new Workflows vNext. A contributor explains that the original engine used XState, while vNext aims to preserve the workflow syntax, visualization, and development server while allowing a different execution engine underneath. Inngest is the first integration discussed; Temporal and Cloudflare Workflows are examples of requested alternatives. The contributor attributes Inngest's experimental label to its recent release and offers an expectation of API stability, rather than a demonstrated durability test.
Deployment is a separate choice. The contributor describes a default Hono server bundle that can run in Docker, adapters for Cloudflare, Netlify, and Vercel, and Mastra Cloud. Embedding the application in Express or a Next.js backend is also discussed. The design goal is to keep the application portable rather than require one hosting environment.
Structured output raises a different boundary question: what happens when the prompt and schema disagree? A basic string type is easier for a model to satisfy than a refinement such as exactly four characters. Zod describes and validates data at runtime; it does not make TypeScript's compiler inspect a future model response. Nor should OpenAI's schema adherence be attributed to Zod alone: its Structured Outputs explanation describes model training plus constrained decoding. That is distinct from validating a returned value in application code.
A Mastra contributor reports testing 30 schemas across 16 models and finding tool calling harder than structured generation. The contributor corrects the initial suggestion that no framework-specific handling exists: Mastra added a compatibility layer to improve tool-schema behavior. The matching tool-schema compatibility study describes schema transformations and constraint descriptions. Its headline and full table use different model populations, so the useful point here is the additional compatibility mechanism, not a general application-accuracy claim.
Repeated calls do not necessarily mean schema validation is automatically repairing a result. During development, the presenters accidentally sent a large base64-encoded image and observed repeated failures. A contributor suggests the agent may have continued until maxSteps, but does not establish that diagnosis conclusively. Asked whether a five-character string would automatically be retried against a four-character constraint, the contributor leaves that exact case unresolved. Application code still needs an explicit policy for a rejected value. For example, validation can preserve the evidence of failure without silently truncating it:
typescript
import { z } from "zod";
const fourCharacters = z.string().length(4);
export function validateLabel(value: unknown) {
const result = fourCharacters.safeParse(value);
if (!result.success) {
return {
status: "rejected" as const,
issues: result.error.issues,
};
}
return {
status: "accepted" as const,
value: result.data,
};
}
A model can return nonconforming content; whether to reject, request a correction, or take another path is a separate application decision.
The serverless follow-up remains less definite. A community Lambda deployer is mentioned, but the room does not establish whether workflow steps become separate functions or share one deployed function. That matters for long-running work and platform time limits. The discussion also cites an unsupported Cloudflare bundle-size figure; use the current Workers limits for deployment planning rather than treating that spoken figure as a platform contract.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Inspect the first structured result
At the next checkpoint, the Mastra instance registers the test workflow, and a workflows directory contains its implementation and schema. Refreshing the playground reveals a one-step graph accepting raw text about work frustration. Nisi enters “Conference Wi-Fi sucks.” The node turns green, and inspecting its output shows the original text, a frustrated mood, and technology as the frustration category. The intermediate object is now visible before any template selection or image publication is involved.
A complaint becomes structured input for the next step
Constructed example: Object IDs and display labels are teaching labels, not claims about exact property names in the demonstrated JSON.
Conference Wi-Fi sucks
Operation: Run the demonstrated frustration-extraction step.
Original text
Conference Wi-Fi sucks
Conference Wi-Fi sucks
Mood
Not present
frustrated
Frustration category
Not present
technology
The next exercise expands this into the complete workflow, with data mappings between operations. An audience member asks whether the JSON is what gets passed to another step. Precisely: its structure is an application contract, chosen because downstream operations need those values. Strings, arrays, and nested objects are available building blocks; the useful schema is the one that carries the information the next operation requires.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Carry the template's caption slots forward
Designing those contracts requires looking ahead. Frustration subject and intensity help choose a template, but template selection must return more than an image name. Nisi uses a Rock taxi meme to explain that Imgflip templates expose caption boxes: a template may have three slots, and the publication request must supply text for those slots. Caption-slot metadata belongs in the pipeline contract. If it disappears between selection and caption generation, a later step cannot reliably fit the text to the image.
A compact TypeScript boundary can make that relationship explicit. Here the selected template retains its ID and slot count while caption validation checks that the supplied text fits it:
typescript
import { z } from "zod";
const templateSchema = z.object({
id: z.string(),
name: z.string(),
boxCount: z.number().int().positive(),
});
export function prepareCaptionRequest(
templateInput: unknown,
captionsInput: unknown,
) {
const template = templateSchema.parse(templateInput);
const captions = z.array(z.string())
.length(template.boxCount)
.parse(captionsInput);
return {
templateId: template.id,
boxes: captions.map((text) => ({ text })),
};
}
The schema verifies the shape and count; it cannot decide whether the captions are funny or appropriate. The displayed three-panel meme makes the physical layout concrete before the workshop moves on to tuning prompts, temperature, and model choice in the playground.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Debug the external service before blaming the model
Failures at the generate-meme step lead to a concrete credential checklist:
- Use the Imgflip username, not the account email.
- Supply an Imgflip password. If the account was created through Google sign-in, set a password in Imgflip's settings afterward.
- Confirm that the required credentials exist before investigating an opaque generation error.
Proser says the workshop moved away from a circulating anonymous credential to participant accounts to reduce rate-limit trouble; no comparative limit is established. Participants can also recover through a checkpoint branch after preserving unfinished work. The presenters explain another scope decision: they removed a step that generated an entirely new image because the account-verification process they encountered was too burdensome for a workshop. Existing templates keep the exercise focused on orchestration.
Asked how these applications are invoked outside the playground, Proser distinguishes his deployed experience from his experiments. His existing work applications mostly use the Vercel AI SDK behind web interfaces, often hosted on Vercel; Mastra internal tooling is more recent. Invoking a workflow through an API, perhaps from a nightly cron job, is a pattern he wants to explore rather than one he claims to have fully established in production.
Participants begin sharing working memes in Slack, including frustrations about loud sales staff beside a systems engineer and every project being high priority. The presenters also acknowledge offensive outputs and incomplete attempts to curb them. Successful execution and structurally valid captions do not establish suitable content. The book giveaway and shared examples mark progress, but the application still needs judgment about what it publishes.
A data-engineering question compares workflows with Airflow DAGs. Proser first takes a detour through GraphRAG—vector search combined with knowledge-graph traversal—then returns to his own simpler experience with sequential steps and branches. An audience member asks whether an expensive pipeline can resume at a later step without repeating earlier calls. The discussion does not settle selective reruns. It does identify a separate cost control: choose a model per step, using a less expensive model for straightforward extraction and reserving stronger models for harder work. Independent tools could also let a model skip unnecessary operations, though that changes who controls execution. A caching question receives no concrete implementation.
Further credential troubleshooting returns to process state: inspect .env, restart the running server after changing it, and check for accidental spaces in values. Saving a file does not mean the current process has reloaded its environment. The remaining error in that exchange is not conclusively resolved on the recording.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Watch a conversation become an authenticated transaction
The live shirt demonstration exposes a useful failure mode. Nisi asks Claude for a shirt, and it initially responds that it cannot provide physical merchandise. The MCP shop is disconnected. After reconnecting, repeating the request, and allowing the tool call, the conversation can retrieve the available shirt. Connection, tool approval, and physical fulfillment are distinct stages; waiting for approval is not the same as waiting for shipping.
The shirt description includes “Context is everything.” The assistant then collects size, company, and a complete mailing address. Nisi supplies XL and WorkOS, improvises an address, and adds the missing locality information when prompted. The tool returns an order confirmation, after which he asks about the order. The model is helping collect arguments and present results around an external action.
The hosting explanation distinguishes this instance, which the presenters believe is on Vercel, from a separate Cloudflare version that Nisi says stores order information in KV. WorkOS supplies authentication. Because he is already signed in, much of the login is hidden, but connecting completes an authentication flow and obtains a token. He then asks whether the system knows identity information he has not typed into the chat. That is the broader commerce pattern: natural-language requirements, authenticated tool access, argument collection, and an order operation. Their joke about talking a system into a discount is not a demonstrated vulnerability, but it points to why transaction rules must live beyond conversational persuasion.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Trace a complete meme through four steps
Returning to the meme application, the next checkpoint exposes the full workflow. It contains four substantive steps, with mappings between them and a final output mapping:
| Step | Responsibility |
|---|---|
| Extract frustrations | Turn the complaint into structured information |
| Find base meme | Select the template and carry its metadata forward |
| Generate captions | Write text for the selected template |
| Generate meme | Submit the template and captions to Imgflip |
Each step has input and output schemas. The mappings adapt one result to the next operation's contract rather than leaving that wiring implicit.
The live input concerns someone being too busy preparing a workshop to review a pull request. The graph runs, its steps turn green, and the extractor classifies the problem as communication. Later inspection shows the selected template is Disaster Girl, while the generated captions concern a meeting that could have been an email and everyone smiling as if things are fine. The result illustrates both a completed pipeline and the semantic drift that can occur inside it: the final joke is related to workplace communication but has moved away from the original PR complaint.
The useful debugging surface is the sequence of inspectable inputs and outputs. A developer can locate where information changed, then adjust the relevant prompt, schema, or mapping. All of this happens locally, before deployment. The next exercise adds an agent with instructions and access to this already-working workflow, so a colleague can request the same operation through chat. Memory and playground testing are part of that integration, while prompt changes remain available for tuning frustration analysis and meme choice.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Apply the pattern, and inspect what gets generated
The Mastra contributors briefly connect the workshop to their earlier Gatsby and open-source JavaScript work. Their attendance was not planned far in advance, but it let the presenters ask implementation questions directly. The discussion then shifts to applications beyond memes. One participant wants to chat with physical-server infrastructure to retrieve logs and assist incident investigation. Proser emphasizes small manual tasks that can be reduced to a few steps and API calls. Nisi and Proser pair that enthusiasm with a practical instruction: review generated code and use secret-scanning tools such as GitGuardian before committing it.
Nisi's cross-SDK experiment shows why that review matters. Maintaining several language SDKs means a small field addition in Node may need corresponding changes in Ruby, Go, PHP, Kotlin, and others. He built an experiment in which labeling the first PR generated corresponding PRs elsewhere. Nisi reports a working prototype after two hours with Claude; Proser describes the resulting GitHub Action as roughly 4,300 lines. Asked whether it used Dagger, Nisi says it did not—and admits he had not reviewed the generated implementation. The experiment was not shipped. Much of its complexity handled diffs, and some attempts made the requested change while deleting the rest of the files. He suggests later programmatic Claude Code capabilities as a possible way to delegate those editing mechanics.
Proser offers a smaller internal-tool example: helping a marketing or sales colleague identify engineers already working with MCP for conference outreach. Proser reports having a working v0 analysis tool four minutes into a colleague's explanation. The colleague received a separate URL where they could supply input and obtain analysis. A descriptive paragraph was enough to begin the prototype, but this had not led his nontechnical colleagues to demand the keyboard themselves. In his experience, enjoying the repeated work of getting software right still distinguishes the people who choose to build it.
The discussion also reaches legal work: Proser describes lawyers asking detailed questions about GenAI despite not being programmers, and points to semantic search and information compression over large case-law collections. Back in the workshop, an audience question establishes a scope boundary: configuring an MCP server in the playground's MCP Servers view is not part of this exercise; a separate tutorial is offered.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Finish with chat, inspection, and persistence
The final checkpoint adds the meme generator to the Agents tab. The chat interface sits beside an overview of the agent's instructions, its workflow access, and model settings. Temperature and top-p can be adjusted during testing. The example complaint is being invited to long meetings without speaking. The agent invokes the workflow, returns an inline meme, and continues the conversation. Expanding the tool activity exposes the arguments, workflow invocation, and complete result, so the conversational layer preserves access to execution details.
The same interface could front a report, analysis, SQL query, code-generation task, or review. What the workshop actually completes is narrower and concrete: an agent supplies inputs to a multistep workflow and turns its returned data into a human-readable response, an image, and a share link. The presenters encourage deployment, but do not establish a privacy assurance for the application.
Proser points to an undemonstrated RAG example as a further direction: defining retrieval and generation in one framework can reduce the glue code he previously needed across several libraries. Other extensions include new tools, a vector database, and MCP exposure. The proposed next step is to let colleagues use the application and learn from what happens, rather than stop at a successful local generation. During closing questions, the presenters also identify the reusable Markdown slides in the repository and Slidev as their presentation tool.
The last technical question concerns memory. Proser explains that the demo uses SQLite to retain chats, which appear in the playground's left rail, and mentions alternative storage drivers such as Postgres. Storage must be configured and connected to the component that uses it; a conversational interface alone does not imply persistence. The participant's more specific question—where to find a referenced execution step—is handed off to individual help rather than answered on screen. The completed application therefore ends with three distinct surfaces to understand: the conversation a user sees, the workflow execution a developer inspects, and the stored history that survives between chats.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
From the talk
TypeScript meme-generator project with workshop instructions, presentation materials and an OpenAI–Imgflip workflow.
Exercises for building a frustration extractor, composing the meme workflow and adding a conversational agent.
Introduction and setup guidance for giving compatible coding assistants access to Mastra documentation.
A May 2025 investigation of tool-schema failures across models and the compatibility transformations used to reduce them.
Template and captioning API documentation, including credentials, image URLs and publication behavior.
Further reading
Explains schema-constrained generation, constrained decoding and the distinction between JSON validity and schema adherence.
Updates since the talk
- Current Cloudflare Workers limitsDocumentation
Current deployment-size, execution and resource limits for Cloudflare Workers.
Read the complete timestamped transcript
- 0:00
[upbeat music] All right, should we get going?
- 0:16
Let's do it.
- 0:16
All right. Welcome, everyone. Uh, this is AI pipelines and agents in pure TypeScript with Mastra.ai.
- 0:24
Uh, today's mission, do you wanna talk?
- 0:25
Sure. Um, so what we're gonna do today is we're gonna build an AI-powered meme generator, and, uh, yes, that's humorous. Sounds like a toy, but the patterns that we're gonna use here, uh, both with the Mastra framework and in terms of using TypeScript to build a production agent, are the same patterns that, that we've used and that
- 0:40
you can use, um, to deploy to production with, uh, AI applications. Um, so the rough format that we're gonna follow here is we're gonna do, like, a twenty-minute intros and concept just to make sure everyone's level set.
- 0:50
Feel free to, you know, stop us, ask questions, and then, um, the majority of the, the time this workshop is gonna be spent coding, uh, together, um, collaboratively, and then we'll have about ten minutes wrap up and QA, and a, a little fun demo for you at the end to get some swag.
- 1:03
Yep. And, uh, yeah. W-- So this is a true workshop format. Uh, we'll be building together. If you have questions, uh, reach out to us. We're happy to help.
- 1:11
And, uh, just so you can get kinda a head start on it, if you go to Workshop AI agents with Mastra, s-- uh, the Slack channel in the AI engineer Slack, all the materials are in the pinned link there, and we can have discussions there as well continuing. [clears throat]
- 1:26
Uh, so we work at a company called WorkOS. Um, we build developer tools and make enterprise features happy-- uh, enterprise developers happy with easy-to-use tools like SSO and SAML, directory sync, audit logs, fine-grained auth.
- 1:38
Uh, and we're really getting into AI, uh, and securing your AI, uh, things like securing your MCP, attaching identity to those agents so that they can act on your behalf and know who you are.
- 1:48
Yep. Um, another good way to think about WorkOS is if you-- Like, let's say Nick and I built the ultimate app this weekend, we're ready to go sell it, and then the first time we, we demo it to somebody, they say, "Can you give us a single sign-on for our two thousand users over here and a different
- 1:59
path over here?" Um, so then we would go and buy WorkOS or use WorkOS, drop the JavaScript in, and we would have those features, uh, ready to sell.
- 2:08
Uh, so my name's Nick Nisi. I'm developer experience at WorkOS. Uh, I'm also a host on the dysfunctional.fm podcast, formerly JS Party. Any JS Party listeners ever?
- 2:18
Yep.
- 2:19
Nice. Um, uh, I also do conference MC, MCing and speaking. Um, I'll be at Squiggle Conf MCing that, uh, which is a dev tools focus conference in Boston later this year.
- 2:30
Uh, I'm also a TypeScript en-enthusiast, as you'll see. I'm a Vim user, by the way, and I'm Nick Nisi everywhere.
- 2:37
Hey, everyone, I'm Zach. I'm really excited to be here with you all. I've mostly been an application and infrastructure developer, uh, my career, but for the last two years, I've really been focused on GenAI, uh, MLOps, and then retrieval augmented, uh, generation pipelines or RAG pipelines.
- 2:50
So, um, yeah, really excited to be here and building with you today.
- 2:57
Uh, okay. So what is Mastra? Um, I'll, I'll just embarrass, uh, two folks quickly and just point out that we have some core Mastra team members here, so this is very exciting.
- 3:04
So you'll not only be able to get some assistance from us, hopefully, but also, uh, from the Mastra core team for any questions that go over our heads. Mastra is a framework, um, and so it's a framework for building, you know, production AI applications in an agentic manner.
- 3:17
And these are the components that we're all going to learn and get hands-on with today in this workshop and understand very well by the time we leave here. So we're gonna build workflows.
- 3:24
Just think of them as, um, composable and typed pipelines, which are very exciting. Uh, tools that you can optionally use, uh, and give to agents. Agents are like the interfaces that we're chatting with.
- 3:34
Um, they're the ideal interface for humans to work with. And then, uh, the Mastra framework does some incredibly cool things o-out of the box with batteries included that we'll see.
- 3:42
Um, so not just, you know, a playground that makes it super easy to debug everything, but built-in persistence, memory, observability, and even, um, evaluations that you can determine over time how healthy your pipeline is, which is critical for, you know, successfully deploying an AI application in production.
- 3:58
Yep. And we'll be, we'll be focusing on, uh, pieces of this. We don't have time in two hours to go over everything, but there's a lot of really cool tools in there.
- 4:05
Uh, so we're gonna be focusing on some core concepts for the, uh, example app that we're building, um, and we'll kind of understand some of those building blocks as we get going.
- 4:15
Cool. So let's start off, uh, what are workflows? Um, workflows are composable pipelines. So the way that I think about this is I map it in my head mentally to if a coworker says, "I just keep on having to go scrape the site and download people that look interesting and look up their info and then take an
- 4:28
image and then write an email." You know, that sounds to me like a, a workflow, right? It's a pipeline of discrete steps. You want them to happen in a certain order.
- 4:35
And as we can begin to see with this example code on the screen, you can even have control over transforms that happen in the middle of your pipeline. So the idea is you're chaining multiple steps together to get some work done.
- 4:46
You can pass data between steps. And then very importantly, because as we know, LLMs are incredibly powerful, but they're non-deterministic. And so how do we rely on their output?
- 4:55
How do we coerce their output into something that we can actually build against dependably? That's, uh, where we're going to validate inputs with Zod, but we're also going to learn how Zod can even coerce, uh, at runtime and then handle error grace-- uh, errors gracefully.
- 5:09
But really, the key i-idea here is that workflows are a discrete set of ta-- uh, steps to get a task done.
- 5:16
Yep. And the, the API is very similar. Uh, it reminds me of, like, RxJS, like very similar. You're starting with one thing and then doing something and then mapping to something else and then doing something else, uh, and running through all of that to give a little bit of determinism to the, the call of all of these
- 5:31
tools as they're being called by your agent or some other tool.
- 5:37
Um, and speaking of tools, uh, tools are just functions that agents can call. Uh, they can give you things like file system access, API calls, database queries, uh, custom business logic.
- 5:46
If you've used MCP, uh, MCP calls tools, and, uh, so that's like a really cool thing. It gives the, the LLM abi-- the ability to act on your behalf or to read in data that it doesn't just inherently know from its latent space, uh, so that it can do more things and be more powerful for you.
- 6:04
Yep.
- 6:06
One-
- 6:06
Absolutely. I have to say that, you know, we, we think of like, uh, AI systems getting better the more data and context they have access to. And, and one of the things that MCP is really excellent at doing is, is giving-- granting context to Claude, to OpenAI, uh, that it normally wouldn't have, and that's not in its
- 6:20
training data.
- 6:21
Yep. And one note for today's workshop, we did build everything using tools, uh, but then we switched as we brought in an agent, uh, to call, and we had the agent call a workflow rather than the tools independently.
- 6:32
So we wanted to touch on them there. There's something powerful that you should look into on your own, uh, and figure out your use case for them. But we didn't really use them in, uh, the final version of this workshop.
- 6:44
Um, and then finally, what are agents? So w- we've all probably seen and used the chatbot, um, type demos, but, you know, the way that we're thinking of agents, uh, these days is really that they're kind of an ideal human interface.
- 6:54
So if I set up a workflow that's a deterministic set of steps to get some discrete task done for my colleague, let's say that my colleague is in a hurry, or they're busy, or they're doing this while they're on the phone, or they're not technical, then a chatbot can be an ideal interface for that human colleague, right?
- 7:09
Because they can describe their problem or their issue, what they need with natural language, and then the system can be smart enough to actually do what they want. And so this is the core-- this is a very, uh, core kind of pattern that we're seeing in, in a lot of, um, AI applications, and so we're actually going
- 7:24
to build this and understand this here. So after we create our workflow, we'll create an agent, and we'll grant that agent the ability to call the workflow.
- 7:31
Yep. And agents was something that when I first heard of them, like, it-- like in a lot of these things, like the, the naming adds more confusion than is really necessary.
- 7:40
And we spent like an hour on the phone call, and I kept being like, "But what is an agent? What is-- how is that anything beyond just a simple prompt?"
- 7:46
And it's really like the marriage of that prompt plus the workflows or the tools that it can use, uh, to do things in a specialized way.
- 7:53
Yeah. The other way I think of it is like if, you know, in the past, maybe five, ten years ago, you might have written deterministic-- more deterministic software. W- with agents, you're expecting that the system overall can kind of interpolate or can understand, introspect what's the state, and then make a decision, um, in like a graph sense
- 8:09
of we need to actually go here. So, um, that's the other piece that you'll hear when you're discussing agentic systems.
- 8:14
Yep. Cool. Uh, another thing, MCP or Model Context Protocol. I told you I'd show you how to spell it. Um, this is a way for you to-- It's an open standard for a way to bring like universal plug-ins or these tools to AI agents so that they can be called.
- 8:30
Uh, this was really developed, uh, by Anthropic, and you can use it easily in Claude Code, uh, among other places like Cursor, um, Windsurf, I think.
- 8:39
Yeah.
- 8:39
Uh, and even OpenAI is, is, uh, adopting these tools as well. So it's really a nice, easy-to-use API that these tools know how to use and call.
- 8:47
And to also make it concrete, like you-- So you work on the DX team at WorkOS. You're constantly crushing a ton of, of bugs in all various SDKs, and you use Claude Desktop, right?
- 8:56
Yep.
- 8:56
And so like what changed the day that you enabled the, the GitHub MCP server for Claude Desktop?
- 9:01
Yeah. The GitHub MCP server was the one that really like made me understand what MCP is doing because I was like, "Why do I wanna do this? How is this different than just like having access to GitHub and, and, you know, calling all of that?"
- 9:11
But it's really an easy way for me to have a conversation with Claude and for it to bring in the context that it needs based on the tool-- the, uh, issue that I'm working on.
- 9:20
For example, if you have a, an issue on a, a GitHub repo, I can just say, "Hey, can you check out that issue and tell me, uh, you know, here's my example app.
- 9:27
Tell me how I might reproduce this." And it can like go figure that out, pull in the comments, understand what's going on, link out to other repos or other examples from there, and then, uh, look at my example repo and tell me how to, um, to make that change.
- 9:44
Cool. [clears throat]
- 9:46
Speaking of MCPs, uh, we built a l- a fun little demo called mcp.shop. You can go there now, and you can use MCP to order a shirt, and it's the only way that you can order this shirt.
- 9:57
And for the low, low price of zero dollars, you can get an MCP shirt. The, the point is you just have to use the MCP. So it's just a fun demo to, to try out MCP-
- 10:05
Yeah
- 10:05
... play with it. You can add it-- Uh, it has instructions for adding it into Claude or into any of the, um, MCP servers-- uh, sorry, MCP clients that support it.
- 10:14
Yep. Totally. Uh, also mention that recently-- So MCP is, you know, one of the protocols that's really hot right now in, in the AI space. Um, and a lot of folks are, are taking notice.
- 10:24
We recently had an MCP night, and it was at the Exploratorium. It was a ton of fun. We, we blew out like the capacity of the event, um, and we had people like lined up around the block, which we didn't expect.
- 10:34
Um, we're almost certainly going to do something like this again soon. So, uh, be sure to follow us if you wanna hear about it. Um, and yeah, we'd love to see you there in the future.
- 10:42
Yeah.
- 10:45
All right. Um, what we're gonna actually build today though, to, to get into it, is the AI meme generator. Um, so we're going to-- Uh, if you imagine the input to this is going to be you venting any random frustration, workplace frustration, frustration with your colleagues or boss, um, into the pipeline, and, uh, the workflow will process
- 11:02
your frustration. Um, it's going to find the best base meme that already exists that would be ideal or might be humorous. It's going to think about how to, um, actually edit and, and create new captions, and it's going to publish a new meme at a stable URL that's, uh, available for you.
- 11:17
And again, I just mentioned like this is a toy. We've got two hours. It's a quick demonstration. But the patterns that you see here and the Mastra framework are, are definitely, you know, AI, um, production ready.
- 11:26
Uh, we'll use OpenAI just for the understanding, and Imgflip is the only other API involved here, which you can get free, uh, username and keys for that, and there's information in the workshop MD file for that.
- 11:36
Yep. Yeah, and it's a really fun demo just to kinda showcase some of the tooling that you can do with Mastra, uh, and how easy it is to really get all of this going, but also not just to get your, your tools going, but to test them very easily along the way.
- 11:50
So we can start with just like a single step in a workflow and test that without an agent, and then we can test the agent independent too. And we can do all of this and not have to have like a full picture, uh, to understand how it's going to work, but kind of iterate along the way.
- 12:03
And the tooling that Mastra provides is just super nice. It's why we love it. We're also huge fans of TypeScript, which makes it awesome as well. And so yeah, it's just nice and easy.
- 12:12
Yep, absolutely. Okay, this is the way that we've structured this, uh, workshop. And so, you know, we weren't really sure the level that everyone's coming in at, and some folks are experts, and some folks are just getting started.
- 12:23
So, uh, it's self-paced learning, and you can go at the speed that you wanna go. If you wanna go and fly all the way through it, you're free to do that.
- 12:30
Workshop MD in that repo is the entirety of this course, and so you can kind of follow along that way. And then we also created, uh, Git branch checkpoints for you.
- 12:39
So in case, for example, you're to fall behind, uh, you get stuck on something, and then we get to phase two, you can also skip to phase two and stay, stay with everybody just by, you know, Git checking out the right branch.
- 12:49
Um, if you get on s-- uh, if you get stuck at any point, we're here to help, so please raise your hand. We'll come around.
- 12:53
Come to the mics.
- 12:53
And then if you-- Yeah, if you have questions that other folks likely have or might benefit from in the future, please be sure to come up to a mic and, uh, we'll make sure that your question is heard.
- 13:03
Uh, and then, you know, the other way we're thinking about this, this workshop is, again, it's, it's a-- anyone can read online, we can all talk online anytime, but we're actually here in person today.
- 13:10
So, you know, please shout out questions and raise your hand and ask us things you wanna know. Um, we feel that understanding is more important than completing stuff here, and it's okay to explore, so.
- 13:20
Yeah. We're all very new to this. This is all very new stuff, very new tools, and it's very cool. It's also changing every single week, so it's, uh, it's fun, like, snapshot in time to play with this stuff.
- 13:31
Um, and if you have, uh... L-like you said, you, you don't have to finish it. Uh, we do have the whole workshop.md that you can follow step by step all the way through to the end, uh, and then those, those branches to, um, to get us there.
- 13:43
And if you just look at the main branch, that's the completed version, but it's more fun to build along the way.
- 13:49
So with that, let's get started. Um, like I said, everything is in the, uh, workshop AI agents with Mastra channel on Slack. So if you're in there, uh, you can go grab it.
- 13:59
There's also, uh, the Git clone command right there to grab the repo, and, uh, we can get started with that. Um, just go to the step slash step zero branch.
- 14:08
That has everything kind of as a baseline to start from, uh, and then you can npm install from there and get going with the workshop.workshop.md. So here, I think we can stop and, uh, you, you can get started.
- 14:20
We'll give you some time to build, um, but if there are any questions, um, please come to the mics, and we'd be happy to continue the chat.
- 14:29
I had a quick question.
- 14:30
Yeah.
- 14:30
Um, so the-- Before you, you showed the example of an agent-
- 14:33
Uh-huh
- 14:33
... and it had workflows. That's kinda different from what I'm used to seeing in these, like, agent SDKs where they usually have tools.
- 14:40
Mm-hmm.
- 14:40
So is the workflow kind of like a tool that I can use or?
- 14:43
Yeah, I mean, to-- I feel like, correct me if I'm wrong here, I feel to some degree that, like, the create tool and create step APIs are s- are somewhat similar.
- 14:49
And it-- in my mind, at least right now, it's sort of like an organizational preference. Like, if I have a simple, um, use case, and there might be three different tools, and I want the agent to decide the right time to call those tools, I might create three separate mostly fun-- essentially functions, name them tools, grant them
- 15:05
to the agent, and then start chatting with the agent and ask for things and let the LLM determine at runtime which, which ones to call. The difference is with the workflow is I'm saying, "I always want you to proceed in exactly this sequence with these steps and these transforms."
- 15:18
And then you can also, in Mastra at least, you can optionally grant an agent the ability to call that workflow. So-- And then also in my conversation recently with, with Sam, that's kind of like, you know, these are, these are various tools that you can build up and, and kind of assemble into the exact, uh, paradigm that
- 15:32
you need.
- 15:33
Can you do both tools and workflows? Like-
- 15:36
I think so. Yeah, you can grant-- 'cause, uh, it's bas-- like, you're, you're passing, like, this giant gi-- uh, J-JSON object to the agent saying you can call these tools, and you can call these workflows.
- 15:44
And then-
- 15:44
Cool
- 15:45
... the tricky part is, like, if you give something a hundred tools and then ask an LLM, like, "You've got a hundred tools. Let's, like, go to Disneyland," I don't know exactly what we're gonna get out of that. [laughs]
- 15:54
But that's where, like, the determinism of a, of a pipeline can be-- of a workflow can be beneficial.
- 15:59
Cool. Thanks.
- 15:59
Thanks. Great question. Um, anybody wanna raise their hand? Any, uh, and there's no shame here, anyone having difficulties getting started, um, need help with that?
- 16:10
Initial permission issues. Should we expect some of that or no?
- 16:13
No, not at all. Uh, what's the permission issue? I, I'll come by.
- 16:18
Uh, yeah, the repo should be fully public.
- 16:20
Yep.
- 16:20
Um, so should be able to clone that.
- 16:25
While Zach's doing that, I will also bring up the, um, Mastra docs, um, because these are-- Oops. These are wonderful. Uh, they're really easy to go through. But also, as, uh, Zach and I were working, we, uh, discovered something that was actually really [laughs] awesome, and that is the MCP doc server.
- 16:44
Um, once I installed this, things like, uh, my tooling got a lot smarter and knew how to work with Mastra, and it made things way easier. Uh, so if you get stuck or if not, and you wanna see MCP in action, I would recommend installing, uh, the Mastra tools for your IDE.
- 17:02
I installed it into Cloud Code and into, um, Cloud Desktop and played with it in both, and it immediately knew a lot easier.
- 17:11
Okay. Gotcha. You-- Can you clone with HTTPS?
- 17:15
Hmm?
- 17:15
Can you clone, um, not over SSH? Try the HTTPS.
- 17:25
What's missing?
- 17:26
Um, so if you, if you go back to the repo, uh, look at the GitHub repo, like in the browser, it should have a different option.
- 17:34
Oh, you found it. Yeah.
- 17:36
So what do I do?
- 17:37
Um, so go to github.com WorkOS, and then mastra-agents. You have to change that from a colon to a forward slash.
- 17:45
So, like, grab this whole-- Grab everything after the ampersand.
- 17:51
There's no ampersand.
- 17:53
At the at, sorry. Yeah. Grab everything after that.
- 17:55
Yeah. And then go up here. And so, uh, make-- But you gotta change the URL to do HTTPS.
- 18:04
And then github.com. Yep, and then change... Yep, hit that.
- 18:11
Sorry, I'm having trouble seeing it.
- 18:13
Oh. You know what?
- 18:15
Oh, that's why. [laughs] Thank you. Um, it searched for that URL instead of going directly. So make that, uh, HTTPS. And then change this from a colon to a forward slash, and then get rid of that final git.
- 18:26
That should go. Okay, now this will be up there.
- 18:35
And then the local should have that option in it. [whispering]
- 19:14
We need to pop an HTTPS version of the GitHub repo because people are getting confused and they don't have SSH configured on their work laptops.
- 19:21
Got it.
- 19:22
And no one knows how to get to repo browser.
- 19:24
Yeah. Anybody else, uh, any setup issues or
- 19:31
everyone, everyone good?
- 19:35
I'll post the HTTPS clone command in the-
- 19:39
Yeah, thanks.
- 19:40
Uh, in the Slack as well.
- 19:41
Yeah. In case anyone's having trouble with, um, SSH clone 'cause you're on a work laptop, we'll, uh, put in the instructions for HTTPS too.
- 19:57
Do you wanna do like a time, a timer?
- 19:59
What's that?
- 20:00
Do you wanna do like a timer set? Like a-
- 20:03
Oh, yeah, we're doing it. We're ahead by five minutes. Cool.
- 20:12
All right, we're gonna do about five more minutes set up. Um, feel free to raise your hand if you have an issue. Yeah.
- 20:17
Connection is pretty bad, so just [static] yeah.
- 20:20
Oh, sorry. What's that?
- 20:22
The connection is pretty bad.
- 20:24
Oh.
- 20:25
Also-
- 20:25
The Wi-Fi's bad.
- 20:26
The, yeah, the comment is the, the Wi-Fi is bad. Uh, I wish we could do something about that. [laughs]
- 20:31
Sorry. Sorry. Yes.
- 20:33
Classic conference Wi-Fi.
- 20:39
For Cloud Code.
- 20:40
For Cloud Code, yeah. Um, you-- If you open Cloud Code, you just need that. You still need that, like, JSON object, I think. I mean, that's what I use for my fancy client.
- 20:48
But it should, uh, yeah.
- 20:51
All right,
- 21:07
sixty-five
- 22:08
or so. Sixty-five.
- 22:09
Seventy-four.
- 24:19
Gonna do about two and a half minutes until we move on.
- 24:23
Anybody have any issues? Everyone good?
- 24:25
Still slow.
- 24:27
Slow internet still? Okay.
- 24:28
Yeah.
- 24:30
All right.
- 24:30
We can give more time. We got-
- 24:32
We'll do a queuing system. Everyone turn off their Wi-Fi, one person download packages [laughing] move to the right
- 24:37
Put it on a flash drive, and then we'll pass it around.
- 24:39
Yeah, that's, that'd be kind of sneaker net. [laughing]
- 24:43
Um, the repo, the repo is seventy-seven percent cloned.
- 24:45
Nice.
- 24:46
Oh. [laughs]
- 24:46
Yeah. Let's get in there.
- 24:47
This guy clones. [laughing]
- 24:52
We will-- We, we can get more time.
- 24:54
Excellent. These are great numbers. [laughing]
- 25:03
The end goal of this first step is really just seeing the playground, and we'll kinda show that here in a minute.
- 25:08
Yeah.
- 25:08
Um, but it's-- there's not gonna be any tools or agents or anything yet.
- 25:11
Yeah.
- 25:11
And we'll build those out. Uh, but it's just seeing kind of what Mastra gives you right out of the box so that you have everything you need to get going fast.
- 25:20
Absolutely.
- 25:24
Let's go. Let's go sixty.
- 25:26
Question.
- 25:27
Go to sixty.
- 25:28
Yes.
- 25:29
Why, why Mastra compared to all the other frameworks?
- 25:31
Oh, I can tell you why I'm excited about it.
- 25:33
Why? Tell me about it.
- 25:34
So the first couple of things I heard were pure TypeScript, right? And I'm already kind of bought into that with-- I like compilers finding my errors before I ship them.
- 25:41
Um, then there's, uh, the Vercel AI SDK that the, I think that the team wisely chose to build upon. Um, my experience with that has been excellent. It's kind of mind-bending to kind of wrap my head around.
- 25:51
But the idea that I can multiplex between any LLM provider, I mean, when, when GPT 4.0 came out, I shipped a two-character change in a PR, and my entire pipeline got way smarter.
- 26:02
And that was the day where I was like, this, this SDK. Then I found out that the, you know, Master came out, and it was like Vercel AI SDK and, uh, pure TypeScript.
- 26:12
And, uh, I can tell you that there's a ton of stuff that they put in there, like including evals that are just, uh, baked in. So that's one of OpenAI's own recommendations about the right way to deploy agents at, at enterprise and at scale, uh, is to start with a evaluated pipeline.
- 26:27
Um, and I can also-- I can tell you from working in like vector database companies too, that that's-- people that are actually in prod are, are using evaluations to determine the health of their pipeline and the health of each individual generation.
- 26:37
And Master has those baked in, so it's like import and then, like, also evaluate my pipeline. And then finally, so it's like because of that, um, then it's on the Vercel AI SDK, then being able to deploy it quickly, um, and then have a good experience that way too.
- 26:52
And, and honestly, what we'll see just in the, the local, uh, playground was pretty great. Um-
- 26:56
Okay.
- 26:57
Yeah.
- 26:57
Cool.
- 26:57
Very complete in my, in my experience. Like, every-everything has issues, but that was the experience I've had with it so far.
- 27:03
And real quick.
- 27:03
Yeah.
- 27:04
Uh, I think that for me, like, TypeScript's moving fast with that. I still don't have to figure out what pip is, so it's prolonging that. [laughing]
- 27:12
It's prolonging that. [laughing]
- 27:14
Um, but also, like, we had-- How many of you have had these, like, come to AI moments within your company? Like a big, "Hey, we're gonna have everybody-
- 27:22
Yeah. Everyone getting that-
- 27:22
"We're gonna work hard with AI."
- 27:23
"We're all doing AI now-
- 27:24
Yeah
- 27:24
"... whether you like it or not."
- 27:25
That Shopify post came out, and then, like, we had it, uh, my wife's company's had it. Like, everybody that I've talked to, like, "Oh, we're, we're gonna have this meeting where we're gonna do everything with AI.
- 27:34
We're gonna see how AI can, you know, solve every problem in every domain." And, um, after we had that, we did, like, an open workshop thing, and we had, uh, like, immediately, we showed Mastra, and then we had, like, ten people-
- 27:48
Ten. Ten engineers, yeah
- 27:49
... just, like, start going off with ten individual demos, and it was just like [snap] fast.
- 27:52
Mastra. And then 'cause they successfully built the exact workflow they were looking to build. And so then for me, the reason I'm the most excited about that piece of it is that I think it's an ideal platform for internal tooling.
- 28:01
I think all of us are rapidly experimenting with this stuff. And, you know, do I wanna live in a world where Nick's writing bespoke LLM scripts while I'm sleeping, and I wake up and I'm like, "What is this spaghetti mess?"
- 28:10
And he has to do the same with my cr-- you know, crap? Or are we all using-
- 28:13
Spaghetti. [laughs]
- 28:14
Yeah, that. Or are we all using, like, you know, an actual framework that we can agree on certain primitives that makes us faster to use? There's, there's even forethought I can see, um, in, in the way it's been organized so that once you've defined an agent, a different project can reach in and call that agent via code-
- 28:29
Yeah
- 28:29
... or API. So, um, all those reasons, I'm kind of excited to use it as sort of a unifying internal tools platform. But we'll see. Uh, yes, yes, sir.
- 28:37
Yeah, just a quick question on step-
- 28:39
Yeah.
- 28:39
This might be a little premature, but-
- 28:40
Yeah
- 28:40
... um, step one, number five-
- 28:43
Yeah
- 28:43
... where you-- so you create a workflow, you pass a discrete array of steps-
- 28:46
Mm-hmm
- 28:47
... um, which, of which there's only one, which makes sense to me, and I would think you would just-- I guess I'm asking the des- the design decision behind then needing to just also explicitly do test workflow.then and then invoke the step.
- 29:01
Yeah.
- 29:01
Is that not implicit in the array of steps?
- 29:04
That's a good question.
- 29:04
Does that make sense?
- 29:05
The commit, the ergonomics around-- Are you asking about the ergonomics around the commit method itself? Like, why I actually have to find the commit?
- 29:09
Correct. Like, why, why explicitly say, "Here's a workflow and then-"
- 29:11
What is, what is going on? What, what's-- Gentleman, what's the decision behind that? No, I'm just kidding. [laughs] I'm sorry. I actually don't know. Um, I've looked at it recently, and I actually checked that API today-
- 29:19
Yeah, I just was curious
- 29:19
... because I was curious about the same thing. I was like, "Oh, does it return?" I actually argued with Nick 'cause he correctly said, "No, it re-- commit finalizes your pipeline, returns it," and I argued with him incorrectly.
- 29:28
Gotcha. [laughs]
- 29:29
So I'm not certain. What's the, what's the final idea behind commit?
- 29:33
Uh, that then-- I mean, so for sort of the local dev experience, kind of like localization, um, so the commit's like cached and synchronized as like the-
- 29:43
It's synchronized with... Okay.
- 29:44
Yeah.
- 29:45
Got it. It's the final step that's like actually creates the whole object and adds the steps and returns the final object. Okay.
- 29:51
Gotcha. But why-- Sorry, I, I don't mean to berate this, but like why the .then and then the name of the step?
- 29:58
Is that, is that step not already in the workflow steps array there?
- 30:02
Uh, so you should be able to, um... So there's, there's sort of two ways of defining steps. You can either-
- 30:08
Can you-- I'm sorry, would you mind coming to the mic just so we...
- 30:10
Oh, sorry.
- 30:11
I apologize. [laughs]
- 30:12
No, no, no. Um, uh, so there's, uh, there's two ways of, uh, coming to, of defining, um, steps. You can either give it a step array, um, which as you might expect is kind of, um, the most-- A lot of times we just have these linear pipelines of steps, and so you can just give it a step
- 30:32
array, and it will execute things in a linear pipeline. Um, or if you want to add sort of like branching and conditionals and a lot of that kind of thing, um, we have this like fluent syntax where you can do .then, and then you can do .if and-
- 30:45
.branch
- 30:45
... .doWhile and like loop and, and do conditionals and, and all the fun, complex stuff.
- 30:51
You know, but a lot of times you're just-- you're running through a pipeline. So this stuff's kind of-
- 30:55
So you-- 'cause you also just do test workflow document, and that would run it with that-
- 30:58
Yeah
- 30:59
... all those steps.
- 30:59
Yeah. Yeah, yeah.
- 31:00
Okay.
- 31:01
For, for what it's worth, I have also recently had the experience where I had built two different GenAI apps, like experimentally, internally, and realized that I'd implemented a pipeline concept in both of them.
- 31:10
And that was another reason- [laughs] ... why I was like, "Okay, I'm excited now about a single framework-
- 31:15
Yeah
- 31:15
... with one pipeline." [laughs]
- 31:16
We're learning.
- 31:17
Yeah. [laughs] How we doing on time?
- 31:23
Good.
- 31:25
Okay. We mostly got packages installed or anyone still waiting for-
- 31:27
Anybody get to a hundred?
- 31:29
Yeah. I think Ted tethered to ours.
- 31:32
Ha.
- 31:32
Nice. Nice. Okay, excellent. And you're selling access, uh, for five dollars, right? [laughs] Okay.
- 31:45
Is there any more time?
- 31:47
I think we're good.
- 31:54
All right. Okay.
- 31:54
All right. We'll kind of show what's, what's happening. Um, feel free to keep working on it. It's not, uh...
- 32:01
You'll be able to catch up quickly, or you can skip to the next step, which I'll show here. Um, whoops. All right. So I'm going to just, um,
- 32:10
switch over to steps/step, uh, one, which is the end of step zero. That's where it would bring you to. Um,
- 32:21
and so... Ugh, I don't know what's happening. Okay. Nope, I'm not on... I think it's not switching.
- 32:33
There we go. I didn't know how to spell switch-
- 32:35
Yeah
- 32:35
... apparently. Um, okay. So once you have it all installed, then, uh, you really should just have kind of a Mastra index. It also has memory, um, set up for you automatically.
- 32:48
Uh, but this just creates the Mastra instance. Um, currently, we have nothing enabled, no agents, no workflows, uh, no tools, and that's okay. And when we... Oops. When we run npm dev,
- 33:03
uh, we will get this URL, localhost four thousand eleven. And if we go there, this... Nope. This is the s- the end of step one, which is maybe... There we go.
- 33:15
Uh, you look here, you have agents, networks, tools, MCP servers, workflows, and then this runtime context. And currently, we have nothing in there. Um, and that's currently by design because we've done nothing.
- 33:28
We've just gotten the project set up. But now we have all of these tools to help us with building along the way. And so, um, once you get this set up, uh, you should be able to switch over to step one or c- just continue on in your branch.
- 33:41
I think it might actually be the same because it's just npm installing. Um, and then you should be able to continue on in the, uh, the steps.
- 33:55
Uh, this is-- I'll just say that this is one of my favorite things, though, about Mastra, like the local playground. And if you look in the console, you'll see that there is also a couple other things spun up.
- 34:03
There's the API endpoint. There's also an, uh, Swagger spec that you get automatically. And so, like the amount of thought that's been put into this, and you can see how once everyone's comfortable with it, you could, you know, very rapidly deploy applications in a standardized way that other tools can consume, uh, reliably.
- 34:18
So that's, um, another exciting feature of it. And again, this is like without us having built anything yet.
- 34:26
So the goals that we're gonna do in, in step one now, uh, is just create our first workflow. And this is just a very basic workflow. We'll end up throwing it away, uh, but it's gonna be one workflow with a single step, and it's not gonna do anything else.
- 34:39
But we'll see kind of the power of it, uh, and then we'll build upon that in the next step to add additional steps. We're using steps a lot. Um, and then we will-- we'll, uh, be able to put that together into a full workflow in the next step.
- 34:54
But we will-- more importantly, we'll be able to see it in the Mastra playground and start really seeing the power of that.
- 34:59
Yep, testing. As always, any questions, uh, feel free to shout them out.
- 35:21
Anyone gets stuck, just raise your hand.
- 35:22
Yep.
- 35:23
We'll run past.
- 35:25
We really tried to give ample time for this, not, uh, not including Wi-Fi issues. Um, and so, um, yeah, if you have questions, we'd love to, to chat, or just ideas of this stuff 'cause-
- 35:37
Yeah
- 35:37
... I think there's a lot of really cool powers, uh, that you can do with this.
- 35:41
Hey, do you mind if I ask a question?
- 35:42
Uh, sure. Do you want to, do you want to hop, hop up to the...
- 35:43
Yeah, yeah.
- 35:43
Thanks.
- 35:44
Uh, I'm just kinda curious since you're obviously like using Vim and kinda deep in the hole.
- 35:48
Yeah.
- 35:49
Have you played around with any of like the AI integrations into Neovim? Kinda like how-- what's your current workflow-
- 35:55
Yeah
- 35:56
... that you're kind of adopting?
- 35:57
Thought nobody would ask. [laughs] [laughs]
- 36:00
What have you done?
- 36:01
Um, yeah. I'm a big fan of Vim. I haven't used Cursor yet at all because it's not Vim. Um-
- 36:08
There's Vim mode.
- 36:09
Eh, it's not great. Um, but I have played with the tools. There, there's one, I'm forgetting, Goose, I think, got in Vim. I haven't played with that one yet, but it's on my list to play with.
- 36:19
Uh, the one that I have played with is Avanti, uh, which I think I have still set up. Uh, yeah. So it gives you kind of that like chat-like interface here, so I can just start having, uh, a chat with this code.
- 36:32
Um, I don't know.
- 36:35
There's also... Was it NeoAI? I've used that for Neovim. Even a year and a half ago, you could do that before, before most of the tools allowed you to chat in IDE.
- 36:43
Yeah.
- 36:43
Yeah. That's always gonna be the benefit of open source, is it lands first, right?
- 36:47
Yep. Um, but I honestly-- like I didn't like the ergonomics of playing with this and like switching buffers and things like that, and I- Honestly felt that, uh, for me, uh, a better workflow was just not using this at all.
- 37:01
Uh, I'm also a big Tmux user, so, um, you know, I will have, like, Vim open, and then I'll just open a split and Claude, Claude Code, um, gives me that kinda the same thing, and it's often, like, its own Tmux split, so I can work in Vim as I normally would without, like, weird buffer things, and
- 37:17
then it's just off doing things, and I can, uh, you know, uh, oops, use, um,
- 37:23
use Tmux to, like, full screen Vim when I need it. Claude's out of the way. And then when I want it, I just bring it back in and go.
- 38:18
I would also be interested in hearing how all of you are using these AI tools, just for, like, not just what you're building, but how you're interacting with them day to day because they're changing our workflows.
- 38:29
And I, I feel like everybody's, like, in their own bubble doing their own thing, and then we, like, we have this opportunity to come together and learn, like, amazing new tr- tips and tricks.
- 38:40
Yeah. I'm all for that. Uh, I, I don't know that I'm all for everybody getting on the same,
- 38:48
you know, uh, bus.
- 38:50
Yeah.
- 38:51
I think, I think it should depend on, on, you know, product or, or, you know, service or whatever, what, um... I'm, I'm afraid of, of, you know, somebody coming down from on high with, like, "This is the golden framework.
- 39:06
Everybody use this."
- 39:07
Yeah.
- 39:07
I mean, we've been through that for decades.
- 39:09
Yep, for sure.
- 39:10
You know, so-
- 39:11
Absolutely
- 39:11
... that's my personal-
- 39:13
You like to mix and match and let everyone kinda choose their own lane.
- 39:16
Yeah.
- 39:16
That's exactly.
- 39:17
Even with the coding agents.
- 39:17
Yep.
- 39:18
You know, I'm, I'm like here and there and everywhere.
- 39:20
Yep.
- 39:20
AI, same thing.
- 39:22
Yep.
- 39:22
Here, there, everywhere, you know?
- 39:24
Yeah. To, to summarize for the video, mixing and matching tools is good, and I think that that's really what is, like, powering this right now, especially among, like, us hackers, right?
- 39:32
We're like, there's all these cool new things. It's a whole new world of figuring out what to do, how to do it, and you're not just being prescribed, "Oh, just, you know, go use random..."
- 39:40
I don't wanna shame any specific editor, but [laughs]
- 39:44
Yeah. Anybody specifically.
- 39:45
Yeah.
- 39:45
Yep.
- 39:46
But, I mean, the leaders come forth.
- 39:48
Yeah.
- 39:49
For sure.
- 39:49
You have those choices, you know?
- 39:51
For sure.
- 39:51
Absolutely.
- 39:52
In the meantime, I'm gonna play around.
- 39:54
Yeah.
- 39:54
Yeah, it's all about experimentation, I think. Yep.
- 39:56
Yeah. There's all sorts of experimentation, all sorts of fun. Um, and, and the, the winners will bubble up for sure. Um, also, I, I do worry that it's like, uh, you know, the, the first hit is free, and then we're [laughs] we're all like-
- 40:08
Yeah. [laughs]
- 40:08
... "Oh, no." [laughs]
- 40:10
Becoming dependent on it now.
- 40:11
Yes, sir.
- 40:12
Uh, question for you [REDACTED:gender]. Do you have a framework-specific, like, set of rules, like, that would integrate? Not that everyone has to use Cursor, but just, like, all of a sudden, like, um, at my company, we've started to essentially say, "Hey, here's the top ten tools that we use, and here's Cursor rules to do all those the
- 40:31
same kind of way." And it's not so much trying to, like, box people in, but it's more trying to say give them, like... In Mario Kart, it's like you get the, the three booster packs.
- 40:40
It's like, how can we give pe-pe-people booster packs from the beginning?
- 40:43
Yeah. We, we were talking about this earlier-
- 40:45
Yeah
- 40:45
... actually with Nick Taylor. Um, we were talking about, like, Cursor Rules growing and evolving kind of like tests, and then it's like this thing that, that evolves with your, your code base to prevent you from doing bad things.
- 40:57
Um, I don't know what that means though, 'cause I've never used Cursor. [laughs]
- 41:01
Uh, that's not exactly the question you asked, but I will just say that that's also, uh... Like if when you run, you know, NPX install Mastra, it asks you if, "Are you gonna use Cursor?
- 41:09
Are you gonna use Windsurf?" 'Cause if so, I know I can inject the MCP server for our docs. And then the experience that I had after acce-accepting that, I saw, it's like, oh, it enabled that.
- 41:18
I checked in my MCP in, in Cursor, and then that session where I coded, um, there were zero hallucinations. And so that means that every time I asked for a feature, it was one-shotted correctly.
- 41:31
Furthermore, because it was in TypeScript, I could quickly lint it and compile it and know it was good. And so that's almost like I-- We were almost starting to su- Nick and I are starting to suspect that MCP might be more powerful.
- 41:41
Because the other problem is that Cursor Rules are specific to Cursor, right? So what if, like, half your team's on Windsurf, half's on Cursor? You know, we've got tons of licenses for Cursor internally, so it's kind of like, but it's not prescriptive.
- 41:51
I think the MCP doc server so far is more powerful of a pattern-
- 41:56
Yep
- 41:56
... because it is the-- it's almost like the, the guarantee that the end user dev is gonna get your latest docs and is not gonna get a hallucination.
- 42:05
And I really wonder if that's... Like, like, there's so much excitement around that. We saw that at MCP Night a couple weeks ago. Like, there's so much excitement around that, and I'm, I'm just starting to wonder, is it really just because it's, like, a standard emerging, um, and that's the reason?
- 42:18
'Cause it's, it's very simple, uh, but it's m- it's enabling all of these tools across, you know, it's not just an Anthropic thing anymore-
- 42:25
Yeah
- 42:25
... uh, which makes it super powerful.
- 42:27
Absolutely. Totally agree. Yes, sir.
- 42:29
Yeah. I'm not sure if this is a better question for y'all or for the Mastra team, but I saw that Mastra has experimental support for ingest, which is a durable execution back-end, but that it's labeled as experimental.
- 42:39
And I was curious, like, how experimental that is [laughs] 'cause I'm-
- 42:42
Yeah. Great question
- 42:43
... really excited about durable execution for agents. You know, if you've read the 12-Factor Agents Manifesto, it's really good.
- 42:49
Oh, no, I haven't.
- 42:49
And-
- 42:49
Where is that? Who published that?
- 42:50
Uh, it's on GitHub.
- 42:51
Okay.
- 42:51
Uh, Dex from HumanLayer-
- 42:53
Okay
- 42:53
... um, originally did a lot of the work on that. Um-
- 42:56
Okay
- 42:56
... but yeah, just was curious about jamming on that.
- 42:58
Awesome. Great question. Thank you. And fortunately, we have [laughing] the folks in the room for that. Okay.
- 43:03
Yeah. I'll, I'll also actually shout him out. He'll be happy to hear that. Um, uh, so the-- we shipped in, uh, sort of a what we call Workflows V Next about three, four weeks n- ago now.
- 43:17
Um, the idea being that basically it allows you to have the same syntax but switch out the, the workflow, um, engine. So the first, um, the, the first, uh, in-integration that we shipped, we, we'd sort of initially had-- we initially built our workflow engine using XState as a back end because-
- 43:36
Mm-hmm
- 43:36
... kinda makes sense. Um, and then we kind of-- we, we needed to make a couple of syntax changes, and then we also kinda realized that, uh, people started asking us, "Hey, like, I love the syntax, but I'd love to have this work with...
- 43:47
And I love the visualization and the dev server, but I would love to have this work with Ingest or Temporal, um, or Cloudflare Work-Workflows or dot, dot, dot, dot, dot."
- 43:56
Um, and so we're like, "Yeah, that's a really good idea." So then we shipped Workflow V Next. That was, like, again, three, four weeks ago. And then now we're just starting to, you know, do the list of integrations.
- 44:05
So Ingest is first. Um, it's-- you should use it. Like, it's experimental 'cause we shipped it, like, a week ago, but
- 44:13
I would be surprised if the API changed after a week from now.
- 44:17
Thank you. I actually have a question. Um, just curious, what-- how is the team thinking about, uh, deployments going forward? Like, are you targeting specific platforms first? Are you going serverless first?
- 44:29
Like, are you thinking about trying to go everywhere? Like, what's top of mind for you there?
- 44:32
Uh, so by default, um, by, by default, like, Mastra will bundle into a Hono server. You put the Hono server in a Docker container and put it on EC2 or DigitalOcean or wherever you wanna put, uh, put it.
- 44:43
We also have adapters, uh, for Cloudflare, um, Netlify, Vercel, and we also have our own, um, Mastra Cloud. Um, we also-- So those are kind of the two, um, you know, the, the two...
- 44:55
The, the, we also like-- Hono is not a, you know, if you wanna use Hono, great, but also you can put it in Express or, um, what-whatever. You can, um, you know, put it in the back end of a, you know, Next.js operator app, you know.
- 45:11
Uh, in general, I think, like, you can't really... I mean, you can call it open source, and it cannot work everywhere, but, like, these days, you should actually make it work everywhere.
- 45:20
So that's just our philosophy on things. [chuckles]
- 45:22
Yeah. Awesome. Thanks. Yes, sir.
- 45:27
Can I ask a question? You [REDACTED:gender] don't mind publishing it?
- 45:29
Certainly. Yes. Hi.
- 45:36
Hi.
- 45:36
Hey.
- 45:39
Some error.
- 45:42
Okay. And then, uh, what's the full error?
- 45:54
Oh, yeah. I was gonna say, I ordered my MCP shirt before.
- 46:09
Oh, nice.
- 46:11
Yeah.
- 46:11
Yeah, order your MCP shirts. [chuckles] Such a fun demo.
- 46:32
Seventy-four minutes.
- 46:56
Yep. I think we're good on time. [clears throat]
- 47:14
I had a question. So-
- 47:16
Yep
- 47:16
... I saw-- I was just reading ahead a little bit. Um, so I noticed that you spe- you're specifying, like, Zod schemas, but also adding instructions to the prompt, um, to kind of follow that schema.
- 47:28
Yep.
- 47:29
So I was wondering, is there anything sort of inbuilt into the framework that ensures that the output of each step matches the schema kind of by default? Because what if, like, you specif-- like, you know, let's say in the prompt, you, you kind of forgot what your schema was, and you-- like, how does it reconcile that as
- 47:47
well?
- 47:48
Yeah. Great question. Um, so I, I think the answer to that is essentially the Zod schema, right? And the way that I look at that is, um, like, LLMs are non-deterministic.
- 47:58
That's part of why we love them. But then it's at the point where they're so useful, we're trying to get specific JSON out of them while coding too, right?
- 48:05
And the Zod, um, package and, and, like, validation library is now ubiquitous in AI engineering, at least in JavaScript. Like, you'll see it literally everywhere. So it's doing the work under the hood.
- 48:16
Um, my understanding is that the OpenAI team couldn't get to a certain level of accuracy without adding on top of training the Zod, uh, runtime validation, which can also do coercion into the right types.
- 48:28
So that's kinda doing the heavy lifting there. Um, I don't think there's anything framework specific that's doing structure generation, but correct me if I'm wrong. But you can define, like, the transform steps between the workflow.
- 48:39
Um, yeah. There's actually-- We actually just did a blog post on this, but it's funny that the models don't always actually respect the schemas that you give them, especially there's some, uh, you know, you have the, okay, Z.string, like they'll respect that.
- 48:53
But if you, you know, Z.string. you know, length, you know, four or whatever, like they're not necessarily gonna respect that, like, level of, of nuance. Um, so we actually added, uh- Uh, we, we added sort of for, for...
- 49:06
This is especially challenging. This is mostly worked, worked reasonably well with structure generation. It's more challenging with, with tool calling, um, for reasons that are not quite clear to us, but were clear when we ran 16,
- 49:21
uh, you know, uh, with the 30 schemas across 16 models. So we added like a tool compatibility structured output layer that reduced, that like in- reduced the error rate a lot.
- 49:31
Um-
- 49:32
So in addition, on top of the side-
- 49:34
Yeah
- 49:34
... like there's also Mastra side-
- 49:36
Yeah
- 49:36
... like optimizations to ensure structure generation.
- 49:38
Yeah, yeah. The, the longer version of this is in a blog post we published over the last week if you're, if you wanna dive into the, the details.
- 49:44
And I don't, I don't know if it's related to this, but one thing that we were running into constantly, uh, while we were developing this was, um, we were, like, as you'll see, we were accidentally senting, sending like a base64 u- encoded image, uh, which was huge and, and failing, and it would retry a lot.
- 49:59
So I assume that there's some retry logic built into it to... I- if like it wasn't getting back what was expected from the schema, um, is it built into the, the schema validation piece?
- 50:09
I mean, I would assume probably what was happening was that the agents has like a max steps.
- 50:14
Yeah.
- 50:15
And so it was running until, in a loop until it hit max steps.
- 50:18
Max steps.
- 50:18
And then-
- 50:19
But it, I, I guess what I'm asking is if you, if you said, "I want a string that's length four," and I, and it gave back a length five, would it automat- Would Mastra automatically retry in that case?
- 50:28
There are cases in which it would, it would retry. I don't know if that particular case is one of them.
- 50:32
Okay.
- 50:33
Yeah. Does that...
- 50:35
Yeah, that does answer, um, my question.
- 50:37
Cool.
- 50:37
To kinda to add to that with if you were to specify, uh, certain things into the schema that aren't inherently like supported, for example, the, the length, would that, um, would that be kind of er- like would that error just be displayed in compile time at all?
- 50:54
Uh, let's try it. I don't know. I, I would expect Zod to coerce it actually at runtime.
- 51:00
Um, but I'm not sure.
- 51:03
Usually the model will fail silently-
- 51:06
Mm-hmm
- 51:06
... and just give you a output that doesn't conform to the-
- 51:10
Okay
- 51:10
... to the, um, to the, uh, to the schema. And we kind of made a decision should we error or not, and we're like...
- 51:19
Makes sense.
- 51:19
You, maybe you should decide if you want to error.
- 51:21
Yeah. [laughs] All right. Thank you.
- 51:22
Thank you. Yeah, great question.
- 51:33
Uh, so just talking about deployment. Again, I, I noticed the serverless deployment is there's no like AWS Lambda or anything. It's all through Netlify or Vercel. Is that-
- 51:42
Vercel, yeah. Um, there's also a AWS Lambda, um, deployer that the community had.
- 51:47
Okay.
- 51:47
If, if you, if you Google it, you'll probably find the GitHub issue.
- 51:51
Okay.
- 51:51
Um-
- 51:51
And how does the, the serverless deploy work? Does each step kind of map onto its own Lambda function and, or how is that?
- 51:58
Yeah, I mean, we just sort of pack, bundle it in a, in a fr- in a, a platform-specific way that works for those platforms. So like Cloudflare has like a 300 meg, um, uh, bundle size limit, and so we need to do some specific things to get down under that.
- 52:15
Okay. I guess I'm just meaning in terms of the runtime model, each step kind of maps logically to a function or are you putting multiple steps inside a single function?
- 52:23
Um, I did not work on that part of that-
- 52:25
Okay
- 52:25
... so I would have to ask Ward.
- 52:26
Maybe, I'm assuming they're all bundled into one, but-
- 52:29
Yeah
- 52:29
... could be wrong.
- 52:30
I mean, I, I think they are all bundled into one, but yeah.
- 52:33
Really? Okay.
- 52:34
Yeah.
- 52:34
That would just be weird for long-running stuff 'cause there's-
- 52:37
Yeah, yeah, yeah, yeah
- 52:37
... a timeline and things.
- 52:38
I mean, we-- Yeah, that's, yeah, we, I think we, we all, we bundle it all into one, I'm pretty sure.
- 52:44
Okay. Thanks.
- 52:44
Cool.
- 52:57
How are folks doing on step, uh, step one?
- 53:01
Good.
- 53:01
Good?
- 53:01
Awesome. Okay. All right. We've got functioning Wi-Fi. Excellent. [laughs]
- 53:07
So we can kinda show that. I'll go to, um, step two. Did I spell that right? Yep. Uh, which is the end of step one. Um, and so now, like, looking at the code, uh, we've got...
- 53:23
If I update this, we've now got our test workflow in our Mastra object. Um, and then we've got a workflows directory with the test workflow and the schema for it, and it's just going to have you, um, basically extract from the user input, uh, the type of frustration that you're experiencing.
- 53:42
And the really cool thing now is, like, without building anything else, uh, we can go to our Mastra playground, refresh it, and go to Workflows, and now we've got our test workflow right there.
- 53:54
And you can see the graph here isn't very impressive with just one step in the workflow, but it's there, and we can see that it would accept a raw user input about work frustration.
- 54:07
So does anyone have a work frustration?
- 54:10
Use your na- your boss-
- 54:11
Yeah
- 54:11
... by name, please. [laughs] Please state the company you work for and your boss's name. [laughs]
- 54:18
We won't tell them.
- 54:20
"Conference Wi-Fi sucks." Not really. This is a great job, AI engineer. [laughs]
- 54:27
Um, in general sometimes though. So we can see just by calling that, it turned green in the, in, in the graph, and you can see that if we click on it, and we can see that that's the input that we gave.
- 54:38
It ran the step, and it gave us back this output, this, um, JSON object. Uh, and we can see with the text, "Conference Wi-Fi sucks," the overall mood is frustrated.
- 54:49
I think that's accurate. Uh, and the analyzed frustration is technology. We're so, we're frustrated about technology in this room.
- 55:01
So in the next step... Where did I go?
- 55:07
Oh, yeah. Here we go. Uh, in the next step, um, we're going to create our frustration schema with Zod, uh, build our first workflow step. No, that's what we just did.
- 55:19
I have my slides backwards. In this one, we're going to, uh, create all of the workflow steps. Uh, we're going to chain them together with data mapping, uh, and then we're going to successfully generate a meme, uh, and we'll understand the composition of that workflow as we go.
- 55:34
Uh, it still won't be like the perfect end result, but it will give us the full workflow where we can like kind of plug it in, in that, uh, workflows tool and see it go through all of the steps from our user input to an actual meme that's, uh, uploaded to Imgflip.
- 55:56
So you can skip to step two, uh, or continue on in your branch and, uh, continue from there.
- 59:25
Oh.
- 59:27
Yeah.
- 59:29
Yeah. I'm not sure what I'm looking at.
- 59:33
Uh, sorry, can you repeat that?
- 59:34
I-I did the-- it's, uh, frustrations, right?
- 59:39
Uh.
- 59:39
Put in a topic, ran it, got back a blue box, it's highlighted.
- 59:44
Mm-hmm.
- 59:45
It says input, output, so I put it on output.
- 59:47
Yep.
- 59:48
So I, I got a JSON object.
- 59:50
Yep.
- 59:50
Right? And, and so what is this? Is this something, an object that I would then pass to another pass on?
- 59:57
Precisely. Precisely. And it's just right now is we're just in the early stages of showing exactly that, and that you could have structured this object however you want.
- 1:00:05
Right.
- 1:00:05
Um, but in our case, because of the pipeline that we're building, this is the data that we found valuable. And so we formed it this way, and then we're gonna pass it further into the pipeline to do more work based on that.
- 1:00:15
Yeah.
- 1:00:15
And so, um, the output is, is, uh, sort of like you can change it.
- 1:00:25
Totally.
- 1:00:25
I mean, so I can-
- 1:00:25
It's your, it's your arbitrary schema.
- 1:00:27
Yeah. If I want Markdown, if I want JSON, if I want whatever.
- 1:00:31
Yep. Yep, absolutely. And that's part of what Zod will help you do too, 'cause you can define like, you know, maybe you have some giant object and, you know, this many fields, and this is a string, and this is an array of strings, and all that.
- 1:00:41
Um, but it's really for you to compose together the exact structure that you need.
- 1:00:45
Would-- You would have to know what the next stage is.
- 1:00:48
Yeah.
- 1:00:49
Right?
- 1:00:49
Yeah.
- 1:00:50
So there's a little bit of forethought here.
- 1:00:52
Absolutely. Forethought or the third time you've written that app. [laughing]
- 1:00:57
You've had enough. You've had two shitty first drafts, and you're ready for the third. Um, sometimes I do it that way. But yeah, sometimes I'll plan it out and be like, "What's the logical breakdown for these steps?"
- 1:01:05
Yeah.
- 1:01:05
Yeah.
- 1:01:06
Yep. The main point of this one is to just determine like the level of frustration and what you're frustrated about so that it can be fed in in the next step to, uh, Imgflip's API to get back an, an image template, um, that-- or a meme template that would accurately fit that, and then we kind of shoehorn
- 1:01:26
it in from there.
- 1:01:27
Totally. But the-- But again, the, the, like, I guess the mental mapping that we're all trying to do here too is like to think about how do we take this home, then like turn it into something that actually solves a problem or automates something at work, so we get promoted before the machines come for us, you know?
- 1:01:42
That's the general...
- 1:01:43
It's a race. [laughs]
- 1:01:44
Pretty much.
- 1:01:45
Human race.
- 1:01:45
Yeah, I think so. [laughs]
- 1:01:51
And just so we're level setting, this is like the memes that you've seen. Imgflip is a-- They have an API for not only finding great memes, uh, but also just having blank templates.
- 1:02:01
So they, they can give us back information about this The Rock meme, The Rock, uh, in a taxi meme or whatever. And those boxes are blank, and then you can post to their API with whatever you want it to say in each of those, and it'll tell, tell you like, "Oh, I have three boxes."
- 1:02:16
And, uh, then you just post in there, and that's what we're eventually going to be doing in one of these steps.
- 1:02:21
But that, that's a perfect real-world example. It's like knowing those box slots is critical to the rest of the pipeline. If any other step in the pipeline didn't know the box slots correctly, right?
- 1:02:29
Like that would be a problem. So you can define that in your schema and make sure that it's there. And like that's part of it. Yeah.
- 1:02:35
Okay.
- 1:02:35
Yep.
- 1:03:08
Putting this workflow together too is probably the biggest of the steps.
- 1:03:11
Yep.
- 1:03:11
Um, once we have this, we'll, we'll create an agent in the next one, and that's pretty straightforward, uh, as you'll see. Um, and so there's, there's time built in also to, to play with this experiment, tweak things like the, um, like the prompt.
- 1:03:26
Temperature.
- 1:03:26
Temperature, things like that.
- 1:03:28
We'll, we'll look at that in the playground. That's the cool thing is like once we get the agent and start chatting with it, um, you know, like there's just a-- I-iterating locally is so much faster, right?
- 1:03:36
Yes.
- 1:03:36
And that's really what the, the playground's about. So you can even tweak the prompt on a per request basis. You can change temperature, model, whatever.
- 1:03:56
Can I get help with the website?
- 1:04:00
Certainly. Yep. [background chatter]
- 1:05:05
We got it.
- 1:05:28
What
- 1:05:39
happened?
- 1:07:15
Nope.
- 1:07:16
Okay.
- 1:07:16
Oh, well, that, that's a, a common issue. The other trick is when you get that image flip username and password, it's not your email and your username and password.
- 1:07:25
Okay.
- 1:07:25
And I'll pop it in the dial over here.
- 1:07:27
Okay.
- 1:07:27
Pop it in.
- 1:07:27
So I need to go to image flip?
- 1:07:30
Just go to image flip. That's all I can do. [keyboard clacking] That's where you... That's where it
- 1:07:36
definitely stops.
- 1:07:38
Does it sound like the credentials are being hit?
- 1:07:40
Well, yeah. So in general, if you get an error, uh, at the generate meme step, and you don't get a clear error message, and you have not created an ImageFlip username and password, that's likely the problem.
- 1:07:50
I did it first.
- 1:07:51
Sweet. [laughs] All right. And then if you sign in with Google, which is the same thing I did, that's fine, and then you just have to go into ImageFlip's settings after and set a password because you're OAuth-ing in, so you didn't get to set a password.
- 1:08:04
Right. Right. Okay.
- 1:08:05
So the, the complexity is in the UI of ImageFlip. [laughs] Just-
- 1:08:10
Thank you.
- 1:08:10
Yes, absolutely. Let me know if you have another issue. Yes.
- 1:08:14
Do we need to set a username?
- 1:08:16
So, um, in our testing, like, and also there, there's a public... I think it's for ImageFlip, there's a public key that floats around. So there is an anonymous key that's public.
- 1:08:24
Like, GitGuardian will flag. Others consider it a secret, but apparently it's not, and people are using it. And the reason that we finally asked people to make their username and password is that it gets you a significantly higher rate limit.
- 1:08:35
Yes.
- 1:08:35
And so you're less likely to run into this is-issue in the workshop at least.
- 1:08:38
But the error is in-
- 1:08:39
Yeah, the error
- 1:08:41
... generating. Yeah.
- 1:08:41
The, uh-- What, what's the specific error you're getting?
- 1:08:44
Um.
- 1:08:44
Is it opaque?
- 1:08:44
It's actually now, now I'm getting just, uh, like, blank. Uh, but I don't know. It was like, "Cannot run,"
- 1:08:52
uh-
- 1:08:52
Oh, if you like-
- 1:08:53
"This branch."
- 1:08:53
Are you on the-- Which branch are you? Are you on the-
- 1:08:55
Uh, I was... Well, I guess I'm trying to get my branches still.
- 1:09:00
Um, let's see.
- 1:09:01
Okay. I think we're on two. We're, we're on two?
- 1:09:04
Mm-hmm.
- 1:09:05
Yeah, I think. So try doing git switch and yeah, so two.
- 1:09:09
Let me just stash all that stuff first. Yeah.
- 1:09:15
You have no idea the struggles of trying to do a workshop with-- wh-when API keys are involved. Uh, we originally had a step that w-it would not-- It would take an inspiration from an ImageFlip-
- 1:09:25
All right
- 1:09:25
... image, and then generate-
- 1:09:27
Okay
- 1:09:27
... a new meme. So it was a completely unique meme. Uh, but in order to do that, you would have to go in and verify your OpenAI account, which means, like, you would have to scan your passport to [laughs] be able to do it.
- 1:09:40
And we thought that might be a little much to ask in this workshop. [laughs]
- 1:10:11
Can, um, can you [REDACTED:gender] say more about, like, how you're, I guess, like, interacting with these workflows and agents, like, in the cases you've seen? You said something about Vercel.
- 1:10:20
Like, are you deploying them and then contacting them through, like, an API call? Or, like, are they actually embedded into your application?
- 1:10:26
Yeah. Um, what I'm primarily doing right now is, uh, still using the Vercel AI SDK. So everything I've got, like, at least at work that's deployed already, that's mostly Vercel AI SDK, and then we're building a, a ton of, like, internal tooling with Mastra, and that started, like, two, three weeks ago.
- 1:10:40
Mm-hmm.
- 1:10:40
And most of our stuff goes to Vercel, um, just 'cause we already had that, and it's pretty fast. Um, and then most of the things I've built so far are, are web applications that might have a pipeline, so there's a UI, and there's still a, a user kind of requesting generations and asking for things.
- 1:10:55
Mm-hmm.
- 1:10:56
Um, what I think would be super cool and powerful though is, like, the, the workflows expose, like, an API endpoint to, to start them and hit them from anything, and so I think that's also, like, a pretty powerful pattern.
- 1:11:05
I've not really used it really fully right now in prod yet, but that's, um, something I would think about for sure, like cron jobs almost.
- 1:11:13
Yeah.
- 1:11:13
Workflows that need to run, like, every night, you know, maybe have a cron that fires that or something.
- 1:11:19
All right, cool. Thanks.
- 1:11:20
Yeah. Great question. All right.
- 1:11:44
We got about five minutes, and then we're gonna move to the next step. So if anyone's stuck on anything or has questions, don't be shy.
- 1:12:06
Does anybody have the memes generating right now through the workflow?
- 1:12:09
All right. One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen.
- 1:12:14
Nice.
- 1:12:15
That's amazing.
- 1:12:16
Post some of your favorites in the, in the Slack.
- 1:12:19
Yeah. [laughs] Uh, there's no filters left on them, so-
- 1:12:23
Yes. [laughs]
- 1:12:23
... if you like what happened, it's, uh, we did it, and if you are offended, it's not our fault.
- 1:12:28
This is the-- When you're dealing with memes like this, it really brings out the non-determinism of-
- 1:12:33
Yeah
- 1:12:33
... of this. If it generates offensive ones, we tried to, to curb that, but also these AIs are not great [laughs] sometimes. [laughs]
- 1:12:46
If people who finished it wanna raise their hands, I'll go around and give you [REDACTED:gender] books.
- 1:12:50
If you want a, yeah, a free, uh, signed. Are we talking autographs here, Sam, or?
- 1:12:53
Ooh. [laughs]
- 1:12:55
Okay. I'll autograph.
- 1:12:55
Uh, we're talking autographed copies. So the first edition or second edition?
- 1:12:58
Uh, first edition.
- 1:13:00
Autographed first edition from, from the CEO of Mastra itself. If you, if you got a meme working and you want, or you just want a book, raise your hand.
- 1:13:08
Excellent. [laughs] That's pretty offensive. [laughs] It's a pretty offensive meme.[laughs]
- 1:13:34
This, this gentleman would like a, a book as well.
- 1:13:40
Awesome. Yeah. Thank you.
- 1:13:42
What you got?
- 1:13:43
Places to survive on. This is the Bible on building-
- 1:13:51
On, yeah, on building agents in TypeScript. Got it.
- 1:13:55
Cheers.
- 1:14:01
Oh, these are all point-- This is amazing. [laughs]
- 1:14:05
Yeah, I got some pretty racy ones by saying, "Why did they put a systems engineer on an open floor plan with the sales folks that are screaming all day?"
- 1:14:12
That's a fun prompt. [laughs] I love this. [laughs]
- 1:14:30
That's awesome. Every project is high priority. [laughs]
- 1:14:45
Yes, sir.
- 1:14:46
So I come from a data engineering background, and there's something called DAGs in Airflow-
- 1:14:52
Mm-hmm
- 1:14:52
... which are, for whatever reason, culturally, they've caught on. Um, as you [REDACTED:gender] have designed workflows, have you thought of DAGs? Are they similar, dissimilar, um-
- 1:15:02
Are you talking about directed acyclic graphs?
- 1:15:03
Yeah.
- 1:15:04
Yeah.
- 1:15:04
Control-- What does the control flow look like for workflows?
- 1:15:08
So far, uh, stuff that I've, I've seen, you know, supported by the semantics of, like, a, a Master pipeline. Honestly, um, to be perfectly frank, the place that my mind goes with that is just graph rag, like a graph plus retrieval augmented generation.
- 1:15:20
So, like, some vector database plus a graph, knowledge graph to, like, do traversal, um, to also answer, like, structured questions about entities in addition to, like, semantic search capabilities.
- 1:15:30
Um, that's honestly what I've built mostly, or I've see-seeing people kind of like, um, po- like, positing is gonna be a next-gen architecture. But so far what I've needed has just been pretty simple pipelines.
- 1:15:42
Basically, run these steps, branch over here if this happens. Um,
- 1:15:47
you know, I see the DAG as like, that's like Terraform in my mind from, from DevOps, like, land of like, it must proceed this way, and the entire thing fails if, if like node three, uh, is unhealthy kind of. [laughs]
- 1:16:00
For that, so in my workflow, I see like success if steps one, two, and three are super expensive-
- 1:16:07
Uh-huh
- 1:16:07
... from like an LLM perspective.
- 1:16:08
Yeah.
- 1:16:09
Have you [REDACTED:gender]-- Is it possible to trigger step four?
- 1:16:13
That's a great question. We were-- Actually, Nick asked if we could s- uh, trigger a specific step. I'm not sure. But the other thing I'll say is that in those cases, that's the other reason I love the pipelines and also even just the concept of steps and agents, because I can do a, a specific model for each
- 1:16:26
one. So, like, extracting frustrations is like, that's pretty simple and should be fast and cheap. So it's like do four, oh, or even something simpler. Or maybe even get away with like a seven billion parameter model that's deployed on like Cloudflare workers.
- 1:16:37
Yep.
- 1:16:38
Right? And then which c-- It's like essentially free. Um, that's like-- And that, that question, by the way, this is like the f-- uh, like how do you right size AI application workloads like that is top of mind for everybody now.
- 1:16:48
Everyone's asking that question. It's like, how do I get the infra to s- be what's correct for the workload I have?
- 1:16:54
And-
- 1:16:54
I think everyone's trying to figure that out. Yeah.
- 1:16:56
And, and another thing, like you can explore different ways of doing this. Uh, when we first started with this, we had all of these steps as tools.
- 1:17:03
Yeah.
- 1:17:03
And then kinda let the AI decide when it should call them. Um, so that could be another approach depending on if it can intelligently skip steps, um, it might be able to do that.
- 1:17:14
Um, there is a question. Is, uh, this is in our chat, right? Or is it, is it-
- 1:17:18
Yep.
- 1:17:18
I'm looking. Okay. So there's a question. Is, is there a way to implement or configure caching with Master? I think the answer is yes. Yeah, for sure.
- 1:17:25
Yeah. This-- So I, I did imple- I did implement the, uh, Imgflip this time.
- 1:17:31
Uh-huh.
- 1:17:32
So when I, when I tried it recently, it was still-
- 1:17:35
The same error.
- 1:17:36
Totally.
- 1:17:36
Show me the, your dot env file, if you would.
- 1:17:46
Okay. Yep. Okay.
- 1:17:49
I might have to do fix a few more of those.
- 1:17:52
Yeah. Right.
- 1:17:54
I think it-
- 1:17:55
That looks right to me, assuming those are your actual creds.
- 1:17:59
Yeah.
- 1:17:59
And then the other thing is, did you, uh, did you restart environment var env?
- 1:18:03
I, I saved it, and then I, then I, uh...
- 1:18:11
Think that user and password combination.
- 1:18:13
So it's saying it's still saving.
- 1:18:16
Oh. So restart it now 'cause I bet you-- Did you update env while that was running?
- 1:18:21
Correct.
- 1:18:22
So if you restart it, it should, um, pick up the new dot env, and let's see if it's the same error or not.
- 1:18:28
Okay. So we got...
- 1:18:31
Yep. Yep.
- 1:18:41
So we-
- 1:18:42
Yep, exactly. Yep.
- 1:18:48
Uh, what did I say badly?
- 1:18:49
Bad food. Yeah. Nice. [laughs]
- 1:18:53
I thought it was because it was two words instead of one.
- 1:18:56
It might still have a-- Is there an extra space anywhere in-- 'Cause I had that issue even after I had the correct values. Like there has to be-
- 1:19:02
All right. Let me switch. All right.
- 1:19:06
Yeah, still saying that.
- 1:19:07
How long should it take for the shirt to-- Like the MCP shirt? Oh, uh, it'll take a l- a few weeks probably. Oh, no, I mean like- Oh. Did I miss my open- Is it not going through?
- 1:19:17
I'm key. Did it try and execute the tool? Yeah. Uh, what- Try a different key. What, um- I don't think it's a problem with the AI, right? 'Cause that's-
- 1:19:25
Client API. No, no, no, it's, it's definitely not. This is-
- 1:19:27
For sure.
- 1:19:27
It's just the-
- 1:19:28
It, it should be relatively fast. Is there an second time trying?
- 1:19:32
Waiting for approval
- 1:19:33
It is-
- 1:19:34
Ah, okay. Uh, good to know. Let's try that.
- 1:19:38
I don't think you [REDACTED:gender] have an order Linux to maybe put that in there. [laughs]
- 1:19:44
We should. [laughs] Um, so I can show this now.
- 1:19:50
No, I guess.
- 1:19:51
Uh, so if you go, if you have it installed, which I do, um-
- 1:19:56
By changing it in here though, it'll-
- 1:19:57
Down in here, I have MCP shop set up. This is Claude, by the way. Uh, hey bro, I hear I can get a shirt.
- 1:20:06
You can also do the-
- 1:20:07
Let's see if it works
- 1:20:08
Should I do install or just, you know, just refresh the server, make sure that's all inside.
- 1:20:13
Pondering T-shirt potential. That was awesome.
- 1:20:16
Thank you. Here.
- 1:20:17
Ah. I can't provide physical shirts or merchandise. That's interesting.
- 1:20:23
I want you...
- 1:20:25
Is it connected?
- 1:20:33
Should be connected. Nope. That's the problem. There we go.
- 1:20:44
Try that again.
- 1:20:45
Oh, that's okay. Yeah, it's, it's, it
- 1:20:51
Hey, bro, I hear I can get a sweet MCP shirt now that we're maybe connected.
- 1:20:55
Yeah.
- 1:20:56
Yeah. Cool. So it pops up. We'll allow that.
- 1:21:07
You can definitely get an MCP shirt. There's one available right now. Here's what you can get.
- 1:21:12
Minimal design. I don't know that it says context is everything, but it might. [laughs]
- 1:21:25
Yeah, I don't think it says that.
- 1:21:26
Yeah. Go to the last one.
- 1:21:28
Oh. Oh, yeah. Okay. It does. [laughs]
- 1:21:32
Context is everything.
- 1:21:33
Yep.
- 1:21:34
Nice. [laughs]
- 1:21:36
Cool. Uh, so it just needs for me my company name, my mailing address, and my T-shirt size. So I'll say XL, um, One Infinite Loop.
- 1:21:50
And company name, uh, WorkOS. Oh, it needs my city, state, and zip code. I don't, I don't know what that is for Apple. Um, so I'll just... I'm, I live in Omaha.
- 1:22:15
Oh, and look at that. It's gonna buy my shirt.
- 1:22:25
And it's ordered.
- 1:22:29
We will, we will actually send you a shirt, so be, be sure to-
- 1:22:32
Yeah
- 1:22:32
... be sure to submit it while you're here.
- 1:22:33
You can also ask things like, um, "Can you tell me about my order?"
- 1:22:39
I have a question. Technically on Cloudflare, deployed on WorkOS.
- 1:22:46
Uh, it's deployed on... Is, is this-
- 1:22:48
You put it on Cloudflare.
- 1:22:49
Yeah.
- 1:22:50
Yeah.
- 1:22:50
I have a version deployed on Cloudflare. Um, this one I think is, it might be deployed-
- 1:22:54
The original MCP shop?
- 1:22:55
Yeah.
- 1:22:55
Probably on Vercel.
- 1:22:56
I think it's, yeah, Ver- it's deployed to Vercel, um, for this specific instance of it. I, I have a talk on Thursday where I'm also, I have the same thing deployed to Cloudflare.
- 1:23:05
So, um, we'll go into the code, and I can send out the repo for that. But, um, yes, that one just saves it, saves the info to a KV store, uh, and then that's, that's what's used to order the shirts.
- 1:23:18
Uh, you can deploy MCP servers to Cloudflare now using WorkOS as the auth layer.
- 1:23:22
Yeah.
- 1:23:23
So, so-
- 1:23:23
And then-
- 1:23:24
Uh, feel free to check that out. We have a blog post and a couple of tutorials.
- 1:23:26
Yeah.
- 1:23:26
Yeah.
- 1:23:27
That's the thing. It's using WorkOS to do that auth. You didn't see it 'cause I'm already authed in, but when I hit Connect, it opened up and it was do-- completing that auth flow to get me a token so that I could, uh, do that here.
- 1:23:38
And you can see that in here, it's got, like, my order information.
- 1:23:44
Um, I don't know. Do you know my name and email? Which is totally not something I've said yet.
- 1:23:55
But, but also to tie it again, uh, back together, right? 'Cause again, it's, like, toy, it's fun, got a T-shirt, but imagine this as an e-commerce workflow, right?
- 1:24:03
Yeah.
- 1:24:03
This is what people are building. Like, this is what everyone's trying to figure out how to do correctly. What I actually wanna do is just go, I'm in a hurry, I wanna get on the page and say, "It needs to be a product exactly like this.
- 1:24:11
Does it support that? Okay, fine, go. Not forty dollars, less than that." Right? That's what everyone wants to do. Um, and so that's what this interface is.
- 1:24:18
Yeah. Pretty soon you'll be social engineering your way through LLMs to get a free shirt-
- 1:24:22
Yep
- 1:24:22
... when it's not free.
- 1:24:23
Yep. [laughs]
- 1:24:25
I can't wait for the future.
- 1:24:27
Mm-hmm.
- 1:24:29
Uh, cool.
- 1:24:30
These are generating these.
- 1:24:31
Yeah. Let's, let's, uh, look at the workflow. So I switched over to the step three branch, which is the end of step two, uh, where you should be at.
- 1:24:39
And you've got a new meme generation workflow, uh, and it's got, you know, a bunch of schemas set up for the input and output schemas, uh, and all of the steps set up to run each of these.
- 1:24:52
And, you know, that's the code for it. Let's go look at the, the actual, get out of here, um, the tools in Mastra. So I'll refresh this and go back to work- nope.
- 1:25:06
Workflows. There we go. Now we have our meme generation workflow, and it's got four steps. And so this is a little bit better, a little, little more detailed in what, what it's doing.
- 1:25:15
Um, it's got, not including these mappings, it's got our extract functions, find base meme, generate captions, generate meme.
- 1:25:25
Oh, come on. Uh, and then a final mapping. Um, and so, I don't know. Someone give me a work frustration.
- 1:25:35
Somebody ate my sandwich out of the fridge
- 1:25:39
When no one in the workshop is-
- 1:25:43
Someone was too busy preparing a workshop to review my PR. [laughs]
- 1:25:48
Nick
- 1:25:50
No, never. [laughs] And won't review my PR. That's a made-up one. Um, so yeah, it can run-- You can see it running. Um, and then we can go-- we can see all of the steps are now green, and so we can see the input and debug the input and output on each of the steps.
- 1:26:10
So there's the input that we got, and it gave out a frustration, a communication frustration.
- 1:26:21
And, oh, I am all sorts of messing this up.
- 1:26:28
Uh, but we can have it find the base meme and then generate the captions for it. Find out what that is. So when the meeting could have been an email, but everyone is just smiling like it's fine.
- 1:26:39
That's relatable. Um, but then down in the generate meme one, that's gonna receive the captions. It's gonna receive apparently a meme called Disaster Girl. And
- 1:26:53
did I mention that these are non-deterministic, and I don't know what it's gonna generate?
- 1:27:00
Ah. When the meeting could have been an email, but everyone is just smiling like it's fine. [laughs] This is fine.
- 1:27:07
Yeah.
- 1:27:08
Um, yeah. So this is fun, right? We can see the workflows, the, the inputs and outputs of it, and we can debug those steps along the way. We can see exactly what is-- what we're starting with and how it progresses through each of the steps, uh, to give us a full workflow, which is awesome.
- 1:27:25
Um-
- 1:27:25
We haven't even had to do a deployment yet.
- 1:27:27
Nope.
- 1:27:27
And we can just iterate locally, change the prompts, change the schemas until you get it exactly the way you want, and then you haven't wasted time going back and forth.
- 1:27:34
You've, like, iterated rapidly.
- 1:27:36
Yeah. And so really easy debugging. That's why we love this tool. Like, it's j- it's just really fun and easy to do. So in the final step, um, the, the final main step we have, uh, we're going to, like, take that workflow now and call it with an agent.
- 1:27:52
So this is a pretty straightforward step. We're just gonna create an agent, give it a prompt to work with, and give it the, the knowledge of th- this workflow that it can run, and then it'll run it for us.
- 1:28:02
So instead of having to use that interface, we can use a chat interface, uh, that we're more familiar with and go from there.
- 1:28:11
And so-
- 1:28:12
And, and again, to tie it back to actually taking this home and doing something useful with it, like we've gotten to the point where we've described a workflow of steps that completes a discrete task, and maybe that's something that our, our coworker needs.
- 1:28:23
And then again, maybe they are technical, maybe they're not, maybe they're just in a hurry. So by building them an agent and saying, "Use this workflow," and you, you have the ability to call this workflow, that becomes an ideal interface to give to our colleagues to start using this.
- 1:28:36
And then something that they used to have to do piecemeal, they're just now firing off a chat request, and it's done for them automatically.
- 1:28:44
Yeah. Yeah, so with this, you'll learn what agents are, how you give them instructions, um, the memory systems for them, the workflow integration, uh, through Mastra, and then how you can test them in the playground.
- 1:29:16
Wow, these are awesome. So these are new community memes pouring in in real time.
- 1:29:22
We finally catch up on Slack messages, but there's already twenty more waiting. Nice.
- 1:29:37
Yeah, that's a great idea.
- 1:29:38
Yeah.
- 1:29:40
There's some great, um, feedback on the framework, [REDACTED:gender], in the, in the Slack channel. There's like some UX requests as well. Let me see. [laughs]
- 1:29:51
That's great. [laughs]
- 1:30:02
Too real. [laughs] You can also play with the, uh, prompt, uh, the prompts a little bit to tweak it about what it's-- how it's like analyzing the frustration, the level of frustration, the type of meme, um, things like that.
- 1:30:28
It's really fun to get a, a vibe for it.
- 1:30:30
Yeah, indeed. All right. Does everyone more or less have, uh, what they need, or is anyone still stuck on anything? Any last-minute questions or hiccups?
- 1:30:44
No? Cool. That's amazing. [laughs]
- 1:31:03
I'm gonna make a T-shirt with that.
- 1:31:47
Uh, just a, I guess a comment from us, and I guess from the team as well, like honestly, like thanks everybody for coming and building these. We didn't even know this workshop was happening until last week, I think it, it was.
- 1:32:00
But, um, I mean, previously like so like most of us at Mastra were previously building Gatsby, like I was the co-founder, and so we've been doing open source JavaScript stuff for a while, but it's like pretty humbling when you show up for a conference and actually someone else is giving a workshop- [laughs] -about how to use the thing
- 1:32:21
that you built. Um, and I think I speak for all of us, so like thanks everybody.
- 1:32:26
Thanks a lot.
- 1:32:27
Yeah, thanks.
- 1:32:27
It's been a pleasure. [clapping]
- 1:32:31
And on the same side, we didn't know that you were gonna be here until I think like yesterday. [laughs]
- 1:32:35
But we got very excited because then it's like, "Hey, you got a question about Commit? Let's go ask them."
- 1:32:39
Yeah. [laughs]
- 1:32:45
I'm just personally curious how many folks have or like already have agents deployed at work in prod that they're using for things? Only spoke a couple. How many folks are trying to get them in, into prod right now?
- 1:32:58
I'd be curious to know what you're using them for.
- 1:33:00
Yeah. I'd also be curious if anyone wants to share either in the Slack or just call it out or come up to mic, like what are the top use cases that you're thinking of for agents or struggling with?
- 1:33:09
I'd be curious to know too.
- 1:33:12
This is such a fun time 'cause there's like, like you, you have to get your head around what it's doing and then get your head around what it can do, and it just, it starts to feel like the possibilities are endless and-
- 1:33:23
Mm-hmm
- 1:33:23
... just super fun.
- 1:33:24
Yep.
- 1:33:27
I'm working on chatting with infrastructure.
- 1:33:30
Oh, nice.
- 1:33:31
I want to talk about getting around the common operating tools.
- 1:33:34
Yeah.
- 1:33:36
Our server, um, kind of cluster. We have physical servers that have issues operationally.
- 1:33:43
Yep.
- 1:33:44
And end goal is to have a problem for getting logs, like that.
- 1:33:50
That's awesome. [inaudible] Yeah. That's awesome. So like you've got, um... So you wanna be able to chat with your infrastructure and like ask questions, like either an in- incident, like show up to the incident and even already have like initial guesses maybe?
- 1:34:01
Yeah. It's very close.
- 1:34:02
Yeah. That's awesome. Cool. Any other use cases?
- 1:34:07
I think that we're finding, um, we're mostly able to just knock out a ton of like low-hanging fruit that folks are doing manually right now. It's, you know, especially with tools like this, like you, you know, create a simple agent or even just a s- pipeline with a few steps and a couple API calls, and that can
- 1:34:21
like free up hours of somebody's week.
- 1:34:23
Mm-hmm.
- 1:34:24
Um, I think that's the part that I'm most excited about right now.
- 1:34:26
Yeah. It's like all the little paper cuts, you can just so quickly iterate on them and get things going.
- 1:34:31
Yep.
- 1:34:31
And not just with the- these tools, but just like vibe coding in general. Like you can, you know, be like, "I'm gonna spend an hour just seeing where I can get to," and-
- 1:34:40
Yeah
- 1:34:40
... it's amazing. [laughs]
- 1:34:40
It's incredible h-how quickly you can get there.
- 1:34:45
Always review the code though, please. [laughs]
- 1:34:47
What's that?
- 1:34:48
Always review the code, please. [laughs]
- 1:34:49
Yeah. Please review the code, and use tools like GitGuardian before you commit.
- 1:34:52
Yeah. Yeah, we had our, our AI moment, uh, a couple weeks ago at our last onsite, and, um, we had like a couple hours just to spend doing something with AI, and it-- There was really no prescription to it.
- 1:35:12
It was just explore and play, and if you can solve a problem, great. If not, you learned something along the way. And, uh, the thing that I worked on was, uh, like ma- as the, the maintainer of several SDKs across several languages, uh, a pain point I saw was like people adding in, you know, very simple PRs
- 1:35:30
to one repo that's like the node repo, the node SDK, and then doing the same thing. It's like adding a new field to the node SDK and then adding the same field to the Ruby, Go, PHP, Kotlin, like all of the SDKs.
- 1:35:43
I was like, "I wonder if we could do something to alleviate that and make it easier." And after two hours of pure vibe coding with Claude, uh, I had a GitHub action that when you label the first PR that you do, if you just add a label to it, it will go and generate the PRs for every
- 1:35:58
other repo and just-
- 1:36:00
In every other SDK
- 1:36:00
... automatically PR.
- 1:36:01
In every other SDK. Yeah.
- 1:36:03
Yep.
- 1:36:03
That's awesome.
- 1:36:04
Were you using like a software engineering framework like Dagger or something to potentially
- 1:36:11
make the changes for Claude?
- 1:36:11
Making the-- Oh, that's a great question. Making the changes is one thing, and-
- 1:36:14
Yeah
- 1:36:14
... that's something that, yeah, I think Dagger would make a lot of sense. But-
- 1:36:16
Would it?
- 1:36:17
... what were you doing with that?
- 1:36:18
I wasn't. I wasn't doing any of that. Um, I vibe coded it, and I actually don't know what the code does. [laughs]
- 1:36:24
He-- And he had the-
- 1:36:25
What?
- 1:36:25
I didn't review it.
- 1:36:26
Yeah. So he had a four thousand three hundred line, uh, GitHub action-
- 1:36:28
Yeah
- 1:36:28
... that's working great. How?
- 1:36:29
I wanna hear more about that. [laughs]
- 1:36:32
But to be clear, we didn't ship it. Uh, it's, it's an experiment. [laughs] Maybe, maybe we will, for sure. Um, but the week after that, I think, um, Claude had come out with like b- the ability to run Claude code as a, uh, like via an API, so that you could like spin it up, run it, give it
- 1:36:50
the instructions on what to do, and then let it figure out how to do it, 'cause like most of the code that it generated was just handling how it was gonna do the diffs.
- 1:36:58
And for several hours of that, it was just like, it made the changes I wanted and then deleted the rest of the files, and that wasn't great, you know? [laughs]
- 1:37:13
Um, we're also, for what it's worth, finding, uh, incredible utility with tools like v0 Dev. So if you're already in the Vercel ecosystem or have used Next.js, there's now...
- 1:37:21
They're, they were originally conceived of as like rapid prototyping tools that may be for designers or may be for developers. But like an example is that somebody on our marketing and sales team is trying to figure out who would be interesting engineers who are already doing work with MCP to contact about conferences like this, and their workflow
- 1:37:37
is completely manual, and they're, you know, talking to me about it on a, on a call, and four minutes after they started telling me about it, I had it working like in v0 Dev.
- 1:37:45
And hand it to them and they had a completely separate, you know, tool that's available on a URL that they can just paste in whatever they need essentially and get like the analysis done.
- 1:37:56
Um, and so that was very eye-eye-eye-opening for me 'cause it's-- in some cases now it's faster to create the tool that your colleague needs than it is to continue talking about the tool that your colleague needs and even ticketing it or saying next Tuesday we should try and like...
- 1:38:12
Sometimes you can literally sit down in v0 dev with like a paragraph, very descript prompt, and get what you need.
- 1:38:23
Nice. That's pretty good.
- 1:38:25
So then question.
- 1:38:26
Yes.
- 1:38:27
Do your salespeople do they respond by saying, "I can create a keyboard." Now I wanna be that tool.
- 1:38:33
No.
- 1:38:33
And I just-
- 1:38:34
Not in my experience. Not yet. [laughs] Yeah. Totally. I think that's, that's a fascinating question. Yeah. The question is like when, um, folks in other roles that are not traditionally technical see how quickly you can scaffold this stuff, are they all clamoring for the keyboard?
- 1:38:47
That's not been my experience yet. They're-- I think that's also like part of what the trepidation and anxiety is around, is like, well, now everyone can do it. But then I also comfort myself and say that I define a pleasurable evening as like sitting down for twelve hours on one of these machines and going back and forth
- 1:39:02
to try and get it to go the way I want. And that's not most people's description of a fun time. So like even when the tools are better, I, I still think you kinda have to find this enjoyable. [laughs]
- 1:39:11
You know what I mean? I don't, I don't... I, I, I think it might change to some degree like when like most generation becomes one-shottable.
- 1:39:19
Yeah.
- 1:39:19
And you say, "I want this app," and it's of like this complexity, and most people can get something working immediately if that's correct. I think that'll take a lot of low-hanging fruit off.
- 1:39:28
But...
- 1:39:29
It's interesting. I heard, um, some people is that then profit of the lawyers would put their lawyers down in the
- 1:39:37
CSPs.
- 1:39:37
They would do what?
- 1:39:38
Put lawyer, like legal-
- 1:39:40
Uh-huh.
- 1:39:40
-questions and data into CSPs, and then they literally, uh, almost like one out start telling, "Block code, go to XYZ, and tell me what the results are." And so I don't know.
- 1:39:54
I kind of feel like from a philosophical point, people just don't see cultures today structured the way these people see AI and other people see other people. They're not the same.
- 1:40:07
Yeah. I, I think that's super fascinating. And anecdotally, um, it's mostly been lawyers when I've been at meetups that have come up and asked the most like salient questions about GenAI, and they'll say like, "I'm not a coder, but like this is what we're trying to do."
- 1:40:17
Also semantic search and all like the information compression that's available with a lot of the GenAI tools, like I think uniquely speaks to their use case too of there's this gigantic corpus of case law and need to know exactly this right now, right?
- 1:40:31
Yeah. It's-- But it is, um, it's an intense time I think for that reason. Yeah. Culturally, right? [whispering]
- 1:41:02
What are we doing? [whispering]
- 1:41:06
Nothing. [whispering]
- 1:41:09
What do you mean? [whispering]
- 1:41:09
We've got, uh, five slides left. [whispering]
- 1:41:20
Okay. [clears throat] Are you [REDACTED:gender] gonna configure an MCP server and MCPServers?
- 1:41:34
Uh, in this, uh, s-session or in general? Sorry, I didn't-- Right now? Uh, no. Yeah.
- 1:41:41
But, uh, I have a, I have a- [inaudible] Yeah. Yeah, for the most part. I have a tutorial for you that does that if you want it. [laughs] Thanks. Thanks for coming.
- 1:41:47
Appreciate it.
- 1:41:48
Yeah. Thank you.
- 1:41:51
Yeah.
- 1:41:52
All right, so we can show the agent piece of it now. Um, so I switched over to the step four branch, uh, which is the end of step three, uh, where we should have the created, uh, agent now that can run, uh, and actually have a conversation with the tooling, uh, which makes it really a lot easier
- 1:42:09
to work with. Uh, but we still have the power of being able to use the workflow tool to see what's going on and debug the steps along the way.
- 1:42:18
Uh, but now if we go to the Agents tab in Mastra, we've got a meme generator, and this gives us a very sim-- a, a very familiar look and feel.
- 1:42:27
Gives us a chat window, uh, but it gives us more than that. In the, uh, the sidebar here, we've got an overview. We can see the instructions, uh, that are given to the agent.
- 1:42:37
So it's a helpful UI agent, uh, or AI agent that's going to help us do that. Uh, it's got some critical steps in there. It's got the workflow that it should follow, um, and telling it what it has access to.
- 1:42:50
We also can see the model settings, and we can adjust this as we go. So we can add more or less temperature, uh, top P. We can change all of these on the fly and test it to really hone in on like what works best for whatever we're trying to build.
- 1:43:05
So I'll ask one more time. Work frustration.
- 1:43:08
Who's got the gnarliest work frust-- Who's the most frustrated at work right now? Raise your hand. And again, you must state your company and your immediate superior's name.
- 1:43:19
Um, I always get asked to go to large meetings for four hours, and then, uh, I don't speak at all. [laughs]
- 1:43:44
This bothers you too, I see. Okay.
- 1:43:46
Yes. Uh, meeting fatigue. Um, so now we can just ask the chat
- 1:43:52
And see the output, and it's much cleaner. It'll actually give us the image in line too, um, which makes it really nice and easy to [laughs] work with. That pointless meeting I was dragged into. [laughs]
- 1:44:05
But if you scroll up a little bit too, the other thing, uh, to see here is like, so the user asked a question, and you saw that the workflow got run.
- 1:44:12
Um, but now there's also additionally, like, the agent is still chatting, and it's in a familiar way that you already-- if it-- are familiar with if you use GPT.
- 1:44:20
Um, but then again, just a reminder that this is kind of in-- the ideal interface for, uh, folks that might be your clients or your customers or your colleagues.
- 1:44:27
Yep. And we can see, like, in line what happened. You know, the tool arguments that were passed in, the total result. We can see what tools were called, uh, and how in this case it was the workflow, and here's all of the information, and then the end result that we can actually play with.
- 1:44:44
Yeah, so this could be, you know, a chatbot that someone is, uh, requesting a report from, an analysis, a SQL query, a new code, a review of code, a review of a design, like a new image.
- 1:44:55
Uh, you can kind of put whatever you want behind the same interface. [typing]
- 1:45:16
Not really. Not really. [laughs]
- 1:45:37
It's non-deterministic, [REDACTED:gender]. [laughs] Um.
- 1:45:47
There's, there's no HR for this conference. [laughs] I was told that in advance.
- 1:45:51
So, uh, kinda to wrap that up, uh, what we built was a multi-step workflow that we could give to a conversational agent who knows how to execute it, knows what to pass into it, and what it's going to get back, and then it can do with that what it will.
- 1:46:05
It gave us, you know, human feedback. Uh, it wasn't just spitting out JSON in the end. Uh, it was giving us an actual response, and then showing us the image online and giving us a, a clickable link so that we could go share that image, uh, to whoever we wanted to.
- 1:46:20
Um, and we were able to create some awesome memes. I highly recommend you deploy this and use it because it's cathartic to really vent to it. Um, and if you're deploying it, the-- your data's safe probably.
- 1:46:32
I don't know. [laughs] Find out. Do it. So some key takeaways, uh, from this. Uh, we learned about the workflows, agents. We learned, uh, type safety, um, catching errors in that, uh, and the structured generation to ensure re-reliable output, uh, and some of the benefits of Mastra.
- 1:46:52
Yep. Um, also just say that, that we didn't show this here, but one of the examples that's on Mastra's site you can go check out is, like, a thirty-seven line of code, uh, pipeline that does retrieval augmented generation.
- 1:47:01
And if you've worked-- If you've built those pipelines before, like two years ago, you know, you had to glue together at least three or four libraries, and it was a super crappy experience.
- 1:47:09
Um, so it's just really nice to have a single place that you can go and define that pipeline at a high level. Um, so yeah, excited to experiment more with that as well.
- 1:47:20
There's a ton in here that you can do that we did not even scratch the surface of or, or point to yet.
- 1:47:24
Yeah, for sure. Coming up with, uh, what to do in two hours, it's, uh, not a lot of time.
- 1:47:28
Yeah.
- 1:47:29
And there's a lot, a lot more that we could dig into, and we highly encourage you to. So this was meant as a, a primer. Uh, you, you now have like an example.
- 1:47:37
What you're appetite.
- 1:47:37
Yeah.
- 1:47:37
Yeah.
- 1:47:38
Uh, now experiment with it. Add things, add tools, um, deploy it with MCP, like figure out how-
- 1:47:43
Share it with your coworkers. Yeah.
- 1:47:44
Yeah.
- 1:47:44
Ask them to use it, see what happens. [clears throat]
- 1:47:48
So yeah, explore the tool creation, uh, add a vector database, implement RAG, uh, all of those. And just a final reminder, uh, mcp.shop, um, go order a T-shirt, check it out.
- 1:48:00
Uh, it's really cool. So thank you. With that, um, we've got fifteen minutes left. We wanted to save that for questions. Any, uh, additional follow-up? Any just general casual conversation about these tools, uh, the fascinating world of AI, anything?
- 1:48:16
Vote on memes that we generated-
- 1:48:19
Yep
- 1:48:19
... and see who is the ultimate winner in the Slack channel. [laughs]
- 1:48:25
So I'm giving a talk on agents and workflows tomorrow, and I really liked your agents and workflows slide. Can you bring them up again?
- 1:48:31
What? I didn't hear what you said.
- 1:48:32
Yes, I didn't hear. Sorry.
- 1:48:33
Oh, sorry. I-I'm giving a talk on agents and workflows tomorrow.
- 1:48:37
Uh-huh.
- 1:48:37
And your agents and workflow slides were really good. Can you bring them up again? [laughs] [laughs]
- 1:48:41
Sure. We can share them too. They're open source because they're in our repo, and they're in Markdown.
- 1:48:50
How do you make those in Markdown?
- 1:48:52
There's a couple tools that Nick, Nick likes.
- 1:48:54
Oh, yeah, this was sly dot-- uh, slydev or sly.dev. Um,
- 1:49:00
yeah, it was something that we switched to relatively-
- 1:49:04
Twenty minutes
- 1:49:04
... not that long ago.
- 1:49:05
T-twenty minutes before this talk, yeah.
- 1:49:07
Pretty much. Yeah. [laughs]
- 1:49:14
Uh, questions for us or the Mastra team?
- 1:49:23
Uh, do make sure that you-- if you want a shirt, buy a shirt because we will actually send you a shirt. We might not send it this week, but, uh, we're tracking all the orders, and we're going to honor all of them.
- 1:49:33
So it's a limited edition mcp.shop shirt that will never be seen again. [laughs] [laughs]
- 1:49:41
And we have the books. We have some here, and I think we brought some in the back.
- 1:49:45
Yep.
- 1:49:45
As well as some pins. If you take one, uh-
- 1:49:48
If you want an official Mastra book, um, autographed copies are thirty dollars, right? [laughs]
- 1:49:53
And otherwise... [laughs]
- 1:49:57
Cool. Um, but yeah. Yeah, question.
- 1:50:00
Where's the memory and execution step?
- 1:50:03
The memory and execution step? Um.
- 1:50:06
Yeah. So y-y-you can configure, you know-- We, we configured SQLite for this demo, and that's what's powering, like, the ability as you create additional chats, you'll see the previous chats on the left rail.
- 1:50:15
Um, but there's a ton of different storage drivers. Like, there's the Postgres and everything else, right? Um, so you can basically choose what you need to. Um, and then once you configure the memory, you pass it into either the workflow or agent, um, and then that-- by, by way of doing that, you're telling it can use it
- 1:50:31
essentially. Is that your question?
- 1:50:33
The demo one doesn't have memory.
- 1:50:34
The demo one does have memory. It's using SQLite, and it's-
- 1:50:37
Yes, I saw, but, uh, it says to check the execution step. Where do I find that?
- 1:50:41
Uh, check execution step? Where are you? Let me... Oh, I'll come over.
- 1:50:50
Great talks.
- 1:50:51
Oh, thank you.
- 1:50:52
Thank you.
- 1:50:52
Thanks so much for coming. Appreciate it.
- 1:50:54
And, uh, yeah, we'll be around, uh, all week, uh, at the conference, so reach out. Uh, we'd love to chat more.
- 1:51:00
Let's talk about just, uh, like, that graph.
- 1:51:04
This is amazing. [applause]
- 1:51:05
Thank you. [upbeat music]