<?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: Rick</title>
    <description>The latest articles on DEV Community by Rick (@superrick).</description>
    <link>https://dev.to/superrick</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4033519%2Fcd84b4ae-d9fa-49a4-9cb2-e4e696e1ef2e.png</url>
      <title>DEV Community: Rick</title>
      <link>https://dev.to/superrick</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/superrick"/>
    <language>en</language>
    <item>
      <title>AgentCrew MCN 架构设计详解</title>
      <dc:creator>Rick</dc:creator>
      <pubDate>Tue, 21 Jul 2026 09:11:16 +0000</pubDate>
      <link>https://dev.to/superrick/agentcrew-mcn-jia-gou-she-ji-xiang-jie-1kg0</link>
      <guid>https://dev.to/superrick/agentcrew-mcn-jia-gou-she-ji-xiang-jie-1kg0</guid>
      <description>&lt;h1&gt;
  
  
  AgentCrew MCN 架构设计详解
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;从一个需求说起：假如我们要搭建一个智能营销内容工厂，需要多个 AI Agent 协同工作——研究员收集信息、撰稿人撰写文章、设计师配图、审核员检查合规。如何让这些 Agent 既独立又能高效协作，同时还能被产品经理轻松调度？正是为了解决这类问题，我们设计了 &lt;strong&gt;AgentCrew MCN（Multi‑agent Collaboration Network）&lt;/strong&gt;——一个可扩展、可观测、低代码的智能体协作架构。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;本文将深入 AgentCrew MCN 的内核，从设计理念、核心组件、通信模型到实际代码示例，全面解析这一架构是如何让多个 Agent 像一支专业 Crew（团队）一样工作的。&lt;/p&gt;




&lt;h2&gt;
  
  
  1. 设计目标：为什么需要 MCN？
&lt;/h2&gt;

&lt;p&gt;当前多数 AI Agent 框架侧重于单个 Agent 的能力强化（ReAct、Plan‑and‑Execute 等），但在真实业务中，往往需要多个 Agent 组成流水线或动态协作网络。AgentCrew MCN 的设计目标就是填补“单 Agent 到多 Agent 协作”之间的空白，具体包括：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;解耦协作逻辑&lt;/strong&gt; ：将任务分配、消息传递、状态同步从 Agent 业务逻辑中剥离，让 Agent 只关注自身职责。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;动态组网&lt;/strong&gt;：Crew（团队）可以根据任务需求动态组建与销毁，支持任意拓扑（顺序、并行、条件分支）。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可靠通信&lt;/strong&gt;：确保消息可靠投递、故障重试与超时处理，兼容同步与异步调用。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;可观测性&lt;/strong&gt;：内置分布式追踪与日志，让每次多 Agent 对话全链路可监控。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;低代码编排&lt;/strong&gt;：通过 YAML/JSON 配置或 Python SDK 快速定义协作流程。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. 核心架构
&lt;/h2&gt;

&lt;p&gt;AgentCrew MCN 的整体架构可以概括为“一个总线、两类节点、三层抽象”：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;一个总线 —— CrewBus&lt;/strong&gt;：基于消息队列的异步消息中枢，负责 Agent 之间的通信与事件分发。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;两类节点 —— Agent 节点与 Crew 控制器&lt;/strong&gt;：

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent 节点&lt;/strong&gt;：挂载了特定能力（LLM、工具、记忆体）的工作单元。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crew 控制器&lt;/strong&gt;：管理 Crew 生命周期、任务路由与状态机。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;三层抽象&lt;/strong&gt;：

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Task&lt;/strong&gt;：用户意图的最小单位，包含输入、输出类型和约束。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crew&lt;/strong&gt;：由多个 Agent 节点和一段协作拓扑（DAG）组成的执行环境。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skill&lt;/strong&gt;：可复用的能力封装，一个 Agent 可以挂载多个 Skill。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvia.placeholder.com%2F800x300%3Ftext%3D%25E6%259E%25B6%25E6%259E%2584%25E7%25A4%25BA%25E6%2584%258F%25E5%259B%25BE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvia.placeholder.com%2F800x300%3Ftext%3D%25E6%259E%25B6%25E6%259E%2584%25E7%25A4%25BA%25E6%2584%258F%25E5%259B%25BE" alt="架构示意图：CrewBus 连接多个 Agent 和控制器"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. 消息与通信模型
&lt;/h2&gt;

