<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kiên Bùi</title>
    <description>The latest articles on DEV Community by Kiên Bùi (@kienbui1995).</description>
    <link>https://dev.to/kienbui1995</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F565372%2F6ca9a9ad-480f-4245-9b08-ec41714f0683.jpeg</url>
      <title>DEV Community: Kiên Bùi</title>
      <link>https://dev.to/kienbui1995</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kienbui1995"/>
    <language>en</language>
    <item>
      <title>Building magic-code: An Open-Source AI Coding Agent That Runs on Your Hardware</title>
      <dc:creator>Kiên Bùi</dc:creator>
      <pubDate>Thu, 16 Apr 2026 02:32:30 +0000</pubDate>
      <link>https://dev.to/kienbui1995/building-magic-code-an-open-source-ai-coding-agent-that-runs-on-your-hardware-63o</link>
      <guid>https://dev.to/kienbui1995/building-magic-code-an-open-source-ai-coding-agent-that-runs-on-your-hardware-63o</guid>
      <description>&lt;h1&gt;
  
  
  Building magic-code: An Open-Source AI Coding Agent That Runs on Your Hardware
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;How we built a TUI coding agent in Rust, tested it with 274 scenarios across 5 platforms, and made it work with a $600 GPU.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;AI coding assistants are powerful — but they come with trade-offs. Cloud-based tools send your code to external servers. Proprietary agents lock you into specific providers. And the costs add up fast.&lt;/p&gt;

&lt;p&gt;We wanted something different: a coding agent that's &lt;strong&gt;fast, private, and runs on your own hardware&lt;/strong&gt;. That's why we built &lt;a href="https://github.com/kienbui1995/mc-code" rel="noopener noreferrer"&gt;magic-code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is magic-code?
&lt;/h2&gt;

&lt;p&gt;magic-code is an open-source TUI (terminal UI) agentic AI coding agent built in Rust. It works with any LLM provider — from Claude and GPT to self-hosted models like Qwen 3.5 on your own GPU.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;magic-code &lt;span class="s2"&gt;"add error handling to the API endpoints"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent reads your code, plans changes, edits files, runs tests, and iterates — all from your terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key numbers
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&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;Language&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Binary size&lt;/td&gt;
&lt;td&gt;9.1 MB (static musl)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup time&lt;/td&gt;
&lt;td&gt;0ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in tools&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Test coverage&lt;/td&gt;
&lt;td&gt;274 unit tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Golden test scenarios&lt;/td&gt;
&lt;td&gt;274&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supported providers&lt;/td&gt;
&lt;td&gt;15+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lines of code&lt;/td&gt;
&lt;td&gt;18,691&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Architecture: 6 Crates, Zero Coupling
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mc-cli      → Binary, TUI runner, provider selection
mc-tui      → Terminal UI (ratatui), no dependencies on other mc-* crates
mc-core     → Runtime, ReAct loop, agents, memory, compaction
mc-provider → LLM providers (Anthropic, OpenAI, Gemini, generic)
mc-tools    → 30 tool implementations, permissions, sandbox
mc-config   → Configuration types and loader
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The strict rule: &lt;code&gt;mc-provider&lt;/code&gt; and &lt;code&gt;mc-tools&lt;/code&gt; never depend on each other. Only &lt;code&gt;mc-core&lt;/code&gt; orchestrates them. This keeps the codebase maintainable as it grows.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Self-Hosted Challenge
&lt;/h2&gt;

&lt;p&gt;Our primary goal was making magic-code work well with &lt;strong&gt;Qwen 3.5 9B&lt;/strong&gt; — a model that runs on a single RTX 4070 Ti. This is a fundamentally different challenge than building for Claude or GPT-4.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we learned
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Small models need explicit instructions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With Claude, you can say "add a greet function" and it figures out the rest. With Qwen 9B, you need "read src/lib.rs then add a greet function using edit_file." We built a 4-tier prompt system that adapts instructions based on model capability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1&lt;/strong&gt; (Frontier: Claude, GPT-4): Full autonomy, 30 tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2&lt;/strong&gt; (Strong: Gemini, DeepSeek): Slightly more structured&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 3&lt;/strong&gt; (Local: Llama, Mistral): Minimal tools, simple English&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 4&lt;/strong&gt; (Qwen): Optimized for agentic tool calling, 10 tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Thinking mode and tool calling don't mix (yet)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We discovered that Qwen 3.5 with vLLM's &lt;code&gt;--reasoning-parser qwen3&lt;/code&gt; puts tool calls inside thinking blocks — which the tool call parser can't extract. The fix: disable thinking when tools are present, re-enable for pure Q&amp;amp;A. This is actually &lt;a href="https://qwenlm.github.io/blog/qwen3/" rel="noopener noreferrer"&gt;recommended by the Qwen team&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Context window matters more than model size&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Qwen 3.5 9B with 256K context on vLLM outperforms larger models with smaller context windows for real coding tasks. We added Qwen to our model registry with proper context window settings and adaptive compaction thresholds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing: 274 Scenarios, 5 Platforms, Honest Results
&lt;/h2&gt;

