# Hermes → GA 迁移 SOP v0.5

**一句话总结：Hermes 迁到 GA 时，只迁稳定记忆和 skill 索引；skill 默认不启用，先审查路径、再由用户确认。**

| 项 | 规则 |
|---|---|
| 源 | `~/.hermes` 和 `~/.hermes/profiles/<name>/` |
| 读 | `SOUL.md`、`memories/`、`skills/` |
| 写 | `../memory/global_mem.txt`、必要时 patch `../memory/global_mem_insight.txt` |
| Skill | 默认只进 `## [Skill索引]`，不复制、不启用 |

## 不能做

- 不迁移 `sessions/`、`logs/`、`sandboxes/`、`state.db*`、运行时缓存。
- 不覆盖 L1/L2：`global_mem_insight.txt` 只能词级 patch，`global_mem.txt` 只能追加。
- 不把 Hermes skill 原样复制到 GA 使用。
- 不把旧机器绝对路径、`../` 越级路径当作可执行路径。

## 1. 源定位

按顺序串行处理，每个源单独确认：

1. `Hermes(default)`：`~/.hermes`
2. `Hermes(<profile>)`：`~/.hermes/profiles/<name>/`

每个源只看：

- `SOUL.md`：人设/规则候选。
- `memories/*.md`：稳定事实候选，抽样精读即可。
- `skills/*/SKILL.md`：skill 用途和索引候选。

## 2. 三步流程

### A. 扫描

在 `../temp/` 生成每个源的扫描记录：

- `hermes_to_ga_v0.5_<agent>_memory_scan.md`
- `hermes_to_ga_v0.5_<agent>_skills_scan.md`

扫描只做清单和风险标注，不执行 skill 脚本。

### B. 提炼

- 稳定行为约束 → L2 `## [人设]`
- 用户长期偏好/画像 → L2 `## [用户]`
- 稳定路径、凭证指针、环境事实 → L2 对应章节
- 临时状态、会话、日志流水、缓存 → 丢弃
- Skill → 默认写 L2 `## [Skill索引]`

每条候选都标来源：`来源：<agent>/<file> 第 X 行`。写入前必须让用户确认。

### C. 写入

用户确认后才写：

1. 追加 `../memory/global_mem.txt`，不改写既有段。
2. 必要时 patch `../memory/global_mem_insight.txt`，只加短触发词。
3. 记录进度：`../temp/hermes_to_ga_v0.5_progress.md`。

## 3. Skill 处理

迁移来的 Hermes skill 默认不是 GA skill，只是可追溯资料源。

写入 `## [Skill索引]` 的最小格式：

```markdown
- <skill>：来源 <agent>/<path>；入口 <SKILL.md>；用途 <description 原文>；风险 <无/绝对路径/../越级/旧agent私有路径/硬编码资源路径>；状态 <仅索引/已改造启用>；用法 <回源读取并内化/直接启用>
```

启用前必须满足：

- 用户点名要启用。
- 已审查 `SKILL.md`、脚本、资源引用中的路径。
- 绝对路径改成用户确认的新路径或配置变量。
- `../` 越级引用改成 skill 内部相对路径，并搬入依赖资源。
- 无法确认路径时，不启用，只保留索引，后续需要时回源读取并内化。

启用目录：`../memory/imported_skills/<name>/`。

## 4. 收尾检查

- 每个 Hermes 源都有 memory scan 和 skill scan。
- L2 只追加，L1 只 patch。
- `## [Skill索引]` 记录了来源、用途、风险、状态。
- `imported_skills/` 里只有用户点名且路径改造完成的 skill。
- 未触碰 sessions/db/logs/runtime。