&lt;p&gt;AgentCrew MCN 的通信完全基于 &lt;strong&gt;意图消息（Intent Message）&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;"intent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"write_article"&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;"topic"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AgentCrew MCN 架构设计"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"style"&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="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;"sender"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"orchestrator"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"recipient"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"writer_agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"correlation_id"&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-123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"metadata"&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;"priority"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"high"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ttl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3600&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;p&gt;消息通过 CrewBus 投递，支持三种通信模式：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;点对点（Direct）&lt;/strong&gt;：明确指定接收 Agent，用于确定性任务链。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;广播（Broadcast）&lt;/strong&gt;：发送给 Crew 内所有 Agent，用于状态同步或通知。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;路由匹配（Intent‑based routing）&lt;/strong&gt;：由 Crew 控制器根据意图字段自动分配到具备对应能力的 Agent，实现灵活调度。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Agent 节点设计
&lt;/h2&gt;

&lt;p&gt;每个 Agent 节点本质上是一个微服务，内部包含：&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;AgentNode&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;__init__&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;name&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="n"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Skill&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Memory&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&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;skills&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;skill&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;skill&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;skills&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;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle_message&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;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IntentMessage&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# 根据 intent 选择技能
&lt;/span&gt;        &lt;span class="n"&gt;skill&lt;/span&gt; &lt;span class="o"&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;skills&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&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;_reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unsupported_intent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# 利用记忆上下文增强执行
&lt;/span&gt;        &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&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;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;correlation_id&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;skill&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="c1"&gt;# 更新记忆
&lt;/span&gt;        &lt;span class="k"&gt;await&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;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;correlation_id&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;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agent 不维护全局拓扑，只对收到的消息做出反应。这种无状态设计（除了记忆体）使得节点可以水平扩展。&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Crew 控制器与拓扑编排
&lt;/h2&gt;

&lt;p&gt;Crew 控制器是协作的大脑。它通过解析 &lt;strong&gt;Crew 定义文件&lt;/strong&gt; 来构建 DAG（有向无环图），并驱动任务流转。&lt;/p&gt;

&lt;p&gt;示例 &lt;code&gt;crew.yaml&lt;/code&gt;：&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="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;article_creation_crew&lt;/span&gt;
&lt;span class="na"&gt;entry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;researcher_agent&lt;/span&gt;
&lt;span class="na"&gt;agents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;researcher_agent&lt;/span&gt;
    &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;research&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;writer_agent&lt;/span&gt;
    &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;write_article&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reviewer_agent&lt;/span&gt;
    &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;review_compliance&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;topology&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;entry&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;researcher_agent&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;research&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;researcher_agent&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;writer_agent&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write_article&lt;/span&gt;
    &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.status&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;==&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'ok'"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;writer_agent&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reviewer_agent&lt;/span&gt;
    &lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;review_compliance&lt;/span&gt;
    &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.draft&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;!=&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;null"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reviewer_agent&lt;/span&gt;
    &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;exit&lt;/span&gt;
    &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output.approved&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;==&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;控制器引擎的核心逻辑：&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;CrewController&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;__init__&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;topology_def&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&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;topology&lt;/span&gt; &lt;span class="o"&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;_parse_dag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topology_def&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;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;execute&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="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&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;topology&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entry_node&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;exit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# 发送消息给对应 Agent
&lt;/span&gt;            &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&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;_build_intent&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="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="c1"&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;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;
            &lt;span class="c1"&gt;# 根据条件和当前节点找到下一个节点
&lt;/span&gt;            &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&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;topology&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&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="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;  &lt;span class="c1"&gt;# 数据传递
&lt;/span&gt;        &lt;span class="k"&gt;return&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;state&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. 异常处理与韧性设计
&lt;/h2&gt;

