<?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>Forem: Serik Ospanov</title>
    <description>The latest articles on Forem by Serik Ospanov (@serik_ospanov_c84c8ee2e54).</description>
    <link>https://forem.com/serik_ospanov_c84c8ee2e54</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%2F3859323%2F50e4054d-fcad-4111-ad7b-7c998c9bb198.png</url>
      <title>Forem: Serik Ospanov</title>
      <link>https://forem.com/serik_ospanov_c84c8ee2e54</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/serik_ospanov_c84c8ee2e54"/>
    <language>en</language>
    <item>
      <title>Let Your Claude Code Agents Talk to Each Other: Introducing agent-dispatch 🤖↔️🤖</title>
      <dc:creator>Serik Ospanov</dc:creator>
      <pubDate>Wed, 15 Apr 2026 05:09:29 +0000</pubDate>
      <link>https://forem.com/serik_ospanov_c84c8ee2e54/let-your-claude-code-agents-talk-to-each-other-introducing-agent-dispatch--3ik0</link>
      <guid>https://forem.com/serik_ospanov_c84c8ee2e54/let-your-claude-code-agents-talk-to-each-other-introducing-agent-dispatch--3ik0</guid>
      <description>&lt;h2&gt;
  
  
  Let Your Claude Code Agents Talk to Each Other: Introducing &lt;code&gt;agent-dispatch&lt;/code&gt; 🤖↔️🤖
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: An MCP server that lets Claude Code agents delegate tasks to specialized agents in other project directories. No more context-copying or permission sprawl. &lt;a href="https://github.com/ginkida/agent-dispatch" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://pypi.org/project/agent-dispatch/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem: Agents Live in Silos 🏝️
&lt;/h2&gt;

&lt;p&gt;Working with Claude Code is fantastic until you need to cross project boundaries. If I'm debugging &lt;code&gt;backend/&lt;/code&gt; but need to check &lt;code&gt;infra/&lt;/code&gt; logs or query a staging DB, I'm forced to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy-paste context&lt;/strong&gt; → fragile, loses project-specific config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give one agent access to everything&lt;/strong&gt; → security risk, prompt bloat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch terminals manually&lt;/strong&gt; → breaks flow, defeats the AI assistant.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted specialized agents that collaborate &lt;strong&gt;without sharing credentials, configs, or context pollution&lt;/strong&gt;. So I built &lt;code&gt;agent-dispatch&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is It? 🚀
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;agent-dispatch&lt;/code&gt; is an MCP server that turns each project directory into an isolated, callable agent. When you dispatch a task, it spawns a fresh &lt;code&gt;claude -p&lt;/code&gt; session in that directory, inherits its local &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;.mcp.json&lt;/code&gt;, and tools, executes the task, and returns a structured result.&lt;/p&gt;

&lt;p&gt;Think of it as &lt;strong&gt;microservices for AI workflows&lt;/strong&gt;: composable, cached, and sandboxed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Start (30s)
&lt;/h3&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;agent-dispatch
agent-dispatch init
agent-dispatch add infra ~/projects/infra
agent-dispatch &lt;span class="nb"&gt;test &lt;/span&gt;infra &lt;span class="s2"&gt;"List running Docker containers"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. Now every Claude session can dispatch tasks to your &lt;code&gt;infra&lt;/code&gt; agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Works 🔧
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Claude session (e.g., backend/)
  │
  ├─ dispatch("infra", "find scheduler errors", caller="backend")
  │
  ▼
agent-dispatch MCP server
  ├─ ✅ Cache check → hit? return instantly
  ├─ 🔒 Safety check (depth, budget, concurrency)
  └─ 🚀 subprocess.run("claude -p ...", cwd=~/projects/infra/)
       │
       ▼
     Fresh Claude session in infra/
       ├─ Loads infra's CLAUDE.md, .mcp.json, tools
       ├─ Receives structured prompt: goal + caller + context + task
       └─ Executes → returns result → cached for next time
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Toolkit 🧰
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dispatch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One-shot task. Cached by default.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dispatch_session&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multi-turn conversation with context retention.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dispatch_parallel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Fan-out to multiple agents simultaneously.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dispatch_stream&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Live token streaming for long tasks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dispatch_dialogue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Two agents collaborate until &lt;code&gt;[RESOLVED]&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Example call:&lt;/strong&gt;&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;"agent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"db"&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"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Are all migrations applied?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"caller"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"backend"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"goal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Debug startup failure"&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;h2&gt;
  
  
  Safety &amp;amp; Cost Control 🛡️
&lt;/h2&gt;