&lt;p&gt;We built a comprehensive golden test suite to evaluate magic-code across different languages and app types. Every scenario runs in a Docker sandbox with a fresh project, and results are verified by checking actual file contents — not just "did the model respond."&lt;/p&gt;

&lt;h3&gt;
  
  
  Test structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tests/golden/
├── fixtures/          # 6 project templates (Rust, Python, React, Go, etc.)
├── scenarios/         # 274 scenarios across 22 categories
├── run.sh             # Parallel test runner (Docker sandbox)
├── run-platform.sh    # Platform-specific runner
├── verify.py          # Content verification (L1/L2 checks)
└── compare.py         # Cross-model comparison
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Verification levels
&lt;/h3&gt;

&lt;p&gt;We don't just check if the model responded. We verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;L0&lt;/strong&gt;: Did the model produce output? (tool calls + text)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L1&lt;/strong&gt;: Does the expected file exist?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L2&lt;/strong&gt;: Does the file contain the expected code patterns?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Results: Qwen 3.5 9B (self-hosted, RTX 4070 Ti)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;L0 (responds)&lt;/th&gt;
&lt;th&gt;L2 (verified correct)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Python Web API (FastAPI)&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python Desktop (Tkinter)&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;82%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go Web API&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;68%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Web App&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;28%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Native Mobile&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;47%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Overall: 60% verified correct across 110 platform scenarios.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're sharing these numbers honestly. A 9B model on a single GPU won't match Claude Sonnet — but it handles Python and Go tasks well, and it costs nothing to run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Qwen 9B excels
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Single file edits (add function, fix bug)&lt;/li&gt;
&lt;li&gt;✅ Python code (FastAPI, Tkinter)&lt;/li&gt;
&lt;li&gt;✅ Go code (stdlib HTTP, tests)&lt;/li&gt;
&lt;li&gt;✅ Bug fixes with clear descriptions&lt;/li&gt;
&lt;li&gt;✅ Reading and understanding code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it struggles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;❌ Creating new files from scratch (often runs bash instead of write_file)&lt;/li&gt;
&lt;li&gt;❌ Complex TypeScript/JSX (React components)&lt;/li&gt;
&lt;li&gt;❌ Multi-step refactoring&lt;/li&gt;
&lt;li&gt;❌ Abstract patterns (ABC, generics, advanced types)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comparison: Gemini 2.5 Pro via LiteLLM
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Qwen 3.5 9B&lt;/th&gt;
&lt;th&gt;Gemini 2.5 Pro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Python Web API&lt;/td&gt;
&lt;td&gt;69%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;96%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Web App&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go Web API&lt;/td&gt;
&lt;td&gt;68%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;96%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python Desktop&lt;/td&gt;
&lt;td&gt;82%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React Native&lt;/td&gt;
&lt;td&gt;47%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;90%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gemini 2.5 Pro scores significantly higher — but it's a cloud model. The beauty of magic-code is you can switch between models with a single flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Self-hosted (free)&lt;/span&gt;
magic-code &lt;span class="nt"&gt;--base-url&lt;/span&gt; http://localhost:4000 &lt;span class="nt"&gt;--model&lt;/span&gt; vllm/qwen3.5-9b &lt;span class="s2"&gt;"fix the bug"&lt;/span&gt;

&lt;span class="c"&gt;# Cloud (when you need it)&lt;/span&gt;
magic-code &lt;span class="nt"&gt;--model&lt;/span&gt; gemini-2.5-pro &lt;span class="s2"&gt;"refactor the entire module"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Makes magic-code Different
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Provider agnostic
&lt;/h3&gt;