&lt;p&gt;多 Agent 协作中，失败是常态。MCN 内置了多级容错策略：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;超时重试&lt;/strong&gt;：每条消息可配置 &lt;code&gt;ttl&lt;/code&gt; 和重试次数，CrewBus 自动处理指数退避。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;断路器&lt;/strong&gt;：当某个 Agent 连续失败达到阈值时，将对其熔断，避免级联崩溃。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;补偿任务&lt;/strong&gt;：拓扑中可定义 &lt;code&gt;on_failure&lt;/code&gt; 跳转，执行回滚或通知人工接管。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;影子模式&lt;/strong&gt;：灰度发布新 Agent 时，可同时向新旧版本发送流量并对比结果，不影响主链路。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. 可观测性：全链路追踪
&lt;/h2&gt;

&lt;p&gt;为了洞察复杂协作，MCN 为每条消息注入了 OpenTelemetry 标准的 Trace Context。开发者在控制台可以看到一次“从研究到文章发布”的完整调用链：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task #123 (article_creation_crew)
 ├─ researcher_agent: 1.2s (ok)
 ├─ writer_agent: 2.8s (ok)
 │   └─ tool: gpt-4o 调用 1.3s
 └─ reviewer_agent: 0.5s (ok)
     └─ 输出: approved
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;所有日志、指标和链路由 CrewOps Dashboard 统一展示，支持按业务 ID 检索。&lt;/p&gt;

&lt;h2&gt;
  
  
  8. 实战示例：搭建一个营销内容流水线
&lt;/h2&gt;

&lt;p&gt;下面用 Python SDK 快速搭建一个简化版的多 Agent 内容生成流水线（基于 MCN）。&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;agentcrew&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Skill&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CrewController&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CrewBus&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;

&lt;span class="c1"&gt;# 1. 定义 Skill
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;research_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# 模拟搜索资料
&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;findings&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;AgentCrew MCN v2 发布，性能提升 40%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;write_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;findings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;findings&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="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;draft&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;根据研究结果撰写：&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;findings&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&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;draft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;review_skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;draft&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;draft&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="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&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="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;draft&lt;/span&gt;&lt;span class="p"&gt;:&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;approved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comment&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="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;approved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comment&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;# 2. 构造 Agent 节点
&lt;/span&gt;&lt;span class="n"&gt;researcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentNode&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;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;research_skill&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;
&lt;span class="n"&gt;writer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentNode&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;writer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;write&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;write_skill&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;
&lt;span class="n"&gt;reviewer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentNode&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;reviewer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Skill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;review_skill&lt;/span&gt;&lt;span class="p"&gt;)])&lt;/span&gt;

&lt;span class="c1"&gt;# 3. 注册到总线并定义拓扑
&lt;/span&gt;&lt;span class="n"&gt;bus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;CrewBus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;bus&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="n"&gt;researcher&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reviewer&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;topology_def&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;entry&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;researcher&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;topology&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="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&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;researcher&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;to&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;writer&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;intent&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;write&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;from&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;writer&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;to&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;reviewer&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;intent&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;review&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;from&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;reviewer&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;to&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;exit&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;condition&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;output.approved == true&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="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;CrewController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;topology_def&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 4. 执行任务
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;task&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;topic&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;AgentCrew 架构&lt;/span&gt;&lt;span class="sh"&gt;"&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&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="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;span class="c1"&gt;# 整个流水线状态
&lt;/span&gt;
&lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. 总结与展望
&lt;/h2&gt;

&lt;p&gt;AgentCrew MCN 提供了一套轻量级、可组合的多 Agent 协作架构。它通过意图驱动的消息总线、声明式拓扑编排、以及丰富的异常处理，让开发者从“如何让 Agent 通信”的细节中解放出来，专注于业务 Skill 的开发。&lt;/p&gt;

&lt;p&gt;未来，我们将进一步增强 MCN 的自治能力，包括：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crew 自动优化&lt;/strong&gt;：根据历史执行轨迹自动合并/拆分节点。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;多模态 Agent 支持&lt;/strong&gt;：不仅限文本，还可接入图像、音视频处理 Agent。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;联邦协作&lt;/strong&gt;：跨团队、跨组织的多 Crew 信任与协作协议。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;如果你对多 Agent 协作感兴趣，欢迎前往 &lt;a href="https://github.com/agentcrew/mcn" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; 查看项目源码，点亮 Star，也期待在 Issue 区听到你的场景与需求。让我们一同探索智能体协作的无限可能！&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>AgentCrew MCN: Your Open-Source AI Marketing Team That Works 24/7</title>
      <dc:creator>Rick</dc:creator>
      <pubDate>Tue, 21 Jul 2026 07:00:56 +0000</pubDate>
      <link>https://dev.to/superrick/agentcrew-mcn-your-open-source-ai-marketing-team-that-works-247-3mln</link>
      <guid>https://dev.to/superrick/agentcrew-mcn-your-open-source-ai-marketing-team-that-works-247-3mln</guid>
      <description>&lt;h1&gt;
  
  
  AgentCrew MCN: Your Open-Source AI Marketing Team That Works 24/7