&lt;p&gt;I didn't want a demo toy—I wanted production-ready tooling. Built-in safeguards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recursion protection&lt;/strong&gt;: &lt;code&gt;max_dispatch_depth&lt;/code&gt; (default: 3)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost limits&lt;/strong&gt;: &lt;code&gt;max_budget_usd&lt;/code&gt; per agent or globally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrency caps&lt;/strong&gt;: &lt;code&gt;max_concurrency&lt;/code&gt; limits parallel &lt;code&gt;claude -p&lt;/code&gt; processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeouts&lt;/strong&gt;: kills stuck sessions (default: 300s)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt;: identical &lt;code&gt;(agent, task, context)&lt;/code&gt; requests return instantly. Only successes cached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot-reload config&lt;/strong&gt;: add/remove agents via &lt;code&gt;~/.config/agent-dispatch/agents.yaml&lt;/code&gt; without restarting.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  When to Use (and When Not To) ⚖️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;✅ Do dispatch when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The task needs tools, files, or context from another project&lt;/li&gt;
&lt;li&gt;You want to leverage project-specific MCP servers or &lt;code&gt;CLAUDE.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You need parallel answers from multiple codebases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;❌ Don't dispatch when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The task is simple and local (just use your current agent)&lt;/li&gt;
&lt;li&gt;You need sub-second latency&lt;/li&gt;
&lt;li&gt;You're in a tight loop (use &lt;code&gt;dispatch_parallel&lt;/code&gt; instead)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It &amp;amp; Let Me Know! 💬
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://github.com/ginkida/agent-dispatch" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;br&gt;&lt;br&gt;
📦 &lt;a href="https://pypi.org/project/agent-dispatch/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt;&lt;br&gt;
&lt;/p&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;agent-dispatch
agent-dispatch init
agent-dispatch add my-agent ~/path/to/project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;I'd love your feedback:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What agent collaboration patterns would you use this for?&lt;/li&gt;
&lt;li&gt;What safety features are missing?&lt;/li&gt;
&lt;li&gt;Would you prefer a different abstraction (e.g., HTTP API vs MCP)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop a comment below or open an issue. This is very much a "build in public" project. 🙏&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>mcp</category>
      <category>python</category>
    </item>
    <item>
      <title>I got tired of agent frameworks that just… chat. So I built an OS for agents that actually do stuff.</title>
      <dc:creator>Serik Ospanov</dc:creator>
      <pubDate>Fri, 03 Apr 2026 10:58:21 +0000</pubDate>
      <link>https://forem.com/serik_ospanov_c84c8ee2e54/i-got-tired-of-agent-frameworks-that-just-chat-so-i-built-an-os-for-agents-that-actually-do-stuff-1k9m</link>
      <guid>https://forem.com/serik_ospanov_c84c8ee2e54/i-got-tired-of-agent-frameworks-that-just-chat-so-i-built-an-os-for-agents-that-actually-do-stuff-1k9m</guid>
      <description>&lt;p&gt;Hey dev.to 👋&lt;/p&gt;

&lt;p&gt;Quick story: I've spent way too many hours wiring up "autonomous" agents in Python, only to realize they're basically fancy chatbots that wait for me to type something. Cool for demos. Not great for actually getting work done while I sleep.&lt;/p&gt;

&lt;p&gt;So I went a different route.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet &lt;a href="https://github.com/ginkida/rustyhand" rel="noopener noreferrer"&gt;RustyHand&lt;/a&gt;&lt;/strong&gt; — an open-source &lt;strong&gt;Agent Operating System&lt;/strong&gt; built in Rust. Not a framework. Not a wrapper. A full OS for agents that run on schedules, monitor things, generate leads, manage socials, and report back — all without you babysitting them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it's different:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🦀 &lt;strong&gt;Single ~32MB binary&lt;/strong&gt;. One install. One command. Done.&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Autonomous by default&lt;/strong&gt;. Cron jobs, event triggers, recurring workflows — agents that work 24/7.&lt;/li&gt;
&lt;li&gt;🔌 &lt;strong&gt;37 channel adapters&lt;/strong&gt;. Telegram, Discord, Slack, WhatsApp, Matrix… your agents meet users where they are.&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;37 pre-built templates&lt;/strong&gt;. Researcher, coder, analyst, social media manager — &lt;code&gt;rustyhand agent new researcher&lt;/code&gt; and go.&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;26 LLM providers, 130+ models&lt;/strong&gt;. Auto-fallback, cost tracking, per-agent budgets.&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;16 security layers&lt;/strong&gt;. WASM sandboxing, taint tracking, signed manifests, zeroized secrets — because agents shouldn't become attack vectors.&lt;/li&gt;
&lt;li&gt;🧩 &lt;strong&gt;MCP server built-in&lt;/strong&gt;. Let Claude, Cursor, or any MCP-compatible AI &lt;em&gt;control&lt;/em&gt; your agent OS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  60 seconds to running:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/ginkida/rustyhand/main/scripts/install.sh | sh
rustyhand init
rustyhand start
&lt;span class="c"&gt;# Dashboard at http://localhost:4200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Real talk:
&lt;/h3&gt;

&lt;p&gt;This is v0.1.0. It's feature-complete, battle-tested internally (3,000+ tests, zero clippy warnings), but yes — you might hit a rough edge. Pin a commit for prod, report issues, help shape v1.0.&lt;/p&gt;

&lt;p&gt;If you've ever wanted agents that &lt;em&gt;do&lt;/em&gt; instead of just &lt;em&gt;talk&lt;/em&gt;, I'd love for you to kick the tires:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/ginkida/rustyhand" rel="noopener noreferrer"&gt;GitHub: ginkida/rustyhand&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Drop a comment if you try it out — what's the first autonomous agent &lt;em&gt;you'd&lt;/em&gt; build? 🛠️&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(P.S. It's MIT licensed. Use it, break it, rebuild it. Just maybe send a PR if you fix something.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rust</category>
      <category>opensource</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
