{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/oJT97W8mIJvVr5VHaLKP/rWmXYY8b3QgjZk4XV23b/Px5dOvWXF-2.js"],
  "sourcesContent": ["import{jsx as e,jsxs as t}from\"react/jsx-runtime\";import{ComponentPresetsConsumer as n,Link as o}from\"framer\";import{motion as i}from\"framer-motion\";import*as a from\"react\";import{Youtube as r}from\"https://framerusercontent.com/modules/NEd4VmDdsxM3StIUbddO/4sbLnuatuUfmOTwFGSJM/YouTube.js\";import s from\"https://framerusercontent.com/modules/pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js\";export const richText=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"Our TypeScript SDK was taking 20-30 seconds to initialize, creating friction for developers every time they\u2019d call a Typescript module. Which they\u2019d do hundreds of times during development. Here's how we cut that time in half.\"}),/*#__PURE__*/e(\"p\",{children:\"BEFORE\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"112\",src:\"https://framerusercontent.com/images/PDTVHGgD9c8YdW5Qu5uAquU70.png\",srcSet:\"https://framerusercontent.com/images/PDTVHGgD9c8YdW5Qu5uAquU70.png?scale-down-to=512 512w,https://framerusercontent.com/images/PDTVHGgD9c8YdW5Qu5uAquU70.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/PDTVHGgD9c8YdW5Qu5uAquU70.png 1800w\",style:{aspectRatio:\"1800 / 225\"},width:\"900\"}),/*#__PURE__*/e(\"p\",{children:\"AFTER\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"111\",src:\"https://framerusercontent.com/images/FUbAD8Xrd38aMjUcZy2CXBHDBU.png\",srcSet:\"https://framerusercontent.com/images/FUbAD8Xrd38aMjUcZy2CXBHDBU.png?scale-down-to=512 512w,https://framerusercontent.com/images/FUbAD8Xrd38aMjUcZy2CXBHDBU.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/FUbAD8Xrd38aMjUcZy2CXBHDBU.png 1794w\",style:{aspectRatio:\"1794 / 222\"},width:\"897\"}),/*#__PURE__*/e(\"h2\",{children:\"Background\"}),/*#__PURE__*/e(\"p\",{children:\"The SDK has two parts: a client library that lets your code call the Dagger API, and tooling that lets you publish your own Dagger\u202FFunctions.\"}),/*#__PURE__*/t(\"p\",{children:[\"Every Dagger Engine build shipped with the full TypeScript SDK, and \",/*#__PURE__*/e(\"code\",{children:\"dagger init\"}),\" or \",/*#__PURE__*/e(\"code\",{children:\"dagger develop\"}),\" copied it into your module\u2014the folder with your pipeline code and a \",/*#__PURE__*/e(\"code\",{children:\"dagger.json\"}),\" manifest. On each \",/*#__PURE__*/e(\"code\",{children:\"dagger call\"}),\" the engine still had to:\"]}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Build a client library so the module can talk to the engine\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Install the SDK\u2019s packages\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Install the module\u2019s packages\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Run one helper script: if you gave a function name, run it; otherwise, register all functions for later use.\"})})]}),/*#__PURE__*/e(\"p\",{children:\"All of this ran before your code, adding 20\u201330\u202Fseconds to every cold start.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"692\",src:\"https://framerusercontent.com/images/99D3px3qk3L6jysOTQOGAUk2Y.png\",srcSet:\"https://framerusercontent.com/images/99D3px3qk3L6jysOTQOGAUk2Y.png?scale-down-to=512 512w,https://framerusercontent.com/images/99D3px3qk3L6jysOTQOGAUk2Y.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/99D3px3qk3L6jysOTQOGAUk2Y.png 1600w\",style:{aspectRatio:\"1600 / 1384\"},width:\"800\"}),/*#__PURE__*/e(\"h2\",{children:\"Performance Challenges\"}),/*#__PURE__*/e(\"p\",{children:\"In the first version, we copied the SDK\u2019s code into each user module as a sub\u2011package. That meant both the SDK and the module shared the same dependency list. If the SDK needed, say, GraphQL\u2011client\u202FvX but the module pinned vY, the package manager would flag the mismatch and fail during installation\u2014or worse, pick a version that let the build succeed and then crash at runtime.\"}),/*#__PURE__*/e(\"p\",{children:\"The TypeScript SDK also needed to support multiple runtimes (Deno, Bun, and Node.js) and multiple package managers (npm, pnpm, and multiple versions of yarn). Each runtime and package manager had its own specific behaviors and quirks:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Config drift:\"}),\" Bun and Deno\u2019s configuration files differed from Node.js, which meant additional custom scripting to get the configuration right for each runtime. We also had to enable various experimental features to make the SDK \u201Cjust work\u201D with Deno.\\xa0\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Install steps:\"}),\" Package manager installation varied. For example, installing yarn required also installing Corepack, while pnpm required an extra workspace file. This added complexity and code to maintain compatibility between different package managers.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Speed:\"}),\" Package manager performance was also variable. For example, pnpm was much faster (~1.5x) at downloading dependencies than npm or yarn, which resulted in a correspondingly better user experience.\\xa0\"]})})]}),/*#__PURE__*/t(\"p\",{children:[\"The performance issue, in particular, was the main source of developer dissatisfaction. During active module development, users call their Dagger modules tens or hundreds of times. Waiting 20\u201330 seconds for each call made it a frustrating experience, to say the least. \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/features/caching/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Caching\"})}),\" helps but not when it\u2019s invalidated or can\u2019t be reused, such as for ephemeral CI environments.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Promise in Bundling\"}),/*#__PURE__*/e(\"p\",{children:\"When we started looking into this issue, our first step was to benchmark the TypeScript and Go SDKs. It was immediately clear that the Go SDK was much faster, and most of the slowdown could be traced to dependency installation and management.\\xa0\"}),/*#__PURE__*/t(\"p\",{children:[\"We tried to fix this by changing the tooling: switching from npm to yarn, installing only production dependencies, using the Dagger cache more efficiently, and reorganizing the SDK initialization steps. Although we saw a modest \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/pull/7096#issuecomment-2124627475\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"performance improvement\"})}),\" of 2\u20133 seconds, it was inconsistent and only visible in a few situations. It wasn't enough.\"]}),/*#__PURE__*/t(\"p\",{children:[\"The next and more meaningful improvement came from \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/pull/9526\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"bundling tsx\"})}),\"\u2014the TypeScript command-line tool\u2014in the Dagger Engine image to speed up module initialization. This avoided on-demand compilation during the SDK's initialization process. It showed promise: With a cold cache, this improved module initialization times by 7\u201310 seconds. Maybe bundling was the answer\u2026\"]}),/*#__PURE__*/e(\"h2\",{children:\"Not So Fast\"}),/*#__PURE__*/e(\"p\",{children:\"Before rushing to bundle all the things, we paused to consider the potential tradeoff to a better developer experience: flexibility.\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"Solving for dev experience would mean setting restrictions on the choice of runtime, package manager and configuration. It would likely result in better performance, but at the cost of being harder to integrate with projects using different stacks or tooling.\\xa0\\xa0\"}),/*#__PURE__*/e(\"p\",{children:\"Solving for flexibility would mean supporting a wide range of runtimes, package managers and configurations. This might make it easier for developers to adopt, but at the cost of speed and control.\"}),/*#__PURE__*/t(\"p\",{children:[\"We contemplated this \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/issues/8689\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"for a while\"})}),\" and benchmarked different options to ensure we\u2019re making the best decision for users. Ultimately, we concluded that giving up a bit of flexibility is worth the price for meaningfully improving the daily experience of all users. The next step was to see exactly how big of an improvement we could get from bundling\u2026\"]}),/*#__PURE__*/e(\"h2\",{children:\"Bundle Time\"}),/*#__PURE__*/t(\"p\",{children:[\"The biggest breakthrough came something that seemed crazy at first: bundling the \",/*#__PURE__*/e(\"em\",{children:\"entire\"}),\" SDK. Instead of copying the entire TypeScript SDK directory and downloading all the dependencies (~155 MB) to the user's module, we replaced it with a smaller, more efficient bundled version (~4.5 MB). This optimization resulted in faster module initialization, produced fewer files in the user's module directory, and eliminated many of the dependency management issues from before.\"]}),/*#__PURE__*/e(\"p\",{children:\"A few of the issues we addressed along the way:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"We tried a few different bundler options and finally settled on the Bun bundler, because it was fast and worked well. We still needed a tool to bundle the TypeScript type declarations, because Bun\u2019s bundler only outputs JavaScript, so we ran Rollup\u2014a widely used JS/TS bundler\u2014for that one job.\\xa0\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"We ran into issues when introspecting the code of user modules: decorators were not working, promises were failing. We traced the problem to TypeScript being included in the final bundle. Once we removed TypeScript and made it a separate download, everything started working correctly.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"We needed a way to regenerate the client every time the Dagger dependencies of the user module changed, or a new dependency was installed. We did this by tweaking the \",/*#__PURE__*/e(\"code\",{children:\"tsconfig.json\"}),\" path configuration to restrict reloads to only specific parts of the SDK.\"]})})]}),/*#__PURE__*/e(\"p\",{children:\"The final optimized bundle now consists of just five files: the bundled JavaScript code, bundled type definitions, a dynamically generated client, and support files for telemetry and imports. The only dependency that we download now is TypeScript itself.\\xa0\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"540\",src:\"https://framerusercontent.com/images/kMTV87CdL3ixff06LXEAlwdBX8.jpg\",srcSet:\"https://framerusercontent.com/images/kMTV87CdL3ixff06LXEAlwdBX8.jpg?scale-down-to=512 512w,https://framerusercontent.com/images/kMTV87CdL3ixff06LXEAlwdBX8.jpg?scale-down-to=1024 1024w,https://framerusercontent.com/images/kMTV87CdL3ixff06LXEAlwdBX8.jpg 1920w\",style:{aspectRatio:\"1920 / 1080\"},width:\"960\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})}),/*#__PURE__*/t(\"p\",{children:[\"The final result: Module initialization times dropped significantly, from \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/pull/10094#issuecomment-2786296756\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"~21 seconds to ~11 seconds\"})}),\" on average. At first glance 10 seconds may not seem like much, but multiplied tens or hundreds of times a day in the middle of deep work, it\u2019s a difference that \",/*#__PURE__*/e(o,{href:\"https://discord.com/channels/707636530424053791/1157515934597136404/1359203614920540271\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"users noticed\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:\"\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\"}),/*#__PURE__*/t(\"p\",{children:[\"If you\u2019re new to \",/*#__PURE__*/e(o,{href:\"https://dagger.io/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger\"})}),\": it\u2019s a platform for composing and running software engineering workflows. Use it to automate tests, builds, code reviews, and more. \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/quickstart/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Try it now\"})}),\" with your SDK of choice. They\u2019re fast!\"]})]});export const richText1=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"The Gemini team launched Gemini CLI launched last week (June 25, 2025), and is already taking off as one of the most popular AI agents. Gemini CLI is a CLI interface to Gemini LLMs that provides easy configuration for authentication, MCP servers, project settings, and more.\"}),/*#__PURE__*/e(\"p\",{children:\"Based on my limited testing so far, here are my highlights for Gemini CLI: \"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"The UI is intuitive and helpful. I'm able to easily get help with interacting with the agent, see my current settings like model, context, sandboxing, workspace, memory, and MCP servers. There are command hints all over the UI that help me quickly understand how to use Gemini CLI. For the full set of options, I can type \",/*#__PURE__*/e(\"code\",{children:\"/help\"}),\" and get detailed information about the available commands. \"]})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"240\",src:\"https://framerusercontent.com/images/D9Grfk5nyfhFJkL3lnLZ2hGgIo0.png\",srcSet:\"https://framerusercontent.com/images/D9Grfk5nyfhFJkL3lnLZ2hGgIo0.png?scale-down-to=512 512w,https://framerusercontent.com/images/D9Grfk5nyfhFJkL3lnLZ2hGgIo0.png 997w\",style:{aspectRatio:\"997 / 480\"},width:\"498\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"291\",src:\"https://framerusercontent.com/images/r0DvwBinjAOo1MSbnNGJPFgSI.png\",srcSet:\"https://framerusercontent.com/images/r0DvwBinjAOo1MSbnNGJPFgSI.png?scale-down-to=512 512w,https://framerusercontent.com/images/r0DvwBinjAOo1MSbnNGJPFgSI.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/r0DvwBinjAOo1MSbnNGJPFgSI.png 1025w\",style:{aspectRatio:\"1025 / 583\"},width:\"512\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"When I'm done with a session, Gemini CLI outputs a helpful summary of my session. It includes information about the turns, token usage, and duration. \"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"389\",src:\"https://framerusercontent.com/images/uzKNHMJgbau0D6oBydS4hnZMFqU.png\",srcSet:\"https://framerusercontent.com/images/uzKNHMJgbau0D6oBydS4hnZMFqU.png 636w\",style:{aspectRatio:\"636 / 778\"},width:\"318\"}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"I can easily configure rules for my current workspace as well as globally for my whole machine with settings in my ~/.gemini directory as well as the workspace .gemini directory. This allows me to commit project specific settings to my repository and additionally set my own preferences for everything on my machine.\"})})}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Gemini CLI has built in sandboxing with options to sandbox with macos seatbelt or docker. This sandboxing provides an isolated execution environment to perform operations like running systems tools, running tests, or building your app. With the sandbox feature, filesystem edits are still made on your host filesystem, so I want to use \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/container-use\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"container-use\"})}),\" instead to give my agent a fully isolated environment for both the execution environment and git worktree. Integrating container-use was simple because I can select which core tools to include as well. For example, in my actual configuration included below, I specify that the only core tool I want to include is \",/*#__PURE__*/e(\"code\",{children:\"ReadManyFilesTool\"}),\". I found this tool helpful because it lets me use \",/*#__PURE__*/e(\"code\",{children:\"@\"}),\" to reference specific files in my prompts to have those files included as context. I omit the other core tools because I want Gemini to do all of its file operations and shell commands in the container-use environment.\",/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})]})})}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'{\\n\"selectedAuthType\": \"gemini-api-key\",\\n\"theme\": \"Dracula\",\\n\"coreTools\": [\"ReadManyFilesTool\"],\\n\"mcpServers\": {\\n     \"container-use\": {\\n     \"command\": \"cu\",\\n     \"args\": [\\n     \"stdio\"\\n     ],\\n     \"timeout\": 60000,\\n     \"trust\": true\\n     }\\n   }\\n }',language:\"JSX\"})})}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"The block style output for each tool call gives me enough context to understand the work the agent is doing. In the screenshot below, I can see what the agent is thinking, tools it's running, and the output of those tools in a clean interface. \"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"347\",src:\"https://framerusercontent.com/images/vSz3ChzB4nWxcJetY3yjZ4rRqjE.png\",srcSet:\"https://framerusercontent.com/images/vSz3ChzB4nWxcJetY3yjZ4rRqjE.png?scale-down-to=512 512w,https://framerusercontent.com/images/vSz3ChzB4nWxcJetY3yjZ4rRqjE.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/vSz3ChzB4nWxcJetY3yjZ4rRqjE.png 1528w\",style:{aspectRatio:\"1528 / 694\"},width:\"764\"}),/*#__PURE__*/e(\"p\",{children:\"Overall, Gemini CLI looks really promising already and I'm excited to see how it evolves!\"})]});export const richText2=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"One AI coding agent is magic. You ask it to refactor a function, write a unit test, or build a simple endpoint, and it just does it. The productivity boost is real. So, naturally, you think: what if I had ten?\"}),/*#__PURE__*/e(\"p\",{children:\"Chaos ensues. Suddenly, you find yourself babysitting a team of hyperactive, uncoordinated robots. They step on each other's toes, overwrite files, and create a tangled mess of dependencies. \"}),/*#__PURE__*/e(\"img\",{alt:\"Agents working in parallel, YOLO mode\",className:\"framer-image\",height:\"616\",src:\"https://framerusercontent.com/images/8ZIfCT829p7cZmluxRNVJeqDOhI.png\",srcSet:\"https://framerusercontent.com/images/8ZIfCT829p7cZmluxRNVJeqDOhI.png?scale-down-to=512 512w,https://framerusercontent.com/images/8ZIfCT829p7cZmluxRNVJeqDOhI.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/8ZIfCT829p7cZmluxRNVJeqDOhI.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/8ZIfCT829p7cZmluxRNVJeqDOhI.png 2370w\",style:{aspectRatio:\"2370 / 1232\"},width:\"1185\"}),/*#__PURE__*/e(\"p\",{children:\"You're left with two frustrating options for scaling your agent workforce:\"}),/*#__PURE__*/e(\"ol\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:'\"YOLO Mode\"'}),\": You run all the agents in your local environment and hope for the best. What could possibly go wrong? (Spoiler: everything). Your machine becomes a battlefield of conflicting changes, and you spend more time cleaning up the mess than getting work done.\"]})})}),/*#__PURE__*/e(\"ol\",{start:\"2\",children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:'\"Prompt and Pray Mode\"'}),\": You use a fully managed, all-in-one agent service. It\u2019s a black box. You submit a request, wait for a pull request, and pray the result is what you wanted. When it\u2019s not, you have to comment on the PR and repeat the cycle again, hoping for a better outcome on the next turn\u2026 You can't easily intervene, use your own tools, or run it on your own infrastructure. You lose control.\"]})})}),/*#__PURE__*/e(\"p\",{children:\"There has to be a better way. We need a system that gives us background work, guardrails, efficient intervention, and optionality. The core technologies to build this\u2014containers for isolation and Git for state management\u2014already exist.\"}),/*#__PURE__*/t(\"p\",{children:[\"At \",/*#__PURE__*/e(o,{href:\"https://dagger.io/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger\"})}),\", we've spent years building a platform to solve exactly this kind of problem: turning complex software engineering tasks into programmable, portable workflows. We already had the engine to manage containerized operations as code. It was the perfect foundation to build the environment that agents were missing.\"]}),/*#__PURE__*/t(\"p\",{children:[\"That's why we built and open-sourced \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/container-use\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:/*#__PURE__*/e(\"strong\",{children:\"Container Use\"})})}),\": an MCP (Model Context Protocol) server that gives each of your coding agents its own isolated, containerized development environments. It turns chaos into controlled, parallel execution.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Container use for agents: Isolated dev environments for every task\"}),/*#__PURE__*/e(\"p\",{children:\"Container Use is a simple command-line tool that plugs into any MCP-compatible agent like Claude Code or Cursor. It gives your agents a new superpower: the ability to create and manage their own dev environments on the fly, so they can work on multiple tasks or multiple versions of the same task in parallel.\"}),/*#__PURE__*/e(\"p\",{children:\"Here's an example where Claude Code uses Container Use to run two versions of the same task:\"}),/*#__PURE__*/e(\"video\",{autoPlay:!0,className:\"framer-image\",loop:!0,muted:!0,playsInline:!0,src:\"https://framerusercontent.com/assets/dGcx7QKI3QAwBGOUSnCXVNirYE.mp4\"}),/*#__PURE__*/e(\"p\",{children:\"Here\u2019s what container use enables:\"}),/*#__PURE__*/e(\"h3\",{children:\"True isolation for parallel work\"}),/*#__PURE__*/e(\"p\",{children:\"Each agent or task (if you ask) gets a fresh container, allowing it to parallelize development. Run multiple agents on different tasks simultaneously, and they won't conflict. Or have the same agent try multiple attempts in parallel for the same task, so you could choose and merge the best one.\"}),/*#__PURE__*/e(\"p\",{children:\"Imagine you want to refactor the backend while another agent updates the frontend dependencies:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'# Agent 1 starts refactoring the API in its own environment\\n> \"Refactor the user authentication service\"\\n\\n# Agent 2 simultaneously works on the frontend\\n> \"Upgrade all frontend npm packages to their latest stable versions\"',language:\"Shell\"})})}),/*#__PURE__*/t(\"h3\",{children:[\"Full visibility with \",/*#__PURE__*/e(\"code\",{children:\"cu watch\"})]}),/*#__PURE__*/e(\"p\",{children:\"See a complete, real-time log of what your agents are actually doing, not just what they claim. Every command and its output is recorded, giving you a perfect audit trail.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"# Watch all agent activity in real-time\\n# Basically `watch git log --remotes=container-use --oneline --graph --decorate`\\ncu watch\\xa0\\n\\n# Review all commands used by the agent\\ngit log --remotes=container-use --notes=container-use\",language:\"Shell\"})})}),/*#__PURE__*/e(\"h3\",{children:\"Direct intervention when you need it\"}),/*#__PURE__*/e(\"p\",{children:\"Is an agent stuck in a loop? Drop directly into its containerized terminal, see its exact state (files, processes, environment variables), and take control to fix the problem.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"# Jump into the agent's exact environment\\n\\ncu terminal <environment_name>\",language:\"Shell\"})})}),/*#__PURE__*/e(\"h3\",{children:\"A git-backed workflow\"}),/*#__PURE__*/e(\"p\",{children:\"Each containerized environment is backed by a Git branch, creating a persistent, versioned history of the agent\u2019s work. This gives you a durable record that you can inspect and manage with familiar tools.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"# Inspect the code the agent wrote\\ngit log --patch container-use/<environment_name>\\ngit diff container-use/<environment_name>\\n\\n# Check it out to your local repository\\ngit checkout <environment_name> && git pull\\n\\n# Happy with the result? Merge it into your main branch\\ncu merge <environment-name>\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:\"In all, container use makes working with coding agents a much more pleasant and productive experience.\"}),/*#__PURE__*/e(\"img\",{alt:\"Coding agents working in parallel, sanely and safely\",className:\"framer-image\",height:\"787\",src:\"https://framerusercontent.com/images/pqQF4496757ZIjyFF8oaOa8vRC8.png\",srcSet:\"https://framerusercontent.com/images/pqQF4496757ZIjyFF8oaOa8vRC8.png?scale-down-to=512 512w,https://framerusercontent.com/images/pqQF4496757ZIjyFF8oaOa8vRC8.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/pqQF4496757ZIjyFF8oaOa8vRC8.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/pqQF4496757ZIjyFF8oaOa8vRC8.png 2740w\",style:{aspectRatio:\"2740 / 1574\"},width:\"1370\"}),/*#__PURE__*/e(\"h3\",{children:\"Getting started\"}),/*#__PURE__*/e(\"p\",{children:\"Container Use requires Docker and Git, and comes with Dagger under the hood. Install it with a single command:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"curl -fsSL https://raw.githubusercontent.com/dagger/container-use/main/install.sh | bash\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:\"Then, integrate it with your preferred AI coding assistant.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"For Claude Code:\"})}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"cd /path/to/your/project\\nnpx @anthropic-ai/claude-code mcp add container-use -- cu stdio\\ncurl https://raw.githubusercontent.com/dagger/container-use/main/rules/agent.md >> CLAUDE.md\",language:\"Shell\"})})}),/*#__PURE__*/t(\"p\",{children:[\"For other MCP-compatible agents and IDEs like Cursor, see integration guides in the \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/container-use\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"README\"})}),\".\"]}),/*#__PURE__*/t(\"p\",{children:[\"Container Use is in early development. We are actively working on improving stability and streamlining the user experience. Feedback, contributions, and \",/*#__PURE__*/e(o,{href:\"https://discord.com/invite/dagger-io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"discussion\"})}),\" are all welcome!\"]}),/*#__PURE__*/e(\"h2\",{children:\"Powered by Dagger\"}),/*#__PURE__*/e(\"p\",{children:\"While software engineers can use Container Use as a simple CLI tool with no Dagger experience required, for platform engineers it serves as a concrete example of the powerful workflow automations you can build with Dagger.\"}),/*#__PURE__*/e(\"p\",{children:\"Container Use leverages Dagger's core primitives to orchestrate these agent environments:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Composable Functions\"}),\": Agent environments are defined with code, not static images, allowing them to be dynamically composed with the exact tools needed for a task.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Portability\"}),\": The same environment an agent uses on your laptop can be executed identically in your CI system, because it\u2019s all powered by the Dagger Engine.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Intelligent Caching\"}),\": Dagger\u2019s content-addressable caching ensures that common operations are fast, even across dozens of parallel agent environments.\"]})})]}),/*#__PURE__*/e(\"p\",{children:\"This is what Dagger is designed for: giving you the building blocks to create powerful, portable, and reliable workflows for software delivery and development.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(o,{href:\"https://github.com/dagger/container-use\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Get Container Use on GitHub\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(o,{href:\"https://dagger.io/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Learn more about the Dagger Engine\"})})}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})})]});export const richText3=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"After \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/pull/6730\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"adding Bun runtime support to the Dagger TypeScript SDK\"})}),\" last year, we are excited to announce that we now also \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/pull/9927\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"support the Deno runtime\"})}),\". With this addition, the Dagger TypeScript SDK now supports the three most popular JavaScript runtimes: \",/*#__PURE__*/e(o,{href:\"https://nodejs.org/en\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Node.js\"})}),\", Deno & Bun.\"]}),/*#__PURE__*/e(\"p\",{children:\"Deno is a secure runtime for JavaScript and TypeScript, built with V8 and Rust, and designed by the creator of Node.js, Ryan Dahl. Deno offers first-class TypeScript support out of the box, strong security defaults with permission-based access control, and a built-in dependency inspector and formatter. This makes it a great choice for modern development workflows.\"}),/*#__PURE__*/e(\"p\",{children:\"As of Dagger v0.17.1, you can write and run your Dagger modules using Deno, taking advantage of its native TypeScript support and excellent performance \u2014 all without needing to transpile or configure complex build tooling.\"}),/*#__PURE__*/e(\"h4\",{children:\"Why Deno? And why now?\"}),/*#__PURE__*/e(\"p\",{children:\"We always intended our TypeScript SDK to support multiple runtimes. Node.js, Bun and Deno are all built differently, and developers should be able to choose the one best suited to their application and requirements. We want to enable as many developers as we can in the Dagger ecosystem, and the best way to do this is by making it easier for them to use Dagger with their familiar tooling and environment\"}),/*#__PURE__*/t(\"p\",{children:[\"We already had support for Node.js and Bun, and Deno support was always the logical next step - the \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/issues/4368\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"issue has been open for over two years\"})}),\" and we have an \",/*#__PURE__*/e(o,{href:\"https://discord.com/channels/707636530424053791/1285644350524756150\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"active community channel\"})}),\" in our Discord. However, we ran into some technical roadblocks:\"]}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"SDK sub-package installation: Deno has a different approach to workspace management than Bun and Node.js. We needed to switch to a \",/*#__PURE__*/e(o,{href:\"https://docs.deno.com/runtime/fundamentals/workspaces/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Deno workspace\"})}),\" so that the SDK dependencies were correctly installed when running \",/*#__PURE__*/e(\"code\",{children:\"deno install\"}),\" for the user's module.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Node.js/Deno compatibility: Deno\u2019s compatibility layer makes it possible to call Node.js APIs from within Deno. However, Deno\u2019s configuration file required \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/blob/0f16bce5c5208c61931a6658e40ee9075095a65d/sdk/typescript/runtime/bin/__deno_config_updator.ts#L4\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"additional custom scripting to inject the values\"})}),\" required for the SDK to \u201Cjust work\u201D. For example, since the TypeScript SDK is written in Node.js, we needed to enable various experimental features via \",/*#__PURE__*/e(\"code\",{children:\"unstableFlags\"}),\" to make the SDK compatible with Deno. Similarly, we needed to enable Deno\u2019s \",/*#__PURE__*/e(\"code\",{children:\"experimentalDecorators\"}),\" flag to support Dagger-specific decorators like \",/*#__PURE__*/e(\"code\",{children:\"@func\"}),\", \",/*#__PURE__*/e(\"code\",{children:\"@object\"}),\", and so on.\"]})})]}),/*#__PURE__*/e(\"p\",{children:\"This is where our friendly and knowledgeable Dagger community proved invaluable. We received support and assistance from Deno experts, which coupled with recent compatibility improvements in Deno 2, finally made adding this support relatively straightforward.\"}),/*#__PURE__*/e(\"h4\",{children:\"How does it work?\"}),/*#__PURE__*/t(\"p\",{children:[\"Dagger will detect any project containing a \",/*#__PURE__*/e(\"code\",{children:\"deno.json\"}),\" file, and it will automatically use the Deno runtime by updating the `deno.json` file with the required configuration.\"]}),/*#__PURE__*/e(\"p\",{children:\"Here\u2019s an example of a Deno project managed by a Dagger module written with the Deno runtime.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"# Initialize a new project\\ndeno init\\n\\n# Add a remote JSR to validate input\\ndeno add jsr:@celusion/simple-validation\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:\"The project takes a string as input and verifies if it\u2019s a valid email or not:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'import { email, validate } from \"@celusion/simple-validation\";\\n\\nfunction validateEmail(input: string) {\\n if (!input) {\\n   console.error(\"ERROR: No email provided\");\\n }\\n\\n if (validate(input, [[email]]) === true) {\\n   console.log(\"Email is valid\");\\n   return;\\n }\\n\\n console.error(`Email ${input} is invalid`);\\n}\\n\\nif (import.meta.main) {\\n validateEmail(Deno.args[0]);\\n}',language:\"TypeScript\"})})}),/*#__PURE__*/t(\"p\",{children:[\"To manage this project, create a Dagger module in the \",/*#__PURE__*/e(\"code\",{children:\"dagger\"}),\" directory:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"mkdir dagger && cd dagger\\n\\n# Initialize a deno project inside the dagger directory so it can be detected by Dagger\\ndeno init\\n\\n# Remove init files except deno.json since we do not need them\\nrm *.ts\\n\\n# Initialize a dagger module in the current directory\\ndagger init --name=deno-mail-validator --sdk=typescript --source=.\\n\",language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:\"Then, write a simple Dagger module with the Deno runtime. This module includes Dagger Functions to build, test and publish your Deno project with Dagger:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'import { dag, Container, Directory, File, object, func, argument } from \"@dagger.io/dagger\";\\n\\nconst DENO_IMAGE_REPOSITORY = \"denoland/deno\";\\n\\n@object()\\nexport class DenoMailValidator {\\n container: Container;\\n\\n constructor(\\n   @argument({ defaultPath: \"/\", ignore: [\"dagger\", \"**.md\"] })\\n   source: Directory,\\n\\n   denoVersion: string = \"2.2.4\"\\n ) {\\n   this.container = dag\\n     .container()\\n     .from(`${DENO_IMAGE_REPOSITORY}:alpine-${denoVersion}`)\\n     .withDirectory(\"/app\", source)\\n     .withWorkdir(\"/app\")\\n     .withExec([\"deno\", \"install\"]);\\n }\\n\\n /**\\n  * Execute the project to verify the given email.\\n  */\\n @func()\\n async checkEmail(email: string): Promise<string> {\\n   return await this.container.withExec([\"deno\", \"run\", \"main.ts\", email]).stdout();\\n }\\n\\n /**\\n  * Build and return the compiled binary.\\n  */\\n @func()\\n build(): File {\\n   return this.container.withExec([\"deno\", \"compile\", \"-o\", \"email-validator\", \"main.ts\"]).file(\"email-validator\");\\n }\\n\\n /**\\n  * Create a lightweight container with the compiled binary and publish\\n  * it to a registry.\\n  */\\n @func()\\n async publish(): Promise<string> {\\n   return await dag\\n     .container()\\n     .from(\"debian:bullseye-slim\")\\n     .withFile(\"/bin/email-validator\", this.build())\\n     .withEntrypoint([\"/bin/email-validator\"])\\n     .publish(\"ttl.sh/deno-mail-validator\");\\n }\\n}',language:\"TypeScript\"})})}),/*#__PURE__*/e(\"h4\",{children:\"See it in action \"}),/*#__PURE__*/e(\"video\",{autoPlay:!0,className:\"framer-image\",loop:!0,muted:!0,playsInline:!0,src:\"https://framerusercontent.com/assets/6mI6czawz7sbGZVicvJUfOtJF4.mp4\"}),/*#__PURE__*/e(\"p\",{children:\"You can also directly observe the module\u2019s behavior in Dagger Cloud:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"439\",src:\"https://framerusercontent.com/images/FgVc98zNI8kU25sNOpZCHsD6Q0U.png\",srcSet:\"https://framerusercontent.com/images/FgVc98zNI8kU25sNOpZCHsD6Q0U.png?scale-down-to=512 512w,https://framerusercontent.com/images/FgVc98zNI8kU25sNOpZCHsD6Q0U.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/FgVc98zNI8kU25sNOpZCHsD6Q0U.png 1600w\",style:{aspectRatio:\"1600 / 879\"},width:\"800\"}),/*#__PURE__*/e(\"h4\",{children:\"Ready to build with Deno?\"}),/*#__PURE__*/e(\"p\",{children:\"As a Deno developer, you now have the ability to create Dagger workflows using the tools you\u2019re already using - no context switching or compatibility bridges required! It\u2019s the best of both worlds - Deno\u2019s simplicity, speed, and security combined with Dagger\u2019s portability, modularity, and observability.\"}),/*#__PURE__*/t(\"p\",{children:[\"As always, we\u2019d love to hear what you think \u2014 share your feedback, and ask questions in the Dagger Discord or on GitHub. Join the discussion in our \",/*#__PURE__*/e(o,{href:\"https://discord.com/channels/707636530424053791/1285644350524756150\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Deno Discord channel\"})}),\", share what you\u2019re building, and \",/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger/issues\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"report issues in our GitHub issue tracker\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:\"Happy hacking! \uD83D\uDE80\"})]});export const richText4=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"We're kind of obsessed with reusable building blocks. Our founding team built Docker to help engineers compose complex software out of smaller, reusable parts. But the workflows used to build, test, and deploy them remained manual, complicated, and hard to reuse. So our obsession led us to create Dagger \u2014 bringing modularity and reusability to software delivery and development workflows, and turning artisanal processes into modern software factories built from reusable components.\"}),/*#__PURE__*/t(\"p\",{children:['In Dagger, those reusable building blocks are called \"modules.\" You define modules with code and combine them to compose any kind of software delivery workflow, from simple builds to end-to-end tests to ',/*#__PURE__*/e(o,{href:\"https://dagger.io/blog/llm\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"AI agents that do code reviews\"})}),\". But the real magic happens when teams can share and reuse one another\u2019s modules, and when platform engineers can standardize and get visibility into the use of those building blocks.\"]}),/*#__PURE__*/t(\"p\",{children:[\"Today we're launching \",/*#__PURE__*/e(\"strong\",{children:\"Module Catalog & Insights\"}),\" for Dagger Cloud customers, making it easy for teams to find, reuse, and manage modules privately inside their organization. This lets you fully leverage reusable building blocks to build a modern software factory, and ship great software faster and safer.\"]}),/*#__PURE__*/e(\"h2\",{children:\"How it works: Discover, reuse, and track modules\"}),/*#__PURE__*/e(\"p\",{children:\"Just connect your GitHub repos through the Dagger Cloud GitHub app, and your modules automatically pop up in the new Modules tab. Everything is neatly organized in a searchable catalog. Your team won\u2019t waste time reinventing something that already exists \u2014 if there's a module out there for what they need, now they can find it.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"923\",src:\"https://framerusercontent.com/images/4IiYrYtNRSXwT63CuEMZoWwgjjs.png\",srcSet:\"https://framerusercontent.com/images/4IiYrYtNRSXwT63CuEMZoWwgjjs.png?scale-down-to=512 512w,https://framerusercontent.com/images/4IiYrYtNRSXwT63CuEMZoWwgjjs.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/4IiYrYtNRSXwT63CuEMZoWwgjjs.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/4IiYrYtNRSXwT63CuEMZoWwgjjs.png 2810w\",style:{aspectRatio:\"2810 / 1847\"},width:\"1405\"}),/*#__PURE__*/e(\"p\",{children:\"Each module gets autogenerated API docs in multiple languages, clear metadata, and an activity feed summarizing recent updates. This helps everyone quickly understand what each module does, trust it, and start using it right away.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"905\",src:\"https://framerusercontent.com/images/0L2CggNMM1Ce2NCRDJyqG7jd9c.png\",srcSet:\"https://framerusercontent.com/images/0L2CggNMM1Ce2NCRDJyqG7jd9c.png?scale-down-to=512 512w,https://framerusercontent.com/images/0L2CggNMM1Ce2NCRDJyqG7jd9c.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/0L2CggNMM1Ce2NCRDJyqG7jd9c.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/0L2CggNMM1Ce2NCRDJyqG7jd9c.png 2802w\",style:{aspectRatio:\"2802 / 1811\"},width:\"1401\"}),/*#__PURE__*/e(\"p\",{children:\"Traces are directly linked to modules, making it easier to track down issues and see actual usage. See what modules are popular, spot any weird patterns, and find opportunities to improve commonly used components. You also get a clear view of dependencies and dependents, so your team can spot and manage supply-chain risks early.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"837\",src:\"https://framerusercontent.com/images/EqE6HftSYLEumddrUm7CUJirclk.png\",srcSet:\"https://framerusercontent.com/images/EqE6HftSYLEumddrUm7CUJirclk.png?scale-down-to=512 512w,https://framerusercontent.com/images/EqE6HftSYLEumddrUm7CUJirclk.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/EqE6HftSYLEumddrUm7CUJirclk.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/EqE6HftSYLEumddrUm7CUJirclk.png 2772w\",style:{aspectRatio:\"2772 / 1675\"},width:\"1386\"}),/*#__PURE__*/e(\"h2\",{children:\"Example: From one-off workflow to reusable building block\"}),/*#__PURE__*/t(\"p\",{children:[\"Imagine your engineering team needs to build and ship Golang applications. The platform team creates a standardized, reusable \",/*#__PURE__*/e(\"code\",{children:\"GoApp\"}),\" module that uses a compliant Go version and allows installing additional packages following the company\u2019s best practices:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'// Base sets up a pre-configured Golang container ready\\n// to build and test Go applications\\nfunc (m *GoApp) Base(\\n\tsource *dagger.Directory, // project source code\\n) *GoApp { // return standard Go container\\n\tctr := dag.Container().\\n\t\t// start with a minimal approved Golang container image\\n\t\tFrom(\"golang:1.24.3-alpine\").\\n\t\t// copy source code directory into the container\\n\t\tWithDirectory(\"/app\", source).\\n\t\t// set working directory inside the container\\n\t\tWithWorkdir(\"/app\").\\n\t\t// add base pinned required packages\\n\t\tWithExec([]string{\"apk\", \"add\", \"git==2.47.2-r0\"})\\n\treturn &GoApp{Container: ctr}\\n}\\n\\n// WithPackage lets you install additional packages that\\n// must be pinned to a version.\\nfunc (m *GoApp) WithPackage(\\n\tctx context.Context,\\n\tpkg string, // project source code\\n) *GoApp { // return GoApp type for chaining\\n\tif _, _, ok := strings.Cut(pkg, \"==\"); !ok {\\n\t\tpanic(\"cannot install packages without pinned versions\")\\n\t}\\n\tm.Container = m.Container.\\n\t\tWithExec([]string{\"apk\", \"add\", pkg}) // install custom package\\n\treturn m\\n}',language:\"JSX\"})})}),/*#__PURE__*/e(\"p\",{children:\"Once it's pushed to GitHub, the module automatically shows up in your organization's catalog. An engineer working on a new application can discover the module, check the auto-generated docs, and use it to build their application in a few lines:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'// Use platform team\\'s base app module as a base Go image with a custom package\\n// Build fetches the app code from a branch and builds the code\\nfunc (m *SomeTeamApplication) Build(ctx context.Context) (string, error) {\\n    sourceCode := dag.Git(myRepo).Branch(\"new-feature\").Tree()\\n    return dag.GoApp().Base(sourceCode).\\n\t    WithPackage(\"zlib-dev\"). // platform team owns WithPackage in their module\\n        Build()\\n}\\n',language:\"JSX\"})})}),/*#__PURE__*/t(\"p\",{children:[\"As more teams start shipping Golang applications they will discover and use \",/*#__PURE__*/e(\"code\",{children:\"GoApp\"}),\". The platform team sees the module's usage increasing, invests time to further improve and standardize it, and then uses Module Insights to quickly notify dependent teams about updates. This ensures everyone stays consistent and reliable across the organization.\"]}),/*#__PURE__*/t(\"p\",{children:[\"This is just one basic example. Dagger lets you build modules out of \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/api/types\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"foundational building blocks\"})}),\" like containers, directories, custom objects, and \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/features/llm/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"even LLMs\"})}),\". You can build anything from simple dev environments to complex, end-to-end workflows powered by AI agents, like automated code reviews and test setups!\"]}),/*#__PURE__*/e(\"h2\",{children:\"Get started today\"}),/*#__PURE__*/e(\"p\",{children:\"Module Catalog & Insights are available now in Dagger Cloud for customers on the Team plan. If you\u2019re on the free plan or don\u2019t have an account, you can try Module Catalog & Insights free for 14 days.\\xa0\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(o,{href:\"https://dagger.cloud/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Sign in to Dagger Cloud\"})}),\" and click the new Modules tab.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Read the docs for \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/features/modules/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Modules\"})}),\" and \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/configuration/cloud#modules\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Module Catalog & Insights\"})}),\".\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(o,{href:\"https://discord.com/invite/dagger-io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Join the Discord\"})}),\" to ask questions, give feedback, learn from your peers, or talk reusability to us.\\xa0\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(o,{href:\"https://daggerverse.dev\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Explore the Daggerverse\"})}),\" to browse nearly 1,500 public modules contributed by the community.\"]})})]})]});export const richText5=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"em\",{children:\"My name is \"}),/*#__PURE__*/e(o,{href:\"https://www.linkedin.com/in/sebastiantiedtke/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:/*#__PURE__*/e(\"em\",{children:\"Sebastian Huckleberry\"})})}),/*#__PURE__*/e(\"em\",{children:\", I am the CEO at Stateful, we make \"}),/*#__PURE__*/e(o,{href:\"https://runme.dev/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:/*#__PURE__*/e(\"em\",{children:\"Runme\"})})}),/*#__PURE__*/e(\"em\",{children:\", and I'm excited to contribute this guest blog post. Let\u2019s dive right in.\"}),/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(\"br\",{}),\"A few weeks back, the folks at Dagger released their \",/*#__PURE__*/e(o,{href:\"https://dagger.io/blog/a-shell-for-the-container-age-introducing-dagger-shell\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Container-Native Shell\"})}),\", and it\u2019s awesome! Leading up to the launch, the team at Stateful/Runme was invited for a sneak preview and decided to build a frontend for Dagger Shell into \",/*#__PURE__*/e(o,{href:\"https://runme.dev/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Runme\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:\"In this blog post, we'll illustrate how we're using Runme and Dagger to replace the Runme CNCF project\u2019s organically-grown GitHub Actions \u2018YAML Pipelines\u2019 with just Nouns and Verbs right from your docs.\"}),/*#__PURE__*/e(\"p\",{children:\"I will demonstrate how you can break down your YAML and Bourne-Again Shell spaghetti code into Dagger-powered, portable, and self-documenting pipeline definitions that are native to Markdown. Runme stitches together the Dagger Shell scripts on the fly for execution and handles all of the environmental details, keeping your pipelines readable, portable, and executable both remotely and locally.\"}),/*#__PURE__*/e(\"video\",{autoPlay:!0,className:\"framer-image\",loop:!0,muted:!0,playsInline:!0,src:\"https://framerusercontent.com/assets/UYfLODxtEXAp6hpj0nYPrsE8x0.mp4\"}),/*#__PURE__*/e(\"p\",{children:\"> Running the E2E integration test suite in the notebook\"}),/*#__PURE__*/t(\"p\",{children:[\"Consider the following concise Dagger shell snippet. For everyday use, it\u2019s as simple as running \",/*#__PURE__*/e(\"code\",{children:\"$ runme run IntegrationTests\"}),\" from anywhere in the project or pressing \u25B6\uFE0F on the cell. That's right, you \",/*#__PURE__*/e(\"strong\",{children:\"quite literally\"}),\" run the docs.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"### Exported in runme.dev as IntegrationTests\\nExtension | integration-test --runme-test-token RUNME_TEST_TOKEN | stdout\",language:\"Markdown\"})})}),/*#__PURE__*/t(\"p\",{children:[\"What isn\u2019t apparent from the Dagger Shell snippet behind the \",/*#__PURE__*/e(\"code\",{children:\"IntegrationTests\"}),\" \u2018noun\u2019 is that it won\u2019t just execute the integration test suite; it\u2019s an entire pipeline doing all of the following:\"]}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Fetches sources (Golang and TypeScript repositories)\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Install the respective project dependencies\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Compile all code into releaseable artifacts\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Link them into a VS Code extension bundle\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Then, execute the functional end-to-end test suite using headless browsers\"})})]}),/*#__PURE__*/e(\"p\",{children:\"The integration test suite runs headlessly on Linux. Linux because headless browsers require the X Virtual Frame Buffer (xvfb) to run. Without Runme fronting Dagger, the fully expanded Shell snippet runnable on any Linux system shell is:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'dagger -c \\'github.com/runmedev/vscode-runme | build $(github.com/runmedev/runme | \\nlink-release --version \"latest\" \"linux/amd64\") | integration-test | stdout\\'',language:\"Shell\"})})}),/*#__PURE__*/t(\"p\",{children:[\"While more elaborate, it\u2019s still incredibly readable, and as a side benefit, you won\u2019t need to clone any repositories to run the entire \u2018pipeline\u2019 successfully. Modules in Dagger are content-addressable, which means references, such as \",/*#__PURE__*/e(\"code\",{children:/*#__PURE__*/e(o,{href:\"http://github.com/runmedev/vscode-runme\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"github.com/runmedev/vscode-runme\"})})}),\", are automatically fetched from GitHub. If you don\u2019t have \",/*#__PURE__*/e(\"code\",{children:\"xvfb\"}),\" handy, just run the unit tests. Just be sure to change your local machine\u2019s CPU architecture: \",/*#__PURE__*/e(\"code\",{children:\"arm64\"}),\" vs \",/*#__PURE__*/e(\"code\",{children:\"amd64\"}),\".\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'dagger -c \\'github.com/runmedev/vscode-runme | build $(github.com/runmedev/runme | \\nlink-release --version \"latest\" \"linux/amd64\") | unit-test | stdout\\'',language:\"Shell\"})})}),/*#__PURE__*/e(\"h4\",{children:\"Runme as Frontend and UX for Dagger\"}),/*#__PURE__*/e(\"p\",{children:\"Dagger handles the heavy lifting, orchestrating containers to build artifacts and apply precise caching in between, while Runme addresses the following three problems:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It\u2019s hard to keep tasks and workflows consistent across various tools, such as editors, browsers, and the terminal. Everything is disconnected.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Setting up environments and managing config and secrets is messy, manual, and doesn\u2019t transfer well between machines or teammates.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Docs are often out of sync or scattered. It\u2019s challenging to keep things clear and close to the work, even in 2025.\"})})]}),/*#__PURE__*/e(\"p\",{children:\"If you haven\u2019t used Runme before, Runme runs Markdown. It's a universal task runner that understands Shells (POSIX & Dagger), Cloud resources, and Programming Languages that run under a Shell\u2019s shebang.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"1203\",src:\"https://framerusercontent.com/images/4OW28JDXQ5jIpbcv1GXFuobPI.png\",srcSet:\"https://framerusercontent.com/images/4OW28JDXQ5jIpbcv1GXFuobPI.png?scale-down-to=512 512w,https://framerusercontent.com/images/4OW28JDXQ5jIpbcv1GXFuobPI.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/4OW28JDXQ5jIpbcv1GXFuobPI.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/4OW28JDXQ5jIpbcv1GXFuobPI.png 3632w\",style:{aspectRatio:\"3632 / 2406\"},width:\"1816\"}),/*#__PURE__*/e(\"p\",{children:\"Its flagship UX is the notebook that makes your documentation interactive. However, it integrates into both the editor and the terminal. Since it saves to Markdown, Runme won\u2019t close the door for anyone preferring a non-interactive documentation reading experience.\"}),/*#__PURE__*/e(\"h4\",{children:\"Nouns and Verbs\u2013The Lingo to Express Pipelines\"}),/*#__PURE__*/e(\"p\",{children:\"To understand Runme\u2019s frontend role for Dagger, let's target building a releasable version of Runme\u2019s VS Code extension. This includes building and linking:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"The Golang-based kernel binary running inside the VS Code extension\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"The Typescript sources for the VS Code extension are bundled via webpack\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Linking a VS Code VSIX package of all artifacts, that\u2019s installable in any VS Code clone\"})})]}),/*#__PURE__*/t(\"p\",{children:[\"We target the \",/*#__PURE__*/e(\"code\",{children:\"ExtensionVsix\"}),\" noun, which describes the VSIX as the final file format \u2013 our desired outcome. The \",/*#__PURE__*/e(\"strong\",{children:\"Noun\"}),\" 'nomenclature' with capitalization is intentional because the result produced is a local extension file that we can install or ship to Microsoft's VS Code marketplace.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"### Exported in runme.dev as ExtensionVsix\\nExtension | bundle | export $EXTENSION_VSIX\",language:\"Shell\"})})}),/*#__PURE__*/e(\"h4\",{children:'Linguistics of \"Dagger Sentences\" in Runme'}),/*#__PURE__*/t(\"p\",{children:[\"Now, while \",/*#__PURE__*/e(\"strong\",{children:\"Nouns\"}),\" describe Dagger artifacts (file, directory, container, etc), the Dagger functions performing operations are \",/*#__PURE__*/e(\"strong\",{children:\"verbs\"}),\" (lowercase). If this feels reminiscent of software system design tasks, it is. It involves identifying the essential components of your domain, including nouns that represent entities and verbs that detail the related actions. Except for primarily serving comprehension in Software Design, we use the exact lingo to express Dagger pipelines.\"]}),/*#__PURE__*/t(\"p\",{children:[\"Using Runme as a frontend, the idea is to use Dagger Shell pipes and references to decompose a complex pipeline into a series of concise \",/*#__PURE__*/e(\"strong\",{children:\"Dagger sentences\"}),\" which consist of \",/*#__PURE__*/e(\"strong\",{children:\"Nouns\"}),\" and \",/*#__PURE__*/e(\"strong\",{children:\"verbs\"}),\" and, conveniently, have a descriptive name (yes, another \",/*#__PURE__*/e(\"strong\",{children:\"Noun\"}),\"). Then, we lean on Runme\u2019s universal task runner to generate the Dagger Shell code required to execute pipelines dynamically, where the targeted \",/*#__PURE__*/e(\"strong\",{children:\"Noun\"}),\" is the entry point. Too abstract? Here\u2019s an example.\"]}),/*#__PURE__*/t(\"p\",{children:[\"Consider the difference between the \",/*#__PURE__*/e(\"code\",{children:\"ExtensionVsix\"}),\" and \",/*#__PURE__*/e(\"code\",{children:\"Extension\"}),\" \",/*#__PURE__*/e(\"strong\",{children:\"Nouns\"}),\". The latter builds (Typescript compiler) the extension, linking it with the Kernel binary:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"### Exported in runme.dev as Extension\\nVscodeRunme | build $(KernelBinary)\",language:\"Shell\"})})}),/*#__PURE__*/t(\"p\",{children:[\"Whereas \",/*#__PURE__*/e(\"code\",{children:\"ExtensionVsix\"}),\" uses pipes on \",/*#__PURE__*/e(\"code\",{children:\"Extension\"}),\" to chain bundling (create VSIX package) and exporting (write file to Dagger host\u2019s file system), the \",/*#__PURE__*/e(\"code\",{children:\"runme-extension-[arch].vsix\"}),\" (value of \",/*#__PURE__*/e(\"code\",{children:\"$EXTENSION_VSIX\"}),\") file artifact.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"### Exported in runme.dev as ExtensionVsix\\nExtension | bundle | export $EXTENSION_VSIX\",language:\"Shell\"})})}),/*#__PURE__*/t(\"p\",{children:[\"Just like in linguistics, \",/*#__PURE__*/e(\"strong\",{children:\"Nouns\"}),\" can act as subjects or objects in \u2018Dagger sentences\u2019. Notice how \",/*#__PURE__*/e(\"code\",{children:\"KernelBinary\"}),\" is being passed using the Shell Expression syntax \",/*#__PURE__*/e(\"code\",{children:\"$(...)\"}),\" to make it the object of the \",/*#__PURE__*/e(\"code\",{children:\"build\"}),\" \",/*#__PURE__*/e(\"strong\",{children:\"verb\"}),\" (the predicate in Linguistics), running the Dagger function on the subject \",/*#__PURE__*/e(\"code\",{children:\"Extension\"}),\". Now there are also attributes (optional and positional arguments) which control the behavior of functions (aka \",/*#__PURE__*/e(\"strong\",{children:\"verbs\"}),\"), but let\u2019s not get carried away with the language analogies.\"]}),/*#__PURE__*/e(\"h4\",{children:\"Running Dagger Pipeline using Runme\"}),/*#__PURE__*/e(\"p\",{children:\"If linguistics is too far from technology for you, that\u2019s okay. The team at Stateful, including me, finds it helpful because it\u2019s literally how natural language works. And, in my native language, German, we capitalize nouns without exception, and we often put verbs at the end of sentences.\"}),/*#__PURE__*/e(\"p\",{children:\"In any case, getting an installable Runme VS Code from source locally is now trivial, running:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:' $ runme run ExtensionVsix\\n\u2714 connect 0.3s\\n\u2714 load module 1.0s\\n\u2714 serving dependency modules 0.0s\\n\u2714 load module 0.2s\\n\\n\u2714 runmeKernel: RunmeKernel! 0.3s\\n$ .releaseFiles(platform: \"darwin/arm64\", version: \"latest\"): Directory! 2.3s CACHED\\n\\n\u2714 Host.directory(path: \"/Users/sourishkrout/Projects/stateful/oss/vscode-runme\"): Directory! 24.5s\\n\\n\u2714 vscodeRunme(\\n\u2502 \u2502 source: Host.directory(path: \"/Users/sourishkrout/Projects/stateful/oss/vscode-runme\"): Directory!\\n\u2502 ): VscodeRunme! 2.9s\\n\u2714 .build(\\n\u2502 \u2502 runmeBinary: $ RunmeKernel.releaseFiles(platform: \"darwin/arm64\", version: \"latest\"): Directory! 0.0s CACHED\\n\u2502 ): VscodeRunme! 1m21s\\n\u2714 .bundle: File! 1m42s\\n\u2714 .export(path: \"runme-extension-darwin-arm64.vsix\"): String! 0.2s\\n\\n~/oss/vscode-runme/runme-extension-darwin-arm64.vsix',language:\"Markdown\"})})}),/*#__PURE__*/t(\"p\",{children:[\"What makes all this work is \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/#key-features\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger\u2019s Type System\"})}),\" and the fact that execution is orchestrated in containers. This is a game-changer, not just for security and superior caching, but it also makes debugging pipelines thanks to decomposition much easier.\"]}),/*#__PURE__*/e(\"h4\",{children:\"Under the Runme Frontend's Hood\"}),/*#__PURE__*/t(\"p\",{children:[\"Under the hood, the Runme frontend will transparently transform its Markdown/notebook representation into plain Dagger Shell, which, if you wanted, you could run as a Dagger Shell script in and of itself. The following script is exactly what \",/*#__PURE__*/e(\"code\",{children:\"$ runme run ExtensionVsix\"}),\" hands off to Dagger.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'$ runme print ExtensionVsix\\n#!/usr/bin/env dagger shell\\nVscodeRunme()\\n{\\n .\\n}\\nDAGGER_01JSPTYPXSK8RHVYTFJM6RG2NA()\\n{\\n RunmeKernel | list-release --version latest | entries\\n}\\nKernelBinary()\\n{\\n RunmeKernel | link-release --version latest $TARGET_PLATFORM\\n}\\nExtension()\\n{\\n VscodeRunme | build $(KernelBinary)\\n}\\nExtensionVsix()\\n{\\n Extension | bundle | export $EXTENSION_VSIX\\n}\\nUnitTests()\\n{\\n Extension | unit-test | stdout\\n}\\nIntegrationTests()\\n{\\n Extension | integration-test --runme-test-token RUNME_TEST_TOKEN | stdout\\n}\\nGhaIntegrationTests()\\n{\\n Extension | gha-job $BASE_OWNER $FORK_OWNER $GITHUB_ACTOR $GITHUB_EVENT_NAME \\\\\\n | integration-test --runme-test-token RUNME_TEST_TOKEN | stdout\\n}\\nDAGGER_01JSPTYPXSK8RHVYTFK08DMRQ0()\\n{\\n Extension | integration-test --runme-test-token RUNME_TEST_TOKEN --spec \"specs/githubAction.e2e.ts\" | stdout\\n}\\nDAGGER_01JSPTYPXSK8RHVYTFK1VYAQMY()\\n{\\n Extension | integration-test --debug --runme-test-token RUNME_TEST_TOKEN --spec \"specs/githubAction.e2e.ts\" | directory \"tests/e2e/logs\" | export /tmp/e2e-logs\\n}\\nExtensionVsix',language:\"Markdown\"})})}),/*#__PURE__*/t(\"p\",{children:[\"In contrast to the individual Dagger Shell code cell (with \",/*#__PURE__*/e(\"code\",{children:\"--raw\"}),\" flag) as follows:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'$ runme print --raw ExtensionVsix\\n```\\nsh {\"name\":\"ExtensionVsix\"}\\n### Exported in runme.dev as ExtensionVsix\\nExtension | bundle | export $EXTENSION_VSIX\\n```',language:\"Markdown\"})})}),/*#__PURE__*/t(\"p\",{children:[\"Running \",/*#__PURE__*/e(\"code\",{children:\"ExtensionVsix\"}),\" only requires a subset of all function definitions in the script above. In future versions, the team working on Runme could add features to make the script even more concise:\"]}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Prune unexecuted code from the script using a control flow graph\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Optionally unnest the call graph and reduce the script to a one-liner\"})})]}),/*#__PURE__*/e(\"p\",{children:\"Now let\u2019s discuss what it takes to achieve portability to run your pipelines anywhere.\"}),/*#__PURE__*/e(\"h4\",{children:\"Transparently Configure the Environment\"}),/*#__PURE__*/e(\"p\",{children:\"The challenge that fully portable pipelines face, which run both locally and remotely (e.g., GitHub, GitLab, CircleCI, etc), is \u2018configuration\u2019 and its extremely sensitive sibling, \u2018secrets\u2019. Portable container images are only half the problem because they can\u2019t run without valid configurations. Infrastructure/hardware aside, what makes a working \u2018Environment\u2019 is both.\"}),/*#__PURE__*/e(\"p\",{children:\"To successfully run Runme's delivery pipeline, we need to know the following:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"The host\u2019s OS\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"The CPU architecture\"})})]}),/*#__PURE__*/t(\"p\",{children:[\"These are necessary so that Golang builds the correct binaries. It\u2019s not unusual to run Dagger in OCI container runtimes on heterogeneous environments (e.g., Linux via Docker Desktop on macOS or Windows). Getting OS and architecture right is easier said than done if your team is on macOS and transitioning from \",/*#__PURE__*/e(\"code\",{children:\"x64\"}),\" to \",/*#__PURE__*/e(\"code\",{children:\"ARM\"}),\", while all of CI/CD is on \",/*#__PURE__*/e(\"code\",{children:\"x64\"}),\" Linux. Moreover, tests won\u2019t complete without the following values:\"]}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"GitHub API calls are aggressively throttled unless you provide an authentication token.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Runme\u2019s e2e integration suite requires an Access Token to dispatch a GHA workflow.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Dynamically include the OS/arch combo into the extension\u2019s file name.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"GitHub Actions job metadata to disable specific tests on external Pull Requests.\"})})]}),/*#__PURE__*/e(\"p\",{children:\"The team building Runme came up with a solution and its 100% compatible with Dagger's Shell.\"}),/*#__PURE__*/e(\"h4\",{children:\"Pipeline Environment Declarations\"}),/*#__PURE__*/t(\"p\",{children:[\"Enter Runme\u2019s \",/*#__PURE__*/e(o,{href:\"https://runme.dev/blog/typed-env-vars\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Owl Store\"})}),\" with \",/*#__PURE__*/e(o,{href:\"https://docs.runme.dev/configuration/dotenv-direnv\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"DotEnv/Direnv\"})}),\" integrations. The way this works is that you provide an \",/*#__PURE__*/e(\"code\",{children:/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/vscode-runme/blob/16035ce0da072a6ae4e2e69a00569cb1a25b5cdc/.env.spec\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\".env.spec\"})})}),\" that specifies a valid Environment.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'EXTENSION_VSIX=\"The name of the VS Code extension file.\" # Plain!\\nGITHUB_TOKEN=\"The GitHub token to use for API requests.\" # Secret\\nRUNME_TEST_TOKEN=\"The Runme test token to use for integration tests.\" # Secret\\nTARGET_PLATFORM=\"The target platform to build binary artifacts for.\" # Plain!\\n\\nBASE_OWNER=\"GitHub action job metadata injected by GHA runtime.\" # Plain!\\nFORK_OWNER=\"GitHub action job metadata injected by GHA runtime.\" # Plain!\\nGITHUB_ACTOR=\"GitHub action job metadata injected by GHA runtime.\" # Plain!\\nGITHUB_EVENT_NAME=\"GitHub action job metadata injected by GHA runtime.\" # Plain!',language:\"Markdown\"})})}),/*#__PURE__*/e(\"h4\",{children:\"Dynamic Environment Resolution\"}),/*#__PURE__*/t(\"p\",{children:[\"And, a matching \",/*#__PURE__*/e(\"code\",{children:/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/vscode-runme/blob/16035ce0da072a6ae4e2e69a00569cb1a25b5cdc/.env.spec\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\".envrc\"})})}),\" file which, once authorized (\",/*#__PURE__*/e(\"code\",{children:\"direnv allow\"}),\"), will populate the environment. If this pipeline ran behind a firewall, we would likely experience a Cambrian Explosion of key/value pairs (often only discovered via Slack spelunking). However, only having a few variables is great for illustration:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'export TARGET_PLATFORM=\"$(go env GOOS)/$(go env GOARCH)\"\\nexport EXTENSION_VSIX=\"runme-extension-${TARGET_PLATFORM/\\\\//-}.vsix\"\\nexport GITHUB_TOKEN=$(gh auth token)\\nexport GOAWAY=1\\n\\nexport BASE_OWNER=${BASE_OWNER:-unknown}\\nexport FORK_OWNER=${FORK_OWNER:-unknown}\\nexport GITHUB_ACTOR=${GITHUB_ACTOR:-unknown}\\nexport GITHUB_EVENT_NAME=${GITHUB_EVENT_NAME:-unknown}',language:\"Markdown\"})})}),/*#__PURE__*/e(\"blockquote\",{children:/*#__PURE__*/t(\"p\",{children:[\"\uD83D\uDCA1 Please note that \",/*#__PURE__*/e(\"code\",{children:\"runme env store ...\"}),\" features are only available with the \",/*#__PURE__*/e(o,{href:\"https://docs.runme.dev/installation/vscode#bleeding-edge-features\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Runme Extension's pre-release version\"})}),\".\"]})}),/*#__PURE__*/e(\"p\",{children:\"Runme, as Dagger\u2019s frontend, will resolve the Environment when a session is first created, typically at startup. Running pipelines locally, it\u2019s simple to check if they are on the right track:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"251\",src:\"https://framerusercontent.com/images/uWI6kLQA2v9P1UoNkgS189hryj0.png\",srcSet:\"https://framerusercontent.com/images/uWI6kLQA2v9P1UoNkgS189hryj0.png?scale-down-to=512 512w,https://framerusercontent.com/images/uWI6kLQA2v9P1UoNkgS189hryj0.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/uWI6kLQA2v9P1UoNkgS189hryj0.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/uWI6kLQA2v9P1UoNkgS189hryj0.png 2910w\",style:{aspectRatio:\"2910 / 502\"},width:\"1455\"}),/*#__PURE__*/t(\"p\",{children:[\"The value \",/*#__PURE__*/e(\"code\",{children:\"unknown\"}),\" is expected for GHA metadata when running outside of GitHub Actions. However, \",/*#__PURE__*/e(\"code\",{children:\"RUNME_TEST_TOKEN\"}),\" is unset, which will cause integration tests to fail.\"]}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"248\",src:\"https://framerusercontent.com/images/VucC7Ap1uYNlN58P6Gz2Qhvfa84.png\",srcSet:\"https://framerusercontent.com/images/VucC7Ap1uYNlN58P6Gz2Qhvfa84.png?scale-down-to=512 512w,https://framerusercontent.com/images/VucC7Ap1uYNlN58P6Gz2Qhvfa84.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/VucC7Ap1uYNlN58P6Gz2Qhvfa84.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/VucC7Ap1uYNlN58P6Gz2Qhvfa84.png 2910w\",style:{aspectRatio:\"2910 / 496\"},width:\"1455\"}),/*#__PURE__*/t(\"p\",{children:[\"Fixing the token locally is easy. Add the static value (hiding .env from readers for obvious reasons) into an \",/*#__PURE__*/e(\"code\",{children:\".env\"}),\" or \",/*#__PURE__*/e(\"code\",{children:\".env.local\"}),\" file and reset the session.\"]}),/*#__PURE__*/e(\"h4\",{children:\"Orchestrating the Pipeline with GitHub Actions\"}),/*#__PURE__*/t(\"p\",{children:[\"At Stateful/Runme, we are still using GitHub Actions to \",/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/vscode-runme/blob/16035ce0da072a6ae4e2e69a00569cb1a25b5cdc/.github/workflows/pipeline.yml#L27-L49\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"run the pipeline\"})}),\", which comes with a feature to manage secrets. GitHub Action\u2019s role here is limited to scheduling and orchestration. If you ask me, I would rather use the Owl Store and Workload Identity to manage configurations and secrets for Environments. However, one thing at a time.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'[...]\\n- name: Install direnv\\n run: curl -fsSL https://direnv.net/install.sh | bash\\n- name: Authorize direnv\\n run: direnv allow && direnv export bash\\n- name: Setup Dagger\\n uses: dagger/dagger-for-github@8.0.0\\n with:\\n version: \"latest\"\\n verb: core\\n args: \"engine local-cache\"\\n- name: \uD83E\uDDEA Run Unit + Integration Pipeline\\n uses: stateful/runme-action@v2\\n with:\\n workflows: test:pipeline\\n env:\\n DAGGER_CLOUD_TOKEN: ${{ secrets.DAGGER_CLOUD_TOKEN }}\\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\\n RUNME_TEST_TOKEN: ${{ secrets.RUNME_TEST_TOKEN }}\\n # gha job metadata\\n BASE_OWNER: ${{ github.repository_owner }}\\n FORK_OWNER: ${{ github.event.pull_request.head.repo.owner.login }}\\n GITHUB_ACTOR: ${{ github.actor }}\\n GITHUB_EVENT_NAME: ${{ github.event_name }}\\n[...]',language:\"Markdown\"})})}),/*#__PURE__*/t(\"p\",{children:[\"Looking at the stripped down YAML, this workflow runs a cell/task named \",/*#__PURE__*/e(\"code\",{children:\"test:pipeline\"}),\". It's essentially an alias for running our two testing nouns (i.e., \",/*#__PURE__*/e(\"code\",{children:\"$ runme run UnitTests GhaIntegrationTests\"}),\"). The latter additionally \",/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/vscode-runme/blob/main/dagger/BUILD.md#testing\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"passes GitHub Actions metadata\"})}),\" (toggling checks on PRs) into the integration test suite.\"]}),/*#__PURE__*/e(\"h4\",{children:\"Add a Window Into the E2E Integration Test Suite\"}),/*#__PURE__*/t(\"p\",{children:['To further illustrate the \"Nouns and Verbs\" concept, let\u2019s add a new ',/*#__PURE__*/e(\"strong\",{children:\"Noun\"}),\" to, for example, grab the screenshots taken during tests. Add a new \",/*#__PURE__*/e(\"code\",{children:\"IntegrationTestScreenshots\"}),\" that gets hold off the directory containing the WebDriver screenshots after the test suite has run.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'### Exported in runme.dev as IntegrationTestScreenshots\\nExtension | integration-test --runme-test-token RUNME_TEST_TOKEN | directory \"logs/screenshots\" | export /tmp/e2e-screenshots',language:\"Markdown\"})})}),/*#__PURE__*/e(\"p\",{children:\"How exhilarating. Now we have a window into the end-to-end test suite if something were to happen. Here\u2019s one screenshot from one of my recent test suite runs:\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"400\",src:\"https://framerusercontent.com/images/bYL6iiVP8upPkWmUclgH8xXG2pc.png\",srcSet:\"https://framerusercontent.com/images/bYL6iiVP8upPkWmUclgH8xXG2pc.png?scale-down-to=512 512w,https://framerusercontent.com/images/bYL6iiVP8upPkWmUclgH8xXG2pc.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/bYL6iiVP8upPkWmUclgH8xXG2pc.png 1200w\",style:{aspectRatio:\"1200 / 800\"},width:\"600\"}),/*#__PURE__*/e(\"p\",{children:\"While 15 minutes might sound long, at Stateful/Runme, we wouldn\u2019t trade the world for the confidence we gain from the end-to-end test suite. But when it runs and fails, it had better identify a real bug that was introduced, rather than failing due to a side effect in the environment. Dagger's superpower besides caching is that it's simple to run the same pipeline locally, on a VM, or a Codespaces instance to both debug and rule out GitHub Actions being under the weather.\"}),/*#__PURE__*/t(\"p\",{children:[\"If we added the debug flag to \",/*#__PURE__*/e(\"code\",{children:\"Extension | integration-test --debug...\"}),\", we could take advantage of Dagger\u2019s cache even if the tests fail. This is tremendously useful to check screenshots or logs without the delay of re-running the test suite.\"]}),/*#__PURE__*/e(\"p\",{children:\"That being said, I hope you agree that this simple example illustrates how Dagger\u2019s powerful primitives can be leveraged to maintain a first-class Developer Experience, which is both portable, documentation-native, and quick to turn around. That\u2019s a big win compared to legacy CI/CD best practices, where you can\u2019t have all three but are forced to trade off amongst them. Exactly that is what got us at Stateful first excited about Dagger. Now here we are building a Dagger Shell frontend into Runme.\"}),/*#__PURE__*/e(\"h4\",{children:\"Documentation as Software Factory\u2019s Truth\"}),/*#__PURE__*/e(\"p\",{children:\"The build and tests pipelines aren't the end of it. At Stateful we're excited to further reduce coupling of the CNCF Runme project with any single CI/CD provider, such as GitHub Actions, while maintaining a high bar for developer experience in Runme\u2019s Software Factory. With Runme as a Dagger Shell frontend, the source of truth is always your documentation.\"}),/*#__PURE__*/e(\"p\",{children:\"The team's happy to have derisked Runme's migration to Dagger-powered CI/CD by tackling the bulkiest workflows first:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Building all Artifacts, and\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Running Unit and Integration Tests\"})})]}),/*#__PURE__*/e(\"p\",{children:\"Now that we have the Delivery 'Nouns and Verbs' in their respective Dagger modules, it\u2019s a matter of stringing them together differently depending on what a pipeline's goal is. Next up for the Runme project are three concrete projects:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Optimize file system dependencies (legacy from pre-container) in E2E tests to reduce inherent brittleness, resulting in fewer retries due to flakes.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Run goreleaser in the Dagger pipeline to release official builds for Runme CLI/kernel.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Migrate the \",/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/vscode-runme/actions/runs/14499512930\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"release pipeline\"})}),\" to test, build extensions for the entire OS and architecture matrix, and upload artifacts to OpenVSX and the VS Code Marketplace.\"]})})]}),/*#__PURE__*/e(\"h4\",{children:\"What\u2019s Next\"}),/*#__PURE__*/t(\"p\",{children:[\"Thank you for taking a break from the AI news buzz to delve into what we're up to with Runme and Dagger. I am both incredibly grateful for the opportunity to guest contribute to Dagger's blog and love everything about the ecosystem Dagger is building. Check out the \",/*#__PURE__*/e(o,{href:\"https://docs.runme.dev/guide/dagger\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Runme for Dagger guide\"})}),\" in the docs for more details. If you have any questions, feel free to find Sebastian on \",/*#__PURE__*/e(o,{href:\"https://discord.gg/runme\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Runme's Discord server\"})}),\" (aka 'sourishkrout') or \",/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/runme/issues/new\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"create a GitHub issue\"})}),\".\"]}),/*#__PURE__*/t(\"p\",{children:[\"By the way, it's super easy to get started with Dagger Shell inside of Runme, just create a file, e.g., called \",/*#__PURE__*/e(\"code\",{children:/*#__PURE__*/e(o,{href:\"https://github.com/runmedev/vscode-runme/blob/main/dagger/notebook/shell.dag\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"shell.dag\"})})}),\", where the Runme extension will auto-select Dagger Shell as your preferred notebook shell.\"]}),/*#__PURE__*/e(\"p\",{children:\"Bye-bye for now.\"})]});export const richText6=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"AI-generated code is blasting through your software delivery workflows like water from a firehose. And those CI/CD systems you've carefully built, held together by complex YAML and brittle scripts, are starting to crack under the pressure. Right about now you might be wondering how \",/*#__PURE__*/e(\"em\",{children:\"you\"}),\" could use AI to not just keep pace but embrace the firehose and keep shipping great software. We\u2019ve been wondering the same\u2026\"]}),/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"Today, we're extending the Dagger engine with native Large Language Models (LLM) and tool use.\"}),\" This means you can build AI-powered automation \u2014\\xa0or agents, if you prefer \u2014 directly into your software delivery workflows. Think AI-driven tests, intelligent deployment gates, or agents fixing code while you sleep.\"]}),/*#__PURE__*/t(\"p\",{children:[\"(Want to jump right in? \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/quickstart/agent/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Go straight to the quickstart.\"})}),\")\"]}),/*#__PURE__*/e(\"h2\",{children:\"LLM: The new software primitive\"}),/*#__PURE__*/t(\"p\",{children:[\"In Dagger, fundamental tools like containers or Git repositories aren't just external things you call; they are programmable building blocks you define, combine, and use directly in your code or command line. We see LLMs as the next essential building block for modern software. So we made LLM a native component inside Dagger. That means you can now make LLM an active participant in your workflow, capable of interacting with and even \",/*#__PURE__*/e(\"em\",{children:\"producing\"}),\" other building blocks.\"]}),/*#__PURE__*/t(\"p\",{children:[\"You configure your model (OpenAI, Anthropic, Google, Ollama etc), chain operations like \",/*#__PURE__*/e(\"code\",{children:\".WithPrompt(...)\"}),\" to give it tasks (like analyzing code or generating documentation), and connect its inputs/outputs within your existing Dagger workflows.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'// Example: Basic chaining with LLM object in Go\\n// Start with the LLM primitive\\nanalysisResult, err := dag.LLM().\\n\\n    // Provide its controlled environment & tools               \\n    WithEnv(agentEnv).     \\n                      \\n    // Give it instructions\\n    WithPrompt(\"Analyze the code...\").         \\n\\n    // Kick off the agent loop\\n    Loop().\\n\\n    // Get the resulting environment    \\n    Env().                        \\n\\n    // Extract the output\\n    Output(\"analysis_result\").AsString(ctx)    ',language:\"JSX\"})})}),/*#__PURE__*/t(\"p\",{children:[\"To give your \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" interaction its specific world \u2014 the data, tools, and guardrails it needs \u2014 you use \",/*#__PURE__*/e(\"code\",{children:\".WithEnv(...)\"}),\". This attaches an environment definition (\",/*#__PURE__*/e(\"code\",{children:\"Env\"}),\" object) created in your code. You specify exactly what inputs it gets (e.g., a source code \",/*#__PURE__*/e(\"code\",{children:\"Directory\"}),\", a base \",/*#__PURE__*/e(\"code\",{children:\"Container\"}),\" for building software, API secrets) and what outputs to expect (like a generated report \",/*#__PURE__*/e(\"code\",{children:\"File\"}),\" or a modified \",/*#__PURE__*/e(\"code\",{children:\"Container\"}),\"). Any Dagger objects added to this environment automatically expose their functions as tools the LLM can use; give it a \",/*#__PURE__*/e(\"code\",{children:\"Container\"}),\", and it gets scoped to running commands \",/*#__PURE__*/e(\"em\",{children:\"only\"}),\" inside that container. This code-defined sandbox gives you precise control over the AI's capabilities.\"]}),/*#__PURE__*/t(\"p\",{children:[\"Building these AI capabilities often means tuning prompts and seeing how the LLM actually uses the tools. The Dagger CLI & \",/*#__PURE__*/e(o,{href:\"https://dagger.io/blog/a-shell-for-the-container-age-introducing-dagger-shell\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Shell\"})}),\" streamline this significantly. Prompt Mode (just type \",/*#__PURE__*/e(\"code\",{children:\">\"}),\") lets you chat directly with the LLM \",/*#__PURE__*/e(\"em\",{children:\"inside\"}),\" the \",/*#__PURE__*/e(\"code\",{children:\"Env\"}),\" sandbox you've defined.\"]}),/*#__PURE__*/e(\"video\",{autoPlay:!0,className:\"framer-image\",loop:!0,muted:!0,playsInline:!0,src:\"https://framerusercontent.com/assets/58dPxgT4SpY3yfIqXm9aiIph0eY.mp4\"}),/*#__PURE__*/e(\"p\",{children:\"As you interact, you get real-time visibility. See the prompts, replies, the exact Dagger functions (tools) the agent calls, arguments used, and resulting state changes in the environment. This built-in observability makes debugging agent logic much easier than piecing together scattered logs.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"950\",src:\"https://framerusercontent.com/images/cEkF6DchJSxxtSpVLPRe9PhkxUA.png\",srcSet:\"https://framerusercontent.com/images/cEkF6DchJSxxtSpVLPRe9PhkxUA.png?scale-down-to=512 512w,https://framerusercontent.com/images/cEkF6DchJSxxtSpVLPRe9PhkxUA.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/cEkF6DchJSxxtSpVLPRe9PhkxUA.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/cEkF6DchJSxxtSpVLPRe9PhkxUA.png 2816w\",style:{aspectRatio:\"2816 / 1900\"},width:\"1408\"}),/*#__PURE__*/t(\"p\",{children:[\"When you use the \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" object into your Dagger workflow, its interactions and any tool-use it triggers execute on the Dagger Runtime. There, everything is containerized for isolation and predictability. Dagger calls the LLM, letting it use the provided tools (Dagger Functions) to work towards the goal set in your prompt. This managed execution enables the LLM to perform complex tasks that might require multiple tool interactions or steps \u2014 the agent loop. Imagine tasks like analyzing dependencies or generating test cases based on code changes.\"]}),/*#__PURE__*/e(\"p\",{children:\"These operations also inherit the benefits of the Dagger engine: You get fast, efficient execution thanks to parallelism and automatic caching; your AI automation runs consistently everywhere and is portable to any OCI-compatible environment; and critically, they become composable parts you can reuse and share.\"}),/*#__PURE__*/t(\"p\",{children:[\"Basically, Dagger lets you treat LLMs as programmable primitives that could be chained with other software primitives to build powerful, autonomous, and containerized workflows. You build AI capabilities \",/*#__PURE__*/e(\"em\",{children:\"as code\"}),\", iterate quickly using interactive tools with clear observability, and run them anywhere.\\xa0\"]}),/*#__PURE__*/e(\"h2\",{children:\"See it in action\"}),/*#__PURE__*/e(\"p\",{children:\"Let's see how this looks in practice by building an AI code review agent directly into a Dagger workflow:\"}),/*#__PURE__*/e(\"video\",{autoPlay:!0,className:\"framer-image\",loop:!0,muted:!0,playsInline:!0,src:\"https://framerusercontent.com/assets/lREwDkFEpS5mMEqJESGJjdGEvo0.mp4\"}),/*#__PURE__*/e(\"p\",{children:\"Or the same with Go:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'package main\\n\\nimport (\\n\t\"context\"\\n\t\"dagger/code-analyzer/internal/dagger\"\\n)\\n\\ntype CodeAnalyzer struct{}\\n\\n// Analyzes code quality using an LLM within a defined environment.\\n// Example usage: dagger -c \\'analyze https://github.com/dagger/hello-dagger\\'\\nfunc (m *CodeAnalyzer) Analyze(ctx context.Context, src *dagger.Directory) (string, error) {\\n\t// 1. Configure agent environment\\n\tagentEnv := dag.Env().\\n\t\tWithDirectoryInput(\\n\t\t\t\"code_dir\",\\n\t\t\tsrc,\\n\t\t\t\"Source code to review\",\\n\t\t).\\n\t\tWithStringOutput(\\n\t\t\t\"analysis_result\",\\n\t\t\t\"Code review analysis report\",\\n\t\t)\\n\\n\t// 2. Configure agent LLM\\n\tagent := dag.LLM().\\n\t\tWithPrompt(\"You\\'re a code reviewer. Focus on clarity, potential bugs, and best practices.\").\\n\t\tWithEnv(agentEnv)\\n\\n\t// 3. Execute agent loop and retrieve modified environment\\n\tresultEnv := agent.\\n\t\tLoop().\\n\t\tEnv()\\n\\n\t// 4. Return the string result from the \"analysis_result\" output variable.\\n\treturn resultEnv.\\n\t\tOutput(\"analysis_result\").\\n\t\tAsString(ctx)\\n}',language:\"JSX\"})})}),/*#__PURE__*/t(\"p\",{children:[\"Both examples run an AI code review agent. First, we define the agent's environment (\",/*#__PURE__*/e(\"code\",{children:\"Env\"}),\"), giving it the source code \",/*#__PURE__*/e(\"code\",{children:\"Directory\"}),\" as input and specifying a string \",/*#__PURE__*/e(\"code\",{children:\"analysis_result\"}),\" as output. This acts as a controlled sandbox.\"]}),/*#__PURE__*/t(\"p\",{children:[\"Then, we configure the \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" object, providing the environment and the prompt instructing it to review the code.\"]}),/*#__PURE__*/t(\"p\",{children:[\"Finally, we execute the agent. The \",/*#__PURE__*/e(\"code\",{children:\"loop()\"}),\" command (in both Shell and Go) runs the core agent loop, allowing the LLM to use available tools (like reading files from the input \",/*#__PURE__*/e(\"code\",{children:\"Directory\"}),\") before producing the final environment containing the review. We then extract the \",/*#__PURE__*/e(\"code\",{children:\"analysis_result\"}),\" string.\"]}),/*#__PURE__*/t(\"p\",{children:[\"The Go version packages this same logic into a \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/api/custom-functions/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"reusable Dagger Function\"})}),\". Thanks to Dagger's cross-language API and type safety, this agent capability is now callable from any Dagger workflow, whether it's written in Go, Python, TypeScript, or another supported language.\"]}),/*#__PURE__*/e(\"h2\",{children:\"Get Started\"}),/*#__PURE__*/e(\"p\",{children:\"The LLM primitive is available starting in Dagger v0.18, and is currently marked as experimental. We welcome feedback and we\u2019re excited to see what you build with it!\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Install with\",/*#__PURE__*/e(\"strong\",{children:\" \"}),/*#__PURE__*/e(\"code\",{children:/*#__PURE__*/e(\"strong\",{children:\"brew install dagger/tap/dagger\"})}),\" or \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/install\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"see docs for installation\"})})]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/quickstart/agent/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Try the Agent Quickstart\"})})})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/examples/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"See more examples in the docs\"})})})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/features/llm/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Read the docs for the LLM functionality\"})})})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(o,{href:\"https://discord.com/invite/dagger-io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Join the Discord\"})}),\" to ask questions and share your feedback\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(o,{href:\"https://github.com/dagger/dagger\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Star Dagger on GitHub\"})})})})]})]});export const richText7=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/e(\"h4\",{children:\"Stop Fixing CI Failures Manually: Build an AI Agent with Dagger\"}),/*#__PURE__*/t(\"p\",{children:[\"What if your CI pipeline didn't just tell you \",/*#__PURE__*/e(\"strong\",{children:\"what\"}),\" broke, but actually fixed it for you? Imagine pushing a change, seeing a lint error pop up, and moments later, finding a ready-to-commit suggestion right there in your pull request, correcting the mistake. This isn't science fiction; it's achievable today by combining the power of AI agents with the composability of Dagger.\"]}),/*#__PURE__*/e(\"h4\",{children:\"The Familiar Pain of CI Failures\"}),/*#__PURE__*/e(\"p\",{children:\"Continuous Integration (CI) systems are the vigilant gatekeepers of our codebases. They run linters, execute tests, perform security scans, and generally ensure that incoming changes meet the project's standards. We rely on them to catch mistakes before they merge.\"}),/*#__PURE__*/e(\"p\",{children:\"However, when CI flags an issue like a pesky linting violation or a failing test, the burden shifts back to the developer. Even when the error message is clear, the process is often tedious:\"}),/*#__PURE__*/t(\"p\",{children:[\"1.\\xa0 \",/*#__PURE__*/e(\"strong\",{children:\"Read & Understand:\"}),\" Decipher the CI output to pinpoint the exact problem.\"]}),/*#__PURE__*/t(\"p\",{children:[\"2.\\xa0 \",/*#__PURE__*/e(\"strong\",{children:\"Context Switch:\"}),\" Pull the latest changes, switch back to your editor.\"]}),/*#__PURE__*/t(\"p\",{children:[\"3.\\xa0 \",/*#__PURE__*/e(\"strong\",{children:\"Implement Fix:\"}),\" Make the necessary code adjustments.\"]}),/*#__PURE__*/t(\"p\",{children:[\"4.\\xa0 \",/*#__PURE__*/e(\"strong\",{children:\"Commit & Push:\"}),\" Stage the changes and push them back up.\"]}),/*#__PURE__*/t(\"p\",{children:[\"5.\\xa0 \",/*#__PURE__*/e(\"strong\",{children:\"Wait:\"}),\" Watch the CI pipeline run again, hoping for green checks.\"]}),/*#__PURE__*/e(\"p\",{children:\"This cycle consumes valuable time and interrupts development flow. What if we could automate the entire process, directly within CI?\"}),/*#__PURE__*/e(\"h4\",{children:\"Solution: An AI Agent for Automated Fixes\"}),/*#__PURE__*/e(\"p\",{children:\"This post explores an AI agent built with Dagger that automatically addresses linting and test failures within a CI environment. When failures are detected in a pull request, this agent:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Analyzes the failure output.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Uses tools to interact with the project's codebase and test suite.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Iteratively attempts fixes and re-runs tests/linters to validate them.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Generates a code diff containing the validated fixes.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Posts these fixes as \",/*#__PURE__*/e(\"strong\",{children:\"code suggestions\"}),\" directly on the pull request, allowing developers to review and accept them with a single click.\"]})})]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{\"--aspect-ratio\":\"560 / 315\",aspectRatio:\"560 / 315\",height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:NEd4VmDdsxM3StIUbddO/4sbLnuatuUfmOTwFGSJM/YouTube.js:Youtube\",children:t=>/*#__PURE__*/e(r,{...t,play:\"Off\",shouldMute:!0,thumbnail:\"Medium Quality\",url:\"https://www.youtube.com/watch?v=VHUi9ABdASA\"})})}),/*#__PURE__*/e(\"h4\",{children:\"Technical Deep Dive: Building the Agent with Dagger\"}),/*#__PURE__*/e(\"p\",{children:'We could try simply feeding the entire project source and the failure log to a Large Language Model (LLM) and asking it to \"fix the problem.\" However, this approach is often too broad. LLMs can struggle with excessive context or too many possible actions, leading to unreliable or nonsensical results. Conversely, just providing the error message and asking for a code snippet lacks the context and tools needed for the LLM to validate its own suggestions effectively.'}),/*#__PURE__*/e(\"p\",{children:\"The key is finding the right balance: giving the agent enough context and capability without overwhelming it. This is where Dagger shines.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"1. The Core Agent: The `DebugTests` Dagger Function\"})}),/*#__PURE__*/t(\"p\",{children:[\"The heart of the solution is a Dagger Function called \",/*#__PURE__*/e(\"code\",{children:\"DebugTests\"}),\". Instead of giving the LLM free reign over the entire container filesystem, we define a constrained environment focused on the task. This is achieved using a custom Dagger Module within the project, let's call it \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\".\"]}),/*#__PURE__*/t(\"p\",{children:[\"The \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\" module encapsulates the specific actions the agent needs:\"]}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\" \",/*#__PURE__*/e(\"code\",{children:\"ReadFile(path string) (string, error)\"}),\": Reads the content of a specific file.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\" \",/*#__PURE__*/e(\"code\",{children:\"WriteFile(path, content string) error\"}),\": Writes new content to a file.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"code\",{children:\"ListFiles(path string) ([]string, error)\"}),\": Explores the directory structure.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"code\",{children:\"RunTests() (string, error)\"}),\": Executes the project's test suite (or linters) and returns the output.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"code\",{children:\"RunLint() (string, error)\"}),\": Executes the project's linters and returns the output.\"]})})]}),/*#__PURE__*/t(\"p\",{children:[\"Crucially, because \",/*#__PURE__*/e(\"strong\",{children:\"my project is already Daggerized\"}),\", the \",/*#__PURE__*/e(\"code\",{children:\"RunTests\"}),\" and \",/*#__PURE__*/e(\"code\",{children:\"RunLint\"}),\" functions within this \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\" module simply \",/*#__PURE__*/e(\"strong\",{children:\"call the existing Dagger Functions\"}),\" that developers and CI already use! We don't need to reimplement test execution logic for the agent; we just expose the existing Dagger actions as tools.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"2. Creating the Agent Environment\"})}),/*#__PURE__*/t(\"p\",{children:[\"Inside the \",/*#__PURE__*/e(\"code\",{children:\"DebugTests\"}),\" function, we instantiate this \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\" and create a Dagger \",/*#__PURE__*/e(\"code\",{children:\"Environment\"}),\" with it. This \",/*#__PURE__*/e(\"code\",{children:\"Environment\"}),\" effectively exposes the \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\" functions (like \",/*#__PURE__*/e(\"code\",{children:\"ReadFile\"}),\", \",/*#__PURE__*/e(\"code\",{children:\"WriteFile\"}),\", \",/*#__PURE__*/e(\"code\",{children:\"RunTests\"}),\", \",/*#__PURE__*/e(\"code\",{children:\"RunLint\"}),') as \"tools\" that the LLM can call.']}),/*#__PURE__*/t(\"p\",{children:[\"We then provide this \",/*#__PURE__*/e(\"code\",{children:\"Environment\"}),\" to the LLM, along with a carefully crafted prompt. The prompt instructs the LLM on its goal (fix the test/lint failures provided in the initial input), explains the available tools (the \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\" functions), and guides its reasoning process.\"]}),/*#__PURE__*/e(\"p\",{children:\"The agent then operates in a loop:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It receives the initial failure output.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"It uses the \",/*#__PURE__*/e(\"code\",{children:\"ReadFile\"}),\" and \",/*#__PURE__*/e(\"code\",{children:\"ListFiles\"}),\" tools to understand the relevant code.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"It hypothesizes a fix and uses \",/*#__PURE__*/e(\"code\",{children:\"WriteFile\"}),\" to apply it.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"It uses \",/*#__PURE__*/e(\"code\",{children:\"RunTests\"}),\" or \",/*#__PURE__*/e(\"code\",{children:\"RunLint\"}),\" to check if the fix worked.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"If failures persist, it analyzes the new output and repeats the process.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Once all failures are resolved, the agent calculates the diff between the original and modified source code and returns it.\"})})]}),/*#__PURE__*/t(\"p\",{children:[\"The \",/*#__PURE__*/e(\"code\",{children:\"DebugTests\"}),\" function orchestrates this entire interaction, returning the final, validated \",/*#__PURE__*/e(\"code\",{children:\"diff\"}),\".\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"strong\",{children:\"3. CI Integration: From Diff to Pull Request Suggestion\"})}),/*#__PURE__*/t(\"p\",{children:[\"While \",/*#__PURE__*/e(\"code\",{children:\"DebugTests\"}),\" is the core agent logic, a second Dagger Function handles the CI integration. This function is triggered by the CI workflow specifically when the linting or testing stage fails.\"]}),/*#__PURE__*/e(\"p\",{children:\"It performs these steps:\"}),/*#__PURE__*/t(\"ol\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Retrieves the pull request's source code using Dagger's Git capabilities.\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Calls the \",/*#__PURE__*/e(\"code\",{children:\"DebugTests\"}),\" function, passing in the source code and the captured failure output.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Receives the \",/*#__PURE__*/e(\"code\",{children:\"diff\"}),\" containing the fixes from the agent.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Uses the platform's API (e.g., GitHub API) to format and post this \",/*#__PURE__*/e(\"code\",{children:\"diff\"}),\" as code suggestions on the relevant lines within the pull request.\"]})})]}),/*#__PURE__*/e(\"p\",{children:'These aren\\'t just plain comments; they are actionable suggestions tied to specific code lines. The developer can review each change and click \"Commit suggestion\" to apply it directly, streamlining the fix process dramatically.'}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"457\",src:\"https://framerusercontent.com/images/DWRwlyGLQajSxEMyllXJKUhRHJ4.png\",srcSet:\"https://framerusercontent.com/images/DWRwlyGLQajSxEMyllXJKUhRHJ4.png?scale-down-to=512 512w,https://framerusercontent.com/images/DWRwlyGLQajSxEMyllXJKUhRHJ4.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/DWRwlyGLQajSxEMyllXJKUhRHJ4.png 1600w\",style:{aspectRatio:\"1600 / 914\"},width:\"800\"}),/*#__PURE__*/e(\"h4\",{children:\"Summary: Smarter CI with Dagger and AI\"}),/*#__PURE__*/t(\"p\",{children:[\"By leveraging Dagger, we built an AI agent capable of automatically fixing linting and test failures. The key was designing a focused environment using a custom \",/*#__PURE__*/e(\"code\",{children:\"Workspace\"}),\" module, exposing specific capabilities (file I/O, test execution) as tools for the LLM. Because the project's testing and linting were already defined as Dagger Functions, the agent could reuse them directly, showcasing Dagger's power for composition and reuse.\"]}),/*#__PURE__*/e(\"p\",{children:\"Integrating this agent into CI transforms the developer experience. Instead of manually debugging and fixing routine errors, developers receive validated, ready-to-commit suggestions directly in their pull requests. This saves time, reduces context switching, and lets engineers focus on building features, while Dagger and AI handle the corrective busywork.\"}),/*#__PURE__*/t(\"p\",{children:[\"I'm excited to continue exploring this space and would love to hear about your experiences with AI agents in development workflows. Have you implemented similar approaches? What challenges have you encountered? Let's discuss in the \",/*#__PURE__*/e(o,{href:\"https://discord.com/invite/dagger-io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger Discord\"})}),\"! You can check out the code from my demo \",/*#__PURE__*/e(o,{href:\"https://github.com/kpenfound/greetings-api/blob/main/DEBUGGER_AGENT.md\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"here\"})}),\".\\xa0\"]})]});export const richText8=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"We\u2019ve always admired Earthly. Their vision of making CI more developer-friendly through containerized builds and reproducible pipelines was bold, clear, and deeply needed. As \",/*#__PURE__*/e(o,{href:\"https://earthly.dev/blog/shutting-down-earthfiles-cloud/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!0,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Earthly evolves\"})}),\" and concludes their container-native CI business, many teams are now seeking alternatives. \"]}),/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(o,{href:\"https://dagger.io/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger\"})}),\" is a platform that lets you code your software delivery workflows \u2014 environments, builds, tests, deployments, and more \u2014 using standard programming languages like Go, Python, and TypeScript. \"]}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Your pipelines become \",/*#__PURE__*/e(\"strong\",{children:\"just code\"}),\": Testable, versionable, and shareable.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Your builds run \",/*#__PURE__*/e(\"strong\",{children:\"anywhere\"}),\": Locally, in CI, or in Dagger Cloud, ensuring portability.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"You compose your pipeline from \",/*#__PURE__*/e(\"strong\",{children:\"modular functions\"}),\", backed by a powerful container runtime.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"You can \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/api/llm\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"add LLMs\"})}),\" into your workflows for even greater automation.\"]})})]}),/*#__PURE__*/e(\"p\",{children:\"While Dagger isn\u2019t a drop-in replacement for Earthly, it shares similar DNA rooted in containers and developer-centric workflows. For Earthly users looking for a new home, we think you'll love using Dagger and we want to make it easy for you to migrate\u2026\"}),/*#__PURE__*/e(\"h4\",{children:\"Our soft-landing program for Earthly users\"}),/*#__PURE__*/e(\"p\",{children:\"To help smooth the transition, we\u2019re offering Earthly users:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"One year of Dagger Cloud Team at no cost.\"}),\" This includes all the collaboration and CI/CD orchestration features that help teams ship faster, together. Contact \",/*#__PURE__*/e(o,{href:\"mailto:solutions@dagger.io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"solutions@dagger.io\"})}),\" for a unique promo code.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"A hands-on migration workshop.\"}),\" You\u2019ll work with both Dagger engineers and community Earthly experts to map your pipelines, translate them to Dagger Functions, and get confident with the new setup. \",/*#__PURE__*/e(o,{href:\"https://docs.google.com/forms/d/e/1FAIpQLSfSQasudyg_ByYJ6Qxn2XNsj6-koMStFNWghmIS0QJPrK_GxQ/viewform?usp=header\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Complete this form\"})}),\" and we\u2019ll contact you with details about the workshop.\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"strong\",{children:\"A dedicated help forum.\"}),\" Throughout your transition you\u2019ll get support through our \",/*#__PURE__*/e(o,{href:\"https://discord.gg/Z2mfYPyG6Q\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"help forum on Discord\"})}),\". For additional support options contact \",/*#__PURE__*/e(o,{href:\"mailto:solutions@dagger.io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"solutions@dagger.io\"})}),\".\"]})})]}),/*#__PURE__*/t(\"p\",{children:[\"You can also \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/quickstart/ci?utm_campaign=Earthly-Migration&utm_medium=blog\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"start exploring and using Dagger today\"})}),\".\"]}),/*#__PURE__*/e(\"p\",{children:\"We salute the Earthly team for blazing a trail in developer-centric CI, and we welcome all Earthly users with open arms to the Dagger community!\"})]});export const richText9=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"Dagger \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/features/llm\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"natively integrates with LLM\"})}),\"s, making it easy to write AI Agents in just a few lines of code. Though it's easy to run Dagger locally and connect to a remote LLM, sometimes you want to run your models locally. This may be required to work in air-gapped environments, for privacy concerns, or local development.\"]}),/*#__PURE__*/t(\"p\",{children:[\"But when it's time to run models locally, developers have to deal with local setup and management using unfamiliar tools. Enter \",/*#__PURE__*/e(o,{href:\"https://docs.docker.com/desktop/features/model-runner/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!0,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Docker Model Runner\"})}),\", a new solution for easily setting up and running popular models in your local development environment that was \",/*#__PURE__*/e(o,{href:\"https://www.docker.com/blog/introducing-docker-model-runner/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!0,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"announced today\"})}),\".\"]}),/*#__PURE__*/e(\"h4\",{children:\"Why Docker Model Runner?\"}),/*#__PURE__*/e(\"h5\",{children:\"Familiar to Docker users:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Just like you download your container images with \",/*#__PURE__*/e(\"code\",{children:\"docker pull\"}),\", you can now download models with \",/*#__PURE__*/e(\"code\",{children:\"docker model pull\"})]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"You run containers with \",/*#__PURE__*/e(\"code\",{children:\"docker run\"}),\", now run your models with \",/*#__PURE__*/e(\"code\",{children:\"docker model run\"})]})})]}),/*#__PURE__*/e(\"h5\",{children:/*#__PURE__*/e(\"strong\",{children:\"Based on common standards\"})}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Models are using the \",/*#__PURE__*/e(o,{href:\"https://github.com/ggml-org/ggml/blob/master/docs/gguf.md\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"GGUF\"})}),\" format\"]})}),/*#__PURE__*/t(\"li\",{\"data-preset-tag\":\"p\",children:[/*#__PURE__*/t(\"p\",{children:[\"They are packaged as \",/*#__PURE__*/e(o,{href:\"https://github.com/opencontainers/image-spec\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"OCI\"})}),\" artifacts\"]}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It's easy to use, and many tools already handle them\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Any OCI compatible registry can host them\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"It makes it (relatively) easy to push your own models\"})})]})]})]}),/*#__PURE__*/e(\"h5\",{children:/*#__PURE__*/e(\"strong\",{children:\"Curated list of models\"})}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Think Docker Official Images but applied to AI models\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"The models are hosted on the \",/*#__PURE__*/e(o,{href:\"https://hub.docker.com/u/ai\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Hub AI namespace\"})})]})})]}),/*#__PURE__*/e(\"h5\",{children:/*#__PURE__*/e(\"strong\",{children:\"Run natively\"})}),/*#__PURE__*/e(\"ul\",{children:/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"As you might have guessed, Docker Model Runner is not actually running models in containers. They are running natively on your host machine, using the machine's GPU, since performance is key when you are working locally with AI models.\"})})}),/*#__PURE__*/e(\"p\",{children:\"\u26A0\uFE0F Today, Docker Model Runner only runs models on Apple's Metal APIs, meaning you need an Apple Silicon machine. The support might be extended in the future to other hardware.\"}),/*#__PURE__*/e(\"p\",{children:'\uD83D\uDCA1 You need Docker Desktop version 4.40 or later to use Docker Model Runner. Enable the feature in the \"Features in development\" section of the Docker Desktop settings.'}),/*#__PURE__*/e(\"h4\",{children:\"Now we can run models locally, how do we use them with Dagger?\"}),/*#__PURE__*/e(\"p\",{children:\"Since running locally is a Dagger superpower, you just connect the Dagger LLM integration to the local models using a few environment variables. Then you\u2019ll be set up to take advantage of Dagger\u2019s automatic LLM tool calling (MCP) and prompting.\"}),/*#__PURE__*/e(\"p\",{children:\"First, define the base URL to the OpenAI compatible engine:\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"code\",{children:\"export OPENAI_BASE_URL=http://model-runner.docker.internal/engines/llama.cpp/v1/\"})}),/*#__PURE__*/t(\"p\",{children:[\"Then disable streaming of responses from the model since Docker Model Runner uses \",/*#__PURE__*/e(\"code\",{children:\"llama.cpp\"}),\" which currently has some limitations regarding streaming while using tools.\"]}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"code\",{children:\"export OPENAI_DISABLE_STREAMING=true\"})}),/*#__PURE__*/e(\"p\",{children:\"Optionally, you can define the default model to use:\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"code\",{children:\"export OPENAI_MODEL=index.docker.io/ai/qwen2.5:7B-F16\"})}),/*#__PURE__*/t(\"p\",{children:[\"\u26A0\uFE0FThese models can be quite large (the model above is about 14 GB), so you may want to \",/*#__PURE__*/e(\"code\",{children:\"docker model pull\"}),\" the model before using it with \",/*#__PURE__*/e(\"code\",{children:\"dagger\"}),\". \"]}),/*#__PURE__*/t(\"p\",{children:[\"Even if you define a default model, you can override it when accessing the \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" object in Dagger.\"]}),/*#__PURE__*/e(\"p\",{children:\"Now you are all set up, it's time to run dagger with a local model using Docker Model Runner.\"}),/*#__PURE__*/t(\"p\",{children:[\"For this example, we\u2019ll use Dagger Shell and ask the \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" to create some super simple ascii art, some smileys.  We prepare an \",/*#__PURE__*/e(\"code\",{children:\"env\"}),\" for the \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" with an \",/*#__PURE__*/e(\"code\",{children:'\"empty\"'}),\" Dagger \",/*#__PURE__*/e(\"code\",{children:\"Directory\"}),\" object as input that returns a \",/*#__PURE__*/e(\"code\",{children:'\"full\"'}),\" \",/*#__PURE__*/e(\"code\",{children:\"Directory\"}),\" containing the requested ascii art \",/*#__PURE__*/e(\"code\",{children:\"File\"}),\" objects as output. We then pass the \",/*#__PURE__*/e(\"code\",{children:\"env\"}),\" to the \",/*#__PURE__*/e(\"code\",{children:\"LLM\"}),\" object, provide a prompt, and collect the results.\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'$ dagger\\n\\n\u22C8 llm | model\\nindex.docker.io/ai/qwen2.5:7B-F16\\n\\n\u22C8 myenv=$(env |\\n    with-directory-input \"empty\" $(directory) \"empty directory to add new files to\" |\\n    with-directory-output \"full\" \"a directory containing the ascii art files\")\\n\\n  llm |\\n    with-env $myenv |\\n    with-prompt \"start with empty, add 2 new smiley-themed pieces of ascii art, return as full\" |\\n    env |\\n    output \"full\" |\\n    as-directory |\\n    terminal',language:\"Shell\"})})}),/*#__PURE__*/t(\"p\",{children:[\"As the last step of the chain above, we attach a terminal to the returned \",/*#__PURE__*/e(\"code\",{children:'\"full\"'}),\" directory to inspect the files. You might see something like this:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"dagger /src $ ls\\nsmiley1.txt  smiley2.txt\\n\\ndagger /src $ cat *\\n:);)\",language:\"Shell\"})})}),/*#__PURE__*/t(\"p\",{children:[\"Because everything is typed and cached, we can run something like this to get the contents of one of the \",/*#__PURE__*/e(\"code\",{children:\"File\"}),\" objects right from the cache:\"]}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:'\u22C8 llm |\\n  with-env $myenv |\\n  with-prompt \"start with empty, add 2 new smiley-themed pieces of ascii art, return as full\" |\\n  env | output \"full\" | as-directory | file smiley1.txt | contents\\n\\n:)',language:\"Shell\"})})}),/*#__PURE__*/e(\"p\",{children:\"Now, you can use Dagger to create your own local AI agents, and use Docker Model Runner to run your models locally.\"}),/*#__PURE__*/t(\"p\",{children:[\"To go deeper, check out the \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/quickstart/agent\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!0,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger docs\"})}),\" and join us all on \",/*#__PURE__*/e(o,{href:\"https://discord.gg/dagger-io\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!0,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Discord\"})}),\"!\"]})]});export const richText10=/*#__PURE__*/t(a.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"The Unix shell is over 50 years old, but it still defines how programmers use their computers. We type a few words in a terminal, and milliseconds later an ephemeral factory comes online: the Unix pipeline. Data streams through a network of simple programs working concurrently, like robots on the factory floor, executing a computational choreography we composed seconds ago. Its job done, the factory vanishes. Onto the next command. That loop built the internet, and still runs it today.\"}),/*#__PURE__*/e(\"p\",{children:\"The design principles of Unix are timeless: write simple programs, compose them with standard interfaces. But 50 years is a long time\u2026 the software stack has expanded, and Unix interfaces are buried under layers of abstraction. We still use the shell, but it\u2019s no longer the universal composition system it was meant to be. What if we changed that?\"}),/*#__PURE__*/e(\"p\",{children:\"What if the Unix shell took the best ideas from docker, make, powershell and nix? Native support for primitives like containers, secrets and service endpoints; typed objects; declarative execution; content-addressed artifacts; everything sandboxed and cached by default. What if those all became standard shell features, available with standard shell syntax, and backed by a modern API? Would we still need to learn a dozen DSLs to automate the basic tasks of shipping software? Or would the complexity of the modern software stack melt away, leaving only two fundamental elements: shell and code? Let\u2019s find out!\"}),/*#__PURE__*/t(\"p\",{children:[\"Today we\u2019re introducing Dagger Shell: a bash syntax frontend for our state-of-the-art runtime and composition system, the Dagger Engine. Use it for builds, tests, ephemeral environments, deployments, or any other task you want to automate from the terminal. It\u2019s also a great way to \",/*#__PURE__*/e(o,{href:\"https://x.com/solomonstre/status/1895671390176747682\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"compose AI agents\"})}),\"\u2026but more on that later.\"]}),/*#__PURE__*/t(\"p\",{children:[\"To get started, just \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/install\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"install the latest version of Dagger\"})}),\", and type \",/*#__PURE__*/e(\"code\",{children:\"dagger\"}),\". Or keep reading for examples.\"]}),/*#__PURE__*/e(\"h4\",{children:\"A complement to your system shell\"}),/*#__PURE__*/e(\"p\",{children:\"Dagger Shell isn\u2019t meant to replace your system shell, but to complement it. When a workflow is too complex to fit in a regular shell, the next available option is often a brittle monolith: not as simple as a shell script, not as robust as full-blown software. The Dagger Shell aspires to help you replace that monolith with a collection of simple modules, composed with standard interfaces.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"container |\\n  from alpine |\\n  with-exec apk add git |\\n  terminal\",language:\"Shell\"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"452\",src:\"https://framerusercontent.com/images/XH95QDMWgq7HcdaYmJUjMGTBj34.gif\",style:{aspectRatio:\"1500 / 904\"},width:\"750\"}),/*#__PURE__*/e(\"h4\",{children:/*#__PURE__*/e(\"strong\",{children:\"Shell and code are all you need\"})}),/*#__PURE__*/e(\"p\",{children:\"When a script becomes too complex and outgrows the shell syntax, why learn a weird DSL when you can write real code?\"}),/*#__PURE__*/e(\"p\",{children:\"Unix was built on the twin pillars of its shell and C programming environment. Dagger follows the same model, with SDKs available for Go, Python, Typescript, Java and PHP. Pick a language, write a function\u2026Congratulations, you just extended Dagger with your own primitive! No matter how complex your system, you should only ever need two building blocks: shell and code.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"256\",src:\"https://framerusercontent.com/images/XzKufwbAdlU0AdzOmCafaNvnS8.png\",style:{aspectRatio:\"1500 / 512\"},width:\"750\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"205\",src:\"https://framerusercontent.com/images/IWYAReQkyuqaRLUw1bty3xVTY.png\",style:{aspectRatio:\"1499 / 411\"},width:\"749\"}),/*#__PURE__*/e(\"h4\",{children:/*#__PURE__*/e(\"strong\",{children:\"Shell, meet API\"})}),/*#__PURE__*/t(\"p\",{children:[\"Dagger Shell is just another Dagger API client, giving you typed objects, built-in documentation, and access to a \",/*#__PURE__*/e(o,{href:\"https://daggerverse.dev/\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"cross-language ecosystem of reusable modules\"})}),\".\"]}),/*#__PURE__*/t(\"p\",{children:[\"That\u2019s right, Dagger Shell can load any of the thousands of modules in the Daggerverse, inspect their API, and run their functions. Here we explore a \",/*#__PURE__*/e(o,{href:\"https://daggerverse.dev/mod/github.com/jpadams/daggerverse/trivy\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Trivy module\"})}),\":\"]}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"344\",src:\"https://framerusercontent.com/images/AFe3wlbkkncUQgak0QOtYVgc.gif\",style:{aspectRatio:\"1500 / 689\"},width:\"750\"}),/*#__PURE__*/e(\"h4\",{children:/*#__PURE__*/e(\"strong\",{children:\"Sandboxed by default\"})}),/*#__PURE__*/e(\"p\",{children:\"Dagger Shell commands run as sandboxed functions, accessing host resources (files, secrets, services) only when explicitly provided as arguments.\"}),/*#__PURE__*/e(\"p\",{children:\"This can make commands slightly more verbose, but also more repeatable, giving you confidence to iterate quickly without second-guessing.\"}),/*#__PURE__*/e(\"p\",{children:\"For example, here\u2019s a dev environment using a secret, local directory, and database access:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"container |\\n  from alpine |\\n  with-secret-variable POSTGRES_PASSWORD op://dev/db-password/credential |\\n  with-directory /src ~/src/myapp |\\n  with-service-binding db tcp://localhost:5432 |\\n  terminal\",language:\"Shell\"})})}),/*#__PURE__*/e(\"h4\",{children:/*#__PURE__*/e(\"strong\",{children:\"Simple container build\"})}),/*#__PURE__*/e(\"p\",{children:\"This creates an Alpine container, drops in a text file with your message, sets it to display that message when run, and publishes it to a temporary registry. All in one pipeline - no context switching between Dockerfile creation, build commands, and registry pushes.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"344\",src:\"https://framerusercontent.com/images/TeLBJhuROM3rJ5SOUrl07nl59QM.gif\",style:{aspectRatio:\"1500 / 689\"},width:\"750\"}),/*#__PURE__*/e(\"h4\",{children:/*#__PURE__*/e(\"strong\",{children:\"Test environments\"})}),/*#__PURE__*/e(\"p\",{children:\"A common problem in CI is creating ephemeral test environments: you need to containerize the software being tested, and connect it to its dependencies. Dagger makes this easy with native support for service bindings.\"}),/*#__PURE__*/e(\"p\",{children:\"For example, let\u2019s create an environment with several live instances of the Dagger docs hooked up, and \u201Ctest\u201D them with curl.\"}),/*#__PURE__*/e(\"p\",{children:\"This also highlights how third-party modules can be seamlessly mixed and matched.\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"# Build a wolfi linux container with curl, then test connection to stable and dev docs\\ngithub.com/dagger/dagger/modules/wolfi | container --packages=curl |\\n  with-service-binding docs-stable $(github.com/dagger/dagger/docs@v0.17.1 | server) |\\n  with-service-binding docs-dev $(github.com/dagger/dagger/docs@main | server) |\\n  with-exec curl http://docs-stable |\\n  with-exec curl http://docs-dev\",language:\"Shell\"})})}),/*#__PURE__*/e(\"h4\",{children:/*#__PURE__*/e(\"strong\",{children:\"Multi-Stage Builds\"})}),/*#__PURE__*/e(\"p\",{children:\"Implement complex build workflows with clear, modular syntax. Maintain visibility and control over each stage of your pipeline. Save and reuse parts of your pipeline. Why juggle between editing Dockerfiles, running build and push commands, when you can do it all in one go?\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"repo=$(git https://github.com/dagger/hello-dagger | head | tree)\\n\\nenv=$(container | from node:23 | with-directory /app $repo | with-workdir /app)\\n\\nbuild=$($env | with-exec npm install | with-exec npm run build | directory ./dist)\\n\\ncontainer | from nginx | with-directory /usr/share/nginx/html $build | terminal --cmd=/bin/bash\",language:\"Shell\"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"344\",src:\"https://framerusercontent.com/images/tE3HikgkldkbnnkqBtA9zpxVeas.gif\",style:{aspectRatio:\"1500 / 689\"},width:\"750\"}),/*#__PURE__*/e(\"p\",{children:\"This example pulls source code, creates a Node.js build environment, runs the build process, and packages just the built files into a minimal nginx container. Each stage is a named variable you can inspect, modify, or reuse - the state is explicit, not hidden in layers of a Dockerfile or build cache.\"}),/*#__PURE__*/e(\"p\",{children:\"Get a dev build of Dagger, fresh from our repository:\"}),/*#__PURE__*/e(\"div\",{className:\"framer-text-module\",style:{height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(n,{componentIdentifier:\"module:pVk4QsoHxASnVtUBp6jr/HTBsNkEMAb7TUGaO3DBy/CodeBlock.js:default\",children:t=>/*#__PURE__*/e(s,{...t,code:\"container |\\n  from golang:latest |\\n  with-directory /src $(git https://github.com/dagger/dagger | head | tree) |\\n  with-workdir /src |\\n  with-exec go build ./cmd/dagger |\\n  file ./dagger |\\n  export ./dagger\",language:\"Shell\"})})}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",height:\"344\",src:\"https://framerusercontent.com/images/txHfsn8szyA0OoDpVR9d1ozuRN4.gif\",style:{aspectRatio:\"1500 / 689\"},width:\"750\"}),/*#__PURE__*/e(\"h4\",{children:\"What\u2019s Next?\"}),/*#__PURE__*/t(\"p\",{children:[\"We\u2019d love for you to try out Dagger Shell and share your feedback. Learn more in the \",/*#__PURE__*/e(o,{href:\"https://docs.dagger.io/features/shell\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!0,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\"Dagger Shell documentation\"})}),\", join our\",/*#__PURE__*/e(o,{href:\"https://discord.com/channels/707636530424053791/1318344234511892490\",motionChild:!0,nodeId:\"Px5dOvWXF\",openInNewTab:!1,relValues:[],scopeId:\"contentManagement\",smoothScroll:!1,children:/*#__PURE__*/e(i.a,{children:\" Discord\"})}),\" and let us know how Dagger Shell improves your development workflow!\"]}),/*#__PURE__*/e(\"p\",{children:\"Happy hacking! \uD83D\uDE80\"})]});\nexport const __FramerMetadata__ = {\"exports\":{\"richText5\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText8\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText1\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText9\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText4\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText7\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText10\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText2\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText3\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"richText6\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "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",
  "names": ["richText", "u", "x", "p", "Link", "motion", "richText1", "ComponentPresetsConsumer", "t", "CodeBlock_default", "richText2", "richText3", "richText4", "richText5", "richText6", "richText7", "Youtube", "richText8", "richText9", "richText10", "__FramerMetadata__"]
}
