{"id":2205,"date":"2025-11-06T08:19:41","date_gmt":"2025-11-06T16:19:41","guid":{"rendered":"https:\/\/felix-arntz.me\/?p=2205"},"modified":"2025-11-06T08:19:41","modified_gmt":"2025-11-06T16:19:41","slug":"introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents","status":"publish","type":"post","link":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/","title":{"rendered":"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents"},"content":{"rendered":"\n<p>The velocity of innovation in the AI coding agent space is incredible\u2014<a href=\"https:\/\/felix-arntz.me\/blog\/typescript-is-the-new-language-of-the-ai-frontier-and-im-excited\/\">especially in TypeScript<\/a>. Tons of different AI coding agents are being developed across the ecosystem: everything from local CLI agents (like Claude Code and Gemini-CLI), IDEs (like Cursor), and extensions (like Cline) to SaaS agents (like v0 and Bolt) and now open-source coding evaluation harnesses (like the recently released <a href=\"https:\/\/github.com\/vercel\/next-evals-oss\">Next.js Evals<\/a>). These diverse and fast-paced developments, while exciting, are surfacing a fundamental, recurring problem for developers: reinventing the wheel to solve the same infrastructure challenges.<\/p>\n\n\n\n<p>This post introduces my very new, early-stage project, <strong><a href=\"https:\/\/github.com\/felixarntz\/ai-code-agents\">AI Code Agents<\/a><\/strong>, a TypeScript SDK built on top of the <a href=\"https:\/\/ai-sdk.dev\/\">AI SDK<\/a>, specifically to address this technical challenge and foster faster, more efficient iteration across the ecosystem.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">The Problem: Fragmentation and Vendor Lock-in<\/h2>\n\n\n\n<p>Why do we need a TypeScript SDK for coding agents? Let&#8217;s take a closer look at the current status quo. When building an AI agent that explains, reasons about, generates, or executes code, there are several layers of infrastructure to solve, and current approaches are often tightly coupled and inflexible.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A Lack of Modularity Slows Us Down<\/h3>\n\n\n\n<p>In most current coding agent projects, the entire stack\u2014from the LLM communication layer to the tool implementations and the execution environment\u2014is custom-built and tightly bound to a specific provider.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Model Provider Lock-in:<\/strong> Many agents are built around a single provider, making it difficult to switch to a different model (say, trying Anthropic\u2019s latest model instead of an OpenAI one) without extensive refactoring.<\/li>\n\n\n\n<li><strong>Tool Constraints:<\/strong> The implementation of the agent&#8217;s callable functions (its &#8220;tools&#8221;) is frequently built only to satisfy the tool-calling constraints of the single LLM provider.<\/li>\n\n\n\n<li><strong>Proprietary Execution Silos:<\/strong> Tools are typically tied to a single, proprietary code execution environment (e.g. something like <a href=\"https:\/\/e2b.dev\/\">E2B<\/a> or <a href=\"https:\/\/vercel.com\/docs\/vercel-sandbox\">Vercel Sandbox<\/a>). If that environment doesn&#8217;t fit your needs, you&#8217;re forced to rewrite the tools themselves.<\/li>\n<\/ul>\n\n\n\n<p>This leads to a harsh reality: whenever you attempt to switch any of these components, you face reimplementing a substantial part of your agent\u2019s logic. This is wasted effort and a key area ripe for abstraction.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Solution: Environment and Tool Abstraction<\/h2>\n\n\n\n<p>Fortunately, a foundation for solving the LLM communication piece already exists. The <a href=\"https:\/\/ai-sdk.dev\/\">AI SDK by Vercel<\/a> provides a unified API and a proposed standard for communicating with diverse LLM providers.<\/p>\n\n\n\n<p>The <a href=\"https:\/\/github.com\/felixarntz\/ai-code-agents\">AI Code Agents SDK<\/a> is built directly on top of the AI SDK, with a clear and focused objective: to eliminate vendor lock-in by providing a flexible, type-safe framework built on core environment and tool abstractions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Key Architectural Concepts<\/h3>\n\n\n\n<p>The project introduces two core concepts to achieve this flexibility:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Environment Abstraction<\/h4>\n\n\n\n<p>Environments are the sandboxed execution contexts for agents. The SDK provides an interface layer that allows the same tools to run on different environments. This means you write your tools once, and run them anywhere.<\/p>\n\n\n\n<p>Currently, the SDK supports:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>docker<\/code> for containerized environments.<\/li>\n\n\n\n<li><code>node-filesystem<\/code> for Node.js filesystem operations.<\/li>\n\n\n\n<li><code>unsafe-local<\/code> for local development (use with caution!).<\/li>\n\n\n\n<li><code>mock-filesystem<\/code> for testing with no risk of actual filesystem modifications.<\/li>\n<\/ul>\n\n\n\n<p>Planned support for external sandboxes like E2B and Vercel Sandbox will further cement the &#8220;run anywhere&#8221; promise.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">2. Flexible Tool System<\/h4>\n\n\n\n<p>The <a href=\"https:\/\/github.com\/felixarntz\/ai-code-agents\">AI Code Agents SDK<\/a> includes a comprehensive set of built-in file system and command tools, all with strict TypeScript typing and Zod schemas for validation. This guarantees the agent&#8217;s outputs are structurally correct and safe.<\/p>\n\n\n\n<p>Tools, such as <code>read_file<\/code>, <code>write_file<\/code>, and <code>run_command<\/code>, are decoupled from the underlying environment implementation, expecting an instance of any environment as constructor parameter.<\/p>\n\n\n\n<p>While naturally it&#8217;s possible to set up individual tools, the system also introduces &#8220;safety levels&#8221; to set up groups of tools in bulk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>readonly<\/code>: Only safe read operations.<\/li>\n\n\n\n<li><code>basic<\/code>: Allows read and write operations, but prevents deletion or shell commands.<\/li>\n\n\n\n<li><code>all<\/code>: Includes riskier tools, such as <code>delete_file<\/code> and <code>run_command<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Keep in mind that &#8220;riskier&#8221; should be taken with a grain of salt. Every tool that isn&#8217;t readonly carries a certain sense of risk when an LLM can call it. This is why it&#8217;s strongly advised to only run coding agents in sandboxed environments.<\/p>\n\n\n\n<p>You can even define a custom array of tools, or configure specific tools (like <code>write_file<\/code>) to require user approval via a <code>needsApproval<\/code> flag.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A Practical Example of Decoupling<\/h3>\n\n\n\n<p>The true power of this architecture is realized when you can configure an agent to run with different provider models and different execution environments using the same core logic.<\/p>\n\n\n\n<p>Here is a basic code example for what a coding agent working on a WordPress plugin could look like:<\/p>\n\n\n<pre class=\"wp-block-code alignwide\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"TypeScript\" data-shcb-language-slug=\"typescript\"><span><code class=\"hljs language-typescript\"><span class=\"hljs-keyword\">import<\/span> { createCodeAgent, createEnvironment } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'ai-code-agents'<\/span>;\n\n<span class=\"hljs-comment\">\/\/ Create a Docker environment (requires a running container)<\/span>\n<span class=\"hljs-keyword\">const<\/span> environment = createEnvironment(<span class=\"hljs-string\">'docker'<\/span>, {\n  containerId: <span class=\"hljs-string\">'my-container-id'<\/span>,\n  directoryPath: <span class=\"hljs-string\">'wp-content\/plugins\/my-ai-plugin'<\/span>,\n});\n\n<span class=\"hljs-comment\">\/\/ Create an agent with all tools<\/span>\n<span class=\"hljs-keyword\">const<\/span> agent = createCodeAgent({\n  model: <span class=\"hljs-string\">'anthropic\/claude-sonnet-4.5'<\/span>,\n  environment,\n  environmentToolsDefinition: <span class=\"hljs-string\">'all'<\/span>,\n  maxSteps: <span class=\"hljs-number\">10<\/span>,\n  logStep: <span class=\"hljs-function\">(<span class=\"hljs-params\"><span class=\"hljs-params\">log<\/span>: <span class=\"hljs-params\">string<\/span><\/span>) =&gt;<\/span> <span class=\"hljs-built_in\">console<\/span>.log(log),\n});\n\n<span class=\"hljs-comment\">\/\/ Run the agent<\/span>\n<span class=\"hljs-keyword\">const<\/span> result = <span class=\"hljs-keyword\">await<\/span> agent.generate({\n  prompt: <span class=\"hljs-string\">'Add a WordPress settings page for configure AI provider API credentials'<\/span>,\n});\n\n<span class=\"hljs-built_in\">console<\/span>.log(result.text);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">TypeScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">typescript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you wanted to test this agent with another model, it would be as simple as exchanging the <code>model<\/code>, thanks to the AI SDK. And if you wanted to run this on your proprietary Kubernetes sandbox environment, it would be as simple as exchanging the <code>environment<\/code>, thanks to the AI Code Agents SDK.<\/p>\n\n\n\n<p>By abstracting the environment and adhering to the Vercel AI SDK standard, we&#8217;ve enabled this agent to be model-agnostic and easily transition to a secured docker or vercel-sandbox environment with a single configuration change.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Call to Collaborate<\/h2>\n\n\n\n<p>By reducing the amount of &#8220;reinventing the wheel&#8221; required to set up a robust coding agent, we can help the entire TypeScript ecosystem iterate faster. The time saved on infrastructure can be channeled into improving the core reasoning, planning, and evaluation logic that truly defines a superior AI agent.<\/p>\n\n\n\n<p>I encourage any developers interested in the future of modular AI agents to explore the <a href=\"https:\/\/github.com\/felixarntz\/ai-code-agents\">AI Code Agents GitHub repository<\/a>. Keep in mind the project is in its very early stages\u2014early feedback at this point is crucial to shape the direction of the project. Contributions are welcome and much appreciated. This is a community effort; let\u2019s improve how we build coding agents, together.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The velocity of innovation in the AI coding agent space is incredible\u2014especially in TypeScript. Tons of different AI coding agents are being developed across the ecosystem: everything from local CLI agents (like Claude Code and Gemini-CLI), IDEs (like Cursor), and extensions (like Cline) to SaaS agents (like v0 and Bolt) and now open-source coding evaluation [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2207,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[98,72],"tags":[],"class_list":["post-2205","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-open-source"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents - felix-arntz.me<\/title>\n<meta name=\"description\" content=\"Introducing AI Code Agents: a TypeScript SDK to eliminate vendor lock-in by abstracting AI coding tools and sandboxed execution environments.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents - felix-arntz.me\" \/>\n<meta property=\"og:description\" content=\"Introducing AI Code Agents: a TypeScript SDK to eliminate vendor lock-in by abstracting AI coding tools and sandboxed execution environments.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\" \/>\n<meta property=\"og:site_name\" content=\"felix-arntz.me\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-06T16:19:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Felix\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:site\" content=\"@felixarntz\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felix\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\"},\"author\":{\"name\":\"Felix\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"headline\":\"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents\",\"datePublished\":\"2025-11-06T16:19:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\"},\"wordCount\":966,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp\",\"articleSection\":[\"AI\",\"Open-Source\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\",\"url\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\",\"name\":\"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents - felix-arntz.me\",\"isPartOf\":{\"@id\":\"https:\/\/felix-arntz.me\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp\",\"datePublished\":\"2025-11-06T16:19:41+00:00\",\"description\":\"Introducing AI Code Agents: a TypeScript SDK to eliminate vendor lock-in by abstracting AI coding tools and sandboxed execution environments.\",\"breadcrumb\":{\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp\",\"width\":2560,\"height\":1440,\"caption\":\"AI Code Agents Snippet\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/felix-arntz.me\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI\",\"item\":\"https:\/\/felix-arntz.me\/blog\/category\/ai\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/felix-arntz.me\/#website\",\"url\":\"https:\/\/felix-arntz.me\/\",\"name\":\"felix-arntz.me\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/felix-arntz.me\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55\",\"name\":\"Felix\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"contentUrl\":\"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png\",\"width\":512,\"height\":512,\"caption\":\"Felix\"},\"logo\":{\"@id\":\"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/\"},\"description\":\"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.\",\"sameAs\":[\"https:\/\/x.com\/felixarntz\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents - felix-arntz.me","description":"Introducing AI Code Agents: a TypeScript SDK to eliminate vendor lock-in by abstracting AI coding tools and sandboxed execution environments.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/","og_locale":"en_US","og_type":"article","og_title":"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents - felix-arntz.me","og_description":"Introducing AI Code Agents: a TypeScript SDK to eliminate vendor lock-in by abstracting AI coding tools and sandboxed execution environments.","og_url":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/","og_site_name":"felix-arntz.me","article_published_time":"2025-11-06T16:19:41+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp","type":"image\/jpeg"}],"author":"Felix","twitter_card":"summary_large_image","twitter_creator":"@felixarntz","twitter_site":"@felixarntz","twitter_misc":{"Written by":"Felix","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#article","isPartOf":{"@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/"},"author":{"name":"Felix","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"headline":"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents","datePublished":"2025-11-06T16:19:41+00:00","mainEntityOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/"},"wordCount":966,"commentCount":1,"publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp","articleSection":["AI","Open-Source"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/","url":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/","name":"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents - felix-arntz.me","isPartOf":{"@id":"https:\/\/felix-arntz.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage"},"image":{"@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp","datePublished":"2025-11-06T16:19:41+00:00","description":"Introducing AI Code Agents: a TypeScript SDK to eliminate vendor lock-in by abstracting AI coding tools and sandboxed execution environments.","breadcrumb":{"@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#primaryimage","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp","width":2560,"height":1440,"caption":"AI Code Agents Snippet"},{"@type":"BreadcrumbList","@id":"https:\/\/felix-arntz.me\/blog\/introducing-ai-code-agents-a-typescript-sdk-to-solve-vendor-lock-in-for-coding-agents\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/felix-arntz.me\/"},{"@type":"ListItem","position":2,"name":"AI","item":"https:\/\/felix-arntz.me\/blog\/category\/ai\/"},{"@type":"ListItem","position":3,"name":"Introducing AI Code Agents: A TypeScript SDK to Solve Vendor Lock-in for Coding Agents"}]},{"@type":"WebSite","@id":"https:\/\/felix-arntz.me\/#website","url":"https:\/\/felix-arntz.me\/","name":"felix-arntz.me","description":"","publisher":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/felix-arntz.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/c7c3c658d2e59bbddf3e8684a6846e55","name":"Felix","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/","url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","contentUrl":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2018\/09\/felix-arntz-site-icon.png","width":512,"height":512,"caption":"Felix"},"logo":{"@id":"https:\/\/felix-arntz.me\/#\/schema\/person\/image\/"},"description":"Developer Programs Engineer at Google. WordPress Core Committer. Previously Yoast. Runner, musician, movie geek. Aprendiendo espa\u00f1ol. Fueled by Mountain Dew.","sameAs":["https:\/\/x.com\/felixarntz"]}]}},"jetpack_featured_media_url":"https:\/\/felix-arntz.me\/wp-content\/uploads\/2025\/11\/ai-code-agents-snippet-scaled.webp","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/2205","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/comments?post=2205"}],"version-history":[{"count":1,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/2205\/revisions"}],"predecessor-version":[{"id":2206,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/posts\/2205\/revisions\/2206"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media\/2207"}],"wp:attachment":[{"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/media?parent=2205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/categories?post=2205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/felix-arntz.me\/api\/wp\/v2\/tags?post=2205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}