{"id":3029,"date":"2025-12-11T14:25:38","date_gmt":"2025-12-11T14:25:38","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/12\/11\/breaking-free-from-ai-vendor-lock-in-integrating-github-models-with-docker-cagent\/"},"modified":"2025-12-11T14:25:38","modified_gmt":"2025-12-11T14:25:38","slug":"breaking-free-from-ai-vendor-lock-in-integrating-github-models-with-docker-cagent","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/12\/11\/breaking-free-from-ai-vendor-lock-in-integrating-github-models-with-docker-cagent\/","title":{"rendered":"Breaking Free From AI Vendor Lock-in: Integrating GitHub Models with Docker cagent"},"content":{"rendered":"<p>The landscape of AI development is rapidly evolving, and one of the most exciting developments in 2025 from Docker is the release of Docker cagent. cagent is Docker\u2019s open-source multi-agent runtime that orchestrates AI agents through declarative YAML configuration. Rather than managing Python environments, SDK versions, and orchestration logic, developers define agent behavior in a single configuration file and execute it with \u201ccagent run\u201d.<\/p>\n<p>In this article, we\u2019ll explore how cagent\u2019s integration with GitHub Models delivers true vendor independence, demonstrate building a real-world podcast generation agent that leverages multiple specialized sub-agents, and show you how to package and distribute your AI agents through Docker Hub. By the end, you\u2019ll understand how to break free from vendor lock-in and build AI agent systems that remain flexible, cost-effective, and production-ready throughout their entire lifecycle.<\/p>\n<h2 class=\"wp-block-heading\"><strong>What is Docker cagent?<\/strong><\/h2>\n<p><strong>cagent <\/strong>is Docker\u2019s open-source multi-agent runtime that orchestrates AI agents through declarative YAML configuration. Rather than managing Python environments, SDK versions, and orchestration logic, developers define agent behavior in a single configuration file and execute it with \u201ccagent run\u201d.\u00a0<\/p>\n<p>Some of the key features of Docker cagents:<\/p>\n<ol class=\"wp-block-list\">\n<li>Declarative YAML Configuration: single-file agent definitions with model configuration, clear instructions, tool access, and delegation rules to interact and coordinate with sub-agents<\/li>\n<li>Multi-Provider Support: OpenAI, Anthropic, Google Gemini, and Docker Model Runner (DMR) for local inference.\u00a0<\/li>\n<li>MCP Integration support: Leverage MCP (Stdio, HTTP, SSE) for connecting external tools and services<\/li>\n<li>Secured Registry Distribution: Package and share agents securely via Docker Hub using standard container registry infrastructure.<\/li>\n<li>Built-In Reasoning Tools: \u201cthink\u2019, \u201ctodo\u201d and \u201cmemory\u201d capabilities for complex problem solving workflows.<\/li>\n<\/ol>\n<p>The core value proposition is simple: declare what your agent should do, and cagent handles your execution. Each agent operates with isolated context, specialized tools via the Model Context Protocol (MCP), and configurable models. Agents can delegate tasks to sub-agents, creating hierarchical teams that mirror human organizational structures.<\/p>\n<h2 class=\"wp-block-heading\"><strong>What are GitHub Models?<\/strong><\/h2>\n<p>GitHub Models is a suite of developer tools that take you from AI idea to deployment, including a model catalog, prompt management, and quantitative evaluations.GitHub Models provides rate-limited free access to production-grade language models from OpenAI (GPT-4o, GPT-5, o1-preview), Meta (Llama 3.1, Llama 3.2), Microsoft (Phi-3.5), and DeepSeek models.The advantage with GitHub Models are you need to Authenticate only once via GitHub Personal Access Tokens and you can plug and play any models of your choice supported by GitHub Models.<\/p>\n<p>You can browse to GitHub Marketplace at <a href=\"https:\/\/github.com\/marketplace\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/github.com\/marketplace<\/a> to see the list of all models supported. Currently GitHub supports all the popular models and the list continues to grow. Recently, Anthropic Claude models were also added.<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1530877534  fetchpriority=\"high\" decoding=\"async\" width=\"1903\" height=\"941\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/12\/image3-2.png\" class=\"fade-in attachment-full size-full\" alt=\"image3 2\" title=\"- image3 2\" \/>\n    <\/div>\n<p><em>Figure 1.1: GitHub Marketplace displaying list of all models available on the platform<\/em><\/p>\n\n<p>GitHub has designed its platform, including GitHub Models and GitHub Copilot agents, to support production-level agentic AI workflows, offering the necessary infrastructure, governance, and integration points.GitHub Models employs a number of <a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/ai-services\/ai-content-safety\" rel=\"nofollow noopener\" target=\"_blank\">content filters<\/a>. These filters cannot be turned off as part of the GitHub Models experience. If you decide to employ models through <a href=\"https:\/\/aka.ms\/azureai\/github-models\" rel=\"nofollow noopener\" target=\"_blank\">Azure AI <\/a>\u00a0or a paid service, please configure your content filters to meet your requirements.<\/p>\n<p>To get started with GitHub Models, visit <a href=\"https:\/\/docs.github.com\/en\/github-models\/quickstart\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/docs.github.com\/en\/github-models\/quickstart<\/a> which contains detailed quick start guides.\u00a0<\/p>\n<h2 class=\"wp-block-heading\"><strong>Configuring cagent with GitHub Models<\/strong><\/h2>\n<p>GitHub Models OpenAI-compatible API allows straightforward integration with cagent by treating it as a custom OpenAI provider with modified base URL and authentication.<\/p>\n<p>In this article, we will create and deploy a PodCast Generator agent using Github models and show you how easy it is to deploy and share AI agents by deploying it to Docker Hub registry. It is necessary to create a fine-grained personal access token by navigating to this url: <a href=\"https:\/\/github.com\/settings\/personal-access-tokens\/new\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/github.com\/settings\/personal-access-tokens\/new<\/a>\u00a0\u00a0<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=346602923  fetchpriority=\"high\" decoding=\"async\" width=\"1731\" height=\"902\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/12\/image1-2.png\" class=\"fade-in attachment-full size-full\" alt=\"image1 2\" title=\"- image1 2\" \/>\n    <\/div>\n<p><em>Figure 1.2: Generating a new personal access token (PAT) from GitHub developer settings.<\/em><\/p>\n<h3 class=\"wp-block-heading\"><strong>Prerequisites<\/strong><\/h3>\n<ol class=\"wp-block-list\">\n<li>Docker Desktop 4.49+ with MCP Toolkit enabled\u200b<\/li>\n<li>GitHub Personal Access Token with models scope\u200b<\/li>\n<li>Download cagent binary from <a href=\"https:\/\/github.com\/docker\/cagent\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/github.com\/docker\/cagent<\/a> repository. Place it inside the folder <code>C:Dockercagent<\/code>. Run <code>.cagent-exe \u2013help<\/code> to see more options.<\/li>\n<\/ol>\n<h3 class=\"wp-block-heading\"><strong>Define your agent<\/strong><\/h3>\n<p>I will showcase a simple podcast generator agent, which I created months ago during my testing of Docker cagent. This Agent\u2019s purpose is to generate podcasts by sharing blogs\/articles\/youtube videos.<\/p>\n<p>Below Podcastgenerator yaml file describes a sophisticated multi-agent workflow for automated podcast production, leveraging GitHub Models and MCP tools (DuckDuckGo) for external data access. The DuckDuckGo MCP server runs in an isolated Docker container managed by the MCP gateway. To learn more about docker MCP server and MCP Gateway refer to official product documentation at <a href=\"https:\/\/docs.docker.com\/ai\/mcp-catalog-and-toolkit\/mcp-gateway\/\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/docs.docker.com\/ai\/mcp-catalog-and-toolkit\/mcp-gateway\/<\/a>.\u00a0<br \/>The root agent uses sub_agents: [\u201cresearcher\u201d, \u201cscriptwriter\u201d] to create a hierarchical structure where specialized agents handle domain-specific tasks.\u00a0<\/p>\n<h4 class=\"wp-block-heading\"><strong>sunnynagavo55_podcastgenerator.yaml<\/strong><\/h4>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\">\n#!\/usr\/bin\/env cagent run\n\nagents:\n  root:\n    description: \"Podcast Director - Orchestrates the entire podcast creation workflow and generates text file\"\n    instruction: |\n     You are the Podcast Director responsible for coordinating the entire podcast creation process.\n\n      Your workflow:\n      1. Analyze input requirements (topic, length, style, target audience)\n      2. Delegate research to the research agent which can open duck duck go browser for researching\n      3. Pass the researched information to the scriptwriter for script creation\n      4. Output is generated as a text file which can be saved to file or printed out\n      5. Ensure quality control throughout the process\n\n      Always maintain a professional, engaging tone and ensure the final podcast meets broadcast standards.\n    model: github-model\n    toolsets:\n      - type: mcp\n        command: docker\n        args: [\"mcp\", \"gateway\", \"run\", \"--servers=duckduckgo\"]\n    sub_agents: [\"researcher\", \"scriptwriter\"]\n  researcher:\n    model: github-model\n    description: \"Podcast Researcher - Gathers comprehensive information for podcast content\"\n    instruction: |\n      You are an expert podcast researcher who gathers comprehensive, accurate, and engaging information.\n\n      Your responsibilities:\n      - Research the given topic thoroughly using web search\n      - Find current news, trends, and expert opinions\n      - Gather supporting statistics, quotes, and examples\n      - Identify interesting angles and story hooks\n      - Create detailed research briefs with sources\n      - Fact-check information for accuracy\n\n      Always provide well-sourced, current, and engaging research that will make for compelling podcast content.\n    toolsets:\n        - type: mcp\n          command: docker\n          args: [\"mcp\", \"gateway\", \"run\", \"--servers=duckduckgo\"]\n  scriptwriter:\n    model: github-model\n    description: \"Podcast Scriptwriter - Creates engaging, professional podcast scripts\"\n    instruction: |\n      You are a professional podcast scriptwriter who creates compelling, conversational content.\n\n      Your expertise:\n      - Transform research into engaging conversational scripts\n      - Create natural dialogue and smooth transitions\n      - Add hooks, sound bite moments, and calls-to-action\n      - Structure content with clear intro, body, and outro\n      - Include timing cues and production notes\n      - Adapt tone for target audience and podcast style\n      - Create multiple format options (interview, solo, panel discussion)\n\n      Write scripts that sound natural when spoken and keep listeners engaged throughout.\n    toolsets:\n      - type: mcp\n        command: docker\n        args: [\"mcp\", \"gateway\", \"run\", \"--servers=filesystem\"]\nmodels:\n  github-model:\n    provider: openai\n    model: openai\/gpt-5\n    base_url: https:\/\/models.github.ai\/inference\n    env:\n      OPENAI_API_KEY: ${GITHUB_TOKEN} \n\n<\/pre>\n<\/div>\n<p><em><strong>Note:<\/strong> Since we are using DuckDuckGo MCP server, make sure to add and install this MCP server from MCP catalog on your docker desktop<\/em><\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=538798761  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/12\/image4-2.png\"  decoding=\"async\" width=\"1538\" height=\"485\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"fade-in attachment-full size-full\" alt=\"image4 2\" title=\"- image4 2\" \/>\n    <\/div>\n<h3 class=\"wp-block-heading\"><strong>Running your Agent on Local Machine<\/strong><\/h3>\n<p>Make sure to update your GitHub PAT token and Run the below command to run your agent from the root folder where your cagent binaries reside.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\">\ncagent run .\/sunnynagavo55_podcastgenerator.yaml\n\n<\/pre>\n<\/div>\n<h3 class=\"wp-block-heading\"><strong>Pushing your Agent as Docker Image<\/strong><\/h3>\n<p>Run the below command to push your agent as a docker image to your favorite registry to share it with your team.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\">\ncagent push Sunnynagavo55\/Podcastgenerator\n<\/pre>\n<\/div>\n<p>You can see your published images inside your repositories as shown below.\u00a0<\/p>\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=2025021549  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/12\/image2-2.png\"  decoding=\"async\" width=\"1291\" height=\"783\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"fade-in attachment-full size-full\" alt=\"image2 2\" title=\"- image2 2\" \/>\n    <\/div>\n\n<p>Congratulations! Now we have our first AI Agent created using cagent and deployed to Docker Hub.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Pulling your Agent as Docker Image on a different machine<\/strong><\/h3>\n<p>Run the below command to pull your docker image agent, created by your teammate, which gets the agent yaml file and saves it in the current directory.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\">\ncagent pull Sunnynagavo55\/Podcastgenerator\n<\/pre>\n<\/div>\n<p>Alternatively, you can run the same agent directly without pulling the image by using the below command.<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; gutter: false; title: ; notranslate\">\ncagent run Sunnynagavo55\/Podcastgenerator\n<\/pre>\n<\/div>\n<p><strong>Note:<\/strong> Above Podcastgenerator example agent has been added to Docker\/cagent GitHub repository under examples folder. Give it a try and share your experience. <a href=\"https:\/\/github.com\/docker\/cagent\/blob\/main\/examples\/podcastgenerator_githubmodel.yaml\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/github.com\/docker\/cagent\/blob\/main\/examples\/podcastgenerator_githubmodel.yaml<\/a><\/p>\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n<p>The traditional AI development workflow locks you into specific providers, requiring separate API keys, managing multiple billing accounts, and navigating vendor-specific SDKs. cagent with GitHub Models fundamentally changes this equation by combining Docker\u2019s declarative agent framework with GitHub\u2019s unified model marketplace. This integration grants you true vendor independence\u2014a single GitHub Personal Access Token provides access to models from OpenAI, Meta, Microsoft, Anthropic, and DeepSeek, eliminating the friction of managing multiple credentials and authentication schemes.<\/p>\n<p>The future of AI development isn\u2019t about choosing a vendor and committing to their ecosystem. Instead, it\u2019s about building systems flexible enough to adapt as the landscape evolves, new models emerge, and your business requirements change. cagent and GitHub Models make that architectural freedom possible today.<\/p>\n<p>What are you waiting for? Start building now with the power of cagent and GitHub Models and share your story with us.<\/p>\n<h3 class=\"wp-block-heading\"><strong>Resources<\/strong><\/h3>\n<p>To learn more about docker cagent, read the product documentation from <a href=\"https:\/\/docs.docker.com\/ai\/cagent\/\" rel=\"nofollow noopener\" target=\"_blank\">https:\/\/docs.docker.com\/ai\/cagent\/<\/a><\/p>\n<p>For more information about cagent, see the <a href=\"https:\/\/github.com\/docker\/cagent\" rel=\"nofollow noopener\" target=\"_blank\">GitHub repository<\/a>. Give this repository a star and let us know what you build.<\/p>","protected":false},"excerpt":{"rendered":"<p>The landscape of AI development is rapidly evolving, and one of the most exciting developments in 2025 from Docker is [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3030,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-3029","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/3029","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=3029"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/3029\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/3030"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=3029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=3029"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=3029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}