> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myrmagent.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 产品架构

> 开源前端 + 服务端与 Harness 运行时如何协同。

# 产品架构

Myrm 由**两层产品**加可选云端控制平面组成。理解这一划分有助于部署、排错，以及从其他 Agent 迁移。

## 分层

| 层级                | 仓库 / 包                                      | 许可          | 你运行什么                          |
| ----------------- | ------------------------------------------- | ----------- | ------------------------------ |
| **产品 UI 与 API**   | `myrm-agent-frontend` + `myrm-agent-server` | 开源          | 浏览器 WebUI、REST/SSE API、认证、计费钩子 |
| **Agent Harness** | `myrm-agent-harness`                        | 专有运行时（捆绑分发） | 工具执行、记忆、浏览器、子 Agent、压缩         |
| **控制平面**（可选）      | `myrm-control-plane`                        | SaaS / 自托管  | LLM 中继、Work Units、统一工具网关       |
| **桌面壳**（可选）       | `myrm-agent-desktop`                        | 开源（Tauri）   | 封装 WebUI + 本地后端的原生应用           |

**通俗说法：** 前端是你点击的界面；服务端是进入工作空间的门；Harness 是沙箱内的「大脑与双手」。

## Harness 公开 API（集成契约）

开源 **Server** 只能通过 `myrm_agent_harness.api` 集成 Harness，**禁止**深 import 私有内部模块。

| 子模块                | 用途                                            |
| ------------------ | --------------------------------------------- |
| `factory`          | 创建 Agent（`create_skill_agent`、`SkillAgent`）   |
| `types` / `config` | 流式 DTO 与 LLM/Agent 配置                         |
| `protocols`        | 扩展点 Protocol 定义                               |
| `hooks`            | Session、skill-agent 上下文、记忆抽取、bash 注册表等集成 hook |
| `skills`           | 技能 frontmatter 解析与元数据构建                       |

`myrm-agent-server` 的 architecture CI 禁止 `from myrm_agent_harness.*._*` 导入，保证 Harness 内部可演进而公开 `api.__all__` 保持稳定。发行 wheel 为可读 `.py` 壳 + 编译 core 扩展。

**对 SaaS 的意义：** 控制平面按用户沙箱滚动 **runtime Docker 镜像 tag**（镜像内打包 server + harness）。Server 胶水层仅 import `api.hooks` / `api.skills`，镜像滚动时 glue 层保持稳定——多数开源 Agent 单体架构做不到这一点。

## 请求流（典型对话）

1. 用户在**前端**（或经服务端接入的 IM 渠道）发送消息。
2. **服务端**认证、加载 Agent 配置，向 UI 流式推送事件。
3. **Harness** 运行 Agent 循环：工具、记忆召回、子 Agent、上下文压缩。
4. 结果经服务端 → UI 回传（并可选择推送渠道通知）。

## 在哪里配置什么

| 任务                  | 位置                              |
| ------------------- | ------------------------------- |
| 模型、API Key、Agent 人格 | 前端**设置**，由服务端持久化                |
| 技能、MCP、定时任务、目标      | 前端 UI + 服务端 API                 |
| 记忆浏览 / 审批 / 删除      | 前端**记忆**面板                      |
| 沙箱文件与代码执行           | Harness 在 per-user 沙箱内（非原始 SSH） |
| SaaS 计费与网关工具        | 控制平面（`DEPLOY_MODE` 为 SaaS 时）    |

## 部署模式（同一功能，不同打包）

| 模式            | 适合                 | 你得到什么                                                                         |
| ------------- | ------------------ | ----------------------------------------------------------------------------- |
| **本地 WebUI**  | 开发者、BYOK           | `localhost` 完整 GUI，数据留在本机                                                     |
| **Tauri 桌面端** | Mac/Win/Linux 日常使用 | Dock 图标、深链、无浏览器标签杂乱                                                           |
| **SaaS**      | 不想运维的团队            | 托管沙箱、Work Units、可选工具网关                                                        |
| **PWA**       | 手机添加到主屏            | 构建 `myrm-agent-frontend` 后从浏览器安装（见[开发环境](/zh/contributing/development-setup)） |

## 从其他 Agent 迁移

* **配置：** Hermes / OpenClaw 风格导出的导入路径（见**快速开始**）。
* **记忆：** Myrm 使用结构化 DB 记忆 + GUI——不是单个 `MEMORY.md` 文件。
* **技能：** 预置 + 社区发现；进化需审批。
* **渠道：** 35+ 内置提供商——在设置中重新绑定 OAuth/Token。

与 OpenClaw、Hermes、Claude Code 等的客观功能对比见[竞品对比](/zh/getting-started/competitor-comparison)。
如需在低负载条件下完成“开源产品层 + 闭源 harness 运行时”的可复现验收，请参考[分层验证作战手册](/zh/guides/layered-verification-playbook)。

## 下一步

<CardGroup cols={2}>
  <Card title="快速开始" icon="rocket" href="/zh/getting-started/quickstart">
    几分钟内本地运行。
  </Card>

  <Card title="记忆系统" icon="brain" href="/zh/core-concepts/memory-system">
    跨会话记忆如何工作。
  </Card>

  <Card title="沙箱运行时" icon="server" href="/zh/core-concepts/sandbox-runtime">
    工具实际执行的位置。
  </Card>

  <Card title="桌面应用" icon="desktop" href="/zh/getting-started/desktop-app">
    Tauri 打包与更新。
  </Card>
</CardGroup>
