diff --git a/docs/system-design/24-company-layer-architecture.md b/docs/system-design/24-company-layer-architecture.md
index 82aec30..c6e6194 100644
--- a/docs/system-design/24-company-layer-architecture.md
+++ b/docs/system-design/24-company-layer-architecture.md
@@ -89,36 +89,33 @@ data/agents/
```
data/
-├── agents/ ← 全局 Agent(Master + 跨公司工具类 Agent)
+├── agents/ ← 全局 Agent(Master + 跨公司基础设施 Agent)
│ ├── master/
│ ├── agent-creator/
│ └── innovator/
│
-├── companies/ ← 📦 新增:公司实例目录
-│ ├── wechat-media-co/ ← 公司实例 1
-│ │ ├── company.json ← 公司元数据
-│ │ ├── sop.md ← 公司 SOP(运营标准流程)
-│ │ ├── agents/ ← 该公司的专属 Agent 池
-│ │ │ ├── ceo/
-│ │ │ ├── content-writer/
-│ │ │ ├── editor/
-│ │ │ ├── publisher/
-│ │ │ └── data-analyst/
-│ │ ├── goals/ ← 该公司的 OKR 树
-│ │ │ └── G-001/
-│ │ ├── pipelines/ ← 该公司的 SOP 流水线定义
-│ │ │ └── daily-content.json
-│ │ └── workspace/ ← 该公司的共享工作区
-│ │ ├── content/
-│ │ └── assets/
-│ │
-│ └── manga-studio/ ← 公司实例 2
-│ ├── company.json
-│ ├── agents/
-│ ├── goals/
-│ └── ...
+├── templates/ ← 📦 Agent 模板库(招聘时优先查找)
+│ ├── ceo/ ← CEO 通用模板
+│ ├── qa-judge/ ← 质量仲裁模板
+│ ├── content-writer/ ← 内容写手模板
+│ ├── editor/ ← 编辑模板
+│ ├── video-editor/ ← 剪辑师模板
+│ ├── hot-topic-hunter/ ← 热点搜索模板
+│ └── data-analyst/ ← 数据分析师模板
│
-└── goals/ ← 全局 OKR (跨公司的顶层战略目标)
+├── {company-id}/ ← 公司实例(顶层目录,扁平化)
+│ ├── company.json ← 公司元数据 + 状态 + 配置
+│ ├── sop.md ← 公司 SOP(运营标准流程)
+│ ├── agents/ ← 该公司的专属 Agent 池
+│ │ ├── ceo/
+│ │ ├── content-writer/
+│ │ ├── editor/
+│ │ └── data-analyst/
+│ ├── goals/ ← 该公司的 OKR 树(所有目标都在公司层级下)
+│ ├── pipelines/ ← 该公司的 SOP 流水线定义
+│ └── workspace/ ← 该公司的共享工作区(成品、品牌资产)
+│
+└── skills/ ← 全局 Skill(可被任何公司的 Agent 调用)
```
### 3.2 company.json 结构
@@ -132,20 +129,14 @@ data/
"createdAt": "2026-03-25T17:00:00Z",
"createdBy": "master",
- "ceo": "ceo-wechat",
+ "ceo": "ceo",
"sop": {
"pipeline": "daily-content",
"description": "选题 → 写稿 → 审核 → 排版 → 发布 → 数据回收"
},
- "agents": [
- "ceo-wechat",
- "content-writer-01",
- "editor-01",
- "publisher-01",
- "data-analyst-01"
- ],
+ "agents": ["ceo", "content-writer", "editor", "publisher", "data-analyst"],
"heartbeat": {
"enabled": true,
@@ -165,37 +156,213 @@ data/
---
-## 四、生命周期流程
+## 四、Agent 招聘系统 (Hiring Pipeline)
+
+> **核心理念**: 公司需要某个角色时,不是凭空创造,而是走一套完整的**招聘流程**——
+> 先从人才市场(模板库)找现成的,找不到就培养一个新人,培训合格后才能上岗。
-### 4.1 公司创建流程
+### 4.1 招聘流程总览
+
+```mermaid
+flowchart TD
+ A["CEO 需要一个角色
(如: 热点搜索员)"] --> B{"在 templates/ 中
查找匹配模板?"}
+
+ B -->|"✅ 找到模板"| C["复制模板到
公司 agents/ 目录"]
+ C --> D["注入公司上下文
(改写 agent.md, soul.md, user.md)"]
+ D --> E["直接上岗 ✅"]
+
+ B -->|"❌ 模板库无此角色"| F["调用 agent-creator
从零创建 Agent 骨架"]
+ F --> G["调用 innovator
进入 FDE 训练流水线"]
+ G --> H{"Benchmark
评分 ≥ 95?"}
+
+ H -->|"❌ 不合格"| I["继续 Evolve 迭代
(自动重训)"]
+ I --> H
+
+ H -->|"✅ 合格"| J["毕业 → 存入 templates/
(供未来复用)"]
+ J --> C
+```
+
+### 4.2 招聘三阶段详解
+
+#### 阶段 A: 模板库查找 (Template Lookup)
+
+```javascript
+// 伪代码: hire(roleName, companyId)
+function hire(roleName, companyId) {
+ const templateDir = path.join(DATA_DIR, 'templates', roleName);
+
+ if (fs.existsSync(templateDir)) {
+ // ✅ 模板存在 → 直接复制 + 定制
+ copyDir(templateDir, `data/${companyId}/agents/${roleName}/`);
+ injectCompanyContext(companyId, roleName);
+ return { status: 'hired_from_template', ready: true };
+ } else {
+ // ❌ 模板不存在 → 进入培养流程
+ return trainNewAgent(roleName, companyId);
+ }
+}
+```
+
+**模板库是不断扩充的人才市场**:
+- 初始模板:`ceo`, `qa-judge`, `content-writer`, `editor` 等通用角色
+- 每次从零培养的新角色,训练合格后**自动沉淀回 `templates/`**,下次招聘同类角色时就能直接使用
+- 模板只保存骨架(agent.md, soul.md, skills/, config.json),不带记忆和工作区
+
+#### 阶段 B: 从零培养 (Create + Train)
+
+当模板库中没有对应角色时,进入培养流水线:
+
+```
+Step 1: agent-creator 创建骨架
+ → 生成 agent.md, soul.md, identity.md, config.json
+ → 定义角色的核心职责和工具清单
+ → 此时 Agent 状态为 "training"(不可执行正式任务)
+
+Step 2: innovator 执行 FDE 训练
+ → F (Find): 调研该角色领域的最佳实践和行业知识
+ → D (Digest): 消化知识转化为 Agent 的技能定义 (SKILL.md)
+ → E (Evolve): 循环迭代优化,直到技能评分达标
+
+Step 3: Benchmark 评估
+ → 运行标准化的能力测试用例
+ → 评分维度:任务完成度、输出质量、工具使用准确性、响应时间
+ → 合格线:综合评分 ≥ 95 分
+```
+
+#### 阶段 C: 合格上岗 + 模板沉淀
+
+```
+训练合格后:
+ 1. Agent 状态从 "training" → "ready"
+ 2. 复制干净骨架到 templates/ (不含训练过程中的 memory 和 workspace)
+ 3. 注入公司上下文到公司实例
+ 4. 正式加入公司 agents/ 池
+ 5. 更新 company.json 的 agents 列表
+ 6. CEO 收到通知:"新员工 {roleName} 已入职"
+```
+
+### 4.3 Agent 状态机
+
+```
+ ┌── training ──► ready ──► active
+ │ │
+ (从零培养) │ │ (公司暂停/开除)
+ │ ▼
+ │ suspended
+ │
+ (模板复制) └── ready ─────────────► active
+```
+
+| 状态 | 含义 | 能否接任务 |
+|------|------|-----------|
+| `training` | 正在被 Innovator 训练中,Benchmark 尚未达标 | ❌ 不能 |
+| `ready` | 训练完毕或模板复制完毕,等待上岗 | ❌ 等待分配 |
+| `active` | 已加入公司,处于正式工作状态 | ✅ 能 |
+| `suspended` | 被 CEO 暂停(表现不佳或公司调整) | ❌ 暂停 |
+
+### 4.4 模板库管理
+
+模板库 `data/templates/` 是一个**不断进化的人才市场**:
+
+```
+data/templates/
+├── ceo/ ← 通用 CEO 模板
+│ ├── agent.md ← 通用的 CEO 职责(不含特定公司信息)
+│ ├── soul.md ← CEO 通用思维模式
+│ ├── identity.md
+│ ├── config.json ← type: "cxo"
+│ └── skills/ ← CEO 通用技能
+│
+├── content-writer/ ← 内容写手模板
+├── video-editor/ ← 剪辑师模板
+├── hot-topic-hunter/ ← 热点搜索员模板
+├── data-analyst/ ← 数据分析师模板
+├── qa-judge/ ← 质量仲裁模板
+│
+└── _registry.json ← 模板注册表(索引所有可用模板)
+```
+
+**`_registry.json` 结构**:
+```json
+[
+ {
+ "id": "ceo",
+ "name": "CEO / 首席执行官",
+ "type": "cxo",
+ "description": "公司战略规划、团队管理、OKR 制定",
+ "benchmarkScore": 97,
+ "trainedAt": "2026-03-20",
+ "usedCount": 3
+ },
+ {
+ "id": "hot-topic-hunter",
+ "name": "热点搜索员",
+ "type": "specialist",
+ "description": "全网热点监控、选题建议、趋势分析",
+ "benchmarkScore": 96,
+ "trainedAt": "2026-03-25",
+ "usedCount": 0
+ }
+]
+```
+
+### 4.5 复制时的上下文注入
+
+从模板复制到公司后,必须改写以下文件:
+
+| 文件 | 注入内容 |
+|------|---------|
+| `agent.md` | 追加:所属公司名称、公司使命、公司特定的约束规则 |
+| `soul.md` | 追加:公司文化和价值观(如"我们是一家注重数据驱动的自媒体") |
+| `user.md` | 重写:上级是该公司的 CEO(而非 Master),写入 CEO 的偏好 |
+| `config.json` | 添加 `companyId` 字段,更新 `parent_id` |
+| `memory/memory.md` | 初始化为空白(新公司、新记忆,不继承模板记忆) |
+
+---
+
+## 五、生命周期流程
+
+### 5.1 公司创建 + 招聘全流程
```mermaid
sequenceDiagram
participant User as 用户
participant Master as Master Agent
participant System as 系统 API
+ participant AC as agent-creator
+ participant Inno as innovator
participant CEO as 新 CEO Agent
User->>Master: "帮我创建一家做公众号运营的公司"
Master->>Master: 理解意图 → 确定公司定位和核心 SOP
Master->>System: POST /api/company/create
- Note over System: 1. mkdir data/companies/wechat-media-co/
2. 生成 company.json
3. 初始化 agents/, goals/, workspace/
+ Note over System: 1. mkdir data/wechat-media-co/
2. 生成 company.json
3. 初始化 agents/, goals/, workspace/
System-->>Master: ✅ 公司创建成功
-
- Master->>System: POST /api/company/:id/hire-ceo
- Note over System: 1. 使用 agent-creator 创建 CEO Agent
2. CEO agent.md 写入公司使命
3. CEO user.md 写入:上级是 Master
- System-->>Master: ✅ CEO 已上任
-
+
+ Master->>System: POST /api/company/:id/hire { role: "ceo" }
+ Note over System: 在 templates/ 查找 "ceo" → ✅ 找到
+ System->>System: 复制 templates/ceo → wechat-media-co/agents/ceo/
+ System->>System: 注入公司上下文 (agent.md, user.md)
+ System-->>Master: ✅ CEO 已入职
+
Master->>CEO: TaskDispatch: "你是这家公司的 CEO,请规划战略并组建团队"
-
- CEO->>CEO: 分析公司定位 → 设计内容流水线 SOP
- CEO->>System: POST /api/company/:id/agents/create (批量创建)
- Note over CEO: 创建: 内容策划、写手、编辑、发布、数据分析
+
+ CEO->>CEO: 分析公司定位 → 确定需要哪些角色
+ CEO->>System: POST /api/company/:id/hire { role: "content-writer" }
+ Note over System: templates/ 查找 → ✅ 找到 → 复制 + 注入
+ CEO->>System: POST /api/company/:id/hire { role: "hot-topic-hunter" }
+ Note over System: templates/ 查找 → ❌ 没有
+ System->>AC: 创建 "hot-topic-hunter" Agent 骨架
+ AC-->>System: 骨架已就绪
+ System->>Inno: 启动 FDE 训练 (hot-topic-hunter)
+ Inno->>Inno: Find → Digest → Evolve (循环至 ≥95)
+ Inno-->>System: ✅ Benchmark 97 分,训练合格
+ System->>System: 沉淀到 templates/hot-topic-hunter/
+ System->>System: 复制到 wechat-media-co/agents/ + 注入上下文
+ System-->>CEO: ✅ 热点搜索员已入职
+
CEO->>System: POST /api/company/:id/goals/create
- Note over CEO: 创建: 公司 OKR(如:30天粉丝破万)
CEO->>System: POST /api/company/:id/pipelines/create
- Note over CEO: 定义: 每日内容产出 SOP 流水线
-
CEO-->>Master: "团队组建完毕,流水线已就绪,开始自主运行"
```
@@ -250,9 +417,9 @@ sequenceDiagram
---
-## 五、API 设计
+## 六、API 设计
-### 5.1 Company CRUD
+### 6.1 Company CRUD
| 方法 | 路径 | 说明 |
|------|------|------|
@@ -262,22 +429,31 @@ sequenceDiagram
| `PUT` | `/api/company/:companyId` | 更新公司信息 |
| `POST` | `/api/company/:companyId/shutdown` | 关停公司 |
-### 5.2 Company 内部:Agent 管理
+### 6.2 招聘与 Agent 管理
| 方法 | 路径 | 说明 |
|------|------|------|
-| `POST` | `/api/company/:companyId/agents/create` | 在公司内创建 Agent |
+| `POST` | `/api/company/:companyId/hire` | 招聘 Agent (模板优先 → 培养兜底) |
| `GET` | `/api/company/:companyId/agents` | 列出公司内所有 Agent |
-| `POST` | `/api/company/:companyId/hire-ceo` | 为公司任命 CEO |
+| `POST` | `/api/company/:companyId/agent/:agentId/chat` | 与公司内 Agent 对话 |
+| `POST` | `/api/company/:companyId/fire` | 解雇 Agent (suspend) |
-### 5.3 Company 内部:OKR 管理
+### 6.3 模板库
| 方法 | 路径 | 说明 |
|------|------|------|
-| `POST` | `/api/company/:companyId/goals/create` | 创建公司级 OKR |
+| `GET` | `/api/templates` | 列出所有可用模板 |
+| `GET` | `/api/templates/:templateId` | 查看模板详情 |
+
+### 6.4 Company 内部:OKR 管理
+
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| `POST` | `/api/company/:companyId/goals/create` | 创建公司 OKR |
| `GET` | `/api/company/:companyId/goals` | 获取公司 OKR 列表 |
+| `PUT` | `/api/company/:companyId/goals/:goalId` | 更新 OKR 节点 |
-### 5.4 Company 运营
+### 6.5 Company 运营
| 方法 | 路径 | 说明 |
|------|------|------|
@@ -286,94 +462,102 @@ sequenceDiagram
---
-## 六、与现有系统的兼容设计
+## 七、与现有系统的兼容设计
-### 6.1 Agent 寻址变化
+### 7.1 Agent 寻址变化
当前系统的 Agent 通过 `agentId` 全局唯一寻址(如 `ceo`)。
引入 Company 后,Agent 的寻址变为 **Company 限定**:
```javascript
-// 旧: 全局 Agent
-const agentDir = path.join(DATA_DIR, agentId);
-// 即: data/agents/ceo/
+// 全局 Agent(不属于任何公司)
+const agentDir = path.join(DATA_DIR, 'agents', agentId);
+// 即: data/agents/master/
-// 新: 公司内 Agent
-const agentDir = path.join(COMPANIES_DIR, companyId, 'agents', agentId);
-// 即: data/companies/wechat-media-co/agents/ceo-wechat/
-
-// 新: 全局 Agent(不属于任何公司)
-const agentDir = path.join(DATA_DIR, agentId);
-// 即: data/agents/master/ ← 不变
+// 公司内 Agent
+const agentDir = path.join(DATA_DIR, companyId, 'agents', agentId);
+// 即: data/wechat-media-co/agents/ceo/
```
**兼容策略**:
- `config.json` 增加 `companyId` 字段(可选)。
-- **有 `companyId`** → 在 `data/companies/{companyId}/agents/` 下。
+- **有 `companyId`** → 在 `data/{companyId}/agents/` 下。
- **无 `companyId`** → 在 `data/agents/` 下(全局)。
-- 路由层通过 resolveAgentDir(agentId) 统一封装,向上层透明化。
+- 路由层通过 `resolveAgentDir(companyId, agentId)` 统一封装,向上层透明化。
+
+### 7.2 OKR/Goals — 全部归属 Company
-### 6.2 OKR/Goals 隔离
+Goals/OKR 不再有全局作用域。**每个 Goal 都必须隶属于一个 Company**:
```
-data/goals/ ← 全局大盘(跨公司的顶级战略目标)
-data/companies/{co}/goals/ ← 公司内部的执行类 OKR
+data/wechat-media-co/goals/G-001/ ← 自媒体公司的 OKR
+data/manga-studio/goals/G-001/ ← 漫剧公司的 OKR(ID 互不冲突)
```
-GoalsService 增加一个 `scope` 参数:
-- `scope = 'global'` → 读写 `data/goals/`
-- `scope = companyId` → 读写 `data/companies/{companyId}/goals/`
+GoalsService 改造:
+- 构造时必须传入 `companyId`:`new GoalsService(companyId)`
+- 数据路径变为 `data/{companyId}/goals/`
+- `_index.json` 也随之放在公司目录下
-### 6.3 Memory 隔离
+### 7.3 Memory 隔离
-Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下(`agents/{id}/memory/`)。
-当公司内的 Agent 在 `data/companies/{co}/agents/{id}/memory/` 下时,自动与全局 Agent 的记忆完全隔离。无代码改动。
+Memory 天然隔离:因为 Memory 存储在各个 Agent 的目录下。
+公司内的 Agent 在 `data/{companyId}/agents/{agentId}/memory/` 下,自动与其他公司和全局 Agent 的记忆完全隔离。无额外代码改动。
-### 6.4 Heartbeat 集成
+### 7.4 Heartbeat 集成
HeartbeatService 扩展扫描范围:
-- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent。
-- 遍历 `data/companies/*/agents/` 下有 `heartbeat.enabled` 的公司内 Agent。
-- 可以在 `company.json` 层级设置整个公司的心跳开关。
+- 遍历 `data/agents/` 下有 `heartbeat.enabled` 的全局 Agent(如 master)。
+- 遍历每个 `data/{companyId}/` 下,读取 `company.json` 的心跳配置。
+- 若公司心跳开启,唤醒该公司的 CEO 作为入口(CEO 自行决定唤醒下属)。
---
-## 七、实现计划 — Todo List
+## 八、实现计划 — Todo List
+
+### Phase 1: 数据结构 + 模板库基础
+
+- [ ] **1.1** 创建 `data/templates/` 目录,迁移现有 Agent 为模板(ceo, qa-judge 等)
+- [ ] **1.2** 实现 `company-service.js`:Company CRUD (create / get / list / shutdown)
+- [ ] **1.3** 实现 `resolveAgentDir(companyId, agentId)` 统一寻址函数
+- [ ] **1.4** 实现 `_registry.json` 模板注册表,记录模板的 benchmarkScore、usedCount
-### Phase 1: 数据结构基础
+### Phase 2: Agent 招聘系统 (Hiring Pipeline)
-- [ ] **1.1** 创建 `data/companies/` 目录和 `company-service.js`
-- [ ] **1.2** 实现 Company CRUD:create / get / list / update / shutdown
-- [ ] **1.3** 实现 `resolveAgentDir(agentId, companyId?)` 统一寻址函数
-- [ ] **1.4** 修改 `agent-chat.js` 路由支持 `companyId` 上下文
+- [ ] **2.1** 实现 `POST /api/company/:id/hire` — 模板查找 → 复制 → 上下文注入
+- [ ] **2.2** 招聘兜底:模板不存在时自动调用 `agent-creator` 创建 + `innovator` FDE 训练
+- [ ] **2.3** Benchmark 质量门禁:评分 ≥ 95 才允许上岗,不合格自动 re-evolve
+- [ ] **2.4** 训练合格后自动沉淀骨架到 `templates/`,更新 `_registry.json`
-### Phase 2: CEO 自动建制
+### Phase 3: CEO 自动建制 + OKR
-- [ ] **2.1** 实现 `POST /api/company/:id/hire-ceo`(调用 agent-creator 并自动填充上下文)
-- [ ] **2.2** CEO 的 `agent.md` 模板:包含公司使命、员工创建权限、SOP 设计权限
-- [ ] **2.3** CEO 首次运行后自动规划(通过 TaskDispatch 触发"规划战略并组建团队")
+- [ ] **3.1** 公司创建后自动招聘 CEO(从模板),CEO agent.md 注入公司使命
+- [ ] **3.2** CEO 首次运行后自主规划:确定角色需求 → 批量调用 hire API → 创建 OKR
+- [ ] **3.3** GoalsService 改造:所有 OKR 存储在 `data/{companyId}/goals/` 下
-### Phase 3: SOP 流水线
+### Phase 4: SOP 流水线
-- [ ] **3.1** 设计 Pipeline 数据结构(`pipelines/*.json`)
-- [ ] **3.2** 实现 Pipeline 执行引擎(按步骤自动触发对应 Agent)
-- [ ] **3.3** CEO 可以通过工具动态调整 Pipeline
+- [ ] **4.1** 设计 Pipeline 数据结构(`{companyId}/pipelines/*.json`)
+- [ ] **4.2** 实现 Pipeline 执行引擎(按步骤自动触发公司内对应 Agent)
+- [ ] **4.3** CEO 可以通过工具动态调整 Pipeline
-### Phase 4: 前端 Dashboard
+### Phase 5: 前端 Dashboard
-- [ ] **4.1** 公司列表页(展示所有公司卡片 + 运行状态)
-- [ ] **4.2** 公司详情页(组织架构图 + OKR 大盘 + Agent 列表)
-- [ ] **4.3** 公司日报/周报自动生成与展示
+- [ ] **5.1** 公司列表页(展示所有公司卡片 + 运行状态 + 员工数)
+- [ ] **5.2** 公司详情页(组织架构图 + 公司 OKR 大盘 + Agent 列表 + 招聘状态)
+- [ ] **5.3** 模板库页面(展示所有可用模板、评分、使用次数)
+- [ ] **5.4** 公司日报/周报自动生成与展示
---
-## 八、关键技术决策
+## 九、关键技术决策
| # | 问题 | 决策 | 说明 |
|---|------|------|------|
-| 1 | Agent ID 全局唯一还是公司内唯一? | **全局唯一** | 使用 `{role}-{companySlug}` 命名法,如 `ceo-wechat` |
-| 2 | 原有的 `data/agents/ceo` 怎么处理? | **渐进迁移** | 旧的全局 Agent 保留不动,新建公司时在 companies 下创建 |
-| 3 | Company 的 CEO 是新建还是复用? | **每家公司新建独立 CEO** | 避免记忆污染和注意力分散 |
+| 1 | Agent ID 全局唯一还是公司内唯一? | **公司内唯一** | 如 ceo 在每家公司内都叫 ceo,通过 companyId + agentId 联合定位 |
+| 2 | 原有 `data/agents/` 里的 Agent | **迁移为模板** | ceo、qa-judge 等迁入 `data/templates/`,master/innovator 保留为全局 |
+| 3 | 招聘时模板不存在怎么办? | **agent-creator 创建 + innovator 训练到 ≥95** | 训练合格后自动沉淀为新模板,下次复用 |
| 4 | Company 可以嵌套 Company 吗? | **v1.0 不支持** | 先做单层,未来有需求再做集团架构 |
-| 5 | 跨公司 Agent 共享(如 innovator)| **全局 Agent 池** | `data/agents/` 下的 Agent 可以被任何公司调用 |
-| 6 | 公司的"关停"语义 | **软关停** | 标记 status=shutdown,停止心跳,保留数据 |
+| 5 | 跨公司 Agent 共享(如 innovator) | **全局 Agent 池** | `data/agents/` 下的 Agent 可被任何公司调用 |
+| 6 | 公司的"关停"语义 | **软关停** | status=shutdown,停止心跳,保留数据 |
+| 7 | Goals/OKR 作用域 | **全部归属 Company** | 不设全局 OKR,每个目标都隶属于一个具体公司 |