&lt;/h1&gt;

&lt;p&gt;Let’s be honest—content marketing can be brutal. You need to research topics, craft technical articles, adapt the tone for every platform, schedule posts for maximum engagement, track performance, and then do it all over again. For indie hackers, open-source maintainers, and small dev teams, this often means either burning out or ignoring content altogether.&lt;/p&gt;

&lt;p&gt;What if you had a team of AI agents that could handle the entire pipeline—from researching a topic to publishing on Juejin, Dev.to, and Zhihu—while you sleep? That’s exactly what &lt;strong&gt;AgentCrew MCN&lt;/strong&gt; does. It’s an open-source multi-agent content marketing automation tool written in Python, complete with a web dashboard, RAG knowledge base, smart scheduling, and a dogfooding twist: the project promotes itself.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk through the architecture, show you how to get started with a few commands, and demonstrate some advanced features like scheduled publishing and image generation.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is AgentCrew MCN?
&lt;/h2&gt;

&lt;p&gt;AgentCrew MCN structures content marketing as a team of specialized AI workers, each with its own role. There are four core agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Writer Agent&lt;/strong&gt; – Your copywriter. It generates technical articles, social posts, and twitter threads, injecting relevant knowledge from a RAG (Retrieval-Augmented Generation) system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer Agent&lt;/strong&gt; – Your quality assurance. It scans content before publication for safety, policy compliance, and basic readability checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publisher Agent&lt;/strong&gt; – Your operations person. It pushes content to platforms like Juejin, Zhihu, and Dev.to, adapting the format and style to each community.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyst Agent&lt;/strong&gt; – Your data analyst. It tracks content performance, recommends optimal publish times, and learns from past results—right down to adding random jitter to avoid detection of automated scheduling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The magic isn’t just in the agents; it’s in the &lt;strong&gt;Skills + Tools&lt;/strong&gt; system. Each agent has high-level skills (like “generate a technical thread” or “batch publish”) composed of low-level tools (like &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;rag&lt;/code&gt;, &lt;code&gt;compose&lt;/code&gt;, &lt;code&gt;devto_api&lt;/code&gt;). Since v0.4, the system is LLM-driven, meaning the agents can reason about which tool to use and in which order—no rigid workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fsuper-rick%2Fagentcrew-mcn%2Fraw%2Fmain%2Fdocs%2Fassets%2Farch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fsuper-rick%2Fagentcrew-mcn%2Fraw%2Fmain%2Fdocs%2Fassets%2Farch.png" alt="Architecture" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Start: From Zero to Published in 5 Minutes
&lt;/h2&gt;

&lt;p&gt;AgentCrew is a Python package available on PyPI. You’ll need Python 3.10+ and an API key for an LLM provider. It supports DeepSeek, OpenAI, Anthropic, and Ollama—switch with one config field.&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;# 1. Install&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;agentcrew-mcn

&lt;span class="c"&gt;# 2. Initialize configuration&lt;/span&gt;
agentcrew-mcn init

&lt;span class="c"&gt;# 3. Edit the generated .env file with your LLM API key&lt;/span&gt;
&lt;span class="c"&gt;#    DEEPSEEK_API_KEY=sk-...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. Now let’s generate a technical article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn write generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic&lt;/span&gt; &lt;span class="s2"&gt;"Python async programming"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--style&lt;/span&gt; technical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Writer Agent will research the topic (optionally using the RAG database from your previous articles), compose a structured piece, and save it as Markdown. Before publishing, you can run a dry run to see what will happen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn publish post &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--file&lt;/span&gt; article.md &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--platform&lt;/span&gt; devto &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything looks good, remove the &lt;code&gt;--dry-run&lt;/code&gt; flag to actually post it to your Dev.to account.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;init&lt;/code&gt; command creates a &lt;code&gt;config.yaml&lt;/code&gt;. A minimal setup looks like this:&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="na"&gt;llm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek&lt;/span&gt;
  &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DEEPSEEK_API_KEY}&lt;/span&gt;   &lt;span class="c1"&gt;# reads from .env&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek-chat&lt;/span&gt;

