# SOP 文件模板（MindOS 知识库）

在**把经验提炼成新 SOP** 或规范化现有流程文档时使用。文件放在知识库中**存放流程/规范**的目录下（常见名如 `Workflows/`、`SOPs/`、`流程/` 等——从 bootstrap 目录树推断，**不要写死**某个英文文件夹名）。

## 必须遵循的结构

```markdown
# SOP: {标题}
<!-- keywords: {3-5 个触发关键词，中英文} -->
<!-- last-used: {ISO date} -->
<!-- created: {ISO date} -->
<!-- requires-mcp: {逗号分隔，如 mindos；若仅本地读写且无 MCP 则写 none 并说明方式} -->
<!-- requires-kb-skills: {可选 — 必须遵循的 SKILL.md 路径或名称；无则写 none} -->

## 前置条件

**开始执行前**必须已满足的条件；若不满足应**中止或走降级分支**（不要默认环境齐全）。

| 类型 | 写什么 |
|------|--------|
| **MCP / 工具** | 依赖哪些 MCP 或工具族（如 `mindos`、浏览器、git）。若流程只用 MindOS 文件能力，写明 `mindos` 或实际所用。 |
| **Agent 技能** | 执行方必须已加载或可读取的知识库内/宿主侧 Skill（如 `skills/foo/SKILL.md`，或「遵循根目录 INSTRUCTION.md §X」）。 |
| **环境 / 账号** | 是否依赖 CLI、网络、API Key、登录态、操作系统等。 |
| **知识库状态** | 必须先存在的文件、目录、表格或种子笔记。 |

若**无**特殊依赖，请显式写：**无 — 仅需 MindOS MCP（或等价能力）即可。**

## 适用场景

什么情况下该用这个 SOP。触发条件、面向对象，以及**非目标**（本 SOP 明确不覆盖什么）。

## 输入与产出（建议写）

- **输入**：用户或 Agent 必须提供的信息（路径、决策、原始材料等）。
- **产出**：会生成或更新哪些产物（文件、对外消息等）。

## 步骤

每步包含：
1. **做什么** — 具体操作
2. **判断分支** — 遇到 X 走 A，遇到 Y 走 B（无分支则标注"无"）
3. **失败处理** — 这步可能失败的情况和应对

## 退出条件

什么时候算完成，什么时候该放弃或升级。

## 踩坑记录

已知的边界 case 和教训。每次执行遇到新坑时追加。
```

## 元数据（HTML 注释）

| 标签 | 用途 |
|------|------|
| **`keywords`** | 供 `mindos_search_notes` 等召回，配合多关键词搜索；中英文都要有。 |
| **`last-used`** | 每次按该 SOP 执行后更新为当天日期。 |
| **`created`** | 创建时设置一次。 |
| **`requires-mcp`** | 快速扫一眼：依赖哪些 MCP（或 `none`）。 |
| **`requires-kb-skills`** | 可选：依赖的知识库内 Skill；无则 `none`。 |

按需可选：

- **`<!-- related: path/to/other-sop.md -->`** — 被替代、依赖、或成对使用的其他 SOP。
- **`<!-- owner: 维护人 -->`** — 谁负责迭代本 SOP。
- **`<!-- review-by: YYYY-MM -->`** — 提醒在工具/产品变更后复核是否仍成立。

## 编写提示

- **前置条件 vs 适用场景**：前置条件 = 开跑前硬门槛；适用场景 = 在众多流程里**何时选**这一条。
- **降级路径**：若某 MCP 或 Skill 不可用，在**第一步**就写分支（「若工具不可用 → 提示用户开启 X / 改用手动清单 Y」）。
- **keywords 要稳**：避免一次性错拼；把你会用来搜的同义词写进去。
- **关联 SOP**：在前置条件或适用场景下加「参见 xxx.md」，减少多份文档互相漂移。