&lt;p&gt;15+ providers out of the box. Anthropic, OpenAI, Gemini, Groq, DeepSeek, Mistral, Ollama, LiteLLM, vLLM — or any OpenAI-compatible endpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Full agentic loop
&lt;/h3&gt;

&lt;p&gt;Not just code completion. magic-code runs a ReAct loop: read code → plan → edit → run tests → iterate. It has 30 built-in tools including file operations, search, bash, browser, memory, and MCP support.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Context engineering
&lt;/h3&gt;

&lt;p&gt;Smart compaction keeps conversations going without losing important context. Repo maps (via tree-sitter) give the model project awareness without reading every file. Memory persists facts across sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Security by default
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Permission system for dangerous operations&lt;/li&gt;
&lt;li&gt;Sandbox for bash execution&lt;/li&gt;
&lt;li&gt;Prompt injection guards&lt;/li&gt;
&lt;li&gt;Audit logging&lt;/li&gt;
&lt;li&gt;8 CI security scanners (CodeQL, SonarCloud, cargo-audit, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Headless mode
&lt;/h3&gt;

&lt;p&gt;Integrate magic-code into CI/CD pipelines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Auto-fix failing tests&lt;/span&gt;
magic-code &lt;span class="nt"&gt;--yes&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="s2"&gt;"fix the failing tests"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; result.json

&lt;span class="c"&gt;# Batch processing&lt;/span&gt;
magic-code &lt;span class="nt"&gt;--yes&lt;/span&gt; &lt;span class="nt"&gt;--batch&lt;/span&gt; tasks.txt

&lt;span class="c"&gt;# NDJSON streaming for web apps&lt;/span&gt;
magic-code &lt;span class="nt"&gt;--ndjson&lt;/span&gt; &lt;span class="s2"&gt;"explain auth.rs"&lt;/span&gt; | process_events.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick install (binary)&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/kienbui1995/mc-code/main/install.sh | sh

&lt;span class="c"&gt;# Via cargo&lt;/span&gt;
cargo &lt;span class="nb"&gt;install &lt;/span&gt;magic-code

&lt;span class="c"&gt;# From source&lt;/span&gt;
git clone https://github.com/kienbui1995/mc-code.git
&lt;span class="nb"&gt;cd &lt;/span&gt;mc-code/mc &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cargo &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; crates/mc-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Self-Hosted Setup
&lt;/h2&gt;

&lt;p&gt;Run Qwen 3.5 9B with vLLM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vllm serve QuantTrio/Qwen3.5-9B-AWQ &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--port&lt;/span&gt; 8300 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--gpu-memory-utilization&lt;/span&gt; 0.95 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--max-model-len&lt;/span&gt; 262144 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--quantization&lt;/span&gt; awq_marlin &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--enable-prefix-caching&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--reasoning-parser&lt;/span&gt; qwen3 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--enable-auto-tool-choice&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--tool-call-parser&lt;/span&gt; qwen3_coder &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--served-model-name&lt;/span&gt; qwen3.5-9b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Point magic-code at it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;magic-code &lt;span class="nt"&gt;--base-url&lt;/span&gt; http://localhost:8300 &lt;span class="nt"&gt;--model&lt;/span&gt; qwen3.5-9b &lt;span class="s2"&gt;"your task"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or use LiteLLM as a proxy to switch between self-hosted and cloud models seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improving Qwen 3.5 performance on file creation tasks&lt;/li&gt;
&lt;li&gt;Testing with larger self-hosted models (Qwen 32B, Llama 70B)&lt;/li&gt;
&lt;li&gt;HTTP API server for web app integration&lt;/li&gt;
&lt;li&gt;Watch mode (file watcher, auto-respond)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;magic-code is MIT licensed and available on &lt;a href="https://github.com/kienbui1995/mc-code" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and &lt;a href="https://crates.io/crates/magic-code" rel="noopener noreferrer"&gt;crates.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We built this because we believe AI coding tools should be &lt;strong&gt;open, fast, and runnable on your own hardware&lt;/strong&gt;. The results aren't perfect — but they're honest, reproducible, and improving with every release.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo &lt;span class="nb"&gt;install &lt;/span&gt;magic-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;em&gt;magic-code is built by &lt;a href="https://github.com/kienbui1995" rel="noopener noreferrer"&gt;kienbui1995&lt;/a&gt;. Star the repo if you find it useful. Contributions welcome.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>rust</category>
      <category>ai</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>MagiC v0.4: Embedded Server Mode + Real Benchmark Numbers</title>
      <dc:creator>Kiên Bùi</dc:creator>
      <pubDate>Fri, 27 Mar 2026 07:19:36 +0000</pubDate>
      <link>https://dev.to/kienbui1995/magic-v04-embedded-server-mode-real-benchmark-numbers-2bo5</link>
      <guid>https://dev.to/kienbui1995/magic-v04-embedded-server-mode-real-benchmark-numbers-2bo5</guid>
      <description>&lt;p&gt;We shipped &lt;a href="https://github.com/kienbui1995/magic" rel="noopener noreferrer"&gt;MagiC v0.4&lt;/a&gt; today. Two things worth talking about: embedded server mode and the benchmark suite we built to validate our performance claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background: What is MagiC?
&lt;/h2&gt;

&lt;p&gt;MagiC is an open-source framework for managing fleets of AI workers. Think &lt;strong&gt;Kubernetes for AI agents&lt;/strong&gt; — it doesn't build agents, it manages any agents built with any framework (CrewAI, LangChain, custom bots) through an open HTTP protocol.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         You (CEO)
          |
     MagiC Server  ←— Go, 15MB binary
    /    |    |    \
ContentBot  SEOBot  LeadBot  CodeBot
(Python)   (Node)  (Python)  (Go)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The core is Go. Workers are anything that speaks HTTP.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's new in v0.4
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Embedded server mode
&lt;/h3&gt;

&lt;p&gt;Before v0.4, using MagiC from Python required you to separately install and run the Go server. Now you can do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;magic_ai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MagiC&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;MagiC&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Server is running. client is a MagiCClient.
&lt;/span&gt;    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit_task&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}})&lt;/span&gt;
&lt;span class="c1"&gt;# Server stops automatically.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;MagiC()&lt;/code&gt; downloads the correct binary for your platform on first use (Linux/macOS, amd64/arm64), caches it at &lt;code&gt;~/.magic/bin/&lt;/code&gt;, and starts it in the background. Second run is instant — no download.&lt;/p&gt;