&lt;span class="na"&gt;platforms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;devto&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DEVTO_API_KEY}&lt;/span&gt;     &lt;span class="c1"&gt;# get it from https://dev.to/settings/extensions&lt;/span&gt;
  &lt;span class="na"&gt;juejin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cookie&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${JUEJIN_COOKIE}&lt;/span&gt;      &lt;span class="c1"&gt;# export from browser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;${VARIABLE}&lt;/code&gt; syntax pulls values from your &lt;code&gt;.env&lt;/code&gt; file, keeping secrets out of your config.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Agent Orchestra: How It All Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;At the center sits the &lt;strong&gt;Orchestrator&lt;/strong&gt;, which is responsible for task dispatch, scheduling, and configuration. When you run &lt;code&gt;agentcrew-mcn write generate&lt;/code&gt;, the Orchestrator hands the task to the Writer Agent, injecting the appropriate skills. The Writer might use a &lt;code&gt;search&lt;/code&gt; tool to pull recent content from the web, a &lt;code&gt;rag&lt;/code&gt; tool to retrieve relevant paragraphs from your knowledge base, and a &lt;code&gt;compose&lt;/code&gt; tool to generate the final article.&lt;/p&gt;

&lt;p&gt;The Reviewer Agent then checks the output using a series of validation rules (configurable) and can trigger a rewrite automatically if something is off.&lt;/p&gt;

&lt;p&gt;The Publisher Agent converts the article into the platform-specific format. For example, Juejin articles use a “Golden Nugget” title convention; Dev.to uses front matter. The agent knows how to handle these differences.&lt;/p&gt;

&lt;p&gt;Finally, the Analyst Agent runs scheduling logic. Instead of posting at a fixed time, it uses a recommendation model (powered by historical data) and adds random jitter to mimic human behavior, reducing the chance of being flagged as automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced Features You’ll Love
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. RAG Knowledge Base
&lt;/h3&gt;

&lt;p&gt;The built‑in vector store (ChromaDB) lets you ingest past articles, documentation, or any text source, so the Writer Agent can produce content that’s consistent with your tone and style.&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;# Ingest a previous blog post&lt;/span&gt;
agentcrew-mcn rag ingest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--file&lt;/span&gt; my_old_article.md &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--source&lt;/span&gt; &lt;span class="s2"&gt;"personal_blog"&lt;/span&gt;

&lt;span class="c"&gt;# Search the knowledge base later&lt;/span&gt;
agentcrew-mcn rag search &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"AI Agent architecture"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The retrieved context is automatically prepended to the prompt when generating new content.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Scheduled Publishing
&lt;/h3&gt;

&lt;p&gt;Want to keep your social media active without constant manual effort? Use the scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn schedule start &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic-file&lt;/span&gt; topics.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--platform&lt;/span&gt; juejin &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--interval&lt;/span&gt; 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will pick a topic from the file, generate and publish an article, and repeat every 6 hours. The Analyst Agent chooses the exact moment within the interval, so posting doesn’t look like an hourly cron job.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multi-Provider LLM and Image Generation
&lt;/h3&gt;

&lt;p&gt;Not locked into one AI provider. Set &lt;code&gt;provider: openai&lt;/code&gt; in your config to switch to GPT-4. For cover images, enable DALL‑E 3:&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="na"&gt;image_gen&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dall-e-3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Writer Agent will automatically generate a cover image for each article.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Dashboard and Growth Tracking
&lt;/h3&gt;

&lt;p&gt;A Streamlit dashboard gives you real‑time analytics: publish history, engagement metrics, and AI-generated suggestions for next topics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additionally, a &lt;code&gt;GROWTH.md&lt;/code&gt; file logs follower counts, views, and other KPIs over time, so you can measure progress.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dogfooding: The Project Promotes Itself
&lt;/h2&gt;

