[{"data":1,"prerenderedAt":767},["ShallowReactive",2],{"tool-mastra-de":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":22,"sources":29,"cover":62,"og":63,"expertise":64,"locales":65,"lang":67,"title":69,"description":70,"coverAlt":71,"url":25,"pricing":72,"kind":10,"metaTitle":73,"takeaways":74,"faq":80,"toc":93,"blocks":118,"others":534},"mastra","2026-07-15",11,"agents",[9,10,11,12,13],"TypeScript","Agent framework","Workflows","MCP","Evals",[15,16,17,18,19,20,21],"mastra ai framework","mastra vs langgraph","typescript agent framework","mastra agent framework review","mastra workflows and memory","mastra mcp server","mastra pricing",[23,26],{"name":24,"url":25},"Mastra","https:\u002F\u002Fmastra.ai",{"name":27,"url":28},"Mastra on GitHub","https:\u002F\u002Fgithub.com\u002Fmastra-ai\u002Fmastra",[30,33,36,39,42,45,48,51,54,57,59],{"title":31,"url":32},"Mastra documentation: agents","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Fagents\u002Foverview",{"title":34,"url":35},"Mastra documentation: workflows","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Fworkflows\u002Foverview",{"title":37,"url":38},"Mastra documentation: memory","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Fmemory\u002Foverview",{"title":40,"url":41},"Mastra documentation: MCP","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Ftools-mcp\u002Fmcp-overview",{"title":43,"url":44},"Mastra documentation: guardrails","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Fagents\u002Fguardrails",{"title":46,"url":47},"Mastra documentation: evals","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Fevals\u002Foverview",{"title":49,"url":50},"Mastra documentation: observability","https:\u002F\u002Fmastra.ai\u002Fdocs\u002Fobservability\u002Foverview",{"title":52,"url":53},"Mastra documentation: model providers","https:\u002F\u002Fmastra.ai\u002Fmodels",{"title":55,"url":56},"Mastra pricing","https:\u002F\u002Fmastra.ai\u002Fpricing",{"title":58,"url":28},"mastra-ai\u002Fmastra on GitHub",{"title":60,"url":61},"Mastra Enterprise Edition License v2.0","https:\u002F\u002Fgithub.com\u002Fmastra-ai\u002Fmastra\u002Fblob\u002Fmain\u002Fee\u002FLICENSE","\u002Fimages\u002Fblog\u002Fmastra\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmastra\u002Fog.jpg","ai-engineer",[66,67,68],"en","de","hu","Mastra im Test: TypeScript-Agenten mit echter Evaluationsschleife","Mastra bündelt Agenten, Workflows, Memory, MCP, Guardrails, Tracing und Evals in einem TypeScript-Framework. Was der Apache-2.0-Kern abdeckt, was die ee\u002F-Teilung kostet und wer einsteigen sollte.","Diagramm der Mastra-Laufzeit: ein Agent ruft Tools und ein Modell auf, darunter Workflow-Schritte, Memory und Storage, unten ein Streifen Observability-Spans.","Apache-2.0 core · hosted paid","Mastra: TypeScript-Agenten im Test · Balázs Csorba",[75,76,77,78,79],"Mastra ist das vollständigste TypeScript-Agentenframework in einem Repository: Agenten, Workflows, Memory, MCP-Server-Autorisierung, Guardrails, Tracing und Evals, Apache-2.0 für alles außerhalb der ee\u002F-Verzeichnisse.","Die Lizenz hat eine kommerzielle Kante. Code unter ee\u002F - derzeit Auth, der Agent Builder und der Editor - ist quelloffen verfügbar, und für den Produktivbetrieb braucht es sowohl einen Vertrag als auch einen Lizenzschlüssel.","Das Framework bewegt sich schnell: 99 Releases von @mastra\u002Fcore in den 30 Tagen bis 7. Oktober 2026, exakte Versionen zu pinnen und Evals in der CI zu fahren ist also Pflicht.","Die eigentliche Stärke ist die Schleife zwischen Code, Traces und Evals, nicht der Agenten-Loop selbst, der Commodity ist; Studio-Time-Travel und Experimente halten Teams auf der bezahlten Plattform.","Gegenüber LangGraph.js und dem Vercel AI SDK besitzt Mastra mehr Laufzeitumgebung und verlangt mehr Abhängigkeiten: @mastra\u002Fcore allein zieht 30 direkte Abhängigkeiten.",[81,84,87,90],{"q":82,"a":83},"Ist Mastra Open Source?","Größtenteils. Der Kern und der weitaus größte Teil des Monorepos stehen unter Apache-2.0 und werden als @mastra\u002Fcore veröffentlicht, das am 7. Oktober 2026 bei 1.75.0 stand. Verzeichnisse namens ee\u002F - @mastra\u002Fcore\u002Fauth\u002Fee, @mastra\u002Fcore\u002Fagent-builder\u002Fee und @mastra\u002Feditor\u002Fee - sind quelloffen zugänglich unter der Mastra Enterprise Edition License, die Entwicklung und Tests erlaubt, aber keinen Produktivbetrieb ohne Lizenzschlüssel und schriftlichen Vertrag.",{"q":85,"a":86},"Wie verhält sich Mastra zu LangGraph.js?","LangGraph.js ist eine Graph-Laufzeit mit dauerhafter Ausführung und Zustand, steht unter MIT und hat mehr wöchentliche Downloads: 4,55 Millionen gegenüber 2,23 Millionen für @mastra\u002Fcore in der Woche bis 4. Oktober 2026. Mastra bündelt dafür mehr um den Agenten herum, mit Memory, Guardrails, MCP-Server-Autorisierung, Tracing, Evals und einer gehosteten Plattform. Die Wahl hängt daran, ob die Graph-Primitives oder die umgebende Produktoberfläche fehlen.",{"q":88,"a":89},"Unterstützt Mastra MCP?","In beide Richtungen. MCPClient verbindet sich mit MCP-Servern über stdio und Streamable HTTP, mit requireToolApproval als Gate und allowedHosts zur Einschränkung ausgehender Hosts. MCPServer stellt Mastra-Agenten, Tools, Workflows, Prompts und Ressourcen unter \u002Fapi\u002Fmcp\u002F:serverId\u002Fmcp bereit und spricht die Revision 2026-07-28 des Protokolls.",{"q":91,"a":92},"Was kostet Mastra?","Das Framework ist kostenlos. Die gehostete Plattform nennt eine kostenlose Starter-Stufe mit 100k Observability-Events, 24 CPU-Stunden und 15 Tagen Aufbewahrung, eine Teams-Stufe für 250 USD pro Monat mit 1 Mio. Events, 250 CPU-Stunden, 6 Monaten Aufbewahrung, SSO und SOC-2-Dokumentation sowie eine individuelle Enterprise-Stufe. Eine dauerhaft laufende Instanz kostet zusätzlich 100 USD pro Projekt, und das Model Gateway legt 5,5 Prozent auf die Marktpreise der Token.",[94,97,100,103,106,109,112,115],{"id":95,"title":96},"what-it-is","Was Mastra tatsächlich ist",{"id":98,"title":99},"how-it-works","Wie es funktioniert",{"id":101,"title":102},"getting-started","Erste Schritte",{"id":104,"title":105},"observability-and-evals","Observability und Evals sind das eigentliche Produkt",{"id":107,"title":108},"pricing-and-licensing","Preise und die Lizenzteilung",{"id":110,"title":111},"where-it-shingles","Wo es hakt",{"id":113,"title":114},"verdict","Fazit",{"id":116,"title":117},"sources","Quellen",[119,123,131,134,168,208,209,243,252,260,264,279,281,301,302,305,307,321,328,329,337,359,362,363,366,405,408,413,414,417,471,474,475,478,491,497,498],{"type":120,"content":121},"paragraph",[122],"Mastra ist ein TypeScript-Framework für LLM-Agenten und eines der vollständigsten: Agenten, Workflow-Engine, Memory, MCP-Server-Autorisierung, Guardrails, Tracing, Evals und eine gehostete Plattform in einem Repository. Die Position hier ist eindeutig. Mastra ist der am besten unterstützte Weg, einen Agenten in eine bestehende Node- oder Next.js-Codebasis zu bringen, und die falsche Wahl für ein Python-Team oder für eine Gruppe, die nur den Tool-Calling-Loop braucht.",{"type":120,"content":124},[125,126,130],"Es liegt über der Modellschicht und unterhalb der Anwendung: Modelle gehen als ",{"tag":127,"children":128},"code",[129],"provider\u002Fmodel","-Strings hinein, und das Framework übernimmt den Agenten-Loop, den Workflow-Graphen, den Thread-Zustand und die Traces. Die direkten Wettbewerber sind LangGraph.js, das Vercel AI SDK, das OpenAI Agents SDK und neuere Einträge wie VoltAgent. Der Unterschied liegt nicht im Loop, der ist Commodity, sondern darin, wie viel der umgebenden Laufzeitumgebung jedes Framework bereit ist zu übernehmen.",{"type":132,"level":133,"id":95,"text":96},"heading",2,{"type":120,"content":135},[136,137,140,141,144,145,144,148,144,151,144,154,144,157,160,161,163,164,167],"Mastra ist ein Monorepo aus gescopeten npm-Paketen, nicht eine einzelne Bibliothek. Der Kern ist ",{"tag":127,"children":138},[139],"@mastra\u002Fcore",", alles andere hängt daran: ",{"tag":127,"children":142},[143],"@mastra\u002Fmemory",", ",{"tag":127,"children":146},[147],"@mastra\u002Flibsql",{"tag":127,"children":149},[150],"@mastra\u002Fpg",{"tag":127,"children":152},[153],"@mastra\u002Fobservability",{"tag":127,"children":155},[156],"@mastra\u002Fevals",{"tag":127,"children":158},[159],"@mastra\u002Fmcp"," und der Rest. Die ",{"tag":127,"children":162},[24],"-Klasse in ",{"tag":127,"children":165},[166],"src\u002Fmastra\u002Findex.ts"," ist das Registry-Objekt, das Agenten, Workflows, Storage, Logging und Observability verdrahtet, und aus ihr bezieht jeder andere Teil des Frameworks seine Dienste.",{"type":169,"ordered":170,"items":171},"list",false,[172,178,183,188,193,198,203],[173,177],{"tag":174,"children":175},"strong",[176],"Lizenz",": Apache-2.0 für alles außerhalb der ee\u002F-Verzeichnisse, darin quelloffen unter der Mastra Enterprise Edition License.",[179,182],{"tag":174,"children":180},[181],"Reife",": @mastra\u002Fcore stand am 7. Oktober 2026 bei 1.75.0; das Repository zeigt 28,6k Sterne und 2,9k Forks, die erste Version erschien im Oktober 2024.",[184,187],{"tag":174,"children":185},[186],"Verbreitung",": 2,23 Millionen npm-Downloads für @mastra\u002Fcore in der Woche bis 4. Oktober 2026, gegenüber 4,55 Millionen für @langchain\u002Flanggraph und 34,5 Millionen für das ai-Paket von Vercel.",[189,192],{"tag":174,"children":190},[191],"Release-Tempo",": 99 Releases von @mastra\u002Fcore in den 30 Tagen bis 7. Oktober 2026 und 301 in 90 Tagen, von insgesamt 1.656 seit Oktober 2024.",[194,197],{"tag":174,"children":195},[196],"Laufzeit",": Node 22.18 oder neuer, mit einem Hono-basierten Server, Deployern für Vercel, Netlify und Cloudflare oder jedem eigenen HTTP-Host.",[199,202],{"tag":174,"children":200},[201],"Modellzugriff",": ein Model Router, der einen provider\u002Fmodel-String auflöst, 213 Anbieter und 7.790 Modelle listet, Fallback-Ketten pro Modell unterstützt und den Anbieterschlüssel aus der Umgebung liest.",[204,207],{"tag":174,"children":205},[206],"Typen",": Zod, Valibot oder ArkType über Standard JSON Schema für Tools, Workflow-Schritte und strukturierte Ausgabe.",{"type":132,"level":133,"id":98,"text":99},{"type":120,"content":210},[211,212,215,216,219,220,223,224,144,227,144,230,219,233,236,237,242],"Zwei Primitive tragen die meiste Last. Ein ",{"tag":127,"children":213},[214],"Agent"," bindet Modell, Instruktionen und Tools und iteriert, bis das Modell eine endgültige Antwort oder eine Stop-Bedingung liefert. Ein Workflow aus ",{"tag":127,"children":217},[218],"createStep"," und ",{"tag":127,"children":221},[222],"createWorkflow"," mit ",{"tag":127,"children":225},[226],".then()",{"tag":127,"children":228},[229],".branch()",{"tag":127,"children":231},[232],".parallel()",{"tag":127,"children":234},[235],".commit()"," ist der deterministische Pfad für Prozesse mit bekannter Reihenfolge. Die Dokumentation ist eindeutig: Für eine definierte Pipeline ist der zweite Weg richtig, für offene Aufgaben der erste, was der Aufteilung in ",{"tag":238,"to":239,"children":240},"link","\u002Fblog\u002Fagent-loop-explained",[241],"den erklären Agent Loop"," entspricht.",{"type":244,"attrs":245,"inner":249,"caption":250},"diagram",{"viewBox":246,"role":247,"aria-labelledby":248},"0 0 720 356","img","ma-t ma-d","\u003Ctitle id=\"ma-t\">Mastra runtime: agent path, workflow path, observability\u003C\u002Ftitle>\u003Cdesc id=\"ma-d\">A request reaches an agent, which calls a tool and a model in a loop. Below it sit workflow steps, memory and storage. Every run is traced into spans, logs and metrics that go to Mastra storage or to OpenTelemetry-compatible backends.\u003C\u002Fdesc>\u003Ctext x=\"20\" y=\"26\" class=\"d-title\">Mastra runtime\u003C\u002Ftext>\u003Ctext x=\"700\" y=\"26\" text-anchor=\"end\" class=\"d-label\">@mastra\u002Fcore 1.75.0\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"58\" class=\"d-label\">AGENT PATH\u003C\u002Ftext>\u003Crect x=\"20\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"80\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Request\u003C\u002Ftext>\u003Ctext x=\"80\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">text or event\u003C\u002Ftext>\u003Cpath d=\"M140 102 H172\" class=\"d-line\" \u002F>\u003Cpath d=\"M180 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"180\" y=\"70\" width=\"130\" height=\"64\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"245\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Agent\u003C\u002Ftext>\u003Ctext x=\"245\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">model, tools\u003C\u002Ftext>\u003Cpath d=\"M310 102 H342\" class=\"d-line\" \u002F>\u003Cpath d=\"M350 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"350\" y=\"70\" width=\"130\" height=\"64\" rx=\"10\" class=\"d-sky\" \u002F>\u003Ctext x=\"415\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Tool\u003C\u002Ftext>\u003Ctext x=\"415\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">createTool, zod\u003C\u002Ftext>\u003Cpath d=\"M480 102 H512\" class=\"d-line\" \u002F>\u003Cpath d=\"M520 102 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"520\" y=\"70\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"580\" y=\"98\" text-anchor=\"middle\" class=\"d-text\">Model\u003C\u002Ftext>\u003Ctext x=\"580\" y=\"119\" text-anchor=\"middle\" class=\"d-small\">provider\u002Fmodel\u003C\u002Ftext>\u003Cpath d=\"M415 134 C415 152 245 152 245 136\" class=\"d-line-accent d-dash\" \u002F>\u003Cpath d=\"M245 134 l-6 10 h12 z\" class=\"d-head-accent\" \u002F>\u003Ctext x=\"330\" y=\"162\" text-anchor=\"middle\" class=\"d-small\">observe and repeat\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"186\" class=\"d-label\">WORKFLOW AND STATE\u003C\u002Ftext>\u003Crect x=\"200\" y=\"198\" width=\"170\" height=\"64\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"285\" y=\"226\" text-anchor=\"middle\" class=\"d-text\">Workflow steps\u003C\u002Ftext>\u003Ctext x=\"285\" y=\"247\" text-anchor=\"middle\" class=\"d-small\">then, branch, parallel\u003C\u002Ftext>\u003Cpath d=\"M370 230 H392\" class=\"d-line\" \u002F>\u003Cpath d=\"M400 230 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"400\" y=\"198\" width=\"150\" height=\"64\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"475\" y=\"226\" text-anchor=\"middle\" class=\"d-text\">Memory\u003C\u002Ftext>\u003Ctext x=\"475\" y=\"247\" text-anchor=\"middle\" class=\"d-small\">threads, observations\u003C\u002Ftext>\u003Cpath d=\"M550 230 H572\" class=\"d-line\" \u002F>\u003Cpath d=\"M580 230 l-9 -5 v10 z\" class=\"d-head\" \u002F>\u003Crect x=\"580\" y=\"198\" width=\"120\" height=\"64\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"640\" y=\"226\" text-anchor=\"middle\" class=\"d-text\">Storage\u003C\u002Ftext>\u003Ctext x=\"640\" y=\"247\" text-anchor=\"middle\" class=\"d-small\">LibSQL, Postgres\u003C\u002Ftext>\u003Cpath d=\"M160 134 V286\" class=\"d-line d-dash\" \u002F>\u003Cpath d=\"M160 296 l-5 -9 h10 z\" class=\"d-head\" \u002F>\u003Ctext x=\"172\" y=\"212\" class=\"d-small\">traced\u003C\u002Ftext>\u003Ctext x=\"20\" y=\"288\" class=\"d-label\">OBSERVABILITY\u003C\u002Ftext>\u003Crect x=\"20\" y=\"296\" width=\"680\" height=\"44\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"360\" y=\"323\" text-anchor=\"middle\" class=\"d-text\">Spans, logs, metrics, scorers to storage, Langfuse, Datadog, Arize\u003C\u002Ftext>",[251],"Die Mastra-Laufzeit: ein Agent loopt über Tools und Modell, darunter liegen Workflow-Schritte und Memory, und jeder Lauf wird getract.",{"type":120,"content":253},[254,255,259],"Um diese beiden Primitive herum liegen die Teile, die einen Agenten produktionsfähig halten. Memory zerfällt in Nachrichtenhistorie, Working Memory, semantische Erinnerung und Observational Memory, bei der Hintergrund-Agenten ältere Turns zu Beobachtungen komprimieren, bevor das Kontextfenster voll ist. Storage ist austauschbar über LibSQL, Postgres, ClickHouse, MongoDB, MSSQL und DuckDB, und dieselbe Engine trägt Suspend und Resume bei Workflows. Ein Workflow kann damit auf eine menschliche Freigabe warten und Stunden später weiterlaufen, wie in ",{"tag":238,"to":256,"children":257},"\u002Fblog\u002Fhuman-in-the-loop-ai-agents",[258],"Human-in-the-the-loop-Mustern"," beschrieben.",{"type":132,"level":261,"id":262,"text":263},3,"mcp-support","MCP-Unterstützung ist das Unterscheidungsmerkmal",{"type":120,"content":265},[266,267,270,271,274,275,278],"Mastra ist eines der wenigen Frameworks, die MCP sowohl konsumieren als auch bereitstellen. ",{"tag":127,"children":268},[269],"MCPClient"," verbindet sich mit Servern über stdio oder Streamable HTTP, ",{"tag":127,"children":272},[273],"MCPServer"," stellt Mastra-Agenten, Tools, Workflows, Prompts und Ressourcen anderen Systemen zur Verfügung. Registrierte Server laufen unter ",{"tag":127,"children":276},[277],"\u002Fapi\u002Fmcp\u002F:serverId\u002Fmcp"," und sprechen die Revision 2026-07-28 des Protokolls, sodass ein Team mit internen Tools hinter einem MCP-Server den Agenten anschließen kann, ohne eine Integrationsschicht zu bauen.",{"type":127,"code":280},"import { Agent } from '@mastra\u002Fcore\u002Fagent'\nimport { Mastra } from '@mastra\u002Fcore\u002Fmastra'\nimport { MCPServer, MCPClient } from '@mastra\u002Fmcp'\n\n\u002F\u002F Expose Mastra primitives to other agents and systems\nconst mcpServer = new MCPServer({\n  id: 'support-mcp',\n  name: 'Support tools',\n  version: '1.0.0',\n  agents: { supportAgent },\n  tools: { refundTool },\n  workflows: { triage },\n})\n\n\u002F\u002F Consume remote MCP tools, gating the destructive ones\nconst client = new MCPClient({\n  servers: {\n    jira: {\n      url: new URL('https:\u002F\u002Fjira.example.com\u002Fmcp'),\n      requireToolApproval: ({ toolName }) => toolName.startsWith('delete_'),\n    },\n  },\n})\n\nconst assistant = new Agent({\n  id: 'assistant',\n  name: 'Assistant',\n  instructions: 'Answer from the available tools and cite the source.',\n  model: 'anthropic\u002Fclaude-sonnet-4-6',\n  tools: await client.listTools(),\n})\n\nexport const mastra = new Mastra({\n  agents: { assistant },\n  mcpServers: { mcpServer },\n})",{"type":120,"content":282},[283,284,287,288,291,292,295,296,300],"Die Sicherheitsdefaults sind besser als der Durchschnitt. ",{"tag":127,"children":285},[286],"requireToolApproval"," sperrt Tools nach Name oder Argumenten, stdio-Subprozesse erben nur eine kuratierte Umgebungsliste, sofern nicht ",{"tag":127,"children":289},[290],"inheritDefaultEnv"," gesetzt ist, ",{"tag":127,"children":293},[294],"allowedHosts"," begrenzt ausgehende HTTP-Hosts, und die Doku rät, Annotations von Servern, die man nicht kontrolliert, als nicht vertrauenswürdige Hinweise zu behandeln. Tool-Ergebnisse bleiben unvertrauenswürdige Modelleingaben, weshalb die Guardrail-Prozessoren und nicht die MCP-Schicht diesen Inhalt bereinigen müssen, wie in ",{"tag":238,"to":297,"children":298},"\u002Fblog\u002Fprompt-injection-lethal-trifecta-patterns",[299],"den Injektionsmustern",".",{"type":132,"level":133,"id":101,"text":102},{"type":120,"content":303},[304],"npm create mastra@latest erzeugt ein Projekt mit dem src\u002Fmastra-Layout, einem Dev-Server, Studio und einem Deployer. Die kleinste nützliche Oberfläche ist klein: ein Tool, ein Agent, eine Registry.",{"type":127,"code":306},"\u002F\u002F src\u002Fmastra\u002Ftools\u002Fstock-price.ts\nimport { createTool } from '@mastra\u002Fcore\u002Ftools'\nimport { z } from 'zod'\n\nexport const stockPrice = createTool({\n  id: 'stock-price',\n  description: 'Latest price for a ticker symbol',\n  inputSchema: z.object({ symbol: z.string().describe('Ticker, for example INGY') }),\n  outputSchema: z.object({ symbol: z.string(), price: z.number() }),\n  execute: async ({ symbol }) => ({ symbol, price: await quote(symbol) }),\n})\n\n\u002F\u002F src\u002Fmastra\u002Findex.ts\nimport { Mastra } from '@mastra\u002Fcore'\nimport { Agent } from '@mastra\u002Fcore\u002Fagent'\nimport { LibSQLStore } from '@mastra\u002Flibsql'\nimport { stockPrice } from '.\u002Ftools\u002Fstock-price'\n\nexport const agent = new Agent({\n  id: 'research',\n  name: 'Research agent',\n  instructions: 'Look prices up with the tool. Never guess a number.',\n  model: 'anthropic\u002Fclaude-sonnet-4-6',\n  tools: { stockPrice },\n})\n\nexport const mastra = new Mastra({\n  agents: { agent },\n  storage: new LibSQLStore({ id: 'mastra', url: 'file:.\u002Fmastra.db' }),\n})\n\n\u002F\u002F run.ts - Node 22.18 and later run TypeScript directly\nconst answer = await mastra.getAgentById('research').generate('INGY price')\nconsole.log(answer.text, answer.usage)",{"type":120,"content":308},[309,310,313,314,316,317,320],"Zwei Details überraschen Neulinge. Agenten besser über ",{"tag":127,"children":311},[312],"mastra.getAgentById()"," auflösen statt direkt zu importieren, denn ein direkter Import läuft zwar, verfehlt aber Storage, Logger und Telemetrie der Instanz, und solche Läufe fehlen in den Traces. Und der Modell-String ist das Router-Format ",{"tag":127,"children":315},[129],", gelesen aus einer Umgebungsvariablen wie ",{"tag":127,"children":318},[319],"ANTHROPIC_API_KEY",", und kein Provider-Objekt.",{"type":322,"variant":323,"title":324,"body":325},"callout","warn","Erst die Version pinnen",[326],[327],"In einem einzigen Monat erschienen 99 Releases von @mastra\u002Fcore. Ein ungepinter Bereich in der package.json ist ein geplanter Ausfall. Also exakte Versionen pinnen, die Evals beim Upgrade laufen lassen und einen Renovate- oder Dependabot-PR-Flow nutzen, statt zu mergen, was das Register gerade ausliefert.",{"type":132,"level":133,"id":104,"text":105},{"type":120,"content":330},[331,332,336],"Hier liegt der Teil, der das Framework begründet und nicht der Agenten-Loop. Jeder Agentenlauf, jeder Workflow-Schritt, jeder Tool- und Modellaufruf erzeugt einen Span, und Exporter schreiben diese Spans in den Mastra-Storage oder in jedes OpenTelemetry-kompatible Backend, mit benannten Integrationen für Langfuse, Arize Phoenix und Datadog. Metriken werden ohne zusätzliche Instrumentierung aus den Spans abgeleitet, und Studio ergänzt Graphansicht, Time Travel zum erneuten Abspielen eines einzelnen Schritts und einen Experiment-Tab. Teams, die das mit ",{"tag":238,"to":333,"children":334},"\u002Fblog\u002Fagent-observability-opentelemetry",[335],"OpenTelemetry-Tracing"," von Hand gebaut haben, erkennen die Form wieder.",{"type":169,"ordered":170,"items":338},[339,344,349,354],[340,343],{"tag":174,"children":341},[342],"Tracing und Logging",": Spans plus strukturierte Logs, korreliert über Trace- und Span-ID, sodass ein Logeintrag direkt zum Lauf führt, der ihn erzeugt hat.",[345,348],{"tag":174,"children":346},[347],"Metriken",": Tokenzahlen, Latenz und Kostenschätzungen beim Schließen eines Spans; die Aggregation braucht einen analytisch fähigen Store wie DuckDB, ClickHouse oder Postgres.",[350,353],{"tag":174,"children":351},[352],"Scorer",": vorgefertigte und eigene Scorer an einem Agenten oder an einem einzelnen Workflow-Schritt, mit deterministischer Stichprobe pro Trace, damit Scores über Läufe hinweg vergleichbar bleiben.",[355,358],{"tag":174,"children":356},[357],"Guardrails als Prozessoren",": Prompt-Injection-Erkennung, Moderation, PII-Maskierung, System-Prompt-Scrubbing und ein Kostenlimit, jeweils mit block-, redact- oder warn-Strategie.",{"type":120,"content":360},[361],"Eine Kante lohnt sich vor dem ersten CI-Lauf zu kennen. Scorer, die an einem Agenten oder Schritt hängen, registrieren sich selbst; Scorer, die direkt an runEvals() oder die Quick Checks übergeben werden, müssen zusätzlich auf der Mastra-Instanz registriert sein, sonst schlägt jeder Speichervorgang mit Scorer with id \u003Cid> not found fehl und die Scores erreichen den Store nie. Die Doku räumt ein, dass die Ergebnisse identisch sind, und genau das macht den Fehler irritierend.",{"type":132,"level":133,"id":107,"text":108},{"type":120,"content":364},[365],"Das Framework ist kostenlos, und an der gehosteten Plattform verdient der Anbieter sein Geld. Die Preisseite nennt drei Stufen, und der Zähler ist der interessante Teil: Observability-Events, CPU-Stunden, Datenausgang und ein Model Gateway, das 5,5 Prozent auf die Marktpreise der Token legt.",{"type":367,"head":368,"rows":377},"table",[369,371,373,375],[370],"Stufe",[372],"Preis",[374],"Observability",[376],"Rechenzeit und Aufbewahrung",[378,387,396],[379,381,383,385],[380],"Starter",[382],"0 USD pro Monat",[384],"100k Events, dann 10 USD je 100k",[386],"24 CPU-Stunden, dann 0,35 USD pro Stunde; 15 Tage Aufbewahrung",[388,390,392,394],[389],"Teams",[391],"250 USD pro Monat",[393],"1 Mio. Events, dann 8 USD je 100k",[395],"250 CPU-Stunden, dann 0,25 USD pro Stunde; 6 Monate Aufbewahrung",[397,399,401,403],[398],"Enterprise",[400],"Individuell",[402],"Individuelles Volumen und Aufbewahrung",[404],"RBAC, Audit-Logs, Verfügbarkeits-SLAs, Betrieb in eigener Cloud",{"type":120,"content":406},[407],"Zwei Posten verdienen Aufmerksamkeit. Eine dauerhaft laufende Instanz kostet 100 USD pro Projekt zusätzlich zur Stufe, und das Gateway berechnet Markpreis plus 5,5 Prozent auf Input- und Output-Token mit eigenem Schlüssel. Memory wird noch einmal abgerechnet, mit 10 USD pro Million Token über den ersten 100.000 beziehungsweise 1 Mio. hinaus, sodass ein gesprächiger Agent mit langem Kontext in drei Zählern auftaucht.",{"type":322,"variant":323,"title":409,"body":410},"Die Lizenzteilung sollte zweimal gelesen werden",[411],[412],"Alles außerhalb von ee\u002F ist Apache-2.0. Innerhalb von ee\u002F - derzeit @mastra\u002Fcore\u002Fauth\u002Fee, @mastra\u002Fcore\u002Fagent-builder\u002Fee und @mastra\u002Feditor\u002Fee - ist der Code quelloffen zugänglich, und die Mastra Enterprise Edition License v2.0, gültig seit 22. September 2026, verlangt für den Produktivbetrieb sowohl einen unterzeichneten Vertrag als auch einen gültigen Lizenzschlüssel. Betrieb ohne beides ist laut Lizenz nicht lizenzierte Nutzung. Authentifizierung ist kein Randfeature, diese Grenze also prüfen, bevor eine Architektur davon abhängt.",{"type":132,"level":133,"id":110,"text":111},{"type":120,"content":415},[416],"Die Schwächen zuerst. Das Release-Tempo ist das operative: 301 Releases in 90 Tagen bedeuten, dass sich die API des Frameworks unter einem verschiebt und das Lesen der Release Notes zur Arbeit gehört. Zweitens ist die Breite zweischneidig. Das Repository liefert Harness, Workspaces, Channels, Voice, Browser-Steuerung, Code Mode und Agent Factories mit, ein kleines Team zahlt also an Review-Fläche für Funktionen, die es nicht nutzt. Drittens ist Observational Memory nicht kostenlos, weil Hintergrund-Agenten die Historie auf jedem Turn komprimieren. Viertens sind gerade die Studio-Extras, Time Travel, Experimente und der Evaluate-Tab, der Grund, auf der bezahlten Stufe zu bleiben, und die fehlen, wenn die Traces an Langfuse gehen und alles andere selbst betrieben wird.",{"type":367,"head":418,"rows":426},[419,421,422,424],[420],"Kriterium",[24],[423],"LangGraph.js",[425],"Vercel AI SDK",[427,435,444,453,462],[428,429,431,433],[176],[430],"Apache-2.0-Kern, Enterprise in ee\u002F",[432],"MIT",[434],"Apache-2.0",[436,438,440,442],[437],"Abgedeckter Umfang",[439],"Agenten, Workflows, Memory, MCP, Evals, Plattform",[441],"Graph-Laufzeit, dauerhafte Ausführung",[443],"Modellaufrufe, Streaming, UI-Bausteine",[445,447,449,451],[446],"Evals und Traces",[448],"integriert, plus gehostete Plattform",[450],"LangSmith ist separat und kostenpflichtig",[452],"eigener Anbieter",[454,456,458,460],[455],"Passung",[457],"Produktteams, die Agenten in Node ausliefern",[459],"Python-orientierte Shops mit dauerhaften Graphen",[461],"Apps, die im Wesentlichen Modellausgaben streamen",[463,465,467,469],[464],"Wöchentliche Downloads, 4. Okt. 2026",[466],"2,23 Mio. (@mastra\u002Fcore)",[468],"4,55 Mio. (@langchain\u002Flanggraph)",[470],"34,5 Mio. (ai)",{"type":120,"content":472},[473],"Gegenüber dem OpenAI Agents SDK, das schlanker ist, unter MIT steht und nah an der Responses API bleibt, ist Mastra die portablere und zugleich schwerere Option. Die ehrliche Zusammenfassung: Mastra kauft Breite und eine echte Evaluationsschleife und zahlt dafür mit der Zahl der Abhängigkeiten, denn @mastra\u002Fcore allein zieht 30 direkte Abhängigkeiten, und mit dem Tempo, in dem sich diese Abhängigkeit ändert.",{"type":132,"level":133,"id":113,"text":114},{"type":120,"content":476},[477],"Mastra ist ein gut geführtes, ungewöhnlich vollständiges Framework mit einem klaren Schwerpunkt: Die Schleife zwischen Code, Traces und Evals ist besser als alles, was ein TypeScript-Team sonst zusammensetzen müsste. Der Haken ist, dass es ein bewegliches Ziel mit kommerzieller Schicht ist, und ausgerechnet die beiden Punkte, die Käufer am meisten interessieren, stabile APIs und eine unveränderte Lizenz, sind die schwächsten.",{"type":169,"ordered":479,"items":480},true,[481,483,485,487,489],[482],"Nehmen, wenn der Agent in einer bestehenden Node- oder Next.js-Anwendung ausgeliefert wird und das Team Tracing, Evals und eine Workflow-Engine will, ohne sechs Pakete zusammenzusetzen.",[484],"Nehmen, wenn menschliche Freigabe, lange unterbrochene Workflows und MCP-Toolserver Anforderungen sind und keine Kür.",[486],"Nehmen mit gepinnten Versionen und einer Eval-Suite in der CI, weil sonst das Release-Takt den Upgrade-Plan bestimmt.",[488],"Weglassen, wenn der Modellanbieter feststeht und die Oberfläche ein einzelner Chat-Endpunkt ist: Das Vercel AI SDK oder das OpenAI Agents SDK ist leichter zu durchdenken.",[490],"Weglassen, wenn der Stack Python ist oder wenn die ee\u002F-Grenze durch etwas läuft, wovon das Produkt abhängt.",{"type":322,"variant":492,"title":493,"body":494},"note","In einem Satz",[495],[496],"Mastra ist das am besten integrierte TypeScript-Agentenframework auf dem Markt, vorausgesetzt, man behandelt es als Plattform mit offenem Quellcode-Kern statt als stabile Bibliothek und akzeptiert, dass die gehostete Stufe, nicht der Code, das Geschäftsmodell des Anbieters ist.",{"type":132,"level":133,"id":116,"text":117},{"type":169,"ordered":479,"items":499},[500,504,507,510,513,516,519,522,525,528,531],[501],{"tag":502,"href":32,"children":503},"a",[31],[505],{"tag":502,"href":35,"children":506},[34],[508],{"tag":502,"href":38,"children":509},[37],[511],{"tag":502,"href":41,"children":512},[40],[514],{"tag":502,"href":44,"children":515},[43],[517],{"tag":502,"href":47,"children":518},[46],[520],{"tag":502,"href":50,"children":521},[49],[523],{"tag":502,"href":53,"children":524},[52],[526],{"tag":502,"href":56,"children":527},[55],[529],{"tag":502,"href":28,"children":530},[58],[532],{"tag":502,"href":61,"children":533},[60],[535,598,648,713],{"slug":536,"published":537,"minutes":538,"category":7,"tags":539,"keywords":543,"about":550,"sources":554,"cover":591,"og":592,"expertise":64,"locales":593,"lang":67,"title":594,"description":595,"coverAlt":596,"url":557,"pricing":432,"kind":597},"mcp-reference-servers","2026-09-25",9,[12,540,541,542],"Reference servers","Tool protocol","Server SDKs",[544,545,546,547,548,549],"mcp reference servers","modelcontextprotocol servers github","write an mcp server","mcp server examples","mcp server sdk","mcp server security",[551],{"name":552,"url":553},"Model Context Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_Context_Protocol",[555,558,561,564,567,570,573,576,579,582,585,588],{"title":556,"url":557},"MCP reference servers repository","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers",{"title":559,"url":560},"Repository README and server list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FREADME.md",{"title":562,"url":563},"Security policy","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FSECURITY.md",{"title":565,"url":566},"Release process and trusted publishing","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002FRELEASING.md",{"title":568,"url":569},"Filesystem server README","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Ffilesystem\u002FREADME.md",{"title":571,"url":572},"Everything server feature list","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers\u002Fblob\u002Fmain\u002Fsrc\u002Feverything\u002Fdocs\u002Ffeatures.md",{"title":574,"url":575},"MCP Registry","https:\u002F\u002Fregistry.modelcontextprotocol.io\u002F",{"title":577,"url":578},"Archived reference servers","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fservers-archived",{"title":580,"url":581},"Model Context Protocol documentation","https:\u002F\u002Fmodelcontextprotocol.io\u002F",{"title":583,"url":584},"TypeScript MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Ftypescript-sdk",{"title":586,"url":587},"Python MCP SDK","https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fpython-sdk",{"title":589,"url":590},"FastMCP on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Ffastmcp\u002F","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmcp-reference-servers\u002Fog.jpg",[66,67,68],"MCP-Referenzserver: was sie zeigen und was sie auslassen","Ein Review von modelcontextprotocol\u002Fservers: sieben Referenzserver, was jeder einzelne lehrt, die SDK-Versionen dahinter und warum keiner in die Produktion gehört.","Sieben Referenzserver, die von einem einzigen MCP-Client über Stdio ausgefächert werden","Protocol tooling",{"slug":599,"published":600,"minutes":601,"category":7,"tags":602,"keywords":608,"about":616,"sources":623,"cover":640,"og":641,"expertise":64,"locales":642,"lang":67,"title":643,"description":644,"coverAlt":645,"url":646,"pricing":647,"kind":603},"aider","2026-09-23",10,[603,604,605,606,607],"Coding agent","Terminal","Git workflow","BYO key","Open source",[599,609,610,611,612,613,614,615],"aider vs claude code","aider polyglot benchmark","ai pair programming terminal","aider leaderboard","open source coding agent","aider architect mode","aider install",[617,620],{"name":618,"url":619},"Aider","https:\u002F\u002Faider.chat\u002F",{"name":621,"url":622},"Aider on GitHub","https:\u002F\u002Fgithub.com\u002FAider-AI\u002Faider",[624,626,629,632,635,637],{"title":625,"url":619},"Aider website",{"title":627,"url":628},"Aider LLM leaderboards","https:\u002F\u002Faider.chat\u002Fdocs\u002Fleaderboards\u002F",{"title":630,"url":631},"Aider linting and testing","https:\u002F\u002Faider.chat\u002Fdocs\u002Fusage\u002Flint-test.html",{"title":633,"url":634},"Aider token limits","https:\u002F\u002Faider.chat\u002Fdocs\u002Ftroubleshooting\u002Ftoken-limits.html",{"title":636,"url":622},"Aider repository on GitHub",{"title":638,"url":639},"aider-chat on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Faider-chat\u002F","\u002Fimages\u002Fblog\u002Faider\u002Fcover.webp","\u002Fimages\u002Fblog\u002Faider\u002Fog.jpg",[66,67,68],"Aider im Test: Pair Programming im Terminal, git zuerst","Ein Test von Aider 0.86.2, ein Apache-2.0-Terminal-Pair-Programmierer mit ehrlichem Benchmark — und ohne Release seit acht Monaten.","Coverbild für den Aider-Test: eine Terminalsitzung, die aus einer einzigen Anfrage eine Reihe von git Commits macht","https:\u002F\u002Faider.chat","Free · BYO API key",{"slug":649,"published":650,"minutes":601,"category":7,"tags":651,"keywords":656,"about":665,"sources":675,"cover":706,"og":707,"expertise":64,"locales":708,"lang":67,"title":709,"description":710,"coverAlt":711,"url":678,"pricing":712,"kind":10},"openai-agents-sdk","2026-09-11",[652,653,654,12,655],"Agent runtime","Tracing","Guardrails","Python",[657,658,659,660,661,662,663,664],"openai agents sdk","openai agents sdk vs langgraph","python agent framework comparison","openai agents sdk guardrails","agent run tracing tool calls","openai agents sdk human in the loop","openai-agents pypi","agents sdk vs responses api",[666,669,672],{"name":667,"url":668},"Model context protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FModel_context_protocol",{"name":670,"url":671},"Software framework","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_framework",{"name":673,"url":674},"Agentic AI","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAgentic_AI",[676,679,682,685,688,691,694,697,700,703],{"title":677,"url":678},"OpenAI Agents SDK documentation: Intro, and Agents SDK or Responses API","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F",{"title":680,"url":681},"OpenAI Agents SDK documentation: Running agents","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Frunning_agents\u002F",{"title":683,"url":684},"OpenAI Agents SDK documentation: Guardrails","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fguardrails\u002F",{"title":686,"url":687},"OpenAI Agents SDK documentation: Human-in-the-loop","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fhuman_in_the_loop\u002F",{"title":689,"url":690},"OpenAI Agents SDK documentation: Tracing","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Ftracing\u002F",{"title":692,"url":693},"OpenAI Agents SDK documentation: Configuration","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002Fconfig\u002F",{"title":695,"url":696},"openai-agents 0.23.1 on PyPI, release history and licence","https:\u002F\u002Fpypi.org\u002Fproject\u002Fopenai-agents\u002F",{"title":698,"url":699},"OpenAI: The next evolution of the Agents SDK (15 April 2026)","https:\u002F\u002Fopenai.com\u002Findex\u002Fthe-next-evolution-of-the-agents-sdk\u002F",{"title":701,"url":702},"OpenAI API documentation: Agents, comparison of the three runtimes","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents",{"title":704,"url":705},"Arize: AI agent frameworks compared (1 October 2026)","https:\u002F\u002Farize.com\u002Fai-agents\u002Fagent-frameworks\u002F","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenai-agents-sdk\u002Fog.jpg",[66,67,68],"OpenAI Agents SDK: eine schlanke Agent-Runtime mit scharfen Kanten","Eine Bewertung des OpenAI Agents SDK: Runner-Schleife, Tracing, Guardrails und Approvals, plus was Release-Tempo und die Responses-only-Funktionen kosten.","Diagramm der Runner-Schleife im Agents SDK: Eingabe, Agent, Modellaufruf, Endausgabe, Guardrails und Tool-Aufrufe, die zurück in die Eingabe laufen","MIT · API pay per token",{"slug":714,"published":715,"minutes":538,"category":7,"tags":716,"keywords":721,"about":728,"sources":738,"cover":759,"og":760,"expertise":64,"locales":761,"lang":67,"title":762,"description":763,"coverAlt":764,"url":765,"pricing":766,"kind":603},"openhands","2026-09-09",[603,717,718,719,720],"Sandboxed execution","Automations","Self-hosted","MIT licence",[714,722,723,724,725,726,613,727],"openhands self-host","open hands coding agent","openhands vs claude code","agent canvas","openhands docker sandbox","openhands cloud pricing",[729,732,735],{"name":730,"url":731},"OpenHands","https:\u002F\u002Fwww.openhands.dev",{"name":733,"url":734},"OpenHands on GitHub","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands",{"name":736,"url":737},"Intelligent agent","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIntelligent_agent",[739,741,744,747,750,753,756],{"title":740,"url":734},"OpenHands README",{"title":742,"url":743},"OpenHands licence (MIT)","https:\u002F\u002Fgithub.com\u002FOpenHands\u002FOpenHands\u002Fblob\u002Fmain\u002FLICENSE",{"title":745,"url":746},"Agent Canvas 1.25.0 release notes","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fagent-canvas\u002Frelease-notes\u002Fv1.25.0.md",{"title":748,"url":749},"OpenHands sandbox overview","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Fsandboxes\u002Foverview.md",{"title":751,"url":752},"OpenHands quick start","https:\u002F\u002Fdocs.openhands.dev\u002Fopenhands\u002Fusage\u002Finstallation",{"title":754,"url":755},"OpenHands pricing","https:\u002F\u002Fwww.openhands.dev\u002Fpricing",{"title":757,"url":758},"Introducing the OpenHands Index","https:\u002F\u002Fwww.openhands.dev\u002Fblog\u002Fintroducing-the-openhands-index","\u002Fimages\u002Fblog\u002Fopenhands\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fopenhands\u002Fog.jpg",[66,67,68],"OpenHands: der Open-Source-Coding-Agent im Eigenbetrieb","OpenHands 1.25.0 ist eine MIT-lizenzierte Coding-Agent-Plattform mit Web-Canvas, CLI, sandboxierter Ausführung und geplanten Automatisierungen. Ein Review der Stärken und der Betriebskosten.","Covermotiv zum OpenHands-Review: eine Schleife von Aufgabe über Agent und Sandbox zurück","https:\u002F\u002Fgithub.com\u002FAll-Hands-AI\u002FOpenHands","Free · self-host",1791383550698]