&lt;p&gt;This is how it works under the hood:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MagiC&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__enter__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;MagiCClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;_get_binary&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_version&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# download if not cached
&lt;/span&gt;        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_proc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;serve&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MAGIC_PORT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_port&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_wait_ready&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="c1"&gt;# polls /health until 200 OK
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;MagiCClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__exit__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_proc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;terminate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The binary is pulled from GitHub Releases, which the release CI builds automatically for 4 targets on every &lt;code&gt;v*&lt;/code&gt; tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;GOOS=linux  GOARCH=amd64 go build -ldflags="-s -w" -o dist/magic-linux-amd64  ./cmd/magic&lt;/span&gt;
    &lt;span class="s"&gt;GOOS=linux  GOARCH=arm64 go build -ldflags="-s -w" -o dist/magic-linux-arm64  ./cmd/magic&lt;/span&gt;
    &lt;span class="s"&gt;GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o dist/magic-darwin-amd64 ./cmd/magic&lt;/span&gt;
    &lt;span class="s"&gt;GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o dist/magic-darwin-arm64 ./cmd/magic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: &lt;code&gt;pip install magic-ai-sdk&lt;/code&gt; is all a Python developer needs. No Go toolchain required.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Benchmark suite
&lt;/h3&gt;

&lt;p&gt;A frequent question is: "Why Go? Won't Python be fine?" We now have actual numbers.&lt;/p&gt;