&lt;p&gt;A notable aspect of AgentCrew is &lt;strong&gt;dogfooding&lt;/strong&gt;—the project uses itself to write and publish content about itself. The marketing of AgentCrew is largely automated by AgentCrew, which serves as both a proof‑of‑concept and a source of continuous improvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Roadmap and Community
&lt;/h2&gt;

&lt;p&gt;AgentCrew is MIT‑licensed and under active development. The current version (v0.4) has &lt;strong&gt;392 tests&lt;/strong&gt; and &lt;strong&gt;85% coverage&lt;/strong&gt;. Here’s what’s coming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v0.5&lt;/strong&gt; – Support for 6 new platforms: CSDN, WeChat Official Accounts, SegmentFault, X (Twitter), Xiaohongshu, and Medium.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.0&lt;/strong&gt; – REST API, plugin system, and an official community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a Python developer, content creator, or just curious about multi‑agent systems, there are plenty of ways to contribute. Check out the &lt;a href="https://github.com/super-rick/agentcrew-mcn" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; and the &lt;a href="https://super-rick.github.io/agentcrew-mcn/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Getting started is ridiculously simple: &lt;code&gt;pip install agentcrew-mcn &amp;amp;&amp;amp; agentcrew-mcn init&lt;/code&gt;. From there, you’re five lines away from having an AI marketing team that never sleeps, never asks for a raise, and keeps your OSS project or personal brand visible across the web—without burning you out.&lt;/p&gt;

&lt;p&gt;What would you do with a 24/7 AI writing crew? I’d love to hear your ideas in the comments. And if this project sounds useful, a ⭐ on GitHub goes a long way!&lt;/p&gt;




&lt;h1&gt;
  
  
  python #ai #automation #opensource #devto #marketing #multiagent #llm
&lt;/h1&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>AgentCrew MCN: Your Open-Source AI Marketing Team That Works 24/7</title>
      <dc:creator>Rick</dc:creator>
      <pubDate>Tue, 21 Jul 2026 06:23:49 +0000</pubDate>
      <link>https://dev.to/superrick/agentcrew-mcn-your-open-source-ai-marketing-team-that-works-247-2f23</link>
      <guid>https://dev.to/superrick/agentcrew-mcn-your-open-source-ai-marketing-team-that-works-247-2f23</guid>
      <description>&lt;h1&gt;
  
  
  AgentCrew MCN: Your Open-Source AI Marketing Team That Works 24/7
&lt;/h1&gt;

&lt;p&gt;Let’s be honest—content marketing can be brutal. You need to research topics, craft technical articles, adapt the tone for every platform, schedule posts for maximum engagement, track performance, and then do it all over again. For indie hackers, open-source maintainers, and small dev teams, this often means either burning out or ignoring content altogether.&lt;/p&gt;

&lt;p&gt;What if you had a team of AI agents that could handle the entire pipeline—from researching a topic to publishing on Juejin, Dev.to, and Zhihu—while you sleep? That’s exactly what &lt;strong&gt;AgentCrew MCN&lt;/strong&gt; does. It’s an open-source multi-agent content marketing automation tool written in Python, complete with a web dashboard, RAG knowledge base, smart scheduling, and a dogfooding twist: the project promotes itself.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk through the architecture, show you how to get started with a few commands, and demonstrate some advanced features like scheduled publishing and image generation.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Is AgentCrew MCN?
&lt;/h2&gt;

&lt;p&gt;AgentCrew MCN structures content marketing as a team of specialized AI workers, each with its own role. There are four core agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Writer Agent&lt;/strong&gt; – Your copywriter. It generates technical articles, social posts, and twitter threads, injecting relevant knowledge from a RAG (Retrieval-Augmented Generation) system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviewer Agent&lt;/strong&gt; – Your quality assurance. It scans content before publication for safety, policy compliance, and basic readability checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publisher Agent&lt;/strong&gt; – Your operations person. It pushes content to platforms like Juejin, Zhihu, and Dev.to, adapting the format and style to each community.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyst Agent&lt;/strong&gt; – Your data analyst. It tracks content performance, recommends optimal publish times, and learns from past results—right down to adding random jitter to avoid detection of automated scheduling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The magic isn’t just in the agents; it’s in the &lt;strong&gt;Skills + Tools&lt;/strong&gt; system. Each agent has high-level skills (like “generate a technical thread” or “batch publish”) composed of low-level tools (like &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;rag&lt;/code&gt;, &lt;code&gt;compose&lt;/code&gt;, &lt;code&gt;devto_api&lt;/code&gt;). Since v0.4, the system is LLM-driven, meaning the agents can reason about which tool to use and in which order—no rigid workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fsuper-rick%2Fagentcrew-mcn%2Fraw%2Fmain%2Fdocs%2Fassets%2Farch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fsuper-rick%2Fagentcrew-mcn%2Fraw%2Fmain%2Fdocs%2Fassets%2Farch.png" alt="Architecture" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Start: From Zero to Published in 5 Minutes
&lt;/h2&gt;

