<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CodeBuddy | Blog</title><description/><link>https://codebuddy-docs.vercel.app/</link><language>en</language><item><title>Building an Autonomous Coding Agent with LangGraph Deep Agents</title><link>https://codebuddy-docs.vercel.app/blog/building-autonomous-agents-with-langgraph-deep-agents/</link><guid isPermaLink="true">https://codebuddy-docs.vercel.app/blog/building-autonomous-agents-with-langgraph-deep-agents/</guid><description>Most AI coding tools are single-loop wrappers. Here&apos;s how we built a production multi-agent system using LangGraph Deep Agents — with planning, subagent delegation, persistent memory, and self-healing execution.

</description><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;This post accompanies my talk at &lt;a href=&quot;https://luma.com/AI-Salon-Kuala-Lumpur-2026&quot;&gt;AI Salon KL – April 2026&lt;/a&gt;. If you’re reading this after the event, welcome — the architecture hasn’t changed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;div&gt;&lt;h2 id=&quot;the-single-loop-trap&quot;&gt;The single-loop trap&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Most AI coding assistants follow the same pattern:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;User message → LLM → tool call → LLM → response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This works for simple tasks. But ask it to “refactor the authentication module to use OAuth2” and it falls apart — the model tries to hold the entire plan, all file contents, and every decision in a single context window. It forgets steps, loses track of changes, and hallucinates file paths.&lt;/p&gt;
&lt;p&gt;The fundamental problem: &lt;strong&gt;a single LLM loop cannot reliably execute multi-step tasks&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-deep-agents-approach&quot;&gt;The Deep Agents approach&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/langchain-ai/deepagentsjs&quot;&gt;&lt;strong&gt;Deep Agents&lt;/strong&gt;&lt;/a&gt; is LangChain’s framework for building agents that go beyond shallow tool-calling. It provides four primitives that change the game:&lt;/p&gt;
&lt;div&gt;
graph LR
    subgraph Deep Agents Primitives
        A[&quot;🗓️ Planning&amp;#x3C;br/&gt;(TodoListMiddleware)&quot;] --&gt; B[&quot;🔀 Subagent Spawning&amp;#x3C;br/&gt;(SubAgentMiddleware)&quot;]
        B --&gt; C[&quot;📁 File System&amp;#x3C;br/&gt;(FilesystemMiddleware)&quot;]
        C --&gt; D[&quot;📝 Rich Prompts&amp;#x3C;br/&gt;(Project Rules + Memory)&quot;]
    end
    style A color:#fff
    style B color:#fff
    style C color:#fff
    style D color:#fff
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1. Planning tool&lt;/strong&gt; — The agent decomposes tasks into a todo list (&lt;code dir=&quot;auto&quot;&gt;write_todos&lt;/code&gt;). It checks off items as it works. This is externalized memory — the agent doesn’t need to hold the plan in context.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Subagent spawning&lt;/strong&gt; — Complex subtasks are delegated to specialist agents via the &lt;code dir=&quot;auto&quot;&gt;task&lt;/code&gt; tool. Each subagent gets its own context window, filtered tools, and middleware. When it finishes, the result flows back as a &lt;code dir=&quot;auto&quot;&gt;ToolMessage&lt;/code&gt;. The subagent is destroyed — no context pollution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. File system access&lt;/strong&gt; — Instead of stuffing everything into the prompt, the agent reads and writes files. &lt;code dir=&quot;auto&quot;&gt;ls&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;read_file&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;write_file&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;edit_file&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;glob&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;grep&lt;/code&gt; — all backed by a pluggable storage layer. This is how the agent survives without a 1M-token context window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Detailed prompts&lt;/strong&gt; — System prompts composed from project rules, memories, and skills at runtime. Not a static string — a dynamic assembly of everything the agent needs to know about &lt;em&gt;your&lt;/em&gt; codebase.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;how-codebuddy-wires-it-together&quot;&gt;How CodeBuddy wires it together&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CodeBuddy’s core is a single &lt;code dir=&quot;auto&quot;&gt;createDeepAgent()&lt;/code&gt; call. Everything else — the IDE integration, the 27+ tools, the 9 specialized subagents — plugs into this foundation:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;createDeepAgent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;model: &lt;/span&gt;&lt;span&gt;buildChatModel&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{ &lt;/span&gt;&lt;span&gt;provider&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;apiKey&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;modelName&lt;/span&gt;&lt;span&gt; }&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;tools: await &lt;/span&gt;&lt;span&gt;ToolProvider&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getToolsAsync&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;systemPrompt: &lt;/span&gt;&lt;span&gt;basePrompt&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;projectRules&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;memories&lt;/span&gt;&lt;span&gt; + &lt;/span&gt;&lt;span&gt;skills&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;backend: &lt;/span&gt;&lt;span&gt;compositeBackend&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;subagents: &lt;/span&gt;&lt;span&gt;createDeveloperSubagents&lt;/span&gt;&lt;span&gt;(model&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;tools)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;middleware:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;createMemoryMiddleware&lt;/span&gt;&lt;span&gt;({ sources: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;AGENTS.md&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;] }),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;createSkillsMiddleware&lt;/span&gt;&lt;span&gt;({ sources: [&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;.codebuddy/skills/&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;] }),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;checkpointer: &lt;/span&gt;&lt;span&gt;sqlJsCheckpointSaver&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;store: &lt;/span&gt;&lt;span&gt;inMemoryStore&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The returned agent is a &lt;strong&gt;standard LangGraph graph&lt;/strong&gt; — streaming, human-in-the-loop, and LangSmith observability work out of the box.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-architecture-in-one-diagram&quot;&gt;The architecture in one diagram&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;
sequenceDiagram
    participant U as User
    participant A as Developer Agent&amp;#x3C;br/&gt;(createDeepAgent)
    participant MW as Middleware Stack&amp;#x3C;br/&gt;(5 layers)
    participant P as Subagent Pool&amp;#x3C;br/&gt;(9 specialists)
    participant T as Tools&amp;#x3C;br/&gt;(27+ core + MCP)
    participant B as CompositeBackend&amp;#x3C;br/&gt;(3 storage layers)

    U-&gt;&gt;A: &quot;Add OAuth2 to the auth module&quot;
    A-&gt;&gt;MW: Initialize (TodoList + Filesystem + SubAgent + Memory + Skills)
    MW--&gt;&gt;A: Enriched prompt + tools

    Note over A: 🗓️ Plans via write_todos:&amp;#x3C;br/&gt;1. Analyze current auth&amp;#x3C;br/&gt;2. Add OAuth2 provider&amp;#x3C;br/&gt;3. Update routes&amp;#x3C;br/&gt;4. Write tests

    A-&gt;&gt;T: read_file(&quot;src/auth/...&quot;)
    T-&gt;&gt;B: /workspace → VscodeFsBackend
    B--&gt;&gt;A: File contents

    A-&gt;&gt;P: task({ type: &quot;code-writer&quot;, desc: &quot;Add OAuth2 provider&quot; })
    Note over P: New agent with filtered tools&amp;#x3C;br/&gt;Own context window — isolated
    P-&gt;&gt;T: write_file, edit_file
    P--&gt;&gt;A: ToolMessage with result
    Note over P: Agent destroyed

    A-&gt;&gt;P: task({ type: &quot;test-runner&quot;, desc: &quot;Write OAuth2 tests&quot; })
    P-&gt;&gt;T: execute_command(&quot;npm test&quot;)
    P--&gt;&gt;A: Test results

    A--&gt;&gt;U: ✅ Done — 4 files changed, tests passing
&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-three-key-architectural-decisions&quot;&gt;The three key architectural decisions&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1. CompositeBackend&lt;/strong&gt; — One unified file system interface, three storage layers:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Route&lt;/th&gt;&lt;th&gt;Backend&lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/workspace/*&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;VscodeFsBackend&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Real IDE files — read/write actual code&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/docs/*&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;StoreBackend&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Persistent cross-session documents&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;/&lt;/code&gt; (default)&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;StateBackend&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Ephemeral agent state&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The agent doesn’t know which backend serves a path. It just reads and writes files. This is how we bridge an AI framework with a real IDE.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Subagent isolation&lt;/strong&gt; — Each subagent is a fresh &lt;code dir=&quot;auto&quot;&gt;ReactAgent&lt;/code&gt; with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Its own context window (no leakage from other tasks)&lt;/li&gt;
&lt;li&gt;Role-filtered tools (the &lt;code dir=&quot;auto&quot;&gt;test-runner&lt;/code&gt; can’t delete files)&lt;/li&gt;
&lt;li&gt;Its own middleware stack&lt;/li&gt;
&lt;li&gt;A single-task lifecycle — created, used, destroyed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is cheaper and safer than maintaining long-running specialist agents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Five-layer middleware&lt;/strong&gt; — Three from Deep Agents, two custom:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;TodoListMiddleware    → Planning and progress tracking&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FilesystemMiddleware  → Context offloading to files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SubAgentMiddleware    → Specialist delegation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;MemoryMiddleware      → AGENTS.md injection (custom)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SkillsMiddleware      → .codebuddy/skills/ loading (custom)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Middleware is composable and fault-tolerant. A failing middleware logs a warning but doesn’t crash the agent.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;self-healing-when-things-go-wrong&quot;&gt;Self-healing: when things go wrong&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Production agents fail. Models hallucinate. APIs time out. Rate limits hit. CodeBuddy handles this with four layers:&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;Handles&lt;/th&gt;&lt;th&gt;Mechanism&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Tool-level&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Parse errors, malformed args&lt;/td&gt;&lt;td&gt;Auto-retry with corrected input&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Provider-level&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Rate limits, API failures&lt;/td&gt;&lt;td&gt;Failover to next provider in chain&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Context-level&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Window overflow&lt;/td&gt;&lt;td&gt;Auto-compaction via summarization&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Session-level&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Unrecoverable errors&lt;/td&gt;&lt;td&gt;Checkpoint-based session restore&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The agent doesn’t just retry — it &lt;strong&gt;diagnoses&lt;/strong&gt; the failure type and picks the right recovery strategy. An auth error doesn’t trigger a retry (it would fail again). A rate limit triggers provider failover with cooldown tracking.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-this-enables&quot;&gt;What this enables&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;With this architecture, CodeBuddy handles real-world tasks that single-loop agents can’t:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;“Refactor the payment module”&lt;/strong&gt; → Plans 8 steps, delegates file analysis to code-analyzer, rewrites with code-writer, runs tests with test-runner, fixes failures in a loop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“Debug this production error”&lt;/strong&gt; → Reads stack trace, attaches to debugger (DAP), inspects variables, traces the root cause, writes the fix&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;“Add i18n support”&lt;/strong&gt; → Scans all user-facing strings, creates translation files, updates components, tests each locale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these involves 20-50 tool calls across multiple subagents. No single context window could hold it all.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-numbers&quot;&gt;The numbers&lt;/h2&gt;&lt;/div&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Agent framework&lt;/td&gt;&lt;td&gt;LangGraph Deep Agents&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Subagent specialists&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Core tools&lt;/td&gt;&lt;td&gt;27+&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LLM providers supported&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Skills (external integrations)&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Storage backends&lt;/td&gt;&lt;td&gt;3 (IDE files, persistent docs, ephemeral state)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Middleware layers&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WASM modules&lt;/td&gt;&lt;td&gt;2 (Tree-sitter AST + SQLite)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Worker threads&lt;/td&gt;&lt;td&gt;5 (embeddings, AST, vector DB, analysis, chat)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it&quot;&gt;Try it&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CodeBuddy is open source and runs in VS Code, Cursor, Windsurf, and VSCodium.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codebuddy.codebuddy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href=&quot;https://github.com/olasunkanmi-SE/codebuddy&quot;&gt;github.com/olasunkanmi-SE/codebuddy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deep Agents&lt;/strong&gt;: &lt;a href=&quot;https://github.com/langchain-ai/deepagentsjs&quot;&gt;github.com/langchain-ai/deepagentsjs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Presented at &lt;a href=&quot;https://luma.com/AI-Salon-Kuala-Lumpur-2026&quot;&gt;AI Salon KL&lt;/a&gt; — April 3, 2026. Built in Kuala Lumpur. 🇲🇾&lt;/em&gt;&lt;/p&gt;</content:encoded><category>architecture</category><category>langgraph</category><category>deep-agents</category><category>ai-salon-kl</category></item><item><title>Introducing CodeBuddy: The Autonomous AI Software Engineer</title><link>https://codebuddy-docs.vercel.app/blog/introducing-codebuddy/</link><guid isPermaLink="true">https://codebuddy-docs.vercel.app/blog/introducing-codebuddy/</guid><description>We built an AI that doesn&apos;t just suggest code — it plans, writes, debugs, tests, and deploys entire features autonomously. Here&apos;s why we built CodeBuddy and what makes it different.

</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most AI coding tools autocomplete a line and call it a day. We wanted something different — an AI that can take a task description, reason through the problem, write the code, run the tests, fix what breaks, and ship the result. All inside your editor.&lt;/p&gt;
&lt;p&gt;Today we’re releasing &lt;strong&gt;CodeBuddy&lt;/strong&gt; as an open-source extension for &lt;strong&gt;VS Code, Cursor, Windsurf, VSCodium&lt;/strong&gt;, and any editor on the VS Code extension API. It’s also on the &lt;a href=&quot;https://open-vsx.org/&quot;&gt;Open VSX Registry&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Developers spend significant time on tasks that are repetitive but not trivial — writing boilerplate, debugging stack traces, updating tests after refactors, wiring up API endpoints, writing documentation. Current tools help with fragments, but someone still has to orchestrate the work.&lt;/p&gt;
&lt;p&gt;We asked: &lt;em&gt;what if the AI could handle the full lifecycle of a task?&lt;/em&gt;&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-codebuddy-does-differently&quot;&gt;What CodeBuddy does differently&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CodeBuddy is a &lt;strong&gt;multi-agent system&lt;/strong&gt;, not a single-model wrapper. When you give it a task, here’s what happens:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The Developer Agent&lt;/strong&gt; — a &lt;code dir=&quot;auto&quot;&gt;createDeepAgent()&lt;/code&gt; instance from &lt;a href=&quot;https://github.com/langchain-ai/deepagentsjs&quot;&gt;deepagentsjs&lt;/a&gt; — analyzes your request and decides the approach&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specialized subagents&lt;/strong&gt; handle the work via the Deep Agents &lt;code dir=&quot;auto&quot;&gt;task&lt;/code&gt; tool — one for code analysis, another for file editing, another for terminal commands&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;27+ built-in tools&lt;/strong&gt; extend the Deep Agents file system primitives with IDE-native capabilities — terminal execution, web search, browser automation, debugger integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-healing execution&lt;/strong&gt; catches failures and retries with corrected approaches — up to 4 layers of recovery&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The result: you describe what you want, and CodeBuddy does the rest.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;built-on-deep-agents&quot;&gt;Built on Deep Agents&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;CodeBuddy is powered by &lt;a href=&quot;https://github.com/langchain-ai/deepagentsjs&quot;&gt;&lt;strong&gt;deepagentsjs&lt;/strong&gt;&lt;/a&gt; — LangChain’s batteries-included agent harness. While simple LLM tool-calling loops produce “shallow” agents that fail on complex tasks, Deep Agents implements the patterns proven by applications like Deep Research, Manus, and Claude Code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TodoListMiddleware&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;write_todos&lt;/code&gt; tool for planning and progress tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FilesystemMiddleware&lt;/strong&gt; — File system tools backed by a composable backend abstraction&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SubAgentMiddleware&lt;/strong&gt; — &lt;code dir=&quot;auto&quot;&gt;task&lt;/code&gt; tool for spawning context-isolated specialist agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CompositeBackend&lt;/strong&gt; — Route file paths to different storage layers (disk, store, state)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CodeBuddy extends this foundation with a custom &lt;code dir=&quot;auto&quot;&gt;VscodeFsBackend&lt;/code&gt;, IDE-native tools, and &lt;code dir=&quot;auto&quot;&gt;MemoryMiddleware&lt;/code&gt; + &lt;code dir=&quot;auto&quot;&gt;SkillsMiddleware&lt;/code&gt; for persistent project context.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;architecture-at-a-glance&quot;&gt;Architecture at a glance&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;
graph LR
    A[Your Task] --&gt; B[Developer Agent]
    B --&gt; C[Planner]
    B --&gt; D[Coder]
    B --&gt; E[Debugger]
    B --&gt; F[Tester]
    C &amp;#x26; D &amp;#x26; E &amp;#x26; F --&gt; G[Self-Healing Layer]
    G --&gt; H[Completed Task]
&lt;/div&gt;
&lt;div&gt;&lt;h2 id=&quot;key-numbers&quot;&gt;Key numbers&lt;/h2&gt;&lt;/div&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;7 specialized agents&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Each optimized for a specific type of work&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;10 AI providers&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;OpenAI, Anthropic, Google, Groq, Ollama, LM Studio, and more&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;27+ built-in tools&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;File editing, terminal, web search, browser, debugger, MCP&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;16 integrations&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;GitHub, Jira, AWS, Datadog, PostgreSQL, Sentry, and more&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;8 WASM grammars&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Tree-sitter AST parsing for JS, TS, Python, Go, Rust, Java, PHP, TSX&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;5 worker threads&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Parallel processing for analysis, embedding, vector search&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;&lt;h2 id=&quot;privacy-and-security-first&quot;&gt;Privacy and security first&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Every line of CodeBuddy runs locally in your editor. There are no cloud servers, no telemetry calls home, no code leaving your machine (unless you configure an external AI provider).&lt;/p&gt;
&lt;p&gt;Enterprise teams get:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Access control&lt;/strong&gt; with allow/deny lists and admin roles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permission scoping&lt;/strong&gt; to restrict what the agent can do (restricted / standard / trusted profiles)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Credential proxy&lt;/strong&gt; — a localhost reverse proxy that injects API keys so they never touch the webview&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompt injection detection&lt;/strong&gt; — 15+ pattern detectors with automatic sanitization&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;local-models-zero-latency&quot;&gt;Local models, zero latency&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;If you don’t want your code touching any API, CodeBuddy works fully offline with &lt;strong&gt;Ollama&lt;/strong&gt; and &lt;strong&gt;LM Studio&lt;/strong&gt;. Run DeepSeek Coder, CodeLlama, Qwen, or any GGUF model locally. The inline completion engine supports model-specific FIM (Fill-in-the-Middle) tokens for each provider.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;whats-next&quot;&gt;What’s next&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We’re actively developing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;More language support&lt;/strong&gt; for AST analysis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better context selection&lt;/strong&gt; with relevance scoring improvements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Richer MCP ecosystem&lt;/strong&gt; with community-contributed servers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team collaboration features&lt;/strong&gt; with shared project rules&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;try-it-now&quot;&gt;Try it now&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# VS Code / Cursor / Windsurf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codebuddy.codebuddy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# VSCodium / Open VSX editors&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Install from https://open-vsx.org/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://codebuddy-docs.vercel.app/getting-started/quickstart/&quot;&gt;quickstart guide&lt;/a&gt; to build your first feature with CodeBuddy in under 5 minutes.&lt;/p&gt;
&lt;p&gt;Star us on &lt;a href=&quot;https://github.com/olasunkanmi-SE/codebuddy&quot;&gt;GitHub&lt;/a&gt; if you find it useful. Contributions welcome.&lt;/p&gt;</content:encoded><category>announcement</category><category>ai</category><category>launch</category></item></channel></rss>