&lt;p&gt;The benchmark suite lives in &lt;code&gt;core/benchmarks/&lt;/code&gt; — 13 benchmarks covering routing, registration, heartbeat, and the event bus. Run them yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/kienbui1995/magic
&lt;span class="nb"&gt;cd &lt;/span&gt;magic/core
go &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;-bench&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-benchtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5s &lt;span class="nt"&gt;-benchmem&lt;/span&gt; ./benchmarks/...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results on an i7-12700 (20 logical cores):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Throughput&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Route task — 10 workers&lt;/td&gt;
&lt;td&gt;2.8 µs&lt;/td&gt;
&lt;td&gt;920K tasks/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Route task — 100 workers&lt;/td&gt;
&lt;td&gt;20 µs&lt;/td&gt;
&lt;td&gt;50K tasks/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Route task — 1000 workers&lt;/td&gt;
&lt;td&gt;240 µs&lt;/td&gt;
&lt;td&gt;4K tasks/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker registration&lt;/td&gt;
&lt;td&gt;1.9 µs&lt;/td&gt;
&lt;td&gt;1.3M/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heartbeat — 100 workers&lt;/td&gt;
&lt;td&gt;84 µs&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heartbeat — 1000 workers&lt;/td&gt;
&lt;td&gt;1.0 ms&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event bus (10 subscribers)&lt;/td&gt;
&lt;td&gt;163 ns&lt;/td&gt;
&lt;td&gt;12.5M/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event bus (parallel)&lt;/td&gt;
&lt;td&gt;77 ns&lt;/td&gt;
&lt;td&gt;26M/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few things worth noting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routing scales O(n) with worker count&lt;/strong&gt;, which is expected — we scan all workers to filter by capability. With 1000 workers the overhead is 240µs. An LLM call is 1–30 seconds. The orchestrator is never the bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Heartbeat at 1000 workers costs ~1ms per check cycle.&lt;/strong&gt; In practice, heartbeats happen every 30 seconds per worker, so the server processes ~33 heartbeats/second at 1000 workers. Completely trivial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The event bus at 26M events/second&lt;/strong&gt; means no async communication between modules will ever be a bottleneck.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why these numbers matter for fleet management
&lt;/h3&gt;

&lt;p&gt;Every AI agent framework I've seen (AutoGen, CrewAI, Agno, LangGraph) runs agents as Python objects in a single process. There's no heartbeat because there's no persistent worker registry. There's no routing because there's no fleet.&lt;/p&gt;

&lt;p&gt;Agno's "529x faster" benchmark measures how quickly Python objects instantiate. That's a valid metric for their architecture. MagiC measures something different: how many concurrent agents can the orchestrator manage, and how fast can it route tasks to them.&lt;/p&gt;

&lt;p&gt;Python's GIL means routing decisions for N concurrent agents share one thread. In Go, each heartbeat runs in its own goroutine (~2KB RAM, true parallelism). The numbers reflect that.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's coming in v0.5
&lt;/h2&gt;

&lt;p&gt;We're implementing zero-trust worker authentication:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each worker gets its own &lt;code&gt;mct_&amp;lt;256-bit token&amp;gt;&lt;/code&gt; credential (not a shared API key)&lt;/li&gt;
&lt;li&gt;Token bound to a specific worker on first registration — can't be reused or impersonated&lt;/li&gt;
&lt;li&gt;Org isolation: tasks from Org A can only route to workers in Org A&lt;/li&gt;
&lt;li&gt;Immutable audit log: every register/heartbeat/route/complete recorded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No competitor has this at the framework level. AutoGen agents have no identity. CrewAI's &lt;code&gt;shared_memory=True&lt;/code&gt; default has caused PII leaks between sessions. LangGraph gets closest with interrupt primitives but still no agent-level auth.&lt;/p&gt;

&lt;p&gt;We'll publish the implementation and a write-up when it ships.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;magic-ai-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;magic_ai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MagiC&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;capability&lt;/span&gt;

&lt;span class="c1"&gt;# Define a worker
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SummarizerBot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nd"&gt;@capability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# your LLM call here
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Start server + register worker
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;MagiC&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SummarizerBot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SummarizerBot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:9001&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;magic_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;submit_task&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;routing&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required_capabilities&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/kienbui1995/magic" rel="noopener noreferrer"&gt;kienbui1995/magic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome — especially on the benchmark methodology. We want to publish fair comparisons, not marketing numbers.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>go</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why I Built MagiC — And Why "Managing" AI Agents Is the Real Problem</title>
      <dc:creator>Kiên Bùi</dc:creator>
      <pubDate>Mon, 23 Mar 2026 03:47:53 +0000</pubDate>
      <link>https://dev.to/kienbui1995/why-i-built-magic-and-why-managing-ai-agents-is-the-real-problem-37i9</link>
      <guid>https://dev.to/kienbui1995/why-i-built-magic-and-why-managing-ai-agents-is-the-real-problem-37i9</guid>
      <description>&lt;p&gt;&lt;em&gt;March 23, 2026&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The $2M Logistics Disaster That Changed My Thinking
&lt;/h2&gt;