&lt;p&gt;AgentCrew is a Python package available on PyPI. You’ll need Python 3.10+ and an API key for an LLM provider. It supports DeepSeek, OpenAI, Anthropic, and Ollama—switch with one config field.&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;# 1. Install&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;agentcrew-mcn

&lt;span class="c"&gt;# 2. Initialize configuration&lt;/span&gt;
agentcrew-mcn init

&lt;span class="c"&gt;# 3. Edit the generated .env file with your LLM API key&lt;/span&gt;
&lt;span class="c"&gt;#    DEEPSEEK_API_KEY=sk-...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. Now let’s generate a technical article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn write generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic&lt;/span&gt; &lt;span class="s2"&gt;"Python async programming"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--style&lt;/span&gt; technical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Writer Agent will research the topic (optionally using the RAG database from your previous articles), compose a structured piece, and save it as Markdown. Before publishing, you can run a dry run to see what will happen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn publish post &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--file&lt;/span&gt; article.md &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--platform&lt;/span&gt; devto &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything looks good, remove the &lt;code&gt;--dry-run&lt;/code&gt; flag to actually post it to your Dev.to account.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;init&lt;/code&gt; command creates a &lt;code&gt;config.yaml&lt;/code&gt;. A minimal setup looks like this:&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="na"&gt;llm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek&lt;/span&gt;
  &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DEEPSEEK_API_KEY}&lt;/span&gt;   &lt;span class="c1"&gt;# reads from .env&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;deepseek-chat&lt;/span&gt;

&lt;span class="na"&gt;platforms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;devto&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${DEVTO_API_KEY}&lt;/span&gt;     &lt;span class="c1"&gt;# get it from https://dev.to/settings/extensions&lt;/span&gt;
  &lt;span class="na"&gt;juejin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cookie&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${JUEJIN_COOKIE}&lt;/span&gt;      &lt;span class="c1"&gt;# export from browser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;${VARIABLE}&lt;/code&gt; syntax pulls values from your &lt;code&gt;.env&lt;/code&gt; file, keeping secrets out of your config.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Agent Orchestra: How It All Works Under the Hood
&lt;/h2&gt;

&lt;p&gt;At the center sits the &lt;strong&gt;Orchestrator&lt;/strong&gt;, which is responsible for task dispatch, scheduling, and configuration. When you run &lt;code&gt;agentcrew-mcn write generate&lt;/code&gt;, the Orchestrator hands the task to the Writer Agent, injecting the appropriate skills. The Writer might use a &lt;code&gt;search&lt;/code&gt; tool to pull recent content from the web, a &lt;code&gt;rag&lt;/code&gt; tool to retrieve relevant paragraphs from your knowledge base, and a &lt;code&gt;compose&lt;/code&gt; tool to generate the final article.&lt;/p&gt;

&lt;p&gt;The Reviewer Agent then checks the output using a series of validation rules (configurable) and can trigger a rewrite automatically if something is off.&lt;/p&gt;

&lt;p&gt;The Publisher Agent converts the article into the platform-specific format. For example, Juejin articles use a “Golden Nugget” title convention; Dev.to uses front matter. The agent knows how to handle these differences.&lt;/p&gt;

&lt;p&gt;Finally, the Analyst Agent runs scheduling logic. Instead of posting at a fixed time, it uses a recommendation model (powered by historical data) and adds random jitter to mimic human behavior, reducing the chance of being flagged as automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Advanced Features You’ll Love
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. RAG Knowledge Base
&lt;/h3&gt;

