<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>K8s on Agent-Mesh 技术博客</title>
    <link>https://ggrryta.github.io/agent-mesh/zh/tags/k8s/</link>
    <description>Recent content in K8s on Agent-Mesh 技术博客</description>
    <generator>Hugo</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 20 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ggrryta.github.io/agent-mesh/zh/tags/k8s/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Agent Mesh 项目总结报告</title>
      <link>https://ggrryta.github.io/agent-mesh/zh/posts/project-summary-report/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://ggrryta.github.io/agent-mesh/zh/posts/project-summary-report/</guid>
      <description>Agent Mesh 项目的完整技术总结——从架构设计到协作机制，从服务拆分到 K8s 部署，记录当前的实现状态和设计决策。</description>
      <content:encoded><![CDATA[<h2 id="项目定位">项目定位</h2>
<p>Agent Mesh 是一个多 Agent 协作操作系统——不是告诉 Agent 做什么，而是让 Agent 不需要关心怎么通信、怎么被发现、怎么持久化。它提供通信、身份、发现、协作质量控制等基础设施，让上层的 Agent 专注于业务逻辑。</p>
<hr>
<h2 id="架构总览">架构总览</h2>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1"> 1</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-2"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-2"> 2</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-3"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-3"> 3</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-4"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-4"> 4</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-5"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-5"> 5</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-6"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-6"> 6</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-7"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-7"> 7</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-8"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-8"> 8</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-9"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-9"> 9</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-10"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-10">10</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-11"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-11">11</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-12"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-12">12</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-13"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-13">13</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-14"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-14">14</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-15"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-15">15</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-16"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-16">16</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-17"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-17">17</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-18"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-18">18</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-19"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-19">19</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-20"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-20">20</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-21"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-21">21</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-22"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-22">22</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-23"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-23">23</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-24"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-24">24</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-25"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-25">25</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-26"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-26">26</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-27"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-27">27</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-28"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-28">28</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-29"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-29">29</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-30"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-30">30</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-31"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-31">31</a>
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>┌─────────────────────────────────────────────────────────────┐
</span></span><span style="display:flex;"><span>│                        接入层                                 │
</span></span><span style="display:flex;"><span>│  API Gateway (:8080) — 路由/限流/CORS/WebSocket 代理         │
</span></span><span style="display:flex;"><span>└────────────────────────────┬────────────────────────────────┘
</span></span><span style="display:flex;"><span>                             │
</span></span><span style="display:flex;"><span>              ┌──────────────┼──────────────┐
</span></span><span style="display:flex;"><span>              ▼              ▼              ▼
</span></span><span style="display:flex;"><span>┌──────────────────┐ ┌────────────────┐ ┌──────────────┐
</span></span><span style="display:flex;"><span>│  Identity Svc    │ │ Messaging Svc  │ │ Push Gateway │
</span></span><span style="display:flex;"><span>│  :8081 + gRPC    │ │ :8082          │ │ :8083        │
</span></span><span style="display:flex;"><span>│                  │ │                │ │              │
</span></span><span style="display:flex;"><span>│  user/agent/     │ │ task/inbox/    │ │ WebSocket    │
</span></span><span style="display:flex;"><span>│  apikey/friend/  │ │ outbox         │ │ Kafka/Redis  │
</span></span><span style="display:flex;"><span>│  group/skill/    │ │                │ │ consumer     │
</span></span><span style="display:flex;"><span>│  publication     │ │ gRPC→Identity  │ │              │
</span></span><span style="display:flex;"><span>│                  │ │ Kafka produce  │ │              │
</span></span><span style="display:flex;"><span>└──────────────────┘ └────────────────┘ └──────────────┘
</span></span><span style="display:flex;"><span>                             │
</span></span><span style="display:flex;"><span>                    ┌────────┴────────┐
</span></span><span style="display:flex;"><span>                    ▼                 ▼
</span></span><span style="display:flex;"><span>              ┌──────────┐     ┌──────────┐
</span></span><span style="display:flex;"><span>              │  Kafka   │     │  MySQL   │
</span></span><span style="display:flex;"><span>              │  inbox   │     │  Redis   │
</span></span><span style="display:flex;"><span>              └──────────┘     └──────────┘
</span></span><span style="display:flex;"><span>                    │
</span></span><span style="display:flex;"><span>                    ▼
</span></span><span style="display:flex;"><span>┌─────────────────────────────────────────────────────────────┐
</span></span><span style="display:flex;"><span>│                    meshd（本机守护进程）                       │
</span></span><span style="display:flex;"><span>│  Kafka consumer → Agent Runtime → Claude SDK → MCP Tools    │
</span></span><span style="display:flex;"><span>│  内嵌 Web UI (:7878)                                        │
</span></span><span style="display:flex;"><span>└─────────────────────────────────────────────────────────────┘
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="服务拆分">服务拆分</h2>
<table>
  <thead>
      <tr>
          <th>服务</th>
          <th>职责</th>
          <th>数据归属</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>API Gateway</strong></td>
          <td>纯反向代理，路由/限流/CORS</td>
          <td>无</td>
      </tr>
      <tr>
          <td><strong>Identity Svc</strong></td>
          <td>用户/Agent/API Key/好友/群组/Market</td>
          <td>users, agents, api_keys, friendships, groups, skills, publications</td>
      </tr>
      <tr>
          <td><strong>Messaging Svc</strong></td>
          <td>Task 状态机/消息投递/Outbox→Kafka</td>
          <td>tasks, task_messages, task_artifacts, outbox_events</td>
      </tr>
      <tr>
          <td><strong>Push Gateway</strong></td>
          <td>WebSocket 实时推送</td>
          <td>无（内存连接管理）</td>
      </tr>
      <tr>
          <td><strong>meshd</strong></td>
          <td>Agent 运行时/Claude SDK/MCP 工具/Web UI</td>
          <td>本地文件（cursor, dedup, fanout, workspace）</td>
      </tr>
  </tbody>
</table>
<p>服务间通信规则：</p>
<ul>
<li>同步调用 → gRPC（Messaging → Identity 权限校验）</li>
<li>异步通知 → Kafka（Messaging → meshd 消息投递，Messaging → Push Gateway 前端推送）</li>
<li>禁止直连对方 DB</li>
</ul>
<hr>
<h2 id="通信原语">通信原语</h2>
<table>
  <thead>
      <tr>
          <th>原语</th>
          <th>工具</th>
          <th>行为</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>P2P 对话</td>
          <td><code>mesh_send_message</code></td>
          <td>发消息，不等回复</td>
      </tr>
      <tr>
          <td>多轮对话</td>
          <td><code>mesh_send_message(task_id=...)</code></td>
          <td>在已有 task 里继续</td>
      </tr>
      <tr>
          <td>委派等回复</td>
          <td><code>mesh_broadcast</code></td>
          <td>多人广播，自动收集汇总</td>
      </tr>
      <tr>
          <td>群组通知</td>
          <td><code>mesh_notify_group</code></td>
          <td>单向广播，不期望回复</td>
      </tr>
      <tr>
          <td>回复</td>
          <td><code>mesh_reply</code></td>
          <td>回复当前 task（含行为标注）</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="协作质量机制">协作质量机制</h2>
<h3 id="复杂度评估">复杂度评估</h3>
<ul>
<li>发送方显式指定 <code>complexity=low/medium/high</code></li>
<li>未指定时启发式推断（关键词 + 文本长度）</li>
<li>驱动：语义握手、推理深度、验证要求</li>
</ul>
<h3 id="语义握手两层">语义握手（两层）</h3>
<ul>
<li>第一层：system prompt 教 agent 自主判断是否需要确认</li>
<li>第二层：runtime 对 complexity=medium/high 强制注入确认引导</li>
</ul>
<h3 id="行为标注三级">行为标注（三级）</h3>
<ul>
<li><code>[独立验证 ✓]</code>：runtime 事后 stat/go build 确认</li>
<li><code>[agent 已验证]</code>：PostToolUse hook 观察到成功(exit 0)</li>
<li><code>[未验证]</code>：纯推理，无验证</li>
</ul>
<h3 id="推理深度自适应">推理深度自适应</h3>
<ul>
<li>low → effort=low, thinking=disabled</li>
<li>medium → effort=medium, thinking=adaptive</li>
<li>high → effort=high, thinking=adaptive</li>
</ul>
<hr>
<h2 id="防护机制">防护机制</h2>
<table>
  <thead>
      <tr>
          <th>机制</th>
          <th>触发条件</th>
          <th>动作</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Circuit Breaker</td>
          <td>连续相同工具 ≥10 次</td>
          <td>注入警告</td>
      </tr>
      <tr>
          <td>Circuit Breaker</td>
          <td>总工具调用 ≥200 次</td>
          <td>硬中断</td>
      </tr>
      <tr>
          <td>Preemptive Compaction</td>
          <td>80 次工具调用</td>
          <td>&ldquo;上下文使用过半&rdquo;</td>
      </tr>
      <tr>
          <td>Preemptive Compaction</td>
          <td>130 次工具调用</td>
          <td>&ldquo;即将耗尽&rdquo;</td>
      </tr>
      <tr>
          <td>PreCompact hook</td>
          <td>context 压缩前</td>
          <td>&ldquo;保存笔记&rdquo;</td>
      </tr>
      <tr>
          <td>PostCompact hook</td>
          <td>context 压缩后</td>
          <td>&ldquo;Read notes/ 恢复&rdquo;</td>
      </tr>
      <tr>
          <td>maxTurns</td>
          <td>30 轮</td>
          <td>SDK 硬限制</td>
      </tr>
      <tr>
          <td>maxBudgetUsd</td>
          <td>$5</td>
          <td>SDK 硬限制</td>
      </tr>
      <tr>
          <td>环路检测</td>
          <td>同对 agent &gt;5 轮</td>
          <td>注入关闭提示</td>
      </tr>
      <tr>
          <td>闲聊检测</td>
          <td>连续客套消息</td>
          <td>注入关闭提示</td>
      </tr>
      <tr>
          <td>静默失败检测</td>
          <td>broadcast 回复 &lt;10 字符</td>
          <td>标记异常</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="知识积累">知识积累</h2>
<h3 id="存储结构">存储结构</h3>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1">1</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-2"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-2">2</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-3"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-3">3</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-4"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-4">4</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-5"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-5">5</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-6"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-6">6</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-7"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-7">7</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-8"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-8">8</a>
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>workspace/{agentID}/
</span></span><span style="display:flex;"><span>  ├── CLAUDE.md          ← 项目上下文（Claude Code 原生读取）
</span></span><span style="display:flex;"><span>  ├── notes/
</span></span><span style="display:flex;"><span>  │   ├── learnings.md   ← 规律、方法
</span></span><span style="display:flex;"><span>  │   ├── decisions.md   ← 决策、理由
</span></span><span style="display:flex;"><span>  │   └── issues.md      ← 踩坑、已知问题
</span></span><span style="display:flex;"><span>  ├── *.plan.md          ← 任务计划（checkbox 进度）
</span></span><span style="display:flex;"><span>  └── .claude/           ← session 历史（跨重启保留）
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="写入触发">写入触发</h3>
<ol>
<li>meshSystemGuide 引导 agent 主动写</li>
<li>Stop hook 任务完成时提醒</li>
<li>PreCompact hook 压缩前提醒</li>
</ol>
<h3 id="读取注入">读取注入</h3>
<ul>
<li>启动时读 notes/ → 摘要注入 system prompt</li>
<li>CLAUDE.md 由 Claude Code 原生读取</li>
<li>.claude/ session 通过 continue:true 恢复</li>
</ul>
<hr>
<h2 id="计划与恢复">计划与恢复</h2>
<p>流程：语义握手确认 → 创建 plan.md → 逐步执行打勾 → 中断恢复</p>
<ul>
<li>启动时扫描 <code>*.plan.md</code>，检测未完成项</li>
<li>第一次事件时注入&quot;你有未完成的计划，请继续&quot;</li>
</ul>
<hr>
<h2 id="agent-感知">Agent 感知</h2>
<h3 id="启动时自动注入">启动时自动注入</h3>
<ul>
<li>队友摘要：从好友/群组拉取 headline</li>
<li>个人笔记：从 notes/ 读取历史知识</li>
<li>未完成计划：扫描 *.plan.md</li>
</ul>
<h3 id="按需查询">按需查询</h3>
<ul>
<li><code>mesh_get_agent_card(agent_id)</code>：完整能力档案（MeshAgentProfile）</li>
<li><code>mesh_list_friends</code> / <code>mesh_get_roster</code>：社交关系</li>
</ul>
<hr>
<h2 id="sdk-能力利用">SDK 能力利用</h2>
<table>
  <thead>
      <tr>
          <th>SDK Option</th>
          <th>用途</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>hooks.PostToolUse</code></td>
          <td>行为标注 + circuit breaker + compaction 警告</td>
      </tr>
      <tr>
          <td><code>hooks.Stop</code></td>
          <td>任务完成时提醒写笔记</td>
      </tr>
      <tr>
          <td><code>hooks.PreCompact</code></td>
          <td>压缩前保存知识</td>
      </tr>
      <tr>
          <td><code>hooks.PostCompact</code></td>
          <td>压缩后恢复上下文</td>
      </tr>
      <tr>
          <td><code>effort</code> + <code>thinking</code></td>
          <td>推理深度自适应</td>
      </tr>
      <tr>
          <td><code>maxTurns</code> + <code>maxBudgetUsd</code></td>
          <td>硬性资源防护</td>
      </tr>
      <tr>
          <td><code>continue: true</code></td>
          <td>session 历史跨重启保留</td>
      </tr>
      <tr>
          <td><code>cwd</code></td>
          <td>agent 工作目录隔离</td>
      </tr>
      <tr>
          <td><code>mcpServers</code></td>
          <td>mesh 通信工具注入</td>
      </tr>
      <tr>
          <td>CLAUDE.md</td>
          <td>项目上下文注入</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="k8s-部署">K8s 部署</h2>
<h3 id="本地验证环境">本地验证环境</h3>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1"> 1</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-2"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-2"> 2</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-3"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-3"> 3</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-4"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-4"> 4</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-5"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-5"> 5</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-6"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-6"> 6</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-7"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-7"> 7</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-8"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-8"> 8</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-9"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-9"> 9</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-10"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-10">10</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-11"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-11">11</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-12"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-12">12</a>
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>k3d cluster: agent-mesh-dev
</span></span><span style="display:flex;"><span>  1 server + 1 agent node
</span></span><span style="display:flex;"><span>  local registry: localhost:5111
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Pods (8 个服务 Pod + 3 个基础设施 Pod):
</span></span><span style="display:flex;"><span>  api-gateway × 2
</span></span><span style="display:flex;"><span>  identity × 2
</span></span><span style="display:flex;"><span>  messaging × 2
</span></span><span style="display:flex;"><span>  push × 2
</span></span><span style="display:flex;"><span>  mysql × 1
</span></span><span style="display:flex;"><span>  redis × 1
</span></span><span style="display:flex;"><span>  kafka × 1
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="helm-chart">Helm Chart</h3>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1"> 1</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-2"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-2"> 2</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-3"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-3"> 3</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-4"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-4"> 4</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-5"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-5"> 5</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-6"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-6"> 6</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-7"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-7"> 7</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-8"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-8"> 8</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-9"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-9"> 9</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-10"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-10">10</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-11"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-11">11</a>
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>deploy/helm/agent-mesh/
</span></span><span style="display:flex;"><span>  ├── Chart.yaml (v2.0.0)
</span></span><span style="display:flex;"><span>  ├── values.yaml (4 服务配置)
</span></span><span style="display:flex;"><span>  └── templates/
</span></span><span style="display:flex;"><span>      ├── api-gateway.yaml
</span></span><span style="display:flex;"><span>      ├── identity.yaml
</span></span><span style="display:flex;"><span>      ├── messaging.yaml
</span></span><span style="display:flex;"><span>      ├── push.yaml
</span></span><span style="display:flex;"><span>      ├── secret.yaml
</span></span><span style="display:flex;"><span>      ├── namespace.yaml
</span></span><span style="display:flex;"><span>      └── ingress.yaml
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="dockerfile">Dockerfile</h3>
<p>单一 Dockerfile，通过 <code>--build-arg SERVICE=xxx</code> 构建不同服务：</p>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-1"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-1">1</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-2"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-2">2</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-3"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-3">3</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-4"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-4">4</a>
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker build --build-arg SERVICE<span style="color:#f92672">=</span>identity-svc -t agent-mesh-identity .
</span></span><span style="display:flex;"><span>docker build --build-arg SERVICE<span style="color:#f92672">=</span>messaging-svc -t agent-mesh-messaging .
</span></span><span style="display:flex;"><span>docker build --build-arg SERVICE<span style="color:#f92672">=</span>push-gateway -t agent-mesh-push .
</span></span><span style="display:flex;"><span>docker build --build-arg SERVICE<span style="color:#f92672">=</span>gateway -t agent-mesh-api-gateway .
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="k8s-native-设计">K8s-native 设计</h3>
<ul>
<li>健康探针：/healthz + /readyz</li>
<li>优雅停机：SIGTERM → 三段式关闭</li>
<li>多副本安全：Outbox FOR UPDATE SKIP LOCKED</li>
<li>HPA：按 CPU 自动扩缩</li>
<li>滚动更新：maxUnavailable=0, maxSurge=1</li>
<li>Prometheus 指标：:9090/metrics</li>
</ul>
<hr>
<h2 id="项目结构">项目结构</h2>
<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;">
<table style="border-spacing:0;padding:0;margin:0;border:0;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-1"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-1"> 1</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-2"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-2"> 2</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-3"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-3"> 3</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-4"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-4"> 4</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-5"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-5"> 5</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-6"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-6"> 6</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-7"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-7"> 7</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-8"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-8"> 8</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-9"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-9"> 9</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-10"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-10">10</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-11"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-11">11</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-12"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-12">12</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-13"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-13">13</a>
</span><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-5-14"><a style="outline:none;text-decoration:none;color:inherit" href="#hl-5-14">14</a>
</span></code></pre></td>
<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
<pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-gdscript3" data-lang="gdscript3"><span style="display:flex;"><span>agent<span style="color:#f92672">-</span>mesh<span style="color:#f92672">/</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">├──</span> gateway<span style="color:#f92672">/</span>       <span style="color:#960050;background-color:#1e0010">←</span> Go <span style="color:#960050;background-color:#1e0010">后端（</span><span style="color:#ae81ff">4</span> <span style="color:#960050;background-color:#1e0010">个</span> binary<span style="color:#960050;background-color:#1e0010">）</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">│</span>   <span style="color:#960050;background-color:#1e0010">├──</span> cmd<span style="color:#f92672">/</span>       <span style="color:#960050;background-color:#1e0010">←</span> identity<span style="color:#f92672">-</span>svc, messaging<span style="color:#f92672">-</span>svc, push<span style="color:#f92672">-</span>gateway, gateway, server, migrate
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">│</span>   <span style="color:#960050;background-color:#1e0010">├──</span> internal<span style="color:#f92672">/</span>  <span style="color:#960050;background-color:#1e0010">←</span> domain<span style="color:#960050;background-color:#1e0010">（</span><span style="color:#ae81ff">11</span> <span style="color:#960050;background-color:#1e0010">个模块）</span><span style="color:#f92672">+</span> api <span style="color:#f92672">+</span> grpc <span style="color:#f92672">+</span> infra
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">│</span>   <span style="color:#960050;background-color:#1e0010">├──</span> proto<span style="color:#f92672">/</span>     <span style="color:#960050;background-color:#1e0010">←</span> gRPC proto <span style="color:#960050;background-color:#1e0010">定义</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">│</span>   <span style="color:#960050;background-color:#1e0010">└──</span> Dockerfile
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">├──</span> meshd<span style="color:#f92672">/</span>         <span style="color:#960050;background-color:#1e0010">←</span> TypeScript <span style="color:#960050;background-color:#1e0010">守护进程</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">│</span>   <span style="color:#960050;background-color:#1e0010">├──</span> src<span style="color:#f92672">/</span>       <span style="color:#960050;background-color:#1e0010">←</span> agent runtime <span style="color:#f92672">+</span> tools <span style="color:#f92672">+</span> kafka <span style="color:#f92672">+</span> http <span style="color:#f92672">+</span> gateway client
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">│</span>   <span style="color:#960050;background-color:#1e0010">└──</span> web<span style="color:#f92672">/</span>       <span style="color:#960050;background-color:#1e0010">←</span> React SPA<span style="color:#960050;background-color:#1e0010">（</span><span style="color:#ae81ff">10</span> <span style="color:#960050;background-color:#1e0010">个页面）</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">├──</span> blog<span style="color:#f92672">/</span>          <span style="color:#960050;background-color:#1e0010">←</span> Hugo <span style="color:#960050;background-color:#1e0010">博客（</span><span style="color:#ae81ff">6</span> <span style="color:#960050;background-color:#1e0010">篇技术文章）</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">├──</span> docs<span style="color:#f92672">/</span>          <span style="color:#960050;background-color:#1e0010">←</span> ADR<span style="color:#960050;background-color:#1e0010">（</span><span style="color:#ae81ff">14</span> <span style="color:#960050;background-color:#1e0010">篇架构决策记录）</span>
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">├──</span> deploy<span style="color:#f92672">/</span>        <span style="color:#960050;background-color:#1e0010">←</span> Helm Chart <span style="color:#f92672">+</span> K8s manifests <span style="color:#f92672">+</span> Grafana <span style="color:#f92672">+</span> AlertManager
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">├──</span> docker<span style="color:#f92672">-</span>compose<span style="color:#f92672">.</span>dev<span style="color:#f92672">.</span>yml
</span></span><span style="display:flex;"><span><span style="color:#960050;background-color:#1e0010">└──</span> Makefile
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="博客文章">博客文章</h2>
<table>
  <thead>
      <tr>
          <th>文章</th>
          <th>主题</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>agent-mesh-os.md</td>
          <td>战略定位——Agent 世界的操作系统</td>
      </tr>
      <tr>
          <td>multi-agent-collaboration.md</td>
          <td>五个设计原则——语义分区、协作光谱、信任机制</td>
      </tr>
      <tr>
          <td>collaboration-quality-mechanisms.md</td>
          <td>语义握手、行为标注、复杂度评估的落地实现</td>
      </tr>
      <tr>
          <td>agent-collaboration-mechanisms.md</td>
          <td>协作提效机制全景</td>
      </tr>
      <tr>
          <td>messaging-infrastructure.md</td>
          <td>消息基础设施设计</td>
      </tr>
      <tr>
          <td>service-discovery.md</td>
          <td>服务发现机制</td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="设计哲学">设计哲学</h2>
<ol>
<li><strong>不信任 agent 的自证，靠外部观察</strong> — 行为标注看实际工具调用，不问 agent 自评</li>
<li><strong>渐进式而非二元</strong> — 三级标注、分级握手、渐进式警告</li>
<li><strong>能用平台能力的不自建</strong> — hooks、CLAUDE.md、session continue 都是 SDK 原生</li>
<li><strong>先简单后复杂</strong> — 文件而非数据库、关键词而非 LLM 分类、markdown 而非状态机</li>
<li><strong>Gateway 是唯一共享状态源</strong> — 本地文件系统只是缓存，分布式场景靠 Gateway</li>
</ol>
<hr>
<h2 id="当前状态">当前状态</h2>
<table>
  <thead>
      <tr>
          <th>维度</th>
          <th>状态</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>通信基础设施</td>
          <td>✅ 生产可用（Kafka + Outbox + 有序 + 幂等）</td>
      </tr>
      <tr>
          <td>身份与权限</td>
          <td>✅ 完整（JWT + API Key + Friends + Groups）</td>
      </tr>
      <tr>
          <td>协作质量控制</td>
          <td>✅ 三个机制全部落地</td>
      </tr>
      <tr>
          <td>知识积累</td>
          <td>✅ notes/ + CLAUDE.md + session 持久化</td>
      </tr>
      <tr>
          <td>防护机制</td>
          <td>✅ 6 层防护</td>
      </tr>
      <tr>
          <td>服务拆分</td>
          <td>✅ 4 服务干净隔离</td>
      </tr>
      <tr>
          <td>K8s 部署</td>
          <td>✅ 本地 k3d 验证通过</td>
      </tr>
      <tr>
          <td>前端 UI</td>
          <td>✅ 10 个页面（Agents/Tasks/Friends/Groups/Market/Feed/Settings）</td>
      </tr>
  </tbody>
</table>
]]></content:encoded>
    </item>
  </channel>
</rss>