&lt;p&gt;A global logistics firm deployed two AI agents in early 2025: one for inventory procurement, one for dynamic warehouse pricing.&lt;/p&gt;

&lt;p&gt;Late Q4, a data lag caused the procurement agent to see "low stock" and over-order high-value components. Simultaneously, the pricing agent saw the incoming surplus and slashed prices to move volume.&lt;/p&gt;

&lt;p&gt;Result: $2M spent on premium freight to ship items they were selling at a loss.&lt;/p&gt;

&lt;p&gt;This wasn't a failure of AI logic — it was a failure of &lt;strong&gt;AI orchestration&lt;/strong&gt;. (&lt;a href="https://www.cio.com/article/4132287/taming-agent-sprawl-3-pillars-of-ai-orchestration.html" rel="noopener noreferrer"&gt;CIO Magazine, Feb 2026&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  Everyone Is Building Agents. Nobody Is Managing Them.
&lt;/h2&gt;

&lt;p&gt;The numbers tell the story:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gartner predicts 40% of enterprise apps&lt;/strong&gt; will feature AI agents by end of 2026 — up from less than 5% in 2025 (&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-08-26-gartner-predicts-40-percent-of-enterprise-apps-will-feature-task-specific-ai-agents-by-2026" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deloitte estimates the AI agent market at $8.5B&lt;/strong&gt; in 2026, growing to $35B by 2030 (&lt;a href="https://www.deloitte.com/us/en/insights/industry/technology/technology-media-and-telecom-predictions/2026/ai-agent-orchestration.html" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CIO Magazine warns of &lt;strong&gt;"agent sprawl"&lt;/strong&gt; — the new Shadow IT (&lt;a href="https://www.cio.com/article/4132287/taming-agent-sprawl-3-pillars-of-ai-orchestration.html" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the average enterprise, this translates to &lt;strong&gt;50+ specialized agents&lt;/strong&gt; — marketing bots, support bots, data bots, code review bots — each running independently. No coordination. No cost control. No visibility.&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;




&lt;h2&gt;
  
  
  The Framework Gap
&lt;/h2&gt;

&lt;p&gt;I looked at every major AI agent framework: CrewAI (44k GitHub stars), AutoGen (Microsoft), LangGraph (LangChain ecosystem).&lt;/p&gt;

&lt;p&gt;They all solve the same problem: &lt;strong&gt;how to BUILD an agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But as teams scale to 10, 20, 50+ agents, a different problem emerges: &lt;strong&gt;how to MANAGE them working together&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;CrewAI&lt;/th&gt;
&lt;th&gt;AutoGen&lt;/th&gt;
&lt;th&gt;LangGraph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Build agents&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage any agent from any framework&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost tracking with auto-pause&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capability-based routing&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human approval gates in workflows&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is an &lt;strong&gt;infrastructure problem&lt;/strong&gt;, not an agent-building problem.&lt;/p&gt;

&lt;p&gt;We've seen this pattern before: Docker made it easy to run containers. But you still needed &lt;strong&gt;Kubernetes&lt;/strong&gt; to manage fleets of containers in production.&lt;/p&gt;




&lt;h2&gt;
  
  
  So I Built MagiC
&lt;/h2&gt;

&lt;p&gt;MagiC is an open-source framework for managing fleets of AI agents. Any agent, any framework, any language — orchestrated through one protocol.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         You (API)
          |
     MagiC Server (Go)
    /    |    |    \
ContentBot  SEOBot  LeadBot  CodeBot
(CrewAI)   (Custom) (LangChain) (Go)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MagiC &lt;strong&gt;doesn't build agents&lt;/strong&gt;. Your CrewAI agent becomes a MagiC worker. Your LangChain chain becomes a MagiC worker. They join the same organization and work together.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Worker in 10 Lines
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;magic_ai_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Worker&lt;/span&gt;

&lt;span class="n"&gt;worker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ContentBot&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:9000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@worker.capability&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize any text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summary: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8080&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What MagiC Handles
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Routing:&lt;/strong&gt; Submit a task with required capabilities. MagiC finds the best available worker — by capability match, cost, or load. Overloaded workers are automatically skipped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost Control:&lt;/strong&gt; Track spending per worker and team. Get alerts at 80% budget. Workers auto-pause at 100%. No more surprise LLM bills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DAG Workflows:&lt;/strong&gt; Multi-step pipelines with parallel execution, dependency resolution, and failure handling. Step outputs automatically flow to downstream steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;      research
       /    \
  content    leads       &amp;lt;- parallel execution
     |         |
    seo        |
      \       /
   [approval gate]       &amp;lt;- human reviews before proceeding
          |
     outreach
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Human-in-the-Loop:&lt;/strong&gt; Approval gates in workflows. Critical steps pause for human review before proceeding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Circuit Breaker:&lt;/strong&gt; If a worker fails 3 times consecutively, MagiC stops sending tasks for 30 seconds. Prevents cascading failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistent Storage:&lt;/strong&gt; SQLite backend. Your data survives server restarts.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Technical Details
&lt;/h2&gt;

&lt;p&gt;MagiC is built in Go — the same language behind Kubernetes, Docker, and Traefik. Why Go?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast:&lt;/strong&gt; Goroutines handle thousands of concurrent tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small:&lt;/strong&gt; Single binary, no runtime dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proven:&lt;/strong&gt; The infrastructure world runs on Go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Python SDK provides a clean developer experience for building workers. Any framework works — CrewAI, LangChain, or plain Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Protocol: MCP² (MagiC Protocol)
&lt;/h3&gt;

&lt;p&gt;Transport-agnostic JSON messages. 14 message types covering worker lifecycle, task lifecycle, collaboration, and direct channels. Workers communicate via standard HTTP POST.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"task.assign"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"org_magic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"worker_001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payload"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"task_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"summarize"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Numbers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;9 modules&lt;/strong&gt;: Gateway, Registry, Router, Dispatcher, Monitor, Orchestrator, Evaluator, Cost Controller, Org Manager + Knowledge Hub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;90 tests&lt;/strong&gt; passing with Go race detector&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero external Go dependencies&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7.8/10&lt;/strong&gt; independently verified technical score&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache 2.0&lt;/strong&gt; license&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Today:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development teams running multiple AI agents that need coordination&lt;/li&gt;
&lt;li&gt;Teams spending too much on LLM APIs without visibility&lt;/li&gt;
&lt;li&gt;Anyone who wants to combine agents from different frameworks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tomorrow:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agencies managing AI workflows for clients&lt;/li&gt;
&lt;li&gt;Enterprises orchestrating cross-department AI operations&lt;/li&gt;
&lt;li&gt;The "Kubernetes for AI agents" use case — as agent sprawl grows, orchestration becomes essential&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/kienbui1995/magic.git
&lt;span class="nb"&gt;cd &lt;/span&gt;magic/core &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; go build &lt;span class="nt"&gt;-o&lt;/span&gt; ../bin/magic ./cmd/magic
./bin/magic serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; magic &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 magic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5 template workers included — summarizer, translator, classifier, extractor, generator. Clone and run immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/kienbui1995/magic" rel="noopener noreferrer"&gt;github.com/kienbui1995/magic&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Shift Is Coming
&lt;/h2&gt;

&lt;p&gt;Deloitte calls 2026 &lt;strong&gt;"an inflection point for agent orchestration."&lt;/strong&gt; CIO Magazine says the era of the &lt;strong&gt;"lone-wolf bot is over."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The shift from "build agents" to "manage agents" is inevitable. Just like we went from "run containers" to Kubernetes.&lt;/p&gt;

&lt;p&gt;MagiC is my bet on that shift. It's open-source, it's early, and it works. Star the repo if you find it useful.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/kienbui1995" rel="noopener noreferrer"&gt;Kien Bui&lt;/a&gt; — Builder of MagiC&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.deloitte.com/us/en/insights/industry/technology/technology-media-and-telecom-predictions/2026/ai-agent-orchestration.html" rel="noopener noreferrer"&gt;Deloitte TMT Predictions 2026: AI Agent Orchestration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cio.com/article/4132287/taming-agent-sprawl-3-pillars-of-ai-orchestration.html" rel="noopener noreferrer"&gt;CIO Magazine: Taming Agent Sprawl (Feb 2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-08-26-gartner-predicts-40-percent-of-enterprise-apps-will-feature-task-specific-ai-agents-by-2026" rel="noopener noreferrer"&gt;Gartner: 40% of Enterprise Apps Will Feature AI Agents by 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.langchain.com/state-of-agent-engineering" rel="noopener noreferrer"&gt;LangChain State of Agent Engineering 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>go</category>
      <category>python</category>
    </item>
  </channel>
</rss>