&lt;p&gt;The built‑in vector store (ChromaDB) lets you ingest past articles, documentation, or any text source, so the Writer Agent can produce content that’s consistent with your tone and style.&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;# Ingest a previous blog post&lt;/span&gt;
agentcrew-mcn rag ingest &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--file&lt;/span&gt; my_old_article.md &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--source&lt;/span&gt; &lt;span class="s2"&gt;"personal_blog"&lt;/span&gt;

&lt;span class="c"&gt;# Search the knowledge base later&lt;/span&gt;
agentcrew-mcn rag search &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"AI Agent architecture"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The retrieved context is automatically prepended to the prompt when generating new content.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Scheduled Publishing
&lt;/h3&gt;

&lt;p&gt;Want to keep your social media active without constant manual effort? Use the scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn schedule start &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--topic-file&lt;/span&gt; topics.txt &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--platform&lt;/span&gt; juejin &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--interval&lt;/span&gt; 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will pick a topic from the file, generate and publish an article, and repeat every 6 hours. The Analyst Agent chooses the exact moment within the interval, so posting doesn’t look like an hourly cron job.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multi-Provider LLM and Image Generation
&lt;/h3&gt;

&lt;p&gt;Not locked into one AI provider. Set &lt;code&gt;provider: openai&lt;/code&gt; in your config to switch to GPT-4. For cover images, enable DALL‑E 3:&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="na"&gt;image_gen&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dall-e-3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Writer Agent will automatically generate a cover image for each article.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Dashboard and Growth Tracking
&lt;/h3&gt;

&lt;p&gt;A Streamlit dashboard gives you real‑time analytics: publish history, engagement metrics, and AI-generated suggestions for next topics.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;agentcrew-mcn dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additionally, a &lt;code&gt;GROWTH.md&lt;/code&gt; file logs follower counts, views, and other KPIs over time, so you can measure progress.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dogfooding: The Project Promotes Itself
&lt;/h2&gt;

&lt;p&gt;A notable aspect of AgentCrew is &lt;strong&gt;dogfooding&lt;/strong&gt;—the project uses itself to write and publish content about itself. The marketing of AgentCrew is largely automated by AgentCrew, which serves as both a proof‑of‑concept and a source of continuous improvement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Roadmap and Community
&lt;/h2&gt;

&lt;p&gt;AgentCrew is MIT‑licensed and under active development. The current version (v0.4) has &lt;strong&gt;392 tests&lt;/strong&gt; and &lt;strong&gt;85% coverage&lt;/strong&gt;. Here’s what’s coming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v0.5&lt;/strong&gt; – Support for 6 new platforms: CSDN, WeChat Official Accounts, SegmentFault, X (Twitter), Xiaohongshu, and Medium.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v1.0&lt;/strong&gt; – REST API, plugin system, and an official community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a Python developer, content creator, or just curious about multi‑agent systems, there are plenty of ways to contribute. Check out the &lt;a href="https://github.com/super-rick/agentcrew-mcn" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; and the &lt;a href="https://super-rick.github.io/agentcrew-mcn/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Getting started is ridiculously simple: &lt;code&gt;pip install agentcrew-mcn &amp;amp;&amp;amp; agentcrew-mcn init&lt;/code&gt;. From there, you’re five lines away from having an AI marketing team that never sleeps, never asks for a raise, and keeps your OSS project or personal brand visible across the web—without burning you out.&lt;/p&gt;

&lt;p&gt;What would you do with a 24/7 AI writing crew? I’d love to hear your ideas in the comments. And if this project sounds useful, a ⭐ on GitHub goes a long way!&lt;/p&gt;




&lt;h1&gt;
  
  
  python #ai #automation #opensource #devto #marketing #multiagent #llm
&lt;/h1&gt;

</description>
      <category>opensource</category>
      <category>python</category>
      <category>ai</category>
    </item>
    <item>
      <title>AgentCrew Quick Test</title>
      <dc:creator>Rick</dc:creator>
      <pubDate>Fri, 17 Jul 2026 09:39:16 +0000</pubDate>
      <link>https://dev.to/superrick/agentcrew-quick-test-2fca</link>
      <guid>https://dev.to/superrick/agentcrew-quick-test-2fca</guid>
      <description>&lt;h1&gt;
  
  
  Hello Dev.to from AgentCrew 🚀
&lt;/h1&gt;

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